Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 41 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Set Approval For... | 16331108 | 1183 days ago | IN | 0 ETH | 0.00102419 | ||||
| Set Approval For... | 16068185 | 1219 days ago | IN | 0 ETH | 0.00085623 | ||||
| Transfer | 16066425 | 1220 days ago | IN | 0 ETH | 0.00120434 | ||||
| Set Approval For... | 16061945 | 1220 days ago | IN | 0 ETH | 0.00064871 | ||||
| Transfer | 16061908 | 1220 days ago | IN | 0 ETH | 0.00113625 | ||||
| Set Approval For... | 16061826 | 1220 days ago | IN | 0 ETH | 0.00068772 | ||||
| Transfer | 16061767 | 1220 days ago | IN | 0 ETH | 0.00118993 | ||||
| Transfer | 16061710 | 1220 days ago | IN | 0.00002 ETH | 0.00021841 | ||||
| Transfer | 16058525 | 1221 days ago | IN | 0 ETH | 0.00116908 | ||||
| Transfer | 16056209 | 1221 days ago | IN | 0 ETH | 0.00023263 | ||||
| Set Approval For... | 16056160 | 1221 days ago | IN | 0 ETH | 0.00086551 | ||||
| Transfer | 16056125 | 1221 days ago | IN | 0 ETH | 0.00134635 | ||||
| Transfer | 16056008 | 1221 days ago | IN | 0 ETH | 0.00129407 | ||||
| Transfer | 16055951 | 1221 days ago | IN | 0 ETH | 0.00127077 | ||||
| Transfer | 16055940 | 1221 days ago | IN | 0.02 ETH | 0.00024814 | ||||
| Set Approval For... | 16055920 | 1221 days ago | IN | 0 ETH | 0.00081551 | ||||
| Transfer | 16055711 | 1221 days ago | IN | 0 ETH | 0.00137664 | ||||
| Transfer | 16055683 | 1221 days ago | IN | 0 ETH | 0.00125186 | ||||
| Transfer | 16055676 | 1221 days ago | IN | 0 ETH | 0.00117057 | ||||
| Transfer | 16055673 | 1221 days ago | IN | 0 ETH | 0.00129264 | ||||
| Transfer | 16055668 | 1221 days ago | IN | 0 ETH | 0.00115411 | ||||
| Transfer | 16055667 | 1221 days ago | IN | 0 ETH | 0.00104448 | ||||
| Transfer | 16055662 | 1221 days ago | IN | 0 ETH | 0.00111122 | ||||
| Transfer | 16055660 | 1221 days ago | IN | 0 ETH | 0.0010929 | ||||
| Transfer | 16055658 | 1221 days ago | IN | 0 ETH | 0.00114106 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Dabloons
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-11-26
*/
// File: New World Money/filter/IOperatorFilterRegistry.sol
pragma solidity ^0.8.17;
interface IOperatorFilterRegistry {
function isOperatorAllowed(address registrant, address operator) external view returns (bool);
function register(address registrant) external;
function registerAndSubscribe(address registrant, address subscription) external;
function registerAndCopyEntries(address registrant, address registrantToCopy) external;
function unregister(address addr) external;
function updateOperator(address registrant, address operator, bool filtered) external;
function updateOperators(address registrant, address[] calldata operators, bool filtered) external;
function updateCodeHash(address registrant, bytes32 codehash, bool filtered) external;
function updateCodeHashes(address registrant, bytes32[] calldata codeHashes, bool filtered) external;
function subscribe(address registrant, address registrantToSubscribe) external;
function unsubscribe(address registrant, bool copyExistingEntries) external;
function subscriptionOf(address addr) external returns (address registrant);
function subscribers(address registrant) external returns (address[] memory);
function subscriberAt(address registrant, uint256 index) external returns (address);
function copyEntriesOf(address registrant, address registrantToCopy) external;
function isOperatorFiltered(address registrant, address operator) external returns (bool);
function isCodeHashOfFiltered(address registrant, address operatorWithCode) external returns (bool);
function isCodeHashFiltered(address registrant, bytes32 codeHash) external returns (bool);
function filteredOperators(address addr) external returns (address[] memory);
function filteredCodeHashes(address addr) external returns (bytes32[] memory);
function filteredOperatorAt(address registrant, uint256 index) external returns (address);
function filteredCodeHashAt(address registrant, uint256 index) external returns (bytes32);
function isRegistered(address addr) external returns (bool);
function codeHashOf(address addr) external returns (bytes32);
}
// File: New World Money/filter/OperatorFilterer.sol
pragma solidity ^0.8.17;
/**
* @title OperatorFilterer
* @notice Abstract contract whose constructor automatically registers and optionally subscribes to or copies another
* registrant's entries in the OperatorFilterRegistry.
* @dev This smart contract is meant to be inherited by token contracts so they can use the following:
* - `onlyAllowedOperator` modifier for `transferFrom` and `safeTransferFrom` methods.
* - `onlyAllowedOperatorApproval` modifier for `approve` and `setApprovalForAll` methods.
*/
abstract contract OperatorFilterer {
error OperatorNotAllowed(address operator);
IOperatorFilterRegistry public constant OPERATOR_FILTER_REGISTRY =
IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E);
bool internal filterAllowed = true;
mapping(address => bool) internal internallyAllowed;
constructor(address subscriptionOrRegistrantToCopy, bool subscribe) {
// If an inheriting token contract is deployed to a network without the registry deployed, the modifier
// will not revert, but the contract will need to be registered with the registry once it is deployed in
// order for the modifier to filter addresses.
if (address(OPERATOR_FILTER_REGISTRY).code.length > 0) {
if (subscribe) {
OPERATOR_FILTER_REGISTRY.registerAndSubscribe(address(this), subscriptionOrRegistrantToCopy);
} else {
if (subscriptionOrRegistrantToCopy != address(0)) {
OPERATOR_FILTER_REGISTRY.registerAndCopyEntries(address(this), subscriptionOrRegistrantToCopy);
} else {
OPERATOR_FILTER_REGISTRY.register(address(this));
}
}
}
}
modifier onlyAllowedOperator(address from) virtual {
if(internallyAllowed[from]) {
_;
return;
} else
// Check registry code length to facilitate testing in environments without a deployed registry.
if (filterAllowed && address(OPERATOR_FILTER_REGISTRY).code.length > 0) {
// Allow spending tokens from addresses with balance
// Note that this still allows listings and marketplaces with escrow to transfer tokens if transferred
// from an EOA.
if (from == msg.sender) {
_;
return;
}
if (!OPERATOR_FILTER_REGISTRY.isOperatorAllowed(address(this), msg.sender)) {
revert OperatorNotAllowed(msg.sender);
}
}
_;
}
modifier onlyAllowedOperatorApproval(address operator) virtual {
if(internallyAllowed[operator]) {
_;
return;
} else
// Check registry code length to facilitate testing in environments without a deployed registry.
if (filterAllowed && address(OPERATOR_FILTER_REGISTRY).code.length > 0) {
if (!OPERATOR_FILTER_REGISTRY.isOperatorAllowed(address(this), operator)) {
revert OperatorNotAllowed(operator);
}
}
_;
}
}
// File: New World Money/filter/DefaultOperatorFilterer.sol
pragma solidity ^0.8.17;
/**
* @title DefaultOperatorFilterer
* @notice Inherits from OperatorFilterer and automatically subscribes to the default OpenSea subscription.
*/
abstract contract DefaultOperatorFilterer is OperatorFilterer {
address constant DEFAULT_SUBSCRIPTION = address(0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6);
constructor() OperatorFilterer(DEFAULT_SUBSCRIPTION, true) {}
}
// File: @openzeppelin/contracts/utils/Strings.sol
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)
pragma solidity ^0.8.0;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
// Inspired by OraclizeAPI's implementation - MIT licence
// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
*/
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _HEX_SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
}
// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: @openzeppelin/contracts/utils/Address.sol
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)
pragma solidity ^0.8.0;
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
interface IERC721Receiver {
/**
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
* by `operator` from `from`, this function is called.
*
* It must return its Solidity selector to confirm the token transfer.
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
*
* The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: @openzeppelin/contracts/interfaces/IERC2981.sol
// OpenZeppelin Contracts (last updated v4.6.0) (interfaces/IERC2981.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface for the NFT Royalty Standard.
*
* A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal
* support for royalty payments across all NFT marketplaces and ecosystem participants.
*
* _Available since v4.5._
*/
interface IERC2981 is IERC165 {
/**
* @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of
* exchange. The royalty amount is denominated and should be paid in that same unit of exchange.
*/
function royaltyInfo(uint256 tokenId, uint256 salePrice)
external
view
returns (address receiver, uint256 royaltyAmount);
}
// File: @openzeppelin/contracts/utils/introspection/ERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*
* Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
// File: @openzeppelin/contracts/token/common/ERC2981.sol
// OpenZeppelin Contracts (last updated v4.7.0) (token/common/ERC2981.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of the NFT Royalty Standard, a standardized way to retrieve royalty payment information.
*
* Royalty information can be specified globally for all token ids via {_setDefaultRoyalty}, and/or individually for
* specific token ids via {_setTokenRoyalty}. The latter takes precedence over the first.
*
* Royalty is specified as a fraction of sale price. {_feeDenominator} is overridable but defaults to 10000, meaning the
* fee is specified in basis points by default.
*
* IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See
* https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the EIP. Marketplaces are expected to
* voluntarily pay royalties together with sales, but note that this standard is not yet widely supported.
*
* _Available since v4.5._
*/
abstract contract ERC2981 is IERC2981, ERC165 {
struct RoyaltyInfo {
address receiver;
uint96 royaltyFraction;
}
RoyaltyInfo private _defaultRoyaltyInfo;
mapping(uint256 => RoyaltyInfo) private _tokenRoyaltyInfo;
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC165) returns (bool) {
return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId);
}
/**
* @inheritdoc IERC2981
*/
function royaltyInfo(uint256 _tokenId, uint256 _salePrice) public view virtual override returns (address, uint256) {
RoyaltyInfo memory royalty = _tokenRoyaltyInfo[_tokenId];
if (royalty.receiver == address(0)) {
royalty = _defaultRoyaltyInfo;
}
uint256 royaltyAmount = (_salePrice * royalty.royaltyFraction) / _feeDenominator();
return (royalty.receiver, royaltyAmount);
}
/**
* @dev The denominator with which to interpret the fee set in {_setTokenRoyalty} and {_setDefaultRoyalty} as a
* fraction of the sale price. Defaults to 10000 so fees are expressed in basis points, but may be customized by an
* override.
*/
function _feeDenominator() internal pure virtual returns (uint96) {
return 10000;
}
/**
* @dev Sets the royalty information that all ids in this contract will default to.
*
* Requirements:
*
* - `receiver` cannot be the zero address.
* - `feeNumerator` cannot be greater than the fee denominator.
*/
function _setDefaultRoyalty(address receiver, uint96 feeNumerator) internal virtual {
require(feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice");
require(receiver != address(0), "ERC2981: invalid receiver");
_defaultRoyaltyInfo = RoyaltyInfo(receiver, feeNumerator);
}
/**
* @dev Removes default royalty information.
*/
function _deleteDefaultRoyalty() internal virtual {
delete _defaultRoyaltyInfo;
}
/**
* @dev Sets the royalty information for a specific token id, overriding the global default.
*
* Requirements:
*
* - `receiver` cannot be the zero address.
* - `feeNumerator` cannot be greater than the fee denominator.
*/
function _setTokenRoyalty(
uint256 tokenId,
address receiver,
uint96 feeNumerator
) internal virtual {
require(feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice");
require(receiver != address(0), "ERC2981: Invalid parameters");
_tokenRoyaltyInfo[tokenId] = RoyaltyInfo(receiver, feeNumerator);
}
/**
* @dev Resets royalty information for the token id back to the global default.
*/
function _resetTokenRoyalty(uint256 tokenId) internal virtual {
delete _tokenRoyaltyInfo[tokenId];
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
}
// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)
pragma solidity ^0.8.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Enumerable is IERC721 {
/**
* @dev Returns the total amount of tokens stored by the contract.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns a token ID owned by `owner` at a given `index` of its token list.
* Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
*/
function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);
/**
* @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
* Use along with {totalSupply} to enumerate all tokens.
*/
function tokenByIndex(uint256 index) external view returns (uint256);
}
// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)
pragma solidity ^0.8.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Metadata is IERC721 {
/**
* @dev Returns the token collection name.
*/
function name() external view returns (string memory);
/**
* @dev Returns the token collection symbol.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
*/
function tokenURI(uint256 tokenId) external view returns (string memory);
}
// File: ERC721A.sol
pragma solidity ^0.8.15;
/**
* @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
* the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints.
*
* Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..).
*
* Assumes the number of issuable tokens (collection size) is capped and fits in a uint128.
*
* Does not support burning tokens to address(0).
*/
contract ERC721A is
Context,
ERC165,
IERC721,
IERC721Metadata,
IERC721Enumerable
{
using Address for address;
using Strings for uint256;
struct TokenOwnership {
address addr;
uint64 startTimestamp;
}
struct AddressData {
uint128 balance;
uint128 numberMinted;
}
uint256 private currentIndex = 0;
uint256 internal immutable collectionSize;
uint256 internal immutable maxBatchSize;
// Token name
string private _name;
// Token symbol
string private _symbol;
// Mapping from token ID to ownership details
// An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details.
mapping(uint256 => TokenOwnership) private _ownerships;
// Mapping owner address to address data
mapping(address => AddressData) private _addressData;
// Mapping from token ID to approved address
mapping(uint256 => address) private _tokenApprovals;
// Mapping from owner to operator approvals
mapping(address => mapping(address => bool)) private _operatorApprovals;
/**
* @dev
* `maxBatchSize` refers to how much a minter can mint at a time.
* `collectionSize_` refers to how many tokens are in the collection.
*/
constructor(
string memory name_,
string memory symbol_,
uint256 maxBatchSize_,
uint256 collectionSize_
) {
require(
collectionSize_ > 0,
"ERC721A: collection must have a nonzero supply"
);
require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero");
_name = name_;
_symbol = symbol_;
maxBatchSize = maxBatchSize_;
collectionSize = collectionSize_;
}
/**
* @dev See {IERC721Enumerable-totalSupply}.
*/
function totalSupply() public view override returns (uint256) {
return currentIndex;
}
/**
* @dev See {IERC721Enumerable-tokenByIndex}.
*/
function tokenByIndex(uint256 index) public view override returns (uint256) {
require(index < totalSupply(), "ERC721A: global index out of bounds");
return index;
}
/**
* @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
* This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first.
* It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
*/
function tokenOfOwnerByIndex(address owner, uint256 index)
public
view
override
returns (uint256)
{
require(index < balanceOf(owner), "ERC721A: owner index out of bounds");
uint256 numMintedSoFar = totalSupply();
uint256 tokenIdsIdx = 0;
address currOwnershipAddr = address(0);
for (uint256 i = 0; i < numMintedSoFar; i++) {
TokenOwnership memory ownership = _ownerships[i];
if (ownership.addr != address(0)) {
currOwnershipAddr = ownership.addr;
}
if (currOwnershipAddr == owner) {
if (tokenIdsIdx == index) {
return i;
}
tokenIdsIdx++;
}
}
revert("ERC721A: unable to get token of owner by index");
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId)
public
view
virtual
override(ERC165, IERC165)
returns (bool)
{
return
interfaceId == type(IERC721).interfaceId ||
interfaceId == type(IERC721Metadata).interfaceId ||
interfaceId == type(IERC721Enumerable).interfaceId ||
super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721-balanceOf}.
*/
function balanceOf(address owner) public view override returns (uint256) {
require(owner != address(0), "ERC721A: balance query for the zero address");
return uint256(_addressData[owner].balance);
}
function _numberMinted(address owner) internal view returns (uint256) {
require(
owner != address(0),
"ERC721A: number minted query for the zero address"
);
return uint256(_addressData[owner].numberMinted);
}
function ownershipOf(uint256 tokenId)
internal
view
returns (TokenOwnership memory)
{
require(_exists(tokenId), "ERC721A: owner query for nonexistent token");
uint256 lowestTokenToCheck;
if (tokenId >= maxBatchSize) {
lowestTokenToCheck = tokenId - maxBatchSize + 1;
}
for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) {
TokenOwnership memory ownership = _ownerships[curr];
if (ownership.addr != address(0)) {
return ownership;
}
}
revert("ERC721A: unable to determine the owner of token");
}
/**
* @dev See {IERC721-ownerOf}.
*/
function ownerOf(uint256 tokenId) public view override returns (address) {
return ownershipOf(tokenId).addr;
}
/**
* @dev See {IERC721Metadata-name}.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev See {IERC721Metadata-symbol}.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId)
public
view
virtual
override
returns (string memory)
{
require(
_exists(tokenId),
"ERC721Metadata: URI query for nonexistent token"
);
string memory baseURI = _baseURI();
return
bytes(baseURI).length > 0
? string(abi.encodePacked(baseURI, tokenId.toString()))
: "";
}
/**
* @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
* token will be the concatenation of the `baseURI` and the `tokenId`. Empty
* by default, can be overriden in child contracts.
*/
function _baseURI() internal view virtual returns (string memory) {
return "";
}
/**
* @dev See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public virtual override {
address owner = ERC721A.ownerOf(tokenId);
require(to != owner, "ERC721A: approval to current owner");
require(
_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
"ERC721A: approve caller is not owner nor approved for all"
);
_approve(to, tokenId, owner);
}
/**
* @dev See {IERC721-getApproved}.
*/
function getApproved(uint256 tokenId) public view virtual override returns (address) {
require(_exists(tokenId), "ERC721A: approved query for nonexistent token");
return _tokenApprovals[tokenId];
}
/**
* @dev See {IERC721-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) public virtual override {
require(operator != _msgSender(), "ERC721A: approve to caller");
_operatorApprovals[_msgSender()][operator] = approved;
emit ApprovalForAll(_msgSender(), operator, approved);
}
/**
* @dev See {IERC721-isApprovedForAll}.
*/
function isApprovedForAll(address owner, address operator)
public
view
virtual
override
returns (bool)
{
return _operatorApprovals[owner][operator];
}
/**
* @dev See {IERC721-transferFrom}.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
_transfer(from, to, tokenId);
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
safeTransferFrom(from, to, tokenId, "");
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory _data
) public virtual override {
_transfer(from, to, tokenId);
require(
_checkOnERC721Received(from, to, tokenId, _data),
"ERC721A: transfer to non ERC721Receiver implementer"
);
}
/**
* @dev Returns whether `tokenId` exists.
*
* Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
*
* Tokens start existing when they are minted (`_mint`),
*/
function _exists(uint256 tokenId) internal view returns (bool) {
return tokenId < currentIndex;
}
function _safeMint(address to, uint256 quantity) internal {
_safeMint(to, quantity, "");
}
/**
* @dev Mints `quantity` tokens and transfers them to `to`.
*
* Requirements:
*
* - there must be `quantity` tokens remaining unminted in the total collection.
* - `to` cannot be the zero address.
* - `quantity` cannot be larger than the max batch size.
*
* Emits a {Transfer} event.
*/
function _safeMint(
address to,
uint256 quantity,
bytes memory _data
) internal {
uint256 startTokenId = currentIndex;
require(to != address(0), "ERC721A: mint to the zero address");
// We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering.
require(!_exists(startTokenId), "ERC721A: token already minted");
require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high");
_beforeTokenTransfers(address(0), to, startTokenId, quantity);
AddressData memory addressData = _addressData[to];
_addressData[to] = AddressData(
addressData.balance + uint128(quantity),
addressData.numberMinted + uint128(quantity)
);
_ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp));
uint256 updatedIndex = startTokenId;
for (uint256 i = 0; i < quantity; i++) {
emit Transfer(address(0), to, updatedIndex);
require(
_checkOnERC721Received(address(0), to, updatedIndex, _data),
"ERC721A: transfer to non ERC721Receiver implementer"
);
updatedIndex++;
}
currentIndex = updatedIndex;
_afterTokenTransfers(address(0), to, startTokenId, quantity);
}
/**
* @dev Transfers `tokenId` from `from` to `to`.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
*
* Emits a {Transfer} event.
*/
function _transfer(
address from,
address to,
uint256 tokenId
) private {
TokenOwnership memory prevOwnership = ownershipOf(tokenId);
bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
getApproved(tokenId) == _msgSender() ||
isApprovedForAll(prevOwnership.addr, _msgSender()));
require(
isApprovedOrOwner,
"ERC721A: transfer caller is not owner nor approved"
);
require(
prevOwnership.addr == from,
"ERC721A: transfer from incorrect owner"
);
require(to != address(0), "ERC721A: transfer to the zero address");
_beforeTokenTransfers(from, to, tokenId, 1);
// Clear approvals from the previous owner
_approve(address(0), tokenId, prevOwnership.addr);
_addressData[from].balance -= 1;
_addressData[to].balance += 1;
_ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp));
// If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
// Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
uint256 nextTokenId = tokenId + 1;
if (_ownerships[nextTokenId].addr == address(0)) {
if (_exists(nextTokenId)) {
_ownerships[nextTokenId] = TokenOwnership(
prevOwnership.addr,
prevOwnership.startTimestamp
);
}
}
emit Transfer(from, to, tokenId);
_afterTokenTransfers(from, to, tokenId, 1);
}
/**
* @dev Approve `to` to operate on `tokenId`
*
* Emits a {Approval} event.
*/
function _approve(
address to,
uint256 tokenId,
address owner
) private {
_tokenApprovals[tokenId] = to;
emit Approval(owner, to, tokenId);
}
uint256 public nextOwnerToExplicitlySet = 0;
/**
* @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf().
*/
function _setOwnersExplicit(uint256 quantity) internal {
uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet;
require(quantity > 0, "quantity must be nonzero");
uint256 endIndex = oldNextOwnerToSet + quantity - 1;
if (endIndex > collectionSize - 1) {
endIndex = collectionSize - 1;
}
// We know if the last one in the group exists, all in the group exist, due to serial ordering.
require(_exists(endIndex), "not enough minted yet for this cleanup");
for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) {
if (_ownerships[i].addr == address(0)) {
TokenOwnership memory ownership = ownershipOf(i);
_ownerships[i] = TokenOwnership(
ownership.addr,
ownership.startTimestamp
);
}
}
nextOwnerToExplicitlySet = endIndex + 1;
}
/**
* @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
* The call is not executed if the target address is not a contract.
*
* @param from address representing the previous owner of the given token ID
* @param to target address that will receive the tokens
* @param tokenId uint256 ID of the token to be transferred
* @param _data bytes optional data to send along with the call
* @return bool whether the call correctly returned the expected magic value
*/
function _checkOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory _data
) private returns (bool) {
if (to.isContract()) {
try
IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data)
returns (bytes4 retval) {
return retval == IERC721Receiver(to).onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert("ERC721A: transfer to non ERC721Receiver implementer");
} else {
assembly {
revert(add(32, reason), mload(reason))
}
}
}
} else {
return true;
}
}
/**
* @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
*
* startTokenId - the first token id to be transferred
* quantity - the amount to be transferred
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
*/
function _beforeTokenTransfers(
address from,
address to,
uint256 startTokenId,
uint256 quantity
) internal virtual {}
/**
* @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
* minting.
*
* startTokenId - the first token id to be transferred
* quantity - the amount to be transferred
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero.
* - `from` and `to` are never both zero.
*/
function _afterTokenTransfers(
address from,
address to,
uint256 startTokenId,
uint256 quantity
) internal virtual {}
}
// File: PepeUnlimited.sol
pragma solidity ^0.8.17;
/**
* Mint 4 Dabloons - May your imagination & the hype never end!
* 32 billion supply, because everyone needs 4 and it's hyper cheap to mint.
*
* Here is how it works:
*
* Instead of calling a mint function, simply send _zero_ ETH to the contract for minting 4 dabloons (max. 4 per wallet).
*
* Once the tx completed, the senders will find their NFTs in their wallets.
*
* By leaving out the mint function - and with it the function parameters - the minting process will save substantial amounts of gas.
*
* Additionally, this collection derives from EIP721A and provides quasi-constant minting costs.
*
* This collection is fully erc721 compliant.
*
* Mint-on-receive is a new type of mint and has been first seen on https://rarity.garden/
*
* Dabloons NFTs are a fun mint and are not affiliated with TikTok.
*/
contract Dabloons is ERC721A, ERC2981, DefaultOperatorFilterer, Ownable
{
using Strings for uint256;
uint256 public _total_max;
string public _baseTokenUri;
mapping(address => bool) public minters;
constructor(
string memory name,
string memory symbol,
string memory baseTokenURI,
uint256 max_batch,
uint256 collection_size
) ERC721A(name, symbol, max_batch, collection_size) {
_baseTokenUri = baseTokenURI;
_total_max = collection_size;
}
receive() external payable {
require(msg.value == 0, "receive: cats don't need any ETH.");
require(!minters[_msgSender()], "receive: wallet minted its dabloons already.");
require(totalSupply() + 4 <= _total_max, "receive(): max. supply reached.");
minters[_msgSender()] = true;
_safeMint(_msgSender(), 4, "");
}
function _baseURI() internal view virtual override returns (string memory) {
return _baseTokenUri;
}
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
string memory baseURI = _baseURI();
return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString(), ".json")) : "https://rarity.garden/media/dabloons/cat.json";
}
function setBaseUri(string calldata baseTokenURI) public virtual onlyOwner {
_baseTokenUri = baseTokenURI;
}
function supportsInterface(bytes4 interfaceId)
public
view
override(ERC721A, ERC2981)
returns (bool)
{
return
ERC721A.supportsInterface(interfaceId) ||
ERC2981.supportsInterface(interfaceId);
}
/**
* ERC2981 Royalties
*
**/
function setDefaultRoyalty(address royaltyAddress, uint96 royaltyAmount) external onlyOwner {
_setDefaultRoyalty(royaltyAddress, royaltyAmount);
}
/**
* Royalty enforcing overrides for OpenSea in order to be eligiible for creator fees on their platform.
*
* Since OpenSea basically controls where NFTs are allowed to get transferred to and by whom they may be approved,
* we added a switch in onlyAllowedOperatorApproval() and onlyAllowedOperator() to turn it off
* in case if it will be mis-used by marketplaces.
*
* In case we want to allow certain addresses that are banned but the marketplace is not really bad acting,
* we reserve the right to do so by using an internal allow-list for transfers and approvals.
**/
function setInternallyAllowed(address requestor, bool allowed) external onlyOwner {
internallyAllowed[requestor] = allowed;
}
function isInternallyAllowed(address requestor) view external returns(bool) {
return internallyAllowed[requestor];
}
function setOperatorFiltererAllowed(bool allowed) external onlyOwner {
filterAllowed = allowed;
}
function isOperatorFiltererAllowed() view external returns(bool) {
return filterAllowed;
}
function setApprovalForAll(address operator, bool approved) public override onlyAllowedOperatorApproval(operator) {
super.setApprovalForAll(operator, approved);
}
function approve(address operator, uint256 tokenId) public override onlyAllowedOperatorApproval(operator) {
super.approve(operator, tokenId);
}
function transferFrom(address from, address to, uint256 tokenId) public override onlyAllowedOperator(from) {
super.transferFrom(from, to, tokenId);
}
function safeTransferFrom(address from, address to, uint256 tokenId) public override onlyAllowedOperator(from) {
super.safeTransferFrom(from, to, tokenId);
}
function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data)
public
override
onlyAllowedOperator(from)
{
super.safeTransferFrom(from, to, tokenId, data);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"baseTokenURI","type":"string"},{"internalType":"uint256","name":"max_batch","type":"uint256"},{"internalType":"uint256","name":"collection_size","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"OPERATOR_FILTER_REGISTRY","outputs":[{"internalType":"contract IOperatorFilterRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_baseTokenUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_total_max","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"requestor","type":"address"}],"name":"isInternallyAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOperatorFiltererAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseTokenURI","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"royaltyAddress","type":"address"},{"internalType":"uint96","name":"royaltyAmount","type":"uint96"}],"name":"setDefaultRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"requestor","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"setInternallyAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"allowed","type":"bool"}],"name":"setOperatorFiltererAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60c06040526000805560006007556001600a60006101000a81548160ff0219169083151502179055503480156200003557600080fd5b5060405162005fe238038062005fe283398181016040528101906200005b919062000611565b733cc6cdda760b79bafa08df41ecfa224f810dceb660018686858560008111620000bc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000b3906200077d565b60405180910390fd5b6000821162000102576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000f99062000815565b60405180910390fd5b836001908162000113919062000a78565b50826002908162000125919062000a78565b508160a0818152505080608081815250505050505060006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156200032f578015620001f5576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16637d3e3dbe30846040518363ffffffff1660e01b8152600401620001bb92919062000ba4565b600060405180830381600087803b158015620001d657600080fd5b505af1158015620001eb573d6000803e3d6000fd5b505050506200032e565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620002af576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663a0af290330846040518363ffffffff1660e01b81526004016200027592919062000ba4565b600060405180830381600087803b1580156200029057600080fd5b505af1158015620002a5573d6000803e3d6000fd5b505050506200032d565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16634420e486306040518263ffffffff1660e01b8152600401620002f8919062000bd1565b600060405180830381600087803b1580156200031357600080fd5b505af115801562000328573d6000803e3d6000fd5b505050505b5b5b505062000351620003456200037560201b60201c565b6200037d60201b60201c565b82600e908162000362919062000a78565b5080600d81905550505050505062000bee565b600033905090565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620004ac8262000461565b810181811067ffffffffffffffff82111715620004ce57620004cd62000472565b5b80604052505050565b6000620004e362000443565b9050620004f18282620004a1565b919050565b600067ffffffffffffffff82111562000514576200051362000472565b5b6200051f8262000461565b9050602081019050919050565b60005b838110156200054c5780820151818401526020810190506200052f565b60008484015250505050565b60006200056f6200056984620004f6565b620004d7565b9050828152602081018484840111156200058e576200058d6200045c565b5b6200059b8482856200052c565b509392505050565b600082601f830112620005bb57620005ba62000457565b5b8151620005cd84826020860162000558565b91505092915050565b6000819050919050565b620005eb81620005d6565b8114620005f757600080fd5b50565b6000815190506200060b81620005e0565b92915050565b600080600080600060a0868803121562000630576200062f6200044d565b5b600086015167ffffffffffffffff81111562000651576200065062000452565b5b6200065f88828901620005a3565b955050602086015167ffffffffffffffff81111562000683576200068262000452565b5b6200069188828901620005a3565b945050604086015167ffffffffffffffff811115620006b557620006b462000452565b5b620006c388828901620005a3565b9350506060620006d688828901620005fa565b9250506080620006e988828901620005fa565b9150509295509295909350565b600082825260208201905092915050565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b600062000765602e83620006f6565b9150620007728262000707565b604082019050919050565b60006020820190508181036000830152620007988162000756565b9050919050565b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b6000620007fd602783620006f6565b91506200080a826200079f565b604082019050919050565b600060208201905081810360008301526200083081620007ee565b9050919050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200088a57607f821691505b602082108103620008a0576200089f62000842565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200090a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620008cb565b620009168683620008cb565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000959620009536200094d84620005d6565b6200092e565b620005d6565b9050919050565b6000819050919050565b620009758362000938565b6200098d620009848262000960565b848454620008d8565b825550505050565b600090565b620009a462000995565b620009b18184846200096a565b505050565b5b81811015620009d957620009cd6000826200099a565b600181019050620009b7565b5050565b601f82111562000a2857620009f281620008a6565b620009fd84620008bb565b8101602085101562000a0d578190505b62000a2562000a1c85620008bb565b830182620009b6565b50505b505050565b600082821c905092915050565b600062000a4d6000198460080262000a2d565b1980831691505092915050565b600062000a68838362000a3a565b9150826002028217905092915050565b62000a838262000837565b67ffffffffffffffff81111562000a9f5762000a9e62000472565b5b62000aab825462000871565b62000ab8828285620009dd565b600060209050601f83116001811462000af0576000841562000adb578287015190505b62000ae7858262000a5a565b86555062000b57565b601f19841662000b0086620008a6565b60005b8281101562000b2a5784890151825560018201915060208501945060208101905062000b03565b8683101562000b4a578489015162000b46601f89168262000a3a565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b8c8262000b5f565b9050919050565b62000b9e8162000b7f565b82525050565b600060408201905062000bbb600083018562000b93565b62000bca602083018462000b93565b9392505050565b600060208201905062000be8600083018462000b93565b92915050565b60805160a0516153c362000c1f60003960008181610a3d015281816128de01526129070152600050506153c36000f3fe6080604052600436106101dc5760003560e01c80636352211e11610102578063a22cb46511610095578063dbbf355011610064578063dbbf3550146108a0578063e985e9c5146108c9578063f2fde38b14610906578063f46eccc41461092f57610393565b8063a22cb465146107e6578063b88d4fde1461080f578063c87b56dd14610838578063d7224ba01461087557610393565b80638da5cb5b116100d15780638da5cb5b1461073e5780638e6aecdd1461076957806395d89b4114610792578063a0bcfc7f146107bd57610393565b80636352211e146106705780636b6e80ca146106ad57806370a08231146106ea578063715018a61461072757610393565b806323b872dd1161017a57806342842e0e1161014957806342842e0e146105b457806348200604146105dd5780634f6ccce7146106085780635ded10551461064557610393565b806323b872dd146104e55780632a55205a1461050e5780632f745c591461054c57806341f434341461058957610393565b8063081812fc116101b6578063081812fc14610429578063095ea7b31461046657806311feb91b1461048f57806318160ddd146104ba57610393565b806301ffc9a71461039857806304634d8d146103d557806306fdde03146103fe57610393565b366103935760003414610224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161021b906136d4565b60405180910390fd5b600f600061023061096c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156102b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102af90613766565b60405180910390fd5b600d5460046102c5610974565b6102cf91906137bf565b1115610310576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103079061383f565b60405180910390fd5b6001600f600061031e61096c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061039161037a61096c565b60046040518060200160405280600081525061097d565b005b600080fd5b3480156103a457600080fd5b506103bf60048036038101906103ba91906138cb565b610e5b565b6040516103cc9190613913565b60405180910390f35b3480156103e157600080fd5b506103fc60048036038101906103f791906139d0565b610e7d565b005b34801561040a57600080fd5b50610413610e93565b6040516104209190613a8f565b60405180910390f35b34801561043557600080fd5b50610450600480360381019061044b9190613add565b610f25565b60405161045d9190613b19565b60405180910390f35b34801561047257600080fd5b5061048d60048036038101906104889190613b34565b610faa565b005b34801561049b57600080fd5b506104a461112e565b6040516104b19190613913565b60405180910390f35b3480156104c657600080fd5b506104cf610974565b6040516104dc9190613b83565b60405180910390f35b3480156104f157600080fd5b5061050c60048036038101906105079190613b9e565b611145565b005b34801561051a57600080fd5b5061053560048036038101906105309190613bf1565b61130f565b604051610543929190613c31565b60405180910390f35b34801561055857600080fd5b50610573600480360381019061056e9190613b34565b6114f9565b6040516105809190613b83565b60405180910390f35b34801561059557600080fd5b5061059e6116f5565b6040516105ab9190613cb9565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d69190613b9e565b611707565b005b3480156105e957600080fd5b506105f26118d1565b6040516105ff9190613a8f565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a9190613add565b61195f565b60405161063c9190613b83565b60405180910390f35b34801561065157600080fd5b5061065a6119b2565b6040516106679190613b83565b60405180910390f35b34801561067c57600080fd5b5061069760048036038101906106929190613add565b6119b8565b6040516106a49190613b19565b60405180910390f35b3480156106b957600080fd5b506106d460048036038101906106cf9190613cd4565b6119ce565b6040516106e19190613913565b60405180910390f35b3480156106f657600080fd5b50610711600480360381019061070c9190613cd4565b611a24565b60405161071e9190613b83565b60405180910390f35b34801561073357600080fd5b5061073c611b0c565b005b34801561074a57600080fd5b50610753611b20565b6040516107609190613b19565b60405180910390f35b34801561077557600080fd5b50610790600480360381019061078b9190613d2d565b611b4a565b005b34801561079e57600080fd5b506107a7611b6f565b6040516107b49190613a8f565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df9190613dbf565b611c01565b005b3480156107f257600080fd5b5061080d60048036038101906108089190613e0c565b611c1f565b005b34801561081b57600080fd5b5061083660048036038101906108319190613f7c565b611da3565b005b34801561084457600080fd5b5061085f600480360381019061085a9190613add565b611f71565b60405161086c9190613a8f565b60405180910390f35b34801561088157600080fd5b5061088a612021565b6040516108979190613b83565b60405180910390f35b3480156108ac57600080fd5b506108c760048036038101906108c29190613e0c565b612027565b005b3480156108d557600080fd5b506108f060048036038101906108eb9190613fff565b61208a565b6040516108fd9190613913565b60405180910390f35b34801561091257600080fd5b5061092d60048036038101906109289190613cd4565b61211e565b005b34801561093b57600080fd5b5061095660048036038101906109519190613cd4565b6121a1565b6040516109639190613913565b60405180910390f35b600033905090565b60008054905090565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036109f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e9906140b1565b60405180910390fd5b6109fb816121c1565b15610a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a329061411d565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000831115610a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a95906141af565b60405180910390fd5b610aab60008583866121ce565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151610ba891906141eb565b6fffffffffffffffffffffffffffffffff168152602001858360200151610bcf91906141eb565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015610e3e57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610dde60008884886121d4565b610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e14906142a1565b60405180910390fd5b8180610e28906142c1565b9250508080610e36906142c1565b915050610d6d565b5080600081905550610e53600087858861235b565b505050505050565b6000610e6682612361565b80610e765750610e75826124ab565b5b9050919050565b610e85612525565b610e8f82826125a3565b5050565b606060018054610ea290614338565b80601f0160208091040260200160405190810160405280929190818152602001828054610ece90614338565b8015610f1b5780601f10610ef057610100808354040283529160200191610f1b565b820191906000526020600020905b815481529060010190602001808311610efe57829003601f168201915b5050505050905090565b6000610f30826121c1565b610f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f66906143db565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b81600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561100c576110078383612738565b611129565b600a60009054906101000a900460ff16801561104d575060006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b115b1561111e576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b815260040161109b9291906143fb565b602060405180830381865afa1580156110b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110dc9190614439565b61111d57806040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016111149190613b19565b60405180910390fd5b5b6111288383612738565b5b505050565b6000600a60009054906101000a900460ff16905090565b82600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156111a8576111a3848484612850565b611309565b600a60009054906101000a900460ff1680156111e9575060006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b115b156112fd573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112315761122c848484612850565b611309565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b815260040161127a9291906143fb565b602060405180830381865afa158015611297573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112bb9190614439565b6112fc57336040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016112f39190613b19565b60405180910390fd5b5b611308848484612850565b5b50505050565b6000806000600960008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16036114a45760086040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b60006114ae612860565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff16866114da9190614466565b6114e491906144d7565b90508160000151819350935050509250929050565b600061150483611a24565b8210611545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153c9061457a565b60405180910390fd5b600061154f610974565b905060008060005b838110156116b3576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461164957806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361169f578684036116905781955050505050506116ef565b838061169b906142c1565b9450505b5080806116ab906142c1565b915050611557565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e69061460c565b60405180910390fd5b92915050565b6daaeb6d7670e522a718067333cd4e81565b82600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561176a5761176584848461286a565b6118cb565b600a60009054906101000a900460ff1680156117ab575060006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b115b156118bf573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117f3576117ee84848461286a565b6118cb565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b815260040161183c9291906143fb565b602060405180830381865afa158015611859573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187d9190614439565b6118be57336040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016118b59190613b19565b60405180910390fd5b5b6118ca84848461286a565b5b50505050565b600e80546118de90614338565b80601f016020809104026020016040519081016040528092919081815260200182805461190a90614338565b80156119575780601f1061192c57610100808354040283529160200191611957565b820191906000526020600020905b81548152906001019060200180831161193a57829003601f168201915b505050505081565b6000611969610974565b82106119aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a19061469e565b60405180910390fd5b819050919050565b600d5481565b60006119c38261288a565b600001519050919050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8b90614730565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611b14612525565b611b1e6000612a8d565b565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b52612525565b80600a60006101000a81548160ff02191690831515021790555050565b606060028054611b7e90614338565b80601f0160208091040260200160405190810160405280929190818152602001828054611baa90614338565b8015611bf75780601f10611bcc57610100808354040283529160200191611bf7565b820191906000526020600020905b815481529060010190602001808311611bda57829003601f168201915b5050505050905090565b611c09612525565b8181600e9182611c1a9291906148fd565b505050565b81600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611c8157611c7c8383612b53565b611d9e565b600a60009054906101000a900460ff168015611cc2575060006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b115b15611d93576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b8152600401611d109291906143fb565b602060405180830381865afa158015611d2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d519190614439565b611d9257806040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401611d899190613b19565b60405180910390fd5b5b611d9d8383612b53565b5b505050565b83600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e0757611e0285858585612cd3565b611f6a565b600a60009054906101000a900460ff168015611e48575060006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b115b15611f5d573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e9157611e8c85858585612cd3565b611f6a565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401611eda9291906143fb565b602060405180830381865afa158015611ef7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1b9190614439565b611f5c57336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401611f539190613b19565b60405180910390fd5b5b611f6985858585612cd3565b5b5050505050565b6060611f7c826121c1565b611fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb290614a3f565b60405180910390fd5b6000611fc5612d2f565b90506000815111611fee576040518060600160405280602d8152602001615361602d9139612019565b80611ff884612dc1565b604051602001612009929190614ae7565b6040516020818303038152906040525b915050919050565b60075481565b61202f612525565b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612126612525565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218c90614b88565b60405180910390fd5b61219e81612a8d565b50565b600f6020528060005260406000206000915054906101000a900460ff1681565b6000805482109050919050565b50505050565b60006121f58473ffffffffffffffffffffffffffffffffffffffff16612f21565b1561234e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261221e61096c565b8786866040518563ffffffff1660e01b81526004016122409493929190614bfd565b6020604051808303816000875af192505050801561227c57506040513d601f19601f820116820180604052508101906122799190614c5e565b60015b6122fe573d80600081146122ac576040519150601f19603f3d011682016040523d82523d6000602084013e6122b1565b606091505b5060008151036122f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ed906142a1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612353565b600190505b949350505050565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061242c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061249457507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806124a457506124a382612f44565b5b9050919050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061251e575061251d82612361565b5b9050919050565b61252d61096c565b73ffffffffffffffffffffffffffffffffffffffff1661254b611b20565b73ffffffffffffffffffffffffffffffffffffffff16146125a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259890614cd7565b60405180910390fd5b565b6125ab612860565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff161115612609576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260090614d69565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266f90614dd5565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600860008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b6000612743826119b8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127aa90614e67565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166127d261096c565b73ffffffffffffffffffffffffffffffffffffffff1614806128015750612800816127fb61096c565b61208a565b5b612840576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283790614ef9565b60405180910390fd5b61284b838383612fae565b505050565b61285b838383613060565b505050565b6000612710905090565b61288583838360405180602001604052806000815250611da3565b505050565b612892613617565b61289b826121c1565b6128da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d190614f8b565b60405180910390fd5b60007f0000000000000000000000000000000000000000000000000000000000000000831061293e5760017f0000000000000000000000000000000000000000000000000000000000000000846129319190614fab565b61293b91906137bf565b90505b60008390505b818110612a4c576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612a3857809350505050612a88565b508080612a4490614fdf565b915050612944565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7f9061507a565b60405180910390fd5b919050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612b5b61096c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbf906150e6565b60405180910390fd5b8060066000612bd561096c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612c8261096c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612cc79190613913565b60405180910390a35050565b612cde848484613060565b612cea848484846121d4565b612d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d20906142a1565b60405180910390fd5b50505050565b6060600e8054612d3e90614338565b80601f0160208091040260200160405190810160405280929190818152602001828054612d6a90614338565b8015612db75780601f10612d8c57610100808354040283529160200191612db7565b820191906000526020600020905b815481529060010190602001808311612d9a57829003601f168201915b5050505050905090565b606060008203612e08576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f1c565b600082905060005b60008214612e3a578080612e23906142c1565b915050600a82612e3391906144d7565b9150612e10565b60008167ffffffffffffffff811115612e5657612e55613e51565b5b6040519080825280601f01601f191660200182016040528015612e885781602001600182028036833780820191505090505b5090505b60008514612f1557600182612ea19190614fab565b9150600a85612eb09190615106565b6030612ebc91906137bf565b60f81b818381518110612ed257612ed1615137565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f0e91906144d7565b9450612e8c565b8093505050505b919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061306b8261288a565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661309261096c565b73ffffffffffffffffffffffffffffffffffffffff1614806130ee57506130b761096c565b73ffffffffffffffffffffffffffffffffffffffff166130d684610f25565b73ffffffffffffffffffffffffffffffffffffffff16145b8061310a5750613109826000015161310461096c565b61208a565b5b90508061314c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613143906151d8565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146131be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b59061526a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361322d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613224906152fc565b60405180910390fd5b61323a85858560016121ce565b61324a6000848460000151612fae565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166132b8919061531c565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661335c91906141eb565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461346291906137bf565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036135a7576134d7816121c1565b156135a6576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461360f868686600161235b565b505050505050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b600082825260208201905092915050565b7f726563656976653a206361747320646f6e2774206e65656420616e792045544860008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b60006136be602183613651565b91506136c982613662565b604082019050919050565b600060208201905081810360008301526136ed816136b1565b9050919050565b7f726563656976653a2077616c6c6574206d696e74656420697473206461626c6f60008201527f6f6e7320616c72656164792e0000000000000000000000000000000000000000602082015250565b6000613750602c83613651565b915061375b826136f4565b604082019050919050565b6000602082019050818103600083015261377f81613743565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006137ca82613786565b91506137d583613786565b92508282019050808211156137ed576137ec613790565b5b92915050565b7f7265636569766528293a206d61782e20737570706c7920726561636865642e00600082015250565b6000613829601f83613651565b9150613834826137f3565b602082019050919050565b600060208201905081810360008301526138588161381c565b9050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6138a881613873565b81146138b357600080fd5b50565b6000813590506138c58161389f565b92915050565b6000602082840312156138e1576138e0613869565b5b60006138ef848285016138b6565b91505092915050565b60008115159050919050565b61390d816138f8565b82525050565b60006020820190506139286000830184613904565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139598261392e565b9050919050565b6139698161394e565b811461397457600080fd5b50565b60008135905061398681613960565b92915050565b60006bffffffffffffffffffffffff82169050919050565b6139ad8161398c565b81146139b857600080fd5b50565b6000813590506139ca816139a4565b92915050565b600080604083850312156139e7576139e6613869565b5b60006139f585828601613977565b9250506020613a06858286016139bb565b9150509250929050565b600081519050919050565b60005b83811015613a39578082015181840152602081019050613a1e565b60008484015250505050565b6000601f19601f8301169050919050565b6000613a6182613a10565b613a6b8185613651565b9350613a7b818560208601613a1b565b613a8481613a45565b840191505092915050565b60006020820190508181036000830152613aa98184613a56565b905092915050565b613aba81613786565b8114613ac557600080fd5b50565b600081359050613ad781613ab1565b92915050565b600060208284031215613af357613af2613869565b5b6000613b0184828501613ac8565b91505092915050565b613b138161394e565b82525050565b6000602082019050613b2e6000830184613b0a565b92915050565b60008060408385031215613b4b57613b4a613869565b5b6000613b5985828601613977565b9250506020613b6a85828601613ac8565b9150509250929050565b613b7d81613786565b82525050565b6000602082019050613b986000830184613b74565b92915050565b600080600060608486031215613bb757613bb6613869565b5b6000613bc586828701613977565b9350506020613bd686828701613977565b9250506040613be786828701613ac8565b9150509250925092565b60008060408385031215613c0857613c07613869565b5b6000613c1685828601613ac8565b9250506020613c2785828601613ac8565b9150509250929050565b6000604082019050613c466000830185613b0a565b613c536020830184613b74565b9392505050565b6000819050919050565b6000613c7f613c7a613c758461392e565b613c5a565b61392e565b9050919050565b6000613c9182613c64565b9050919050565b6000613ca382613c86565b9050919050565b613cb381613c98565b82525050565b6000602082019050613cce6000830184613caa565b92915050565b600060208284031215613cea57613ce9613869565b5b6000613cf884828501613977565b91505092915050565b613d0a816138f8565b8114613d1557600080fd5b50565b600081359050613d2781613d01565b92915050565b600060208284031215613d4357613d42613869565b5b6000613d5184828501613d18565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112613d7f57613d7e613d5a565b5b8235905067ffffffffffffffff811115613d9c57613d9b613d5f565b5b602083019150836001820283011115613db857613db7613d64565b5b9250929050565b60008060208385031215613dd657613dd5613869565b5b600083013567ffffffffffffffff811115613df457613df361386e565b5b613e0085828601613d69565b92509250509250929050565b60008060408385031215613e2357613e22613869565b5b6000613e3185828601613977565b9250506020613e4285828601613d18565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613e8982613a45565b810181811067ffffffffffffffff82111715613ea857613ea7613e51565b5b80604052505050565b6000613ebb61385f565b9050613ec78282613e80565b919050565b600067ffffffffffffffff821115613ee757613ee6613e51565b5b613ef082613a45565b9050602081019050919050565b82818337600083830152505050565b6000613f1f613f1a84613ecc565b613eb1565b905082815260208101848484011115613f3b57613f3a613e4c565b5b613f46848285613efd565b509392505050565b600082601f830112613f6357613f62613d5a565b5b8135613f73848260208601613f0c565b91505092915050565b60008060008060808587031215613f9657613f95613869565b5b6000613fa487828801613977565b9450506020613fb587828801613977565b9350506040613fc687828801613ac8565b925050606085013567ffffffffffffffff811115613fe757613fe661386e565b5b613ff387828801613f4e565b91505092959194509250565b6000806040838503121561401657614015613869565b5b600061402485828601613977565b925050602061403585828601613977565b9150509250929050565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061409b602183613651565b91506140a68261403f565b604082019050919050565b600060208201905081810360008301526140ca8161408e565b9050919050565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b6000614107601d83613651565b9150614112826140d1565b602082019050919050565b60006020820190508181036000830152614136816140fa565b9050919050565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b6000614199602283613651565b91506141a48261413d565b604082019050919050565b600060208201905081810360008301526141c88161418c565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b60006141f6826141cf565b9150614201836141cf565b925082820190506fffffffffffffffffffffffffffffffff81111561422957614228613790565b5b92915050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b600061428b603383613651565b91506142968261422f565b604082019050919050565b600060208201905081810360008301526142ba8161427e565b9050919050565b60006142cc82613786565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036142fe576142fd613790565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061435057607f821691505b60208210810361436357614362614309565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b60006143c5602d83613651565b91506143d082614369565b604082019050919050565b600060208201905081810360008301526143f4816143b8565b9050919050565b60006040820190506144106000830185613b0a565b61441d6020830184613b0a565b9392505050565b60008151905061443381613d01565b92915050565b60006020828403121561444f5761444e613869565b5b600061445d84828501614424565b91505092915050565b600061447182613786565b915061447c83613786565b925082820261448a81613786565b915082820484148315176144a1576144a0613790565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006144e282613786565b91506144ed83613786565b9250826144fd576144fc6144a8565b5b828204905092915050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000614564602283613651565b915061456f82614508565b604082019050919050565b6000602082019050818103600083015261459381614557565b9050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b60006145f6602e83613651565b91506146018261459a565b604082019050919050565b60006020820190508181036000830152614625816145e9565b9050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b6000614688602383613651565b91506146938261462c565b604082019050919050565b600060208201905081810360008301526146b78161467b565b9050919050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b600061471a602b83613651565b9150614725826146be565b604082019050919050565b600060208201905081810360008301526147498161470d565b9050919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026147bd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614780565b6147c78683614780565b95508019841693508086168417925050509392505050565b60006147fa6147f56147f084613786565b613c5a565b613786565b9050919050565b6000819050919050565b614814836147df565b61482861482082614801565b84845461478d565b825550505050565b600090565b61483d614830565b61484881848461480b565b505050565b5b8181101561486c57614861600082614835565b60018101905061484e565b5050565b601f8211156148b1576148828161475b565b61488b84614770565b8101602085101561489a578190505b6148ae6148a685614770565b83018261484d565b50505b505050565b600082821c905092915050565b60006148d4600019846008026148b6565b1980831691505092915050565b60006148ed83836148c3565b9150826002028217905092915050565b6149078383614750565b67ffffffffffffffff8111156149205761491f613e51565b5b61492a8254614338565b614935828285614870565b6000601f8311600181146149645760008415614952578287013590505b61495c85826148e1565b8655506149c4565b601f1984166149728661475b565b60005b8281101561499a57848901358255600182019150602085019450602081019050614975565b868310156149b757848901356149b3601f8916826148c3565b8355505b6001600288020188555050505b50505050505050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614a29602f83613651565b9150614a34826149cd565b604082019050919050565b60006020820190508181036000830152614a5881614a1c565b9050919050565b600081905092915050565b6000614a7582613a10565b614a7f8185614a5f565b9350614a8f818560208601613a1b565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000614ad1600583614a5f565b9150614adc82614a9b565b600582019050919050565b6000614af38285614a6a565b9150614aff8284614a6a565b9150614b0a82614ac4565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b72602683613651565b9150614b7d82614b16565b604082019050919050565b60006020820190508181036000830152614ba181614b65565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614bcf82614ba8565b614bd98185614bb3565b9350614be9818560208601613a1b565b614bf281613a45565b840191505092915050565b6000608082019050614c126000830187613b0a565b614c1f6020830186613b0a565b614c2c6040830185613b74565b8181036060830152614c3e8184614bc4565b905095945050505050565b600081519050614c588161389f565b92915050565b600060208284031215614c7457614c73613869565b5b6000614c8284828501614c49565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614cc1602083613651565b9150614ccc82614c8b565b602082019050919050565b60006020820190508181036000830152614cf081614cb4565b9050919050565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b6000614d53602a83613651565b9150614d5e82614cf7565b604082019050919050565b60006020820190508181036000830152614d8281614d46565b9050919050565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b6000614dbf601983613651565b9150614dca82614d89565b602082019050919050565b60006020820190508181036000830152614dee81614db2565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e51602283613651565b9150614e5c82614df5565b604082019050919050565b60006020820190508181036000830152614e8081614e44565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b6000614ee3603983613651565b9150614eee82614e87565b604082019050919050565b60006020820190508181036000830152614f1281614ed6565b9050919050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b6000614f75602a83613651565b9150614f8082614f19565b604082019050919050565b60006020820190508181036000830152614fa481614f68565b9050919050565b6000614fb682613786565b9150614fc183613786565b9250828203905081811115614fd957614fd8613790565b5b92915050565b6000614fea82613786565b915060008203614ffd57614ffc613790565b5b600182039050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b6000615064602f83613651565b915061506f82615008565b604082019050919050565b6000602082019050818103600083015261509381615057565b9050919050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b60006150d0601a83613651565b91506150db8261509a565b602082019050919050565b600060208201905081810360008301526150ff816150c3565b9050919050565b600061511182613786565b915061511c83613786565b92508261512c5761512b6144a8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006151c2603283613651565b91506151cd82615166565b604082019050919050565b600060208201905081810360008301526151f1816151b5565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b6000615254602683613651565b915061525f826151f8565b604082019050919050565b6000602082019050818103600083015261528381615247565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006152e6602583613651565b91506152f18261528a565b604082019050919050565b60006020820190508181036000830152615315816152d9565b9050919050565b6000615327826141cf565b9150615332836141cf565b925082820390506fffffffffffffffffffffffffffffffff81111561535a57615359613790565b5b9291505056fe68747470733a2f2f7261726974792e67617264656e2f6d656469612f6461626c6f6f6e732f6361742e6a736f6ea26469706673582212200b3c86e3f2ab8b2dc18344236026bc713ef56fb16217aa99f041a49b8afac0c964736f6c6343000811003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000077359400000000000000000000000000000000000000000000000000000000000000000084461626c6f6f6e73000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000544424c4e530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101dc5760003560e01c80636352211e11610102578063a22cb46511610095578063dbbf355011610064578063dbbf3550146108a0578063e985e9c5146108c9578063f2fde38b14610906578063f46eccc41461092f57610393565b8063a22cb465146107e6578063b88d4fde1461080f578063c87b56dd14610838578063d7224ba01461087557610393565b80638da5cb5b116100d15780638da5cb5b1461073e5780638e6aecdd1461076957806395d89b4114610792578063a0bcfc7f146107bd57610393565b80636352211e146106705780636b6e80ca146106ad57806370a08231146106ea578063715018a61461072757610393565b806323b872dd1161017a57806342842e0e1161014957806342842e0e146105b457806348200604146105dd5780634f6ccce7146106085780635ded10551461064557610393565b806323b872dd146104e55780632a55205a1461050e5780632f745c591461054c57806341f434341461058957610393565b8063081812fc116101b6578063081812fc14610429578063095ea7b31461046657806311feb91b1461048f57806318160ddd146104ba57610393565b806301ffc9a71461039857806304634d8d146103d557806306fdde03146103fe57610393565b366103935760003414610224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161021b906136d4565b60405180910390fd5b600f600061023061096c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156102b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102af90613766565b60405180910390fd5b600d5460046102c5610974565b6102cf91906137bf565b1115610310576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103079061383f565b60405180910390fd5b6001600f600061031e61096c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061039161037a61096c565b60046040518060200160405280600081525061097d565b005b600080fd5b3480156103a457600080fd5b506103bf60048036038101906103ba91906138cb565b610e5b565b6040516103cc9190613913565b60405180910390f35b3480156103e157600080fd5b506103fc60048036038101906103f791906139d0565b610e7d565b005b34801561040a57600080fd5b50610413610e93565b6040516104209190613a8f565b60405180910390f35b34801561043557600080fd5b50610450600480360381019061044b9190613add565b610f25565b60405161045d9190613b19565b60405180910390f35b34801561047257600080fd5b5061048d60048036038101906104889190613b34565b610faa565b005b34801561049b57600080fd5b506104a461112e565b6040516104b19190613913565b60405180910390f35b3480156104c657600080fd5b506104cf610974565b6040516104dc9190613b83565b60405180910390f35b3480156104f157600080fd5b5061050c60048036038101906105079190613b9e565b611145565b005b34801561051a57600080fd5b5061053560048036038101906105309190613bf1565b61130f565b604051610543929190613c31565b60405180910390f35b34801561055857600080fd5b50610573600480360381019061056e9190613b34565b6114f9565b6040516105809190613b83565b60405180910390f35b34801561059557600080fd5b5061059e6116f5565b6040516105ab9190613cb9565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d69190613b9e565b611707565b005b3480156105e957600080fd5b506105f26118d1565b6040516105ff9190613a8f565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a9190613add565b61195f565b60405161063c9190613b83565b60405180910390f35b34801561065157600080fd5b5061065a6119b2565b6040516106679190613b83565b60405180910390f35b34801561067c57600080fd5b5061069760048036038101906106929190613add565b6119b8565b6040516106a49190613b19565b60405180910390f35b3480156106b957600080fd5b506106d460048036038101906106cf9190613cd4565b6119ce565b6040516106e19190613913565b60405180910390f35b3480156106f657600080fd5b50610711600480360381019061070c9190613cd4565b611a24565b60405161071e9190613b83565b60405180910390f35b34801561073357600080fd5b5061073c611b0c565b005b34801561074a57600080fd5b50610753611b20565b6040516107609190613b19565b60405180910390f35b34801561077557600080fd5b50610790600480360381019061078b9190613d2d565b611b4a565b005b34801561079e57600080fd5b506107a7611b6f565b6040516107b49190613a8f565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df9190613dbf565b611c01565b005b3480156107f257600080fd5b5061080d60048036038101906108089190613e0c565b611c1f565b005b34801561081b57600080fd5b5061083660048036038101906108319190613f7c565b611da3565b005b34801561084457600080fd5b5061085f600480360381019061085a9190613add565b611f71565b60405161086c9190613a8f565b60405180910390f35b34801561088157600080fd5b5061088a612021565b6040516108979190613b83565b60405180910390f35b3480156108ac57600080fd5b506108c760048036038101906108c29190613e0c565b612027565b005b3480156108d557600080fd5b506108f060048036038101906108eb9190613fff565b61208a565b6040516108fd9190613913565b60405180910390f35b34801561091257600080fd5b5061092d60048036038101906109289190613cd4565b61211e565b005b34801561093b57600080fd5b5061095660048036038101906109519190613cd4565b6121a1565b6040516109639190613913565b60405180910390f35b600033905090565b60008054905090565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036109f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e9906140b1565b60405180910390fd5b6109fb816121c1565b15610a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a329061411d565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000004831115610a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a95906141af565b60405180910390fd5b610aab60008583866121ce565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151610ba891906141eb565b6fffffffffffffffffffffffffffffffff168152602001858360200151610bcf91906141eb565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015610e3e57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610dde60008884886121d4565b610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e14906142a1565b60405180910390fd5b8180610e28906142c1565b9250508080610e36906142c1565b915050610d6d565b5080600081905550610e53600087858861235b565b505050505050565b6000610e6682612361565b80610e765750610e75826124ab565b5b9050919050565b610e85612525565b610e8f82826125a3565b5050565b606060018054610ea290614338565b80601f0160208091040260200160405190810160405280929190818152602001828054610ece90614338565b8015610f1b5780601f10610ef057610100808354040283529160200191610f1b565b820191906000526020600020905b815481529060010190602001808311610efe57829003601f168201915b5050505050905090565b6000610f30826121c1565b610f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f66906143db565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b81600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561100c576110078383612738565b611129565b600a60009054906101000a900460ff16801561104d575060006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b115b1561111e576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b815260040161109b9291906143fb565b602060405180830381865afa1580156110b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110dc9190614439565b61111d57806040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016111149190613b19565b60405180910390fd5b5b6111288383612738565b5b505050565b6000600a60009054906101000a900460ff16905090565b82600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156111a8576111a3848484612850565b611309565b600a60009054906101000a900460ff1680156111e9575060006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b115b156112fd573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112315761122c848484612850565b611309565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b815260040161127a9291906143fb565b602060405180830381865afa158015611297573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112bb9190614439565b6112fc57336040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016112f39190613b19565b60405180910390fd5b5b611308848484612850565b5b50505050565b6000806000600960008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16036114a45760086040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b60006114ae612860565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff16866114da9190614466565b6114e491906144d7565b90508160000151819350935050509250929050565b600061150483611a24565b8210611545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153c9061457a565b60405180910390fd5b600061154f610974565b905060008060005b838110156116b3576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461164957806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361169f578684036116905781955050505050506116ef565b838061169b906142c1565b9450505b5080806116ab906142c1565b915050611557565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e69061460c565b60405180910390fd5b92915050565b6daaeb6d7670e522a718067333cd4e81565b82600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561176a5761176584848461286a565b6118cb565b600a60009054906101000a900460ff1680156117ab575060006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b115b156118bf573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117f3576117ee84848461286a565b6118cb565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b815260040161183c9291906143fb565b602060405180830381865afa158015611859573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187d9190614439565b6118be57336040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016118b59190613b19565b60405180910390fd5b5b6118ca84848461286a565b5b50505050565b600e80546118de90614338565b80601f016020809104026020016040519081016040528092919081815260200182805461190a90614338565b80156119575780601f1061192c57610100808354040283529160200191611957565b820191906000526020600020905b81548152906001019060200180831161193a57829003601f168201915b505050505081565b6000611969610974565b82106119aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a19061469e565b60405180910390fd5b819050919050565b600d5481565b60006119c38261288a565b600001519050919050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8b90614730565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611b14612525565b611b1e6000612a8d565b565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b52612525565b80600a60006101000a81548160ff02191690831515021790555050565b606060028054611b7e90614338565b80601f0160208091040260200160405190810160405280929190818152602001828054611baa90614338565b8015611bf75780601f10611bcc57610100808354040283529160200191611bf7565b820191906000526020600020905b815481529060010190602001808311611bda57829003601f168201915b5050505050905090565b611c09612525565b8181600e9182611c1a9291906148fd565b505050565b81600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611c8157611c7c8383612b53565b611d9e565b600a60009054906101000a900460ff168015611cc2575060006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b115b15611d93576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b8152600401611d109291906143fb565b602060405180830381865afa158015611d2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d519190614439565b611d9257806040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401611d899190613b19565b60405180910390fd5b5b611d9d8383612b53565b5b505050565b83600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e0757611e0285858585612cd3565b611f6a565b600a60009054906101000a900460ff168015611e48575060006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b115b15611f5d573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e9157611e8c85858585612cd3565b611f6a565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401611eda9291906143fb565b602060405180830381865afa158015611ef7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1b9190614439565b611f5c57336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401611f539190613b19565b60405180910390fd5b5b611f6985858585612cd3565b5b5050505050565b6060611f7c826121c1565b611fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb290614a3f565b60405180910390fd5b6000611fc5612d2f565b90506000815111611fee576040518060600160405280602d8152602001615361602d9139612019565b80611ff884612dc1565b604051602001612009929190614ae7565b6040516020818303038152906040525b915050919050565b60075481565b61202f612525565b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612126612525565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218c90614b88565b60405180910390fd5b61219e81612a8d565b50565b600f6020528060005260406000206000915054906101000a900460ff1681565b6000805482109050919050565b50505050565b60006121f58473ffffffffffffffffffffffffffffffffffffffff16612f21565b1561234e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261221e61096c565b8786866040518563ffffffff1660e01b81526004016122409493929190614bfd565b6020604051808303816000875af192505050801561227c57506040513d601f19601f820116820180604052508101906122799190614c5e565b60015b6122fe573d80600081146122ac576040519150601f19603f3d011682016040523d82523d6000602084013e6122b1565b606091505b5060008151036122f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ed906142a1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612353565b600190505b949350505050565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061242c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061249457507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806124a457506124a382612f44565b5b9050919050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061251e575061251d82612361565b5b9050919050565b61252d61096c565b73ffffffffffffffffffffffffffffffffffffffff1661254b611b20565b73ffffffffffffffffffffffffffffffffffffffff16146125a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259890614cd7565b60405180910390fd5b565b6125ab612860565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff161115612609576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260090614d69565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266f90614dd5565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600860008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b6000612743826119b8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127aa90614e67565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166127d261096c565b73ffffffffffffffffffffffffffffffffffffffff1614806128015750612800816127fb61096c565b61208a565b5b612840576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283790614ef9565b60405180910390fd5b61284b838383612fae565b505050565b61285b838383613060565b505050565b6000612710905090565b61288583838360405180602001604052806000815250611da3565b505050565b612892613617565b61289b826121c1565b6128da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d190614f8b565b60405180910390fd5b60007f0000000000000000000000000000000000000000000000000000000000000004831061293e5760017f0000000000000000000000000000000000000000000000000000000000000004846129319190614fab565b61293b91906137bf565b90505b60008390505b818110612a4c576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612a3857809350505050612a88565b508080612a4490614fdf565b915050612944565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7f9061507a565b60405180910390fd5b919050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612b5b61096c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbf906150e6565b60405180910390fd5b8060066000612bd561096c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612c8261096c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612cc79190613913565b60405180910390a35050565b612cde848484613060565b612cea848484846121d4565b612d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d20906142a1565b60405180910390fd5b50505050565b6060600e8054612d3e90614338565b80601f0160208091040260200160405190810160405280929190818152602001828054612d6a90614338565b8015612db75780601f10612d8c57610100808354040283529160200191612db7565b820191906000526020600020905b815481529060010190602001808311612d9a57829003601f168201915b5050505050905090565b606060008203612e08576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f1c565b600082905060005b60008214612e3a578080612e23906142c1565b915050600a82612e3391906144d7565b9150612e10565b60008167ffffffffffffffff811115612e5657612e55613e51565b5b6040519080825280601f01601f191660200182016040528015612e885781602001600182028036833780820191505090505b5090505b60008514612f1557600182612ea19190614fab565b9150600a85612eb09190615106565b6030612ebc91906137bf565b60f81b818381518110612ed257612ed1615137565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f0e91906144d7565b9450612e8c565b8093505050505b919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061306b8261288a565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661309261096c565b73ffffffffffffffffffffffffffffffffffffffff1614806130ee57506130b761096c565b73ffffffffffffffffffffffffffffffffffffffff166130d684610f25565b73ffffffffffffffffffffffffffffffffffffffff16145b8061310a5750613109826000015161310461096c565b61208a565b5b90508061314c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613143906151d8565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146131be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b59061526a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361322d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613224906152fc565b60405180910390fd5b61323a85858560016121ce565b61324a6000848460000151612fae565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166132b8919061531c565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661335c91906141eb565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461346291906137bf565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036135a7576134d7816121c1565b156135a6576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461360f868686600161235b565b505050505050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b600082825260208201905092915050565b7f726563656976653a206361747320646f6e2774206e65656420616e792045544860008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b60006136be602183613651565b91506136c982613662565b604082019050919050565b600060208201905081810360008301526136ed816136b1565b9050919050565b7f726563656976653a2077616c6c6574206d696e74656420697473206461626c6f60008201527f6f6e7320616c72656164792e0000000000000000000000000000000000000000602082015250565b6000613750602c83613651565b915061375b826136f4565b604082019050919050565b6000602082019050818103600083015261377f81613743565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006137ca82613786565b91506137d583613786565b92508282019050808211156137ed576137ec613790565b5b92915050565b7f7265636569766528293a206d61782e20737570706c7920726561636865642e00600082015250565b6000613829601f83613651565b9150613834826137f3565b602082019050919050565b600060208201905081810360008301526138588161381c565b9050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6138a881613873565b81146138b357600080fd5b50565b6000813590506138c58161389f565b92915050565b6000602082840312156138e1576138e0613869565b5b60006138ef848285016138b6565b91505092915050565b60008115159050919050565b61390d816138f8565b82525050565b60006020820190506139286000830184613904565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139598261392e565b9050919050565b6139698161394e565b811461397457600080fd5b50565b60008135905061398681613960565b92915050565b60006bffffffffffffffffffffffff82169050919050565b6139ad8161398c565b81146139b857600080fd5b50565b6000813590506139ca816139a4565b92915050565b600080604083850312156139e7576139e6613869565b5b60006139f585828601613977565b9250506020613a06858286016139bb565b9150509250929050565b600081519050919050565b60005b83811015613a39578082015181840152602081019050613a1e565b60008484015250505050565b6000601f19601f8301169050919050565b6000613a6182613a10565b613a6b8185613651565b9350613a7b818560208601613a1b565b613a8481613a45565b840191505092915050565b60006020820190508181036000830152613aa98184613a56565b905092915050565b613aba81613786565b8114613ac557600080fd5b50565b600081359050613ad781613ab1565b92915050565b600060208284031215613af357613af2613869565b5b6000613b0184828501613ac8565b91505092915050565b613b138161394e565b82525050565b6000602082019050613b2e6000830184613b0a565b92915050565b60008060408385031215613b4b57613b4a613869565b5b6000613b5985828601613977565b9250506020613b6a85828601613ac8565b9150509250929050565b613b7d81613786565b82525050565b6000602082019050613b986000830184613b74565b92915050565b600080600060608486031215613bb757613bb6613869565b5b6000613bc586828701613977565b9350506020613bd686828701613977565b9250506040613be786828701613ac8565b9150509250925092565b60008060408385031215613c0857613c07613869565b5b6000613c1685828601613ac8565b9250506020613c2785828601613ac8565b9150509250929050565b6000604082019050613c466000830185613b0a565b613c536020830184613b74565b9392505050565b6000819050919050565b6000613c7f613c7a613c758461392e565b613c5a565b61392e565b9050919050565b6000613c9182613c64565b9050919050565b6000613ca382613c86565b9050919050565b613cb381613c98565b82525050565b6000602082019050613cce6000830184613caa565b92915050565b600060208284031215613cea57613ce9613869565b5b6000613cf884828501613977565b91505092915050565b613d0a816138f8565b8114613d1557600080fd5b50565b600081359050613d2781613d01565b92915050565b600060208284031215613d4357613d42613869565b5b6000613d5184828501613d18565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112613d7f57613d7e613d5a565b5b8235905067ffffffffffffffff811115613d9c57613d9b613d5f565b5b602083019150836001820283011115613db857613db7613d64565b5b9250929050565b60008060208385031215613dd657613dd5613869565b5b600083013567ffffffffffffffff811115613df457613df361386e565b5b613e0085828601613d69565b92509250509250929050565b60008060408385031215613e2357613e22613869565b5b6000613e3185828601613977565b9250506020613e4285828601613d18565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613e8982613a45565b810181811067ffffffffffffffff82111715613ea857613ea7613e51565b5b80604052505050565b6000613ebb61385f565b9050613ec78282613e80565b919050565b600067ffffffffffffffff821115613ee757613ee6613e51565b5b613ef082613a45565b9050602081019050919050565b82818337600083830152505050565b6000613f1f613f1a84613ecc565b613eb1565b905082815260208101848484011115613f3b57613f3a613e4c565b5b613f46848285613efd565b509392505050565b600082601f830112613f6357613f62613d5a565b5b8135613f73848260208601613f0c565b91505092915050565b60008060008060808587031215613f9657613f95613869565b5b6000613fa487828801613977565b9450506020613fb587828801613977565b9350506040613fc687828801613ac8565b925050606085013567ffffffffffffffff811115613fe757613fe661386e565b5b613ff387828801613f4e565b91505092959194509250565b6000806040838503121561401657614015613869565b5b600061402485828601613977565b925050602061403585828601613977565b9150509250929050565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061409b602183613651565b91506140a68261403f565b604082019050919050565b600060208201905081810360008301526140ca8161408e565b9050919050565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b6000614107601d83613651565b9150614112826140d1565b602082019050919050565b60006020820190508181036000830152614136816140fa565b9050919050565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b6000614199602283613651565b91506141a48261413d565b604082019050919050565b600060208201905081810360008301526141c88161418c565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b60006141f6826141cf565b9150614201836141cf565b925082820190506fffffffffffffffffffffffffffffffff81111561422957614228613790565b5b92915050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b600061428b603383613651565b91506142968261422f565b604082019050919050565b600060208201905081810360008301526142ba8161427e565b9050919050565b60006142cc82613786565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036142fe576142fd613790565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061435057607f821691505b60208210810361436357614362614309565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b60006143c5602d83613651565b91506143d082614369565b604082019050919050565b600060208201905081810360008301526143f4816143b8565b9050919050565b60006040820190506144106000830185613b0a565b61441d6020830184613b0a565b9392505050565b60008151905061443381613d01565b92915050565b60006020828403121561444f5761444e613869565b5b600061445d84828501614424565b91505092915050565b600061447182613786565b915061447c83613786565b925082820261448a81613786565b915082820484148315176144a1576144a0613790565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006144e282613786565b91506144ed83613786565b9250826144fd576144fc6144a8565b5b828204905092915050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000614564602283613651565b915061456f82614508565b604082019050919050565b6000602082019050818103600083015261459381614557565b9050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b60006145f6602e83613651565b91506146018261459a565b604082019050919050565b60006020820190508181036000830152614625816145e9565b9050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b6000614688602383613651565b91506146938261462c565b604082019050919050565b600060208201905081810360008301526146b78161467b565b9050919050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b600061471a602b83613651565b9150614725826146be565b604082019050919050565b600060208201905081810360008301526147498161470d565b9050919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026147bd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614780565b6147c78683614780565b95508019841693508086168417925050509392505050565b60006147fa6147f56147f084613786565b613c5a565b613786565b9050919050565b6000819050919050565b614814836147df565b61482861482082614801565b84845461478d565b825550505050565b600090565b61483d614830565b61484881848461480b565b505050565b5b8181101561486c57614861600082614835565b60018101905061484e565b5050565b601f8211156148b1576148828161475b565b61488b84614770565b8101602085101561489a578190505b6148ae6148a685614770565b83018261484d565b50505b505050565b600082821c905092915050565b60006148d4600019846008026148b6565b1980831691505092915050565b60006148ed83836148c3565b9150826002028217905092915050565b6149078383614750565b67ffffffffffffffff8111156149205761491f613e51565b5b61492a8254614338565b614935828285614870565b6000601f8311600181146149645760008415614952578287013590505b61495c85826148e1565b8655506149c4565b601f1984166149728661475b565b60005b8281101561499a57848901358255600182019150602085019450602081019050614975565b868310156149b757848901356149b3601f8916826148c3565b8355505b6001600288020188555050505b50505050505050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614a29602f83613651565b9150614a34826149cd565b604082019050919050565b60006020820190508181036000830152614a5881614a1c565b9050919050565b600081905092915050565b6000614a7582613a10565b614a7f8185614a5f565b9350614a8f818560208601613a1b565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000614ad1600583614a5f565b9150614adc82614a9b565b600582019050919050565b6000614af38285614a6a565b9150614aff8284614a6a565b9150614b0a82614ac4565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b72602683613651565b9150614b7d82614b16565b604082019050919050565b60006020820190508181036000830152614ba181614b65565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614bcf82614ba8565b614bd98185614bb3565b9350614be9818560208601613a1b565b614bf281613a45565b840191505092915050565b6000608082019050614c126000830187613b0a565b614c1f6020830186613b0a565b614c2c6040830185613b74565b8181036060830152614c3e8184614bc4565b905095945050505050565b600081519050614c588161389f565b92915050565b600060208284031215614c7457614c73613869565b5b6000614c8284828501614c49565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614cc1602083613651565b9150614ccc82614c8b565b602082019050919050565b60006020820190508181036000830152614cf081614cb4565b9050919050565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b6000614d53602a83613651565b9150614d5e82614cf7565b604082019050919050565b60006020820190508181036000830152614d8281614d46565b9050919050565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b6000614dbf601983613651565b9150614dca82614d89565b602082019050919050565b60006020820190508181036000830152614dee81614db2565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e51602283613651565b9150614e5c82614df5565b604082019050919050565b60006020820190508181036000830152614e8081614e44565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b6000614ee3603983613651565b9150614eee82614e87565b604082019050919050565b60006020820190508181036000830152614f1281614ed6565b9050919050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b6000614f75602a83613651565b9150614f8082614f19565b604082019050919050565b60006020820190508181036000830152614fa481614f68565b9050919050565b6000614fb682613786565b9150614fc183613786565b9250828203905081811115614fd957614fd8613790565b5b92915050565b6000614fea82613786565b915060008203614ffd57614ffc613790565b5b600182039050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b6000615064602f83613651565b915061506f82615008565b604082019050919050565b6000602082019050818103600083015261509381615057565b9050919050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b60006150d0601a83613651565b91506150db8261509a565b602082019050919050565b600060208201905081810360008301526150ff816150c3565b9050919050565b600061511182613786565b915061511c83613786565b92508261512c5761512b6144a8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006151c2603283613651565b91506151cd82615166565b604082019050919050565b600060208201905081810360008301526151f1816151b5565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b6000615254602683613651565b915061525f826151f8565b604082019050919050565b6000602082019050818103600083015261528381615247565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006152e6602583613651565b91506152f18261528a565b604082019050919050565b60006020820190508181036000830152615315816152d9565b9050919050565b6000615327826141cf565b9150615332836141cf565b925082820390506fffffffffffffffffffffffffffffffff81111561535a57615359613790565b5b9291505056fe68747470733a2f2f7261726974792e67617264656e2f6d656469612f6461626c6f6f6e732f6361742e6a736f6ea26469706673582212200b3c86e3f2ab8b2dc18344236026bc713ef56fb16217aa99f041a49b8afac0c964736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000077359400000000000000000000000000000000000000000000000000000000000000000084461626c6f6f6e73000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000544424c4e530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): Dabloons
Arg [1] : symbol (string): DBLNS
Arg [2] : baseTokenURI (string):
Arg [3] : max_batch (uint256): 4
Arg [4] : collection_size (uint256): 32000000000
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [4] : 0000000000000000000000000000000000000000000000000000000773594000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [6] : 4461626c6f6f6e73000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [8] : 44424c4e53000000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
52002:4214:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52617:1;52604:9;:14;52596:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;52676:7;:21;52684:12;:10;:12::i;:::-;52676:21;;;;;;;;;;;;;;;;;;;;;;;;;52675:22;52667:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;52786:10;;52781:1;52765:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:31;;52757:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;52869:4;52845:7;:21;52853:12;:10;:12::i;:::-;52845:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;52884:30;52894:12;:10;:12::i;:::-;52908:1;52884:30;;;;;;;;;;;;:9;:30::i;:::-;52002:4214;;;;;53610:276;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53947:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40473:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42006:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55462:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55153:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37308:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55629:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25734:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;37939:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2913:143;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55802:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52150:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37471:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52118:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40296:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54892:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39173:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10860:103;;;;;;;;;;;;;:::i;:::-;;10212:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55032:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40628:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53478:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55267:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55983:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53058:408;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47736:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54743:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42627:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11118:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52184:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8763:98;8816:7;8843:10;8836:17;;8763:98;:::o;37308:94::-;37361:7;37384:12;;37377:19;;37308:94;:::o;44419:1272::-;44524:20;44547:12;;44524:35;;44588:1;44574:16;;:2;:16;;;44566:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;44765:21;44773:12;44765:7;:21::i;:::-;44764:22;44756:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;44847:12;44835:8;:24;;44827:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;44907:61;44937:1;44941:2;44945:12;44959:8;44907:21;:61::i;:::-;44977:30;45010:12;:16;45023:2;45010:16;;;;;;;;;;;;;;;44977:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45052:119;;;;;;;;45102:8;45072:11;:19;;;:39;;;;:::i;:::-;45052:119;;;;;;45155:8;45120:11;:24;;;:44;;;;:::i;:::-;45052:119;;;;;45033:12;:16;45046:2;45033:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45206:43;;;;;;;;45221:2;45206:43;;;;;;45232:15;45206:43;;;;;45178:11;:25;45190:12;45178:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45258:20;45281:12;45258:35;;45307:9;45302:281;45326:8;45322:1;:12;45302:281;;;45380:12;45376:2;45355:38;;45372:1;45355:38;;;;;;;;;;;;45420:59;45451:1;45455:2;45459:12;45473:5;45420:22;:59::i;:::-;45402:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;45561:14;;;;;:::i;:::-;;;;45336:3;;;;;:::i;:::-;;;;45302:281;;;;45606:12;45591;:27;;;;45625:60;45654:1;45658:2;45662:12;45676:8;45625:20;:60::i;:::-;44517:1174;;;44419:1272;;;:::o;53610:276::-;53741:4;53785:38;53811:11;53785:25;:38::i;:::-;:93;;;;53840:38;53866:11;53840:25;:38::i;:::-;53785:93;53765:113;;53610:276;;;:::o;53947:162::-;10098:13;:11;:13::i;:::-;54052:49:::1;54071:14;54087:13;54052:18;:49::i;:::-;53947:162:::0;;:::o;40473:94::-;40527:13;40556:5;40549:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40473:94;:::o;42006:212::-;42082:7;42106:16;42114:7;42106;:16::i;:::-;42098:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;42188:15;:24;42204:7;42188:24;;;;;;;;;;;;;;;;;;;;;42181:31;;42006:212;;;:::o;55462:159::-;55558:8;5010:17;:27;5028:8;5010:27;;;;;;;;;;;;;;;;;;;;;;;;;5007:444;;;55581:32:::1;55595:8;55605:7;55581:13;:32::i;:::-;5070:7:::0;;5007:444;5213:13;;;;;;;;;;;:66;;;;;5278:1;3013:42;5230:45;;;:49;5213:66;5209:242;;;3013:42;5301;;;5352:4;5359:8;5301:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5296:144;;5415:8;5396:28;;;;;;;;;;;:::i;:::-;;;;;;;;5296:144;5209:242;55581:32:::1;55595:8;55605:7;55581:13;:32::i;:::-;55462:159:::0;;;;:::o;55153:106::-;55212:4;55238:13;;;;;;;;;;;55231:20;;55153:106;:::o;55629:165::-;55730:4;4155:17;:23;4173:4;4155:23;;;;;;;;;;;;;;;;;;;;;;;;;4152:754;;;55749:37:::1;55768:4;55774:2;55778:7;55749:18;:37::i;:::-;4211:7:::0;;4152:754;4354:13;;;;;;;;;;;:66;;;;;4419:1;3013:42;4371:45;;;:49;4354:66;4350:556;;;4660:10;4652:18;;:4;:18;;;4648:85;;55749:37:::1;55768:4;55774:2;55778:7;55749:18;:37::i;:::-;4711:7:::0;;4648:85;3013:42;4752;;;4803:4;4810:10;4752:69;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4747:148;;4868:10;4849:30;;;;;;;;;;;:::i;:::-;;;;;;;;4747:148;4350:556;55749:37:::1;55768:4;55774:2;55778:7;55749:18;:37::i;:::-;55629:165:::0;;;;;:::o;25734:442::-;25831:7;25840;25860:26;25889:17;:27;25907:8;25889:27;;;;;;;;;;;25860:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25961:1;25933:30;;:7;:16;;;:30;;;25929:92;;25990:19;25980:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25929:92;26033:21;26098:17;:15;:17::i;:::-;26057:58;;26071:7;:23;;;26058:36;;:10;:36;;;;:::i;:::-;26057:58;;;;:::i;:::-;26033:82;;26136:7;:16;;;26154:13;26128:40;;;;;;25734:442;;;;;:::o;37939:744::-;38048:7;38083:16;38093:5;38083:9;:16::i;:::-;38075:5;:24;38067:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;38145:22;38170:13;:11;:13::i;:::-;38145:38;;38190:19;38220:25;38270:9;38265:350;38289:14;38285:1;:18;38265:350;;;38319:31;38353:11;:14;38365:1;38353:14;;;;;;;;;;;38319:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38406:1;38380:28;;:9;:14;;;:28;;;38376:89;;38441:9;:14;;;38421:34;;38376:89;38498:5;38477:26;;:17;:26;;;38473:135;;38535:5;38520:11;:20;38516:59;;38562:1;38555:8;;;;;;;;;38516:59;38585:13;;;;;:::i;:::-;;;;38473:135;38310:305;38305:3;;;;;:::i;:::-;;;;38265:350;;;;38621:56;;;;;;;;;;:::i;:::-;;;;;;;;37939:744;;;;;:::o;2913:143::-;3013:42;2913:143;:::o;55802:173::-;55907:4;4155:17;:23;4173:4;4155:23;;;;;;;;;;;;;;;;;;;;;;;;;4152:754;;;55926:41:::1;55949:4;55955:2;55959:7;55926:22;:41::i;:::-;4211:7:::0;;4152:754;4354:13;;;;;;;;;;;:66;;;;;4419:1;3013:42;4371:45;;;:49;4354:66;4350:556;;;4660:10;4652:18;;:4;:18;;;4648:85;;55926:41:::1;55949:4;55955:2;55959:7;55926:22;:41::i;:::-;4711:7:::0;;4648:85;3013:42;4752;;;4803:4;4810:10;4752:69;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4747:148;;4868:10;4849:30;;;;;;;;;;;:::i;:::-;;;;;;;;4747:148;4350:556;55926:41:::1;55949:4;55955:2;55959:7;55926:22;:41::i;:::-;55802:173:::0;;;;;:::o;52150:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37471:177::-;37538:7;37570:13;:11;:13::i;:::-;37562:5;:21;37554:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;37637:5;37630:12;;37471:177;;;:::o;52118:25::-;;;;:::o;40296:118::-;40360:7;40383:20;40395:7;40383:11;:20::i;:::-;:25;;;40376:32;;40296:118;;;:::o;54892:132::-;54962:4;54988:17;:28;55006:9;54988:28;;;;;;;;;;;;;;;;;;;;;;;;;54981:35;;54892:132;;;:::o;39173:211::-;39237:7;39278:1;39261:19;;:5;:19;;;39253:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;39350:12;:19;39363:5;39350:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;39342:36;;39335:43;;39173:211;;;:::o;10860:103::-;10098:13;:11;:13::i;:::-;10925:30:::1;10952:1;10925:18;:30::i;:::-;10860:103::o:0;10212:87::-;10258:7;10285:6;;;;;;;;;;;10278:13;;10212:87;:::o;55032:113::-;10098:13;:11;:13::i;:::-;55130:7:::1;55114:13;;:23;;;;;;;;;;;;;;;;;;55032:113:::0;:::o;40628:98::-;40684:13;40713:7;40706:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40628:98;:::o;53478:124::-;10098:13;:11;:13::i;:::-;53582:12:::1;;53566:13;:28;;;;;;;:::i;:::-;;53478:124:::0;;:::o;55267:187::-;55372:8;5010:17;:27;5028:8;5010:27;;;;;;;;;;;;;;;;;;;;;;;;;5007:444;;;55403:43:::1;55427:8;55437;55403:23;:43::i;:::-;5070:7:::0;;5007:444;5213:13;;;;;;;;;;;:66;;;;;5278:1;3013:42;5230:45;;;:49;5213:66;5209:242;;;3013:42;5301;;;5352:4;5359:8;5301:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5296:144;;5415:8;5396:28;;;;;;;;;;;:::i;:::-;;;;;;;;5296:144;5209:242;55403:43:::1;55427:8;55437;55403:23;:43::i;:::-;55267:187:::0;;;;:::o;55983:230::-;56134:4;4155:17;:23;4173:4;4155:23;;;;;;;;;;;;;;;;;;;;;;;;;4152:754;;;56158:47:::1;56181:4;56187:2;56191:7;56200:4;56158:22;:47::i;:::-;4211:7:::0;;4152:754;4354:13;;;;;;;;;;;:66;;;;;4419:1;3013:42;4371:45;;;:49;4354:66;4350:556;;;4660:10;4652:18;;:4;:18;;;4648:85;;56158:47:::1;56181:4;56187:2;56191:7;56200:4;56158:22;:47::i;:::-;4711:7:::0;;4648:85;3013:42;4752;;;4803:4;4810:10;4752:69;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4747:148;;4868:10;4849:30;;;;;;;;;;;:::i;:::-;;;;;;;;4747:148;4350:556;56158:47:::1;56181:4;56187:2;56191:7;56200:4;56158:22;:47::i;:::-;55983:230:::0;;;;;;:::o;53058:408::-;53131:13;53175:16;53183:7;53175;:16::i;:::-;53167:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;53266:21;53290:10;:8;:10::i;:::-;53266:34;;53342:1;53324:7;53318:21;:25;:140;;;;;;;;;;;;;;;;;;;;;;53370:7;53379:18;:7;:16;:18::i;:::-;53353:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;53318:140;53311:147;;;53058:408;;;:::o;47736:43::-;;;;:::o;54743:141::-;10098:13;:11;:13::i;:::-;54869:7:::1;54838:17;:28;54856:9;54838:28;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;54743:141:::0;;:::o;42627:186::-;42749:4;42772:18;:25;42791:5;42772:25;;;;;;;;;;;;;;;:35;42798:8;42772:35;;;;;;;;;;;;;;;;;;;;;;;;;42765:42;;42627:186;;;;:::o;11118:201::-;10098:13;:11;:13::i;:::-;11227:1:::1;11207:22;;:8;:22;;::::0;11199:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;11283:28;11302:8;11283:18;:28::i;:::-;11118:201:::0;:::o;52184:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;43871:105::-;43928:4;43958:12;;43948:7;:22;43941:29;;43871:105;;;:::o;50425:141::-;;;;;:::o;49273:690::-;49410:4;49427:15;:2;:13;;;:15::i;:::-;49423:535;;;49482:2;49466:36;;;49503:12;:10;:12::i;:::-;49517:4;49523:7;49532:5;49466:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;49453:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49714:1;49697:6;:13;:18;49693:215;;49730:61;;;;;;;;;;:::i;:::-;;;;;;;;49693:215;49876:6;49870:13;49861:6;49857:2;49853:15;49846:38;49453:464;49598:45;;;49588:55;;;:6;:55;;;;49581:62;;;;;49423:535;49946:4;49939:11;;49273:690;;;;;;;:::o;50952:140::-;;;;;:::o;38747:370::-;38874:4;38919:25;38904:40;;;:11;:40;;;;:99;;;;38970:33;38955:48;;;:11;:48;;;;38904:99;:160;;;;39029:35;39014:50;;;:11;:50;;;;38904:160;:207;;;;39075:36;39099:11;39075:23;:36::i;:::-;38904:207;38890:221;;38747:370;;;:::o;25464:215::-;25566:4;25605:26;25590:41;;;:11;:41;;;;:81;;;;25635:36;25659:11;25635:23;:36::i;:::-;25590:81;25583:88;;25464:215;;;:::o;10377:132::-;10452:12;:10;:12::i;:::-;10441:23;;:7;:5;:7::i;:::-;:23;;;10433:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10377:132::o;26826:332::-;26945:17;:15;:17::i;:::-;26929:33;;:12;:33;;;;26921:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;27048:1;27028:22;;:8;:22;;;27020:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;27115:35;;;;;;;;27127:8;27115:35;;;;;;27137:12;27115:35;;;;;27093:19;:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26826:332;;:::o;41561:387::-;41638:13;41654:24;41670:7;41654:15;:24::i;:::-;41638:40;;41699:5;41693:11;;:2;:11;;;41685:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;41784:5;41768:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;41793:37;41810:5;41817:12;:10;:12::i;:::-;41793:16;:37::i;:::-;41768:62;41752:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;41914:28;41923:2;41927:7;41936:5;41914:8;:28::i;:::-;41631:317;41561:387;;:::o;42872:150::-;42988:28;42998:4;43004:2;43008:7;42988:9;:28::i;:::-;42872:150;;;:::o;26458:97::-;26516:6;26542:5;26535:12;;26458:97;:::o;43085:165::-;43205:39;43222:4;43228:2;43232:7;43205:39;;;;;;;;;;;;:16;:39::i;:::-;43085:165;;;:::o;39636:606::-;39712:21;;:::i;:::-;39753:16;39761:7;39753;:16::i;:::-;39745:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;39825:26;39873:12;39862:7;:23;39858:93;;39942:1;39927:12;39917:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;39896:47;;39858:93;39964:12;39979:7;39964:22;;39959:212;39996:18;39988:4;:26;39959:212;;40033:31;40067:11;:17;40079:4;40067:17;;;;;;;;;;;40033:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40123:1;40097:28;;:9;:14;;;:28;;;40093:71;;40145:9;40138:16;;;;;;;40093:71;40024:147;40016:6;;;;;:::i;:::-;;;;39959:212;;;;40179:57;;;;;;;;;;:::i;:::-;;;;;;;;39636:606;;;;:::o;11479:191::-;11553:16;11572:6;;;;;;;;;;;11553:25;;11598:8;11589:6;;:17;;;;;;;;;;;;;;;;;;11653:8;11622:40;;11643:8;11622:40;;;;;;;;;;;;11542:128;11479:191;:::o;42282:282::-;42393:12;:10;:12::i;:::-;42381:24;;:8;:24;;;42373:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;42490:8;42445:18;:32;42464:12;:10;:12::i;:::-;42445:32;;;;;;;;;;;;;;;:42;42478:8;42445:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;42539:8;42510:48;;42525:12;:10;:12::i;:::-;42510:48;;;42549:8;42510:48;;;;;;:::i;:::-;;;;;;;;42282:282;;:::o;43313:319::-;43458:28;43468:4;43474:2;43478:7;43458:9;:28::i;:::-;43509:48;43532:4;43538:2;43542:7;43551:5;43509:22;:48::i;:::-;43493:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;43313:319;;;;:::o;52930:116::-;52990:13;53025;53018:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52930:116;:::o;6325:723::-;6381:13;6611:1;6602:5;:10;6598:53;;6629:10;;;;;;;;;;;;;;;;;;;;;6598:53;6661:12;6676:5;6661:20;;6692:14;6717:78;6732:1;6724:4;:9;6717:78;;6750:8;;;;;:::i;:::-;;;;6781:2;6773:10;;;;;:::i;:::-;;;6717:78;;;6805:19;6837:6;6827:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6805:39;;6855:154;6871:1;6862:5;:10;6855:154;;6899:1;6889:11;;;;;:::i;:::-;;;6966:2;6958:5;:10;;;;:::i;:::-;6945:2;:24;;;;:::i;:::-;6932:39;;6915:6;6922;6915:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;6995:2;6986:11;;;;;:::i;:::-;;;6855:154;;;7033:6;7019:21;;;;;6325:723;;;;:::o;12910:326::-;12970:4;13227:1;13205:7;:19;;;:23;13198:30;;12910:326;;;:::o;23914:157::-;23999:4;24038:25;24023:40;;;:11;:40;;;;24016:47;;23914:157;;;:::o;47558:172::-;47682:2;47655:15;:24;47671:7;47655:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;47716:7;47712:2;47696:28;;47705:5;47696:28;;;;;;;;;;;;47558:172;;;:::o;45923:1529::-;46020:35;46058:20;46070:7;46058:11;:20::i;:::-;46020:58;;46087:22;46129:13;:18;;;46113:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;46182:12;:10;:12::i;:::-;46158:36;;:20;46170:7;46158:11;:20::i;:::-;:36;;;46113:81;:142;;;;46205:50;46222:13;:18;;;46242:12;:10;:12::i;:::-;46205:16;:50::i;:::-;46113:142;46087:169;;46281:17;46265:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;46413:4;46391:26;;:13;:18;;;:26;;;46375:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;46502:1;46488:16;;:2;:16;;;46480:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;46555:43;46577:4;46583:2;46587:7;46596:1;46555:21;:43::i;:::-;46655:49;46672:1;46676:7;46685:13;:18;;;46655:8;:49::i;:::-;46743:1;46713:12;:18;46726:4;46713:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;46779:1;46751:12;:16;46764:2;46751:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;46810:43;;;;;;;;46825:2;46810:43;;;;;;46836:15;46810:43;;;;;46787:11;:20;46799:7;46787:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47081:19;47113:1;47103:7;:11;;;;:::i;:::-;47081:33;;47166:1;47125:43;;:11;:24;47137:11;47125:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;47121:236;;47183:20;47191:11;47183:7;:20::i;:::-;47179:171;;;47243:97;;;;;;;;47270:13;:18;;;47243:97;;;;;;47301:13;:28;;;47243:97;;;;;47216:11;:24;47228:11;47216:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47179:171;47121:236;47389:7;47385:2;47370:27;;47379:4;47370:27;;;;;;;;;;;;47404:42;47425:4;47431:2;47435:7;47444:1;47404:20;:42::i;:::-;46013:1439;;;45923:1529;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;:::o;7:169:1:-;91:11;125:6;120:3;113:19;165:4;160:3;156:14;141:29;;7:169;;;;:::o;182:220::-;322:34;318:1;310:6;306:14;299:58;391:3;386:2;378:6;374:15;367:28;182:220;:::o;408:366::-;550:3;571:67;635:2;630:3;571:67;:::i;:::-;564:74;;647:93;736:3;647:93;:::i;:::-;765:2;760:3;756:12;749:19;;408:366;;;:::o;780:419::-;946:4;984:2;973:9;969:18;961:26;;1033:9;1027:4;1023:20;1019:1;1008:9;1004:17;997:47;1061:131;1187:4;1061:131;:::i;:::-;1053:139;;780:419;;;:::o;1205:231::-;1345:34;1341:1;1333:6;1329:14;1322:58;1414:14;1409:2;1401:6;1397:15;1390:39;1205:231;:::o;1442:366::-;1584:3;1605:67;1669:2;1664:3;1605:67;:::i;:::-;1598:74;;1681:93;1770:3;1681:93;:::i;:::-;1799:2;1794:3;1790:12;1783:19;;1442:366;;;:::o;1814:419::-;1980:4;2018:2;2007:9;2003:18;1995:26;;2067:9;2061:4;2057:20;2053:1;2042:9;2038:17;2031:47;2095:131;2221:4;2095:131;:::i;:::-;2087:139;;1814:419;;;:::o;2239:77::-;2276:7;2305:5;2294:16;;2239:77;;;:::o;2322:180::-;2370:77;2367:1;2360:88;2467:4;2464:1;2457:15;2491:4;2488:1;2481:15;2508:191;2548:3;2567:20;2585:1;2567:20;:::i;:::-;2562:25;;2601:20;2619:1;2601:20;:::i;:::-;2596:25;;2644:1;2641;2637:9;2630:16;;2665:3;2662:1;2659:10;2656:36;;;2672:18;;:::i;:::-;2656:36;2508:191;;;;:::o;2705:181::-;2845:33;2841:1;2833:6;2829:14;2822:57;2705:181;:::o;2892:366::-;3034:3;3055:67;3119:2;3114:3;3055:67;:::i;:::-;3048:74;;3131:93;3220:3;3131:93;:::i;:::-;3249:2;3244:3;3240:12;3233:19;;2892:366;;;:::o;3264:419::-;3430:4;3468:2;3457:9;3453:18;3445:26;;3517:9;3511:4;3507:20;3503:1;3492:9;3488:17;3481:47;3545:131;3671:4;3545:131;:::i;:::-;3537:139;;3264:419;;;:::o;3689:75::-;3722:6;3755:2;3749:9;3739:19;;3689:75;:::o;3770:117::-;3879:1;3876;3869:12;3893:117;4002:1;3999;3992:12;4016:149;4052:7;4092:66;4085:5;4081:78;4070:89;;4016:149;;;:::o;4171:120::-;4243:23;4260:5;4243:23;:::i;:::-;4236:5;4233:34;4223:62;;4281:1;4278;4271:12;4223:62;4171:120;:::o;4297:137::-;4342:5;4380:6;4367:20;4358:29;;4396:32;4422:5;4396:32;:::i;:::-;4297:137;;;;:::o;4440:327::-;4498:6;4547:2;4535:9;4526:7;4522:23;4518:32;4515:119;;;4553:79;;:::i;:::-;4515:119;4673:1;4698:52;4742:7;4733:6;4722:9;4718:22;4698:52;:::i;:::-;4688:62;;4644:116;4440:327;;;;:::o;4773:90::-;4807:7;4850:5;4843:13;4836:21;4825:32;;4773:90;;;:::o;4869:109::-;4950:21;4965:5;4950:21;:::i;:::-;4945:3;4938:34;4869:109;;:::o;4984:210::-;5071:4;5109:2;5098:9;5094:18;5086:26;;5122:65;5184:1;5173:9;5169:17;5160:6;5122:65;:::i;:::-;4984:210;;;;:::o;5200:126::-;5237:7;5277:42;5270:5;5266:54;5255:65;;5200:126;;;:::o;5332:96::-;5369:7;5398:24;5416:5;5398:24;:::i;:::-;5387:35;;5332:96;;;:::o;5434:122::-;5507:24;5525:5;5507:24;:::i;:::-;5500:5;5497:35;5487:63;;5546:1;5543;5536:12;5487:63;5434:122;:::o;5562:139::-;5608:5;5646:6;5633:20;5624:29;;5662:33;5689:5;5662:33;:::i;:::-;5562:139;;;;:::o;5707:109::-;5743:7;5783:26;5776:5;5772:38;5761:49;;5707:109;;;:::o;5822:120::-;5894:23;5911:5;5894:23;:::i;:::-;5887:5;5884:34;5874:62;;5932:1;5929;5922:12;5874:62;5822:120;:::o;5948:137::-;5993:5;6031:6;6018:20;6009:29;;6047:32;6073:5;6047:32;:::i;:::-;5948:137;;;;:::o;6091:472::-;6158:6;6166;6215:2;6203:9;6194:7;6190:23;6186:32;6183:119;;;6221:79;;:::i;:::-;6183:119;6341:1;6366:53;6411:7;6402:6;6391:9;6387:22;6366:53;:::i;:::-;6356:63;;6312:117;6468:2;6494:52;6538:7;6529:6;6518:9;6514:22;6494:52;:::i;:::-;6484:62;;6439:117;6091:472;;;;;:::o;6569:99::-;6621:6;6655:5;6649:12;6639:22;;6569:99;;;:::o;6674:246::-;6755:1;6765:113;6779:6;6776:1;6773:13;6765:113;;;6864:1;6859:3;6855:11;6849:18;6845:1;6840:3;6836:11;6829:39;6801:2;6798:1;6794:10;6789:15;;6765:113;;;6912:1;6903:6;6898:3;6894:16;6887:27;6736:184;6674:246;;;:::o;6926:102::-;6967:6;7018:2;7014:7;7009:2;7002:5;6998:14;6994:28;6984:38;;6926:102;;;:::o;7034:377::-;7122:3;7150:39;7183:5;7150:39;:::i;:::-;7205:71;7269:6;7264:3;7205:71;:::i;:::-;7198:78;;7285:65;7343:6;7338:3;7331:4;7324:5;7320:16;7285:65;:::i;:::-;7375:29;7397:6;7375:29;:::i;:::-;7370:3;7366:39;7359:46;;7126:285;7034:377;;;;:::o;7417:313::-;7530:4;7568:2;7557:9;7553:18;7545:26;;7617:9;7611:4;7607:20;7603:1;7592:9;7588:17;7581:47;7645:78;7718:4;7709:6;7645:78;:::i;:::-;7637:86;;7417:313;;;;:::o;7736:122::-;7809:24;7827:5;7809:24;:::i;:::-;7802:5;7799:35;7789:63;;7848:1;7845;7838:12;7789:63;7736:122;:::o;7864:139::-;7910:5;7948:6;7935:20;7926:29;;7964:33;7991:5;7964:33;:::i;:::-;7864:139;;;;:::o;8009:329::-;8068:6;8117:2;8105:9;8096:7;8092:23;8088:32;8085:119;;;8123:79;;:::i;:::-;8085:119;8243:1;8268:53;8313:7;8304:6;8293:9;8289:22;8268:53;:::i;:::-;8258:63;;8214:117;8009:329;;;;:::o;8344:118::-;8431:24;8449:5;8431:24;:::i;:::-;8426:3;8419:37;8344:118;;:::o;8468:222::-;8561:4;8599:2;8588:9;8584:18;8576:26;;8612:71;8680:1;8669:9;8665:17;8656:6;8612:71;:::i;:::-;8468:222;;;;:::o;8696:474::-;8764:6;8772;8821:2;8809:9;8800:7;8796:23;8792:32;8789:119;;;8827:79;;:::i;:::-;8789:119;8947:1;8972:53;9017:7;9008:6;8997:9;8993:22;8972:53;:::i;:::-;8962:63;;8918:117;9074:2;9100:53;9145:7;9136:6;9125:9;9121:22;9100:53;:::i;:::-;9090:63;;9045:118;8696:474;;;;;:::o;9176:118::-;9263:24;9281:5;9263:24;:::i;:::-;9258:3;9251:37;9176:118;;:::o;9300:222::-;9393:4;9431:2;9420:9;9416:18;9408:26;;9444:71;9512:1;9501:9;9497:17;9488:6;9444:71;:::i;:::-;9300:222;;;;:::o;9528:619::-;9605:6;9613;9621;9670:2;9658:9;9649:7;9645:23;9641:32;9638:119;;;9676:79;;:::i;:::-;9638:119;9796:1;9821:53;9866:7;9857:6;9846:9;9842:22;9821:53;:::i;:::-;9811:63;;9767:117;9923:2;9949:53;9994:7;9985:6;9974:9;9970:22;9949:53;:::i;:::-;9939:63;;9894:118;10051:2;10077:53;10122:7;10113:6;10102:9;10098:22;10077:53;:::i;:::-;10067:63;;10022:118;9528:619;;;;;:::o;10153:474::-;10221:6;10229;10278:2;10266:9;10257:7;10253:23;10249:32;10246:119;;;10284:79;;:::i;:::-;10246:119;10404:1;10429:53;10474:7;10465:6;10454:9;10450:22;10429:53;:::i;:::-;10419:63;;10375:117;10531:2;10557:53;10602:7;10593:6;10582:9;10578:22;10557:53;:::i;:::-;10547:63;;10502:118;10153:474;;;;;:::o;10633:332::-;10754:4;10792:2;10781:9;10777:18;10769:26;;10805:71;10873:1;10862:9;10858:17;10849:6;10805:71;:::i;:::-;10886:72;10954:2;10943:9;10939:18;10930:6;10886:72;:::i;:::-;10633:332;;;;;:::o;10971:60::-;10999:3;11020:5;11013:12;;10971:60;;;:::o;11037:142::-;11087:9;11120:53;11138:34;11147:24;11165:5;11147:24;:::i;:::-;11138:34;:::i;:::-;11120:53;:::i;:::-;11107:66;;11037:142;;;:::o;11185:126::-;11235:9;11268:37;11299:5;11268:37;:::i;:::-;11255:50;;11185:126;;;:::o;11317:157::-;11398:9;11431:37;11462:5;11431:37;:::i;:::-;11418:50;;11317:157;;;:::o;11480:193::-;11598:68;11660:5;11598:68;:::i;:::-;11593:3;11586:81;11480:193;;:::o;11679:284::-;11803:4;11841:2;11830:9;11826:18;11818:26;;11854:102;11953:1;11942:9;11938:17;11929:6;11854:102;:::i;:::-;11679:284;;;;:::o;11969:329::-;12028:6;12077:2;12065:9;12056:7;12052:23;12048:32;12045:119;;;12083:79;;:::i;:::-;12045:119;12203:1;12228:53;12273:7;12264:6;12253:9;12249:22;12228:53;:::i;:::-;12218:63;;12174:117;11969:329;;;;:::o;12304:116::-;12374:21;12389:5;12374:21;:::i;:::-;12367:5;12364:32;12354:60;;12410:1;12407;12400:12;12354:60;12304:116;:::o;12426:133::-;12469:5;12507:6;12494:20;12485:29;;12523:30;12547:5;12523:30;:::i;:::-;12426:133;;;;:::o;12565:323::-;12621:6;12670:2;12658:9;12649:7;12645:23;12641:32;12638:119;;;12676:79;;:::i;:::-;12638:119;12796:1;12821:50;12863:7;12854:6;12843:9;12839:22;12821:50;:::i;:::-;12811:60;;12767:114;12565:323;;;;:::o;12894:117::-;13003:1;13000;12993:12;13017:117;13126:1;13123;13116:12;13140:117;13249:1;13246;13239:12;13277:553;13335:8;13345:6;13395:3;13388:4;13380:6;13376:17;13372:27;13362:122;;13403:79;;:::i;:::-;13362:122;13516:6;13503:20;13493:30;;13546:18;13538:6;13535:30;13532:117;;;13568:79;;:::i;:::-;13532:117;13682:4;13674:6;13670:17;13658:29;;13736:3;13728:4;13720:6;13716:17;13706:8;13702:32;13699:41;13696:128;;;13743:79;;:::i;:::-;13696:128;13277:553;;;;;:::o;13836:529::-;13907:6;13915;13964:2;13952:9;13943:7;13939:23;13935:32;13932:119;;;13970:79;;:::i;:::-;13932:119;14118:1;14107:9;14103:17;14090:31;14148:18;14140:6;14137:30;14134:117;;;14170:79;;:::i;:::-;14134:117;14283:65;14340:7;14331:6;14320:9;14316:22;14283:65;:::i;:::-;14265:83;;;;14061:297;13836:529;;;;;:::o;14371:468::-;14436:6;14444;14493:2;14481:9;14472:7;14468:23;14464:32;14461:119;;;14499:79;;:::i;:::-;14461:119;14619:1;14644:53;14689:7;14680:6;14669:9;14665:22;14644:53;:::i;:::-;14634:63;;14590:117;14746:2;14772:50;14814:7;14805:6;14794:9;14790:22;14772:50;:::i;:::-;14762:60;;14717:115;14371:468;;;;;:::o;14845:117::-;14954:1;14951;14944:12;14968:180;15016:77;15013:1;15006:88;15113:4;15110:1;15103:15;15137:4;15134:1;15127:15;15154:281;15237:27;15259:4;15237:27;:::i;:::-;15229:6;15225:40;15367:6;15355:10;15352:22;15331:18;15319:10;15316:34;15313:62;15310:88;;;15378:18;;:::i;:::-;15310:88;15418:10;15414:2;15407:22;15197:238;15154:281;;:::o;15441:129::-;15475:6;15502:20;;:::i;:::-;15492:30;;15531:33;15559:4;15551:6;15531:33;:::i;:::-;15441:129;;;:::o;15576:307::-;15637:4;15727:18;15719:6;15716:30;15713:56;;;15749:18;;:::i;:::-;15713:56;15787:29;15809:6;15787:29;:::i;:::-;15779:37;;15871:4;15865;15861:15;15853:23;;15576:307;;;:::o;15889:146::-;15986:6;15981:3;15976;15963:30;16027:1;16018:6;16013:3;16009:16;16002:27;15889:146;;;:::o;16041:423::-;16118:5;16143:65;16159:48;16200:6;16159:48;:::i;:::-;16143:65;:::i;:::-;16134:74;;16231:6;16224:5;16217:21;16269:4;16262:5;16258:16;16307:3;16298:6;16293:3;16289:16;16286:25;16283:112;;;16314:79;;:::i;:::-;16283:112;16404:54;16451:6;16446:3;16441;16404:54;:::i;:::-;16124:340;16041:423;;;;;:::o;16483:338::-;16538:5;16587:3;16580:4;16572:6;16568:17;16564:27;16554:122;;16595:79;;:::i;:::-;16554:122;16712:6;16699:20;16737:78;16811:3;16803:6;16796:4;16788:6;16784:17;16737:78;:::i;:::-;16728:87;;16544:277;16483:338;;;;:::o;16827:943::-;16922:6;16930;16938;16946;16995:3;16983:9;16974:7;16970:23;16966:33;16963:120;;;17002:79;;:::i;:::-;16963:120;17122:1;17147:53;17192:7;17183:6;17172:9;17168:22;17147:53;:::i;:::-;17137:63;;17093:117;17249:2;17275:53;17320:7;17311:6;17300:9;17296:22;17275:53;:::i;:::-;17265:63;;17220:118;17377:2;17403:53;17448:7;17439:6;17428:9;17424:22;17403:53;:::i;:::-;17393:63;;17348:118;17533:2;17522:9;17518:18;17505:32;17564:18;17556:6;17553:30;17550:117;;;17586:79;;:::i;:::-;17550:117;17691:62;17745:7;17736:6;17725:9;17721:22;17691:62;:::i;:::-;17681:72;;17476:287;16827:943;;;;;;;:::o;17776:474::-;17844:6;17852;17901:2;17889:9;17880:7;17876:23;17872:32;17869:119;;;17907:79;;:::i;:::-;17869:119;18027:1;18052:53;18097:7;18088:6;18077:9;18073:22;18052:53;:::i;:::-;18042:63;;17998:117;18154:2;18180:53;18225:7;18216:6;18205:9;18201:22;18180:53;:::i;:::-;18170:63;;18125:118;17776:474;;;;;:::o;18256:220::-;18396:34;18392:1;18384:6;18380:14;18373:58;18465:3;18460:2;18452:6;18448:15;18441:28;18256:220;:::o;18482:366::-;18624:3;18645:67;18709:2;18704:3;18645:67;:::i;:::-;18638:74;;18721:93;18810:3;18721:93;:::i;:::-;18839:2;18834:3;18830:12;18823:19;;18482:366;;;:::o;18854:419::-;19020:4;19058:2;19047:9;19043:18;19035:26;;19107:9;19101:4;19097:20;19093:1;19082:9;19078:17;19071:47;19135:131;19261:4;19135:131;:::i;:::-;19127:139;;18854:419;;;:::o;19279:179::-;19419:31;19415:1;19407:6;19403:14;19396:55;19279:179;:::o;19464:366::-;19606:3;19627:67;19691:2;19686:3;19627:67;:::i;:::-;19620:74;;19703:93;19792:3;19703:93;:::i;:::-;19821:2;19816:3;19812:12;19805:19;;19464:366;;;:::o;19836:419::-;20002:4;20040:2;20029:9;20025:18;20017:26;;20089:9;20083:4;20079:20;20075:1;20064:9;20060:17;20053:47;20117:131;20243:4;20117:131;:::i;:::-;20109:139;;19836:419;;;:::o;20261:221::-;20401:34;20397:1;20389:6;20385:14;20378:58;20470:4;20465:2;20457:6;20453:15;20446:29;20261:221;:::o;20488:366::-;20630:3;20651:67;20715:2;20710:3;20651:67;:::i;:::-;20644:74;;20727:93;20816:3;20727:93;:::i;:::-;20845:2;20840:3;20836:12;20829:19;;20488:366;;;:::o;20860:419::-;21026:4;21064:2;21053:9;21049:18;21041:26;;21113:9;21107:4;21103:20;21099:1;21088:9;21084:17;21077:47;21141:131;21267:4;21141:131;:::i;:::-;21133:139;;20860:419;;;:::o;21285:118::-;21322:7;21362:34;21355:5;21351:46;21340:57;;21285:118;;;:::o;21409:224::-;21449:3;21468:20;21486:1;21468:20;:::i;:::-;21463:25;;21502:20;21520:1;21502:20;:::i;:::-;21497:25;;21545:1;21542;21538:9;21531:16;;21568:34;21563:3;21560:43;21557:69;;;21606:18;;:::i;:::-;21557:69;21409:224;;;;:::o;21639:238::-;21779:34;21775:1;21767:6;21763:14;21756:58;21848:21;21843:2;21835:6;21831:15;21824:46;21639:238;:::o;21883:366::-;22025:3;22046:67;22110:2;22105:3;22046:67;:::i;:::-;22039:74;;22122:93;22211:3;22122:93;:::i;:::-;22240:2;22235:3;22231:12;22224:19;;21883:366;;;:::o;22255:419::-;22421:4;22459:2;22448:9;22444:18;22436:26;;22508:9;22502:4;22498:20;22494:1;22483:9;22479:17;22472:47;22536:131;22662:4;22536:131;:::i;:::-;22528:139;;22255:419;;;:::o;22680:233::-;22719:3;22742:24;22760:5;22742:24;:::i;:::-;22733:33;;22788:66;22781:5;22778:77;22775:103;;22858:18;;:::i;:::-;22775:103;22905:1;22898:5;22894:13;22887:20;;22680:233;;;:::o;22919:180::-;22967:77;22964:1;22957:88;23064:4;23061:1;23054:15;23088:4;23085:1;23078:15;23105:320;23149:6;23186:1;23180:4;23176:12;23166:22;;23233:1;23227:4;23223:12;23254:18;23244:81;;23310:4;23302:6;23298:17;23288:27;;23244:81;23372:2;23364:6;23361:14;23341:18;23338:38;23335:84;;23391:18;;:::i;:::-;23335:84;23156:269;23105:320;;;:::o;23431:232::-;23571:34;23567:1;23559:6;23555:14;23548:58;23640:15;23635:2;23627:6;23623:15;23616:40;23431:232;:::o;23669:366::-;23811:3;23832:67;23896:2;23891:3;23832:67;:::i;:::-;23825:74;;23908:93;23997:3;23908:93;:::i;:::-;24026:2;24021:3;24017:12;24010:19;;23669:366;;;:::o;24041:419::-;24207:4;24245:2;24234:9;24230:18;24222:26;;24294:9;24288:4;24284:20;24280:1;24269:9;24265:17;24258:47;24322:131;24448:4;24322:131;:::i;:::-;24314:139;;24041:419;;;:::o;24466:332::-;24587:4;24625:2;24614:9;24610:18;24602:26;;24638:71;24706:1;24695:9;24691:17;24682:6;24638:71;:::i;:::-;24719:72;24787:2;24776:9;24772:18;24763:6;24719:72;:::i;:::-;24466:332;;;;;:::o;24804:137::-;24858:5;24889:6;24883:13;24874:22;;24905:30;24929:5;24905:30;:::i;:::-;24804:137;;;;:::o;24947:345::-;25014:6;25063:2;25051:9;25042:7;25038:23;25034:32;25031:119;;;25069:79;;:::i;:::-;25031:119;25189:1;25214:61;25267:7;25258:6;25247:9;25243:22;25214:61;:::i;:::-;25204:71;;25160:125;24947:345;;;;:::o;25298:410::-;25338:7;25361:20;25379:1;25361:20;:::i;:::-;25356:25;;25395:20;25413:1;25395:20;:::i;:::-;25390:25;;25450:1;25447;25443:9;25472:30;25490:11;25472:30;:::i;:::-;25461:41;;25651:1;25642:7;25638:15;25635:1;25632:22;25612:1;25605:9;25585:83;25562:139;;25681:18;;:::i;:::-;25562:139;25346:362;25298:410;;;;:::o;25714:180::-;25762:77;25759:1;25752:88;25859:4;25856:1;25849:15;25883:4;25880:1;25873:15;25900:185;25940:1;25957:20;25975:1;25957:20;:::i;:::-;25952:25;;25991:20;26009:1;25991:20;:::i;:::-;25986:25;;26030:1;26020:35;;26035:18;;:::i;:::-;26020:35;26077:1;26074;26070:9;26065:14;;25900:185;;;;:::o;26091:221::-;26231:34;26227:1;26219:6;26215:14;26208:58;26300:4;26295:2;26287:6;26283:15;26276:29;26091:221;:::o;26318:366::-;26460:3;26481:67;26545:2;26540:3;26481:67;:::i;:::-;26474:74;;26557:93;26646:3;26557:93;:::i;:::-;26675:2;26670:3;26666:12;26659:19;;26318:366;;;:::o;26690:419::-;26856:4;26894:2;26883:9;26879:18;26871:26;;26943:9;26937:4;26933:20;26929:1;26918:9;26914:17;26907:47;26971:131;27097:4;26971:131;:::i;:::-;26963:139;;26690:419;;;:::o;27115:233::-;27255:34;27251:1;27243:6;27239:14;27232:58;27324:16;27319:2;27311:6;27307:15;27300:41;27115:233;:::o;27354:366::-;27496:3;27517:67;27581:2;27576:3;27517:67;:::i;:::-;27510:74;;27593:93;27682:3;27593:93;:::i;:::-;27711:2;27706:3;27702:12;27695:19;;27354:366;;;:::o;27726:419::-;27892:4;27930:2;27919:9;27915:18;27907:26;;27979:9;27973:4;27969:20;27965:1;27954:9;27950:17;27943:47;28007:131;28133:4;28007:131;:::i;:::-;27999:139;;27726:419;;;:::o;28151:222::-;28291:34;28287:1;28279:6;28275:14;28268:58;28360:5;28355:2;28347:6;28343:15;28336:30;28151:222;:::o;28379:366::-;28521:3;28542:67;28606:2;28601:3;28542:67;:::i;:::-;28535:74;;28618:93;28707:3;28618:93;:::i;:::-;28736:2;28731:3;28727:12;28720:19;;28379:366;;;:::o;28751:419::-;28917:4;28955:2;28944:9;28940:18;28932:26;;29004:9;28998:4;28994:20;28990:1;28979:9;28975:17;28968:47;29032:131;29158:4;29032:131;:::i;:::-;29024:139;;28751:419;;;:::o;29176:230::-;29316:34;29312:1;29304:6;29300:14;29293:58;29385:13;29380:2;29372:6;29368:15;29361:38;29176:230;:::o;29412:366::-;29554:3;29575:67;29639:2;29634:3;29575:67;:::i;:::-;29568:74;;29651:93;29740:3;29651:93;:::i;:::-;29769:2;29764:3;29760:12;29753:19;;29412:366;;;:::o;29784:419::-;29950:4;29988:2;29977:9;29973:18;29965:26;;30037:9;30031:4;30027:20;30023:1;30012:9;30008:17;30001:47;30065:131;30191:4;30065:131;:::i;:::-;30057:139;;29784:419;;;:::o;30209:97::-;30268:6;30296:3;30286:13;;30209:97;;;;:::o;30312:141::-;30361:4;30384:3;30376:11;;30407:3;30404:1;30397:14;30441:4;30438:1;30428:18;30420:26;;30312:141;;;:::o;30459:93::-;30496:6;30543:2;30538;30531:5;30527:14;30523:23;30513:33;;30459:93;;;:::o;30558:107::-;30602:8;30652:5;30646:4;30642:16;30621:37;;30558:107;;;;:::o;30671:393::-;30740:6;30790:1;30778:10;30774:18;30813:97;30843:66;30832:9;30813:97;:::i;:::-;30931:39;30961:8;30950:9;30931:39;:::i;:::-;30919:51;;31003:4;30999:9;30992:5;30988:21;30979:30;;31052:4;31042:8;31038:19;31031:5;31028:30;31018:40;;30747:317;;30671:393;;;;;:::o;31070:142::-;31120:9;31153:53;31171:34;31180:24;31198:5;31180:24;:::i;:::-;31171:34;:::i;:::-;31153:53;:::i;:::-;31140:66;;31070:142;;;:::o;31218:75::-;31261:3;31282:5;31275:12;;31218:75;;;:::o;31299:269::-;31409:39;31440:7;31409:39;:::i;:::-;31470:91;31519:41;31543:16;31519:41;:::i;:::-;31511:6;31504:4;31498:11;31470:91;:::i;:::-;31464:4;31457:105;31375:193;31299:269;;;:::o;31574:73::-;31619:3;31574:73;:::o;31653:189::-;31730:32;;:::i;:::-;31771:65;31829:6;31821;31815:4;31771:65;:::i;:::-;31706:136;31653:189;;:::o;31848:186::-;31908:120;31925:3;31918:5;31915:14;31908:120;;;31979:39;32016:1;32009:5;31979:39;:::i;:::-;31952:1;31945:5;31941:13;31932:22;;31908:120;;;31848:186;;:::o;32040:543::-;32141:2;32136:3;32133:11;32130:446;;;32175:38;32207:5;32175:38;:::i;:::-;32259:29;32277:10;32259:29;:::i;:::-;32249:8;32245:44;32442:2;32430:10;32427:18;32424:49;;;32463:8;32448:23;;32424:49;32486:80;32542:22;32560:3;32542:22;:::i;:::-;32532:8;32528:37;32515:11;32486:80;:::i;:::-;32145:431;;32130:446;32040:543;;;:::o;32589:117::-;32643:8;32693:5;32687:4;32683:16;32662:37;;32589:117;;;;:::o;32712:169::-;32756:6;32789:51;32837:1;32833:6;32825:5;32822:1;32818:13;32789:51;:::i;:::-;32785:56;32870:4;32864;32860:15;32850:25;;32763:118;32712:169;;;;:::o;32886:295::-;32962:4;33108:29;33133:3;33127:4;33108:29;:::i;:::-;33100:37;;33170:3;33167:1;33163:11;33157:4;33154:21;33146:29;;32886:295;;;;:::o;33186:1403::-;33310:44;33350:3;33345;33310:44;:::i;:::-;33419:18;33411:6;33408:30;33405:56;;;33441:18;;:::i;:::-;33405:56;33485:38;33517:4;33511:11;33485:38;:::i;:::-;33570:67;33630:6;33622;33616:4;33570:67;:::i;:::-;33664:1;33693:2;33685:6;33682:14;33710:1;33705:632;;;;34381:1;34398:6;34395:84;;;34454:9;34449:3;34445:19;34432:33;34423:42;;34395:84;34505:67;34565:6;34558:5;34505:67;:::i;:::-;34499:4;34492:81;34354:229;33675:908;;33705:632;33757:4;33753:9;33745:6;33741:22;33791:37;33823:4;33791:37;:::i;:::-;33850:1;33864:215;33878:7;33875:1;33872:14;33864:215;;;33964:9;33959:3;33955:19;33942:33;33934:6;33927:49;34015:1;34007:6;34003:14;33993:24;;34062:2;34051:9;34047:18;34034:31;;33901:4;33898:1;33894:12;33889:17;;33864:215;;;34107:6;34098:7;34095:19;34092:186;;;34172:9;34167:3;34163:19;34150:33;34215:48;34257:4;34249:6;34245:17;34234:9;34215:48;:::i;:::-;34207:6;34200:64;34115:163;34092:186;34324:1;34320;34312:6;34308:14;34304:22;34298:4;34291:36;33712:625;;;33675:908;;33285:1304;;;33186:1403;;;:::o;34595:234::-;34735:34;34731:1;34723:6;34719:14;34712:58;34804:17;34799:2;34791:6;34787:15;34780:42;34595:234;:::o;34835:366::-;34977:3;34998:67;35062:2;35057:3;34998:67;:::i;:::-;34991:74;;35074:93;35163:3;35074:93;:::i;:::-;35192:2;35187:3;35183:12;35176:19;;34835:366;;;:::o;35207:419::-;35373:4;35411:2;35400:9;35396:18;35388:26;;35460:9;35454:4;35450:20;35446:1;35435:9;35431:17;35424:47;35488:131;35614:4;35488:131;:::i;:::-;35480:139;;35207:419;;;:::o;35632:148::-;35734:11;35771:3;35756:18;;35632:148;;;;:::o;35786:390::-;35892:3;35920:39;35953:5;35920:39;:::i;:::-;35975:89;36057:6;36052:3;35975:89;:::i;:::-;35968:96;;36073:65;36131:6;36126:3;36119:4;36112:5;36108:16;36073:65;:::i;:::-;36163:6;36158:3;36154:16;36147:23;;35896:280;35786:390;;;;:::o;36182:155::-;36322:7;36318:1;36310:6;36306:14;36299:31;36182:155;:::o;36343:400::-;36503:3;36524:84;36606:1;36601:3;36524:84;:::i;:::-;36517:91;;36617:93;36706:3;36617:93;:::i;:::-;36735:1;36730:3;36726:11;36719:18;;36343:400;;;:::o;36749:701::-;37030:3;37052:95;37143:3;37134:6;37052:95;:::i;:::-;37045:102;;37164:95;37255:3;37246:6;37164:95;:::i;:::-;37157:102;;37276:148;37420:3;37276:148;:::i;:::-;37269:155;;37441:3;37434:10;;36749:701;;;;;:::o;37456:225::-;37596:34;37592:1;37584:6;37580:14;37573:58;37665:8;37660:2;37652:6;37648:15;37641:33;37456:225;:::o;37687:366::-;37829:3;37850:67;37914:2;37909:3;37850:67;:::i;:::-;37843:74;;37926:93;38015:3;37926:93;:::i;:::-;38044:2;38039:3;38035:12;38028:19;;37687:366;;;:::o;38059:419::-;38225:4;38263:2;38252:9;38248:18;38240:26;;38312:9;38306:4;38302:20;38298:1;38287:9;38283:17;38276:47;38340:131;38466:4;38340:131;:::i;:::-;38332:139;;38059:419;;;:::o;38484:98::-;38535:6;38569:5;38563:12;38553:22;;38484:98;;;:::o;38588:168::-;38671:11;38705:6;38700:3;38693:19;38745:4;38740:3;38736:14;38721:29;;38588:168;;;;:::o;38762:373::-;38848:3;38876:38;38908:5;38876:38;:::i;:::-;38930:70;38993:6;38988:3;38930:70;:::i;:::-;38923:77;;39009:65;39067:6;39062:3;39055:4;39048:5;39044:16;39009:65;:::i;:::-;39099:29;39121:6;39099:29;:::i;:::-;39094:3;39090:39;39083:46;;38852:283;38762:373;;;;:::o;39141:640::-;39336:4;39374:3;39363:9;39359:19;39351:27;;39388:71;39456:1;39445:9;39441:17;39432:6;39388:71;:::i;:::-;39469:72;39537:2;39526:9;39522:18;39513:6;39469:72;:::i;:::-;39551;39619:2;39608:9;39604:18;39595:6;39551:72;:::i;:::-;39670:9;39664:4;39660:20;39655:2;39644:9;39640:18;39633:48;39698:76;39769:4;39760:6;39698:76;:::i;:::-;39690:84;;39141:640;;;;;;;:::o;39787:141::-;39843:5;39874:6;39868:13;39859:22;;39890:32;39916:5;39890:32;:::i;:::-;39787:141;;;;:::o;39934:349::-;40003:6;40052:2;40040:9;40031:7;40027:23;40023:32;40020:119;;;40058:79;;:::i;:::-;40020:119;40178:1;40203:63;40258:7;40249:6;40238:9;40234:22;40203:63;:::i;:::-;40193:73;;40149:127;39934:349;;;;:::o;40289:182::-;40429:34;40425:1;40417:6;40413:14;40406:58;40289:182;:::o;40477:366::-;40619:3;40640:67;40704:2;40699:3;40640:67;:::i;:::-;40633:74;;40716:93;40805:3;40716:93;:::i;:::-;40834:2;40829:3;40825:12;40818:19;;40477:366;;;:::o;40849:419::-;41015:4;41053:2;41042:9;41038:18;41030:26;;41102:9;41096:4;41092:20;41088:1;41077:9;41073:17;41066:47;41130:131;41256:4;41130:131;:::i;:::-;41122:139;;40849:419;;;:::o;41274:229::-;41414:34;41410:1;41402:6;41398:14;41391:58;41483:12;41478:2;41470:6;41466:15;41459:37;41274:229;:::o;41509:366::-;41651:3;41672:67;41736:2;41731:3;41672:67;:::i;:::-;41665:74;;41748:93;41837:3;41748:93;:::i;:::-;41866:2;41861:3;41857:12;41850:19;;41509:366;;;:::o;41881:419::-;42047:4;42085:2;42074:9;42070:18;42062:26;;42134:9;42128:4;42124:20;42120:1;42109:9;42105:17;42098:47;42162:131;42288:4;42162:131;:::i;:::-;42154:139;;41881:419;;;:::o;42306:175::-;42446:27;42442:1;42434:6;42430:14;42423:51;42306:175;:::o;42487:366::-;42629:3;42650:67;42714:2;42709:3;42650:67;:::i;:::-;42643:74;;42726:93;42815:3;42726:93;:::i;:::-;42844:2;42839:3;42835:12;42828:19;;42487:366;;;:::o;42859:419::-;43025:4;43063:2;43052:9;43048:18;43040:26;;43112:9;43106:4;43102:20;43098:1;43087:9;43083:17;43076:47;43140:131;43266:4;43140:131;:::i;:::-;43132:139;;42859:419;;;:::o;43284:221::-;43424:34;43420:1;43412:6;43408:14;43401:58;43493:4;43488:2;43480:6;43476:15;43469:29;43284:221;:::o;43511:366::-;43653:3;43674:67;43738:2;43733:3;43674:67;:::i;:::-;43667:74;;43750:93;43839:3;43750:93;:::i;:::-;43868:2;43863:3;43859:12;43852:19;;43511:366;;;:::o;43883:419::-;44049:4;44087:2;44076:9;44072:18;44064:26;;44136:9;44130:4;44126:20;44122:1;44111:9;44107:17;44100:47;44164:131;44290:4;44164:131;:::i;:::-;44156:139;;43883:419;;;:::o;44308:244::-;44448:34;44444:1;44436:6;44432:14;44425:58;44517:27;44512:2;44504:6;44500:15;44493:52;44308:244;:::o;44558:366::-;44700:3;44721:67;44785:2;44780:3;44721:67;:::i;:::-;44714:74;;44797:93;44886:3;44797:93;:::i;:::-;44915:2;44910:3;44906:12;44899:19;;44558:366;;;:::o;44930:419::-;45096:4;45134:2;45123:9;45119:18;45111:26;;45183:9;45177:4;45173:20;45169:1;45158:9;45154:17;45147:47;45211:131;45337:4;45211:131;:::i;:::-;45203:139;;44930:419;;;:::o;45355:229::-;45495:34;45491:1;45483:6;45479:14;45472:58;45564:12;45559:2;45551:6;45547:15;45540:37;45355:229;:::o;45590:366::-;45732:3;45753:67;45817:2;45812:3;45753:67;:::i;:::-;45746:74;;45829:93;45918:3;45829:93;:::i;:::-;45947:2;45942:3;45938:12;45931:19;;45590:366;;;:::o;45962:419::-;46128:4;46166:2;46155:9;46151:18;46143:26;;46215:9;46209:4;46205:20;46201:1;46190:9;46186:17;46179:47;46243:131;46369:4;46243:131;:::i;:::-;46235:139;;45962:419;;;:::o;46387:194::-;46427:4;46447:20;46465:1;46447:20;:::i;:::-;46442:25;;46481:20;46499:1;46481:20;:::i;:::-;46476:25;;46525:1;46522;46518:9;46510:17;;46549:1;46543:4;46540:11;46537:37;;;46554:18;;:::i;:::-;46537:37;46387:194;;;;:::o;46587:171::-;46626:3;46649:24;46667:5;46649:24;:::i;:::-;46640:33;;46695:4;46688:5;46685:15;46682:41;;46703:18;;:::i;:::-;46682:41;46750:1;46743:5;46739:13;46732:20;;46587:171;;;:::o;46764:234::-;46904:34;46900:1;46892:6;46888:14;46881:58;46973:17;46968:2;46960:6;46956:15;46949:42;46764:234;:::o;47004:366::-;47146:3;47167:67;47231:2;47226:3;47167:67;:::i;:::-;47160:74;;47243:93;47332:3;47243:93;:::i;:::-;47361:2;47356:3;47352:12;47345:19;;47004:366;;;:::o;47376:419::-;47542:4;47580:2;47569:9;47565:18;47557:26;;47629:9;47623:4;47619:20;47615:1;47604:9;47600:17;47593:47;47657:131;47783:4;47657:131;:::i;:::-;47649:139;;47376:419;;;:::o;47801:176::-;47941:28;47937:1;47929:6;47925:14;47918:52;47801:176;:::o;47983:366::-;48125:3;48146:67;48210:2;48205:3;48146:67;:::i;:::-;48139:74;;48222:93;48311:3;48222:93;:::i;:::-;48340:2;48335:3;48331:12;48324:19;;47983:366;;;:::o;48355:419::-;48521:4;48559:2;48548:9;48544:18;48536:26;;48608:9;48602:4;48598:20;48594:1;48583:9;48579:17;48572:47;48636:131;48762:4;48636:131;:::i;:::-;48628:139;;48355:419;;;:::o;48780:176::-;48812:1;48829:20;48847:1;48829:20;:::i;:::-;48824:25;;48863:20;48881:1;48863:20;:::i;:::-;48858:25;;48902:1;48892:35;;48907:18;;:::i;:::-;48892:35;48948:1;48945;48941:9;48936:14;;48780:176;;;;:::o;48962:180::-;49010:77;49007:1;49000:88;49107:4;49104:1;49097:15;49131:4;49128:1;49121:15;49148:237;49288:34;49284:1;49276:6;49272:14;49265:58;49357:20;49352:2;49344:6;49340:15;49333:45;49148:237;:::o;49391:366::-;49533:3;49554:67;49618:2;49613:3;49554:67;:::i;:::-;49547:74;;49630:93;49719:3;49630:93;:::i;:::-;49748:2;49743:3;49739:12;49732:19;;49391:366;;;:::o;49763:419::-;49929:4;49967:2;49956:9;49952:18;49944:26;;50016:9;50010:4;50006:20;50002:1;49991:9;49987:17;49980:47;50044:131;50170:4;50044:131;:::i;:::-;50036:139;;49763:419;;;:::o;50188:225::-;50328:34;50324:1;50316:6;50312:14;50305:58;50397:8;50392:2;50384:6;50380:15;50373:33;50188:225;:::o;50419:366::-;50561:3;50582:67;50646:2;50641:3;50582:67;:::i;:::-;50575:74;;50658:93;50747:3;50658:93;:::i;:::-;50776:2;50771:3;50767:12;50760:19;;50419:366;;;:::o;50791:419::-;50957:4;50995:2;50984:9;50980:18;50972:26;;51044:9;51038:4;51034:20;51030:1;51019:9;51015:17;51008:47;51072:131;51198:4;51072:131;:::i;:::-;51064:139;;50791:419;;;:::o;51216:224::-;51356:34;51352:1;51344:6;51340:14;51333:58;51425:7;51420:2;51412:6;51408:15;51401:32;51216:224;:::o;51446:366::-;51588:3;51609:67;51673:2;51668:3;51609:67;:::i;:::-;51602:74;;51685:93;51774:3;51685:93;:::i;:::-;51803:2;51798:3;51794:12;51787:19;;51446:366;;;:::o;51818:419::-;51984:4;52022:2;52011:9;52007:18;51999:26;;52071:9;52065:4;52061:20;52057:1;52046:9;52042:17;52035:47;52099:131;52225:4;52099:131;:::i;:::-;52091:139;;51818:419;;;:::o;52243:227::-;52283:4;52303:20;52321:1;52303:20;:::i;:::-;52298:25;;52337:20;52355:1;52337:20;:::i;:::-;52332:25;;52381:1;52378;52374:9;52366:17;;52405:34;52399:4;52396:44;52393:70;;;52443:18;;:::i;:::-;52393:70;52243:227;;;;:::o
Swarm Source
ipfs://0b3c86e3f2ab8b2dc18344236026bc713ef56fb16217aa99f041a49b8afac0c9
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.