ERC-721
Overview
Max Total Supply
698 NMD
Holders
47
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
240 NMDLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
Metanomads
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-13 */ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.4; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } /** * @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; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. * * 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 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++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } /** * @dev Interface of an ERC721A compliant contract. */ interface IERC721A { /** * The caller must own the token or be an approved operator. */ error ApprovalCallerNotOwnerNorApproved(); /** * The token does not exist. */ error ApprovalQueryForNonexistentToken(); /** * The caller cannot approve to their own address. */ error ApproveToCaller(); /** * The caller cannot approve to the current owner. */ error ApprovalToCurrentOwner(); /** * Cannot query the balance for the zero address. */ error BalanceQueryForZeroAddress(); /** * Cannot mint to the zero address. */ error MintToZeroAddress(); /** * The quantity of tokens minted must be more than zero. */ error MintZeroQuantity(); /** * The token does not exist. */ error OwnerQueryForNonexistentToken(); /** * The caller must own the token or be an approved operator. */ error TransferCallerNotOwnerNorApproved(); /** * The token must be owned by `from`. */ error TransferFromIncorrectOwner(); /** * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface. */ error TransferToNonERC721ReceiverImplementer(); /** * Cannot transfer to the zero address. */ error TransferToZeroAddress(); /** * The token does not exist. */ error URIQueryForNonexistentToken(); struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } /** * @dev Returns the total amount of tokens stored by the contract. * * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens. */ function totalSupply() external view returns (uint256); // ============================== // 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); // ============================== // IERC721 // ============================== /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); // ============================== // IERC721Metadata // ============================== /** * @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); } /** * @dev ERC721 token receiver interface. */ interface ERC721A__IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is IERC721A { // Mask of an entry in packed address data. uint256 private constant BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1; // The bit position of `numberMinted` in packed address data. uint256 private constant BITPOS_NUMBER_MINTED = 64; // The bit position of `numberBurned` in packed address data. uint256 private constant BITPOS_NUMBER_BURNED = 128; // The bit position of `aux` in packed address data. uint256 private constant BITPOS_AUX = 192; // Mask of all 256 bits in packed address data except the 64 bits for `aux`. uint256 private constant BITMASK_AUX_COMPLEMENT = (1 << 192) - 1; // The bit position of `startTimestamp` in packed ownership. uint256 private constant BITPOS_START_TIMESTAMP = 160; // The bit mask of the `burned` bit in packed ownership. uint256 private constant BITMASK_BURNED = 1 << 224; // The bit position of the `nextInitialized` bit in packed ownership. uint256 private constant BITPOS_NEXT_INITIALIZED = 225; // The bit mask of the `nextInitialized` bit in packed ownership. uint256 private constant BITMASK_NEXT_INITIALIZED = 1 << 225; // The tokenId of the next token to be minted. uint256 private _currentIndex; // The number of tokens burned. uint256 private _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. // See `_packedOwnershipOf` implementation for details. // // Bits Layout: // - [0..159] `addr` // - [160..223] `startTimestamp` // - [224] `burned` // - [225] `nextInitialized` mapping(uint256 => uint256) private _packedOwnerships; // Mapping owner address to address data. // // Bits Layout: // - [0..63] `balance` // - [64..127] `numberMinted` // - [128..191] `numberBurned` // - [192..255] `aux` mapping(address => uint256) private _packedAddressData; // Mapping from token ID to approved address. mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * @dev Returns the starting token ID. * To change the starting token ID, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev Returns the next token ID to be minted. */ function _nextTokenId() internal view returns (uint256) { return _currentIndex; } /** * @dev Returns the total number of tokens in existence. * Burned tokens will reduce the count. * To get the total number of tokens minted, please see `_totalMinted`. */ function totalSupply() public view override returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than `_currentIndex - _startTokenId()` times. unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * @dev Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to `_startTokenId()` unchecked { return _currentIndex - _startTokenId(); } } /** * @dev Returns the total number of tokens burned. */ function _totalBurned() internal view returns (uint256) { return _burnCounter; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { // The interface IDs are constants representing the first 4 bytes of the XOR of // all function selectors in the interface. See: https://eips.ethereum.org/EIPS/eip-165 // e.g. `bytes4(i.functionA.selector ^ i.functionB.selector ^ ...)` return interfaceId == 0x01ffc9a7 || // ERC165 interface ID for ERC165. interfaceId == 0x80ac58cd || // ERC165 interface ID for ERC721. interfaceId == 0x5b5e139f; // ERC165 interface ID for ERC721Metadata. } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return _packedAddressData[owner] & BITMASK_ADDRESS_DATA_ENTRY; } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> BITPOS_NUMBER_MINTED) & BITMASK_ADDRESS_DATA_ENTRY; } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> BITPOS_NUMBER_BURNED) & BITMASK_ADDRESS_DATA_ENTRY; } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return uint64(_packedAddressData[owner] >> BITPOS_AUX); } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { uint256 packed = _packedAddressData[owner]; uint256 auxCasted; assembly { // Cast aux without masking. auxCasted := aux } packed = (packed & BITMASK_AUX_COMPLEMENT) | (auxCasted << BITPOS_AUX); _packedAddressData[owner] = packed; } /** * Returns the packed ownership data of `tokenId`. */ function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr) if (curr < _currentIndex) { uint256 packed = _packedOwnerships[curr]; // If not burned. if (packed & BITMASK_BURNED == 0) { // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. // // We can directly compare the packed value. // If the address is zero, packed is zero. while (packed == 0) { packed = _packedOwnerships[--curr]; } return packed; } } } revert OwnerQueryForNonexistentToken(); } /** * Returns the unpacked `TokenOwnership` struct from `packed`. */ function _unpackedOwnership(uint256 packed) private pure returns (TokenOwnership memory ownership) { ownership.addr = address(uint160(packed)); ownership.startTimestamp = uint64(packed >> BITPOS_START_TIMESTAMP); ownership.burned = packed & BITMASK_BURNED != 0; } /** * Returns the unpacked `TokenOwnership` struct at `index`. */ function _ownershipAt(uint256 index) internal view returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnerships[index]); } /** * @dev Initializes the ownership slot minted at `index` for efficiency purposes. */ function _initializeOwnershipAt(uint256 index) internal { if (_packedOwnerships[index] == 0) { _packedOwnerships[index] = _packedOwnershipOf(index); } } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnershipOf(tokenId)); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return address(uint160(_packedOwnershipOf(tokenId))); } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, _toString(tokenId))) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev Casts the address to uint256 without masking. */ function _addressToUint256(address value) private pure returns (uint256 result) { assembly { result := value } } /** * @dev Casts the boolean to uint256 without branching. */ function _boolToUint256(bool value) private pure returns (uint256 result) { assembly { result := value } } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = address(uint160(_packedOwnershipOf(tokenId))); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSenderERC721A() != owner) if (!isApprovedForAll(owner, _msgSenderERC721A())) { revert ApprovalCallerNotOwnerNorApproved(); } _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSenderERC721A()) revert ApproveToCaller(); _operatorApprovals[_msgSenderERC721A()][operator] = approved; emit ApprovalForAll(_msgSenderERC721A(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { _transfer(from, to, tokenId); if (to.code.length != 0) if (!_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && // If within bounds, _packedOwnerships[tokenId] & BITMASK_BURNED == 0; // and not burned. } /** * @dev Equivalent to `_safeMint(to, quantity, '')`. */ function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement * {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { // Updates: // - `balance += quantity`. // - `numberMinted += quantity`. // // We can directly add to the balance and number minted. _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1); // Updates: // - `address` to the owner. // - `startTimestamp` to the timestamp of minting. // - `burned` to `false`. // - `nextInitialized` to `quantity == 1`. _packedOwnerships[startTokenId] = _addressToUint256(to) | (block.timestamp << BITPOS_START_TIMESTAMP) | (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (to.code.length != 0) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex < end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex < end); } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint(address to, uint256 quantity) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { // Updates: // - `balance += quantity`. // - `numberMinted += quantity`. // // We can directly add to the balance and number minted. _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1); // Updates: // - `address` to the owner. // - `startTimestamp` to the timestamp of minting. // - `burned` to `false`. // - `nextInitialized` to `quantity == 1`. _packedOwnerships[startTokenId] = _addressToUint256(to) | (block.timestamp << BITPOS_START_TIMESTAMP) | (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex < end); _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner(); bool isApprovedOrOwner = (_msgSenderERC721A() == from || isApprovedForAll(from, _msgSenderERC721A()) || getApproved(tokenId) == _msgSenderERC721A()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner. delete _tokenApprovals[tokenId]; // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { // We can directly increment and decrement the balances. --_packedAddressData[from]; // Updates: `balance -= 1`. ++_packedAddressData[to]; // Updates: `balance += 1`. // Updates: // - `address` to the next owner. // - `startTimestamp` to the timestamp of transfering. // - `burned` to `false`. // - `nextInitialized` to `true`. _packedOwnerships[tokenId] = _addressToUint256(to) | (block.timestamp << BITPOS_START_TIMESTAMP) | BITMASK_NEXT_INITIALIZED; // If the next slot may not have been initialized (i.e. `nextInitialized == false`) . if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; // If the next slot's address is zero and not burned (i.e. packed value is zero). if (_packedOwnerships[nextTokenId] == 0) { // If the next slot is within bounds. if (nextTokenId != _currentIndex) { // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`. _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Equivalent to `_burn(tokenId, false)`. */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); address from = address(uint160(prevOwnershipPacked)); if (approvalCheck) { bool isApprovedOrOwner = (_msgSenderERC721A() == from || isApprovedForAll(from, _msgSenderERC721A()) || getApproved(tokenId) == _msgSenderERC721A()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner. delete _tokenApprovals[tokenId]; // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { // Updates: // - `balance -= 1`. // - `numberBurned += 1`. // // We can directly decrement the balance, and increment the number burned. // This is equivalent to `packed -= 1; packed += 1 << BITPOS_NUMBER_BURNED;`. _packedAddressData[from] += (1 << BITPOS_NUMBER_BURNED) - 1; // Updates: // - `address` to the last owner. // - `startTimestamp` to the timestamp of burning. // - `burned` to `true`. // - `nextInitialized` to `true`. _packedOwnerships[tokenId] = _addressToUint256(from) | (block.timestamp << BITPOS_START_TIMESTAMP) | BITMASK_BURNED | BITMASK_NEXT_INITIALIZED; // If the next slot may not have been initialized (i.e. `nextInitialized == false`) . if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; // If the next slot's address is zero and not burned (i.e. packed value is zero). if (_packedOwnerships[nextTokenId] == 0) { // If the next slot is within bounds. if (nextTokenId != _currentIndex) { // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`. _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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 _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try ERC721A__IERC721Receiver(to).onERC721Received(_msgSenderERC721A(), from, tokenId, _data) returns ( bytes4 retval ) { return retval == ERC721A__IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Returns the message sender (defaults to `msg.sender`). * * If you are writing GSN compatible contracts, you need to override this function. */ function _msgSenderERC721A() internal view virtual returns (address) { return msg.sender; } /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function _toString(uint256 value) internal pure returns (string memory ptr) { assembly { // The maximum value of a uint256 contains 78 digits (1 byte per digit), // but we allocate 128 bytes to keep the free memory pointer 32-byte word aliged. // We will need 1 32-byte word to store the length, // and 3 32-byte words to store a maximum of 78 digits. Total: 32 + 3 * 32 = 128. ptr := add(mload(0x40), 128) // Update the free memory pointer to allocate. mstore(0x40, ptr) // Cache the end of the memory to calculate the length later. let end := ptr // We write the string from the rightmost digit to the leftmost digit. // The following is essentially a do-while loop that also handles the zero case. // Costs a bit more than early returning for the zero case, // but cheaper in terms of deployment and overall runtime costs. for { // Initialize and perform the first pass without check. let temp := value // Move the pointer 1 byte leftwards to point to an empty character slot. ptr := sub(ptr, 1) // Write the character to the pointer. 48 is the ASCII index of '0'. mstore8(ptr, add(48, mod(temp, 10))) temp := div(temp, 10) } temp { // Keep dividing `temp` until zero. temp := div(temp, 10) } { // Body of the for loop. ptr := sub(ptr, 1) mstore8(ptr, add(48, mod(temp, 10))) } let length := sub(end, ptr) // Move the pointer 32 bytes leftwards to make room for the length. ptr := sub(ptr, 32) // Store the length. mstore(ptr, length) } } } error SaleNotStarted(); error ZeroOrMaxMintAmountReached(); error SoldOut(); error InsufficientFunds(); error InvalidProof(); error MaxNFTPerWallet(); contract Metanomads is ERC721A, Ownable, ReentrancyGuard { using Strings for uint256; bytes32 public root; // Sale data enum Sale{NON, WHITELIST, PUBLIC} Sale public sale; uint256 public immutable whitelistCost = 0.05 ether; uint256 public immutable publicCost = 0.065 ether; uint256 public immutable maxSupply = 2000; // change this value uint256 public airDropAmount = 50; uint256 public immutable maxNFTPerWallet = 100; uint256 public immutable maxBatchSize = 10; string public baseExtension = ".json"; bool public revealed = false; string public baseURI; constructor( string memory _name, string memory _symbol, string memory _uri ) ERC721A(_name, _symbol) { baseURI = _uri; } modifier callerIsUser() { require(tx.origin == msg.sender, "The caller is another contract"); _; } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function mint(uint256 _mintAmount, bytes32[] calldata _merkleProof) external payable callerIsUser { if (sale == Sale.NON) revert SaleNotStarted(); uint256 supply = totalSupply(); if (_mintAmount == 0 || _mintAmount > maxBatchSize) revert ZeroOrMaxMintAmountReached(); if (supply + _mintAmount > maxSupply - airDropAmount) revert SoldOut(); // saved for the airDrop if (numberMinted(msg.sender) >= maxNFTPerWallet) revert MaxNFTPerWallet(); if (sale == Sale.WHITELIST) { bytes32 _leaf = keccak256(abi.encodePacked(msg.sender)); if (!MerkleProof.verify(_merkleProof, root, _leaf)) revert InvalidProof(); if (msg.value < whitelistCost * _mintAmount) revert InsufficientFunds(); } else { if (msg.value < publicCost * _mintAmount) revert InsufficientFunds(); } _safeMint(msg.sender, _mintAmount); } // For owner to make air drops / giveaways function airDrop(uint256 _mintAmount, address destination) external onlyOwner { uint256 supply = totalSupply(); if (_mintAmount == 0 || _mintAmount > maxBatchSize) revert ZeroOrMaxMintAmountReached(); if (supply + _mintAmount > maxSupply) revert SoldOut(); _safeMint(destination, _mintAmount); } function tokenURI(uint256 tokenId) public view virtual override(ERC721A) returns (string memory) { if (!revealed) { return baseURI; } else { string memory uri = string(abi.encodePacked(super.tokenURI(tokenId), baseExtension)); return uri; } } // returns the remaining supply - airdrop function publicSupply() external view returns (uint256) { uint256 amount = maxSupply - (totalSupply() + airDropAmount); return amount; } function updateAirdropAmount(uint256 _amount) external onlyOwner { airDropAmount = _amount; } function getContractBalance() external view onlyOwner returns (uint256) { return address(this).balance; } function setRoot(bytes32 _root) external onlyOwner { root = _root; } // Pause, Whitelist, Public sale function setSale(Sale _sale) external onlyOwner { sale = _sale; } function setReveal(bool _reveal, string memory _newBaseURI) external onlyOwner { revealed = _reveal; baseURI = _newBaseURI; } function setBaseURI(string memory _newBaseURI) external onlyOwner { baseURI = _newBaseURI; } function withdraw() external payable onlyOwner nonReentrant { (bool os,) = payable(msg.sender).call{value : address(this).balance}(""); require(os, "WITHDRAW ERROR"); } function numberMinted(address owner) public view returns (uint256) { return _numberMinted(owner); } }
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":"_uri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"InsufficientFunds","type":"error"},{"inputs":[],"name":"InvalidProof","type":"error"},{"inputs":[],"name":"MaxNFTPerWallet","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"SaleNotStarted","type":"error"},{"inputs":[],"name":"SoldOut","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ZeroOrMaxMintAmountReached","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"destination","type":"address"}],"name":"airDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"airDropAmount","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"maxBatchSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxNFTPerWallet","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"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"root","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sale","outputs":[{"internalType":"enum Metanomads.Sale","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_reveal","type":"bool"},{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setReveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_root","type":"bytes32"}],"name":"setRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum Metanomads.Sale","name":"_sale","type":"uint8"}],"name":"setSale","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":"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":"uint256","name":"_amount","type":"uint256"}],"name":"updateAirdropAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
66b1a2bc2ec5000060805266e6ed27d666800060a0526107d060c0526032600c55606460e052600a61010052610160604052600561012081905264173539b7b760d91b6101409081526200005791600d919062000149565b50600e805460ff191690553480156200006f57600080fd5b50604051620026bb380380620026bb8339810160408190526200009291620002a2565b825183908390620000ab90600290602085019062000149565b508051620000c190600390602084019062000149565b50506000805550620000d333620000f7565b60016009558051620000ed90600f90602084019062000149565b5050505062000382565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000157906200032f565b90600052602060002090601f0160209004810192826200017b5760008555620001c6565b82601f106200019657805160ff1916838001178555620001c6565b82800160010185558215620001c6579182015b82811115620001c6578251825591602001919060010190620001a9565b50620001d4929150620001d8565b5090565b5b80821115620001d45760008155600101620001d9565b600082601f83011262000200578081fd5b81516001600160401b03808211156200021d576200021d6200036c565b604051601f8301601f19908116603f011681019082821181831017156200024857620002486200036c565b8160405283815260209250868385880101111562000264578485fd5b8491505b8382101562000287578582018301518183018401529082019062000268565b838211156200029857848385830101525b9695505050505050565b600080600060608486031215620002b7578283fd5b83516001600160401b0380821115620002ce578485fd5b620002dc87838801620001ef565b94506020860151915080821115620002f2578384fd5b6200030087838801620001ef565b9350604086015191508082111562000316578283fd5b506200032586828701620001ef565b9150509250925092565b600181811c908216806200034457607f821691505b602082108114156200036657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b60805160a05160c05160e051610100516122bc620003ff6000396000818161037501528181610e500152610fde0152600081816105b5015261107601526000818161060901528181610b9801528181610e9201526110270152600081816104c601526111d601526000818161069d015261118601526122bc6000f3fe6080604052600436106102305760003560e01c8063715018a61161012e578063c87b56dd116100ab578063e7b99ec71161006f578063e7b99ec71461068b578063e985e9c5146106bf578063ebf0c71714610708578063f2fde38b1461071e578063febfec501461073e57600080fd5b8063c87b56dd146105d7578063d5abeb01146105f7578063dab5f3401461062b578063dc33e6811461064b578063dd504bb71461066b57600080fd5b8063aed38015116100f2578063aed380151461053b578063b88d4fde1461055b578063ba41b0c61461057b578063c66828621461058e578063c7c5a8c0146105a357600080fd5b8063715018a61461049f5780638693da20146104b45780638da5cb5b146104e857806395d89b4114610506578063a22cb4651461051b57600080fd5b80633ccfd60b116101bc5780636352211e116101805780636352211e1461040e5780636ad1fe021461042e5780636c0360eb146104555780636f9fb98a1461046a57806370a082311461047f57600080fd5b80633ccfd60b1461039757806342842e0e1461039f57806351830227146103bf57806355f804b3146103d95780635e84d723146103f957600080fd5b8063095ea7b311610203578063095ea7b3146102e857806318160ddd1461030a578063202dc1811461032357806323b872dd146103435780632913daa01461036357600080fd5b806301ffc9a71461023557806306fdde031461026a578063081812fc1461028c57806308e9988b146102c4575b600080fd5b34801561024157600080fd5b50610255610250366004611ead565b61075e565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061027f6107b0565b6040516102619190612141565b34801561029857600080fd5b506102ac6102a7366004611e95565b610842565b6040516001600160a01b039091168152602001610261565b3480156102d057600080fd5b506102da600c5481565b604051908152602001610261565b3480156102f457600080fd5b50610308610303366004611e20565b610886565b005b34801561031657600080fd5b50600154600054036102da565b34801561032f57600080fd5b5061030861033e366004611e95565b610959565b34801561034f57600080fd5b5061030861035e366004611d43565b6109ab565b34801561036f57600080fd5b506102da7f000000000000000000000000000000000000000000000000000000000000000081565b6103086109bb565b3480156103ab57600080fd5b506103086103ba366004611d43565b610afb565b3480156103cb57600080fd5b50600e546102559060ff1681565b3480156103e557600080fd5b506103086103f4366004611f04565b610b16565b34801561040557600080fd5b506102da610b75565b34801561041a57600080fd5b506102ac610429366004611e95565b610bbc565b34801561043a57600080fd5b50600b546104489060ff1681565b6040516102619190612119565b34801561046157600080fd5b5061027f610bc7565b34801561047657600080fd5b506102da610c55565b34801561048b57600080fd5b506102da61049a366004611cf7565b610ca5565b3480156104ab57600080fd5b50610308610cf4565b3480156104c057600080fd5b506102da7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104f457600080fd5b506008546001600160a01b03166102ac565b34801561051257600080fd5b5061027f610d48565b34801561052757600080fd5b50610308610536366004611df7565b610d57565b34801561054757600080fd5b50610308610556366004611f37565b610ded565b34801561056757600080fd5b50610308610576366004611d7e565b610ee4565b610308610589366004611f59565b610f2e565b34801561059a57600080fd5b5061027f611224565b3480156105af57600080fd5b506102da7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105e357600080fd5b5061027f6105f2366004611e95565b611231565b34801561060357600080fd5b506102da7f000000000000000000000000000000000000000000000000000000000000000081565b34801561063757600080fd5b50610308610646366004611e95565b61130a565b34801561065757600080fd5b506102da610666366004611cf7565b611357565b34801561067757600080fd5b50610308610686366004611e49565b611382565b34801561069757600080fd5b506102da7f000000000000000000000000000000000000000000000000000000000000000081565b3480156106cb57600080fd5b506102556106da366004611d11565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561071457600080fd5b506102da600a5481565b34801561072a57600080fd5b50610308610739366004611cf7565b6113eb565b34801561074a57600080fd5b50610308610759366004611ee5565b6114a4565b60006301ffc9a760e01b6001600160e01b03198316148061078f57506380ac58cd60e01b6001600160e01b03198316145b806107aa5750635b5e139f60e01b6001600160e01b03198316145b92915050565b6060600280546107bf906121ce565b80601f01602080910402602001604051908101604052809291908181526020018280546107eb906121ce565b80156108385780601f1061080d57610100808354040283529160200191610838565b820191906000526020600020905b81548152906001019060200180831161081b57829003601f168201915b5050505050905090565b600061084d82611521565b61086a576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061089182611548565b9050806001600160a01b0316836001600160a01b031614156108c65760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b038216146108fd576108e081336106da565b6108fd576040516367d9dca160e11b815260040160405180910390fd5b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6008546001600160a01b031633146109a65760405162461bcd60e51b8152602060048201819052602482015260008051602061226783398151915260448201526064015b60405180910390fd5b600c55565b6109b68383836115b0565b505050565b6008546001600160a01b03163314610a035760405162461bcd60e51b81526020600482018190526024820152600080516020612267833981519152604482015260640161099d565b60026009541415610a565760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161099d565b6002600955604051600090339047908381818185875af1925050503d8060008114610a9d576040519150601f19603f3d011682016040523d82523d6000602084013e610aa2565b606091505b5050905080610af35760405162461bcd60e51b815260206004820152600e60248201527f5749544844524157204552524f52000000000000000000000000000000000000604482015260640161099d565b506001600955565b6109b683838360405180602001604052806000815250610ee4565b6008546001600160a01b03163314610b5e5760405162461bcd60e51b81526020600482018190526024820152600080516020612267833981519152604482015260640161099d565b8051610b7190600f906020840190611ba2565b5050565b600080600c54610b886001546000540390565b610b929190612154565b6107aa907f000000000000000000000000000000000000000000000000000000000000000061218b565b60006107aa82611548565b600f8054610bd4906121ce565b80601f0160208091040260200160405190810160405280929190818152602001828054610c00906121ce565b8015610c4d5780601f10610c2257610100808354040283529160200191610c4d565b820191906000526020600020905b815481529060010190602001808311610c3057829003601f168201915b505050505081565b6008546000906001600160a01b03163314610ca05760405162461bcd60e51b81526020600482018190526024820152600080516020612267833981519152604482015260640161099d565b504790565b60006001600160a01b038216610cce576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6008546001600160a01b03163314610d3c5760405162461bcd60e51b81526020600482018190526024820152600080516020612267833981519152604482015260640161099d565b610d466000611753565b565b6060600380546107bf906121ce565b6001600160a01b038216331415610d815760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6008546001600160a01b03163314610e355760405162461bcd60e51b81526020600482018190526024820152600080516020612267833981519152604482015260640161099d565b6000610e446001546000540390565b9050821580610e7257507f000000000000000000000000000000000000000000000000000000000000000083115b15610e90576040516393245f5360e01b815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000610ebb8483612154565b1115610eda576040516352df9fe560e01b815260040160405180910390fd5b6109b682846117a5565b610eef8484846115b0565b6001600160a01b0383163b15610f2857610f0b848484846117bf565b610f28576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b323314610f7d5760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000604482015260640161099d565b6000600b5460ff166002811115610fa457634e487b7160e01b600052602160045260246000fd5b1415610fc3576040516316851a3760e11b815260040160405180910390fd5b6000610fd26001546000540390565b905083158061100057507f000000000000000000000000000000000000000000000000000000000000000084115b1561101e576040516393245f5360e01b815260040160405180910390fd5b600c5461104b907f000000000000000000000000000000000000000000000000000000000000000061218b565b6110558583612154565b1115611074576040516352df9fe560e01b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061109e33611357565b106110bc57604051631e7b0e4960e11b815260040160405180910390fd5b6001600b5460ff1660028111156110e357634e487b7160e01b600052602160045260246000fd5b14156111d0576040516bffffffffffffffffffffffff193360601b16602082015260009060340160405160208183030381529060405280519060200120905061116384848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600a5491508490506118b7565b611180576040516309bde33960e01b815260040160405180910390fd5b6111aa857f000000000000000000000000000000000000000000000000000000000000000061216c565b3410156111ca5760405163356680b760e01b815260040160405180910390fd5b5061121a565b6111fa847f000000000000000000000000000000000000000000000000000000000000000061216c565b34101561121a5760405163356680b760e01b815260040160405180910390fd5b610f2833856117a5565b600d8054610bd4906121ce565b600e5460609060ff166112d057600f805461124b906121ce565b80601f0160208091040260200160405190810160405280929190818152602001828054611277906121ce565b80156112c45780601f10611299576101008083540402835291602001916112c4565b820191906000526020600020905b8154815290600101906020018083116112a757829003601f168201915b50505050509050919050565b60006112db836118cd565b600d6040516020016112ee92919061202e565b60408051601f198184030181529190529392505050565b919050565b6008546001600160a01b031633146113525760405162461bcd60e51b81526020600482018190526024820152600080516020612267833981519152604482015260640161099d565b600a55565b6001600160a01b0381166000908152600560205260408082205467ffffffffffffffff911c166107aa565b6008546001600160a01b031633146113ca5760405162461bcd60e51b81526020600482018190526024820152600080516020612267833981519152604482015260640161099d565b600e805460ff191683151517905580516109b690600f906020840190611ba2565b6008546001600160a01b031633146114335760405162461bcd60e51b81526020600482018190526024820152600080516020612267833981519152604482015260640161099d565b6001600160a01b0381166114985760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161099d565b6114a181611753565b50565b6008546001600160a01b031633146114ec5760405162461bcd60e51b81526020600482018190526024820152600080516020612267833981519152604482015260640161099d565b600b805482919060ff1916600183600281111561151957634e487b7160e01b600052602160045260246000fd5b021790555050565b60008054821080156107aa575050600090815260046020526040902054600160e01b161590565b60008160005481101561159757600081815260046020526040902054600160e01b8116611595575b8061158e575060001901600081815260046020526040902054611570565b9392505050565b505b604051636f96cda160e11b815260040160405180910390fd5b60006115bb82611548565b9050836001600160a01b0316816001600160a01b0316146115ee5760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b038616148061160c575061160c85336106da565b8061162757503361161c84610842565b6001600160a01b0316145b90508061164757604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03841661166e57604051633a954ecd60e21b815260040160405180910390fd5b600083815260066020908152604080832080546001600160a01b03191690556001600160a01b038881168452600583528184208054600019019055871683528083208054600101905585835260049091529020600160e11b4260a01b86178117909155821661170b57600183016000818152600460205260409020546117095760005481146117095760008181526004602052604090208390555b505b82846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610b71828260405180602001604052806000815250611951565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a02906117f49033908990889088906004016120dd565b602060405180830381600087803b15801561180e57600080fd5b505af192505050801561183e575060408051601f3d908101601f1916820190925261183b91810190611ec9565b60015b611899573d80801561186c576040519150601f19603f3d011682016040523d82523d6000602084013e611871565b606091505b508051611891576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6000826118c48584611ac2565b14949350505050565b60606118d882611521565b6118f557604051630a14c4b560e41b815260040160405180910390fd5b60006118ff611b44565b9050805160001415611920576040518060200160405280600081525061158e565b8061192a84611b53565b60405160200161193b929190611fff565b6040516020818303038152906040529392505050565b6000546001600160a01b03841661197a57604051622e076360e81b815260040160405180910390fd5b826119985760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b03841660008181526005602090815260408083208054680100000000000000018902019055848352600490915290204260a01b86176001861460e11b1790558190818501903b15611a6d575b60405182906001600160a01b038816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4611a3660008784806001019550876117bf565b611a53576040516368d2bf6b60e11b815260040160405180910390fd5b8082106119eb578260005414611a6857600080fd5b611ab2565b5b6040516001830192906001600160a01b038816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808210611a6e575b506000908155610f289085838684565b600081815b8451811015611b3c576000858281518110611af257634e487b7160e01b600052603260045260246000fd5b60200260200101519050808311611b185760008381526020829052604090209250611b29565b600081815260208490526040902092505b5080611b3481612209565b915050611ac7565b509392505050565b6060600f80546107bf906121ce565b604080516080810191829052607f0190826030600a8206018353600a90045b8015611b9057600183039250600a81066030018353600a9004611b72565b50819003601f19909101908152919050565b828054611bae906121ce565b90600052602060002090601f016020900481019282611bd05760008555611c16565b82601f10611be957805160ff1916838001178555611c16565b82800160010185558215611c16579182015b82811115611c16578251825591602001919060010190611bfb565b50611c22929150611c26565b5090565b5b80821115611c225760008155600101611c27565b600067ffffffffffffffff80841115611c5657611c5661223a565b604051601f8501601f19908116603f01168101908282118183101715611c7e57611c7e61223a565b81604052809350858152868686011115611c9757600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461130557600080fd5b8035801515811461130557600080fd5b600082601f830112611ce8578081fd5b61158e83833560208501611c3b565b600060208284031215611d08578081fd5b61158e82611cb1565b60008060408385031215611d23578081fd5b611d2c83611cb1565b9150611d3a60208401611cb1565b90509250929050565b600080600060608486031215611d57578081fd5b611d6084611cb1565b9250611d6e60208501611cb1565b9150604084013590509250925092565b60008060008060808587031215611d93578081fd5b611d9c85611cb1565b9350611daa60208601611cb1565b925060408501359150606085013567ffffffffffffffff811115611dcc578182fd5b8501601f81018713611ddc578182fd5b611deb87823560208401611c3b565b91505092959194509250565b60008060408385031215611e09578182fd5b611e1283611cb1565b9150611d3a60208401611cc8565b60008060408385031215611e32578182fd5b611e3b83611cb1565b946020939093013593505050565b60008060408385031215611e5b578182fd5b611e6483611cc8565b9150602083013567ffffffffffffffff811115611e7f578182fd5b611e8b85828601611cd8565b9150509250929050565b600060208284031215611ea6578081fd5b5035919050565b600060208284031215611ebe578081fd5b813561158e81612250565b600060208284031215611eda578081fd5b815161158e81612250565b600060208284031215611ef6578081fd5b81356003811061158e578182fd5b600060208284031215611f15578081fd5b813567ffffffffffffffff811115611f2b578182fd5b6118af84828501611cd8565b60008060408385031215611f49578182fd5b82359150611d3a60208401611cb1565b600080600060408486031215611f6d578081fd5b83359250602084013567ffffffffffffffff80821115611f8b578283fd5b818601915086601f830112611f9e578283fd5b813581811115611fac578384fd5b8760208260051b8501011115611fc0578384fd5b6020830194508093505050509250925092565b60008151808452611feb8160208601602086016121a2565b601f01601f19169290920160200192915050565b600083516120118184602088016121a2565b8351908301906120258183602088016121a2565b01949350505050565b60008351602061204182858389016121a2565b8454918401918390600181811c908083168061205e57607f831692505b85831081141561207c57634e487b7160e01b88526022600452602488fd5b80801561209057600181146120a1576120cd565b60ff198516885283880195506120cd565b60008b815260209020895b858110156120c55781548a8201529084019088016120ac565b505083880195505b50939a9950505050505050505050565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261210f6080830184611fd3565b9695505050505050565b602081016003831061213b57634e487b7160e01b600052602160045260246000fd5b91905290565b60208152600061158e6020830184611fd3565b6000821982111561216757612167612224565b500190565b600081600019048311821515161561218657612186612224565b500290565b60008282101561219d5761219d612224565b500390565b60005b838110156121bd5781810151838201526020016121a5565b83811115610f285750506000910152565b600181811c908216806121e257607f821691505b6020821081141561220357634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561221d5761221d612224565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146114a157600080fdfe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212209b6163be3de444faf843bbfdfc0f4cd5fa8a2dc1de3a8281d870363e345ccca464736f6c63430008040033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000b4d657461204e6f6d61647300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034e4d440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005068747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d6378506e36465768356139384c437355426568674e5369716e677457706735663170465a515468724874614400000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102305760003560e01c8063715018a61161012e578063c87b56dd116100ab578063e7b99ec71161006f578063e7b99ec71461068b578063e985e9c5146106bf578063ebf0c71714610708578063f2fde38b1461071e578063febfec501461073e57600080fd5b8063c87b56dd146105d7578063d5abeb01146105f7578063dab5f3401461062b578063dc33e6811461064b578063dd504bb71461066b57600080fd5b8063aed38015116100f2578063aed380151461053b578063b88d4fde1461055b578063ba41b0c61461057b578063c66828621461058e578063c7c5a8c0146105a357600080fd5b8063715018a61461049f5780638693da20146104b45780638da5cb5b146104e857806395d89b4114610506578063a22cb4651461051b57600080fd5b80633ccfd60b116101bc5780636352211e116101805780636352211e1461040e5780636ad1fe021461042e5780636c0360eb146104555780636f9fb98a1461046a57806370a082311461047f57600080fd5b80633ccfd60b1461039757806342842e0e1461039f57806351830227146103bf57806355f804b3146103d95780635e84d723146103f957600080fd5b8063095ea7b311610203578063095ea7b3146102e857806318160ddd1461030a578063202dc1811461032357806323b872dd146103435780632913daa01461036357600080fd5b806301ffc9a71461023557806306fdde031461026a578063081812fc1461028c57806308e9988b146102c4575b600080fd5b34801561024157600080fd5b50610255610250366004611ead565b61075e565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061027f6107b0565b6040516102619190612141565b34801561029857600080fd5b506102ac6102a7366004611e95565b610842565b6040516001600160a01b039091168152602001610261565b3480156102d057600080fd5b506102da600c5481565b604051908152602001610261565b3480156102f457600080fd5b50610308610303366004611e20565b610886565b005b34801561031657600080fd5b50600154600054036102da565b34801561032f57600080fd5b5061030861033e366004611e95565b610959565b34801561034f57600080fd5b5061030861035e366004611d43565b6109ab565b34801561036f57600080fd5b506102da7f000000000000000000000000000000000000000000000000000000000000000a81565b6103086109bb565b3480156103ab57600080fd5b506103086103ba366004611d43565b610afb565b3480156103cb57600080fd5b50600e546102559060ff1681565b3480156103e557600080fd5b506103086103f4366004611f04565b610b16565b34801561040557600080fd5b506102da610b75565b34801561041a57600080fd5b506102ac610429366004611e95565b610bbc565b34801561043a57600080fd5b50600b546104489060ff1681565b6040516102619190612119565b34801561046157600080fd5b5061027f610bc7565b34801561047657600080fd5b506102da610c55565b34801561048b57600080fd5b506102da61049a366004611cf7565b610ca5565b3480156104ab57600080fd5b50610308610cf4565b3480156104c057600080fd5b506102da7f00000000000000000000000000000000000000000000000000e6ed27d666800081565b3480156104f457600080fd5b506008546001600160a01b03166102ac565b34801561051257600080fd5b5061027f610d48565b34801561052757600080fd5b50610308610536366004611df7565b610d57565b34801561054757600080fd5b50610308610556366004611f37565b610ded565b34801561056757600080fd5b50610308610576366004611d7e565b610ee4565b610308610589366004611f59565b610f2e565b34801561059a57600080fd5b5061027f611224565b3480156105af57600080fd5b506102da7f000000000000000000000000000000000000000000000000000000000000006481565b3480156105e357600080fd5b5061027f6105f2366004611e95565b611231565b34801561060357600080fd5b506102da7f00000000000000000000000000000000000000000000000000000000000007d081565b34801561063757600080fd5b50610308610646366004611e95565b61130a565b34801561065757600080fd5b506102da610666366004611cf7565b611357565b34801561067757600080fd5b50610308610686366004611e49565b611382565b34801561069757600080fd5b506102da7f00000000000000000000000000000000000000000000000000b1a2bc2ec5000081565b3480156106cb57600080fd5b506102556106da366004611d11565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561071457600080fd5b506102da600a5481565b34801561072a57600080fd5b50610308610739366004611cf7565b6113eb565b34801561074a57600080fd5b50610308610759366004611ee5565b6114a4565b60006301ffc9a760e01b6001600160e01b03198316148061078f57506380ac58cd60e01b6001600160e01b03198316145b806107aa5750635b5e139f60e01b6001600160e01b03198316145b92915050565b6060600280546107bf906121ce565b80601f01602080910402602001604051908101604052809291908181526020018280546107eb906121ce565b80156108385780601f1061080d57610100808354040283529160200191610838565b820191906000526020600020905b81548152906001019060200180831161081b57829003601f168201915b5050505050905090565b600061084d82611521565b61086a576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061089182611548565b9050806001600160a01b0316836001600160a01b031614156108c65760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b038216146108fd576108e081336106da565b6108fd576040516367d9dca160e11b815260040160405180910390fd5b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6008546001600160a01b031633146109a65760405162461bcd60e51b8152602060048201819052602482015260008051602061226783398151915260448201526064015b60405180910390fd5b600c55565b6109b68383836115b0565b505050565b6008546001600160a01b03163314610a035760405162461bcd60e51b81526020600482018190526024820152600080516020612267833981519152604482015260640161099d565b60026009541415610a565760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161099d565b6002600955604051600090339047908381818185875af1925050503d8060008114610a9d576040519150601f19603f3d011682016040523d82523d6000602084013e610aa2565b606091505b5050905080610af35760405162461bcd60e51b815260206004820152600e60248201527f5749544844524157204552524f52000000000000000000000000000000000000604482015260640161099d565b506001600955565b6109b683838360405180602001604052806000815250610ee4565b6008546001600160a01b03163314610b5e5760405162461bcd60e51b81526020600482018190526024820152600080516020612267833981519152604482015260640161099d565b8051610b7190600f906020840190611ba2565b5050565b600080600c54610b886001546000540390565b610b929190612154565b6107aa907f00000000000000000000000000000000000000000000000000000000000007d061218b565b60006107aa82611548565b600f8054610bd4906121ce565b80601f0160208091040260200160405190810160405280929190818152602001828054610c00906121ce565b8015610c4d5780601f10610c2257610100808354040283529160200191610c4d565b820191906000526020600020905b815481529060010190602001808311610c3057829003601f168201915b505050505081565b6008546000906001600160a01b03163314610ca05760405162461bcd60e51b81526020600482018190526024820152600080516020612267833981519152604482015260640161099d565b504790565b60006001600160a01b038216610cce576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6008546001600160a01b03163314610d3c5760405162461bcd60e51b81526020600482018190526024820152600080516020612267833981519152604482015260640161099d565b610d466000611753565b565b6060600380546107bf906121ce565b6001600160a01b038216331415610d815760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6008546001600160a01b03163314610e355760405162461bcd60e51b81526020600482018190526024820152600080516020612267833981519152604482015260640161099d565b6000610e446001546000540390565b9050821580610e7257507f000000000000000000000000000000000000000000000000000000000000000a83115b15610e90576040516393245f5360e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000007d0610ebb8483612154565b1115610eda576040516352df9fe560e01b815260040160405180910390fd5b6109b682846117a5565b610eef8484846115b0565b6001600160a01b0383163b15610f2857610f0b848484846117bf565b610f28576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b323314610f7d5760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000604482015260640161099d565b6000600b5460ff166002811115610fa457634e487b7160e01b600052602160045260246000fd5b1415610fc3576040516316851a3760e11b815260040160405180910390fd5b6000610fd26001546000540390565b905083158061100057507f000000000000000000000000000000000000000000000000000000000000000a84115b1561101e576040516393245f5360e01b815260040160405180910390fd5b600c5461104b907f00000000000000000000000000000000000000000000000000000000000007d061218b565b6110558583612154565b1115611074576040516352df9fe560e01b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000006461109e33611357565b106110bc57604051631e7b0e4960e11b815260040160405180910390fd5b6001600b5460ff1660028111156110e357634e487b7160e01b600052602160045260246000fd5b14156111d0576040516bffffffffffffffffffffffff193360601b16602082015260009060340160405160208183030381529060405280519060200120905061116384848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600a5491508490506118b7565b611180576040516309bde33960e01b815260040160405180910390fd5b6111aa857f00000000000000000000000000000000000000000000000000b1a2bc2ec5000061216c565b3410156111ca5760405163356680b760e01b815260040160405180910390fd5b5061121a565b6111fa847f00000000000000000000000000000000000000000000000000e6ed27d666800061216c565b34101561121a5760405163356680b760e01b815260040160405180910390fd5b610f2833856117a5565b600d8054610bd4906121ce565b600e5460609060ff166112d057600f805461124b906121ce565b80601f0160208091040260200160405190810160405280929190818152602001828054611277906121ce565b80156112c45780601f10611299576101008083540402835291602001916112c4565b820191906000526020600020905b8154815290600101906020018083116112a757829003601f168201915b50505050509050919050565b60006112db836118cd565b600d6040516020016112ee92919061202e565b60408051601f198184030181529190529392505050565b919050565b6008546001600160a01b031633146113525760405162461bcd60e51b81526020600482018190526024820152600080516020612267833981519152604482015260640161099d565b600a55565b6001600160a01b0381166000908152600560205260408082205467ffffffffffffffff911c166107aa565b6008546001600160a01b031633146113ca5760405162461bcd60e51b81526020600482018190526024820152600080516020612267833981519152604482015260640161099d565b600e805460ff191683151517905580516109b690600f906020840190611ba2565b6008546001600160a01b031633146114335760405162461bcd60e51b81526020600482018190526024820152600080516020612267833981519152604482015260640161099d565b6001600160a01b0381166114985760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161099d565b6114a181611753565b50565b6008546001600160a01b031633146114ec5760405162461bcd60e51b81526020600482018190526024820152600080516020612267833981519152604482015260640161099d565b600b805482919060ff1916600183600281111561151957634e487b7160e01b600052602160045260246000fd5b021790555050565b60008054821080156107aa575050600090815260046020526040902054600160e01b161590565b60008160005481101561159757600081815260046020526040902054600160e01b8116611595575b8061158e575060001901600081815260046020526040902054611570565b9392505050565b505b604051636f96cda160e11b815260040160405180910390fd5b60006115bb82611548565b9050836001600160a01b0316816001600160a01b0316146115ee5760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b038616148061160c575061160c85336106da565b8061162757503361161c84610842565b6001600160a01b0316145b90508061164757604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03841661166e57604051633a954ecd60e21b815260040160405180910390fd5b600083815260066020908152604080832080546001600160a01b03191690556001600160a01b038881168452600583528184208054600019019055871683528083208054600101905585835260049091529020600160e11b4260a01b86178117909155821661170b57600183016000818152600460205260409020546117095760005481146117095760008181526004602052604090208390555b505b82846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610b71828260405180602001604052806000815250611951565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a02906117f49033908990889088906004016120dd565b602060405180830381600087803b15801561180e57600080fd5b505af192505050801561183e575060408051601f3d908101601f1916820190925261183b91810190611ec9565b60015b611899573d80801561186c576040519150601f19603f3d011682016040523d82523d6000602084013e611871565b606091505b508051611891576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6000826118c48584611ac2565b14949350505050565b60606118d882611521565b6118f557604051630a14c4b560e41b815260040160405180910390fd5b60006118ff611b44565b9050805160001415611920576040518060200160405280600081525061158e565b8061192a84611b53565b60405160200161193b929190611fff565b6040516020818303038152906040529392505050565b6000546001600160a01b03841661197a57604051622e076360e81b815260040160405180910390fd5b826119985760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b03841660008181526005602090815260408083208054680100000000000000018902019055848352600490915290204260a01b86176001861460e11b1790558190818501903b15611a6d575b60405182906001600160a01b038816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4611a3660008784806001019550876117bf565b611a53576040516368d2bf6b60e11b815260040160405180910390fd5b8082106119eb578260005414611a6857600080fd5b611ab2565b5b6040516001830192906001600160a01b038816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808210611a6e575b506000908155610f289085838684565b600081815b8451811015611b3c576000858281518110611af257634e487b7160e01b600052603260045260246000fd5b60200260200101519050808311611b185760008381526020829052604090209250611b29565b600081815260208490526040902092505b5080611b3481612209565b915050611ac7565b509392505050565b6060600f80546107bf906121ce565b604080516080810191829052607f0190826030600a8206018353600a90045b8015611b9057600183039250600a81066030018353600a9004611b72565b50819003601f19909101908152919050565b828054611bae906121ce565b90600052602060002090601f016020900481019282611bd05760008555611c16565b82601f10611be957805160ff1916838001178555611c16565b82800160010185558215611c16579182015b82811115611c16578251825591602001919060010190611bfb565b50611c22929150611c26565b5090565b5b80821115611c225760008155600101611c27565b600067ffffffffffffffff80841115611c5657611c5661223a565b604051601f8501601f19908116603f01168101908282118183101715611c7e57611c7e61223a565b81604052809350858152868686011115611c9757600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461130557600080fd5b8035801515811461130557600080fd5b600082601f830112611ce8578081fd5b61158e83833560208501611c3b565b600060208284031215611d08578081fd5b61158e82611cb1565b60008060408385031215611d23578081fd5b611d2c83611cb1565b9150611d3a60208401611cb1565b90509250929050565b600080600060608486031215611d57578081fd5b611d6084611cb1565b9250611d6e60208501611cb1565b9150604084013590509250925092565b60008060008060808587031215611d93578081fd5b611d9c85611cb1565b9350611daa60208601611cb1565b925060408501359150606085013567ffffffffffffffff811115611dcc578182fd5b8501601f81018713611ddc578182fd5b611deb87823560208401611c3b565b91505092959194509250565b60008060408385031215611e09578182fd5b611e1283611cb1565b9150611d3a60208401611cc8565b60008060408385031215611e32578182fd5b611e3b83611cb1565b946020939093013593505050565b60008060408385031215611e5b578182fd5b611e6483611cc8565b9150602083013567ffffffffffffffff811115611e7f578182fd5b611e8b85828601611cd8565b9150509250929050565b600060208284031215611ea6578081fd5b5035919050565b600060208284031215611ebe578081fd5b813561158e81612250565b600060208284031215611eda578081fd5b815161158e81612250565b600060208284031215611ef6578081fd5b81356003811061158e578182fd5b600060208284031215611f15578081fd5b813567ffffffffffffffff811115611f2b578182fd5b6118af84828501611cd8565b60008060408385031215611f49578182fd5b82359150611d3a60208401611cb1565b600080600060408486031215611f6d578081fd5b83359250602084013567ffffffffffffffff80821115611f8b578283fd5b818601915086601f830112611f9e578283fd5b813581811115611fac578384fd5b8760208260051b8501011115611fc0578384fd5b6020830194508093505050509250925092565b60008151808452611feb8160208601602086016121a2565b601f01601f19169290920160200192915050565b600083516120118184602088016121a2565b8351908301906120258183602088016121a2565b01949350505050565b60008351602061204182858389016121a2565b8454918401918390600181811c908083168061205e57607f831692505b85831081141561207c57634e487b7160e01b88526022600452602488fd5b80801561209057600181146120a1576120cd565b60ff198516885283880195506120cd565b60008b815260209020895b858110156120c55781548a8201529084019088016120ac565b505083880195505b50939a9950505050505050505050565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261210f6080830184611fd3565b9695505050505050565b602081016003831061213b57634e487b7160e01b600052602160045260246000fd5b91905290565b60208152600061158e6020830184611fd3565b6000821982111561216757612167612224565b500190565b600081600019048311821515161561218657612186612224565b500290565b60008282101561219d5761219d612224565b500390565b60005b838110156121bd5781810151838201526020016121a5565b83811115610f285750506000910152565b600181811c908216806121e257607f821691505b6020821081141561220357634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561221d5761221d612224565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146114a157600080fdfe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212209b6163be3de444faf843bbfdfc0f4cd5fa8a2dc1de3a8281d870363e345ccca464736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000b4d657461204e6f6d61647300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034e4d440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005068747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d6378506e36465768356139384c437355426568674e5369716e677457706735663170465a515468724874614400000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Meta Nomads
Arg [1] : _symbol (string): NMD
Arg [2] : _uri (string): https://gateway.pinata.cloud/ipfs/QmcxPn6FWh5a98LCsUBehgNSiqngtWpg5f1pFZQThrHtaD
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [4] : 4d657461204e6f6d616473000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 4e4d440000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000050
Arg [8] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [9] : 732f516d6378506e36465768356139384c437355426568674e5369716e677457
Arg [10] : 706735663170465a515468724874614400000000000000000000000000000000
Deployed Bytecode Sourcemap
48596:3992:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23163:615;;;;;;;;;;-1:-1:-1;23163:615:0;;;;;:::i;:::-;;:::i;:::-;;;9718:14:1;;9711:22;9693:41;;9681:2;9666:18;23163:615:0;;;;;;;;28176:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;30244:204::-;;;;;;;;;;-1:-1:-1;30244:204:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;8970:55:1;;;8952:74;;8940:2;8925:18;30244:204:0;8907:125:1;48987:33:0;;;;;;;;;;;;;;;;;;;9891:25:1;;;9879:2;9864:18;48987:33:0;9846:76:1;29704:474:0;;;;;;;;;;-1:-1:-1;29704:474:0;;;;;:::i;:::-;;:::i;:::-;;22217:315;;;;;;;;;;-1:-1:-1;22483:12:0;;22270:7;22467:13;:28;22217:315;;51538:107;;;;;;;;;;-1:-1:-1;51538:107:0;;;;;:::i;:::-;;:::i;31130:170::-;;;;;;;;;;-1:-1:-1;31130:170:0;;;;;:::i;:::-;;:::i;49080:42::-;;;;;;;;;;;;;;;52266:191;;;:::i;31371:185::-;;;;;;;;;;-1:-1:-1;31371:185:0;;;;;:::i;:::-;;:::i;49179:28::-;;;;;;;;;;-1:-1:-1;49179:28:0;;;;;;;;52151:106;;;;;;;;;;-1:-1:-1;52151:106:0;;;;;:::i;:::-;;:::i;51371:159::-;;;;;;;;;;;;;:::i;27965:144::-;;;;;;;;;;-1:-1:-1;27965:144:0;;;;;:::i;:::-;;:::i;48781:16::-;;;;;;;;;;-1:-1:-1;48781:16:0;;;;;;;;;;;;;;;:::i;49214:21::-;;;;;;;;;;;;;:::i;51653:119::-;;;;;;;;;;;;;:::i;23842:224::-;;;;;;;;;;-1:-1:-1;23842:224:0;;;;;:::i;:::-;;:::i;4425:103::-;;;;;;;;;;;;;:::i;48862:49::-;;;;;;;;;;;;;;;3774:87;;;;;;;;;;-1:-1:-1;3847:6:0;;-1:-1:-1;;;;;3847:6:0;3774:87;;28345:104;;;;;;;;;;;;;:::i;30520:308::-;;;;;;;;;;-1:-1:-1;30520:308:0;;;;;:::i;:::-;;:::i;50658:337::-;;;;;;;;;;-1:-1:-1;50658:337:0;;;;;:::i;:::-;;:::i;31627:396::-;;;;;;;;;;-1:-1:-1;31627:396:0;;;;;:::i;:::-;;:::i;49664:938::-;;;;;;:::i;:::-;;:::i;49129:37::-;;;;;;;;;;;;;:::i;49027:46::-;;;;;;;;;;;;;;;51003:313;;;;;;;;;;-1:-1:-1;51003:313:0;;;;;:::i;:::-;;:::i;48918:41::-;;;;;;;;;;;;;;;51780:83;;;;;;;;;;-1:-1:-1;51780:83:0;;;;;:::i;:::-;;:::i;52469:113::-;;;;;;;;;;-1:-1:-1;52469:113:0;;;;;:::i;:::-;;:::i;51995:148::-;;;;;;;;;;-1:-1:-1;51995:148:0;;;;;:::i;:::-;;:::i;48804:51::-;;;;;;;;;;;;;;;30899:164;;;;;;;;;;-1:-1:-1;30899:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;31020:25:0;;;30996:4;31020:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;30899:164;48694:19;;;;;;;;;;;;;;;;4683:201;;;;;;;;;;-1:-1:-1;4683:201:0;;;;;:::i;:::-;;:::i;51909:80::-;;;;;;;;;;-1:-1:-1;51909:80:0;;;;;:::i;:::-;;:::i;23163:615::-;23248:4;-1:-1:-1;;;;;;;;;23548:25:0;;;;:102;;-1:-1:-1;;;;;;;;;;23625:25:0;;;23548:102;:179;;;-1:-1:-1;;;;;;;;;;23702:25:0;;;23548:179;23528:199;23163:615;-1:-1:-1;;23163:615:0:o;28176:100::-;28230:13;28263:5;28256:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28176:100;:::o;30244:204::-;30312:7;30337:16;30345:7;30337;:16::i;:::-;30332:64;;30362:34;;-1:-1:-1;;;30362:34:0;;;;;;;;;;;30332:64;-1:-1:-1;30416:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;30416:24:0;;30244:204::o;29704:474::-;29777:13;29809:27;29828:7;29809:18;:27::i;:::-;29777:61;;29859:5;-1:-1:-1;;;;;29853:11:0;:2;-1:-1:-1;;;;;29853:11:0;;29849:48;;;29873:24;;-1:-1:-1;;;29873:24:0;;;;;;;;;;;29849:48;46347:10;-1:-1:-1;;;;;29914:28:0;;;29910:175;;29962:44;29979:5;46347:10;30899:164;:::i;29962:44::-;29957:128;;30034:35;;-1:-1:-1;;;30034:35:0;;;;;;;;;;;29957:128;30097:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;30097:29:0;-1:-1:-1;;;;;30097:29:0;;;;;;;;;30142:28;;30097:24;;30142:28;;;;;;;29704:474;;;:::o;51538:107::-;3847:6;;-1:-1:-1;;;;;3847:6:0;46347:10;3994:23;3986:68;;;;-1:-1:-1;;;3986:68:0;;11804:2:1;3986:68:0;;;11786:21:1;;;11823:18;;;11816:30;-1:-1:-1;;;;;;;;;;;11862:18:1;;;11855:62;11934:18;;3986:68:0;;;;;;;;;51614:13:::1;:23:::0;51538:107::o;31130:170::-;31264:28;31274:4;31280:2;31284:7;31264:9;:28::i;:::-;31130:170;;;:::o;52266:191::-;3847:6;;-1:-1:-1;;;;;3847:6:0;46347:10;3994:23;3986:68;;;;-1:-1:-1;;;3986:68:0;;11804:2:1;3986:68:0;;;11786:21:1;;;11823:18;;;11816:30;-1:-1:-1;;;;;;;;;;;11862:18:1;;;11855:62;11934:18;;3986:68:0;11776:182:1;3986:68:0;9394:1:::1;9992:7;;:19;;9984:63;;;::::0;-1:-1:-1;;;9984:63:0;;12165:2:1;9984:63:0::1;::::0;::::1;12147:21:1::0;12204:2;12184:18;;;12177:30;12243:33;12223:18;;;12216:61;12294:18;;9984:63:0::1;12137:181:1::0;9984:63:0::1;9394:1;10125:7;:18:::0;52350:59:::2;::::0;52338:7:::2;::::0;52358:10:::2;::::0;52383:21:::2;::::0;52338:7;52350:59;52338:7;52350:59;52383:21;52358:10;52350:59:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52337:72;;;52428:2;52420:29;;;::::0;-1:-1:-1;;;52420:29:0;;11102:2:1;52420:29:0::2;::::0;::::2;11084:21:1::0;11141:2;11121:18;;;11114:30;11180:16;11160:18;;;11153:44;11214:18;;52420:29:0::2;11074:164:1::0;52420:29:0::2;-1:-1:-1::0;9350:1:0::1;10304:7;:22:::0;52266:191::o;31371:185::-;31509:39;31526:4;31532:2;31536:7;31509:39;;;;;;;;;;;;:16;:39::i;52151:106::-;3847:6;;-1:-1:-1;;;;;3847:6:0;46347:10;3994:23;3986:68;;;;-1:-1:-1;;;3986:68:0;;11804:2:1;3986:68:0;;;11786:21:1;;;11823:18;;;11816:30;-1:-1:-1;;;;;;;;;;;11862:18:1;;;11855:62;11934:18;;3986:68:0;11776:182:1;3986:68:0;52228:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;52151:106:::0;:::o;51371:159::-;51418:7;51438:14;51484:13;;51468;22483:12;;22270:7;22467:13;:28;;22217:315;51468:13;:29;;;;:::i;:::-;51455:43;;:9;:43;:::i;27965:144::-;28029:7;28072:27;28091:7;28072:18;:27::i;49214:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51653:119::-;3847:6;;51716:7;;-1:-1:-1;;;;;3847:6:0;46347:10;3994:23;3986:68;;;;-1:-1:-1;;;3986:68:0;;11804:2:1;3986:68:0;;;11786:21:1;;;11823:18;;;11816:30;-1:-1:-1;;;;;;;;;;;11862:18:1;;;11855:62;11934:18;;3986:68:0;11776:182:1;3986:68:0;-1:-1:-1;51743:21:0::1;51653:119:::0;:::o;23842:224::-;23906:7;-1:-1:-1;;;;;23930:19:0;;23926:60;;23958:28;;-1:-1:-1;;;23958:28:0;;;;;;;;;;;23926:60;-1:-1:-1;;;;;;24004:25:0;;;;;:18;:25;;;;;;19181:13;24004:54;;23842:224::o;4425:103::-;3847:6;;-1:-1:-1;;;;;3847:6:0;46347:10;3994:23;3986:68;;;;-1:-1:-1;;;3986:68:0;;11804:2:1;3986:68:0;;;11786:21:1;;;11823:18;;;11816:30;-1:-1:-1;;;;;;;;;;;11862:18:1;;;11855:62;11934:18;;3986:68:0;11776:182:1;3986:68:0;4490:30:::1;4517:1;4490:18;:30::i;:::-;4425:103::o:0;28345:104::-;28401:13;28434:7;28427:14;;;;;:::i;30520:308::-;-1:-1:-1;;;;;30619:31:0;;46347:10;30619:31;30615:61;;;30659:17;;-1:-1:-1;;;30659:17:0;;;;;;;;;;;30615:61;46347:10;30689:39;;;;:18;:39;;;;;;;;-1:-1:-1;;;;;30689:49:0;;;;;;;;;;;;:60;;-1:-1:-1;;30689:60:0;;;;;;;;;;30765:55;;9693:41:1;;;30689:49:0;;46347:10;30765:55;;9666:18:1;30765:55:0;;;;;;;30520:308;;:::o;50658:337::-;3847:6;;-1:-1:-1;;;;;3847:6:0;46347:10;3994:23;3986:68;;;;-1:-1:-1;;;3986:68:0;;11804:2:1;3986:68:0;;;11786:21:1;;;11823:18;;;11816:30;-1:-1:-1;;;;;;;;;;;11862:18:1;;;11855:62;11934:18;;3986:68:0;11776:182:1;3986:68:0;50747:14:::1;50764:13;22483:12:::0;;22270:7;22467:13;:28;;22217:315;50764:13:::1;50747:30:::0;-1:-1:-1;50792:16:0;;;:46:::1;;;50826:12;50812:11;:26;50792:46;50788:87;;;50847:28;;-1:-1:-1::0;;;50847:28:0::1;;;;;;;;;;;50788:87;50914:9;50891:20;50900:11:::0;50891:6;:20:::1;:::i;:::-;:32;50887:54;;;50932:9;;-1:-1:-1::0;;;50932:9:0::1;;;;;;;;;;;50887:54;50952:35;50962:11;50975;50952:9;:35::i;31627:396::-:0;31794:28;31804:4;31810:2;31814:7;31794:9;:28::i;:::-;-1:-1:-1;;;;;31837:14:0;;;:19;31833:183;;31876:56;31907:4;31913:2;31917:7;31926:5;31876:30;:56::i;:::-;31871:145;;31960:40;;-1:-1:-1;;;31960:40:0;;;;;;;;;;;31871:145;31627:396;;;;:::o;49664:938::-;49462:9;49475:10;49462:23;49454:66;;;;-1:-1:-1;;;49454:66:0;;11445:2:1;49454:66:0;;;11427:21:1;11484:2;11464:18;;;11457:30;11523:32;11503:18;;;11496:60;11573:18;;49454:66:0;11417:180:1;49454:66:0;49785:8:::1;49777:4;::::0;::::1;;:16;::::0;::::1;;;;-1:-1:-1::0;;;49777:16:0::1;;;;;;;;;;49773:45;;;49802:16;;-1:-1:-1::0;;;49802:16:0::1;;;;;;;;;;;49773:45;49831:14;49848:13;22483:12:::0;;22270:7;22467:13;:28;;22217:315;49848:13:::1;49831:30:::0;-1:-1:-1;49876:16:0;;;:46:::1;;;49910:12;49896:11;:26;49876:46;49872:87;;;49931:28;;-1:-1:-1::0;;;49931:28:0::1;;;;;;;;;;;49872:87;50010:13;::::0;49998:25:::1;::::0;:9:::1;:25;:::i;:::-;49975:20;49984:11:::0;49975:6;:20:::1;:::i;:::-;:48;49971:70;;;50032:9;;-1:-1:-1::0;;;50032:9:0::1;;;;;;;;;;;49971:70;50109:15;50081:24;50094:10;50081:12;:24::i;:::-;:43;50077:73;;50133:17;;-1:-1:-1::0;;;50133:17:0::1;;;;;;;;;;;50077:73;50175:14;50167:4;::::0;::::1;;:22;::::0;::::1;;;;-1:-1:-1::0;;;50167:22:0::1;;;;;;;;;;50163:385;;;50232:28;::::0;-1:-1:-1;;50249:10:0::1;6692:2:1::0;6688:15;6684:53;50232:28:0::1;::::0;::::1;6672:66:1::0;50206:13:0::1;::::0;6754:12:1;;50232:28:0::1;;;;;;;;;;;;50222:39;;;;;;50206:55;;50281:45;50300:12;;50281:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;50314:4:0::1;::::0;;-1:-1:-1;50320:5:0;;-1:-1:-1;50281:18:0::1;:45::i;:::-;50276:73;;50335:14;;-1:-1:-1::0;;;50335:14:0::1;;;;;;;;;;;50276:73;50380:27;50396:11:::0;50380:13:::1;:27;:::i;:::-;50368:9;:39;50364:71;;;50416:19;;-1:-1:-1::0;;;50416:19:0::1;;;;;;;;;;;50364:71;50163:385;;;;50484:24;50497:11:::0;50484:10:::1;:24;:::i;:::-;50472:9;:36;50468:68;;;50517:19;;-1:-1:-1::0;;;50517:19:0::1;;;;;;;;;;;50468:68;50560:34;50570:10;50582:11;50560:9;:34::i;49129:37::-:0;;;;;;;:::i;51003:313::-;51116:8;;51085:13;;51116:8;;51111:198;;51148:7;51141:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51003:313;;;:::o;51111:198::-;51188:17;51232:23;51247:7;51232:14;:23::i;:::-;51257:13;51215:56;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;51215:56:0;;;;;;;;;;51003:313;-1:-1:-1;;;51003:313:0:o;51111:198::-;51003:313;;;:::o;51780:83::-;3847:6;;-1:-1:-1;;;;;3847:6:0;46347:10;3994:23;3986:68;;;;-1:-1:-1;;;3986:68:0;;11804:2:1;3986:68:0;;;11786:21:1;;;11823:18;;;11816:30;-1:-1:-1;;;;;;;;;;;11862:18:1;;;11855:62;11934:18;;3986:68:0;11776:182:1;3986:68:0;51843:4:::1;:12:::0;51780:83::o;52469:113::-;-1:-1:-1;;;;;24237:25:0;;52527:7;24237:25;;;:18;:25;;19318:2;24237:25;;;;19181:13;24237:49;;24236:80;52554:20;24148:176;51995:148;3847:6;;-1:-1:-1;;;;;3847:6:0;46347:10;3994:23;3986:68;;;;-1:-1:-1;;;3986:68:0;;11804:2:1;3986:68:0;;;11786:21:1;;;11823:18;;;11816:30;-1:-1:-1;;;;;;;;;;;11862:18:1;;;11855:62;11934:18;;3986:68:0;11776:182:1;3986:68:0;52085:8:::1;:18:::0;;-1:-1:-1;;52085:18:0::1;::::0;::::1;;;::::0;;52114:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;4683:201::-:0;3847:6;;-1:-1:-1;;;;;3847:6:0;46347:10;3994:23;3986:68;;;;-1:-1:-1;;;3986:68:0;;11804:2:1;3986:68:0;;;11786:21:1;;;11823:18;;;11816:30;-1:-1:-1;;;;;;;;;;;11862:18:1;;;11855:62;11934:18;;3986:68:0;11776:182:1;3986:68:0;-1:-1:-1;;;;;4772:22:0;::::1;4764:73;;;::::0;-1:-1:-1;;;4764:73:0;;10695:2:1;4764:73:0::1;::::0;::::1;10677:21:1::0;10734:2;10714:18;;;10707:30;10773:34;10753:18;;;10746:62;-1:-1:-1;;;10824:18:1;;;10817:36;10870:19;;4764:73:0::1;10667:228:1::0;4764:73:0::1;4848:28;4867:8;4848:18;:28::i;:::-;4683:201:::0;:::o;51909:80::-;3847:6;;-1:-1:-1;;;;;3847:6:0;46347:10;3994:23;3986:68;;;;-1:-1:-1;;;3986:68:0;;11804:2:1;3986:68:0;;;11786:21:1;;;11823:18;;;11816:30;-1:-1:-1;;;;;;;;;;;11862:18:1;;;11855:62;11934:18;;3986:68:0;11776:182:1;3986:68:0;51969:4:::1;:12:::0;;51976:5;;51969:4;-1:-1:-1;;51969:12:0::1;::::0;51976:5;51969:12:::1;::::0;::::1;;;;-1:-1:-1::0;;;51969:12:0::1;;;;;;;;;;;;;;51909:80:::0;:::o;32278:273::-;32335:4;32425:13;;32415:7;:23;32372:152;;;;-1:-1:-1;;32476:26:0;;;;:17;:26;;;;;;-1:-1:-1;;;32476:43:0;:48;;32278:273::o;25480:1129::-;25547:7;25582;25684:13;;25677:4;:20;25673:869;;;25722:14;25739:23;;;:17;:23;;;;;;-1:-1:-1;;;25828:23:0;;25824:699;;26347:113;26354:11;26347:113;;-1:-1:-1;;;26425:6:0;26407:25;;;;:17;:25;;;;;;26347:113;;;26493:6;25480:1129;-1:-1:-1;;;25480:1129:0:o;25824:699::-;25673:869;;26570:31;;-1:-1:-1;;;26570:31:0;;;;;;;;;;;37517:2515;37632:27;37662;37681:7;37662:18;:27::i;:::-;37632:57;;37747:4;-1:-1:-1;;;;;37706:45:0;37722:19;-1:-1:-1;;;;;37706:45:0;;37702:86;;37760:28;;-1:-1:-1;;;37760:28:0;;;;;;;;;;;37702:86;37801:22;46347:10;-1:-1:-1;;;;;37827:27:0;;;;:87;;-1:-1:-1;37871:43:0;37888:4;46347:10;30899:164;:::i;37871:43::-;37827:147;;;-1:-1:-1;46347:10:0;37931:20;37943:7;37931:11;:20::i;:::-;-1:-1:-1;;;;;37931:43:0;;37827:147;37801:174;;37993:17;37988:66;;38019:35;;-1:-1:-1;;;38019:35:0;;;;;;;;;;;37988:66;-1:-1:-1;;;;;38069:16:0;;38065:52;;38094:23;;-1:-1:-1;;;38094:23:0;;;;;;;;;;;38065:52;38246:24;;;;:15;:24;;;;;;;;38239:31;;-1:-1:-1;;;;;;38239:31:0;;;-1:-1:-1;;;;;38638:24:0;;;;;:18;:24;;;;;38636:26;;-1:-1:-1;;38636:26:0;;;38707:22;;;;;;;38705:24;;-1:-1:-1;38705:24:0;;;39000:26;;;:17;:26;;;;;-1:-1:-1;;;39088:15:0;19835:3;39088:41;39046:84;;:128;;39000:174;;;39294:46;;39290:626;;39398:1;39388:11;;39366:19;39521:30;;;:17;:30;;;;;;39517:384;;39659:13;;39644:11;:28;39640:242;;39806:30;;;;:17;:30;;;;;:52;;;39640:242;39290:626;;39963:7;39959:2;-1:-1:-1;;;;;39944:27:0;39953:4;-1:-1:-1;;;;;39944:27:0;;;;;;;;;;;37517:2515;;;;;:::o;5044:191::-;5137:6;;;-1:-1:-1;;;;;5154:17:0;;;-1:-1:-1;;;;;;5154:17:0;;;;;;;5187:40;;5137:6;;;5154:17;5137:6;;5187:40;;5118:16;;5187:40;5044:191;;:::o;32635:104::-;32704:27;32714:2;32718:8;32704:27;;;;;;;;;;;;:9;:27::i;43729:716::-;43913:88;;-1:-1:-1;;;43913:88:0;;43892:4;;-1:-1:-1;;;;;43913:45:0;;;;;:88;;46347:10;;43980:4;;43986:7;;43995:5;;43913:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43913:88:0;;;;;;;;-1:-1:-1;;43913:88:0;;;;;;;;;;;;:::i;:::-;;;43909:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44196:13:0;;44192:235;;44242:40;;-1:-1:-1;;;44242:40:0;;;;;;;;;;;44192:235;44385:6;44379:13;44370:6;44366:2;44362:15;44355:38;43909:529;-1:-1:-1;;;;;;44072:64:0;-1:-1:-1;;;44072:64:0;;-1:-1:-1;43909:529:0;43729:716;;;;;;:::o;6276:190::-;6401:4;6454;6425:25;6438:5;6445:4;6425:12;:25::i;:::-;:33;;6276:190;-1:-1:-1;;;;6276:190:0:o;28520:318::-;28593:13;28624:16;28632:7;28624;:16::i;:::-;28619:59;;28649:29;;-1:-1:-1;;;28649:29:0;;;;;;;;;;;28619:59;28691:21;28715:10;:8;:10::i;:::-;28691:34;;28749:7;28743:21;28768:1;28743:26;;:87;;;;;;;;;;;;;;;;;28796:7;28805:18;28815:7;28805:9;:18::i;:::-;28779:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28736:94;28520:318;-1:-1:-1;;;28520:318:0:o;33112:2236::-;33235:20;33258:13;-1:-1:-1;;;;;33286:16:0;;33282:48;;33311:19;;-1:-1:-1;;;33311:19:0;;;;;;;;;;;33282:48;33345:13;33341:44;;33367:18;;-1:-1:-1;;;33367:18:0;;;;;;;;;;;33341:44;-1:-1:-1;;;;;33934:22:0;;;;;;:18;:22;;;;19318:2;33934:22;;;:70;;33972:31;33960:44;;33934:70;;;34247:31;;;:17;:31;;;;;34340:15;19835:3;34340:41;34298:84;;-1:-1:-1;34418:13:0;;20098:3;34403:56;34298:162;34247:213;;:31;;34541:23;;;;34585:14;:19;34581:635;;34625:313;34656:38;;34681:12;;-1:-1:-1;;;;;34656:38:0;;;34673:1;;34656:38;;34673:1;;34656:38;34722:69;34761:1;34765:2;34769:14;;;;;;34785:5;34722:30;:69::i;:::-;34717:174;;34827:40;;-1:-1:-1;;;34827:40:0;;;;;;;;;;;34717:174;34933:3;34918:12;:18;34625:313;;35019:12;35002:13;;:29;34998:43;;35033:8;;;34998:43;34581:635;;;35082:119;35113:40;;35138:14;;;;;-1:-1:-1;;;;;35113:40:0;;;35130:1;;35113:40;;35130:1;;35113:40;35196:3;35181:12;:18;35082:119;;34581:635;-1:-1:-1;35230:13:0;:28;;;35280:60;;35313:2;35317:12;35331:8;35280:60;:::i;6827:675::-;6910:7;6953:4;6910:7;6968:497;6992:5;:12;6988:1;:16;6968:497;;;7026:20;7049:5;7055:1;7049:8;;;;;;-1:-1:-1;;;7049:8:0;;;;;;;;;;;;;;;7026:31;;7092:12;7076;:28;7072:382;;7578:13;7628:15;;;7664:4;7657:15;;;7711:4;7695:21;;7204:57;;7072:382;;;7578:13;7628:15;;;7664:4;7657:15;;;7711:4;7695:21;;7381:57;;7072:382;-1:-1:-1;7006:3:0;;;;:::i;:::-;;;;6968:497;;;-1:-1:-1;7482:12:0;6827:675;-1:-1:-1;;;6827:675:0:o;49548:108::-;49608:13;49641:7;49634:14;;;;;:::i;46471:1959::-;46942:4;46936:11;;46949:3;46932:21;;47027:17;;;;47724:11;;;47603:5;47856:2;47870;47860:13;;47852:22;47724:11;47839:36;47911:2;47901:13;;47494:682;47930:4;47494:682;;;48105:1;48100:3;48096:11;48089:18;;48156:2;48150:4;48146:13;48142:2;48138:22;48133:3;48125:36;48026:2;48016:13;;47494:682;;;-1:-1:-1;48218:13:0;;;-1:-1:-1;;48333:12:0;;;48393:19;;;48333:12;46567:1856;-1:-1:-1;46567:1856:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:2;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:2;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:2;;;532:1;529;522:12;491:2;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;88:557;;;;;:::o;650:196::-;718:20;;-1:-1:-1;;;;;767:54:1;;757:65;;747:2;;836:1;833;826:12;851:160;916:20;;972:13;;965:21;955:32;;945:2;;1001:1;998;991:12;1016:229;1059:5;1112:3;1105:4;1097:6;1093:17;1089:27;1079:2;;1134:5;1127;1120:20;1079:2;1160:79;1235:3;1226:6;1213:20;1206:4;1198:6;1194:17;1160:79;:::i;1250:196::-;1309:6;1362:2;1350:9;1341:7;1337:23;1333:32;1330:2;;;1383:6;1375;1368:22;1330:2;1411:29;1430:9;1411:29;:::i;1451:270::-;1519:6;1527;1580:2;1568:9;1559:7;1555:23;1551:32;1548:2;;;1601:6;1593;1586:22;1548:2;1629:29;1648:9;1629:29;:::i;:::-;1619:39;;1677:38;1711:2;1700:9;1696:18;1677:38;:::i;:::-;1667:48;;1538:183;;;;;:::o;1726:338::-;1803:6;1811;1819;1872:2;1860:9;1851:7;1847:23;1843:32;1840:2;;;1893:6;1885;1878:22;1840:2;1921:29;1940:9;1921:29;:::i;:::-;1911:39;;1969:38;2003:2;1992:9;1988:18;1969:38;:::i;:::-;1959:48;;2054:2;2043:9;2039:18;2026:32;2016:42;;1830:234;;;;;:::o;2069:696::-;2164:6;2172;2180;2188;2241:3;2229:9;2220:7;2216:23;2212:33;2209:2;;;2263:6;2255;2248:22;2209:2;2291:29;2310:9;2291:29;:::i;:::-;2281:39;;2339:38;2373:2;2362:9;2358:18;2339:38;:::i;:::-;2329:48;;2424:2;2413:9;2409:18;2396:32;2386:42;;2479:2;2468:9;2464:18;2451:32;2506:18;2498:6;2495:30;2492:2;;;2543:6;2535;2528:22;2492:2;2571:22;;2624:4;2616:13;;2612:27;-1:-1:-1;2602:2:1;;2658:6;2650;2643:22;2602:2;2686:73;2751:7;2746:2;2733:16;2728:2;2724;2720:11;2686:73;:::i;:::-;2676:83;;;2199:566;;;;;;;:::o;2770:264::-;2835:6;2843;2896:2;2884:9;2875:7;2871:23;2867:32;2864:2;;;2917:6;2909;2902:22;2864:2;2945:29;2964:9;2945:29;:::i;:::-;2935:39;;2993:35;3024:2;3013:9;3009:18;2993:35;:::i;3039:264::-;3107:6;3115;3168:2;3156:9;3147:7;3143:23;3139:32;3136:2;;;3189:6;3181;3174:22;3136:2;3217:29;3236:9;3217:29;:::i;:::-;3207:39;3293:2;3278:18;;;;3265:32;;-1:-1:-1;;;3126:177:1:o;3308:410::-;3383:6;3391;3444:2;3432:9;3423:7;3419:23;3415:32;3412:2;;;3465:6;3457;3450:22;3412:2;3493:26;3509:9;3493:26;:::i;:::-;3483:36;;3570:2;3559:9;3555:18;3542:32;3597:18;3589:6;3586:30;3583:2;;;3634:6;3626;3619:22;3583:2;3662:50;3704:7;3695:6;3684:9;3680:22;3662:50;:::i;:::-;3652:60;;;3402:316;;;;;:::o;3723:190::-;3782:6;3835:2;3823:9;3814:7;3810:23;3806:32;3803:2;;;3856:6;3848;3841:22;3803:2;-1:-1:-1;3884:23:1;;3793:120;-1:-1:-1;3793:120:1:o;3918:255::-;3976:6;4029:2;4017:9;4008:7;4004:23;4000:32;3997:2;;;4050:6;4042;4035:22;3997:2;4094:9;4081:23;4113:30;4137:5;4113:30;:::i;4178:259::-;4247:6;4300:2;4288:9;4279:7;4275:23;4271:32;4268:2;;;4321:6;4313;4306:22;4268:2;4358:9;4352:16;4377:30;4401:5;4377:30;:::i;4442:285::-;4510:6;4563:2;4551:9;4542:7;4538:23;4534:32;4531:2;;;4584:6;4576;4569:22;4531:2;4628:9;4615:23;4667:1;4660:5;4657:12;4647:2;;4688:6;4680;4673:22;4732:342;4801:6;4854:2;4842:9;4833:7;4829:23;4825:32;4822:2;;;4875:6;4867;4860:22;4822:2;4920:9;4907:23;4953:18;4945:6;4942:30;4939:2;;;4990:6;4982;4975:22;4939:2;5018:50;5060:7;5051:6;5040:9;5036:22;5018:50;:::i;5274:264::-;5342:6;5350;5403:2;5391:9;5382:7;5378:23;5374:32;5371:2;;;5424:6;5416;5409:22;5371:2;5465:9;5452:23;5442:33;;5494:38;5528:2;5517:9;5513:18;5494:38;:::i;5543:733::-;5638:6;5646;5654;5707:2;5695:9;5686:7;5682:23;5678:32;5675:2;;;5728:6;5720;5713:22;5675:2;5769:9;5756:23;5746:33;;5830:2;5819:9;5815:18;5802:32;5853:18;5894:2;5886:6;5883:14;5880:2;;;5915:6;5907;5900:22;5880:2;5958:6;5947:9;5943:22;5933:32;;6003:7;5996:4;5992:2;5988:13;5984:27;5974:2;;6030:6;6022;6015:22;5974:2;6075;6062:16;6101:2;6093:6;6090:14;6087:2;;;6122:6;6114;6107:22;6087:2;6180:7;6175:2;6165:6;6162:1;6158:14;6154:2;6150:23;6146:32;6143:45;6140:2;;;6206:6;6198;6191:22;6140:2;6242;6238;6234:11;6224:21;;6264:6;6254:16;;;;;5665:611;;;;;:::o;6281:257::-;6322:3;6360:5;6354:12;6387:6;6382:3;6375:19;6403:63;6459:6;6452:4;6447:3;6443:14;6436:4;6429:5;6425:16;6403:63;:::i;:::-;6520:2;6499:15;-1:-1:-1;;6495:29:1;6486:39;;;;6527:4;6482:50;;6330:208;-1:-1:-1;;6330:208:1:o;6777:470::-;6956:3;6994:6;6988:13;7010:53;7056:6;7051:3;7044:4;7036:6;7032:17;7010:53;:::i;:::-;7126:13;;7085:16;;;;7148:57;7126:13;7085:16;7182:4;7170:17;;7148:57;:::i;:::-;7221:20;;6964:283;-1:-1:-1;;;;6964:283:1:o;7252:1339::-;7428:3;7466:6;7460:13;7492:4;7505:51;7549:6;7544:3;7539:2;7531:6;7527:15;7505:51;:::i;:::-;7643:13;;7578:16;;;;7614:3;;7703:1;7725:18;;;;7778;;;;7805:2;;7883:4;7873:8;7869:19;7857:31;;7805:2;7946;7936:8;7933:16;7913:18;7910:40;7907:2;;;-1:-1:-1;;;7973:33:1;;8029:4;8026:1;8019:15;8059:4;7980:3;8047:17;7907:2;8090:18;8117:110;;;;8241:1;8236:330;;;;8083:483;;8117:110;-1:-1:-1;;8152:24:1;;8138:39;;8197:20;;;;-1:-1:-1;8117:110:1;;8236:330;12552:4;12571:17;;;12621:4;12605:21;;8331:3;8347:169;8361:8;8358:1;8355:15;8347:169;;;8443:14;;8428:13;;;8421:37;8486:16;;;;8378:10;;8347:169;;;8351:3;;8547:8;8540:5;8536:20;8529:27;;8083:483;-1:-1:-1;8582:3:1;;7436:1155;-1:-1:-1;;;;;;;;;;7436:1155:1:o;9037:511::-;9231:4;-1:-1:-1;;;;;9341:2:1;9333:6;9329:15;9318:9;9311:34;9393:2;9385:6;9381:15;9376:2;9365:9;9361:18;9354:43;;9433:6;9428:2;9417:9;9413:18;9406:34;9476:3;9471:2;9460:9;9456:18;9449:31;9497:45;9537:3;9526:9;9522:19;9514:6;9497:45;:::i;:::-;9489:53;9240:308;-1:-1:-1;;;;;;9240:308:1:o;9927:337::-;10068:2;10053:18;;10101:1;10090:13;;10080:2;;10146:10;10141:3;10137:20;10134:1;10127:31;10181:4;10178:1;10171:15;10209:4;10206:1;10199:15;10080:2;10233:25;;;10035:229;:::o;10269:219::-;10418:2;10407:9;10400:21;10381:4;10438:44;10478:2;10467:9;10463:18;10455:6;10438:44;:::i;12637:128::-;12677:3;12708:1;12704:6;12701:1;12698:13;12695:2;;;12714:18;;:::i;:::-;-1:-1:-1;12750:9:1;;12685:80::o;12770:168::-;12810:7;12876:1;12872;12868:6;12864:14;12861:1;12858:21;12853:1;12846:9;12839:17;12835:45;12832:2;;;12883:18;;:::i;:::-;-1:-1:-1;12923:9:1;;12822:116::o;12943:125::-;12983:4;13011:1;13008;13005:8;13002:2;;;13016:18;;:::i;:::-;-1:-1:-1;13053:9:1;;12992:76::o;13073:258::-;13145:1;13155:113;13169:6;13166:1;13163:13;13155:113;;;13245:11;;;13239:18;13226:11;;;13219:39;13191:2;13184:10;13155:113;;;13286:6;13283:1;13280:13;13277:2;;;-1:-1:-1;;13321:1:1;13303:16;;13296:27;13126:205::o;13336:380::-;13415:1;13411:12;;;;13458;;;13479:2;;13533:4;13525:6;13521:17;13511:27;;13479:2;13586;13578:6;13575:14;13555:18;13552:38;13549:2;;;13632:10;13627:3;13623:20;13620:1;13613:31;13667:4;13664:1;13657:15;13695:4;13692:1;13685:15;13549:2;;13391:325;;;:::o;13721:135::-;13760:3;-1:-1:-1;;13781:17:1;;13778:2;;;13801:18;;:::i;:::-;-1:-1:-1;13848:1:1;13837:13;;13768:88::o;13861:127::-;13922:10;13917:3;13913:20;13910:1;13903:31;13953:4;13950:1;13943:15;13977:4;13974:1;13967:15;13993:127;14054:10;14049:3;14045:20;14042:1;14035:31;14085:4;14082:1;14075:15;14109:4;14106:1;14099:15;14125:131;-1:-1:-1;;;;;;14199:32:1;;14189:43;;14179:2;;14246:1;14243;14236:12
Swarm Source
ipfs://9b6163be3de444faf843bbfdfc0f4cd5fa8a2dc1de3a8281d870363e345ccca4
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.