Mumbai Testnet

Token

2 (2)
ERC-721

Overview

Max Total Supply

0 2

Holders

14

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-
Balance
0 2
0x14723a09acff6d2a60dcdf7aa4aff308fddc160c
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
NFT

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at mumbai.polygonscan.com on 2021-12-27
*/

// File: @openzeppelin/contracts/utils/Strings.sol


// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

// File: @openzeppelin/contracts/token/ERC721/ERC721.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;








/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

// File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol)

pragma solidity ^0.8.0;



/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
        return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

// File: contracts/Copy_dachi_97971.sol





pragma solidity >=0.7.0 <0.9.0;



contract NFT is ERC721Enumerable, Ownable {
  using Strings for uint256;

  string baseURI;
  string public baseExtension = ".json";
  uint256 public cost = 0.05 ether;
  uint256 public maxSupply = 10000;
  uint256 public maxMintAmount = 200;
  uint256[] public gvwyidslist;
  bool public paused = false;
  bool public revealed = false;
  string public notRevealedUri;

  constructor(
    string memory _name,
    string memory _symbol,
    string memory _initBaseURI,
    string memory _initNotRevealedUri
  ) ERC721(_name, _symbol) {
    setBaseURI(_initBaseURI);
    setNotRevealedURI(_initNotRevealedUri);
    
  }

  // internal
  function _baseURI() internal view virtual override returns (string memory) {
    return baseURI;
  }



  // public
  function mint(uint256 _mintAmount) public payable {
    uint256 supply = totalSupply();
    require(!paused);
    require(_mintAmount > 0);
    require(_mintAmount <= maxMintAmount);
    require(supply + _mintAmount <= maxSupply);

    if (msg.sender != owner()) {
      require(msg.value >= cost * _mintAmount);
    }

    for (uint256 i = 1; i <= _mintAmount; i++) {
      _safeMint(msg.sender, supply + i);
    }
  }

  function walletOfOwner(address _owner)
    public
    view
    returns (uint256[] memory)
  {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory tokenIds = new uint256[](ownerTokenCount);
    for (uint256 i; i < ownerTokenCount; i++) {
      tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
    }
    return tokenIds;
  }

  function Ownidlist() public onlyOwner returns  (uint256[] memory) {
    gvwyidslist = walletOfOwner(msg.sender);
    return gvwyidslist;
  }
  
  function checkgvwyidlist() public view returns (uint256[] memory) {
    return gvwyidslist;
  }

  function _getidlength() internal view onlyOwner returns (uint256) {
    return gvwyidslist.length;
  }

  function Check_lengthOf_addList(address[] memory _addList) public view onlyOwner returns (uint256) {
    return _addList.length;
    
  }


  function giveawaysetter(address[] memory _addList) public onlyOwner returns(uint256) {
    Ownidlist();
    require (_getidlength() >= _addList.length, "I don't have enough!!!");
    
    uint256 gvaydellength;
    gvaydellength = _getidlength() - _addList.length;

    for(uint i=0; i < gvaydellength; i++){

      gvwyidslist.pop();

    }

    return(gvwyidslist.length);
  }

  function giveawayWarrior(address[] memory _addList) public onlyOwner returns(uint256) {

    
    giveawaysetter(_addList);

    require (_addList.length == gvwyidslist.length, "input length must be same");
    
/*    require (
      for(uint r = 0; r < _addList.length; r++){
      _exists(_addList[r]);
      }
    );
*/
    for(uint g=0; g < _addList.length; g++){
      _transfer(msg.sender, _addList[g], gvwyidslist[g]);
    }

    return(Check_lengthOf_addList(_addList));
  }


  function tokenURI(uint256 tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );
    
    if(revealed == false) {
        return notRevealedUri;
    }

    string memory currentBaseURI = _baseURI();
    return bytes(currentBaseURI).length > 0
        ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension))
        : "";
  }

  //only owner
  function reveal() public onlyOwner {
      revealed = true;
  }
  
  function setCost(uint256 _newCost) public onlyOwner {
    cost = _newCost;
  }

  function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner {
    maxMintAmount = _newmaxMintAmount;
  }
  
  function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
    notRevealedUri = _notRevealedURI;
  }

  function setBaseURI(string memory _newBaseURI) public onlyOwner {
    baseURI = _newBaseURI;
  }

  function setBaseExtension(string memory _newBaseExtension) public onlyOwner {
    baseExtension = _newBaseExtension;
  }

  function pause(bool _state) public onlyOwner {
    paused = _state;
  }
 
  function withdraw() public payable onlyOwner {

    // This will payout the owner 95% of the contract balance.
    // Do not remove this otherwise you will not be able to withdraw the funds.
    // =============================================================================
    (bool os, ) = payable(owner()).call{value: address(this).balance}("");
    require(os);
    // =============================================================================
  }
}

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"_addList","type":"address[]"}],"name":"Check_lengthOf_addList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Ownidlist","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"nonpayable","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":"checkgvwyidlist","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addList","type":"address[]"}],"name":"giveawayWarrior","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addList","type":"address[]"}],"name":"giveawaysetter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"gvwyidslist","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":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60c06040526005608081905264173539b7b760d91b60a09081526200002891600c9190620001ff565b5066b1a2bc2ec50000600d55612710600e5560c8600f556011805461ffff191690553480156200005757600080fd5b5060405162002dec38038062002dec8339810160408190526200007a9162000372565b83518490849062000093906000906020850190620001ff565b508051620000a9906001906020840190620001ff565b505050620000c6620000c0620000e660201b60201c565b620000ea565b620000d1826200013c565b620000dc81620001a4565b5050505062000468565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600a546001600160a01b031633146200018b5760405162461bcd60e51b8152602060048201819052602482015260008051602062002dcc83398151915260448201526064015b60405180910390fd5b8051620001a090600b906020840190620001ff565b5050565b600a546001600160a01b03163314620001ef5760405162461bcd60e51b8152602060048201819052602482015260008051602062002dcc833981519152604482015260640162000182565b8051620001a09060129060208401905b8280546200020d906200042b565b90600052602060002090601f0160209004810192826200023157600085556200027c565b82601f106200024c57805160ff19168380011785556200027c565b828001600101855582156200027c579182015b828111156200027c5782518255916020019190600101906200025f565b506200028a9291506200028e565b5090565b5b808211156200028a57600081556001016200028f565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620002cd57600080fd5b81516001600160401b0380821115620002ea57620002ea620002a5565b604051601f8301601f19908116603f01168101908282118183101715620003155762000315620002a5565b816040528381526020925086838588010111156200033257600080fd5b600091505b8382101562000356578582018301518183018401529082019062000337565b83821115620003685760008385830101525b9695505050505050565b600080600080608085870312156200038957600080fd5b84516001600160401b0380821115620003a157600080fd5b620003af88838901620002bb565b95506020870151915080821115620003c657600080fd5b620003d488838901620002bb565b94506040870151915080821115620003eb57600080fd5b620003f988838901620002bb565b935060608701519150808211156200041057600080fd5b506200041f87828801620002bb565b91505092959194509250565b600181811c908216806200044057607f821691505b602082108114156200046257634e487b7160e01b600052602260045260246000fd5b50919050565b61295480620004786000396000f3fe6080604052600436106102515760003560e01c80635c975abb11610139578063a475b5dd116100b6578063d5abeb011161007a578063d5abeb0114610688578063da3ef23f1461069e578063e985e9c5146106be578063eb507f5314610707578063f2c4ce1e14610727578063f2fde38b1461074757600080fd5b8063a475b5dd146105fe578063a535e30414610613578063b88d4fde14610633578063c668286214610653578063c87b56dd1461066857600080fd5b80637f00c7a6116100fd5780637f00c7a6146105785780638da5cb5b1461059857806395d89b41146105b6578063a0712d68146105cb578063a22cb465146105de57600080fd5b80635c975abb146104f45780636352211e1461050e57806370a082311461052e578063715018a61461054e57806372e107801461056357600080fd5b8063239c70ae116101d257806342842e0e1161019657806342842e0e14610435578063438b63001461045557806344a0d68a146104755780634f6ccce71461049557806351830227146104b557806355f804b3146104d457600080fd5b8063239c70ae146103b757806323b872dd146103cd5780632f745c59146103ed578063371ad1471461040d5780633ccfd60b1461042d57600080fd5b8063081c8c4411610219578063081c8c4414610335578063095ea7b31461034a57806311a63e031461036a57806313faede61461038c57806318160ddd146103a257600080fd5b806301ffc9a71461025657806302329a291461028b57806304be2137146102ad57806306fdde03146102db578063081812fc146102fd575b600080fd5b34801561026257600080fd5b506102766102713660046121ee565b610767565b60405190151581526020015b60405180910390f35b34801561029757600080fd5b506102ab6102a636600461221b565b610792565b005b3480156102b957600080fd5b506102cd6102c8366004612294565b6107d8565b604051908152602001610282565b3480156102e757600080fd5b506102f06108c9565b6040516102829190612399565b34801561030957600080fd5b5061031d6103183660046123ac565b61095b565b6040516001600160a01b039091168152602001610282565b34801561034157600080fd5b506102f06109f0565b34801561035657600080fd5b506102ab6103653660046123c5565b610a7e565b34801561037657600080fd5b5061037f610b94565b60405161028291906123ef565b34801561039857600080fd5b506102cd600d5481565b3480156103ae57600080fd5b506008546102cd565b3480156103c357600080fd5b506102cd600f5481565b3480156103d957600080fd5b506102ab6103e8366004612433565b610c34565b3480156103f957600080fd5b506102cd6104083660046123c5565b610c65565b34801561041957600080fd5b506102cd610428366004612294565b610cfb565b6102ab610ded565b34801561044157600080fd5b506102ab610450366004612433565b610e8b565b34801561046157600080fd5b5061037f61047036600461246f565b610ea6565b34801561048157600080fd5b506102ab6104903660046123ac565b610f48565b3480156104a157600080fd5b506102cd6104b03660046123ac565b610f77565b3480156104c157600080fd5b5060115461027690610100900460ff1681565b3480156104e057600080fd5b506102ab6104ef3660046124e2565b61100a565b34801561050057600080fd5b506011546102769060ff1681565b34801561051a57600080fd5b5061031d6105293660046123ac565b61104b565b34801561053a57600080fd5b506102cd61054936600461246f565b6110c2565b34801561055a57600080fd5b506102ab611149565b34801561056f57600080fd5b5061037f61117f565b34801561058457600080fd5b506102ab6105933660046123ac565b6111d5565b3480156105a457600080fd5b50600a546001600160a01b031661031d565b3480156105c257600080fd5b506102f0611204565b6102ab6105d93660046123ac565b611213565b3480156105ea57600080fd5b506102ab6105f936600461252b565b6112c0565b34801561060a57600080fd5b506102ab6112cb565b34801561061f57600080fd5b506102cd61062e366004612294565b611306565b34801561063f57600080fd5b506102ab61064e36600461255e565b611338565b34801561065f57600080fd5b506102f0611370565b34801561067457600080fd5b506102f06106833660046123ac565b61137d565b34801561069457600080fd5b506102cd600e5481565b3480156106aa57600080fd5b506102ab6106b93660046124e2565b6114fc565b3480156106ca57600080fd5b506102766106d93660046125da565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561071357600080fd5b506102cd6107223660046123ac565b611539565b34801561073357600080fd5b506102ab6107423660046124e2565b61155a565b34801561075357600080fd5b506102ab61076236600461246f565b611597565b60006001600160e01b0319821663780e9d6360e01b148061078c575061078c8261162f565b92915050565b600a546001600160a01b031633146107c55760405162461bcd60e51b81526004016107bc90612604565b60405180910390fd5b6011805460ff1916911515919091179055565b600a546000906001600160a01b031633146108055760405162461bcd60e51b81526004016107bc90612604565b61080d610b94565b50815161081861167f565b101561085f5760405162461bcd60e51b81526020600482015260166024820152754920646f6e2774206861766520656e6f75676821212160501b60448201526064016107bc565b6000825161086b61167f565b610875919061264f565b905060005b818110156108bc57601080548061089357610893612666565b6001900381819060005260206000200160009055905580806108b49061267c565b91505061087a565b505060105490505b919050565b6060600080546108d890612697565b80601f016020809104026020016040519081016040528092919081815260200182805461090490612697565b80156109515780601f1061092657610100808354040283529160200191610951565b820191906000526020600020905b81548152906001019060200180831161093457829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166109d45760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016107bc565b506000908152600460205260409020546001600160a01b031690565b601280546109fd90612697565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2990612697565b8015610a765780601f10610a4b57610100808354040283529160200191610a76565b820191906000526020600020905b815481529060010190602001808311610a5957829003601f168201915b505050505081565b6000610a898261104b565b9050806001600160a01b0316836001600160a01b03161415610af75760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016107bc565b336001600160a01b0382161480610b135750610b1381336106d9565b610b855760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016107bc565b610b8f83836116b3565b505050565b600a546060906001600160a01b03163314610bc15760405162461bcd60e51b81526004016107bc90612604565b610bca33610ea6565b8051610bde91601091602090910190612105565b50601080548060200260200160405190810160405280929190818152602001828054801561095157602002820191906000526020600020905b815481526020019060010190808311610c17575050505050905090565b610c3e3382611721565b610c5a5760405162461bcd60e51b81526004016107bc906126d2565b610b8f838383611818565b6000610c70836110c2565b8210610cd25760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016107bc565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546000906001600160a01b03163314610d285760405162461bcd60e51b81526004016107bc90612604565b610d31826107d8565b50601054825114610d845760405162461bcd60e51b815260206004820152601960248201527f696e707574206c656e677468206d7573742062652073616d650000000000000060448201526064016107bc565b60005b8251811015610de357610dd133848381518110610da657610da6612723565b602002602001015160108481548110610dc157610dc1612723565b9060005260206000200154611818565b80610ddb8161267c565b915050610d87565b5061078c82611306565b600a546001600160a01b03163314610e175760405162461bcd60e51b81526004016107bc90612604565b6000610e2b600a546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610e75576040519150601f19603f3d011682016040523d82523d6000602084013e610e7a565b606091505b5050905080610e8857600080fd5b50565b610b8f83838360405180602001604052806000815250611338565b60606000610eb3836110c2565b905060008167ffffffffffffffff811115610ed057610ed0612236565b604051908082528060200260200182016040528015610ef9578160200160208202803683370190505b50905060005b82811015610f4057610f118582610c65565b828281518110610f2357610f23612723565b602090810291909101015280610f388161267c565b915050610eff565b509392505050565b600a546001600160a01b03163314610f725760405162461bcd60e51b81526004016107bc90612604565b600d55565b6000610f8260085490565b8210610fe55760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016107bc565b60088281548110610ff857610ff8612723565b90600052602060002001549050919050565b600a546001600160a01b031633146110345760405162461bcd60e51b81526004016107bc90612604565b805161104790600b906020840190612150565b5050565b6000818152600260205260408120546001600160a01b03168061078c5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016107bc565b60006001600160a01b03821661112d5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016107bc565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146111735760405162461bcd60e51b81526004016107bc90612604565b61117d60006119c3565b565b606060108054806020026020016040519081016040528092919081815260200182805480156109515760200282019190600052602060002090815481526020019060010190808311610c17575050505050905090565b600a546001600160a01b031633146111ff5760405162461bcd60e51b81526004016107bc90612604565b600f55565b6060600180546108d890612697565b600061121e60085490565b60115490915060ff161561123157600080fd5b6000821161123e57600080fd5b600f5482111561124d57600080fd5b600e5461125a8383612739565b111561126557600080fd5b600a546001600160a01b031633146112915781600d546112859190612751565b34101561129157600080fd5b60015b828111610b8f576112ae336112a98385612739565b611a15565b806112b88161267c565b915050611294565b611047338383611a2f565b600a546001600160a01b031633146112f55760405162461bcd60e51b81526004016107bc90612604565b6011805461ff001916610100179055565b600a546000906001600160a01b031633146113335760405162461bcd60e51b81526004016107bc90612604565b505190565b6113423383611721565b61135e5760405162461bcd60e51b81526004016107bc906126d2565b61136a84848484611afe565b50505050565b600c80546109fd90612697565b6000818152600260205260409020546060906001600160a01b03166113fc5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016107bc565b601154610100900460ff1661149d576012805461141890612697565b80601f016020809104026020016040519081016040528092919081815260200182805461144490612697565b80156114915780601f1061146657610100808354040283529160200191611491565b820191906000526020600020905b81548152906001019060200180831161147457829003601f168201915b50505050509050919050565b60006114a7611b31565b905060008151116114c757604051806020016040528060008152506114f5565b806114d184611b40565b600c6040516020016114e593929190612770565b6040516020818303038152906040525b9392505050565b600a546001600160a01b031633146115265760405162461bcd60e51b81526004016107bc90612604565b805161104790600c906020840190612150565b6010818154811061154957600080fd5b600091825260209091200154905081565b600a546001600160a01b031633146115845760405162461bcd60e51b81526004016107bc90612604565b8051611047906012906020840190612150565b600a546001600160a01b031633146115c15760405162461bcd60e51b81526004016107bc90612604565b6001600160a01b0381166116265760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107bc565b610e88816119c3565b60006001600160e01b031982166380ac58cd60e01b148061166057506001600160e01b03198216635b5e139f60e01b145b8061078c57506301ffc9a760e01b6001600160e01b031983161461078c565b600a546000906001600160a01b031633146116ac5760405162461bcd60e51b81526004016107bc90612604565b5060105490565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906116e88261104b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b031661179a5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016107bc565b60006117a58361104b565b9050806001600160a01b0316846001600160a01b031614806117e05750836001600160a01b03166117d58461095b565b6001600160a01b0316145b8061181057506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661182b8261104b565b6001600160a01b0316146118935760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016107bc565b6001600160a01b0382166118f55760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016107bc565b611900838383611c3e565b61190b6000826116b3565b6001600160a01b038316600090815260036020526040812080546001929061193490849061264f565b90915550506001600160a01b0382166000908152600360205260408120805460019290611962908490612739565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611047828260405180602001604052806000815250611cf6565b816001600160a01b0316836001600160a01b03161415611a915760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016107bc565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611b09848484611818565b611b1584848484611d29565b61136a5760405162461bcd60e51b81526004016107bc90612834565b6060600b80546108d890612697565b606081611b645750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611b8e5780611b788161267c565b9150611b879050600a8361289c565b9150611b68565b60008167ffffffffffffffff811115611ba957611ba9612236565b6040519080825280601f01601f191660200182016040528015611bd3576020820181803683370190505b5090505b841561181057611be860018361264f565b9150611bf5600a866128b0565b611c00906030612739565b60f81b818381518110611c1557611c15612723565b60200101906001600160f81b031916908160001a905350611c37600a8661289c565b9450611bd7565b6001600160a01b038316611c9957611c9481600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611cbc565b816001600160a01b0316836001600160a01b031614611cbc57611cbc8382611e27565b6001600160a01b038216611cd357610b8f81611ec4565b826001600160a01b0316826001600160a01b031614610b8f57610b8f8282611f73565b611d008383611fb7565b611d0d6000848484611d29565b610b8f5760405162461bcd60e51b81526004016107bc90612834565b60006001600160a01b0384163b15611e1c57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611d6d9033908990889088906004016128c4565b6020604051808303816000875af1925050508015611da8575060408051601f3d908101601f19168201909252611da591810190612901565b60015b611e02573d808015611dd6576040519150601f19603f3d011682016040523d82523d6000602084013e611ddb565b606091505b508051611dfa5760405162461bcd60e51b81526004016107bc90612834565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611810565b506001949350505050565b60006001611e34846110c2565b611e3e919061264f565b600083815260076020526040902054909150808214611e91576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611ed69060019061264f565b60008381526009602052604081205460088054939450909284908110611efe57611efe612723565b906000526020600020015490508060088381548110611f1f57611f1f612723565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611f5757611f57612666565b6001900381819060005260206000200160009055905550505050565b6000611f7e836110c2565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b03821661200d5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016107bc565b6000818152600260205260409020546001600160a01b0316156120725760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016107bc565b61207e60008383611c3e565b6001600160a01b03821660009081526003602052604081208054600192906120a7908490612739565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054828255906000526020600020908101928215612140579160200282015b82811115612140578251825591602001919060010190612125565b5061214c9291506121c3565b5090565b82805461215c90612697565b90600052602060002090601f01602090048101928261217e5760008555612140565b82601f1061219757805160ff1916838001178555612140565b828001600101855582156121405791820182811115612140578251825591602001919060010190612125565b5b8082111561214c57600081556001016121c4565b6001600160e01b031981168114610e8857600080fd5b60006020828403121561220057600080fd5b81356114f5816121d8565b803580151581146108c457600080fd5b60006020828403121561222d57600080fd5b6114f58261220b565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561227557612275612236565b604052919050565b80356001600160a01b03811681146108c457600080fd5b600060208083850312156122a757600080fd5b823567ffffffffffffffff808211156122bf57600080fd5b818501915085601f8301126122d357600080fd5b8135818111156122e5576122e5612236565b8060051b91506122f684830161224c565b818152918301840191848101908884111561231057600080fd5b938501935b83851015612335576123268561227d565b82529385019390850190612315565b98975050505050505050565b60005b8381101561235c578181015183820152602001612344565b8381111561136a5750506000910152565b60008151808452612385816020860160208601612341565b601f01601f19169290920160200192915050565b6020815260006114f5602083018461236d565b6000602082840312156123be57600080fd5b5035919050565b600080604083850312156123d857600080fd5b6123e18361227d565b946020939093013593505050565b6020808252825182820181905260009190848201906040850190845b818110156124275783518352928401929184019160010161240b565b50909695505050505050565b60008060006060848603121561244857600080fd5b6124518461227d565b925061245f6020850161227d565b9150604084013590509250925092565b60006020828403121561248157600080fd5b6114f58261227d565b600067ffffffffffffffff8311156124a4576124a4612236565b6124b7601f8401601f191660200161224c565b90508281528383830111156124cb57600080fd5b828260208301376000602084830101529392505050565b6000602082840312156124f457600080fd5b813567ffffffffffffffff81111561250b57600080fd5b8201601f8101841361251c57600080fd5b6118108482356020840161248a565b6000806040838503121561253e57600080fd5b6125478361227d565b91506125556020840161220b565b90509250929050565b6000806000806080858703121561257457600080fd5b61257d8561227d565b935061258b6020860161227d565b925060408501359150606085013567ffffffffffffffff8111156125ae57600080fd5b8501601f810187136125bf57600080fd5b6125ce8782356020840161248a565b91505092959194509250565b600080604083850312156125ed57600080fd5b6125f68361227d565b91506125556020840161227d565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008282101561266157612661612639565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561269057612690612639565b5060010190565b600181811c908216806126ab57607f821691505b602082108114156126cc57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6000821982111561274c5761274c612639565b500190565b600081600019048311821515161561276b5761276b612639565b500290565b6000845160206127838285838a01612341565b8551918401916127968184848a01612341565b8554920191600090600181811c90808316806127b357607f831692505b8583108114156127d157634e487b7160e01b85526022600452602485fd5b8080156127e557600181146127f657612823565b60ff19851688528388019550612823565b60008b81526020902060005b8581101561281b5781548a820152908401908801612802565b505083880195505b50939b9a5050505050505050505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b6000826128ab576128ab612886565b500490565b6000826128bf576128bf612886565b500690565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906128f79083018461236d565b9695505050505050565b60006020828403121561291357600080fd5b81516114f5816121d856fea2646970667358221220bc023f69e4a5eb0f622fa4ab94f9546e5ee4976ce74a175508dcd6b45ae888e864736f6c634300080b00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000132000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102515760003560e01c80635c975abb11610139578063a475b5dd116100b6578063d5abeb011161007a578063d5abeb0114610688578063da3ef23f1461069e578063e985e9c5146106be578063eb507f5314610707578063f2c4ce1e14610727578063f2fde38b1461074757600080fd5b8063a475b5dd146105fe578063a535e30414610613578063b88d4fde14610633578063c668286214610653578063c87b56dd1461066857600080fd5b80637f00c7a6116100fd5780637f00c7a6146105785780638da5cb5b1461059857806395d89b41146105b6578063a0712d68146105cb578063a22cb465146105de57600080fd5b80635c975abb146104f45780636352211e1461050e57806370a082311461052e578063715018a61461054e57806372e107801461056357600080fd5b8063239c70ae116101d257806342842e0e1161019657806342842e0e14610435578063438b63001461045557806344a0d68a146104755780634f6ccce71461049557806351830227146104b557806355f804b3146104d457600080fd5b8063239c70ae146103b757806323b872dd146103cd5780632f745c59146103ed578063371ad1471461040d5780633ccfd60b1461042d57600080fd5b8063081c8c4411610219578063081c8c4414610335578063095ea7b31461034a57806311a63e031461036a57806313faede61461038c57806318160ddd146103a257600080fd5b806301ffc9a71461025657806302329a291461028b57806304be2137146102ad57806306fdde03146102db578063081812fc146102fd575b600080fd5b34801561026257600080fd5b506102766102713660046121ee565b610767565b60405190151581526020015b60405180910390f35b34801561029757600080fd5b506102ab6102a636600461221b565b610792565b005b3480156102b957600080fd5b506102cd6102c8366004612294565b6107d8565b604051908152602001610282565b3480156102e757600080fd5b506102f06108c9565b6040516102829190612399565b34801561030957600080fd5b5061031d6103183660046123ac565b61095b565b6040516001600160a01b039091168152602001610282565b34801561034157600080fd5b506102f06109f0565b34801561035657600080fd5b506102ab6103653660046123c5565b610a7e565b34801561037657600080fd5b5061037f610b94565b60405161028291906123ef565b34801561039857600080fd5b506102cd600d5481565b3480156103ae57600080fd5b506008546102cd565b3480156103c357600080fd5b506102cd600f5481565b3480156103d957600080fd5b506102ab6103e8366004612433565b610c34565b3480156103f957600080fd5b506102cd6104083660046123c5565b610c65565b34801561041957600080fd5b506102cd610428366004612294565b610cfb565b6102ab610ded565b34801561044157600080fd5b506102ab610450366004612433565b610e8b565b34801561046157600080fd5b5061037f61047036600461246f565b610ea6565b34801561048157600080fd5b506102ab6104903660046123ac565b610f48565b3480156104a157600080fd5b506102cd6104b03660046123ac565b610f77565b3480156104c157600080fd5b5060115461027690610100900460ff1681565b3480156104e057600080fd5b506102ab6104ef3660046124e2565b61100a565b34801561050057600080fd5b506011546102769060ff1681565b34801561051a57600080fd5b5061031d6105293660046123ac565b61104b565b34801561053a57600080fd5b506102cd61054936600461246f565b6110c2565b34801561055a57600080fd5b506102ab611149565b34801561056f57600080fd5b5061037f61117f565b34801561058457600080fd5b506102ab6105933660046123ac565b6111d5565b3480156105a457600080fd5b50600a546001600160a01b031661031d565b3480156105c257600080fd5b506102f0611204565b6102ab6105d93660046123ac565b611213565b3480156105ea57600080fd5b506102ab6105f936600461252b565b6112c0565b34801561060a57600080fd5b506102ab6112cb565b34801561061f57600080fd5b506102cd61062e366004612294565b611306565b34801561063f57600080fd5b506102ab61064e36600461255e565b611338565b34801561065f57600080fd5b506102f0611370565b34801561067457600080fd5b506102f06106833660046123ac565b61137d565b34801561069457600080fd5b506102cd600e5481565b3480156106aa57600080fd5b506102ab6106b93660046124e2565b6114fc565b3480156106ca57600080fd5b506102766106d93660046125da565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561071357600080fd5b506102cd6107223660046123ac565b611539565b34801561073357600080fd5b506102ab6107423660046124e2565b61155a565b34801561075357600080fd5b506102ab61076236600461246f565b611597565b60006001600160e01b0319821663780e9d6360e01b148061078c575061078c8261162f565b92915050565b600a546001600160a01b031633146107c55760405162461bcd60e51b81526004016107bc90612604565b60405180910390fd5b6011805460ff1916911515919091179055565b600a546000906001600160a01b031633146108055760405162461bcd60e51b81526004016107bc90612604565b61080d610b94565b50815161081861167f565b101561085f5760405162461bcd60e51b81526020600482015260166024820152754920646f6e2774206861766520656e6f75676821212160501b60448201526064016107bc565b6000825161086b61167f565b610875919061264f565b905060005b818110156108bc57601080548061089357610893612666565b6001900381819060005260206000200160009055905580806108b49061267c565b91505061087a565b505060105490505b919050565b6060600080546108d890612697565b80601f016020809104026020016040519081016040528092919081815260200182805461090490612697565b80156109515780601f1061092657610100808354040283529160200191610951565b820191906000526020600020905b81548152906001019060200180831161093457829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166109d45760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016107bc565b506000908152600460205260409020546001600160a01b031690565b601280546109fd90612697565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2990612697565b8015610a765780601f10610a4b57610100808354040283529160200191610a76565b820191906000526020600020905b815481529060010190602001808311610a5957829003601f168201915b505050505081565b6000610a898261104b565b9050806001600160a01b0316836001600160a01b03161415610af75760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016107bc565b336001600160a01b0382161480610b135750610b1381336106d9565b610b855760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016107bc565b610b8f83836116b3565b505050565b600a546060906001600160a01b03163314610bc15760405162461bcd60e51b81526004016107bc90612604565b610bca33610ea6565b8051610bde91601091602090910190612105565b50601080548060200260200160405190810160405280929190818152602001828054801561095157602002820191906000526020600020905b815481526020019060010190808311610c17575050505050905090565b610c3e3382611721565b610c5a5760405162461bcd60e51b81526004016107bc906126d2565b610b8f838383611818565b6000610c70836110c2565b8210610cd25760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016107bc565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546000906001600160a01b03163314610d285760405162461bcd60e51b81526004016107bc90612604565b610d31826107d8565b50601054825114610d845760405162461bcd60e51b815260206004820152601960248201527f696e707574206c656e677468206d7573742062652073616d650000000000000060448201526064016107bc565b60005b8251811015610de357610dd133848381518110610da657610da6612723565b602002602001015160108481548110610dc157610dc1612723565b9060005260206000200154611818565b80610ddb8161267c565b915050610d87565b5061078c82611306565b600a546001600160a01b03163314610e175760405162461bcd60e51b81526004016107bc90612604565b6000610e2b600a546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610e75576040519150601f19603f3d011682016040523d82523d6000602084013e610e7a565b606091505b5050905080610e8857600080fd5b50565b610b8f83838360405180602001604052806000815250611338565b60606000610eb3836110c2565b905060008167ffffffffffffffff811115610ed057610ed0612236565b604051908082528060200260200182016040528015610ef9578160200160208202803683370190505b50905060005b82811015610f4057610f118582610c65565b828281518110610f2357610f23612723565b602090810291909101015280610f388161267c565b915050610eff565b509392505050565b600a546001600160a01b03163314610f725760405162461bcd60e51b81526004016107bc90612604565b600d55565b6000610f8260085490565b8210610fe55760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016107bc565b60088281548110610ff857610ff8612723565b90600052602060002001549050919050565b600a546001600160a01b031633146110345760405162461bcd60e51b81526004016107bc90612604565b805161104790600b906020840190612150565b5050565b6000818152600260205260408120546001600160a01b03168061078c5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016107bc565b60006001600160a01b03821661112d5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016107bc565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146111735760405162461bcd60e51b81526004016107bc90612604565b61117d60006119c3565b565b606060108054806020026020016040519081016040528092919081815260200182805480156109515760200282019190600052602060002090815481526020019060010190808311610c17575050505050905090565b600a546001600160a01b031633146111ff5760405162461bcd60e51b81526004016107bc90612604565b600f55565b6060600180546108d890612697565b600061121e60085490565b60115490915060ff161561123157600080fd5b6000821161123e57600080fd5b600f5482111561124d57600080fd5b600e5461125a8383612739565b111561126557600080fd5b600a546001600160a01b031633146112915781600d546112859190612751565b34101561129157600080fd5b60015b828111610b8f576112ae336112a98385612739565b611a15565b806112b88161267c565b915050611294565b611047338383611a2f565b600a546001600160a01b031633146112f55760405162461bcd60e51b81526004016107bc90612604565b6011805461ff001916610100179055565b600a546000906001600160a01b031633146113335760405162461bcd60e51b81526004016107bc90612604565b505190565b6113423383611721565b61135e5760405162461bcd60e51b81526004016107bc906126d2565b61136a84848484611afe565b50505050565b600c80546109fd90612697565b6000818152600260205260409020546060906001600160a01b03166113fc5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016107bc565b601154610100900460ff1661149d576012805461141890612697565b80601f016020809104026020016040519081016040528092919081815260200182805461144490612697565b80156114915780601f1061146657610100808354040283529160200191611491565b820191906000526020600020905b81548152906001019060200180831161147457829003601f168201915b50505050509050919050565b60006114a7611b31565b905060008151116114c757604051806020016040528060008152506114f5565b806114d184611b40565b600c6040516020016114e593929190612770565b6040516020818303038152906040525b9392505050565b600a546001600160a01b031633146115265760405162461bcd60e51b81526004016107bc90612604565b805161104790600c906020840190612150565b6010818154811061154957600080fd5b600091825260209091200154905081565b600a546001600160a01b031633146115845760405162461bcd60e51b81526004016107bc90612604565b8051611047906012906020840190612150565b600a546001600160a01b031633146115c15760405162461bcd60e51b81526004016107bc90612604565b6001600160a01b0381166116265760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107bc565b610e88816119c3565b60006001600160e01b031982166380ac58cd60e01b148061166057506001600160e01b03198216635b5e139f60e01b145b8061078c57506301ffc9a760e01b6001600160e01b031983161461078c565b600a546000906001600160a01b031633146116ac5760405162461bcd60e51b81526004016107bc90612604565b5060105490565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906116e88261104b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b031661179a5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016107bc565b60006117a58361104b565b9050806001600160a01b0316846001600160a01b031614806117e05750836001600160a01b03166117d58461095b565b6001600160a01b0316145b8061181057506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661182b8261104b565b6001600160a01b0316146118935760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016107bc565b6001600160a01b0382166118f55760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016107bc565b611900838383611c3e565b61190b6000826116b3565b6001600160a01b038316600090815260036020526040812080546001929061193490849061264f565b90915550506001600160a01b0382166000908152600360205260408120805460019290611962908490612739565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611047828260405180602001604052806000815250611cf6565b816001600160a01b0316836001600160a01b03161415611a915760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016107bc565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611b09848484611818565b611b1584848484611d29565b61136a5760405162461bcd60e51b81526004016107bc90612834565b6060600b80546108d890612697565b606081611b645750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611b8e5780611b788161267c565b9150611b879050600a8361289c565b9150611b68565b60008167ffffffffffffffff811115611ba957611ba9612236565b6040519080825280601f01601f191660200182016040528015611bd3576020820181803683370190505b5090505b841561181057611be860018361264f565b9150611bf5600a866128b0565b611c00906030612739565b60f81b818381518110611c1557611c15612723565b60200101906001600160f81b031916908160001a905350611c37600a8661289c565b9450611bd7565b6001600160a01b038316611c9957611c9481600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611cbc565b816001600160a01b0316836001600160a01b031614611cbc57611cbc8382611e27565b6001600160a01b038216611cd357610b8f81611ec4565b826001600160a01b0316826001600160a01b031614610b8f57610b8f8282611f73565b611d008383611fb7565b611d0d6000848484611d29565b610b8f5760405162461bcd60e51b81526004016107bc90612834565b60006001600160a01b0384163b15611e1c57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611d6d9033908990889088906004016128c4565b6020604051808303816000875af1925050508015611da8575060408051601f3d908101601f19168201909252611da591810190612901565b60015b611e02573d808015611dd6576040519150601f19603f3d011682016040523d82523d6000602084013e611ddb565b606091505b508051611dfa5760405162461bcd60e51b81526004016107bc90612834565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611810565b506001949350505050565b60006001611e34846110c2565b611e3e919061264f565b600083815260076020526040902054909150808214611e91576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611ed69060019061264f565b60008381526009602052604081205460088054939450909284908110611efe57611efe612723565b906000526020600020015490508060088381548110611f1f57611f1f612723565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611f5757611f57612666565b6001900381819060005260206000200160009055905550505050565b6000611f7e836110c2565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b03821661200d5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016107bc565b6000818152600260205260409020546001600160a01b0316156120725760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016107bc565b61207e60008383611c3e565b6001600160a01b03821660009081526003602052604081208054600192906120a7908490612739565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054828255906000526020600020908101928215612140579160200282015b82811115612140578251825591602001919060010190612125565b5061214c9291506121c3565b5090565b82805461215c90612697565b90600052602060002090601f01602090048101928261217e5760008555612140565b82601f1061219757805160ff1916838001178555612140565b828001600101855582156121405791820182811115612140578251825591602001919060010190612125565b5b8082111561214c57600081556001016121c4565b6001600160e01b031981168114610e8857600080fd5b60006020828403121561220057600080fd5b81356114f5816121d8565b803580151581146108c457600080fd5b60006020828403121561222d57600080fd5b6114f58261220b565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561227557612275612236565b604052919050565b80356001600160a01b03811681146108c457600080fd5b600060208083850312156122a757600080fd5b823567ffffffffffffffff808211156122bf57600080fd5b818501915085601f8301126122d357600080fd5b8135818111156122e5576122e5612236565b8060051b91506122f684830161224c565b818152918301840191848101908884111561231057600080fd5b938501935b83851015612335576123268561227d565b82529385019390850190612315565b98975050505050505050565b60005b8381101561235c578181015183820152602001612344565b8381111561136a5750506000910152565b60008151808452612385816020860160208601612341565b601f01601f19169290920160200192915050565b6020815260006114f5602083018461236d565b6000602082840312156123be57600080fd5b5035919050565b600080604083850312156123d857600080fd5b6123e18361227d565b946020939093013593505050565b6020808252825182820181905260009190848201906040850190845b818110156124275783518352928401929184019160010161240b565b50909695505050505050565b60008060006060848603121561244857600080fd5b6124518461227d565b925061245f6020850161227d565b9150604084013590509250925092565b60006020828403121561248157600080fd5b6114f58261227d565b600067ffffffffffffffff8311156124a4576124a4612236565b6124b7601f8401601f191660200161224c565b90508281528383830111156124cb57600080fd5b828260208301376000602084830101529392505050565b6000602082840312156124f457600080fd5b813567ffffffffffffffff81111561250b57600080fd5b8201601f8101841361251c57600080fd5b6118108482356020840161248a565b6000806040838503121561253e57600080fd5b6125478361227d565b91506125556020840161220b565b90509250929050565b6000806000806080858703121561257457600080fd5b61257d8561227d565b935061258b6020860161227d565b925060408501359150606085013567ffffffffffffffff8111156125ae57600080fd5b8501601f810187136125bf57600080fd5b6125ce8782356020840161248a565b91505092959194509250565b600080604083850312156125ed57600080fd5b6125f68361227d565b91506125556020840161227d565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008282101561266157612661612639565b500390565b634e487b7160e01b600052603160045260246000fd5b600060001982141561269057612690612639565b5060010190565b600181811c908216806126ab57607f821691505b602082108114156126cc57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6000821982111561274c5761274c612639565b500190565b600081600019048311821515161561276b5761276b612639565b500290565b6000845160206127838285838a01612341565b8551918401916127968184848a01612341565b8554920191600090600181811c90808316806127b357607f831692505b8583108114156127d157634e487b7160e01b85526022600452602485fd5b8080156127e557600181146127f657612823565b60ff19851688528388019550612823565b60008b81526020902060005b8581101561281b5781548a820152908401908801612802565b505083880195505b50939b9a5050505050505050505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b6000826128ab576128ab612886565b500490565b6000826128bf576128bf612886565b500690565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906128f79083018461236d565b9695505050505050565b60006020828403121561291357600080fd5b81516114f5816121d856fea2646970667358221220bc023f69e4a5eb0f622fa4ab94f9546e5ee4976ce74a175508dcd6b45ae888e864736f6c634300080b0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000132000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): 2
Arg [1] : _symbol (string): 2
Arg [2] : _initBaseURI (string):
Arg [3] : _initNotRevealedUri (string):

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [5] : 3200000000000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [7] : 3200000000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

44504:4704:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38266:224;;;;;;;;;;-1:-1:-1;38266:224:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;38266:224:0;;;;;;;;48661:73;;;;;;;;;;-1:-1:-1;48661:73:0;;;;;:::i;:::-;;:::i;:::-;;46595:392;;;;;;;;;;-1:-1:-1;46595:392:0;;;;;:::i;:::-;;:::i;:::-;;;2635:25:1;;;2623:2;2608:18;46595:392:0;2489:177:1;25760:100:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;27319:221::-;;;;;;;;;;-1:-1:-1;27319:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;3771:32:1;;;3753:51;;3741:2;3726:18;27319:221:0;3607:203:1;44854:28:0;;;;;;;;;;;;;:::i;26842:411::-;;;;;;;;;;-1:-1:-1;26842:411:0;;;;;:::i;:::-;;:::i;46083:143::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;44644:32::-;;;;;;;;;;;;;;;;38906:113;;;;;;;;;;-1:-1:-1;38994:10:0;:17;38906:113;;44718:34;;;;;;;;;;;;;;;;28069:339;;;;;;;;;;-1:-1:-1;28069:339:0;;;;;:::i;:::-;;:::i;38574:256::-;;;;;;;;;;-1:-1:-1;38574:256:0;;;;;:::i;:::-;;:::i;46993:500::-;;;;;;;;;;-1:-1:-1;46993:500:0;;;;;:::i;:::-;;:::i;48741:464::-;;;:::i;28479:185::-;;;;;;;;;;-1:-1:-1;28479:185:0;;;;;:::i;:::-;;:::i;45729:348::-;;;;;;;;;;-1:-1:-1;45729:348:0;;;;;:::i;:::-;;:::i;48093:80::-;;;;;;;;;;-1:-1:-1;48093:80:0;;;;;:::i;:::-;;:::i;39096:233::-;;;;;;;;;;-1:-1:-1;39096:233:0;;;;;:::i;:::-;;:::i;44821:28::-;;;;;;;;;;-1:-1:-1;44821:28:0;;;;;;;;;;;48429:98;;;;;;;;;;-1:-1:-1;48429:98:0;;;;;:::i;:::-;;:::i;44790:26::-;;;;;;;;;;-1:-1:-1;44790:26:0;;;;;;;;25454:239;;;;;;;;;;-1:-1:-1;25454:239:0;;;;;:::i;:::-;;:::i;25184:208::-;;;;;;;;;;-1:-1:-1;25184:208:0;;;;;:::i;:::-;;:::i;4730:103::-;;;;;;;;;;;;;:::i;46234:97::-;;;;;;;;;;;;;:::i;48179:116::-;;;;;;;;;;-1:-1:-1;48179:116:0;;;;;:::i;:::-;;:::i;4079:87::-;;;;;;;;;;-1:-1:-1;4152:6:0;;-1:-1:-1;;;;;4152:6:0;4079:87;;25929:104;;;;;;;;;;;;;:::i;45290:433::-;;;;;;:::i;:::-;;:::i;27612:155::-;;;;;;;;;;-1:-1:-1;27612:155:0;;;;;:::i;:::-;;:::i;48020:65::-;;;;;;;;;;;;;:::i;46447:140::-;;;;;;;;;;-1:-1:-1;46447:140:0;;;;;:::i;:::-;;:::i;28735:328::-;;;;;;;;;;-1:-1:-1;28735:328:0;;;;;:::i;:::-;;:::i;44602:37::-;;;;;;;;;;;;;:::i;47501:497::-;;;;;;;;;;-1:-1:-1;47501:497:0;;;;;:::i;:::-;;:::i;44681:32::-;;;;;;;;;;;;;;;;48533:122;;;;;;;;;;-1:-1:-1;48533:122:0;;;;;:::i;:::-;;:::i;27838:164::-;;;;;;;;;;-1:-1:-1;27838:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;27959:25:0;;;27935:4;27959:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;27838:164;44757:28;;;;;;;;;;-1:-1:-1;44757:28:0;;;;;:::i;:::-;;:::i;48303:120::-;;;;;;;;;;-1:-1:-1;48303:120:0;;;;;:::i;:::-;;:::i;4988:201::-;;;;;;;;;;-1:-1:-1;4988:201:0;;;;;:::i;:::-;;:::i;38266:224::-;38368:4;-1:-1:-1;;;;;;38392:50:0;;-1:-1:-1;;;38392:50:0;;:90;;;38446:36;38470:11;38446:23;:36::i;:::-;38385:97;38266:224;-1:-1:-1;;38266:224:0:o;48661:73::-;4152:6;;-1:-1:-1;;;;;4152:6:0;2883:10;4299:23;4291:68;;;;-1:-1:-1;;;4291:68:0;;;;;;;:::i;:::-;;;;;;;;;48713:6:::1;:15:::0;;-1:-1:-1;;48713:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;48661:73::o;46595:392::-;4152:6;;46671:7;;-1:-1:-1;;;;;4152:6:0;2883:10;4299:23;4291:68;;;;-1:-1:-1;;;4291:68:0;;;;;;;:::i;:::-;46687:11:::1;:9;:11::i;:::-;;46732:8;:15;46714:14;:12;:14::i;:::-;:33;;46705:69;;;::::0;-1:-1:-1;;;46705:69:0;;7862:2:1;46705:69:0::1;::::0;::::1;7844:21:1::0;7901:2;7881:18;;;7874:30;-1:-1:-1;;;7920:18:1;;;7913:52;7982:18;;46705:69:0::1;7660:346:1::0;46705:69:0::1;46787:21;46848:8;:15;46831:14;:12;:14::i;:::-;:32;;;;:::i;:::-;46815:48;;46876:6;46872:75;46890:13;46886:1;:17;46872:75;;;46920:11;:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;46905:3;;;;;:::i;:::-;;;;46872:75;;;-1:-1:-1::0;;46962:11:0::1;:18:::0;;-1:-1:-1;4370:1:0::1;46595:392:::0;;;:::o;25760:100::-;25814:13;25847:5;25840:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25760:100;:::o;27319:221::-;27395:7;30662:16;;;:7;:16;;;;;;-1:-1:-1;;;;;30662:16:0;27415:73;;;;-1:-1:-1;;;27415:73:0;;9132:2:1;27415:73:0;;;9114:21:1;9171:2;9151:18;;;9144:30;9210:34;9190:18;;;9183:62;-1:-1:-1;;;9261:18:1;;;9254:42;9313:19;;27415:73:0;8930:408:1;27415:73:0;-1:-1:-1;27508:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;27508:24:0;;27319:221::o;44854:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26842:411::-;26923:13;26939:23;26954:7;26939:14;:23::i;:::-;26923:39;;26987:5;-1:-1:-1;;;;;26981:11:0;:2;-1:-1:-1;;;;;26981:11:0;;;26973:57;;;;-1:-1:-1;;;26973:57:0;;9545:2:1;26973:57:0;;;9527:21:1;9584:2;9564:18;;;9557:30;9623:34;9603:18;;;9596:62;-1:-1:-1;;;9674:18:1;;;9667:31;9715:19;;26973:57:0;9343:397:1;26973:57:0;2883:10;-1:-1:-1;;;;;27065:21:0;;;;:62;;-1:-1:-1;27090:37:0;27107:5;2883:10;27838:164;:::i;27090:37::-;27043:168;;;;-1:-1:-1;;;27043:168:0;;9947:2:1;27043:168:0;;;9929:21:1;9986:2;9966:18;;;9959:30;10025:34;10005:18;;;9998:62;10096:26;10076:18;;;10069:54;10140:19;;27043:168:0;9745:420:1;27043:168:0;27224:21;27233:2;27237:7;27224:8;:21::i;:::-;26912:341;26842:411;;:::o;46083:143::-;4152:6;;46131:16;;-1:-1:-1;;;;;4152:6:0;2883:10;4299:23;4291:68;;;;-1:-1:-1;;;4291:68:0;;;;;;;:::i;:::-;46170:25:::1;46184:10;46170:13;:25::i;:::-;46156:39:::0;;::::1;::::0;:11:::1;::::0;:39:::1;::::0;;::::1;::::0;::::1;:::i;:::-;;46209:11;46202:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46083:143:::0;:::o;28069:339::-;28264:41;2883:10;28297:7;28264:18;:41::i;:::-;28256:103;;;;-1:-1:-1;;;28256:103:0;;;;;;;:::i;:::-;28372:28;28382:4;28388:2;28392:7;28372:9;:28::i;38574:256::-;38671:7;38707:23;38724:5;38707:16;:23::i;:::-;38699:5;:31;38691:87;;;;-1:-1:-1;;;38691:87:0;;10790:2:1;38691:87:0;;;10772:21:1;10829:2;10809:18;;;10802:30;10868:34;10848:18;;;10841:62;-1:-1:-1;;;10919:18:1;;;10912:41;10970:19;;38691:87:0;10588:407:1;38691:87:0;-1:-1:-1;;;;;;38796:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;38574:256::o;46993:500::-;4152:6;;47070:7;;-1:-1:-1;;;;;4152:6:0;2883:10;4299:23;4291:68;;;;-1:-1:-1;;;4291:68:0;;;;;;;:::i;:::-;47094:24:::1;47109:8;47094:14;:24::i;:::-;-1:-1:-1::0;47155:11:0::1;:18:::0;47136:15;;:37:::1;47127:76;;;::::0;-1:-1:-1;;;47127:76:0;;11202:2:1;47127:76:0::1;::::0;::::1;11184:21:1::0;11241:2;11221:18;;;11214:30;11280:27;11260:18;;;11253:55;11325:18;;47127:76:0::1;11000:349:1::0;47127:76:0::1;47337:6;47333:106;47351:8;:15;47347:1;:19;47333:106;;;47381:50;47391:10;47403:8;47412:1;47403:11;;;;;;;;:::i;:::-;;;;;;;47416;47428:1;47416:14;;;;;;;;:::i;:::-;;;;;;;;;47381:9;:50::i;:::-;47368:3:::0;::::1;::::0;::::1;:::i;:::-;;;;47333:106;;;;47454:32;47477:8;47454:22;:32::i;48741:464::-:0;4152:6;;-1:-1:-1;;;;;4152:6:0;2883:10;4299:23;4291:68;;;;-1:-1:-1;;;4291:68:0;;;;;;;:::i;:::-;49027:7:::1;49048;4152:6:::0;;-1:-1:-1;;;;;4152:6:0;;4079:87;49048:7:::1;-1:-1:-1::0;;;;;49040:21:0::1;49069;49040:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49026:69;;;49110:2;49102:11;;;::::0;::::1;;48786:419;48741:464::o:0;28479:185::-;28617:39;28634:4;28640:2;28644:7;28617:39;;;;;;;;;;;;:16;:39::i;45729:348::-;45804:16;45832:23;45858:17;45868:6;45858:9;:17::i;:::-;45832:43;;45882:25;45924:15;45910:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45910:30:0;;45882:58;;45952:9;45947:103;45967:15;45963:1;:19;45947:103;;;46012:30;46032:6;46040:1;46012:19;:30::i;:::-;45998:8;46007:1;45998:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;45984:3;;;;:::i;:::-;;;;45947:103;;;-1:-1:-1;46063:8:0;45729:348;-1:-1:-1;;;45729:348:0:o;48093:80::-;4152:6;;-1:-1:-1;;;;;4152:6:0;2883:10;4299:23;4291:68;;;;-1:-1:-1;;;4291:68:0;;;;;;;:::i;:::-;48152:4:::1;:15:::0;48093:80::o;39096:233::-;39171:7;39207:30;38994:10;:17;;38906:113;39207:30;39199:5;:38;39191:95;;;;-1:-1:-1;;;39191:95:0;;11898:2:1;39191:95:0;;;11880:21:1;11937:2;11917:18;;;11910:30;11976:34;11956:18;;;11949:62;-1:-1:-1;;;12027:18:1;;;12020:42;12079:19;;39191:95:0;11696:408:1;39191:95:0;39304:10;39315:5;39304:17;;;;;;;;:::i;:::-;;;;;;;;;39297:24;;39096:233;;;:::o;48429:98::-;4152:6;;-1:-1:-1;;;;;4152:6:0;2883:10;4299:23;4291:68;;;;-1:-1:-1;;;4291:68:0;;;;;;;:::i;:::-;48500:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;48429:98:::0;:::o;25454:239::-;25526:7;25562:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25562:16:0;25597:19;25589:73;;;;-1:-1:-1;;;25589:73:0;;12311:2:1;25589:73:0;;;12293:21:1;12350:2;12330:18;;;12323:30;12389:34;12369:18;;;12362:62;-1:-1:-1;;;12440:18:1;;;12433:39;12489:19;;25589:73:0;12109:405:1;25184:208:0;25256:7;-1:-1:-1;;;;;25284:19:0;;25276:74;;;;-1:-1:-1;;;25276:74:0;;12721:2:1;25276:74:0;;;12703:21:1;12760:2;12740:18;;;12733:30;12799:34;12779:18;;;12772:62;-1:-1:-1;;;12850:18:1;;;12843:40;12900:19;;25276:74:0;12519:406:1;25276:74:0;-1:-1:-1;;;;;;25368:16:0;;;;;:9;:16;;;;;;;25184:208::o;4730:103::-;4152:6;;-1:-1:-1;;;;;4152:6:0;2883:10;4299:23;4291:68;;;;-1:-1:-1;;;4291:68:0;;;;;;;:::i;:::-;4795:30:::1;4822:1;4795:18;:30::i;:::-;4730:103::o:0;46234:97::-;46282:16;46314:11;46307:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46234:97;:::o;48179:116::-;4152:6;;-1:-1:-1;;;;;4152:6:0;2883:10;4299:23;4291:68;;;;-1:-1:-1;;;4291:68:0;;;;;;;:::i;:::-;48256:13:::1;:33:::0;48179:116::o;25929:104::-;25985:13;26018:7;26011:14;;;;;:::i;45290:433::-;45347:14;45364:13;38994:10;:17;;38906:113;45364:13;45393:6;;45347:30;;-1:-1:-1;45393:6:0;;45392:7;45384:16;;;;;;45429:1;45415:11;:15;45407:24;;;;;;45461:13;;45446:11;:28;;45438:37;;;;;;45514:9;;45490:20;45499:11;45490:6;:20;:::i;:::-;:33;;45482:42;;;;;;4152:6;;-1:-1:-1;;;;;4152:6:0;45537:10;:21;45533:84;;45597:11;45590:4;;:18;;;;:::i;:::-;45577:9;:31;;45569:40;;;;;;45642:1;45625:93;45650:11;45645:1;:16;45625:93;;45677:33;45687:10;45699;45708:1;45699:6;:10;:::i;:::-;45677:9;:33::i;:::-;45663:3;;;;:::i;:::-;;;;45625:93;;27612:155;27707:52;2883:10;27740:8;27750;27707:18;:52::i;48020:65::-;4152:6;;-1:-1:-1;;;;;4152:6:0;2883:10;4299:23;4291:68;;;;-1:-1:-1;;;4291:68:0;;;;;;;:::i;:::-;48064:8:::1;:15:::0;;-1:-1:-1;;48064:15:0::1;;;::::0;;48020:65::o;46447:140::-;4152:6;;46537:7;;-1:-1:-1;;;;;4152:6:0;2883:10;4299:23;4291:68;;;;-1:-1:-1;;;4291:68:0;;;;;;;:::i;:::-;-1:-1:-1;46560:15:0;;46447:140::o;28735:328::-;28910:41;2883:10;28943:7;28910:18;:41::i;:::-;28902:103;;;;-1:-1:-1;;;28902:103:0;;;;;;;:::i;:::-;29016:39;29030:4;29036:2;29040:7;29049:5;29016:13;:39::i;:::-;28735:328;;;;:::o;44602:37::-;;;;;;;:::i;47501:497::-;30638:4;30662:16;;;:7;:16;;;;;;47599:13;;-1:-1:-1;;;;;30662:16:0;47624:97;;;;-1:-1:-1;;;47624:97:0;;13438:2:1;47624:97:0;;;13420:21:1;13477:2;13457:18;;;13450:30;13516:34;13496:18;;;13489:62;-1:-1:-1;;;13567:18:1;;;13560:45;13622:19;;47624:97:0;13236:411:1;47624:97:0;47737:8;;;;;;;47734:62;;47774:14;47767:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47501:497;;;:::o;47734:62::-;47804:28;47835:10;:8;:10::i;:::-;47804:41;;47890:1;47865:14;47859:28;:32;:133;;;;;;;;;;;;;;;;;47927:14;47943:18;:7;:16;:18::i;:::-;47963:13;47910:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47859:133;47852:140;47501:497;-1:-1:-1;;;47501:497:0:o;48533:122::-;4152:6;;-1:-1:-1;;;;;4152:6:0;2883:10;4299:23;4291:68;;;;-1:-1:-1;;;4291:68:0;;;;;;;:::i;:::-;48616:33;;::::1;::::0;:13:::1;::::0;:33:::1;::::0;::::1;::::0;::::1;:::i;44757:28::-:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44757:28:0;:::o;48303:120::-;4152:6;;-1:-1:-1;;;;;4152:6:0;2883:10;4299:23;4291:68;;;;-1:-1:-1;;;4291:68:0;;;;;;;:::i;:::-;48385:32;;::::1;::::0;:14:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;4988:201::-:0;4152:6;;-1:-1:-1;;;;;4152:6:0;2883:10;4299:23;4291:68;;;;-1:-1:-1;;;4291:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5077:22:0;::::1;5069:73;;;::::0;-1:-1:-1;;;5069:73:0;;15512:2:1;5069:73:0::1;::::0;::::1;15494:21:1::0;15551:2;15531:18;;;15524:30;15590:34;15570:18;;;15563:62;-1:-1:-1;;;15641:18:1;;;15634:36;15687:19;;5069:73:0::1;15310:402:1::0;5069:73:0::1;5153:28;5172:8;5153:18;:28::i;24815:305::-:0;24917:4;-1:-1:-1;;;;;;24954:40:0;;-1:-1:-1;;;24954:40:0;;:105;;-1:-1:-1;;;;;;;25011:48:0;;-1:-1:-1;;;25011:48:0;24954:105;:158;;;-1:-1:-1;;;;;;;;;;16620:40:0;;;25076:36;16511:157;46337:104;4152:6;;46394:7;;-1:-1:-1;;;;;4152:6:0;2883:10;4299:23;4291:68;;;;-1:-1:-1;;;4291:68:0;;;;;;;:::i;:::-;-1:-1:-1;46417:11:0::1;:18:::0;46337:104;:::o;34555:174::-;34630:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;34630:29:0;-1:-1:-1;;;;;34630:29:0;;;;;;;;:24;;34684:23;34630:24;34684:14;:23::i;:::-;-1:-1:-1;;;;;34675:46:0;;;;;;;;;;;34555:174;;:::o;30867:348::-;30960:4;30662:16;;;:7;:16;;;;;;-1:-1:-1;;;;;30662:16:0;30977:73;;;;-1:-1:-1;;;30977:73:0;;15919:2:1;30977:73:0;;;15901:21:1;15958:2;15938:18;;;15931:30;15997:34;15977:18;;;15970:62;-1:-1:-1;;;16048:18:1;;;16041:42;16100:19;;30977:73:0;15717:408:1;30977:73:0;31061:13;31077:23;31092:7;31077:14;:23::i;:::-;31061:39;;31130:5;-1:-1:-1;;;;;31119:16:0;:7;-1:-1:-1;;;;;31119:16:0;;:51;;;;31163:7;-1:-1:-1;;;;;31139:31:0;:20;31151:7;31139:11;:20::i;:::-;-1:-1:-1;;;;;31139:31:0;;31119:51;:87;;;-1:-1:-1;;;;;;27959:25:0;;;27935:4;27959:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;31174:32;31111:96;30867:348;-1:-1:-1;;;;30867:348:0:o;33859:578::-;34018:4;-1:-1:-1;;;;;33991:31:0;:23;34006:7;33991:14;:23::i;:::-;-1:-1:-1;;;;;33991:31:0;;33983:85;;;;-1:-1:-1;;;33983:85:0;;16332:2:1;33983:85:0;;;16314:21:1;16371:2;16351:18;;;16344:30;16410:34;16390:18;;;16383:62;-1:-1:-1;;;16461:18:1;;;16454:39;16510:19;;33983:85:0;16130:405:1;33983:85:0;-1:-1:-1;;;;;34087:16:0;;34079:65;;;;-1:-1:-1;;;34079:65:0;;16742:2:1;34079:65:0;;;16724:21:1;16781:2;16761:18;;;16754:30;16820:34;16800:18;;;16793:62;-1:-1:-1;;;16871:18:1;;;16864:34;16915:19;;34079:65:0;16540:400:1;34079:65:0;34157:39;34178:4;34184:2;34188:7;34157:20;:39::i;:::-;34261:29;34278:1;34282:7;34261:8;:29::i;:::-;-1:-1:-1;;;;;34303:15:0;;;;;;:9;:15;;;;;:20;;34322:1;;34303:15;:20;;34322:1;;34303:20;:::i;:::-;;;;-1:-1:-1;;;;;;;34334:13:0;;;;;;:9;:13;;;;;:18;;34351:1;;34334:13;:18;;34351:1;;34334:18;:::i;:::-;;;;-1:-1:-1;;34363:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;34363:21:0;-1:-1:-1;;;;;34363:21:0;;;;;;;;;34402:27;;34363:16;;34402:27;;;;;;;33859:578;;;:::o;5349:191::-;5442:6;;;-1:-1:-1;;;;;5459:17:0;;;-1:-1:-1;;;;;;5459:17:0;;;;;;;5492:40;;5442:6;;;5459:17;5442:6;;5492:40;;5423:16;;5492:40;5412:128;5349:191;:::o;31557:110::-;31633:26;31643:2;31647:7;31633:26;;;;;;;;;;;;:9;:26::i;34871:315::-;35026:8;-1:-1:-1;;;;;35017:17:0;:5;-1:-1:-1;;;;;35017:17:0;;;35009:55;;;;-1:-1:-1;;;35009:55:0;;17147:2:1;35009:55:0;;;17129:21:1;17186:2;17166:18;;;17159:30;17225:27;17205:18;;;17198:55;17270:18;;35009:55:0;16945:349:1;35009:55:0;-1:-1:-1;;;;;35075:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;35075:46:0;;;;;;;;;;35137:41;;540::1;;;35137::0;;513:18:1;35137:41:0;;;;;;;34871:315;;;:::o;29945:::-;30102:28;30112:4;30118:2;30122:7;30102:9;:28::i;:::-;30149:48;30172:4;30178:2;30182:7;30191:5;30149:22;:48::i;:::-;30141:111;;;;-1:-1:-1;;;30141:111:0;;;;;;;:::i;45165:102::-;45225:13;45254:7;45247:14;;;;;:::i;365:723::-;421:13;642:10;638:53;;-1:-1:-1;;669:10:0;;;;;;;;;;;;-1:-1:-1;;;669:10:0;;;;;365:723::o;638:53::-;716:5;701:12;757:78;764:9;;757:78;;790:8;;;;:::i;:::-;;-1:-1:-1;813:10:0;;-1:-1:-1;821:2:0;813:10;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;867:17:0;;845:39;;895:154;902:10;;895:154;;929:11;939:1;929:11;;:::i;:::-;;-1:-1:-1;998:10:0;1006:2;998:5;:10;:::i;:::-;985:24;;:2;:24;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;955:56:0;;;;;;;;-1:-1:-1;1026:11:0;1035:2;1026:11;;:::i;:::-;;;895:154;;39942:589;-1:-1:-1;;;;;40148:18:0;;40144:187;;40183:40;40215:7;41358:10;:17;;41331:24;;;;:15;:24;;;;;:44;;;41386:24;;;;;;;;;;;;41254:164;40183:40;40144:187;;;40253:2;-1:-1:-1;;;;;40245:10:0;:4;-1:-1:-1;;;;;40245:10:0;;40241:90;;40272:47;40305:4;40311:7;40272:32;:47::i;:::-;-1:-1:-1;;;;;40345:16:0;;40341:183;;40378:45;40415:7;40378:36;:45::i;40341:183::-;40451:4;-1:-1:-1;;;;;40445:10:0;:2;-1:-1:-1;;;;;40445:10:0;;40441:83;;40472:40;40500:2;40504:7;40472:27;:40::i;31894:321::-;32024:18;32030:2;32034:7;32024:5;:18::i;:::-;32075:54;32106:1;32110:2;32114:7;32123:5;32075:22;:54::i;:::-;32053:154;;;;-1:-1:-1;;;32053:154:0;;;;;;;:::i;35751:799::-;35906:4;-1:-1:-1;;;;;35927:13:0;;6690:20;6738:8;35923:620;;35963:72;;-1:-1:-1;;;35963:72:0;;-1:-1:-1;;;;;35963:36:0;;;;;:72;;2883:10;;36014:4;;36020:7;;36029:5;;35963:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35963:72:0;;;;;;;;-1:-1:-1;;35963:72:0;;;;;;;;;;;;:::i;:::-;;;35959:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36205:13:0;;36201:272;;36248:60;;-1:-1:-1;;;36248:60:0;;;;;;;:::i;36201:272::-;36423:6;36417:13;36408:6;36404:2;36400:15;36393:38;35959:529;-1:-1:-1;;;;;;36086:51:0;-1:-1:-1;;;36086:51:0;;-1:-1:-1;36079:58:0;;35923:620;-1:-1:-1;36527:4:0;35751:799;;;;;;:::o;42045:988::-;42311:22;42361:1;42336:22;42353:4;42336:16;:22::i;:::-;:26;;;;:::i;:::-;42373:18;42394:26;;;:17;:26;;;;;;42311:51;;-1:-1:-1;42527:28:0;;;42523:328;;-1:-1:-1;;;;;42594:18:0;;42572:19;42594:18;;;:12;:18;;;;;;;;:34;;;;;;;;;42645:30;;;;;;:44;;;42762:30;;:17;:30;;;;;:43;;;42523:328;-1:-1:-1;42947:26:0;;;;:17;:26;;;;;;;;42940:33;;;-1:-1:-1;;;;;42991:18:0;;;;;:12;:18;;;;;:34;;;;;;;42984:41;42045:988::o;43328:1079::-;43606:10;:17;43581:22;;43606:21;;43626:1;;43606:21;:::i;:::-;43638:18;43659:24;;;:15;:24;;;;;;44032:10;:26;;43581:46;;-1:-1:-1;43659:24:0;;43581:46;;44032:26;;;;;;:::i;:::-;;;;;;;;;44010:48;;44096:11;44071:10;44082;44071:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;44176:28;;;:15;:28;;;;;;;:41;;;44348:24;;;;;44341:31;44383:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;43399:1008;;;43328:1079;:::o;40832:221::-;40917:14;40934:20;40951:2;40934:16;:20::i;:::-;-1:-1:-1;;;;;40965:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;41010:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;40832:221:0:o;32551:382::-;-1:-1:-1;;;;;32631:16:0;;32623:61;;;;-1:-1:-1;;;32623:61:0;;19042:2:1;32623:61:0;;;19024:21:1;;;19061:18;;;19054:30;19120:34;19100:18;;;19093:62;19172:18;;32623:61:0;18840:356:1;32623:61:0;30638:4;30662:16;;;:7;:16;;;;;;-1:-1:-1;;;;;30662:16:0;:30;32695:58;;;;-1:-1:-1;;;32695:58:0;;19403:2:1;32695:58:0;;;19385:21:1;19442:2;19422:18;;;19415:30;19481;19461:18;;;19454:58;19529:18;;32695:58:0;19201:352:1;32695:58:0;32766:45;32795:1;32799:2;32803:7;32766:20;:45::i;:::-;-1:-1:-1;;;;;32824:13:0;;;;;;:9;:13;;;;;:18;;32841:1;;32824:13;:18;;32841:1;;32824:18;:::i;:::-;;;;-1:-1:-1;;32853:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;32853:21:0;-1:-1:-1;;;;;32853:21:0;;;;;;;;32892:33;;32853:16;;;32892:33;;32853:16;;32892:33;32551:382;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:160::-;657:20;;713:13;;706:21;696:32;;686:60;;742:1;739;732:12;757:180;813:6;866:2;854:9;845:7;841:23;837:32;834:52;;;882:1;879;872:12;834:52;905:26;921:9;905:26;:::i;942:127::-;1003:10;998:3;994:20;991:1;984:31;1034:4;1031:1;1024:15;1058:4;1055:1;1048:15;1074:275;1145:2;1139:9;1210:2;1191:13;;-1:-1:-1;;1187:27:1;1175:40;;1245:18;1230:34;;1266:22;;;1227:62;1224:88;;;1292:18;;:::i;:::-;1328:2;1321:22;1074:275;;-1:-1:-1;1074:275:1:o;1354:173::-;1422:20;;-1:-1:-1;;;;;1471:31:1;;1461:42;;1451:70;;1517:1;1514;1507:12;1532:952;1616:6;1647:2;1690;1678:9;1669:7;1665:23;1661:32;1658:52;;;1706:1;1703;1696:12;1658:52;1746:9;1733:23;1775:18;1816:2;1808:6;1805:14;1802:34;;;1832:1;1829;1822:12;1802:34;1870:6;1859:9;1855:22;1845:32;;1915:7;1908:4;1904:2;1900:13;1896:27;1886:55;;1937:1;1934;1927:12;1886:55;1973:2;1960:16;1995:2;1991;1988:10;1985:36;;;2001:18;;:::i;:::-;2047:2;2044:1;2040:10;2030:20;;2070:28;2094:2;2090;2086:11;2070:28;:::i;:::-;2132:15;;;2202:11;;;2198:20;;;2163:12;;;;2230:19;;;2227:39;;;2262:1;2259;2252:12;2227:39;2286:11;;;;2306:148;2322:6;2317:3;2314:15;2306:148;;;2388:23;2407:3;2388:23;:::i;:::-;2376:36;;2339:12;;;;2432;;;;2306:148;;;2473:5;1532:952;-1:-1:-1;;;;;;;;1532:952:1:o;2671:258::-;2743:1;2753:113;2767:6;2764:1;2761:13;2753:113;;;2843:11;;;2837:18;2824:11;;;2817:39;2789:2;2782:10;2753:113;;;2884:6;2881:1;2878:13;2875:48;;;-1:-1:-1;;2919:1:1;2901:16;;2894:27;2671:258::o;2934:::-;2976:3;3014:5;3008:12;3041:6;3036:3;3029:19;3057:63;3113:6;3106:4;3101:3;3097:14;3090:4;3083:5;3079:16;3057:63;:::i;:::-;3174:2;3153:15;-1:-1:-1;;3149:29:1;3140:39;;;;3181:4;3136:50;;2934:258;-1:-1:-1;;2934:258:1:o;3197:220::-;3346:2;3335:9;3328:21;3309:4;3366:45;3407:2;3396:9;3392:18;3384:6;3366:45;:::i;3422:180::-;3481:6;3534:2;3522:9;3513:7;3509:23;3505:32;3502:52;;;3550:1;3547;3540:12;3502:52;-1:-1:-1;3573:23:1;;3422:180;-1:-1:-1;3422:180:1:o;3815:254::-;3883:6;3891;3944:2;3932:9;3923:7;3919:23;3915:32;3912:52;;;3960:1;3957;3950:12;3912:52;3983:29;4002:9;3983:29;:::i;:::-;3973:39;4059:2;4044:18;;;;4031:32;;-1:-1:-1;;;3815:254:1:o;4074:632::-;4245:2;4297:21;;;4367:13;;4270:18;;;4389:22;;;4216:4;;4245:2;4468:15;;;;4442:2;4427:18;;;4216:4;4511:169;4525:6;4522:1;4519:13;4511:169;;;4586:13;;4574:26;;4655:15;;;;4620:12;;;;4547:1;4540:9;4511:169;;;-1:-1:-1;4697:3:1;;4074:632;-1:-1:-1;;;;;;4074:632:1:o;4711:328::-;4788:6;4796;4804;4857:2;4845:9;4836:7;4832:23;4828:32;4825:52;;;4873:1;4870;4863:12;4825:52;4896:29;4915:9;4896:29;:::i;:::-;4886:39;;4944:38;4978:2;4967:9;4963:18;4944:38;:::i;:::-;4934:48;;5029:2;5018:9;5014:18;5001:32;4991:42;;4711:328;;;;;:::o;5044:186::-;5103:6;5156:2;5144:9;5135:7;5131:23;5127:32;5124:52;;;5172:1;5169;5162:12;5124:52;5195:29;5214:9;5195:29;:::i;5235:407::-;5300:5;5334:18;5326:6;5323:30;5320:56;;;5356:18;;:::i;:::-;5394:57;5439:2;5418:15;;-1:-1:-1;;5414:29:1;5445:4;5410:40;5394:57;:::i;:::-;5385:66;;5474:6;5467:5;5460:21;5514:3;5505:6;5500:3;5496:16;5493:25;5490:45;;;5531:1;5528;5521:12;5490:45;5580:6;5575:3;5568:4;5561:5;5557:16;5544:43;5634:1;5627:4;5618:6;5611:5;5607:18;5603:29;5596:40;5235:407;;;;;:::o;5647:451::-;5716:6;5769:2;5757:9;5748:7;5744:23;5740:32;5737:52;;;5785:1;5782;5775:12;5737:52;5825:9;5812:23;5858:18;5850:6;5847:30;5844:50;;;5890:1;5887;5880:12;5844:50;5913:22;;5966:4;5958:13;;5954:27;-1:-1:-1;5944:55:1;;5995:1;5992;5985:12;5944:55;6018:74;6084:7;6079:2;6066:16;6061:2;6057;6053:11;6018:74;:::i;6103:254::-;6168:6;6176;6229:2;6217:9;6208:7;6204:23;6200:32;6197:52;;;6245:1;6242;6235:12;6197:52;6268:29;6287:9;6268:29;:::i;:::-;6258:39;;6316:35;6347:2;6336:9;6332:18;6316:35;:::i;:::-;6306:45;;6103:254;;;;;:::o;6362:667::-;6457:6;6465;6473;6481;6534:3;6522:9;6513:7;6509:23;6505:33;6502:53;;;6551:1;6548;6541:12;6502:53;6574:29;6593:9;6574:29;:::i;:::-;6564:39;;6622:38;6656:2;6645:9;6641:18;6622:38;:::i;:::-;6612:48;;6707:2;6696:9;6692:18;6679:32;6669:42;;6762:2;6751:9;6747:18;6734:32;6789:18;6781:6;6778:30;6775:50;;;6821:1;6818;6811:12;6775:50;6844:22;;6897:4;6889:13;;6885:27;-1:-1:-1;6875:55:1;;6926:1;6923;6916:12;6875:55;6949:74;7015:7;7010:2;6997:16;6992:2;6988;6984:11;6949:74;:::i;:::-;6939:84;;;6362:667;;;;;;;:::o;7034:260::-;7102:6;7110;7163:2;7151:9;7142:7;7138:23;7134:32;7131:52;;;7179:1;7176;7169:12;7131:52;7202:29;7221:9;7202:29;:::i;:::-;7192:39;;7250:38;7284:2;7273:9;7269:18;7250:38;:::i;7299:356::-;7501:2;7483:21;;;7520:18;;;7513:30;7579:34;7574:2;7559:18;;7552:62;7646:2;7631:18;;7299:356::o;8011:127::-;8072:10;8067:3;8063:20;8060:1;8053:31;8103:4;8100:1;8093:15;8127:4;8124:1;8117:15;8143:125;8183:4;8211:1;8208;8205:8;8202:34;;;8216:18;;:::i;:::-;-1:-1:-1;8253:9:1;;8143:125::o;8273:127::-;8334:10;8329:3;8325:20;8322:1;8315:31;8365:4;8362:1;8355:15;8389:4;8386:1;8379:15;8405:135;8444:3;-1:-1:-1;;8465:17:1;;8462:43;;;8485:18;;:::i;:::-;-1:-1:-1;8532:1:1;8521:13;;8405:135::o;8545:380::-;8624:1;8620:12;;;;8667;;;8688:61;;8742:4;8734:6;8730:17;8720:27;;8688:61;8795:2;8787:6;8784:14;8764:18;8761:38;8758:161;;;8841:10;8836:3;8832:20;8829:1;8822:31;8876:4;8873:1;8866:15;8904:4;8901:1;8894:15;8758:161;;8545:380;;;:::o;10170:413::-;10372:2;10354:21;;;10411:2;10391:18;;;10384:30;10450:34;10445:2;10430:18;;10423:62;-1:-1:-1;;;10516:2:1;10501:18;;10494:47;10573:3;10558:19;;10170:413::o;11354:127::-;11415:10;11410:3;11406:20;11403:1;11396:31;11446:4;11443:1;11436:15;11470:4;11467:1;11460:15;12930:128;12970:3;13001:1;12997:6;12994:1;12991:13;12988:39;;;13007:18;;:::i;:::-;-1:-1:-1;13043:9:1;;12930:128::o;13063:168::-;13103:7;13169:1;13165;13161:6;13157:14;13154:1;13151:21;13146:1;13139:9;13132:17;13128:45;13125:71;;;13176:18;;:::i;:::-;-1:-1:-1;13216:9:1;;13063:168::o;13778:1527::-;14002:3;14040:6;14034:13;14066:4;14079:51;14123:6;14118:3;14113:2;14105:6;14101:15;14079:51;:::i;:::-;14193:13;;14152:16;;;;14215:55;14193:13;14152:16;14237:15;;;14215:55;:::i;:::-;14359:13;;14292:20;;;14332:1;;14419;14441:18;;;;14494;;;;14521:93;;14599:4;14589:8;14585:19;14573:31;;14521:93;14662:2;14652:8;14649:16;14629:18;14626:40;14623:167;;;-1:-1:-1;;;14689:33:1;;14745:4;14742:1;14735:15;14775:4;14696:3;14763:17;14623:167;14806:18;14833:110;;;;14957:1;14952:328;;;;14799:481;;14833:110;-1:-1:-1;;14868:24:1;;14854:39;;14913:20;;;;-1:-1:-1;14833:110:1;;14952:328;13725:1;13718:14;;;13762:4;13749:18;;15047:1;15061:169;15075:8;15072:1;15069:15;15061:169;;;15157:14;;15142:13;;;15135:37;15200:16;;;;15092:10;;15061:169;;;15065:3;;15261:8;15254:5;15250:20;15243:27;;14799:481;-1:-1:-1;15296:3:1;;13778:1527;-1:-1:-1;;;;;;;;;;;13778:1527:1:o;17299:414::-;17501:2;17483:21;;;17540:2;17520:18;;;17513:30;17579:34;17574:2;17559:18;;17552:62;-1:-1:-1;;;17645:2:1;17630:18;;17623:48;17703:3;17688:19;;17299:414::o;17718:127::-;17779:10;17774:3;17770:20;17767:1;17760:31;17810:4;17807:1;17800:15;17834:4;17831:1;17824:15;17850:120;17890:1;17916;17906:35;;17921:18;;:::i;:::-;-1:-1:-1;17955:9:1;;17850:120::o;17975:112::-;18007:1;18033;18023:35;;18038:18;;:::i;:::-;-1:-1:-1;18072:9:1;;17975:112::o;18092:489::-;-1:-1:-1;;;;;18361:15:1;;;18343:34;;18413:15;;18408:2;18393:18;;18386:43;18460:2;18445:18;;18438:34;;;18508:3;18503:2;18488:18;;18481:31;;;18286:4;;18529:46;;18555:19;;18547:6;18529:46;:::i;:::-;18521:54;18092:489;-1:-1:-1;;;;;;18092:489:1:o;18586:249::-;18655:6;18708:2;18696:9;18687:7;18683:23;18679:32;18676:52;;;18724:1;18721;18714:12;18676:52;18756:9;18750:16;18775:30;18799:5;18775:30;:::i

Swarm Source

ipfs://bc023f69e4a5eb0f622fa4ab94f9546e5ee4976ce74a175508dcd6b45ae888e8
[ 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.