Token NFT
Overview ERC-721
Total Supply:
1 NFT
Holders:
1 addresses
Transfers:
-
Contract:
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
NFT
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-10-10 */ // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Tree 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. * * WARNING: You should avoid using leaf values that are 64 bytes long prior to * hashing, or use a hash function other than keccak256 for hashing leaves. * This is because the concatenation of a sorted pair of internal nodes in * the merkle tree could be reinterpreted as a leaf value. */ 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 Calldata version of {verify} * * _Available since v4.7._ */ function verifyCalldata( bytes32[] calldata proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProofCalldata(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merkle 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++) { computedHash = _hashPair(computedHash, proof[i]); } return computedHash; } /** * @dev Calldata version of {processProof} * * _Available since v4.7._ */ function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { computedHash = _hashPair(computedHash, proof[i]); } return computedHash; } /** * @dev Returns true if the `leaves` can be proved to be a part of a Merkle tree defined by * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}. * * _Available since v4.7._ */ function multiProofVerify( bytes32[] memory proof, bool[] memory proofFlags, bytes32 root, bytes32[] memory leaves ) internal pure returns (bool) { return processMultiProof(proof, proofFlags, leaves) == root; } /** * @dev Calldata version of {multiProofVerify} * * _Available since v4.7._ */ function multiProofVerifyCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32 root, bytes32[] memory leaves ) internal pure returns (bool) { return processMultiProofCalldata(proof, proofFlags, leaves) == root; } /** * @dev Returns the root of a tree reconstructed from `leaves` and the sibling nodes in `proof`, * consuming from one or the other at each step according to the instructions given by * `proofFlags`. * * _Available since v4.7._ */ function processMultiProof( bytes32[] memory proof, bool[] memory proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of // the merkle tree. uint256 leavesLen = leaves.length; uint256 totalHashes = proofFlags.length; // Check proof validity. require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof"); // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". bytes32[] memory hashes = new bytes32[](totalHashes); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; // At each step, we compute the next hash using two values: // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we // get the next hash. // - depending on the flag, either another value for the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < totalHashes; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++]; hashes[i] = _hashPair(a, b); } if (totalHashes > 0) { return hashes[totalHashes - 1]; } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } /** * @dev Calldata version of {processMultiProof} * * _Available since v4.7._ */ function processMultiProofCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of // the merkle tree. uint256 leavesLen = leaves.length; uint256 totalHashes = proofFlags.length; // Check proof validity. require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof"); // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". bytes32[] memory hashes = new bytes32[](totalHashes); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; // At each step, we compute the next hash using two values: // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we // get the next hash. // - depending on the flag, either another value for the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < totalHashes; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++]; hashes[i] = _hashPair(a, b); } if (totalHashes > 0) { return hashes[totalHashes - 1]; } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) { return a < b ? _efficientHash(a, b) : _efficientHash(b, a); } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { /// @solidity memory-safe-assembly assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @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); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/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 (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @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 virtual override returns (uint256) { require(owner != address(0), "ERC721: address zero is not a valid owner"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: invalid token ID"); return owner; } /** * @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) { _requireMinted(tokenId); 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 overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not token owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_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 { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved"); _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 { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved"); _safeTransfer(from, to, tokenId, data); } /** * @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. * * `data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @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 { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * 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 ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @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.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { /// @solidity memory-safe-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * 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, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * 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, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/m00se.sol pragma solidity >=0.7.0 <0.9.0; contract NFT is ERC721Enumerable, Ownable { using Strings for uint256; string public baseURI; string public baseExtension = ".json"; string public notRevealedUri; uint256 public cost = 0 ether; uint256 public whiteListCost = 0 ether; uint256 public maxSupply = 10000; uint256 public maxMintAmount = 20; uint256 public nftPerAddressLimit = 3; bool public paused = false; bool public revealed = false; mapping(address => uint256) public addressMintedBalance; bytes32 public whitelistMerkleRoot; constructor( string memory _name, string memory _symbol, string memory _initBaseURI, string memory _initNotRevealedUri ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); setNotRevealedURI(_initNotRevealedUri); } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function mint(uint256 _mintAmount) public payable { require(!paused, "the contract is paused"); uint256 supply = totalSupply(); require(_mintAmount > 0, "need to mint at least 1 NFT"); require( _mintAmount <= maxMintAmount, "max mint amount per session exceeded" ); require(supply + _mintAmount <= maxSupply, "max NFT limit exceeded"); if (msg.sender != owner()) { require(msg.value >= cost * _mintAmount, "insufficient funds"); } for (uint256 i = 1; i <= _mintAmount; i++) { addressMintedBalance[msg.sender]++; _safeMint(msg.sender, supply + i); } } modifier isValidMerkleProof(bytes32[] calldata merkleProof, bytes32 root) { require( MerkleProof.verify( merkleProof, root, keccak256(abi.encodePacked(msg.sender)) ), "Address does not exist in list" ); _; } modifier isCorrectPayment(uint256 price, uint256 numberOfTokens) { require( price * numberOfTokens == msg.value, "Incorrect ETH value sent" ); _; } function mintWhitelist(bytes32[] calldata merkleProof) public payable isValidMerkleProof(merkleProof, whitelistMerkleRoot) isCorrectPayment(whiteListCost, 1) { uint256 supply = totalSupply(); require(supply + 1 <= maxSupply, "max NFT limit exceeded"); _safeMint(msg.sender, supply + 1); } function setWhitelistMerkleRoot(bytes32 merkleRoot) external onlyOwner { whitelistMerkleRoot = merkleRoot; } ////////////////////////////////////// function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); if (revealed == false) { return notRevealedUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string( abi.encodePacked( currentBaseURI, tokenId.toString(), baseExtension ) ) : ""; } //only owner function reveal() public onlyOwner { revealed = true; } function setNftPerAddressLimit(uint256 _limit) public onlyOwner { nftPerAddressLimit = _limit; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setWhitelistCost(uint256 _newCost) public onlyOwner { whiteListCost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function pause(bool _state) public onlyOwner { paused = _state; } function withdraw() public payable onlyOwner { (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","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":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"mintWhitelist","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setNftPerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setWhitelistCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"}],"name":"setWhitelistMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whiteListCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90805190602001906200005192919062000338565b506000600e556000600f55612710601055601460115560036012556000601360006101000a81548160ff0219169083151502179055506000601360016101000a81548160ff021916908315150217905550348015620000af57600080fd5b5060405162005103380380620051038339818101604052810190620000d5919062000585565b83838160009080519060200190620000ef92919062000338565b5080600190805190602001906200010892919062000338565b5050506200012b6200011f6200015760201b60201c565b6200015f60201b60201c565b6200013c826200022560201b60201c565b6200014d816200025160201b60201c565b505050506200075b565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002356200027d60201b60201c565b80600b90805190602001906200024d92919062000338565b5050565b620002616200027d60201b60201c565b80600d90805190602001906200027992919062000338565b5050565b6200028d6200015760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002b36200030e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200030c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200030390620006d4565b60405180910390fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003469062000725565b90600052602060002090601f0160209004810192826200036a5760008555620003b6565b82601f106200038557805160ff1916838001178555620003b6565b82800160010185558215620003b6579182015b82811115620003b557825182559160200191906001019062000398565b5b509050620003c59190620003c9565b5090565b5b80821115620003e4576000816000905550600101620003ca565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620004518262000406565b810181811067ffffffffffffffff8211171562000473576200047262000417565b5b80604052505050565b600062000488620003e8565b905062000496828262000446565b919050565b600067ffffffffffffffff821115620004b957620004b862000417565b5b620004c48262000406565b9050602081019050919050565b60005b83811015620004f1578082015181840152602081019050620004d4565b8381111562000501576000848401525b50505050565b60006200051e62000518846200049b565b6200047c565b9050828152602081018484840111156200053d576200053c62000401565b5b6200054a848285620004d1565b509392505050565b600082601f8301126200056a5762000569620003fc565b5b81516200057c84826020860162000507565b91505092915050565b60008060008060808587031215620005a257620005a1620003f2565b5b600085015167ffffffffffffffff811115620005c357620005c2620003f7565b5b620005d18782880162000552565b945050602085015167ffffffffffffffff811115620005f557620005f4620003f7565b5b620006038782880162000552565b935050604085015167ffffffffffffffff811115620006275762000626620003f7565b5b620006358782880162000552565b925050606085015167ffffffffffffffff811115620006595762000658620003f7565b5b620006678782880162000552565b91505092959194509250565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620006bc60208362000673565b9150620006c98262000684565b602082019050919050565b60006020820190508181036000830152620006ef81620006ad565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200073e57607f821691505b60208210811415620007555762000754620006f6565b5b50919050565b614998806200076b6000396000f3fe6080604052600436106102725760003560e01c80636c0360eb1161014f578063b88d4fde116100c1578063d49479eb1161007a578063d49479eb14610929578063d5abeb0114610952578063da3ef23f1461097d578063e985e9c5146109a6578063f2c4ce1e146109e3578063f2fde38b14610a0c57610272565b8063b88d4fde1461081b578063ba7d2c7614610844578063bd32fb661461086f578063c668286214610898578063c87b56dd146108c3578063d0eb26b01461090057610272565b80639257e044116101135780639257e0441461073e57806395d89b4114610769578063a0712d6814610794578063a22cb465146107b0578063a475b5dd146107d9578063aa98e0c6146107f057610272565b80636c0360eb1461066b57806370a0823114610696578063715018a6146106d35780637f00c7a6146106ea5780638da5cb5b1461071357610272565b80632f745c59116101e857806344d84381116101ac57806344d84381146105565780634f6ccce71461057257806351830227146105af57806355f804b3146105da5780635c975abb146106035780636352211e1461062e57610272565b80632f745c59146104805780633ccfd60b146104bd57806342842e0e146104c7578063438b6300146104f057806344a0d68a1461052d57610272565b8063095ea7b31161023a578063095ea7b31461037057806313faede61461039957806318160ddd146103c457806318cae269146103ef578063239c70ae1461042c57806323b872dd1461045757610272565b806301ffc9a71461027757806302329a29146102b457806306fdde03146102dd578063081812fc14610308578063081c8c4414610345575b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613025565b610a35565b6040516102ab919061306d565b60405180910390f35b3480156102c057600080fd5b506102db60048036038101906102d691906130b4565b610aaf565b005b3480156102e957600080fd5b506102f2610ad4565b6040516102ff919061317a565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a91906131d2565b610b66565b60405161033c9190613240565b60405180910390f35b34801561035157600080fd5b5061035a610bac565b604051610367919061317a565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190613287565b610c3a565b005b3480156103a557600080fd5b506103ae610d52565b6040516103bb91906132d6565b60405180910390f35b3480156103d057600080fd5b506103d9610d58565b6040516103e691906132d6565b60405180910390f35b3480156103fb57600080fd5b50610416600480360381019061041191906132f1565b610d65565b60405161042391906132d6565b60405180910390f35b34801561043857600080fd5b50610441610d7d565b60405161044e91906132d6565b60405180910390f35b34801561046357600080fd5b5061047e6004803603810190610479919061331e565b610d83565b005b34801561048c57600080fd5b506104a760048036038101906104a29190613287565b610de3565b6040516104b491906132d6565b60405180910390f35b6104c5610e88565b005b3480156104d357600080fd5b506104ee60048036038101906104e9919061331e565b610f10565b005b3480156104fc57600080fd5b50610517600480360381019061051291906132f1565b610f30565b604051610524919061342f565b60405180910390f35b34801561053957600080fd5b50610554600480360381019061054f91906131d2565b610fde565b005b610570600480360381019061056b91906134b6565b610ff0565b005b34801561057e57600080fd5b50610599600480360381019061059491906131d2565b611175565b6040516105a691906132d6565b60405180910390f35b3480156105bb57600080fd5b506105c46111e6565b6040516105d1919061306d565b60405180910390f35b3480156105e657600080fd5b5061060160048036038101906105fc9190613633565b6111f9565b005b34801561060f57600080fd5b5061061861121b565b604051610625919061306d565b60405180910390f35b34801561063a57600080fd5b50610655600480360381019061065091906131d2565b61122e565b6040516106629190613240565b60405180910390f35b34801561067757600080fd5b506106806112e0565b60405161068d919061317a565b60405180910390f35b3480156106a257600080fd5b506106bd60048036038101906106b891906132f1565b61136e565b6040516106ca91906132d6565b60405180910390f35b3480156106df57600080fd5b506106e8611426565b005b3480156106f657600080fd5b50610711600480360381019061070c91906131d2565b61143a565b005b34801561071f57600080fd5b5061072861144c565b6040516107359190613240565b60405180910390f35b34801561074a57600080fd5b50610753611476565b60405161076091906132d6565b60405180910390f35b34801561077557600080fd5b5061077e61147c565b60405161078b919061317a565b60405180910390f35b6107ae60048036038101906107a991906131d2565b61150e565b005b3480156107bc57600080fd5b506107d760048036038101906107d2919061367c565b61175d565b005b3480156107e557600080fd5b506107ee611773565b005b3480156107fc57600080fd5b50610805611798565b60405161081291906136d5565b60405180910390f35b34801561082757600080fd5b50610842600480360381019061083d9190613791565b61179e565b005b34801561085057600080fd5b50610859611800565b60405161086691906132d6565b60405180910390f35b34801561087b57600080fd5b5061089660048036038101906108919190613840565b611806565b005b3480156108a457600080fd5b506108ad611818565b6040516108ba919061317a565b60405180910390f35b3480156108cf57600080fd5b506108ea60048036038101906108e591906131d2565b6118a6565b6040516108f7919061317a565b60405180910390f35b34801561090c57600080fd5b50610927600480360381019061092291906131d2565b6119ff565b005b34801561093557600080fd5b50610950600480360381019061094b91906131d2565b611a11565b005b34801561095e57600080fd5b50610967611a23565b60405161097491906132d6565b60405180910390f35b34801561098957600080fd5b506109a4600480360381019061099f9190613633565b611a29565b005b3480156109b257600080fd5b506109cd60048036038101906109c8919061386d565b611a4b565b6040516109da919061306d565b60405180910390f35b3480156109ef57600080fd5b50610a0a6004803603810190610a059190613633565b611adf565b005b348015610a1857600080fd5b50610a336004803603810190610a2e91906132f1565b611b01565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610aa85750610aa782611b85565b5b9050919050565b610ab7611c67565b80601360006101000a81548160ff02191690831515021790555050565b606060008054610ae3906138dc565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0f906138dc565b8015610b5c5780601f10610b3157610100808354040283529160200191610b5c565b820191906000526020600020905b815481529060010190602001808311610b3f57829003601f168201915b5050505050905090565b6000610b7182611ce5565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d8054610bb9906138dc565b80601f0160208091040260200160405190810160405280929190818152602001828054610be5906138dc565b8015610c325780601f10610c0757610100808354040283529160200191610c32565b820191906000526020600020905b815481529060010190602001808311610c1557829003601f168201915b505050505081565b6000610c458261122e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cad90613980565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cd5611d30565b73ffffffffffffffffffffffffffffffffffffffff161480610d045750610d0381610cfe611d30565b611a4b565b5b610d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3a90613a12565b60405180910390fd5b610d4d8383611d38565b505050565b600e5481565b6000600880549050905090565b60146020528060005260406000206000915090505481565b60115481565b610d94610d8e611d30565b82611df1565b610dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dca90613aa4565b60405180910390fd5b610dde838383611e86565b505050565b6000610dee8361136e565b8210610e2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2690613b36565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e90611c67565b6000610e9a61144c565b73ffffffffffffffffffffffffffffffffffffffff1647604051610ebd90613b87565b60006040518083038185875af1925050503d8060008114610efa576040519150601f19603f3d011682016040523d82523d6000602084013e610eff565b606091505b5050905080610f0d57600080fd5b50565b610f2b8383836040518060200160405280600081525061179e565b505050565b60606000610f3d8361136e565b905060008167ffffffffffffffff811115610f5b57610f5a613508565b5b604051908082528060200260200182016040528015610f895781602001602082028036833780820191505090505b50905060005b82811015610fd357610fa18582610de3565b828281518110610fb457610fb3613b9c565b5b6020026020010181815250508080610fcb90613bfa565b915050610f8f565b508092505050919050565b610fe6611c67565b80600e8190555050565b8181601554611067838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050823360405160200161104c9190613c8b565b604051602081830303815290604052805190602001206120ed565b6110a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109d90613cf2565b60405180910390fd5b600f5460013481836110b89190613d12565b146110f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ef90613db8565b60405180910390fd5b6000611102610d58565b90506010546001826111149190613dd8565b1115611155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114c90613e7a565b60405180910390fd5b61116b336001836111669190613dd8565b612104565b5050505050505050565b600061117f610d58565b82106111c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b790613f0c565b60405180910390fd5b600882815481106111d4576111d3613b9c565b5b90600052602060002001549050919050565b601360019054906101000a900460ff1681565b611201611c67565b80600b9080519060200190611217929190612f16565b5050565b601360009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ce90613f78565b60405180910390fd5b80915050919050565b600b80546112ed906138dc565b80601f0160208091040260200160405190810160405280929190818152602001828054611319906138dc565b80156113665780601f1061133b57610100808354040283529160200191611366565b820191906000526020600020905b81548152906001019060200180831161134957829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d69061400a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61142e611c67565b6114386000612122565b565b611442611c67565b8060118190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f5481565b60606001805461148b906138dc565b80601f01602080910402602001604051908101604052809291908181526020018280546114b7906138dc565b80156115045780601f106114d957610100808354040283529160200191611504565b820191906000526020600020905b8154815290600101906020018083116114e757829003601f168201915b5050505050905090565b601360009054906101000a900460ff161561155e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155590614076565b60405180910390fd5b6000611568610d58565b9050600082116115ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a4906140e2565b60405180910390fd5b6011548211156115f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e990614174565b60405180910390fd5b60105482826116019190613dd8565b1115611642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163990613e7a565b60405180910390fd5b61164a61144c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116cd5781600e5461168a9190613d12565b3410156116cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c3906141e0565b60405180910390fd5b5b6000600190505b82811161175857601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061172b90613bfa565b91905055506117453382846117409190613dd8565b612104565b808061175090613bfa565b9150506116d4565b505050565b61176f611768611d30565b83836121e8565b5050565b61177b611c67565b6001601360016101000a81548160ff021916908315150217905550565b60155481565b6117af6117a9611d30565b83611df1565b6117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e590613aa4565b60405180910390fd5b6117fa84848484612355565b50505050565b60125481565b61180e611c67565b8060158190555050565b600c8054611825906138dc565b80601f0160208091040260200160405190810160405280929190818152602001828054611851906138dc565b801561189e5780601f106118735761010080835404028352916020019161189e565b820191906000526020600020905b81548152906001019060200180831161188157829003601f168201915b505050505081565b60606118b1826123b1565b6118f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e790614272565b60405180910390fd5b60001515601360019054906101000a900460ff161515141561199e57600d8054611919906138dc565b80601f0160208091040260200160405190810160405280929190818152602001828054611945906138dc565b80156119925780601f1061196757610100808354040283529160200191611992565b820191906000526020600020905b81548152906001019060200180831161197557829003601f168201915b505050505090506119fa565b60006119a861241d565b905060008151116119c857604051806020016040528060008152506119f6565b806119d2846124af565b600c6040516020016119e693929190614362565b6040516020818303038152906040525b9150505b919050565b611a07611c67565b8060128190555050565b611a19611c67565b80600f8190555050565b60105481565b611a31611c67565b80600c9080519060200190611a47929190612f16565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ae7611c67565b80600d9080519060200190611afd929190612f16565b5050565b611b09611c67565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7090614405565b60405180910390fd5b611b8281612122565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611c5057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611c605750611c5f82612610565b5b9050919050565b611c6f611d30565b73ffffffffffffffffffffffffffffffffffffffff16611c8d61144c565b73ffffffffffffffffffffffffffffffffffffffff1614611ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cda90614471565b60405180910390fd5b565b611cee816123b1565b611d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2490613f78565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611dab8361122e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611dfd8361122e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e3f5750611e3e8185611a4b565b5b80611e7d57508373ffffffffffffffffffffffffffffffffffffffff16611e6584610b66565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ea68261122e565b73ffffffffffffffffffffffffffffffffffffffff1614611efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef390614503565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6390614595565b60405180910390fd5b611f7783838361267a565b611f82600082611d38565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fd291906145b5565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120299190613dd8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46120e883838361278e565b505050565b6000826120fa8584612793565b1490509392505050565b61211e8282604051806020016040528060008152506127e9565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224e90614635565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612348919061306d565b60405180910390a3505050565b612360848484611e86565b61236c84848484612844565b6123ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a2906146c7565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600b805461242c906138dc565b80601f0160208091040260200160405190810160405280929190818152602001828054612458906138dc565b80156124a55780601f1061247a576101008083540402835291602001916124a5565b820191906000526020600020905b81548152906001019060200180831161248857829003601f168201915b5050505050905090565b606060008214156124f7576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061260b565b600082905060005b6000821461252957808061251290613bfa565b915050600a826125229190614716565b91506124ff565b60008167ffffffffffffffff81111561254557612544613508565b5b6040519080825280601f01601f1916602001820160405280156125775781602001600182028036833780820191505090505b5090505b600085146126045760018261259091906145b5565b9150600a8561259f9190614747565b60306125ab9190613dd8565b60f81b8183815181106125c1576125c0613b9c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125fd9190614716565b945061257b565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6126858383836129cc565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126c8576126c3816129d1565b612707565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612706576127058382612a1a565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561274a5761274581612b87565b612789565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612788576127878282612c58565b5b5b505050565b505050565b60008082905060005b84518110156127de576127c9828683815181106127bc576127bb613b9c565b5b6020026020010151612cd7565b915080806127d690613bfa565b91505061279c565b508091505092915050565b6127f38383612d02565b6128006000848484612844565b61283f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612836906146c7565b60405180910390fd5b505050565b60006128658473ffffffffffffffffffffffffffffffffffffffff16612edc565b156129bf578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261288e611d30565b8786866040518563ffffffff1660e01b81526004016128b094939291906147cd565b6020604051808303816000875af19250505080156128ec57506040513d601f19601f820116820180604052508101906128e9919061482e565b60015b61296f573d806000811461291c576040519150601f19603f3d011682016040523d82523d6000602084013e612921565b606091505b50600081511415612967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295e906146c7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506129c4565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612a278461136e565b612a3191906145b5565b9050600060076000848152602001908152602001600020549050818114612b16576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612b9b91906145b5565b9050600060096000848152602001908152602001600020549050600060088381548110612bcb57612bca613b9c565b5b906000526020600020015490508060088381548110612bed57612bec613b9c565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612c3c57612c3b61485b565b5b6001900381819060005260206000200160009055905550505050565b6000612c638361136e565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000818310612cef57612cea8284612eff565b612cfa565b612cf98383612eff565b5b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d69906148d6565b60405180910390fd5b612d7b816123b1565b15612dbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db290614942565b60405180910390fd5b612dc76000838361267a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e179190613dd8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612ed86000838361278e565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082600052816020526040600020905092915050565b828054612f22906138dc565b90600052602060002090601f016020900481019282612f445760008555612f8b565b82601f10612f5d57805160ff1916838001178555612f8b565b82800160010185558215612f8b579182015b82811115612f8a578251825591602001919060010190612f6f565b5b509050612f989190612f9c565b5090565b5b80821115612fb5576000816000905550600101612f9d565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61300281612fcd565b811461300d57600080fd5b50565b60008135905061301f81612ff9565b92915050565b60006020828403121561303b5761303a612fc3565b5b600061304984828501613010565b91505092915050565b60008115159050919050565b61306781613052565b82525050565b6000602082019050613082600083018461305e565b92915050565b61309181613052565b811461309c57600080fd5b50565b6000813590506130ae81613088565b92915050565b6000602082840312156130ca576130c9612fc3565b5b60006130d88482850161309f565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561311b578082015181840152602081019050613100565b8381111561312a576000848401525b50505050565b6000601f19601f8301169050919050565b600061314c826130e1565b61315681856130ec565b93506131668185602086016130fd565b61316f81613130565b840191505092915050565b600060208201905081810360008301526131948184613141565b905092915050565b6000819050919050565b6131af8161319c565b81146131ba57600080fd5b50565b6000813590506131cc816131a6565b92915050565b6000602082840312156131e8576131e7612fc3565b5b60006131f6848285016131bd565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061322a826131ff565b9050919050565b61323a8161321f565b82525050565b60006020820190506132556000830184613231565b92915050565b6132648161321f565b811461326f57600080fd5b50565b6000813590506132818161325b565b92915050565b6000806040838503121561329e5761329d612fc3565b5b60006132ac85828601613272565b92505060206132bd858286016131bd565b9150509250929050565b6132d08161319c565b82525050565b60006020820190506132eb60008301846132c7565b92915050565b60006020828403121561330757613306612fc3565b5b600061331584828501613272565b91505092915050565b60008060006060848603121561333757613336612fc3565b5b600061334586828701613272565b935050602061335686828701613272565b9250506040613367868287016131bd565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6133a68161319c565b82525050565b60006133b8838361339d565b60208301905092915050565b6000602082019050919050565b60006133dc82613371565b6133e6818561337c565b93506133f18361338d565b8060005b8381101561342257815161340988826133ac565b9750613414836133c4565b9250506001810190506133f5565b5085935050505092915050565b6000602082019050818103600083015261344981846133d1565b905092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261347657613475613451565b5b8235905067ffffffffffffffff81111561349357613492613456565b5b6020830191508360208202830111156134af576134ae61345b565b5b9250929050565b600080602083850312156134cd576134cc612fc3565b5b600083013567ffffffffffffffff8111156134eb576134ea612fc8565b5b6134f785828601613460565b92509250509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61354082613130565b810181811067ffffffffffffffff8211171561355f5761355e613508565b5b80604052505050565b6000613572612fb9565b905061357e8282613537565b919050565b600067ffffffffffffffff82111561359e5761359d613508565b5b6135a782613130565b9050602081019050919050565b82818337600083830152505050565b60006135d66135d184613583565b613568565b9050828152602081018484840111156135f2576135f1613503565b5b6135fd8482856135b4565b509392505050565b600082601f83011261361a57613619613451565b5b813561362a8482602086016135c3565b91505092915050565b60006020828403121561364957613648612fc3565b5b600082013567ffffffffffffffff81111561366757613666612fc8565b5b61367384828501613605565b91505092915050565b6000806040838503121561369357613692612fc3565b5b60006136a185828601613272565b92505060206136b28582860161309f565b9150509250929050565b6000819050919050565b6136cf816136bc565b82525050565b60006020820190506136ea60008301846136c6565b92915050565b600067ffffffffffffffff82111561370b5761370a613508565b5b61371482613130565b9050602081019050919050565b600061373461372f846136f0565b613568565b9050828152602081018484840111156137505761374f613503565b5b61375b8482856135b4565b509392505050565b600082601f83011261377857613777613451565b5b8135613788848260208601613721565b91505092915050565b600080600080608085870312156137ab576137aa612fc3565b5b60006137b987828801613272565b94505060206137ca87828801613272565b93505060406137db878288016131bd565b925050606085013567ffffffffffffffff8111156137fc576137fb612fc8565b5b61380887828801613763565b91505092959194509250565b61381d816136bc565b811461382857600080fd5b50565b60008135905061383a81613814565b92915050565b60006020828403121561385657613855612fc3565b5b60006138648482850161382b565b91505092915050565b6000806040838503121561388457613883612fc3565b5b600061389285828601613272565b92505060206138a385828601613272565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806138f457607f821691505b60208210811415613908576139076138ad565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061396a6021836130ec565b91506139758261390e565b604082019050919050565b600060208201905081810360008301526139998161395d565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b60006139fc603e836130ec565b9150613a07826139a0565b604082019050919050565b60006020820190508181036000830152613a2b816139ef565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000613a8e602e836130ec565b9150613a9982613a32565b604082019050919050565b60006020820190508181036000830152613abd81613a81565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613b20602b836130ec565b9150613b2b82613ac4565b604082019050919050565b60006020820190508181036000830152613b4f81613b13565b9050919050565b600081905092915050565b50565b6000613b71600083613b56565b9150613b7c82613b61565b600082019050919050565b6000613b9282613b64565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c058261319c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c3857613c37613bcb565b5b600182019050919050565b60008160601b9050919050565b6000613c5b82613c43565b9050919050565b6000613c6d82613c50565b9050919050565b613c85613c808261321f565b613c62565b82525050565b6000613c978284613c74565b60148201915081905092915050565b7f4164647265737320646f6573206e6f7420657869737420696e206c6973740000600082015250565b6000613cdc601e836130ec565b9150613ce782613ca6565b602082019050919050565b60006020820190508181036000830152613d0b81613ccf565b9050919050565b6000613d1d8261319c565b9150613d288361319c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d6157613d60613bcb565b5b828202905092915050565b7f496e636f7272656374204554482076616c75652073656e740000000000000000600082015250565b6000613da26018836130ec565b9150613dad82613d6c565b602082019050919050565b60006020820190508181036000830152613dd181613d95565b9050919050565b6000613de38261319c565b9150613dee8361319c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e2357613e22613bcb565b5b828201905092915050565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b6000613e646016836130ec565b9150613e6f82613e2e565b602082019050919050565b60006020820190508181036000830152613e9381613e57565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613ef6602c836130ec565b9150613f0182613e9a565b604082019050919050565b60006020820190508181036000830152613f2581613ee9565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000613f626018836130ec565b9150613f6d82613f2c565b602082019050919050565b60006020820190508181036000830152613f9181613f55565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000613ff46029836130ec565b9150613fff82613f98565b604082019050919050565b6000602082019050818103600083015261402381613fe7565b9050919050565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b60006140606016836130ec565b915061406b8261402a565b602082019050919050565b6000602082019050818103600083015261408f81614053565b9050919050565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b60006140cc601b836130ec565b91506140d782614096565b602082019050919050565b600060208201905081810360008301526140fb816140bf565b9050919050565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b600061415e6024836130ec565b915061416982614102565b604082019050919050565b6000602082019050818103600083015261418d81614151565b9050919050565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b60006141ca6012836130ec565b91506141d582614194565b602082019050919050565b600060208201905081810360008301526141f9816141bd565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b600061425c602f836130ec565b915061426782614200565b604082019050919050565b6000602082019050818103600083015261428b8161424f565b9050919050565b600081905092915050565b60006142a8826130e1565b6142b28185614292565b93506142c28185602086016130fd565b80840191505092915050565b60008190508160005260206000209050919050565b600081546142f0816138dc565b6142fa8186614292565b94506001821660008114614315576001811461432657614359565b60ff19831686528186019350614359565b61432f856142ce565b60005b8381101561435157815481890152600182019150602081019050614332565b838801955050505b50505092915050565b600061436e828661429d565b915061437a828561429d565b915061438682846142e3565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006143ef6026836130ec565b91506143fa82614393565b604082019050919050565b6000602082019050818103600083015261441e816143e2565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061445b6020836130ec565b915061446682614425565b602082019050919050565b6000602082019050818103600083015261448a8161444e565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006144ed6025836130ec565b91506144f882614491565b604082019050919050565b6000602082019050818103600083015261451c816144e0565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061457f6024836130ec565b915061458a82614523565b604082019050919050565b600060208201905081810360008301526145ae81614572565b9050919050565b60006145c08261319c565b91506145cb8361319c565b9250828210156145de576145dd613bcb565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061461f6019836130ec565b915061462a826145e9565b602082019050919050565b6000602082019050818103600083015261464e81614612565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006146b16032836130ec565b91506146bc82614655565b604082019050919050565b600060208201905081810360008301526146e0816146a4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006147218261319c565b915061472c8361319c565b92508261473c5761473b6146e7565b5b828204905092915050565b60006147528261319c565b915061475d8361319c565b92508261476d5761476c6146e7565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b600061479f82614778565b6147a98185614783565b93506147b98185602086016130fd565b6147c281613130565b840191505092915050565b60006080820190506147e26000830187613231565b6147ef6020830186613231565b6147fc60408301856132c7565b818103606083015261480e8184614794565b905095945050505050565b60008151905061482881612ff9565b92915050565b60006020828403121561484457614843612fc3565b5b600061485284828501614819565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006148c06020836130ec565b91506148cb8261488a565b602082019050919050565b600060208201905081810360008301526148ef816148b3565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061492c601c836130ec565b9150614937826148f6565b602082019050919050565b6000602082019050818103600083015261495b8161491f565b905091905056fea26469706673582212205893218bf02d9509567150533ee1b7bbde4dd10848bd5887a6b3b28b1d63592864736f6c634300080b0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000034e4654000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034e4654000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034e4654000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034e46540000000000000000000000000000000000000000000000000000000000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000034e4654000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034e4654000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034e4654000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034e46540000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): NFT
Arg [1] : _symbol (string): NFT
Arg [2] : _initBaseURI (string): NFT
Arg [3] : _initNotRevealedUri (string): NFT
-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [5] : 4e46540000000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 4e46540000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [9] : 4e46540000000000000000000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [11] : 4e46540000000000000000000000000000000000000000000000000000000000
Deployed ByteCode Sourcemap
54960:5188:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48735:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59903:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35469:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36982:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55113:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36499:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55148:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49375:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55427:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55268:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37682:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49043:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59990:155;;;:::i;:::-;;38089:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57818:390;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59162:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57231:402;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49565:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55390:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59498:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55352:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35180:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55041:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34911:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13998:103;;;;;;;;;;;;;:::i;:::-;;59368:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13350:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55184:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35638:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55953:714;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37225:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58967:69;;;;;;;;;;;;;:::i;:::-;;55497:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38345:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55308:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57642:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55069:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58216:725;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59044:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59256:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55229:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59610:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37451:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59769:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14256:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48735:224;48837:4;48876:35;48861:50;;;:11;:50;;;;:90;;;;48915:36;48939:11;48915:23;:36::i;:::-;48861:90;48854:97;;48735:224;;;:::o;59903:79::-;13236:13;:11;:13::i;:::-;59968:6:::1;59959;;:15;;;;;;;;;;;;;;;;;;59903:79:::0;:::o;35469:100::-;35523:13;35556:5;35549:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35469:100;:::o;36982:171::-;37058:7;37078:23;37093:7;37078:14;:23::i;:::-;37121:15;:24;37137:7;37121:24;;;;;;;;;;;;;;;;;;;;;37114:31;;36982:171;;;:::o;55113:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;36499:417::-;36580:13;36596:23;36611:7;36596:14;:23::i;:::-;36580:39;;36644:5;36638:11;;:2;:11;;;;36630:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;36738:5;36722:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;36747:37;36764:5;36771:12;:10;:12::i;:::-;36747:16;:37::i;:::-;36722:62;36700:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;36887:21;36896:2;36900:7;36887:8;:21::i;:::-;36569:347;36499:417;;:::o;55148:29::-;;;;:::o;49375:113::-;49436:7;49463:10;:17;;;;49456:24;;49375:113;:::o;55427:55::-;;;;;;;;;;;;;;;;;:::o;55268:33::-;;;;:::o;37682:336::-;37877:41;37896:12;:10;:12::i;:::-;37910:7;37877:18;:41::i;:::-;37869:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;37982:28;37992:4;37998:2;38002:7;37982:9;:28::i;:::-;37682:336;;;:::o;49043:256::-;49140:7;49176:23;49193:5;49176:16;:23::i;:::-;49168:5;:31;49160:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;49265:12;:19;49278:5;49265:19;;;;;;;;;;;;;;;:26;49285:5;49265:26;;;;;;;;;;;;49258:33;;49043:256;;;;:::o;59990:155::-;13236:13;:11;:13::i;:::-;60047:7:::1;60068;:5;:7::i;:::-;60060:21;;60089;60060:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60046:69;;;60134:2;60126:11;;;::::0;::::1;;60035:110;59990:155::o:0;38089:185::-;38227:39;38244:4;38250:2;38254:7;38227:39;;;;;;;;;;;;:16;:39::i;:::-;38089:185;;;:::o;57818:390::-;57905:16;57939:23;57965:17;57975:6;57965:9;:17::i;:::-;57939:43;;57993:25;58035:15;58021:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57993:58;;58067:9;58062:113;58082:15;58078:1;:19;58062:113;;;58133:30;58153:6;58161:1;58133:19;:30::i;:::-;58119:8;58128:1;58119:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;58099:3;;;;;:::i;:::-;;;;58062:113;;;;58192:8;58185:15;;;;57818:390;;;:::o;59162:86::-;13236:13;:11;:13::i;:::-;59232:8:::1;59225:4;:15;;;;59162:86:::0;:::o;57231:402::-;57347:11;;57360:19;;56788:144;56825:11;;56788:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56855:4;56905:10;56888:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;56878:39;;;;;;56788:18;:144::i;:::-;56766:224;;;;;;;;;;;;:::i;:::-;;;;;;;;;57407:13:::1;;57422:1;57142:9;57124:14;57116:5;:22;;;;:::i;:::-;:35;57094:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;57481:14:::2;57498:13;:11;:13::i;:::-;57481:30;;57544:9;;57539:1;57530:6;:10;;;;:::i;:::-;:23;;57522:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;57591:33;57601:10;57622:1;57613:6;:10;;;;:::i;:::-;57591:9;:33::i;:::-;57455:178;57001:1:::1;;57231:402:::0;;;;;:::o;49565:233::-;49640:7;49676:30;:28;:30::i;:::-;49668:5;:38;49660:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;49773:10;49784:5;49773:17;;;;;;;;:::i;:::-;;;;;;;;;;49766:24;;49565:233;;;:::o;55390:28::-;;;;;;;;;;;;;:::o;59498:104::-;13236:13;:11;:13::i;:::-;59583:11:::1;59573:7;:21;;;;;;;;;;;;:::i;:::-;;59498:104:::0;:::o;55352:26::-;;;;;;;;;;;;;:::o;35180:222::-;35252:7;35272:13;35288:7;:16;35296:7;35288:16;;;;;;;;;;;;;;;;;;;;;35272:32;;35340:1;35323:19;;:5;:19;;;;35315:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;35389:5;35382:12;;;35180:222;;;:::o;55041:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;34911:207::-;34983:7;35028:1;35011:19;;:5;:19;;;;35003:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35094:9;:16;35104:5;35094:16;;;;;;;;;;;;;;;;35087:23;;34911:207;;;:::o;13998:103::-;13236:13;:11;:13::i;:::-;14063:30:::1;14090:1;14063:18;:30::i;:::-;13998:103::o:0;59368:122::-;13236:13;:11;:13::i;:::-;59465:17:::1;59449:13;:33;;;;59368:122:::0;:::o;13350:87::-;13396:7;13423:6;;;;;;;;;;;13416:13;;13350:87;:::o;55184:38::-;;;;:::o;35638:104::-;35694:13;35727:7;35720:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35638:104;:::o;55953:714::-;56023:6;;;;;;;;;;;56022:7;56014:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;56067:14;56084:13;:11;:13::i;:::-;56067:30;;56130:1;56116:11;:15;56108:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;56211:13;;56196:11;:28;;56174:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;56331:9;;56316:11;56307:6;:20;;;;:::i;:::-;:33;;56299:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56398:7;:5;:7::i;:::-;56384:21;;:10;:21;;;56380:116;;56450:11;56443:4;;:18;;;;:::i;:::-;56430:9;:31;;56422:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;56380:116;56513:9;56525:1;56513:13;;56508:152;56533:11;56528:1;:16;56508:152;;56566:20;:32;56587:10;56566:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;56615:33;56625:10;56646:1;56637:6;:10;;;;:::i;:::-;56615:9;:33::i;:::-;56546:3;;;;;:::i;:::-;;;;56508:152;;;;56003:664;55953:714;:::o;37225:155::-;37320:52;37339:12;:10;:12::i;:::-;37353:8;37363;37320:18;:52::i;:::-;37225:155;;:::o;58967:69::-;13236:13;:11;:13::i;:::-;59024:4:::1;59013:8;;:15;;;;;;;;;;;;;;;;;;58967:69::o:0;55497:34::-;;;;:::o;38345:323::-;38519:41;38538:12;:10;:12::i;:::-;38552:7;38519:18;:41::i;:::-;38511:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;38622:38;38636:4;38642:2;38646:7;38655:4;38622:13;:38::i;:::-;38345:323;;;;:::o;55308:37::-;;;;:::o;57642:122::-;13236:13;:11;:13::i;:::-;57746:10:::1;57724:19;:32;;;;57642:122:::0;:::o;55069:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;58216:725::-;58334:13;58387:16;58395:7;58387;:16::i;:::-;58365:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;58507:5;58495:17;;:8;;;;;;;;;;;:17;;;58491:71;;;58536:14;58529:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58491:71;58574:28;58605:10;:8;:10::i;:::-;58574:41;;58677:1;58652:14;58646:28;:32;:287;;;;;;;;;;;;;;;;;58770:14;58811:18;:7;:16;:18::i;:::-;58856:13;58727:165;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;58646:287;58626:307;;;58216:725;;;;:::o;59044:110::-;13236:13;:11;:13::i;:::-;59140:6:::1;59119:18;:27;;;;59044:110:::0;:::o;59256:104::-;13236:13;:11;:13::i;:::-;59344:8:::1;59328:13;:24;;;;59256:104:::0;:::o;55229:32::-;;;;:::o;59610:151::-;13236:13;:11;:13::i;:::-;59736:17:::1;59720:13;:33;;;;;;;;;;;;:::i;:::-;;59610:151:::0;:::o;37451:164::-;37548:4;37572:18;:25;37591:5;37572:25;;;;;;;;;;;;;;;:35;37598:8;37572:35;;;;;;;;;;;;;;;;;;;;;;;;;37565:42;;37451:164;;;;:::o;59769:126::-;13236:13;:11;:13::i;:::-;59872:15:::1;59855:14;:32;;;;;;;;;;;;:::i;:::-;;59769:126:::0;:::o;14256:201::-;13236:13;:11;:13::i;:::-;14365:1:::1;14345:22;;:8;:22;;;;14337:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;14421:28;14440:8;14421:18;:28::i;:::-;14256:201:::0;:::o;34542:305::-;34644:4;34696:25;34681:40;;;:11;:40;;;;:105;;;;34753:33;34738:48;;;:11;:48;;;;34681:105;:158;;;;34803:36;34827:11;34803:23;:36::i;:::-;34681:158;34661:178;;34542:305;;;:::o;13515:132::-;13590:12;:10;:12::i;:::-;13579:23;;:7;:5;:7::i;:::-;:23;;;13571:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13515:132::o;44957:135::-;45039:16;45047:7;45039;:16::i;:::-;45031:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;44957:135;:::o;11901:98::-;11954:7;11981:10;11974:17;;11901:98;:::o;44236:174::-;44338:2;44311:15;:24;44327:7;44311:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;44394:7;44390:2;44356:46;;44365:23;44380:7;44365:14;:23::i;:::-;44356:46;;;;;;;;;;;;44236:174;;:::o;40469:264::-;40562:4;40579:13;40595:23;40610:7;40595:14;:23::i;:::-;40579:39;;40648:5;40637:16;;:7;:16;;;:52;;;;40657:32;40674:5;40681:7;40657:16;:32::i;:::-;40637:52;:87;;;;40717:7;40693:31;;:20;40705:7;40693:11;:20::i;:::-;:31;;;40637:87;40629:96;;;40469:264;;;;:::o;43492:625::-;43651:4;43624:31;;:23;43639:7;43624:14;:23::i;:::-;:31;;;43616:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;43730:1;43716:16;;:2;:16;;;;43708:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;43786:39;43807:4;43813:2;43817:7;43786:20;:39::i;:::-;43890:29;43907:1;43911:7;43890:8;:29::i;:::-;43951:1;43932:9;:15;43942:4;43932:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;43980:1;43963:9;:13;43973:2;43963:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;44011:2;43992:7;:16;44000:7;43992:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;44050:7;44046:2;44031:27;;44040:4;44031:27;;;;;;;;;;;;44071:38;44091:4;44097:2;44101:7;44071:19;:38::i;:::-;43492:625;;;:::o;1219:190::-;1344:4;1397;1368:25;1381:5;1388:4;1368:12;:25::i;:::-;:33;1361:40;;1219:190;;;;;:::o;41075:110::-;41151:26;41161:2;41165:7;41151:26;;;;;;;;;;;;:9;:26::i;:::-;41075:110;;:::o;14617:191::-;14691:16;14710:6;;;;;;;;;;;14691:25;;14736:8;14727:6;;:17;;;;;;;;;;;;;;;;;;14791:8;14760:40;;14781:8;14760:40;;;;;;;;;;;;14680:128;14617:191;:::o;44553:315::-;44708:8;44699:17;;:5;:17;;;;44691:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;44795:8;44757:18;:25;44776:5;44757:25;;;;;;;;;;;;;;;:35;44783:8;44757:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;44841:8;44819:41;;44834:5;44819:41;;;44851:8;44819:41;;;;;;:::i;:::-;;;;;;;;44553:315;;;:::o;39549:313::-;39705:28;39715:4;39721:2;39725:7;39705:9;:28::i;:::-;39752:47;39775:4;39781:2;39785:7;39794:4;39752:22;:47::i;:::-;39744:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;39549:313;;;;:::o;40175:127::-;40240:4;40292:1;40264:30;;:7;:16;40272:7;40264:16;;;;;;;;;;;;;;;;;;;;;:30;;;;40257:37;;40175:127;;;:::o;55832:108::-;55892:13;55925:7;55918:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55832:108;:::o;9155:723::-;9211:13;9441:1;9432:5;:10;9428:53;;;9459:10;;;;;;;;;;;;;;;;;;;;;9428:53;9491:12;9506:5;9491:20;;9522:14;9547:78;9562:1;9554:4;:9;9547:78;;9580:8;;;;;:::i;:::-;;;;9611:2;9603:10;;;;;:::i;:::-;;;9547:78;;;9635:19;9667:6;9657:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9635:39;;9685:154;9701:1;9692:5;:10;9685:154;;9729:1;9719:11;;;;;:::i;:::-;;;9796:2;9788:5;:10;;;;:::i;:::-;9775:2;:24;;;;:::i;:::-;9762:39;;9745:6;9752;9745:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;9825:2;9816:11;;;;;:::i;:::-;;;9685:154;;;9863:6;9849:21;;;;;9155:723;;;;:::o;26204:157::-;26289:4;26328:25;26313:40;;;:11;:40;;;;26306:47;;26204:157;;;:::o;50411:589::-;50555:45;50582:4;50588:2;50592:7;50555:26;:45::i;:::-;50633:1;50617:18;;:4;:18;;;50613:187;;;50652:40;50684:7;50652:31;:40::i;:::-;50613:187;;;50722:2;50714:10;;:4;:10;;;50710:90;;50741:47;50774:4;50780:7;50741:32;:47::i;:::-;50710:90;50613:187;50828:1;50814:16;;:2;:16;;;50810:183;;;50847:45;50884:7;50847:36;:45::i;:::-;50810:183;;;50920:4;50914:10;;:2;:10;;;50910:83;;50941:40;50969:2;50973:7;50941:27;:40::i;:::-;50910:83;50810:183;50411:589;;;:::o;47592:125::-;;;;:::o;2086:296::-;2169:7;2189:20;2212:4;2189:27;;2232:9;2227:118;2251:5;:12;2247:1;:16;2227:118;;;2300:33;2310:12;2324:5;2330:1;2324:8;;;;;;;;:::i;:::-;;;;;;;;2300:9;:33::i;:::-;2285:48;;2265:3;;;;;:::i;:::-;;;;2227:118;;;;2362:12;2355:19;;;2086:296;;;;:::o;41412:319::-;41541:18;41547:2;41551:7;41541:5;:18::i;:::-;41592:53;41623:1;41627:2;41631:7;41640:4;41592:22;:53::i;:::-;41570:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;41412:319;;;:::o;45656:853::-;45810:4;45831:15;:2;:13;;;:15::i;:::-;45827:675;;;45883:2;45867:36;;;45904:12;:10;:12::i;:::-;45918:4;45924:7;45933:4;45867:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;45863:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46125:1;46108:6;:13;:18;46104:328;;;46151:60;;;;;;;;;;:::i;:::-;;;;;;;;46104:328;46382:6;46376:13;46367:6;46363:2;46359:15;46352:38;45863:584;45999:41;;;45989:51;;;:6;:51;;;;45982:58;;;;;45827:675;46486:4;46479:11;;45656:853;;;;;;;:::o;47081:126::-;;;;:::o;51723:164::-;51827:10;:17;;;;51800:15;:24;51816:7;51800:24;;;;;;;;;;;:44;;;;51855:10;51871:7;51855:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51723:164;:::o;52514:988::-;52780:22;52830:1;52805:22;52822:4;52805:16;:22::i;:::-;:26;;;;:::i;:::-;52780:51;;52842:18;52863:17;:26;52881:7;52863:26;;;;;;;;;;;;52842:47;;53010:14;52996:10;:28;52992:328;;53041:19;53063:12;:18;53076:4;53063:18;;;;;;;;;;;;;;;:34;53082:14;53063:34;;;;;;;;;;;;53041:56;;53147:11;53114:12;:18;53127:4;53114:18;;;;;;;;;;;;;;;:30;53133:10;53114:30;;;;;;;;;;;:44;;;;53264:10;53231:17;:30;53249:11;53231:30;;;;;;;;;;;:43;;;;53026:294;52992:328;53416:17;:26;53434:7;53416:26;;;;;;;;;;;53409:33;;;53460:12;:18;53473:4;53460:18;;;;;;;;;;;;;;;:34;53479:14;53460:34;;;;;;;;;;;53453:41;;;52595:907;;52514:988;;:::o;53797:1079::-;54050:22;54095:1;54075:10;:17;;;;:21;;;;:::i;:::-;54050:46;;54107:18;54128:15;:24;54144:7;54128:24;;;;;;;;;;;;54107:45;;54479:19;54501:10;54512:14;54501:26;;;;;;;;:::i;:::-;;;;;;;;;;54479:48;;54565:11;54540:10;54551;54540:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;54676:10;54645:15;:28;54661:11;54645:28;;;;;;;;;;;:41;;;;54817:15;:24;54833:7;54817:24;;;;;;;;;;;54810:31;;;54852:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;53868:1008;;;53797:1079;:::o;51301:221::-;51386:14;51403:20;51420:2;51403:16;:20::i;:::-;51386:37;;51461:7;51434:12;:16;51447:2;51434:16;;;;;;;;;;;;;;;:24;51451:6;51434:24;;;;;;;;;;;:34;;;;51508:6;51479:17;:26;51497:7;51479:26;;;;;;;;;;;:35;;;;51375:147;51301:221;;:::o;8293:149::-;8356:7;8387:1;8383;:5;:51;;8414:20;8429:1;8432;8414:14;:20::i;:::-;8383:51;;;8391:20;8406:1;8409;8391:14;:20::i;:::-;8383:51;8376:58;;8293:149;;;;:::o;42067:439::-;42161:1;42147:16;;:2;:16;;;;42139:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;42220:16;42228:7;42220;:16::i;:::-;42219:17;42211:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;42282:45;42311:1;42315:2;42319:7;42282:20;:45::i;:::-;42357:1;42340:9;:13;42350:2;42340:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;42388:2;42369:7;:16;42377:7;42369:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;42433:7;42429:2;42408:33;;42425:1;42408:33;;;;;;;;;;;;42454:44;42482:1;42486:2;42490:7;42454:19;:44::i;:::-;42067:439;;:::o;16048:326::-;16108:4;16365:1;16343:7;:19;;;:23;16336:30;;16048:326;;;:::o;8450:268::-;8518:13;8625:1;8619:4;8612:15;8654:1;8648:4;8641:15;8695:4;8689;8679:21;8670:30;;8450:268;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:116::-;1588:21;1603:5;1588:21;:::i;:::-;1581:5;1578:32;1568:60;;1624:1;1621;1614:12;1568:60;1518:116;:::o;1640:133::-;1683:5;1721:6;1708:20;1699:29;;1737:30;1761:5;1737:30;:::i;:::-;1640:133;;;;:::o;1779:323::-;1835:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:119;;;1890:79;;:::i;:::-;1852:119;2010:1;2035:50;2077:7;2068:6;2057:9;2053:22;2035:50;:::i;:::-;2025:60;;1981:114;1779:323;;;;:::o;2108:99::-;2160:6;2194:5;2188:12;2178:22;;2108:99;;;:::o;2213:169::-;2297:11;2331:6;2326:3;2319:19;2371:4;2366:3;2362:14;2347:29;;2213:169;;;;:::o;2388:307::-;2456:1;2466:113;2480:6;2477:1;2474:13;2466:113;;;2565:1;2560:3;2556:11;2550:18;2546:1;2541:3;2537:11;2530:39;2502:2;2499:1;2495:10;2490:15;;2466:113;;;2597:6;2594:1;2591:13;2588:101;;;2677:1;2668:6;2663:3;2659:16;2652:27;2588:101;2437:258;2388:307;;;:::o;2701:102::-;2742:6;2793:2;2789:7;2784:2;2777:5;2773:14;2769:28;2759:38;;2701:102;;;:::o;2809:364::-;2897:3;2925:39;2958:5;2925:39;:::i;:::-;2980:71;3044:6;3039:3;2980:71;:::i;:::-;2973:78;;3060:52;3105:6;3100:3;3093:4;3086:5;3082:16;3060:52;:::i;:::-;3137:29;3159:6;3137:29;:::i;:::-;3132:3;3128:39;3121:46;;2901:272;2809:364;;;;:::o;3179:313::-;3292:4;3330:2;3319:9;3315:18;3307:26;;3379:9;3373:4;3369:20;3365:1;3354:9;3350:17;3343:47;3407:78;3480:4;3471:6;3407:78;:::i;:::-;3399:86;;3179:313;;;;:::o;3498:77::-;3535:7;3564:5;3553:16;;3498:77;;;:::o;3581:122::-;3654:24;3672:5;3654:24;:::i;:::-;3647:5;3644:35;3634:63;;3693:1;3690;3683:12;3634:63;3581:122;:::o;3709:139::-;3755:5;3793:6;3780:20;3771:29;;3809:33;3836:5;3809:33;:::i;:::-;3709:139;;;;:::o;3854:329::-;3913:6;3962:2;3950:9;3941:7;3937:23;3933:32;3930:119;;;3968:79;;:::i;:::-;3930:119;4088:1;4113:53;4158:7;4149:6;4138:9;4134:22;4113:53;:::i;:::-;4103:63;;4059:117;3854:329;;;;:::o;4189:126::-;4226:7;4266:42;4259:5;4255:54;4244:65;;4189:126;;;:::o;4321:96::-;4358:7;4387:24;4405:5;4387:24;:::i;:::-;4376:35;;4321:96;;;:::o;4423:118::-;4510:24;4528:5;4510:24;:::i;:::-;4505:3;4498:37;4423:118;;:::o;4547:222::-;4640:4;4678:2;4667:9;4663:18;4655:26;;4691:71;4759:1;4748:9;4744:17;4735:6;4691:71;:::i;:::-;4547:222;;;;:::o;4775:122::-;4848:24;4866:5;4848:24;:::i;:::-;4841:5;4838:35;4828:63;;4887:1;4884;4877:12;4828:63;4775:122;:::o;4903:139::-;4949:5;4987:6;4974:20;4965:29;;5003:33;5030:5;5003:33;:::i;:::-;4903:139;;;;:::o;5048:474::-;5116:6;5124;5173:2;5161:9;5152:7;5148:23;5144:32;5141:119;;;5179:79;;:::i;:::-;5141:119;5299:1;5324:53;5369:7;5360:6;5349:9;5345:22;5324:53;:::i;:::-;5314:63;;5270:117;5426:2;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5397:118;5048:474;;;;;:::o;5528:118::-;5615:24;5633:5;5615:24;:::i;:::-;5610:3;5603:37;5528:118;;:::o;5652:222::-;5745:4;5783:2;5772:9;5768:18;5760:26;;5796:71;5864:1;5853:9;5849:17;5840:6;5796:71;:::i;:::-;5652:222;;;;:::o;5880:329::-;5939:6;5988:2;5976:9;5967:7;5963:23;5959:32;5956:119;;;5994:79;;:::i;:::-;5956:119;6114:1;6139:53;6184:7;6175:6;6164:9;6160:22;6139:53;:::i;:::-;6129:63;;6085:117;5880:329;;;;:::o;6215:619::-;6292:6;6300;6308;6357:2;6345:9;6336:7;6332:23;6328:32;6325:119;;;6363:79;;:::i;:::-;6325:119;6483:1;6508:53;6553:7;6544:6;6533:9;6529:22;6508:53;:::i;:::-;6498:63;;6454:117;6610:2;6636:53;6681:7;6672:6;6661:9;6657:22;6636:53;:::i;:::-;6626:63;;6581:118;6738:2;6764:53;6809:7;6800:6;6789:9;6785:22;6764:53;:::i;:::-;6754:63;;6709:118;6215:619;;;;;:::o;6840:114::-;6907:6;6941:5;6935:12;6925:22;;6840:114;;;:::o;6960:184::-;7059:11;7093:6;7088:3;7081:19;7133:4;7128:3;7124:14;7109:29;;6960:184;;;;:::o;7150:132::-;7217:4;7240:3;7232:11;;7270:4;7265:3;7261:14;7253:22;;7150:132;;;:::o;7288:108::-;7365:24;7383:5;7365:24;:::i;:::-;7360:3;7353:37;7288:108;;:::o;7402:179::-;7471:10;7492:46;7534:3;7526:6;7492:46;:::i;:::-;7570:4;7565:3;7561:14;7547:28;;7402:179;;;;:::o;7587:113::-;7657:4;7689;7684:3;7680:14;7672:22;;7587:113;;;:::o;7736:732::-;7855:3;7884:54;7932:5;7884:54;:::i;:::-;7954:86;8033:6;8028:3;7954:86;:::i;:::-;7947:93;;8064:56;8114:5;8064:56;:::i;:::-;8143:7;8174:1;8159:284;8184:6;8181:1;8178:13;8159:284;;;8260:6;8254:13;8287:63;8346:3;8331:13;8287:63;:::i;:::-;8280:70;;8373:60;8426:6;8373:60;:::i;:::-;8363:70;;8219:224;8206:1;8203;8199:9;8194:14;;8159:284;;;8163:14;8459:3;8452:10;;7860:608;;;7736:732;;;;:::o;8474:373::-;8617:4;8655:2;8644:9;8640:18;8632:26;;8704:9;8698:4;8694:20;8690:1;8679:9;8675:17;8668:47;8732:108;8835:4;8826:6;8732:108;:::i;:::-;8724:116;;8474:373;;;;:::o;8853:117::-;8962:1;8959;8952:12;8976:117;9085:1;9082;9075:12;9099:117;9208:1;9205;9198:12;9239:568;9312:8;9322:6;9372:3;9365:4;9357:6;9353:17;9349:27;9339:122;;9380:79;;:::i;:::-;9339:122;9493:6;9480:20;9470:30;;9523:18;9515:6;9512:30;9509:117;;;9545:79;;:::i;:::-;9509:117;9659:4;9651:6;9647:17;9635:29;;9713:3;9705:4;9697:6;9693:17;9683:8;9679:32;9676:41;9673:128;;;9720:79;;:::i;:::-;9673:128;9239:568;;;;;:::o;9813:559::-;9899:6;9907;9956:2;9944:9;9935:7;9931:23;9927:32;9924:119;;;9962:79;;:::i;:::-;9924:119;10110:1;10099:9;10095:17;10082:31;10140:18;10132:6;10129:30;10126:117;;;10162:79;;:::i;:::-;10126:117;10275:80;10347:7;10338:6;10327:9;10323:22;10275:80;:::i;:::-;10257:98;;;;10053:312;9813:559;;;;;:::o;10378:117::-;10487:1;10484;10477:12;10501:180;10549:77;10546:1;10539:88;10646:4;10643:1;10636:15;10670:4;10667:1;10660:15;10687:281;10770:27;10792:4;10770:27;:::i;:::-;10762:6;10758:40;10900:6;10888:10;10885:22;10864:18;10852:10;10849:34;10846:62;10843:88;;;10911:18;;:::i;:::-;10843:88;10951:10;10947:2;10940:22;10730:238;10687:281;;:::o;10974:129::-;11008:6;11035:20;;:::i;:::-;11025:30;;11064:33;11092:4;11084:6;11064:33;:::i;:::-;10974:129;;;:::o;11109:308::-;11171:4;11261:18;11253:6;11250:30;11247:56;;;11283:18;;:::i;:::-;11247:56;11321:29;11343:6;11321:29;:::i;:::-;11313:37;;11405:4;11399;11395:15;11387:23;;11109:308;;;:::o;11423:154::-;11507:6;11502:3;11497;11484:30;11569:1;11560:6;11555:3;11551:16;11544:27;11423:154;;;:::o;11583:412::-;11661:5;11686:66;11702:49;11744:6;11702:49;:::i;:::-;11686:66;:::i;:::-;11677:75;;11775:6;11768:5;11761:21;11813:4;11806:5;11802:16;11851:3;11842:6;11837:3;11833:16;11830:25;11827:112;;;11858:79;;:::i;:::-;11827:112;11948:41;11982:6;11977:3;11972;11948:41;:::i;:::-;11667:328;11583:412;;;;;:::o;12015:340::-;12071:5;12120:3;12113:4;12105:6;12101:17;12097:27;12087:122;;12128:79;;:::i;:::-;12087:122;12245:6;12232:20;12270:79;12345:3;12337:6;12330:4;12322:6;12318:17;12270:79;:::i;:::-;12261:88;;12077:278;12015:340;;;;:::o;12361:509::-;12430:6;12479:2;12467:9;12458:7;12454:23;12450:32;12447:119;;;12485:79;;:::i;:::-;12447:119;12633:1;12622:9;12618:17;12605:31;12663:18;12655:6;12652:30;12649:117;;;12685:79;;:::i;:::-;12649:117;12790:63;12845:7;12836:6;12825:9;12821:22;12790:63;:::i;:::-;12780:73;;12576:287;12361:509;;;;:::o;12876:468::-;12941:6;12949;12998:2;12986:9;12977:7;12973:23;12969:32;12966:119;;;13004:79;;:::i;:::-;12966:119;13124:1;13149:53;13194:7;13185:6;13174:9;13170:22;13149:53;:::i;:::-;13139:63;;13095:117;13251:2;13277:50;13319:7;13310:6;13299:9;13295:22;13277:50;:::i;:::-;13267:60;;13222:115;12876:468;;;;;:::o;13350:77::-;13387:7;13416:5;13405:16;;13350:77;;;:::o;13433:118::-;13520:24;13538:5;13520:24;:::i;:::-;13515:3;13508:37;13433:118;;:::o;13557:222::-;13650:4;13688:2;13677:9;13673:18;13665:26;;13701:71;13769:1;13758:9;13754:17;13745:6;13701:71;:::i;:::-;13557:222;;;;:::o;13785:307::-;13846:4;13936:18;13928:6;13925:30;13922:56;;;13958:18;;:::i;:::-;13922:56;13996:29;14018:6;13996:29;:::i;:::-;13988:37;;14080:4;14074;14070:15;14062:23;;13785:307;;;:::o;14098:410::-;14175:5;14200:65;14216:48;14257:6;14216:48;:::i;:::-;14200:65;:::i;:::-;14191:74;;14288:6;14281:5;14274:21;14326:4;14319:5;14315:16;14364:3;14355:6;14350:3;14346:16;14343:25;14340:112;;;14371:79;;:::i;:::-;14340:112;14461:41;14495:6;14490:3;14485;14461:41;:::i;:::-;14181:327;14098:410;;;;;:::o;14527:338::-;14582:5;14631:3;14624:4;14616:6;14612:17;14608:27;14598:122;;14639:79;;:::i;:::-;14598:122;14756:6;14743:20;14781:78;14855:3;14847:6;14840:4;14832:6;14828:17;14781:78;:::i;:::-;14772:87;;14588:277;14527:338;;;;:::o;14871:943::-;14966:6;14974;14982;14990;15039:3;15027:9;15018:7;15014:23;15010:33;15007:120;;;15046:79;;:::i;:::-;15007:120;15166:1;15191:53;15236:7;15227:6;15216:9;15212:22;15191:53;:::i;:::-;15181:63;;15137:117;15293:2;15319:53;15364:7;15355:6;15344:9;15340:22;15319:53;:::i;:::-;15309:63;;15264:118;15421:2;15447:53;15492:7;15483:6;15472:9;15468:22;15447:53;:::i;:::-;15437:63;;15392:118;15577:2;15566:9;15562:18;15549:32;15608:18;15600:6;15597:30;15594:117;;;15630:79;;:::i;:::-;15594:117;15735:62;15789:7;15780:6;15769:9;15765:22;15735:62;:::i;:::-;15725:72;;15520:287;14871:943;;;;;;;:::o;15820:122::-;15893:24;15911:5;15893:24;:::i;:::-;15886:5;15883:35;15873:63;;15932:1;15929;15922:12;15873:63;15820:122;:::o;15948:139::-;15994:5;16032:6;16019:20;16010:29;;16048:33;16075:5;16048:33;:::i;:::-;15948:139;;;;:::o;16093:329::-;16152:6;16201:2;16189:9;16180:7;16176:23;16172:32;16169:119;;;16207:79;;:::i;:::-;16169:119;16327:1;16352:53;16397:7;16388:6;16377:9;16373:22;16352:53;:::i;:::-;16342:63;;16298:117;16093:329;;;;:::o;16428:474::-;16496:6;16504;16553:2;16541:9;16532:7;16528:23;16524:32;16521:119;;;16559:79;;:::i;:::-;16521:119;16679:1;16704:53;16749:7;16740:6;16729:9;16725:22;16704:53;:::i;:::-;16694:63;;16650:117;16806:2;16832:53;16877:7;16868:6;16857:9;16853:22;16832:53;:::i;:::-;16822:63;;16777:118;16428:474;;;;;:::o;16908:180::-;16956:77;16953:1;16946:88;17053:4;17050:1;17043:15;17077:4;17074:1;17067:15;17094:320;17138:6;17175:1;17169:4;17165:12;17155:22;;17222:1;17216:4;17212:12;17243:18;17233:81;;17299:4;17291:6;17287:17;17277:27;;17233:81;17361:2;17353:6;17350:14;17330:18;17327:38;17324:84;;;17380:18;;:::i;:::-;17324:84;17145:269;17094:320;;;:::o;17420:220::-;17560:34;17556:1;17548:6;17544:14;17537:58;17629:3;17624:2;17616:6;17612:15;17605:28;17420:220;:::o;17646:366::-;17788:3;17809:67;17873:2;17868:3;17809:67;:::i;:::-;17802:74;;17885:93;17974:3;17885:93;:::i;:::-;18003:2;17998:3;17994:12;17987:19;;17646:366;;;:::o;18018:419::-;18184:4;18222:2;18211:9;18207:18;18199:26;;18271:9;18265:4;18261:20;18257:1;18246:9;18242:17;18235:47;18299:131;18425:4;18299:131;:::i;:::-;18291:139;;18018:419;;;:::o;18443:249::-;18583:34;18579:1;18571:6;18567:14;18560:58;18652:32;18647:2;18639:6;18635:15;18628:57;18443:249;:::o;18698:366::-;18840:3;18861:67;18925:2;18920:3;18861:67;:::i;:::-;18854:74;;18937:93;19026:3;18937:93;:::i;:::-;19055:2;19050:3;19046:12;19039:19;;18698:366;;;:::o;19070:419::-;19236:4;19274:2;19263:9;19259:18;19251:26;;19323:9;19317:4;19313:20;19309:1;19298:9;19294:17;19287:47;19351:131;19477:4;19351:131;:::i;:::-;19343:139;;19070:419;;;:::o;19495:233::-;19635:34;19631:1;19623:6;19619:14;19612:58;19704:16;19699:2;19691:6;19687:15;19680:41;19495:233;:::o;19734:366::-;19876:3;19897:67;19961:2;19956:3;19897:67;:::i;:::-;19890:74;;19973:93;20062:3;19973:93;:::i;:::-;20091:2;20086:3;20082:12;20075:19;;19734:366;;;:::o;20106:419::-;20272:4;20310:2;20299:9;20295:18;20287:26;;20359:9;20353:4;20349:20;20345:1;20334:9;20330:17;20323:47;20387:131;20513:4;20387:131;:::i;:::-;20379:139;;20106:419;;;:::o;20531:230::-;20671:34;20667:1;20659:6;20655:14;20648:58;20740:13;20735:2;20727:6;20723:15;20716:38;20531:230;:::o;20767:366::-;20909:3;20930:67;20994:2;20989:3;20930:67;:::i;:::-;20923:74;;21006:93;21095:3;21006:93;:::i;:::-;21124:2;21119:3;21115:12;21108:19;;20767:366;;;:::o;21139:419::-;21305:4;21343:2;21332:9;21328:18;21320:26;;21392:9;21386:4;21382:20;21378:1;21367:9;21363:17;21356:47;21420:131;21546:4;21420:131;:::i;:::-;21412:139;;21139:419;;;:::o;21564:147::-;21665:11;21702:3;21687:18;;21564:147;;;;:::o;21717:114::-;;:::o;21837:398::-;21996:3;22017:83;22098:1;22093:3;22017:83;:::i;:::-;22010:90;;22109:93;22198:3;22109:93;:::i;:::-;22227:1;22222:3;22218:11;22211:18;;21837:398;;;:::o;22241:379::-;22425:3;22447:147;22590:3;22447:147;:::i;:::-;22440:154;;22611:3;22604:10;;22241:379;;;:::o;22626:180::-;22674:77;22671:1;22664:88;22771:4;22768:1;22761:15;22795:4;22792:1;22785:15;22812:180;22860:77;22857:1;22850:88;22957:4;22954:1;22947:15;22981:4;22978:1;22971:15;22998:233;23037:3;23060:24;23078:5;23060:24;:::i;:::-;23051:33;;23106:66;23099:5;23096:77;23093:103;;;23176:18;;:::i;:::-;23093:103;23223:1;23216:5;23212:13;23205:20;;22998:233;;;:::o;23237:94::-;23270:8;23318:5;23314:2;23310:14;23289:35;;23237:94;;;:::o;23337:::-;23376:7;23405:20;23419:5;23405:20;:::i;:::-;23394:31;;23337:94;;;:::o;23437:100::-;23476:7;23505:26;23525:5;23505:26;:::i;:::-;23494:37;;23437:100;;;:::o;23543:157::-;23648:45;23668:24;23686:5;23668:24;:::i;:::-;23648:45;:::i;:::-;23643:3;23636:58;23543:157;;:::o;23706:256::-;23818:3;23833:75;23904:3;23895:6;23833:75;:::i;:::-;23933:2;23928:3;23924:12;23917:19;;23953:3;23946:10;;23706:256;;;;:::o;23968:180::-;24108:32;24104:1;24096:6;24092:14;24085:56;23968:180;:::o;24154:366::-;24296:3;24317:67;24381:2;24376:3;24317:67;:::i;:::-;24310:74;;24393:93;24482:3;24393:93;:::i;:::-;24511:2;24506:3;24502:12;24495:19;;24154:366;;;:::o;24526:419::-;24692:4;24730:2;24719:9;24715:18;24707:26;;24779:9;24773:4;24769:20;24765:1;24754:9;24750:17;24743:47;24807:131;24933:4;24807:131;:::i;:::-;24799:139;;24526:419;;;:::o;24951:348::-;24991:7;25014:20;25032:1;25014:20;:::i;:::-;25009:25;;25048:20;25066:1;25048:20;:::i;:::-;25043:25;;25236:1;25168:66;25164:74;25161:1;25158:81;25153:1;25146:9;25139:17;25135:105;25132:131;;;25243:18;;:::i;:::-;25132:131;25291:1;25288;25284:9;25273:20;;24951:348;;;;:::o;25305:174::-;25445:26;25441:1;25433:6;25429:14;25422:50;25305:174;:::o;25485:366::-;25627:3;25648:67;25712:2;25707:3;25648:67;:::i;:::-;25641:74;;25724:93;25813:3;25724:93;:::i;:::-;25842:2;25837:3;25833:12;25826:19;;25485:366;;;:::o;25857:419::-;26023:4;26061:2;26050:9;26046:18;26038:26;;26110:9;26104:4;26100:20;26096:1;26085:9;26081:17;26074:47;26138:131;26264:4;26138:131;:::i;:::-;26130:139;;25857:419;;;:::o;26282:305::-;26322:3;26341:20;26359:1;26341:20;:::i;:::-;26336:25;;26375:20;26393:1;26375:20;:::i;:::-;26370:25;;26529:1;26461:66;26457:74;26454:1;26451:81;26448:107;;;26535:18;;:::i;:::-;26448:107;26579:1;26576;26572:9;26565:16;;26282:305;;;;:::o;26593:172::-;26733:24;26729:1;26721:6;26717:14;26710:48;26593:172;:::o;26771:366::-;26913:3;26934:67;26998:2;26993:3;26934:67;:::i;:::-;26927:74;;27010:93;27099:3;27010:93;:::i;:::-;27128:2;27123:3;27119:12;27112:19;;26771:366;;;:::o;27143:419::-;27309:4;27347:2;27336:9;27332:18;27324:26;;27396:9;27390:4;27386:20;27382:1;27371:9;27367:17;27360:47;27424:131;27550:4;27424:131;:::i;:::-;27416:139;;27143:419;;;:::o;27568:231::-;27708:34;27704:1;27696:6;27692:14;27685:58;27777:14;27772:2;27764:6;27760:15;27753:39;27568:231;:::o;27805:366::-;27947:3;27968:67;28032:2;28027:3;27968:67;:::i;:::-;27961:74;;28044:93;28133:3;28044:93;:::i;:::-;28162:2;28157:3;28153:12;28146:19;;27805:366;;;:::o;28177:419::-;28343:4;28381:2;28370:9;28366:18;28358:26;;28430:9;28424:4;28420:20;28416:1;28405:9;28401:17;28394:47;28458:131;28584:4;28458:131;:::i;:::-;28450:139;;28177:419;;;:::o;28602:174::-;28742:26;28738:1;28730:6;28726:14;28719:50;28602:174;:::o;28782:366::-;28924:3;28945:67;29009:2;29004:3;28945:67;:::i;:::-;28938:74;;29021:93;29110:3;29021:93;:::i;:::-;29139:2;29134:3;29130:12;29123:19;;28782:366;;;:::o;29154:419::-;29320:4;29358:2;29347:9;29343:18;29335:26;;29407:9;29401:4;29397:20;29393:1;29382:9;29378:17;29371:47;29435:131;29561:4;29435:131;:::i;:::-;29427:139;;29154:419;;;:::o;29579:228::-;29719:34;29715:1;29707:6;29703:14;29696:58;29788:11;29783:2;29775:6;29771:15;29764:36;29579:228;:::o;29813:366::-;29955:3;29976:67;30040:2;30035:3;29976:67;:::i;:::-;29969:74;;30052:93;30141:3;30052:93;:::i;:::-;30170:2;30165:3;30161:12;30154:19;;29813:366;;;:::o;30185:419::-;30351:4;30389:2;30378:9;30374:18;30366:26;;30438:9;30432:4;30428:20;30424:1;30413:9;30409:17;30402:47;30466:131;30592:4;30466:131;:::i;:::-;30458:139;;30185:419;;;:::o;30610:172::-;30750:24;30746:1;30738:6;30734:14;30727:48;30610:172;:::o;30788:366::-;30930:3;30951:67;31015:2;31010:3;30951:67;:::i;:::-;30944:74;;31027:93;31116:3;31027:93;:::i;:::-;31145:2;31140:3;31136:12;31129:19;;30788:366;;;:::o;31160:419::-;31326:4;31364:2;31353:9;31349:18;31341:26;;31413:9;31407:4;31403:20;31399:1;31388:9;31384:17;31377:47;31441:131;31567:4;31441:131;:::i;:::-;31433:139;;31160:419;;;:::o;31585:177::-;31725:29;31721:1;31713:6;31709:14;31702:53;31585:177;:::o;31768:366::-;31910:3;31931:67;31995:2;31990:3;31931:67;:::i;:::-;31924:74;;32007:93;32096:3;32007:93;:::i;:::-;32125:2;32120:3;32116:12;32109:19;;31768:366;;;:::o;32140:419::-;32306:4;32344:2;32333:9;32329:18;32321:26;;32393:9;32387:4;32383:20;32379:1;32368:9;32364:17;32357:47;32421:131;32547:4;32421:131;:::i;:::-;32413:139;;32140:419;;;:::o;32565:223::-;32705:34;32701:1;32693:6;32689:14;32682:58;32774:6;32769:2;32761:6;32757:15;32750:31;32565:223;:::o;32794:366::-;32936:3;32957:67;33021:2;33016:3;32957:67;:::i;:::-;32950:74;;33033:93;33122:3;33033:93;:::i;:::-;33151:2;33146:3;33142:12;33135:19;;32794:366;;;:::o;33166:419::-;33332:4;33370:2;33359:9;33355:18;33347:26;;33419:9;33413:4;33409:20;33405:1;33394:9;33390:17;33383:47;33447:131;33573:4;33447:131;:::i;:::-;33439:139;;33166:419;;;:::o;33591:168::-;33731:20;33727:1;33719:6;33715:14;33708:44;33591:168;:::o;33765:366::-;33907:3;33928:67;33992:2;33987:3;33928:67;:::i;:::-;33921:74;;34004:93;34093:3;34004:93;:::i;:::-;34122:2;34117:3;34113:12;34106:19;;33765:366;;;:::o;34137:419::-;34303:4;34341:2;34330:9;34326:18;34318:26;;34390:9;34384:4;34380:20;34376:1;34365:9;34361:17;34354:47;34418:131;34544:4;34418:131;:::i;:::-;34410:139;;34137:419;;;:::o;34562:234::-;34702:34;34698:1;34690:6;34686:14;34679:58;34771:17;34766:2;34758:6;34754:15;34747:42;34562:234;:::o;34802:366::-;34944:3;34965:67;35029:2;35024:3;34965:67;:::i;:::-;34958:74;;35041:93;35130:3;35041:93;:::i;:::-;35159:2;35154:3;35150:12;35143:19;;34802:366;;;:::o;35174:419::-;35340:4;35378:2;35367:9;35363:18;35355:26;;35427:9;35421:4;35417:20;35413:1;35402:9;35398:17;35391:47;35455:131;35581:4;35455:131;:::i;:::-;35447:139;;35174:419;;;:::o;35599:148::-;35701:11;35738:3;35723:18;;35599:148;;;;:::o;35753:377::-;35859:3;35887:39;35920:5;35887:39;:::i;:::-;35942:89;36024:6;36019:3;35942:89;:::i;:::-;35935:96;;36040:52;36085:6;36080:3;36073:4;36066:5;36062:16;36040:52;:::i;:::-;36117:6;36112:3;36108:16;36101:23;;35863:267;35753:377;;;;:::o;36136:141::-;36185:4;36208:3;36200:11;;36231:3;36228:1;36221:14;36265:4;36262:1;36252:18;36244:26;;36136:141;;;:::o;36307:845::-;36410:3;36447:5;36441:12;36476:36;36502:9;36476:36;:::i;:::-;36528:89;36610:6;36605:3;36528:89;:::i;:::-;36521:96;;36648:1;36637:9;36633:17;36664:1;36659:137;;;;36810:1;36805:341;;;;36626:520;;36659:137;36743:4;36739:9;36728;36724:25;36719:3;36712:38;36779:6;36774:3;36770:16;36763:23;;36659:137;;36805:341;36872:38;36904:5;36872:38;:::i;:::-;36932:1;36946:154;36960:6;36957:1;36954:13;36946:154;;;37034:7;37028:14;37024:1;37019:3;37015:11;37008:35;37084:1;37075:7;37071:15;37060:26;;36982:4;36979:1;36975:12;36970:17;;36946:154;;;37129:6;37124:3;37120:16;37113:23;;36812:334;;36626:520;;36414:738;;36307:845;;;;:::o;37158:589::-;37383:3;37405:95;37496:3;37487:6;37405:95;:::i;:::-;37398:102;;37517:95;37608:3;37599:6;37517:95;:::i;:::-;37510:102;;37629:92;37717:3;37708:6;37629:92;:::i;:::-;37622:99;;37738:3;37731:10;;37158:589;;;;;;:::o;37753:225::-;37893:34;37889:1;37881:6;37877:14;37870:58;37962:8;37957:2;37949:6;37945:15;37938:33;37753:225;:::o;37984:366::-;38126:3;38147:67;38211:2;38206:3;38147:67;:::i;:::-;38140:74;;38223:93;38312:3;38223:93;:::i;:::-;38341:2;38336:3;38332:12;38325:19;;37984:366;;;:::o;38356:419::-;38522:4;38560:2;38549:9;38545:18;38537:26;;38609:9;38603:4;38599:20;38595:1;38584:9;38580:17;38573:47;38637:131;38763:4;38637:131;:::i;:::-;38629:139;;38356:419;;;:::o;38781:182::-;38921:34;38917:1;38909:6;38905:14;38898:58;38781:182;:::o;38969:366::-;39111:3;39132:67;39196:2;39191:3;39132:67;:::i;:::-;39125:74;;39208:93;39297:3;39208:93;:::i;:::-;39326:2;39321:3;39317:12;39310:19;;38969:366;;;:::o;39341:419::-;39507:4;39545:2;39534:9;39530:18;39522:26;;39594:9;39588:4;39584:20;39580:1;39569:9;39565:17;39558:47;39622:131;39748:4;39622:131;:::i;:::-;39614:139;;39341:419;;;:::o;39766:224::-;39906:34;39902:1;39894:6;39890:14;39883:58;39975:7;39970:2;39962:6;39958:15;39951:32;39766:224;:::o;39996:366::-;40138:3;40159:67;40223:2;40218:3;40159:67;:::i;:::-;40152:74;;40235:93;40324:3;40235:93;:::i;:::-;40353:2;40348:3;40344:12;40337:19;;39996:366;;;:::o;40368:419::-;40534:4;40572:2;40561:9;40557:18;40549:26;;40621:9;40615:4;40611:20;40607:1;40596:9;40592:17;40585:47;40649:131;40775:4;40649:131;:::i;:::-;40641:139;;40368:419;;;:::o;40793:223::-;40933:34;40929:1;40921:6;40917:14;40910:58;41002:6;40997:2;40989:6;40985:15;40978:31;40793:223;:::o;41022:366::-;41164:3;41185:67;41249:2;41244:3;41185:67;:::i;:::-;41178:74;;41261:93;41350:3;41261:93;:::i;:::-;41379:2;41374:3;41370:12;41363:19;;41022:366;;;:::o;41394:419::-;41560:4;41598:2;41587:9;41583:18;41575:26;;41647:9;41641:4;41637:20;41633:1;41622:9;41618:17;41611:47;41675:131;41801:4;41675:131;:::i;:::-;41667:139;;41394:419;;;:::o;41819:191::-;41859:4;41879:20;41897:1;41879:20;:::i;:::-;41874:25;;41913:20;41931:1;41913:20;:::i;:::-;41908:25;;41952:1;41949;41946:8;41943:34;;;41957:18;;:::i;:::-;41943:34;42002:1;41999;41995:9;41987:17;;41819:191;;;;:::o;42016:175::-;42156:27;42152:1;42144:6;42140:14;42133:51;42016:175;:::o;42197:366::-;42339:3;42360:67;42424:2;42419:3;42360:67;:::i;:::-;42353:74;;42436:93;42525:3;42436:93;:::i;:::-;42554:2;42549:3;42545:12;42538:19;;42197:366;;;:::o;42569:419::-;42735:4;42773:2;42762:9;42758:18;42750:26;;42822:9;42816:4;42812:20;42808:1;42797:9;42793:17;42786:47;42850:131;42976:4;42850:131;:::i;:::-;42842:139;;42569:419;;;:::o;42994:237::-;43134:34;43130:1;43122:6;43118:14;43111:58;43203:20;43198:2;43190:6;43186:15;43179:45;42994:237;:::o;43237:366::-;43379:3;43400:67;43464:2;43459:3;43400:67;:::i;:::-;43393:74;;43476:93;43565:3;43476:93;:::i;:::-;43594:2;43589:3;43585:12;43578:19;;43237:366;;;:::o;43609:419::-;43775:4;43813:2;43802:9;43798:18;43790:26;;43862:9;43856:4;43852:20;43848:1;43837:9;43833:17;43826:47;43890:131;44016:4;43890:131;:::i;:::-;43882:139;;43609:419;;;:::o;44034:180::-;44082:77;44079:1;44072:88;44179:4;44176:1;44169:15;44203:4;44200:1;44193:15;44220:185;44260:1;44277:20;44295:1;44277:20;:::i;:::-;44272:25;;44311:20;44329:1;44311:20;:::i;:::-;44306:25;;44350:1;44340:35;;44355:18;;:::i;:::-;44340:35;44397:1;44394;44390:9;44385:14;;44220:185;;;;:::o;44411:176::-;44443:1;44460:20;44478:1;44460:20;:::i;:::-;44455:25;;44494:20;44512:1;44494:20;:::i;:::-;44489:25;;44533:1;44523:35;;44538:18;;:::i;:::-;44523:35;44579:1;44576;44572:9;44567:14;;44411:176;;;;:::o;44593:98::-;44644:6;44678:5;44672:12;44662:22;;44593:98;;;:::o;44697:168::-;44780:11;44814:6;44809:3;44802:19;44854:4;44849:3;44845:14;44830:29;;44697:168;;;;:::o;44871:360::-;44957:3;44985:38;45017:5;44985:38;:::i;:::-;45039:70;45102:6;45097:3;45039:70;:::i;:::-;45032:77;;45118:52;45163:6;45158:3;45151:4;45144:5;45140:16;45118:52;:::i;:::-;45195:29;45217:6;45195:29;:::i;:::-;45190:3;45186:39;45179:46;;44961:270;44871:360;;;;:::o;45237:640::-;45432:4;45470:3;45459:9;45455:19;45447:27;;45484:71;45552:1;45541:9;45537:17;45528:6;45484:71;:::i;:::-;45565:72;45633:2;45622:9;45618:18;45609:6;45565:72;:::i;:::-;45647;45715:2;45704:9;45700:18;45691:6;45647:72;:::i;:::-;45766:9;45760:4;45756:20;45751:2;45740:9;45736:18;45729:48;45794:76;45865:4;45856:6;45794:76;:::i;:::-;45786:84;;45237:640;;;;;;;:::o;45883:141::-;45939:5;45970:6;45964:13;45955:22;;45986:32;46012:5;45986:32;:::i;:::-;45883:141;;;;:::o;46030:349::-;46099:6;46148:2;46136:9;46127:7;46123:23;46119:32;46116:119;;;46154:79;;:::i;:::-;46116:119;46274:1;46299:63;46354:7;46345:6;46334:9;46330:22;46299:63;:::i;:::-;46289:73;;46245:127;46030:349;;;;:::o;46385:180::-;46433:77;46430:1;46423:88;46530:4;46527:1;46520:15;46554:4;46551:1;46544:15;46571:182;46711:34;46707:1;46699:6;46695:14;46688:58;46571:182;:::o;46759:366::-;46901:3;46922:67;46986:2;46981:3;46922:67;:::i;:::-;46915:74;;46998:93;47087:3;46998:93;:::i;:::-;47116:2;47111:3;47107:12;47100:19;;46759:366;;;:::o;47131:419::-;47297:4;47335:2;47324:9;47320:18;47312:26;;47384:9;47378:4;47374:20;47370:1;47359:9;47355:17;47348:47;47412:131;47538:4;47412:131;:::i;:::-;47404:139;;47131:419;;;:::o;47556:178::-;47696:30;47692:1;47684:6;47680:14;47673:54;47556:178;:::o;47740:366::-;47882:3;47903:67;47967:2;47962:3;47903:67;:::i;:::-;47896:74;;47979:93;48068:3;47979:93;:::i;:::-;48097:2;48092:3;48088:12;48081:19;;47740:366;;;:::o;48112:419::-;48278:4;48316:2;48305:9;48301:18;48293:26;;48365:9;48359:4;48355:20;48351:1;48340:9;48336:17;48329:47;48393:131;48519:4;48393:131;:::i;:::-;48385:139;;48112:419;;;:::o
Swarm Source
ipfs://5893218bf02d9509567150533ee1b7bbde4dd10848bd5887a6b3b28b1d635928