ERC-721
NFT
Overview
Max Total Supply
6,667 ZAPE
Holders
1,627
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
25 ZAPELoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ZombieApes
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-18 */ // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // 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 v4.4.1 (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 Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { 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 v4.4.1 (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 `IERC721.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/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/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (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`, 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 Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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 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); /** * @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; } // 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 // Creator: Chiru Labs pragma solidity ^0.8.4; error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintedQueryForZeroAddress(); error BurnedQueryForZeroAddress(); error AuxQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerIndexOutOfBounds(); error OwnerQueryForNonexistentToken(); error TokenIndexOutOfBounds(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata 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 that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Compiler will pack this into a single 256bit word. struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; // Keeps track of burn count with minimal overhead for tokenomics. uint64 numberBurned; // For miscellaneous variable(s) pertaining to the address // (e.g. number of whitelist mint slots used). // If there are multiple variables, please pack them into a uint64. uint64 aux; } // The tokenId of the next token to be minted. uint256 internal _currentIndex; // The number of tokens burned. uint256 internal _burnCounter; // 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) internal _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; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex times unchecked { return _currentIndex - _burnCounter; } } /** * @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 || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { if (owner == address(0)) revert MintedQueryForZeroAddress(); return uint256(_addressData[owner].numberMinted); } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { if (owner == address(0)) revert BurnedQueryForZeroAddress(); return uint256(_addressData[owner].numberBurned); } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { if (owner == address(0)) revert AuxQueryForZeroAddress(); return _addressData[owner].aux; } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { if (owner == address(0)) revert AuxQueryForZeroAddress(); _addressData[owner].aux = aux; } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { uint256 curr = tokenId; unchecked { if (curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (!ownership.burned) { if (ownership.addr != address(0)) { return ownership; } // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } } } revert OwnerQueryForNonexistentToken(); } /** * @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) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); 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 override { address owner = ERC721A.ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { if (operator == _msgSender()) revert ApproveToCaller(); _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); if (!_checkOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @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 && !_ownerships[tokenId].burned; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; for (uint256 i; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); if (safe && !_checkOnERC721Received(address(0), to, updatedIndex, _data)) { revert TransferToNonERC721ReceiverImplementer(); } 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 || isApprovedForAll(prevOwnership.addr, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId].addr = to; _ownerships[tokenId].startTimestamp = 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)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId < _currentIndex) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { TokenOwnership memory prevOwnership = ownershipOf(tokenId); _beforeTokenTransfers(prevOwnership.addr, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[prevOwnership.addr].balance -= 1; _addressData[prevOwnership.addr].numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. _ownerships[tokenId].addr = prevOwnership.addr; _ownerships[tokenId].startTimestamp = uint64(block.timestamp); _ownerships[tokenId].burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn 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)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId < _currentIndex) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(prevOwnership.addr, address(0), tokenId); _afterTokenTransfers(prevOwnership.addr, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @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); } /** * @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 TransferToNonERC721ReceiverImplementer(); } 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. * And also called before burning one token. * * 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`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ 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. * And also called after one token has been burned. * * 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` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: ZombieApes.sol pragma solidity 0.8.11; contract IStaking { mapping(address => mapping(uint256 => uint256)) public depositBlocks; } contract IPassiveStaking { function updateTransfer( address from, address to, uint256 startTokenId, uint256 quantity ) external {} } contract IERC20 { function transferFrom( address sender, address recipient, uint256 amount ) public returns (bool) {} } contract ZombieApes is ERC721A, Ownable, ReentrancyGuard { uint256 public prePrice = 0.05 ether; uint256 public pubPrice = 0.07 ether; uint256 public nftLimit = 6667; uint256 public reserved = 250; uint256 public capPublic = 10; uint256 public capWhitelist = 10; uint256 public claimReserved = 1666; uint256 public freeMultiple = 2; address public claimAddress = 0x80D4914685Ba4BCA07a995bB160a8fC4cd4De5B6; address public claimStakingAddress = 0x9b561710fEED0B8d829de89C82F80Bb7B2B364B8; address public stakingAddress; bool public saleClaim = false; bool public saleWhitelist = false; bool public salePublic = false; bytes32 public merkleRoot; string public baseURI = ""; mapping(uint256 => uint256) public claimedTokens; constructor(string memory _initURI, bytes32 _merkleRoot) ERC721A("Zombie Apes", "ZAPE") { baseURI = _initURI; merkleRoot = _merkleRoot; } function mint(uint256 _amount) external payable nonReentrant { require(salePublic == true, "ZombieApes: Not Started"); require(msg.value == pubPrice * _amount, "ZombieApes: Incorrect Value"); require(_amount <= capPublic, "ZombieApes: Amount Limit"); _mint(_amount); } function mintWhitelist(uint256 _amount, bytes32[] calldata proof) external payable nonReentrant { require(saleWhitelist == true, "ZombieApes: Not Started"); require(_amount <= capWhitelist, "ZombieApes: Amount Limit"); require(msg.value == prePrice * _amount, "ZombieApes: Incorrect Value"); require( ERC721A(claimAddress).balanceOf(_msgSender()) > 0 || ERC721A(claimStakingAddress).balanceOf(_msgSender()) > 0 || MerkleProof.verify( proof, merkleRoot, keccak256(abi.encodePacked(_msgSender())) ), "ZombieApes: Not Whitelisted" ); _mint(_amount); } function mintClaim(uint256 _amount, uint256[] calldata _tokenIds) external nonReentrant { require(saleClaim == true, "ZombieApes: Not Started"); require( _tokenIds.length == _amount * freeMultiple, "ZombieApes: Incorrect Token Count" ); for (uint256 i = 0; i < _tokenIds.length; i++) { uint256 _tokenId = _tokenIds[i]; require(claimedTokens[_tokenId] == 0, "ZombieApes: Token Claimed"); require( ERC721A(claimAddress).ownerOf(_tokenId) == _msgSender() || IStaking(claimStakingAddress).depositBlocks( _msgSender(), _tokenId ) > 0, "ZombieApes: Not Token Owner" ); claimedTokens[_tokenId] = 1; } _mint(_amount); if (claimReserved >= _amount) { claimReserved -= _amount; } else { claimReserved = 0; } } function _mint(uint256 _amount) internal { require(tx.origin == _msgSender(), "ZombieApes: Self Mint Only"); require( totalSupply() + _amount <= (nftLimit - reserved - claimReserved), "ZombieApes: Sold Out" ); _safeMint(_msgSender(), _amount); } function checkClaimedTokens(uint256[] calldata _tokenIds) public view returns (uint256[] memory) { uint256[] memory claimed = new uint256[](_tokenIds.length); for (uint256 i = 0; i < _tokenIds.length; i++) { claimed[i] = claimedTokens[_tokenIds[i]]; } return claimed; } function reserve(address[] calldata _tos, uint256[] calldata _amounts) external onlyOwner nonReentrant { require(_tos.length == _amounts.length, "ZombieApes: Length mismatch"); uint256 _reserved; for (uint256 i = 0; i < _tos.length; i++) { _safeMint(_tos[i], _amounts[i]); _reserved += _amounts[i]; } if (reserved >= _reserved) { reserved -= _reserved; } else { reserved = 0; } } function tokensOfOwnerByIndex(address _owner, uint256 _index) public view returns (uint256) { return tokensOfOwner(_owner)[_index]; } function tokensOfOwner(address _owner) public view returns (uint256[] memory) { uint256 _tokenCount = balanceOf(_owner); uint256[] memory _tokenIds = new uint256[](_tokenCount); uint256 _tokenIndex = 0; for (uint256 i = 0; i < totalSupply(); i++) { if (ownerOf(i) == _owner) { _tokenIds[_tokenIndex] = i; _tokenIndex++; } } return _tokenIds; } function withdraw() public payable onlyOwner { uint256 _balance = address(this).balance; address TEAM4 = 0xd04D56650b5B66e2DA3bD9306D15cD11D20f288e; address TEAM3 = 0x80665f9ba68501d383B01B16906775b86e8fe313; address TEAM2 = 0xA3535bF71294e5497DD3D8bd23A2650636806b68; (bool team4tx, ) = payable(TEAM4).call{value: (_balance * 40) / 100}( "" ); require(team4tx, "ZombieApes: Transfer 4 Failed"); (bool team3tx, ) = payable(TEAM3).call{value: (_balance * 28) / 100}( "" ); require(team3tx, "ZombieApes: Transfer 3 Failed"); (bool team2tx, ) = payable(TEAM2).call{value: (_balance * 9) / 100}(""); require(team2tx, "ZombieApes: Transfer 2 Failed"); (bool team1tx, ) = payable(_msgSender()).call{ value: address(this).balance }(""); require(team1tx, "ZombieApes: Transfer 1 Failed"); } function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual override { super._beforeTokenTransfers(from, to, startTokenId, quantity); if (stakingAddress != address(0) && from != address(0)) { IPassiveStaking(stakingAddress).updateTransfer( from, to, startTokenId, quantity ); } } function toggleSaleWhitelist() public onlyOwner { saleWhitelist = !saleWhitelist; } function toggleSalePublic() public onlyOwner { salePublic = !salePublic; } function togleSaleClaim() public onlyOwner { saleClaim = !saleClaim; } function toggleSaleOn() public onlyOwner { saleWhitelist = true; salePublic = true; saleClaim = true; } function setBaseURI(string calldata _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setPrice(uint256 _prePrice, uint256 _pubPrice) public onlyOwner { prePrice = _prePrice; pubPrice = _pubPrice; } function setNftLimit(uint256 _nftLimit) public onlyOwner { nftLimit = _nftLimit; } function setMerkleRoot(bytes32 _merkleRoot) public onlyOwner { merkleRoot = _merkleRoot; } function setClaimReserved(uint256 _claimReserved) public onlyOwner { claimReserved = _claimReserved; } function setReserved(uint256 _reserved) public onlyOwner { reserved = _reserved; } function setStakingAddress(address _stakingAddress) public onlyOwner { stakingAddress = _stakingAddress; } function setClaimStakingAddress(address _claimStakingAddress) public onlyOwner { claimStakingAddress = _claimStakingAddress; } function setClaimAddress(address _claimAddress) public onlyOwner { claimAddress = _claimAddress; } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function contractURI() public view returns (string memory) { return string(abi.encodePacked(baseURI, "contract")); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_initURI","type":"string"},{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","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":[{"internalType":"address","name":"to","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":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"capPublic","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"capWhitelist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"checkClaimedTokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimReserved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimStakingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"claimedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeMultiple","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":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"mintClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"mintWhitelist","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftLimit","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":"prePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pubPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tos","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserved","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":"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":[],"name":"saleClaim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"salePublic","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_claimAddress","type":"address"}],"name":"setClaimAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_claimReserved","type":"uint256"}],"name":"setClaimReserved","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_claimStakingAddress","type":"address"}],"name":"setClaimStakingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nftLimit","type":"uint256"}],"name":"setNftLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_prePrice","type":"uint256"},{"internalType":"uint256","name":"_pubPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reserved","type":"uint256"}],"name":"setReserved","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stakingAddress","type":"address"}],"name":"setStakingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[],"name":"toggleSaleOn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleSalePublic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleSaleWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togleSaleClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"tokensOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
66b1a2bc2ec50000600a90815566f8b0a10e470000600b55611a0b600c5560fa600d55600e819055600f556106826010556002601155601280546001600160a01b03199081167380d4914685ba4bca07a995bb160a8fc4cd4de5b61790915560138054909116739b561710feed0b8d829de89c82f80bb7b2b364b81790556014805462ffffff60a01b1916905560a0604081905260006080819052620000a891601691620001d6565b50348015620000b657600080fd5b50604051620035b4380380620035b4833981016040819052620000d99162000292565b604080518082018252600b81526a5a6f6d626965204170657360a81b6020808301918252835180850190945260048452635a41504560e01b9084015281519192916200012891600291620001d6565b5080516200013e906003906020840190620001d6565b5050506200015b620001556200018060201b60201c565b62000184565b6001600955815162000175906016906020850190620001d6565b5060155550620003b4565b3390565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001e49062000377565b90600052602060002090601f01602090048101928262000208576000855562000253565b82601f106200022357805160ff191683800117855562000253565b8280016001018555821562000253579182015b828111156200025357825182559160200191906001019062000236565b506200026192915062000265565b5090565b5b8082111562000261576000815560010162000266565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215620002a657600080fd5b82516001600160401b0380821115620002be57600080fd5b818501915085601f830112620002d357600080fd5b815181811115620002e857620002e86200027c565b604051601f8201601f19908116603f011681019083821181831017156200031357620003136200027c565b816040528281526020935088848487010111156200033057600080fd5b600091505b8282101562000354578482018401518183018501529083019062000335565b82821115620003665760008484830101525b969092015195979596505050505050565b600181811c908216806200038c57607f821691505b60208210811415620003ae57634e487b7160e01b600052602260045260246000fd5b50919050565b6131f080620003c46000396000f3fe60806040526004361061036b5760003560e01c80637cb64759116101c6578063cb4e8326116100f7578063e8a3d48511610095578063f4e0d9ac1161006f578063f4e0d9ac14610991578063f7aa2ffc146109b1578063f7d97577146109d2578063fe60d12c146109f257600080fd5b8063e8a3d48514610913578063e985e9c514610928578063f2fde38b1461097157600080fd5b8063d7b4be24116100d1578063d7b4be2414610890578063e230dbbe146108b0578063e567cad6146108d0578063e5a342a3146108e657600080fd5b8063cb4e832614610844578063d5478d0f1461085a578063d5e13d651461087a57600080fd5b8063a22cb46511610164578063bb3790871161013e578063bb379087146107d9578063bb6d44b7146107f9578063bddb7be71461080e578063c87b56dd1461082457600080fd5b8063a22cb46514610778578063b88d4fde14610798578063b8f929ad146107b857600080fd5b80638da5cb5b116101a05780638da5cb5b1461071d57806395d89b411461073b5780639dac6ebe14610750578063a0712d681461076557600080fd5b80637cb64759146106b057806381d48808146106d05780638462151c146106f057600080fd5b80632eb4a7ab116102a057806355f804b31161023e5780636c0360eb116102185780636c0360eb1461064657806370a082311461065b578063711b9e921461067b578063715018a61461069b57600080fd5b806355f804b3146105e65780636352211e1461060657806369e1cac11461062657600080fd5b806342842e0e1161027a57806342842e0e1461057c5780634707f44f1461059c5780634bffad9f146105bc5780634eabe20b146105d157600080fd5b80632eb4a7ab1461053e5780633ccfd60b14610554578063412786f61461055c57600080fd5b8063095ea7b31161030d57806320a44794116102e757806320a44794146104c757806323b872dd146104e85780632a7065ea146105085780632d6e71b61461051e57600080fd5b8063095ea7b31461046e57806309c2b9fa1461048e57806318160ddd146104ae57600080fd5b806305691ec81161034957806305691ec8146103df578063061431a81461041757806306fdde031461042c578063081812fc1461044e57600080fd5b806301ffc9a71461037057806302fe4728146103a5578063036a7a19146103c9575b600080fd5b34801561037c57600080fd5b5061039061038b3660046129e4565b610a08565b60405190151581526020015b60405180910390f35b3480156103b157600080fd5b506103bb60115481565b60405190815260200161039c565b3480156103d557600080fd5b506103bb60105481565b3480156103eb57600080fd5b506012546103ff906001600160a01b031681565b6040516001600160a01b03909116815260200161039c565b61042a610425366004612a4c565b610a5a565b005b34801561043857600080fd5b50610441610d3f565b60405161039c9190612aef565b34801561045a57600080fd5b506103ff610469366004612b02565b610dd1565b34801561047a57600080fd5b5061042a610489366004612b30565b610e15565b34801561049a57600080fd5b5061042a6104a9366004612b02565b610ea3565b3480156104ba57600080fd5b50600154600054036103bb565b3480156104d357600080fd5b5060145461039090600160b01b900460ff1681565b3480156104f457600080fd5b5061042a610503366004612b5c565b610ed2565b34801561051457600080fd5b506103bb600c5481565b34801561052a57600080fd5b5061042a610539366004612b02565b610edd565b34801561054a57600080fd5b506103bb60155481565b61042a610f0c565b34801561056857600080fd5b5061042a610577366004612a4c565b61122e565b34801561058857600080fd5b5061042a610597366004612b5c565b61152b565b3480156105a857600080fd5b506103bb6105b7366004612b30565b611546565b3480156105c857600080fd5b5061042a611572565b3480156105dd57600080fd5b5061042a6115bd565b3480156105f257600080fd5b5061042a610601366004612b9d565b611608565b34801561061257600080fd5b506103ff610621366004612b02565b61163e565b34801561063257600080fd5b5061042a610641366004612c0e565b611650565b34801561065257600080fd5b506104416117b6565b34801561066757600080fd5b506103bb610676366004612c79565b611844565b34801561068757600080fd5b5061042a610696366004612b02565b611892565b3480156106a757600080fd5b5061042a6118c1565b3480156106bc57600080fd5b5061042a6106cb366004612b02565b6118f7565b3480156106dc57600080fd5b5061042a6106eb366004612c79565b611926565b3480156106fc57600080fd5b5061071061070b366004612c79565b611972565b60405161039c9190612c96565b34801561072957600080fd5b506008546001600160a01b03166103ff565b34801561074757600080fd5b50610441611a43565b34801561075c57600080fd5b5061042a611a52565b61042a610773366004612b02565b611a9d565b34801561078457600080fd5b5061042a610793366004612cda565b611bad565b3480156107a457600080fd5b5061042a6107b3366004612d2e565b611c43565b3480156107c457600080fd5b5060145461039090600160a81b900460ff1681565b3480156107e557600080fd5b5061042a6107f4366004612c79565b611c7d565b34801561080557600080fd5b5061042a611cc9565b34801561081a57600080fd5b506103bb600b5481565b34801561083057600080fd5b5061044161083f366004612b02565b611d0c565b34801561085057600080fd5b506103bb600e5481565b34801561086657600080fd5b50610710610875366004612e0d565b611d91565b34801561088657600080fd5b506103bb600f5481565b34801561089c57600080fd5b506014546103ff906001600160a01b031681565b3480156108bc57600080fd5b506013546103ff906001600160a01b031681565b3480156108dc57600080fd5b506103bb600a5481565b3480156108f257600080fd5b506103bb610901366004612b02565b60176020526000908152604090205481565b34801561091f57600080fd5b50610441611e47565b34801561093457600080fd5b50610390610943366004612e4e565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561097d57600080fd5b5061042a61098c366004612c79565b611e6f565b34801561099d57600080fd5b5061042a6109ac366004612c79565b611f0a565b3480156109bd57600080fd5b5060145461039090600160a01b900460ff1681565b3480156109de57600080fd5b5061042a6109ed366004612e7c565b611f56565b3480156109fe57600080fd5b506103bb600d5481565b60006001600160e01b031982166380ac58cd60e01b1480610a3957506001600160e01b03198216635b5e139f60e01b145b80610a5457506301ffc9a760e01b6001600160e01b03198316145b92915050565b60026009541415610a865760405162461bcd60e51b8152600401610a7d90612e9e565b60405180910390fd5b6002600955601454600160a81b900460ff161515600114610ab95760405162461bcd60e51b8152600401610a7d90612ed5565b600f54831115610b065760405162461bcd60e51b8152602060048201526018602482015277169bdb589a59505c195cce88105b5bdd5b9d08131a5b5a5d60421b6044820152606401610a7d565b82600a54610b149190612f22565b3414610b625760405162461bcd60e51b815260206004820152601b60248201527f5a6f6d626965417065733a20496e636f72726563742056616c756500000000006044820152606401610a7d565b6012546000906001600160a01b03166370a08231336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bdf9190612f41565b1180610c6557506013546000906001600160a01b03166370a08231336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610c3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c639190612f41565b115b80610ce05750610ce0828280806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506015546040516bffffffffffffffffffffffff193360601b166020820152909250603401905060405160208183030381529060405280519060200120611f8b565b610d2c5760405162461bcd60e51b815260206004820152601b60248201527f5a6f6d626965417065733a204e6f742057686974656c697374656400000000006044820152606401610a7d565b610d3583611fa1565b5050600160095550565b606060028054610d4e90612f5a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7a90612f5a565b8015610dc75780601f10610d9c57610100808354040283529160200191610dc7565b820191906000526020600020905b815481529060010190602001808311610daa57829003601f168201915b5050505050905090565b6000610ddc82612074565b610df9576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b6000610e208261163e565b9050806001600160a01b0316836001600160a01b03161415610e555760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610e755750610e738133610943565b155b15610e93576040516367d9dca160e11b815260040160405180910390fd5b610e9e83838361209f565b505050565b6008546001600160a01b03163314610ecd5760405162461bcd60e51b8152600401610a7d90612f95565b601055565b610e9e8383836120fb565b6008546001600160a01b03163314610f075760405162461bcd60e51b8152600401610a7d90612f95565b600d55565b6008546001600160a01b03163314610f365760405162461bcd60e51b8152600401610a7d90612f95565b4773d04d56650b5b66e2da3bd9306d15cd11d20f288e7380665f9ba68501d383b01b16906775b86e8fe31373a3535bf71294e5497dd3d8bd23a2650636806b686000836064610f86876028612f22565b610f909190612fe0565b604051600081818185875af1925050503d8060008114610fcc576040519150601f19603f3d011682016040523d82523d6000602084013e610fd1565b606091505b50509050806110225760405162461bcd60e51b815260206004820152601d60248201527f5a6f6d626965417065733a205472616e736665722034204661696c65640000006044820152606401610a7d565b60006001600160a01b038416606461103b88601c612f22565b6110459190612fe0565b604051600081818185875af1925050503d8060008114611081576040519150601f19603f3d011682016040523d82523d6000602084013e611086565b606091505b50509050806110d75760405162461bcd60e51b815260206004820152601d60248201527f5a6f6d626965417065733a205472616e736665722033204661696c65640000006044820152606401610a7d565b60006001600160a01b03841660646110f0896009612f22565b6110fa9190612fe0565b604051600081818185875af1925050503d8060008114611136576040519150601f19603f3d011682016040523d82523d6000602084013e61113b565b606091505b505090508061118c5760405162461bcd60e51b815260206004820152601d60248201527f5a6f6d626965417065733a205472616e736665722032204661696c65640000006044820152606401610a7d565b604051600090339047908381818185875af1925050503d80600081146111ce576040519150601f19603f3d011682016040523d82523d6000602084013e6111d3565b606091505b50509050806112245760405162461bcd60e51b815260206004820152601d60248201527f5a6f6d626965417065733a205472616e736665722031204661696c65640000006044820152606401610a7d565b5050505050505050565b600260095414156112515760405162461bcd60e51b8152600401610a7d90612e9e565b6002600955601454600160a01b900460ff1615156001146112845760405162461bcd60e51b8152600401610a7d90612ed5565b6011546112919084612f22565b81146112e95760405162461bcd60e51b815260206004820152602160248201527f5a6f6d626965417065733a20496e636f727265637420546f6b656e20436f756e6044820152601d60fa1b6064820152608401610a7d565b60005b818110156114ec57600083838381811061130857611308612ff4565b90506020020135905060176000828152602001908152602001600020546000146113745760405162461bcd60e51b815260206004820152601960248201527f5a6f6d626965417065733a20546f6b656e20436c61696d6564000000000000006044820152606401610a7d565b336012546040516331a9108f60e11b8152600481018490526001600160a01b039283169290911690636352211e90602401602060405180830381865afa1580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e6919061300a565b6001600160a01b0316148061147c57506013546000906001600160a01b03166306dfe2d1336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101859052604401602060405180830381865afa158015611456573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147a9190612f41565b115b6114c85760405162461bcd60e51b815260206004820152601b60248201527f5a6f6d626965417065733a204e6f7420546f6b656e204f776e657200000000006044820152606401610a7d565b600090815260176020526040902060019055806114e481613027565b9150506112ec565b506114f683611fa1565b826010541061151c5782601060008282546115119190613042565b90915550610d359050565b60006010555050600160095550565b610e9e83838360405180602001604052806000815250611c43565b600061155183611972565b828151811061156257611562612ff4565b6020026020010151905092915050565b6008546001600160a01b0316331461159c5760405162461bcd60e51b8152600401610a7d90612f95565b6014805460ff60b01b198116600160b01b9182900460ff1615909102179055565b6008546001600160a01b031633146115e75760405162461bcd60e51b8152600401610a7d90612f95565b6014805460ff60a81b198116600160a81b9182900460ff1615909102179055565b6008546001600160a01b031633146116325760405162461bcd60e51b8152600401610a7d90612f95565b610e9e60168383612935565b60006116498261231c565b5192915050565b6008546001600160a01b0316331461167a5760405162461bcd60e51b8152600401610a7d90612f95565b6002600954141561169d5760405162461bcd60e51b8152600401610a7d90612e9e565b60026009558281146116f15760405162461bcd60e51b815260206004820152601b60248201527f5a6f6d626965417065733a204c656e677468206d69736d6174636800000000006044820152606401610a7d565b6000805b8481101561177d5761174586868381811061171257611712612ff4565b90506020020160208101906117279190612c79565b85858481811061173957611739612ff4565b90506020020135612435565b83838281811061175757611757612ff4565b90506020020135826117699190613059565b91508061177581613027565b9150506116f5565b5080600d54106117a45780600d60008282546117999190613042565b909155506117aa9050565b6000600d555b50506001600955505050565b601680546117c390612f5a565b80601f01602080910402602001604051908101604052809291908181526020018280546117ef90612f5a565b801561183c5780601f106118115761010080835404028352916020019161183c565b820191906000526020600020905b81548152906001019060200180831161181f57829003601f168201915b505050505081565b60006001600160a01b03821661186d576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600560205260409020546001600160401b031690565b6008546001600160a01b031633146118bc5760405162461bcd60e51b8152600401610a7d90612f95565b600c55565b6008546001600160a01b031633146118eb5760405162461bcd60e51b8152600401610a7d90612f95565b6118f56000612453565b565b6008546001600160a01b031633146119215760405162461bcd60e51b8152600401610a7d90612f95565b601555565b6008546001600160a01b031633146119505760405162461bcd60e51b8152600401610a7d90612f95565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6060600061197f83611844565b90506000816001600160401b0381111561199b5761199b612d18565b6040519080825280602002602001820160405280156119c4578160200160208202803683370190505b5090506000805b60015460005403811015611a3957856001600160a01b03166119ec8261163e565b6001600160a01b03161415611a275780838381518110611a0e57611a0e612ff4565b602090810291909101015281611a2381613027565b9250505b80611a3181613027565b9150506119cb565b5090949350505050565b606060038054610d4e90612f5a565b6008546001600160a01b03163314611a7c5760405162461bcd60e51b8152600401610a7d90612f95565b6014805460ff60a01b198116600160a01b9182900460ff1615909102179055565b60026009541415611ac05760405162461bcd60e51b8152600401610a7d90612e9e565b6002600955601454600160b01b900460ff161515600114611af35760405162461bcd60e51b8152600401610a7d90612ed5565b80600b54611b019190612f22565b3414611b4f5760405162461bcd60e51b815260206004820152601b60248201527f5a6f6d626965417065733a20496e636f72726563742056616c756500000000006044820152606401610a7d565b600e54811115611b9c5760405162461bcd60e51b8152602060048201526018602482015277169bdb589a59505c195cce88105b5bdd5b9d08131a5b5a5d60421b6044820152606401610a7d565b611ba581611fa1565b506001600955565b6001600160a01b038216331415611bd75760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611c4e8484846120fb565b611c5a848484846124a5565b611c77576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6008546001600160a01b03163314611ca75760405162461bcd60e51b8152600401610a7d90612f95565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6008546001600160a01b03163314611cf35760405162461bcd60e51b8152600401610a7d90612f95565b6014805462ffffff60a01b19166201010160a01b179055565b6060611d1782612074565b611d3457604051630a14c4b560e41b815260040160405180910390fd5b6000611d3e6125a5565b9050805160001415611d5f5760405180602001604052806000815250611d8a565b80611d69846125b4565b604051602001611d7a929190613071565b6040516020818303038152906040525b9392505050565b60606000826001600160401b03811115611dad57611dad612d18565b604051908082528060200260200182016040528015611dd6578160200160208202803683370190505b50905060005b83811015611e3f5760176000868684818110611dfa57611dfa612ff4565b90506020020135815260200190815260200160002054828281518110611e2257611e22612ff4565b602090810291909101015280611e3781613027565b915050611ddc565b509392505050565b60606016604051602001611e5b91906130a0565b604051602081830303815290604052905090565b6008546001600160a01b03163314611e995760405162461bcd60e51b8152600401610a7d90612f95565b6001600160a01b038116611efe5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a7d565b611f0781612453565b50565b6008546001600160a01b03163314611f345760405162461bcd60e51b8152600401610a7d90612f95565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b6008546001600160a01b03163314611f805760405162461bcd60e51b8152600401610a7d90612f95565b600a91909155600b55565b600082611f9885846126b1565b14949350505050565b323314611ff05760405162461bcd60e51b815260206004820152601a60248201527f5a6f6d626965417065733a2053656c66204d696e74204f6e6c790000000000006044820152606401610a7d565b601054600d54600c546120039190613042565b61200d9190613042565b8161201b6001546000540390565b6120259190613059565b111561206a5760405162461bcd60e51b8152602060048201526014602482015273169bdb589a59505c195cce8814dbdb190813dd5d60621b6044820152606401610a7d565b611f073382612435565b6000805482108015610a54575050600090815260046020526040902054600160e01b900460ff161590565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006121068261231c565b80519091506000906001600160a01b0316336001600160a01b03161480612134575081516121349033610943565b8061214f57503361214484610dd1565b6001600160a01b0316145b90508061216f57604051632ce44b5f60e11b815260040160405180910390fd5b846001600160a01b031682600001516001600160a01b0316146121a45760405162a1148160e81b815260040160405180910390fd5b6001600160a01b0384166121cb57604051633a954ecd60e21b815260040160405180910390fd5b6121d8858585600161271d565b6121e8600084846000015161209f565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff198082166001600160401b0392831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b4290921691909102179092559086018083529120549091166122d2576000548110156122d257825160008281526004602090815260409091208054918601516001600160401b0316600160a01b026001600160e01b03199092166001600160a01b03909316929092171790555b5082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b604080516060810182526000808252602082018190529181018290529054829081101561241c57600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff1615159181018290529061241a5780516001600160a01b0316156123b1579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b82046001600160401b031693830193909352600160e01b900460ff1615159281019290925215612415579392505050565b6123b1565b505b604051636f96cda160e11b815260040160405180910390fd5b61244f8282604051806020016040528060008152506127b5565b5050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0384163b1561259957604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906124e990339089908890889060040161314c565b6020604051808303816000875af1925050508015612524575060408051601f3d908101601f1916820190925261252191810190613189565b60015b61257f573d808015612552576040519150601f19603f3d011682016040523d82523d6000602084013e612557565b606091505b508051612577576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061259d565b5060015b949350505050565b606060168054610d4e90612f5a565b6060816125d85750506040805180820190915260018152600360fc1b602082015290565b8160005b811561260257806125ec81613027565b91506125fb9050600a83612fe0565b91506125dc565b6000816001600160401b0381111561261c5761261c612d18565b6040519080825280601f01601f191660200182016040528015612646576020820181803683370190505b5090505b841561259d5761265b600183613042565b9150612668600a866131a6565b612673906030613059565b60f81b81838151811061268857612688612ff4565b60200101906001600160f81b031916908160001a9053506126aa600a86612fe0565b945061264a565b600081815b8451811015611e3f5760008582815181106126d3576126d3612ff4565b602002602001015190508083116126f9576000838152602082905260409020925061270a565b600081815260208490526040902092505b508061271581613027565b9150506126b6565b6014546001600160a01b03161580159061273f57506001600160a01b03841615155b15611c7757601454604051630a21e5fb60e11b81526001600160a01b0386811660048301528581166024830152604482018590526064820184905290911690631443cbf690608401600060405180830381600087803b1580156127a157600080fd5b505af1158015611224573d6000803e3d6000fd5b610e9e83838360016000546001600160a01b0385166127e657604051622e076360e81b815260040160405180910390fd5b836128045760405163b562e8dd60e01b815260040160405180910390fd5b612811600086838761271d565b6001600160a01b038516600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff1981166001600160401b038083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c018116909202179091558584526004909252822080546001600160e01b031916909317600160a01b42909216919091021790915581905b8581101561292c5760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4838015612902575061290060008884886124a5565b155b15612920576040516368d2bf6b60e11b815260040160405180910390fd5b600191820191016128ab565b50600055612315565b82805461294190612f5a565b90600052602060002090601f01602090048101928261296357600085556129a9565b82601f1061297c5782800160ff198235161785556129a9565b828001600101855582156129a9579182015b828111156129a957823582559160200191906001019061298e565b506129b59291506129b9565b5090565b5b808211156129b557600081556001016129ba565b6001600160e01b031981168114611f0757600080fd5b6000602082840312156129f657600080fd5b8135611d8a816129ce565b60008083601f840112612a1357600080fd5b5081356001600160401b03811115612a2a57600080fd5b6020830191508360208260051b8501011115612a4557600080fd5b9250929050565b600080600060408486031215612a6157600080fd5b8335925060208401356001600160401b03811115612a7e57600080fd5b612a8a86828701612a01565b9497909650939450505050565b60005b83811015612ab2578181015183820152602001612a9a565b83811115611c775750506000910152565b60008151808452612adb816020860160208601612a97565b601f01601f19169290920160200192915050565b602081526000611d8a6020830184612ac3565b600060208284031215612b1457600080fd5b5035919050565b6001600160a01b0381168114611f0757600080fd5b60008060408385031215612b4357600080fd5b8235612b4e81612b1b565b946020939093013593505050565b600080600060608486031215612b7157600080fd5b8335612b7c81612b1b565b92506020840135612b8c81612b1b565b929592945050506040919091013590565b60008060208385031215612bb057600080fd5b82356001600160401b0380821115612bc757600080fd5b818501915085601f830112612bdb57600080fd5b813581811115612bea57600080fd5b866020828501011115612bfc57600080fd5b60209290920196919550909350505050565b60008060008060408587031215612c2457600080fd5b84356001600160401b0380821115612c3b57600080fd5b612c4788838901612a01565b90965094506020870135915080821115612c6057600080fd5b50612c6d87828801612a01565b95989497509550505050565b600060208284031215612c8b57600080fd5b8135611d8a81612b1b565b6020808252825182820181905260009190848201906040850190845b81811015612cce57835183529284019291840191600101612cb2565b50909695505050505050565b60008060408385031215612ced57600080fd5b8235612cf881612b1b565b915060208301358015158114612d0d57600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215612d4457600080fd5b8435612d4f81612b1b565b93506020850135612d5f81612b1b565b92506040850135915060608501356001600160401b0380821115612d8257600080fd5b818701915087601f830112612d9657600080fd5b813581811115612da857612da8612d18565b604051601f8201601f19908116603f01168101908382118183101715612dd057612dd0612d18565b816040528281528a6020848701011115612de957600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060208385031215612e2057600080fd5b82356001600160401b03811115612e3657600080fd5b612e4285828601612a01565b90969095509350505050565b60008060408385031215612e6157600080fd5b8235612e6c81612b1b565b91506020830135612d0d81612b1b565b60008060408385031215612e8f57600080fd5b50508035926020909101359150565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526017908201527f5a6f6d626965417065733a204e6f742053746172746564000000000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612f3c57612f3c612f0c565b500290565b600060208284031215612f5357600080fd5b5051919050565b600181811c90821680612f6e57607f821691505b60208210811415612f8f57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601260045260246000fd5b600082612fef57612fef612fca565b500490565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561301c57600080fd5b8151611d8a81612b1b565b600060001982141561303b5761303b612f0c565b5060010190565b60008282101561305457613054612f0c565b500390565b6000821982111561306c5761306c612f0c565b500190565b60008351613083818460208801612a97565b835190830190613097818360208801612a97565b01949350505050565b600080835481600182811c9150808316806130bc57607f831692505b60208084108214156130dc57634e487b7160e01b86526022600452602486fd5b8180156130f057600181146131015761312e565b60ff1986168952848901965061312e565b60008a81526020902060005b868110156131265781548b82015290850190830161310d565b505084890196505b50505050505061259d816718dbdb9d1c9858dd60c21b815260080190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061317f90830184612ac3565b9695505050505050565b60006020828403121561319b57600080fd5b8151611d8a816129ce565b6000826131b5576131b5612fca565b50069056fea264697066735822122004155ec517741cd31dd754b5072783af6864537e07f932c01acd492aa26b4f9064736f6c634300080b00330000000000000000000000000000000000000000000000000000000000000040df8881909db208a512aba2dfc29614616791a2af5403f521d72f29a467032e88000000000000000000000000000000000000000000000000000000000000001f68747470733a2f2f6d657461646174612e7a6f6d626965617065732e696f2f00
Deployed Bytecode
0x60806040526004361061036b5760003560e01c80637cb64759116101c6578063cb4e8326116100f7578063e8a3d48511610095578063f4e0d9ac1161006f578063f4e0d9ac14610991578063f7aa2ffc146109b1578063f7d97577146109d2578063fe60d12c146109f257600080fd5b8063e8a3d48514610913578063e985e9c514610928578063f2fde38b1461097157600080fd5b8063d7b4be24116100d1578063d7b4be2414610890578063e230dbbe146108b0578063e567cad6146108d0578063e5a342a3146108e657600080fd5b8063cb4e832614610844578063d5478d0f1461085a578063d5e13d651461087a57600080fd5b8063a22cb46511610164578063bb3790871161013e578063bb379087146107d9578063bb6d44b7146107f9578063bddb7be71461080e578063c87b56dd1461082457600080fd5b8063a22cb46514610778578063b88d4fde14610798578063b8f929ad146107b857600080fd5b80638da5cb5b116101a05780638da5cb5b1461071d57806395d89b411461073b5780639dac6ebe14610750578063a0712d681461076557600080fd5b80637cb64759146106b057806381d48808146106d05780638462151c146106f057600080fd5b80632eb4a7ab116102a057806355f804b31161023e5780636c0360eb116102185780636c0360eb1461064657806370a082311461065b578063711b9e921461067b578063715018a61461069b57600080fd5b806355f804b3146105e65780636352211e1461060657806369e1cac11461062657600080fd5b806342842e0e1161027a57806342842e0e1461057c5780634707f44f1461059c5780634bffad9f146105bc5780634eabe20b146105d157600080fd5b80632eb4a7ab1461053e5780633ccfd60b14610554578063412786f61461055c57600080fd5b8063095ea7b31161030d57806320a44794116102e757806320a44794146104c757806323b872dd146104e85780632a7065ea146105085780632d6e71b61461051e57600080fd5b8063095ea7b31461046e57806309c2b9fa1461048e57806318160ddd146104ae57600080fd5b806305691ec81161034957806305691ec8146103df578063061431a81461041757806306fdde031461042c578063081812fc1461044e57600080fd5b806301ffc9a71461037057806302fe4728146103a5578063036a7a19146103c9575b600080fd5b34801561037c57600080fd5b5061039061038b3660046129e4565b610a08565b60405190151581526020015b60405180910390f35b3480156103b157600080fd5b506103bb60115481565b60405190815260200161039c565b3480156103d557600080fd5b506103bb60105481565b3480156103eb57600080fd5b506012546103ff906001600160a01b031681565b6040516001600160a01b03909116815260200161039c565b61042a610425366004612a4c565b610a5a565b005b34801561043857600080fd5b50610441610d3f565b60405161039c9190612aef565b34801561045a57600080fd5b506103ff610469366004612b02565b610dd1565b34801561047a57600080fd5b5061042a610489366004612b30565b610e15565b34801561049a57600080fd5b5061042a6104a9366004612b02565b610ea3565b3480156104ba57600080fd5b50600154600054036103bb565b3480156104d357600080fd5b5060145461039090600160b01b900460ff1681565b3480156104f457600080fd5b5061042a610503366004612b5c565b610ed2565b34801561051457600080fd5b506103bb600c5481565b34801561052a57600080fd5b5061042a610539366004612b02565b610edd565b34801561054a57600080fd5b506103bb60155481565b61042a610f0c565b34801561056857600080fd5b5061042a610577366004612a4c565b61122e565b34801561058857600080fd5b5061042a610597366004612b5c565b61152b565b3480156105a857600080fd5b506103bb6105b7366004612b30565b611546565b3480156105c857600080fd5b5061042a611572565b3480156105dd57600080fd5b5061042a6115bd565b3480156105f257600080fd5b5061042a610601366004612b9d565b611608565b34801561061257600080fd5b506103ff610621366004612b02565b61163e565b34801561063257600080fd5b5061042a610641366004612c0e565b611650565b34801561065257600080fd5b506104416117b6565b34801561066757600080fd5b506103bb610676366004612c79565b611844565b34801561068757600080fd5b5061042a610696366004612b02565b611892565b3480156106a757600080fd5b5061042a6118c1565b3480156106bc57600080fd5b5061042a6106cb366004612b02565b6118f7565b3480156106dc57600080fd5b5061042a6106eb366004612c79565b611926565b3480156106fc57600080fd5b5061071061070b366004612c79565b611972565b60405161039c9190612c96565b34801561072957600080fd5b506008546001600160a01b03166103ff565b34801561074757600080fd5b50610441611a43565b34801561075c57600080fd5b5061042a611a52565b61042a610773366004612b02565b611a9d565b34801561078457600080fd5b5061042a610793366004612cda565b611bad565b3480156107a457600080fd5b5061042a6107b3366004612d2e565b611c43565b3480156107c457600080fd5b5060145461039090600160a81b900460ff1681565b3480156107e557600080fd5b5061042a6107f4366004612c79565b611c7d565b34801561080557600080fd5b5061042a611cc9565b34801561081a57600080fd5b506103bb600b5481565b34801561083057600080fd5b5061044161083f366004612b02565b611d0c565b34801561085057600080fd5b506103bb600e5481565b34801561086657600080fd5b50610710610875366004612e0d565b611d91565b34801561088657600080fd5b506103bb600f5481565b34801561089c57600080fd5b506014546103ff906001600160a01b031681565b3480156108bc57600080fd5b506013546103ff906001600160a01b031681565b3480156108dc57600080fd5b506103bb600a5481565b3480156108f257600080fd5b506103bb610901366004612b02565b60176020526000908152604090205481565b34801561091f57600080fd5b50610441611e47565b34801561093457600080fd5b50610390610943366004612e4e565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561097d57600080fd5b5061042a61098c366004612c79565b611e6f565b34801561099d57600080fd5b5061042a6109ac366004612c79565b611f0a565b3480156109bd57600080fd5b5060145461039090600160a01b900460ff1681565b3480156109de57600080fd5b5061042a6109ed366004612e7c565b611f56565b3480156109fe57600080fd5b506103bb600d5481565b60006001600160e01b031982166380ac58cd60e01b1480610a3957506001600160e01b03198216635b5e139f60e01b145b80610a5457506301ffc9a760e01b6001600160e01b03198316145b92915050565b60026009541415610a865760405162461bcd60e51b8152600401610a7d90612e9e565b60405180910390fd5b6002600955601454600160a81b900460ff161515600114610ab95760405162461bcd60e51b8152600401610a7d90612ed5565b600f54831115610b065760405162461bcd60e51b8152602060048201526018602482015277169bdb589a59505c195cce88105b5bdd5b9d08131a5b5a5d60421b6044820152606401610a7d565b82600a54610b149190612f22565b3414610b625760405162461bcd60e51b815260206004820152601b60248201527f5a6f6d626965417065733a20496e636f72726563742056616c756500000000006044820152606401610a7d565b6012546000906001600160a01b03166370a08231336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bdf9190612f41565b1180610c6557506013546000906001600160a01b03166370a08231336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610c3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c639190612f41565b115b80610ce05750610ce0828280806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506015546040516bffffffffffffffffffffffff193360601b166020820152909250603401905060405160208183030381529060405280519060200120611f8b565b610d2c5760405162461bcd60e51b815260206004820152601b60248201527f5a6f6d626965417065733a204e6f742057686974656c697374656400000000006044820152606401610a7d565b610d3583611fa1565b5050600160095550565b606060028054610d4e90612f5a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7a90612f5a565b8015610dc75780601f10610d9c57610100808354040283529160200191610dc7565b820191906000526020600020905b815481529060010190602001808311610daa57829003601f168201915b5050505050905090565b6000610ddc82612074565b610df9576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b6000610e208261163e565b9050806001600160a01b0316836001600160a01b03161415610e555760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610e755750610e738133610943565b155b15610e93576040516367d9dca160e11b815260040160405180910390fd5b610e9e83838361209f565b505050565b6008546001600160a01b03163314610ecd5760405162461bcd60e51b8152600401610a7d90612f95565b601055565b610e9e8383836120fb565b6008546001600160a01b03163314610f075760405162461bcd60e51b8152600401610a7d90612f95565b600d55565b6008546001600160a01b03163314610f365760405162461bcd60e51b8152600401610a7d90612f95565b4773d04d56650b5b66e2da3bd9306d15cd11d20f288e7380665f9ba68501d383b01b16906775b86e8fe31373a3535bf71294e5497dd3d8bd23a2650636806b686000836064610f86876028612f22565b610f909190612fe0565b604051600081818185875af1925050503d8060008114610fcc576040519150601f19603f3d011682016040523d82523d6000602084013e610fd1565b606091505b50509050806110225760405162461bcd60e51b815260206004820152601d60248201527f5a6f6d626965417065733a205472616e736665722034204661696c65640000006044820152606401610a7d565b60006001600160a01b038416606461103b88601c612f22565b6110459190612fe0565b604051600081818185875af1925050503d8060008114611081576040519150601f19603f3d011682016040523d82523d6000602084013e611086565b606091505b50509050806110d75760405162461bcd60e51b815260206004820152601d60248201527f5a6f6d626965417065733a205472616e736665722033204661696c65640000006044820152606401610a7d565b60006001600160a01b03841660646110f0896009612f22565b6110fa9190612fe0565b604051600081818185875af1925050503d8060008114611136576040519150601f19603f3d011682016040523d82523d6000602084013e61113b565b606091505b505090508061118c5760405162461bcd60e51b815260206004820152601d60248201527f5a6f6d626965417065733a205472616e736665722032204661696c65640000006044820152606401610a7d565b604051600090339047908381818185875af1925050503d80600081146111ce576040519150601f19603f3d011682016040523d82523d6000602084013e6111d3565b606091505b50509050806112245760405162461bcd60e51b815260206004820152601d60248201527f5a6f6d626965417065733a205472616e736665722031204661696c65640000006044820152606401610a7d565b5050505050505050565b600260095414156112515760405162461bcd60e51b8152600401610a7d90612e9e565b6002600955601454600160a01b900460ff1615156001146112845760405162461bcd60e51b8152600401610a7d90612ed5565b6011546112919084612f22565b81146112e95760405162461bcd60e51b815260206004820152602160248201527f5a6f6d626965417065733a20496e636f727265637420546f6b656e20436f756e6044820152601d60fa1b6064820152608401610a7d565b60005b818110156114ec57600083838381811061130857611308612ff4565b90506020020135905060176000828152602001908152602001600020546000146113745760405162461bcd60e51b815260206004820152601960248201527f5a6f6d626965417065733a20546f6b656e20436c61696d6564000000000000006044820152606401610a7d565b336012546040516331a9108f60e11b8152600481018490526001600160a01b039283169290911690636352211e90602401602060405180830381865afa1580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e6919061300a565b6001600160a01b0316148061147c57506013546000906001600160a01b03166306dfe2d1336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101859052604401602060405180830381865afa158015611456573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147a9190612f41565b115b6114c85760405162461bcd60e51b815260206004820152601b60248201527f5a6f6d626965417065733a204e6f7420546f6b656e204f776e657200000000006044820152606401610a7d565b600090815260176020526040902060019055806114e481613027565b9150506112ec565b506114f683611fa1565b826010541061151c5782601060008282546115119190613042565b90915550610d359050565b60006010555050600160095550565b610e9e83838360405180602001604052806000815250611c43565b600061155183611972565b828151811061156257611562612ff4565b6020026020010151905092915050565b6008546001600160a01b0316331461159c5760405162461bcd60e51b8152600401610a7d90612f95565b6014805460ff60b01b198116600160b01b9182900460ff1615909102179055565b6008546001600160a01b031633146115e75760405162461bcd60e51b8152600401610a7d90612f95565b6014805460ff60a81b198116600160a81b9182900460ff1615909102179055565b6008546001600160a01b031633146116325760405162461bcd60e51b8152600401610a7d90612f95565b610e9e60168383612935565b60006116498261231c565b5192915050565b6008546001600160a01b0316331461167a5760405162461bcd60e51b8152600401610a7d90612f95565b6002600954141561169d5760405162461bcd60e51b8152600401610a7d90612e9e565b60026009558281146116f15760405162461bcd60e51b815260206004820152601b60248201527f5a6f6d626965417065733a204c656e677468206d69736d6174636800000000006044820152606401610a7d565b6000805b8481101561177d5761174586868381811061171257611712612ff4565b90506020020160208101906117279190612c79565b85858481811061173957611739612ff4565b90506020020135612435565b83838281811061175757611757612ff4565b90506020020135826117699190613059565b91508061177581613027565b9150506116f5565b5080600d54106117a45780600d60008282546117999190613042565b909155506117aa9050565b6000600d555b50506001600955505050565b601680546117c390612f5a565b80601f01602080910402602001604051908101604052809291908181526020018280546117ef90612f5a565b801561183c5780601f106118115761010080835404028352916020019161183c565b820191906000526020600020905b81548152906001019060200180831161181f57829003601f168201915b505050505081565b60006001600160a01b03821661186d576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600560205260409020546001600160401b031690565b6008546001600160a01b031633146118bc5760405162461bcd60e51b8152600401610a7d90612f95565b600c55565b6008546001600160a01b031633146118eb5760405162461bcd60e51b8152600401610a7d90612f95565b6118f56000612453565b565b6008546001600160a01b031633146119215760405162461bcd60e51b8152600401610a7d90612f95565b601555565b6008546001600160a01b031633146119505760405162461bcd60e51b8152600401610a7d90612f95565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6060600061197f83611844565b90506000816001600160401b0381111561199b5761199b612d18565b6040519080825280602002602001820160405280156119c4578160200160208202803683370190505b5090506000805b60015460005403811015611a3957856001600160a01b03166119ec8261163e565b6001600160a01b03161415611a275780838381518110611a0e57611a0e612ff4565b602090810291909101015281611a2381613027565b9250505b80611a3181613027565b9150506119cb565b5090949350505050565b606060038054610d4e90612f5a565b6008546001600160a01b03163314611a7c5760405162461bcd60e51b8152600401610a7d90612f95565b6014805460ff60a01b198116600160a01b9182900460ff1615909102179055565b60026009541415611ac05760405162461bcd60e51b8152600401610a7d90612e9e565b6002600955601454600160b01b900460ff161515600114611af35760405162461bcd60e51b8152600401610a7d90612ed5565b80600b54611b019190612f22565b3414611b4f5760405162461bcd60e51b815260206004820152601b60248201527f5a6f6d626965417065733a20496e636f72726563742056616c756500000000006044820152606401610a7d565b600e54811115611b9c5760405162461bcd60e51b8152602060048201526018602482015277169bdb589a59505c195cce88105b5bdd5b9d08131a5b5a5d60421b6044820152606401610a7d565b611ba581611fa1565b506001600955565b6001600160a01b038216331415611bd75760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611c4e8484846120fb565b611c5a848484846124a5565b611c77576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6008546001600160a01b03163314611ca75760405162461bcd60e51b8152600401610a7d90612f95565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6008546001600160a01b03163314611cf35760405162461bcd60e51b8152600401610a7d90612f95565b6014805462ffffff60a01b19166201010160a01b179055565b6060611d1782612074565b611d3457604051630a14c4b560e41b815260040160405180910390fd5b6000611d3e6125a5565b9050805160001415611d5f5760405180602001604052806000815250611d8a565b80611d69846125b4565b604051602001611d7a929190613071565b6040516020818303038152906040525b9392505050565b60606000826001600160401b03811115611dad57611dad612d18565b604051908082528060200260200182016040528015611dd6578160200160208202803683370190505b50905060005b83811015611e3f5760176000868684818110611dfa57611dfa612ff4565b90506020020135815260200190815260200160002054828281518110611e2257611e22612ff4565b602090810291909101015280611e3781613027565b915050611ddc565b509392505050565b60606016604051602001611e5b91906130a0565b604051602081830303815290604052905090565b6008546001600160a01b03163314611e995760405162461bcd60e51b8152600401610a7d90612f95565b6001600160a01b038116611efe5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a7d565b611f0781612453565b50565b6008546001600160a01b03163314611f345760405162461bcd60e51b8152600401610a7d90612f95565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b6008546001600160a01b03163314611f805760405162461bcd60e51b8152600401610a7d90612f95565b600a91909155600b55565b600082611f9885846126b1565b14949350505050565b323314611ff05760405162461bcd60e51b815260206004820152601a60248201527f5a6f6d626965417065733a2053656c66204d696e74204f6e6c790000000000006044820152606401610a7d565b601054600d54600c546120039190613042565b61200d9190613042565b8161201b6001546000540390565b6120259190613059565b111561206a5760405162461bcd60e51b8152602060048201526014602482015273169bdb589a59505c195cce8814dbdb190813dd5d60621b6044820152606401610a7d565b611f073382612435565b6000805482108015610a54575050600090815260046020526040902054600160e01b900460ff161590565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006121068261231c565b80519091506000906001600160a01b0316336001600160a01b03161480612134575081516121349033610943565b8061214f57503361214484610dd1565b6001600160a01b0316145b90508061216f57604051632ce44b5f60e11b815260040160405180910390fd5b846001600160a01b031682600001516001600160a01b0316146121a45760405162a1148160e81b815260040160405180910390fd5b6001600160a01b0384166121cb57604051633a954ecd60e21b815260040160405180910390fd5b6121d8858585600161271d565b6121e8600084846000015161209f565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff198082166001600160401b0392831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b4290921691909102179092559086018083529120549091166122d2576000548110156122d257825160008281526004602090815260409091208054918601516001600160401b0316600160a01b026001600160e01b03199092166001600160a01b03909316929092171790555b5082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b604080516060810182526000808252602082018190529181018290529054829081101561241c57600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff1615159181018290529061241a5780516001600160a01b0316156123b1579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b82046001600160401b031693830193909352600160e01b900460ff1615159281019290925215612415579392505050565b6123b1565b505b604051636f96cda160e11b815260040160405180910390fd5b61244f8282604051806020016040528060008152506127b5565b5050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0384163b1561259957604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906124e990339089908890889060040161314c565b6020604051808303816000875af1925050508015612524575060408051601f3d908101601f1916820190925261252191810190613189565b60015b61257f573d808015612552576040519150601f19603f3d011682016040523d82523d6000602084013e612557565b606091505b508051612577576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061259d565b5060015b949350505050565b606060168054610d4e90612f5a565b6060816125d85750506040805180820190915260018152600360fc1b602082015290565b8160005b811561260257806125ec81613027565b91506125fb9050600a83612fe0565b91506125dc565b6000816001600160401b0381111561261c5761261c612d18565b6040519080825280601f01601f191660200182016040528015612646576020820181803683370190505b5090505b841561259d5761265b600183613042565b9150612668600a866131a6565b612673906030613059565b60f81b81838151811061268857612688612ff4565b60200101906001600160f81b031916908160001a9053506126aa600a86612fe0565b945061264a565b600081815b8451811015611e3f5760008582815181106126d3576126d3612ff4565b602002602001015190508083116126f9576000838152602082905260409020925061270a565b600081815260208490526040902092505b508061271581613027565b9150506126b6565b6014546001600160a01b03161580159061273f57506001600160a01b03841615155b15611c7757601454604051630a21e5fb60e11b81526001600160a01b0386811660048301528581166024830152604482018590526064820184905290911690631443cbf690608401600060405180830381600087803b1580156127a157600080fd5b505af1158015611224573d6000803e3d6000fd5b610e9e83838360016000546001600160a01b0385166127e657604051622e076360e81b815260040160405180910390fd5b836128045760405163b562e8dd60e01b815260040160405180910390fd5b612811600086838761271d565b6001600160a01b038516600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff1981166001600160401b038083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c018116909202179091558584526004909252822080546001600160e01b031916909317600160a01b42909216919091021790915581905b8581101561292c5760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4838015612902575061290060008884886124a5565b155b15612920576040516368d2bf6b60e11b815260040160405180910390fd5b600191820191016128ab565b50600055612315565b82805461294190612f5a565b90600052602060002090601f01602090048101928261296357600085556129a9565b82601f1061297c5782800160ff198235161785556129a9565b828001600101855582156129a9579182015b828111156129a957823582559160200191906001019061298e565b506129b59291506129b9565b5090565b5b808211156129b557600081556001016129ba565b6001600160e01b031981168114611f0757600080fd5b6000602082840312156129f657600080fd5b8135611d8a816129ce565b60008083601f840112612a1357600080fd5b5081356001600160401b03811115612a2a57600080fd5b6020830191508360208260051b8501011115612a4557600080fd5b9250929050565b600080600060408486031215612a6157600080fd5b8335925060208401356001600160401b03811115612a7e57600080fd5b612a8a86828701612a01565b9497909650939450505050565b60005b83811015612ab2578181015183820152602001612a9a565b83811115611c775750506000910152565b60008151808452612adb816020860160208601612a97565b601f01601f19169290920160200192915050565b602081526000611d8a6020830184612ac3565b600060208284031215612b1457600080fd5b5035919050565b6001600160a01b0381168114611f0757600080fd5b60008060408385031215612b4357600080fd5b8235612b4e81612b1b565b946020939093013593505050565b600080600060608486031215612b7157600080fd5b8335612b7c81612b1b565b92506020840135612b8c81612b1b565b929592945050506040919091013590565b60008060208385031215612bb057600080fd5b82356001600160401b0380821115612bc757600080fd5b818501915085601f830112612bdb57600080fd5b813581811115612bea57600080fd5b866020828501011115612bfc57600080fd5b60209290920196919550909350505050565b60008060008060408587031215612c2457600080fd5b84356001600160401b0380821115612c3b57600080fd5b612c4788838901612a01565b90965094506020870135915080821115612c6057600080fd5b50612c6d87828801612a01565b95989497509550505050565b600060208284031215612c8b57600080fd5b8135611d8a81612b1b565b6020808252825182820181905260009190848201906040850190845b81811015612cce57835183529284019291840191600101612cb2565b50909695505050505050565b60008060408385031215612ced57600080fd5b8235612cf881612b1b565b915060208301358015158114612d0d57600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215612d4457600080fd5b8435612d4f81612b1b565b93506020850135612d5f81612b1b565b92506040850135915060608501356001600160401b0380821115612d8257600080fd5b818701915087601f830112612d9657600080fd5b813581811115612da857612da8612d18565b604051601f8201601f19908116603f01168101908382118183101715612dd057612dd0612d18565b816040528281528a6020848701011115612de957600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060208385031215612e2057600080fd5b82356001600160401b03811115612e3657600080fd5b612e4285828601612a01565b90969095509350505050565b60008060408385031215612e6157600080fd5b8235612e6c81612b1b565b91506020830135612d0d81612b1b565b60008060408385031215612e8f57600080fd5b50508035926020909101359150565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526017908201527f5a6f6d626965417065733a204e6f742053746172746564000000000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612f3c57612f3c612f0c565b500290565b600060208284031215612f5357600080fd5b5051919050565b600181811c90821680612f6e57607f821691505b60208210811415612f8f57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601260045260246000fd5b600082612fef57612fef612fca565b500490565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561301c57600080fd5b8151611d8a81612b1b565b600060001982141561303b5761303b612f0c565b5060010190565b60008282101561305457613054612f0c565b500390565b6000821982111561306c5761306c612f0c565b500190565b60008351613083818460208801612a97565b835190830190613097818360208801612a97565b01949350505050565b600080835481600182811c9150808316806130bc57607f831692505b60208084108214156130dc57634e487b7160e01b86526022600452602486fd5b8180156130f057600181146131015761312e565b60ff1986168952848901965061312e565b60008a81526020902060005b868110156131265781548b82015290850190830161310d565b505084890196505b50505050505061259d816718dbdb9d1c9858dd60c21b815260080190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061317f90830184612ac3565b9695505050505050565b60006020828403121561319b57600080fd5b8151611d8a816129ce565b6000826131b5576131b5612fca565b50069056fea264697066735822122004155ec517741cd31dd754b5072783af6864537e07f932c01acd492aa26b4f9064736f6c634300080b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000040df8881909db208a512aba2dfc29614616791a2af5403f521d72f29a467032e88000000000000000000000000000000000000000000000000000000000000001f68747470733a2f2f6d657461646174612e7a6f6d626965617065732e696f2f00
-----Decoded View---------------
Arg [0] : _initURI (string): https://metadata.zombieapes.io/
Arg [1] : _merkleRoot (bytes32): 0xdf8881909db208a512aba2dfc29614616791a2af5403f521d72f29a467032e88
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : df8881909db208a512aba2dfc29614616791a2af5403f521d72f29a467032e88
Arg [2] : 000000000000000000000000000000000000000000000000000000000000001f
Arg [3] : 68747470733a2f2f6d657461646174612e7a6f6d626965617065732e696f2f00
Deployed Bytecode Sourcemap
50328:8412:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32622:305;;;;;;;;;;-1:-1:-1;32622:305:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;32622:305:0;;;;;;;;50672:31;;;;;;;;;;;;;;;;;;;738:25:1;;;726:2;711:18;50672:31:0;592:177:1;50628:35:0;;;;;;;;;;;;;;;;50710:72;;;;;;;;;;-1:-1:-1;50710:72:0;;;;-1:-1:-1;;;;;50710:72:0;;;;;;-1:-1:-1;;;;;938:32:1;;;920:51;;908:2;893:18;50710:72:0;774:203:1;51662:779:0;;;;;;:::i;:::-;;:::i;:::-;;35980:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;37483:204::-;;;;;;;;;;-1:-1:-1;37483:204:0;;;;;:::i;:::-;;:::i;37046:371::-;;;;;;;;;;-1:-1:-1;37046:371:0;;;;;:::i;:::-;;:::i;57844:116::-;;;;;;;;;;-1:-1:-1;57844:116:0;;;;;:::i;:::-;;:::i;32283:267::-;;;;;;;;;;-1:-1:-1;32519:12:0;;32327:7;32503:13;:28;32283:267;;50998:30;;;;;;;;;;-1:-1:-1;50998:30:0;;;;-1:-1:-1;;;50998:30:0;;;;;;38340:170;;;;;;;;;;-1:-1:-1;38340:170:0;;;;;:::i;:::-;;:::i;50480:30::-;;;;;;;;;;;;;;;;57968:96;;;;;;;;;;-1:-1:-1;57968:96:0;;;;;:::i;:::-;;:::i;51037:25::-;;;;;;;;;;;;;;;;55440:969;;;:::i;52449:1072::-;;;;;;;;;;-1:-1:-1;52449:1072:0;;;;;:::i;:::-;;:::i;38581:185::-;;;;;;;;;;-1:-1:-1;38581:185:0;;;;;:::i;:::-;;:::i;54751:179::-;;;;;;;;;;-1:-1:-1;54751:179:0;;;;;:::i;:::-;;:::i;57032:88::-;;;;;;;;;;;;;:::i;56927:97::-;;;;;;;;;;;;;:::i;57363:106::-;;;;;;;;;;-1:-1:-1;57363:106:0;;;;;:::i;:::-;;:::i;35789:124::-;;;;;;;;;;-1:-1:-1;35789:124:0;;;;;:::i;:::-;;:::i;54212:531::-;;;;;;;;;;-1:-1:-1;54212:531:0;;;;;:::i;:::-;;:::i;51071:26::-;;;;;;;;;;;;;:::i;32991:206::-;;;;;;;;;;-1:-1:-1;32991:206:0;;;;;:::i;:::-;;:::i;57628:96::-;;;;;;;;;;-1:-1:-1;57628:96:0;;;;;:::i;:::-;;:::i;9878:103::-;;;;;;;;;;;;;:::i;57732:104::-;;;;;;;;;;-1:-1:-1;57732:104:0;;;;;:::i;:::-;;:::i;58200:163::-;;;;;;;;;;-1:-1:-1;58200:163:0;;;;;:::i;:::-;;:::i;54938:494::-;;;;;;;;;;-1:-1:-1;54938:494:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;9227:87::-;;;;;;;;;;-1:-1:-1;9300:6:0;;-1:-1:-1;;;;;9300:6:0;9227:87;;36149:104;;;;;;;;;;;;;:::i;57128:84::-;;;;;;;;;;;;;:::i;51345:309::-;;;;;;:::i;:::-;;:::i;37759:279::-;;;;;;;;;;-1:-1:-1;37759:279:0;;;;;:::i;:::-;;:::i;38837:342::-;;;;;;;;;;-1:-1:-1;38837:342:0;;;;;:::i;:::-;;:::i;50958:33::-;;;;;;;;;;-1:-1:-1;50958:33:0;;;;-1:-1:-1;;;50958:33:0;;;;;;58371:112;;;;;;;;;;-1:-1:-1;58371:112:0;;;;;:::i;:::-;;:::i;57220:135::-;;;;;;;;;;;;;:::i;50435:36::-;;;;;;;;;;;;;;;;36324:318;;;;;;;;;;-1:-1:-1;36324:318:0;;;;;:::i;:::-;;:::i;50553:29::-;;;;;;;;;;;;;;;;53849:355;;;;;;;;;;-1:-1:-1;53849:355:0;;;;;:::i;:::-;;:::i;50589:32::-;;;;;;;;;;;;;;;;50884:29;;;;;;;;;;-1:-1:-1;50884:29:0;;;;-1:-1:-1;;;;;50884:29:0;;;50789:88;;;;;;;;;;-1:-1:-1;50789:88:0;;;;-1:-1:-1;;;;;50789:88:0;;;50392:36;;;;;;;;;;;;;;;;51106:48;;;;;;;;;;-1:-1:-1;51106:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;58607:130;;;;;;;;;;;;;:::i;38109:164::-;;;;;;;;;;-1:-1:-1;38109:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;38230:25:0;;;38206:4;38230:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;38109:164;10136:201;;;;;;;;;;-1:-1:-1;10136:201:0;;;;;:::i;:::-;;:::i;58072:120::-;;;;;;;;;;-1:-1:-1;58072:120:0;;;;;:::i;:::-;;:::i;50922:29::-;;;;;;;;;;-1:-1:-1;50922:29:0;;;;-1:-1:-1;;;50922:29:0;;;;;;57477:143;;;;;;;;;;-1:-1:-1;57477:143:0;;;;;:::i;:::-;;:::i;50517:29::-;;;;;;;;;;;;;;;;32622:305;32724:4;-1:-1:-1;;;;;;32761:40:0;;-1:-1:-1;;;32761:40:0;;:105;;-1:-1:-1;;;;;;;32818:48:0;;-1:-1:-1;;;32818:48:0;32761:105;:158;;;-1:-1:-1;;;;;;;;;;22120:40:0;;;32883:36;32741:178;32622:305;-1:-1:-1;;32622:305:0:o;51662:779::-;4201:1;4799:7;;:19;;4791:63;;;;-1:-1:-1;;;4791:63:0;;;;;;;:::i;:::-;;;;;;;;;4201:1;4932:7;:18;51809:13:::1;::::0;-1:-1:-1;;;51809:13:0;::::1;;;:21;;51826:4;51809:21;51801:57;;;;-1:-1:-1::0;;;51801:57:0::1;;;;;;;:::i;:::-;51888:12;;51877:7;:23;;51869:60;;;::::0;-1:-1:-1;;;51869:60:0;;10684:2:1;51869:60:0::1;::::0;::::1;10666:21:1::0;10723:2;10703:18;;;10696:30;-1:-1:-1;;;10742:18:1;;;10735:54;10806:18;;51869:60:0::1;10482:348:1::0;51869:60:0::1;51972:7;51961:8;;:18;;;;:::i;:::-;51948:9;:31;51940:71;;;::::0;-1:-1:-1;;;51940:71:0;;11342:2:1;51940:71:0::1;::::0;::::1;11324:21:1::0;11381:2;11361:18;;;11354:30;11420:29;11400:18;;;11393:57;11467:18;;51940:71:0::1;11140:351:1::0;51940:71:0::1;52052:12;::::0;52092:1:::1;::::0;-1:-1:-1;;;;;52052:12:0::1;52044:31;8031:10:::0;52044:45:::1;::::0;-1:-1:-1;;;;;;52044:45:0::1;::::0;;;;;;-1:-1:-1;;;;;938:32:1;;;52044:45:0::1;::::0;::::1;920:51:1::0;893:18;;52044:45:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:49;:126;;;-1:-1:-1::0;52122:19:0::1;::::0;52169:1:::1;::::0;-1:-1:-1;;;;;52122:19:0::1;52114:38;8031:10:::0;52114:52:::1;::::0;-1:-1:-1;;;;;;52114:52:0::1;::::0;;;;;;-1:-1:-1;;;;;938:32:1;;;52114:52:0::1;::::0;::::1;920:51:1::0;893:18;;52114:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;52044:126;:309;;;;52191:162;52232:5;;52191:162;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;52260:10:0::1;::::0;52303:30:::1;::::0;-1:-1:-1;;8031:10:0;11834:2:1;11830:15;11826:53;52303:30:0::1;::::0;::::1;11814:66:1::0;52260:10:0;;-1:-1:-1;11896:12:1;;;-1:-1:-1;52303:30:0::1;;;;;;;;;;;;52293:41;;;;;;52191:18;:162::i;:::-;52022:386;;;::::0;-1:-1:-1;;;52022:386:0;;12121:2:1;52022:386:0::1;::::0;::::1;12103:21:1::0;12160:2;12140:18;;;12133:30;12199:29;12179:18;;;12172:57;12246:18;;52022:386:0::1;11919:351:1::0;52022:386:0::1;52419:14;52425:7;52419:5;:14::i;:::-;-1:-1:-1::0;;4157:1:0;5111:7;:22;-1:-1:-1;51662:779:0:o;35980:100::-;36034:13;36067:5;36060:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35980:100;:::o;37483:204::-;37551:7;37576:16;37584:7;37576;:16::i;:::-;37571:64;;37601:34;;-1:-1:-1;;;37601:34:0;;;;;;;;;;;37571:64;-1:-1:-1;37655:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;37655:24:0;;37483:204::o;37046:371::-;37119:13;37135:24;37151:7;37135:15;:24::i;:::-;37119:40;;37180:5;-1:-1:-1;;;;;37174:11:0;:2;-1:-1:-1;;;;;37174:11:0;;37170:48;;;37194:24;;-1:-1:-1;;;37194:24:0;;;;;;;;;;;37170:48;8031:10;-1:-1:-1;;;;;37235:21:0;;;;;;:63;;-1:-1:-1;37261:37:0;37278:5;8031:10;38109:164;:::i;37261:37::-;37260:38;37235:63;37231:138;;;37322:35;;-1:-1:-1;;;37322:35:0;;;;;;;;;;;37231:138;37381:28;37390:2;37394:7;37403:5;37381:8;:28::i;:::-;37108:309;37046:371;;:::o;57844:116::-;9300:6;;-1:-1:-1;;;;;9300:6:0;8031:10;9447:23;9439:68;;;;-1:-1:-1;;;9439:68:0;;;;;;;:::i;:::-;57922:13:::1;:30:::0;57844:116::o;38340:170::-;38474:28;38484:4;38490:2;38494:7;38474:9;:28::i;57968:96::-;9300:6;;-1:-1:-1;;;;;9300:6:0;8031:10;9447:23;9439:68;;;;-1:-1:-1;;;9439:68:0;;;;;;;:::i;:::-;58036:8:::1;:20:::0;57968:96::o;55440:969::-;9300:6;;-1:-1:-1;;;;;9300:6:0;8031:10;9447:23;9439:68;;;;-1:-1:-1;;;9439:68:0;;;;;;;:::i;:::-;55515:21:::1;55563:42;55632;55701;55496:16;55563:42:::0;55820:3:::1;55803:13;55515:21:::0;55814:2:::1;55803:13;:::i;:::-;55802:21;;;;:::i;:::-;55775:77;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55756:96;;;55871:7;55863:49;;;::::0;-1:-1:-1;;;55863:49:0;;13690:2:1;55863:49:0::1;::::0;::::1;13672:21:1::0;13729:2;13709:18;;;13702:30;13768:31;13748:18;;;13741:59;13817:18;;55863:49:0::1;13488:353:1::0;55863:49:0::1;55926:12;-1:-1:-1::0;;;;;55944:19:0;::::1;55989:3;55972:13;:8:::0;55983:2:::1;55972:13;:::i;:::-;55971:21;;;;:::i;:::-;55944:77;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55925:96;;;56040:7;56032:49;;;::::0;-1:-1:-1;;;56032:49:0;;14048:2:1;56032:49:0::1;::::0;::::1;14030:21:1::0;14087:2;14067:18;;;14060:30;14126:31;14106:18;;;14099:59;14175:18;;56032:49:0::1;13846:353:1::0;56032:49:0::1;56095:12;-1:-1:-1::0;;;;;56113:19:0;::::1;56157:3;56141:12;:8:::0;56152:1:::1;56141:12;:::i;:::-;56140:20;;;;:::i;:::-;56113:52;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56094:71;;;56184:7;56176:49;;;::::0;-1:-1:-1;;;56176:49:0;;14406:2:1;56176:49:0::1;::::0;::::1;14388:21:1::0;14445:2;14425:18;;;14418:30;14484:31;14464:18;;;14457:59;14533:18;;56176:49:0::1;14204:353:1::0;56176:49:0::1;56257:84;::::0;56239:12:::1;::::0;8031:10;;56305:21:::1;::::0;56239:12;56257:84;56239:12;56257:84;56305:21;8031:10;56257:84:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56238:103;;;56360:7;56352:49;;;::::0;-1:-1:-1;;;56352:49:0;;14764:2:1;56352:49:0::1;::::0;::::1;14746:21:1::0;14803:2;14783:18;;;14776:30;14842:31;14822:18;;;14815:59;14891:18;;56352:49:0::1;14562:353:1::0;56352:49:0::1;55485:924;;;;;;;;55440:969::o:0;52449:1072::-;4201:1;4799:7;;:19;;4791:63;;;;-1:-1:-1;;;4791:63:0;;;;;;;:::i;:::-;4201:1;4932:7;:18;52579:9:::1;::::0;-1:-1:-1;;;52579:9:0;::::1;;;:17;;52592:4;52579:17;52571:53;;;;-1:-1:-1::0;;;52571:53:0::1;;;;;;;:::i;:::-;52687:12;::::0;52677:22:::1;::::0;:7;:22:::1;:::i;:::-;52657:42:::0;::::1;52635:125;;;::::0;-1:-1:-1;;;52635:125:0;;15122:2:1;52635:125:0::1;::::0;::::1;15104:21:1::0;15161:2;15141:18;;;15134:30;15200:34;15180:18;;;15173:62;-1:-1:-1;;;15251:18:1;;;15244:31;15292:19;;52635:125:0::1;14920:397:1::0;52635:125:0::1;52776:9;52771:577;52791:20:::0;;::::1;52771:577;;;52833:16;52852:9;;52862:1;52852:12;;;;;;;:::i;:::-;;;;;;;52833:31;;52887:13;:23;52901:8;52887:23;;;;;;;;;;;;52914:1;52887:28;52879:66;;;::::0;-1:-1:-1;;;52879:66:0;;15656:2:1;52879:66:0::1;::::0;::::1;15638:21:1::0;15695:2;15675:18;;;15668:30;15734:27;15714:18;;;15707:55;15779:18;;52879:66:0::1;15454:349:1::0;52879:66:0::1;8031:10:::0;52994:12:::1;::::0;52986:39:::1;::::0;-1:-1:-1;;;52986:39:0;;::::1;::::0;::::1;738:25:1::0;;;-1:-1:-1;;;;;52986:55:0;;::::1;::::0;52994:12;;::::1;::::0;52986:29:::1;::::0;711:18:1;;52986:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;52986:55:0::1;;:245;;;-1:-1:-1::0;53075:19:0::1;::::0;53230:1:::1;::::0;-1:-1:-1;;;;;53075:19:0::1;53066:43;8031:10:::0;53066:140:::1;::::0;-1:-1:-1;;;;;;53066:140:0::1;::::0;;;;;;-1:-1:-1;;;;;16256:32:1;;;53066:140:0::1;::::0;::::1;16238:51:1::0;16305:18;;;16298:34;;;16211:18;;53066:140:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:165;52986:245;52960:334;;;::::0;-1:-1:-1;;;52960:334:0;;16545:2:1;52960:334:0::1;::::0;::::1;16527:21:1::0;16584:2;16564:18;;;16557:30;16623:29;16603:18;;;16596:57;16670:18;;52960:334:0::1;16343:351:1::0;52960:334:0::1;53309:23;::::0;;;:13:::1;:23;::::0;;;;53335:1:::1;53309:27:::0;;52813:3;::::1;::::0;::::1;:::i;:::-;;;;52771:577;;;;53358:14;53364:7;53358:5;:14::i;:::-;53404:7;53387:13;;:24;53383:131;;53445:7;53428:13;;:24;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;53383:131:0::1;::::0;-1:-1:-1;53383:131:0::1;;53501:1;53485:13;:17:::0;-1:-1:-1;;4157:1:0;5111:7;:22;-1:-1:-1;52449:1072:0:o;38581:185::-;38719:39;38736:4;38742:2;38746:7;38719:39;;;;;;;;;;;;:16;:39::i;54751:179::-;54861:7;54893:21;54907:6;54893:13;:21::i;:::-;54915:6;54893:29;;;;;;;;:::i;:::-;;;;;;;54886:36;;54751:179;;;;:::o;57032:88::-;9300:6;;-1:-1:-1;;;;;9300:6:0;8031:10;9447:23;9439:68;;;;-1:-1:-1;;;9439:68:0;;;;;;;:::i;:::-;57102:10:::1;::::0;;-1:-1:-1;;;;57088:24:0;::::1;-1:-1:-1::0;;;57102:10:0;;;::::1;;;57101:11;57088:24:::0;;::::1;;::::0;;57032:88::o;56927:97::-;9300:6;;-1:-1:-1;;;;;9300:6:0;8031:10;9447:23;9439:68;;;;-1:-1:-1;;;9439:68:0;;;;;;;:::i;:::-;57003:13:::1;::::0;;-1:-1:-1;;;;56986:30:0;::::1;-1:-1:-1::0;;;57003:13:0;;;::::1;;;57002:14;56986:30:::0;;::::1;;::::0;;56927:97::o;57363:106::-;9300:6;;-1:-1:-1;;;;;9300:6:0;8031:10;9447:23;9439:68;;;;-1:-1:-1;;;9439:68:0;;;;;;;:::i;:::-;57440:21:::1;:7;57450:11:::0;;57440:21:::1;:::i;35789:124::-:0;35853:7;35880:20;35892:7;35880:11;:20::i;:::-;:25;;35789:124;-1:-1:-1;;35789:124:0:o;54212:531::-;9300:6;;-1:-1:-1;;;;;9300:6:0;8031:10;9447:23;9439:68;;;;-1:-1:-1;;;9439:68:0;;;;;;;:::i;:::-;4201:1:::1;4799:7;;:19;;4791:63;;;;-1:-1:-1::0;;;4791:63:0::1;;;;;;;:::i;:::-;4201:1;4932:7;:18:::0;54366:30;;::::2;54358:70;;;::::0;-1:-1:-1;;;54358:70:0;;17171:2:1;54358:70:0::2;::::0;::::2;17153:21:1::0;17210:2;17190:18;;;17183:30;17249:29;17229:18;;;17222:57;17296:18;;54358:70:0::2;16969:351:1::0;54358:70:0::2;54439:17;::::0;54467:139:::2;54487:15:::0;;::::2;54467:139;;;54524:31;54534:4;;54539:1;54534:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;54543:8;;54552:1;54543:11;;;;;;;:::i;:::-;;;;;;;54524:9;:31::i;:::-;54583:8;;54592:1;54583:11;;;;;;;:::i;:::-;;;;;;;54570:24;;;;;:::i;:::-;::::0;-1:-1:-1;54504:3:0;::::2;::::0;::::2;:::i;:::-;;;;54467:139;;;;54632:9;54620:8;;:21;54616:120;;54670:9;54658:8;;:21;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;54616:120:0::2;::::0;-1:-1:-1;54616:120:0::2;;54723:1;54712:8;:12:::0;54616:120:::2;-1:-1:-1::0;;4157:1:0::1;5111:7;:22:::0;-1:-1:-1;;;54212:531:0:o;51071:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32991:206::-;33055:7;-1:-1:-1;;;;;33079:19:0;;33075:60;;33107:28;;-1:-1:-1;;;33107:28:0;;;;;;;;;;;33075:60;-1:-1:-1;;;;;;33161:19:0;;;;;:12;:19;;;;;:27;-1:-1:-1;;;;;33161:27:0;;32991:206::o;57628:96::-;9300:6;;-1:-1:-1;;;;;9300:6:0;8031:10;9447:23;9439:68;;;;-1:-1:-1;;;9439:68:0;;;;;;;:::i;:::-;57696:8:::1;:20:::0;57628:96::o;9878:103::-;9300:6;;-1:-1:-1;;;;;9300:6:0;8031:10;9447:23;9439:68;;;;-1:-1:-1;;;9439:68:0;;;;;;;:::i;:::-;9943:30:::1;9970:1;9943:18;:30::i;:::-;9878:103::o:0;57732:104::-;9300:6;;-1:-1:-1;;;;;9300:6:0;8031:10;9447:23;9439:68;;;;-1:-1:-1;;;9439:68:0;;;;;;;:::i;:::-;57804:10:::1;:24:::0;57732:104::o;58200:163::-;9300:6;;-1:-1:-1;;;;;9300:6:0;8031:10;9447:23;9439:68;;;;-1:-1:-1;;;9439:68:0;;;;;;;:::i;:::-;58313:19:::1;:42:::0;;-1:-1:-1;;;;;;58313:42:0::1;-1:-1:-1::0;;;;;58313:42:0;;;::::1;::::0;;;::::1;::::0;;58200:163::o;54938:494::-;55025:16;55059:19;55081:17;55091:6;55081:9;:17::i;:::-;55059:39;;55109:26;55152:11;-1:-1:-1;;;;;55138:26:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;55138:26:0;;55109:55;;55175:19;55214:9;55209:189;32519:12;;32327:7;32503:13;:28;55229:1;:17;55209:189;;;55286:6;-1:-1:-1;;;;;55272:20:0;:10;55280:1;55272:7;:10::i;:::-;-1:-1:-1;;;;;55272:20:0;;55268:119;;;55338:1;55313:9;55323:11;55313:22;;;;;;;;:::i;:::-;;;;;;;;;;:26;55358:13;;;;:::i;:::-;;;;55268:119;55248:3;;;;:::i;:::-;;;;55209:189;;;-1:-1:-1;55415:9:0;;54938:494;-1:-1:-1;;;;54938:494:0:o;36149:104::-;36205:13;36238:7;36231:14;;;;;:::i;57128:84::-;9300:6;;-1:-1:-1;;;;;9300:6:0;8031:10;9447:23;9439:68;;;;-1:-1:-1;;;9439:68:0;;;;;;;:::i;:::-;57195:9:::1;::::0;;-1:-1:-1;;;;57182:22:0;::::1;-1:-1:-1::0;;;57195:9:0;;;::::1;;;57194:10;57182:22:::0;;::::1;;::::0;;57128:84::o;51345:309::-;4201:1;4799:7;;:19;;4791:63;;;;-1:-1:-1;;;4791:63:0;;;;;;;:::i;:::-;4201:1;4932:7;:18;51425:10:::1;::::0;-1:-1:-1;;;51425:10:0;::::1;;;:18;;51439:4;51425:18;51417:54;;;;-1:-1:-1::0;;;51417:54:0::1;;;;;;;:::i;:::-;51514:7;51503:8;;:18;;;;:::i;:::-;51490:9;:31;51482:71;;;::::0;-1:-1:-1;;;51482:71:0;;11342:2:1;51482:71:0::1;::::0;::::1;11324:21:1::0;11381:2;11361:18;;;11354:30;11420:29;11400:18;;;11393:57;11467:18;;51482:71:0::1;11140:351:1::0;51482:71:0::1;51583:9;;51572:7;:20;;51564:57;;;::::0;-1:-1:-1;;;51564:57:0;;10684:2:1;51564:57:0::1;::::0;::::1;10666:21:1::0;10723:2;10703:18;;;10696:30;-1:-1:-1;;;10742:18:1;;;10735:54;10806:18;;51564:57:0::1;10482:348:1::0;51564:57:0::1;51632:14;51638:7;51632:5;:14::i;:::-;-1:-1:-1::0;4157:1:0;5111:7;:22;51345:309::o;37759:279::-;-1:-1:-1;;;;;37850:24:0;;8031:10;37850:24;37846:54;;;37883:17;;-1:-1:-1;;;37883:17:0;;;;;;;;;;;37846:54;8031:10;37913:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;37913:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;37913:53:0;;;;;;;;;;37982:48;;540:41:1;;;37913:42:0;;8031:10;37982:48;;513:18:1;37982:48:0;;;;;;;37759:279;;:::o;38837:342::-;39004:28;39014:4;39020:2;39024:7;39004:9;:28::i;:::-;39048:48;39071:4;39077:2;39081:7;39090:5;39048:22;:48::i;:::-;39043:129;;39120:40;;-1:-1:-1;;;39120:40:0;;;;;;;;;;;39043:129;38837:342;;;;:::o;58371:112::-;9300:6;;-1:-1:-1;;;;;9300:6:0;8031:10;9447:23;9439:68;;;;-1:-1:-1;;;9439:68:0;;;;;;;:::i;:::-;58447:12:::1;:28:::0;;-1:-1:-1;;;;;;58447:28:0::1;-1:-1:-1::0;;;;;58447:28:0;;;::::1;::::0;;;::::1;::::0;;58371:112::o;57220:135::-;9300:6;;-1:-1:-1;;;;;9300:6:0;8031:10;9447:23;9439:68;;;;-1:-1:-1;;;9439:68:0;;;;;;;:::i;:::-;57272:13:::1;:20:::0;;-1:-1:-1;;;;57331:16:0;-1:-1:-1;;;57331:16:0;;;57220:135::o;36324:318::-;36397:13;36428:16;36436:7;36428;:16::i;:::-;36423:59;;36453:29;;-1:-1:-1;;;36453:29:0;;;;;;;;;;;36423:59;36495:21;36519:10;:8;:10::i;:::-;36495:34;;36553:7;36547:21;36572:1;36547:26;;:87;;;;;;;;;;;;;;;;;36600:7;36609:18;:7;:16;:18::i;:::-;36583:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;36547:87;36540:94;36324:318;-1:-1:-1;;;36324:318:0:o;53849:355::-;53955:16;53989:24;54030:9;-1:-1:-1;;;;;54016:31:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54016:31:0;;53989:58;;54063:9;54058:114;54078:20;;;54058:114;;;54133:13;:27;54147:9;;54157:1;54147:12;;;;;;;:::i;:::-;;;;;;;54133:27;;;;;;;;;;;;54120:7;54128:1;54120:10;;;;;;;;:::i;:::-;;;;;;;;;;:40;54100:3;;;;:::i;:::-;;;;54058:114;;;-1:-1:-1;54189:7:0;53849:355;-1:-1:-1;;;53849:355:0:o;58607:130::-;58651:13;58708:7;58691:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;58677:52;;58607:130;:::o;10136:201::-;9300:6;;-1:-1:-1;;;;;9300:6:0;8031:10;9447:23;9439:68;;;;-1:-1:-1;;;9439:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10225:22:0;::::1;10217:73;;;::::0;-1:-1:-1;;;10217:73:0;;19623:2:1;10217:73:0::1;::::0;::::1;19605:21:1::0;19662:2;19642:18;;;19635:30;19701:34;19681:18;;;19674:62;-1:-1:-1;;;19752:18:1;;;19745:36;19798:19;;10217:73:0::1;19421:402:1::0;10217:73:0::1;10301:28;10320:8;10301:18;:28::i;:::-;10136:201:::0;:::o;58072:120::-;9300:6;;-1:-1:-1;;;;;9300:6:0;8031:10;9447:23;9439:68;;;;-1:-1:-1;;;9439:68:0;;;;;;;:::i;:::-;58152:14:::1;:32:::0;;-1:-1:-1;;;;;;58152:32:0::1;-1:-1:-1::0;;;;;58152:32:0;;;::::1;::::0;;;::::1;::::0;;58072:120::o;57477:143::-;9300:6;;-1:-1:-1;;;;;9300:6:0;8031:10;9447:23;9439:68;;;;-1:-1:-1;;;9439:68:0;;;;;;;:::i;:::-;57561:8:::1;:20:::0;;;;57592:8:::1;:20:::0;57477:143::o;923:190::-;1048:4;1101;1072:25;1085:5;1092:4;1072:12;:25::i;:::-;:33;;923:190;-1:-1:-1;;;;923:190:0:o;53529:312::-;53589:9;8031:10;53589:25;53581:64;;;;-1:-1:-1;;;53581:64:0;;20030:2:1;53581:64:0;;;20012:21:1;20069:2;20049:18;;;20042:30;20108:28;20088:18;;;20081:56;20154:18;;53581:64:0;19828:350:1;53581:64:0;53728:13;;53717:8;;53706;;:19;;;;:::i;:::-;:35;;;;:::i;:::-;53694:7;53678:13;32519:12;;32327:7;32503:13;:28;;32283:267;53678:13;:23;;;;:::i;:::-;:64;;53656:134;;;;-1:-1:-1;;;53656:134:0;;20385:2:1;53656:134:0;;;20367:21:1;20424:2;20404:18;;;20397:30;-1:-1:-1;;;20443:18:1;;;20436:50;20503:18;;53656:134:0;20183:344:1;53656:134:0;53801:32;8031:10;53825:7;53801:9;:32::i;39434:144::-;39491:4;39525:13;;39515:7;:23;:55;;;;-1:-1:-1;;39543:20:0;;;;:11;:20;;;;;:27;-1:-1:-1;;;39543:27:0;;;;39542:28;;39434:144::o;46639:196::-;46754:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;46754:29:0;-1:-1:-1;;;;;46754:29:0;;;;;;;;;46799:28;;46754:24;;46799:28;;;;;;;46639:196;;;:::o;42141:2112::-;42256:35;42294:20;42306:7;42294:11;:20::i;:::-;42369:18;;42256:58;;-1:-1:-1;42327:22:0;;-1:-1:-1;;;;;42353:34:0;8031:10;-1:-1:-1;;;;;42353:34:0;;:101;;;-1:-1:-1;42421:18:0;;42404:50;;8031:10;38109:164;:::i;42404:50::-;42353:154;;;-1:-1:-1;8031:10:0;42471:20;42483:7;42471:11;:20::i;:::-;-1:-1:-1;;;;;42471:36:0;;42353:154;42327:181;;42526:17;42521:66;;42552:35;;-1:-1:-1;;;42552:35:0;;;;;;;;;;;42521:66;42624:4;-1:-1:-1;;;;;42602:26:0;:13;:18;;;-1:-1:-1;;;;;42602:26:0;;42598:67;;42637:28;;-1:-1:-1;;;42637:28:0;;;;;;;;;;;42598:67;-1:-1:-1;;;;;42680:16:0;;42676:52;;42705:23;;-1:-1:-1;;;42705:23:0;;;;;;;;;;;42676:52;42741:43;42763:4;42769:2;42773:7;42782:1;42741:21;:43::i;:::-;42849:49;42866:1;42870:7;42879:13;:18;;;42849:8;:49::i;:::-;-1:-1:-1;;;;;43194:18:0;;;;;;;:12;:18;;;;;;;;:31;;-1:-1:-1;;43194:31:0;;;-1:-1:-1;;;;;43194:31:0;;;-1:-1:-1;;43194:31:0;;;;;;;43240:16;;;;;;;;;:29;;;;;;;;-1:-1:-1;43240:29:0;;;;;;;;;;;43286:20;;;:11;:20;;;;;;:30;;-1:-1:-1;;;;;;43331:61:0;;;;-1:-1:-1;;;43376:15:0;43331:61;;;;;;;;;;;43666:11;;;43696:24;;;;;:29;43666:11;;43696:29;43692:445;;43921:13;;43907:11;:27;43903:219;;;43991:18;;;43959:24;;;:11;:24;;;;;;;;:50;;44074:28;;;;-1:-1:-1;;;;;44032:70:0;-1:-1:-1;;;44032:70:0;-1:-1:-1;;;;;;44032:70:0;;;-1:-1:-1;;;;;43959:50:0;;;44032:70;;;;;;;43903:219;43169:979;44184:7;44180:2;-1:-1:-1;;;;;44165:27:0;44174:4;-1:-1:-1;;;;;44165:27:0;;;;;;;;;;;44203:42;42245:2008;;42141:2112;;;:::o;34646:1081::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;34812:13:0;;34756:7;;34805:20;;34801:859;;;34846:31;34880:17;;;:11;:17;;;;;;;;;34846:51;;;;;;;;;-1:-1:-1;;;;;34846:51:0;;;;-1:-1:-1;;;34846:51:0;;-1:-1:-1;;;;;34846:51:0;;;;;;;;-1:-1:-1;;;34846:51:0;;;;;;;;;;;;;;34916:729;;34966:14;;-1:-1:-1;;;;;34966:28:0;;34962:101;;35030:9;34646:1081;-1:-1:-1;;;34646:1081:0:o;34962:101::-;-1:-1:-1;;;35405:6:0;35450:17;;;;:11;:17;;;;;;;;;35438:29;;;;;;;;;-1:-1:-1;;;;;35438:29:0;;;;;-1:-1:-1;;;35438:29:0;;-1:-1:-1;;;;;35438:29:0;;;;;;;;-1:-1:-1;;;35438:29:0;;;;;;;;;;;;;35498:28;35494:109;;35566:9;34646:1081;-1:-1:-1;;;34646:1081:0:o;35494:109::-;35365:261;;;34827:833;34801:859;35688:31;;-1:-1:-1;;;35688:31:0;;;;;;;;;;;39586:104;39655:27;39665:2;39669:8;39655:27;;;;;;;;;;;;:9;:27::i;:::-;39586:104;;:::o;10497:191::-;10590:6;;;-1:-1:-1;;;;;10607:17:0;;;-1:-1:-1;;;;;;10607:17:0;;;;;;;10640:40;;10590:6;;;10607:17;10590:6;;10640:40;;10571:16;;10640:40;10560:128;10497:191;:::o;47400:790::-;47555:4;-1:-1:-1;;;;;47576:13:0;;12223:19;:23;47572:611;;47612:72;;-1:-1:-1;;;47612:72:0;;-1:-1:-1;;;;;47612:36:0;;;;;:72;;8031:10;;47663:4;;47669:7;;47678:5;;47612:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47612:72:0;;;;;;;;-1:-1:-1;;47612:72:0;;;;;;;;;;;;:::i;:::-;;;47608:520;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47858:13:0;;47854:259;;47908:40;;-1:-1:-1;;;47908:40:0;;;;;;;;;;;47854:259;48063:6;48057:13;48048:6;48044:2;48040:15;48033:38;47608:520;-1:-1:-1;;;;;;47735:55:0;-1:-1:-1;;;47735:55:0;;-1:-1:-1;47728:62:0;;47572:611;-1:-1:-1;48167:4:0;47572:611;47400:790;;;;;;:::o;58491:108::-;58551:13;58584:7;58577:14;;;;;:::i;5513:723::-;5569:13;5790:10;5786:53;;-1:-1:-1;;5817:10:0;;;;;;;;;;;;-1:-1:-1;;;5817:10:0;;;;;5513:723::o;5786:53::-;5864:5;5849:12;5905:78;5912:9;;5905:78;;5938:8;;;;:::i;:::-;;-1:-1:-1;5961:10:0;;-1:-1:-1;5969:2:0;5961:10;;:::i;:::-;;;5905:78;;;5993:19;6025:6;-1:-1:-1;;;;;6015:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6015:17:0;;5993:39;;6043:154;6050:10;;6043:154;;6077:11;6087:1;6077:11;;:::i;:::-;;-1:-1:-1;6146:10:0;6154:2;6146:5;:10;:::i;:::-;6133:24;;:2;:24;:::i;:::-;6120:39;;6103:6;6110;6103:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;6103:56:0;;;;;;;;-1:-1:-1;6174:11:0;6183:2;6174:11;;:::i;:::-;;;6043:154;;1475:675;1558:7;1601:4;1558:7;1616:497;1640:5;:12;1636:1;:16;1616:497;;;1674:20;1697:5;1703:1;1697:8;;;;;;;;:::i;:::-;;;;;;;1674:31;;1740:12;1724;:28;1720:382;;2226:13;2276:15;;;2312:4;2305:15;;;2359:4;2343:21;;1852:57;;1720:382;;;2226:13;2276:15;;;2312:4;2305:15;;;2359:4;2343:21;;2029:57;;1720:382;-1:-1:-1;1654:3:0;;;;:::i;:::-;;;;1616:497;;56417:502;56670:14;;-1:-1:-1;;;;;56670:14:0;:28;;;;:50;;-1:-1:-1;;;;;;56702:18:0;;;;56670:50;56666:246;;;56753:14;;56737:163;;-1:-1:-1;;;56737:163:0;;-1:-1:-1;;;;;21684:15:1;;;56737:163:0;;;21666:34:1;21736:15;;;21716:18;;;21709:43;21768:18;;;21761:34;;;21811:18;;;21804:34;;;56753:14:0;;;;56737:46;;21600:19:1;;56737:163:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40053;40176:32;40182:2;40186:8;40196:5;40203:4;40614:20;40637:13;-1:-1:-1;;;;;40665:16:0;;40661:48;;40690:19;;-1:-1:-1;;;40690:19:0;;;;;;;;;;;40661:48;40724:13;40720:44;;40746:18;;-1:-1:-1;;;40746:18:0;;;;;;;;;;;40720:44;40777:61;40807:1;40811:2;40815:12;40829:8;40777:21;:61::i;:::-;-1:-1:-1;;;;;41115:16:0;;;;;;:12;:16;;;;;;;;:44;;-1:-1:-1;;41174:49:0;;-1:-1:-1;;;;;41115:44:0;;;;;;;41174:49;;;;-1:-1:-1;;41115:44:0;;;;;;41174:49;;;;;;;;;;;;;;;;41240:25;;;:11;:25;;;;;:35;;-1:-1:-1;;;;;;41290:66:0;;;;-1:-1:-1;;;41340:15:0;41290:66;;;;;;;;;;;41240:25;;41425:328;41445:8;41441:1;:12;41425:328;;;41484:38;;41509:12;;-1:-1:-1;;;;;41484:38:0;;;41501:1;;41484:38;;41501:1;;41484:38;41545:4;:68;;;;;41554:59;41585:1;41589:2;41593:12;41607:5;41554:22;:59::i;:::-;41553:60;41545:68;41541:164;;;41645:40;;-1:-1:-1;;;41645:40:0;;;;;;;;;;;41541:164;41723:14;;;;;41455:3;41425:328;;;-1:-1:-1;41769:13:0;:28;41819:60;38837:342;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;982:367::-;1045:8;1055:6;1109:3;1102:4;1094:6;1090:17;1086:27;1076:55;;1127:1;1124;1117:12;1076:55;-1:-1:-1;1150:20:1;;-1:-1:-1;;;;;1182:30:1;;1179:50;;;1225:1;1222;1215:12;1179:50;1262:4;1254:6;1250:17;1238:29;;1322:3;1315:4;1305:6;1302:1;1298:14;1290:6;1286:27;1282:38;1279:47;1276:67;;;1339:1;1336;1329:12;1276:67;982:367;;;;;:::o;1354:505::-;1449:6;1457;1465;1518:2;1506:9;1497:7;1493:23;1489:32;1486:52;;;1534:1;1531;1524:12;1486:52;1570:9;1557:23;1547:33;;1631:2;1620:9;1616:18;1603:32;-1:-1:-1;;;;;1650:6:1;1647:30;1644:50;;;1690:1;1687;1680:12;1644:50;1729:70;1791:7;1782:6;1771:9;1767:22;1729:70;:::i;:::-;1354:505;;1818:8;;-1:-1:-1;1703:96:1;;-1:-1:-1;;;;1354:505:1:o;1864:258::-;1936:1;1946:113;1960:6;1957:1;1954:13;1946:113;;;2036:11;;;2030:18;2017:11;;;2010:39;1982:2;1975:10;1946:113;;;2077:6;2074:1;2071:13;2068:48;;;-1:-1:-1;;2112:1:1;2094:16;;2087:27;1864:258::o;2127:::-;2169:3;2207:5;2201:12;2234:6;2229:3;2222:19;2250:63;2306:6;2299:4;2294:3;2290:14;2283:4;2276:5;2272:16;2250:63;:::i;:::-;2367:2;2346:15;-1:-1:-1;;2342:29:1;2333:39;;;;2374:4;2329:50;;2127:258;-1:-1:-1;;2127:258:1:o;2390:220::-;2539:2;2528:9;2521:21;2502:4;2559:45;2600:2;2589:9;2585:18;2577:6;2559:45;:::i;2615:180::-;2674:6;2727:2;2715:9;2706:7;2702:23;2698:32;2695:52;;;2743:1;2740;2733:12;2695:52;-1:-1:-1;2766:23:1;;2615:180;-1:-1:-1;2615:180:1:o;2800:131::-;-1:-1:-1;;;;;2875:31:1;;2865:42;;2855:70;;2921:1;2918;2911:12;2936:315;3004:6;3012;3065:2;3053:9;3044:7;3040:23;3036:32;3033:52;;;3081:1;3078;3071:12;3033:52;3120:9;3107:23;3139:31;3164:5;3139:31;:::i;:::-;3189:5;3241:2;3226:18;;;;3213:32;;-1:-1:-1;;;2936:315:1:o;3256:456::-;3333:6;3341;3349;3402:2;3390:9;3381:7;3377:23;3373:32;3370:52;;;3418:1;3415;3408:12;3370:52;3457:9;3444:23;3476:31;3501:5;3476:31;:::i;:::-;3526:5;-1:-1:-1;3583:2:1;3568:18;;3555:32;3596:33;3555:32;3596:33;:::i;:::-;3256:456;;3648:7;;-1:-1:-1;;;3702:2:1;3687:18;;;;3674:32;;3256:456::o;4409:592::-;4480:6;4488;4541:2;4529:9;4520:7;4516:23;4512:32;4509:52;;;4557:1;4554;4547:12;4509:52;4597:9;4584:23;-1:-1:-1;;;;;4667:2:1;4659:6;4656:14;4653:34;;;4683:1;4680;4673:12;4653:34;4721:6;4710:9;4706:22;4696:32;;4766:7;4759:4;4755:2;4751:13;4747:27;4737:55;;4788:1;4785;4778:12;4737:55;4828:2;4815:16;4854:2;4846:6;4843:14;4840:34;;;4870:1;4867;4860:12;4840:34;4915:7;4910:2;4901:6;4897:2;4893:15;4889:24;4886:37;4883:57;;;4936:1;4933;4926:12;4883:57;4967:2;4959:11;;;;;4989:6;;-1:-1:-1;4409:592:1;;-1:-1:-1;;;;4409:592:1:o;5006:773::-;5128:6;5136;5144;5152;5205:2;5193:9;5184:7;5180:23;5176:32;5173:52;;;5221:1;5218;5211:12;5173:52;5261:9;5248:23;-1:-1:-1;;;;;5331:2:1;5323:6;5320:14;5317:34;;;5347:1;5344;5337:12;5317:34;5386:70;5448:7;5439:6;5428:9;5424:22;5386:70;:::i;:::-;5475:8;;-1:-1:-1;5360:96:1;-1:-1:-1;5563:2:1;5548:18;;5535:32;;-1:-1:-1;5579:16:1;;;5576:36;;;5608:1;5605;5598:12;5576:36;;5647:72;5711:7;5700:8;5689:9;5685:24;5647:72;:::i;:::-;5006:773;;;;-1:-1:-1;5738:8:1;-1:-1:-1;;;;5006:773:1:o;5784:247::-;5843:6;5896:2;5884:9;5875:7;5871:23;5867:32;5864:52;;;5912:1;5909;5902:12;5864:52;5951:9;5938:23;5970:31;5995:5;5970:31;:::i;6221:632::-;6392:2;6444:21;;;6514:13;;6417:18;;;6536:22;;;6363:4;;6392:2;6615:15;;;;6589:2;6574:18;;;6363:4;6658:169;6672:6;6669:1;6666:13;6658:169;;;6733:13;;6721:26;;6802:15;;;;6767:12;;;;6694:1;6687:9;6658:169;;;-1:-1:-1;6844:3:1;;6221:632;-1:-1:-1;;;;;;6221:632:1:o;6858:416::-;6923:6;6931;6984:2;6972:9;6963:7;6959:23;6955:32;6952:52;;;7000:1;6997;6990:12;6952:52;7039:9;7026:23;7058:31;7083:5;7058:31;:::i;:::-;7108:5;-1:-1:-1;7165:2:1;7150:18;;7137:32;7207:15;;7200:23;7188:36;;7178:64;;7238:1;7235;7228:12;7178:64;7261:7;7251:17;;;6858:416;;;;;:::o;7279:127::-;7340:10;7335:3;7331:20;7328:1;7321:31;7371:4;7368:1;7361:15;7395:4;7392:1;7385:15;7411:1266;7506:6;7514;7522;7530;7583:3;7571:9;7562:7;7558:23;7554:33;7551:53;;;7600:1;7597;7590:12;7551:53;7639:9;7626:23;7658:31;7683:5;7658:31;:::i;:::-;7708:5;-1:-1:-1;7765:2:1;7750:18;;7737:32;7778:33;7737:32;7778:33;:::i;:::-;7830:7;-1:-1:-1;7884:2:1;7869:18;;7856:32;;-1:-1:-1;7939:2:1;7924:18;;7911:32;-1:-1:-1;;;;;7992:14:1;;;7989:34;;;8019:1;8016;8009:12;7989:34;8057:6;8046:9;8042:22;8032:32;;8102:7;8095:4;8091:2;8087:13;8083:27;8073:55;;8124:1;8121;8114:12;8073:55;8160:2;8147:16;8182:2;8178;8175:10;8172:36;;;8188:18;;:::i;:::-;8263:2;8257:9;8231:2;8317:13;;-1:-1:-1;;8313:22:1;;;8337:2;8309:31;8305:40;8293:53;;;8361:18;;;8381:22;;;8358:46;8355:72;;;8407:18;;:::i;:::-;8447:10;8443:2;8436:22;8482:2;8474:6;8467:18;8522:7;8517:2;8512;8508;8504:11;8500:20;8497:33;8494:53;;;8543:1;8540;8533:12;8494:53;8599:2;8594;8590;8586:11;8581:2;8573:6;8569:15;8556:46;8644:1;8639:2;8634;8626:6;8622:15;8618:24;8611:35;8665:6;8655:16;;;;;;;7411:1266;;;;;;;:::o;8682:437::-;8768:6;8776;8829:2;8817:9;8808:7;8804:23;8800:32;8797:52;;;8845:1;8842;8835:12;8797:52;8885:9;8872:23;-1:-1:-1;;;;;8910:6:1;8907:30;8904:50;;;8950:1;8947;8940:12;8904:50;8989:70;9051:7;9042:6;9031:9;9027:22;8989:70;:::i;:::-;9078:8;;8963:96;;-1:-1:-1;8682:437:1;-1:-1:-1;;;;8682:437:1:o;9124:388::-;9192:6;9200;9253:2;9241:9;9232:7;9228:23;9224:32;9221:52;;;9269:1;9266;9259:12;9221:52;9308:9;9295:23;9327:31;9352:5;9327:31;:::i;:::-;9377:5;-1:-1:-1;9434:2:1;9419:18;;9406:32;9447:33;9406:32;9447:33;:::i;9517:248::-;9585:6;9593;9646:2;9634:9;9625:7;9621:23;9617:32;9614:52;;;9662:1;9659;9652:12;9614:52;-1:-1:-1;;9685:23:1;;;9755:2;9740:18;;;9727:32;;-1:-1:-1;9517:248:1:o;9770:355::-;9972:2;9954:21;;;10011:2;9991:18;;;9984:30;10050:33;10045:2;10030:18;;10023:61;10116:2;10101:18;;9770:355::o;10130:347::-;10332:2;10314:21;;;10371:2;10351:18;;;10344:30;10410:25;10405:2;10390:18;;10383:53;10468:2;10453:18;;10130:347::o;10835:127::-;10896:10;10891:3;10887:20;10884:1;10877:31;10927:4;10924:1;10917:15;10951:4;10948:1;10941:15;10967:168;11007:7;11073:1;11069;11065:6;11061:14;11058:1;11055:21;11050:1;11043:9;11036:17;11032:45;11029:71;;;11080:18;;:::i;:::-;-1:-1:-1;11120:9:1;;10967:168::o;11496:184::-;11566:6;11619:2;11607:9;11598:7;11594:23;11590:32;11587:52;;;11635:1;11632;11625:12;11587:52;-1:-1:-1;11658:16:1;;11496:184;-1:-1:-1;11496:184:1:o;12275:380::-;12354:1;12350:12;;;;12397;;;12418:61;;12472:4;12464:6;12460:17;12450:27;;12418:61;12525:2;12517:6;12514:14;12494:18;12491:38;12488:161;;;12571:10;12566:3;12562:20;12559:1;12552:31;12606:4;12603:1;12596:15;12634:4;12631:1;12624:15;12488:161;;12275:380;;;:::o;12660:356::-;12862:2;12844:21;;;12881:18;;;12874:30;12940:34;12935:2;12920:18;;12913:62;13007:2;12992:18;;12660:356::o;13021:127::-;13082:10;13077:3;13073:20;13070:1;13063:31;13113:4;13110:1;13103:15;13137:4;13134:1;13127:15;13153:120;13193:1;13219;13209:35;;13224:18;;:::i;:::-;-1:-1:-1;13258:9:1;;13153:120::o;15322:127::-;15383:10;15378:3;15374:20;15371:1;15364:31;15414:4;15411:1;15404:15;15438:4;15435:1;15428:15;15808:251;15878:6;15931:2;15919:9;15910:7;15906:23;15902:32;15899:52;;;15947:1;15944;15937:12;15899:52;15979:9;15973:16;15998:31;16023:5;15998:31;:::i;16699:135::-;16738:3;-1:-1:-1;;16759:17:1;;16756:43;;;16779:18;;:::i;:::-;-1:-1:-1;16826:1:1;16815:13;;16699:135::o;16839:125::-;16879:4;16907:1;16904;16901:8;16898:34;;;16912:18;;:::i;:::-;-1:-1:-1;16949:9:1;;16839:125::o;17325:128::-;17365:3;17396:1;17392:6;17389:1;17386:13;17383:39;;;17402:18;;:::i;:::-;-1:-1:-1;17438:9:1;;17325:128::o;17458:470::-;17637:3;17675:6;17669:13;17691:53;17737:6;17732:3;17725:4;17717:6;17713:17;17691:53;:::i;:::-;17807:13;;17766:16;;;;17829:57;17807:13;17766:16;17863:4;17851:17;;17829:57;:::i;:::-;17902:20;;17458:470;-1:-1:-1;;;;17458:470:1:o;18185:1231::-;18414:3;18443:1;18476:6;18470:13;18506:3;18528:1;18556:9;18552:2;18548:18;18538:28;;18616:2;18605:9;18601:18;18638;18628:61;;18682:4;18674:6;18670:17;18660:27;;18628:61;18708:2;18756;18748:6;18745:14;18725:18;18722:38;18719:165;;;-1:-1:-1;;;18783:33:1;;18839:4;18836:1;18829:15;18869:4;18790:3;18857:17;18719:165;18900:18;18927:104;;;;19045:1;19040:320;;;;18893:467;;18927:104;-1:-1:-1;;18960:24:1;;18948:37;;19005:16;;;;-1:-1:-1;18927:104:1;;19040:320;18006:1;17999:14;;;18043:4;18030:18;;19135:1;19149:165;19163:6;19160:1;19157:13;19149:165;;;19241:14;;19228:11;;;19221:35;19284:16;;;;19178:10;;19149:165;;;19153:3;;19343:6;19338:3;19334:16;19327:23;;18893:467;;;;;;;19376:34;19406:3;-1:-1:-1;;;18124:23:1;;18172:1;18163:11;;18059:121;20532:489;-1:-1:-1;;;;;20801:15:1;;;20783:34;;20853:15;;20848:2;20833:18;;20826:43;20900:2;20885:18;;20878:34;;;20948:3;20943:2;20928:18;;20921:31;;;20726:4;;20969:46;;20995:19;;20987:6;20969:46;:::i;:::-;20961:54;20532:489;-1:-1:-1;;;;;;20532:489:1:o;21026:249::-;21095:6;21148:2;21136:9;21127:7;21123:23;21119:32;21116:52;;;21164:1;21161;21154:12;21116:52;21196:9;21190:16;21215:30;21239:5;21215:30;:::i;21280:112::-;21312:1;21338;21328:35;;21343:18;;:::i;:::-;-1:-1:-1;21377:9:1;;21280:112::o
Swarm Source
ipfs://04155ec517741cd31dd754b5072783af6864537e07f932c01acd492aa26b4f90
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.