ETH Price: $2,505.36 (+0.14%)

Token

Heart of Nature by Kristjana S. Williams (HNKSW)
 

Overview

Max Total Supply

64 HNKSW

Holders

38

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
0x760d.eth
Balance
0 HNKSW
0x61f51c41ccfe60f9427254257e785e7a5b72d21a
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ERC721HTCxKSW

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-12-07
*/

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



pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant alphabet = "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] = alphabet[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

}

// File: SmartContract_KSW1/node_modules/@openzeppelin/contracts/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) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// File: SmartContract_KSW1/node_modules/@openzeppelin/contracts/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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// File: SmartContract_KSW1/node_modules/@openzeppelin/contracts/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;
        // solhint-disable-next-line no-inline-assembly
        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");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: SmartContract_KSW1/node_modules/@openzeppelin/contracts/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: SmartContract_KSW1/node_modules/@openzeppelin/contracts/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: SmartContract_KSW1/node_modules/@openzeppelin/contracts/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: SmartContract_KSW1/node_modules/@openzeppelin/contracts/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: SmartContract_KSW1/node_modules/@openzeppelin/contracts/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: SmartContract_KSW1/node_modules/@openzeppelin/contracts/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: SmartContract_KSW1/node_modules/@openzeppelin/contracts/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}. 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 {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

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

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

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` 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 { }
}

// File: SmartContract_KSW1/node_modules/@openzeppelin/contracts/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: SmartContract_KSW1/node_modules/@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol



pragma solidity ^0.8.0;


/**
 * @dev ERC721 token with storage based token URI management.
 */
abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;

    // Optional mapping for token URIs
    mapping (uint256 => string) private _tokenURIs;

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

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();

        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }

        return super.tokenURI(tokenId);
    }

    /**
     * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
    }

    /**
     * @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 override {
        super._burn(tokenId);

        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}

// File: SmartContract_KSW1/contracts/ERC721HTCxKSW.sol



pragma solidity 0.8.0;





contract ERC721HTCxKSW is Ownable, ERC721Enumerable {

    string private contractUri;
    string private _baseTokenURI;
    // Optional mapping for token URIs
    mapping (uint256 => string) private _tokenURIs;

    // Only minter can do mint.
    mapping (address => bool) minters;

    // Special requirement for KSW
    // Record the minted quantity of each address 
    mapping (address => uint256) public mintedQuantity;
    // maxMintQuantity for each address
    uint256 public maxMintQuantity;

    event SpecialBurn(
        address owner,
        uint256 tokenIdA,
        uint256 tokenIdB,
        uint256 tokenIdC
    );

    event MinterRoleChanged(address account, bool isMinter);
    event ContractUriChanged(string contractUri);
    event BaseUriChanged(string baseUri);
    event TokenUriChanged(uint256 tokenId, string tokenUri);

    // Special requirement for KSW
    event MaxMintQuantityChanged(address account, uint256 quantity);
    event ClearMintedQuantity(address account);

    constructor(
        string memory _name,
        string memory _symbol,
        string memory _contractUri
    ) ERC721(_name, _symbol) {
        contractUri = _contractUri;
    }

    function contractURI() external view returns (string memory) {
        return contractUri;
    }

    function setContractUri(string memory _uri) external onlyOwner {
        contractUri = _uri;
        emit ContractUriChanged(_uri);
    }

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

    function setBaseUri(string memory baseTokenURI) external onlyOwner {
        _baseTokenURI = baseTokenURI;
        emit BaseUriChanged(baseTokenURI);
    }

    function getBaseUri() external view returns (string memory) {
        return _baseTokenURI;
    }

    function setTokenURI(uint256 tokenId, string memory _tokenURI) external onlyOwner {
        _setTokenURI(tokenId, _tokenURI);
    }

    function grantMinterRole(address account) external onlyOwner {
        if(minters[account] != true) {
            minters[account] = true;
            emit MinterRoleChanged(account, true);
        }
    }
    function revokeMinterRole(address account) external onlyOwner {
        if(minters[account] == true) {
            minters[account] = false;
            emit MinterRoleChanged(account, false);
        }
    }

    function hasMinterRole(address account) public view returns (bool) {
        return minters[account];
    }

    function mint(address to, uint256 _tokenId, string memory _tokenURI) external {
        require(hasMinterRole(msg.sender), "Caller is not the minter");
        // KSW - Check mintedQuantity
        require(mintedQuantity[to] < maxMintQuantity, "Already reach max mint quantity");

        // KSW - increase mintedQuantity
        mintedQuantity[to] = mintedQuantity[to] + 1;

        // We cannot just use balanceOf to create the new tokenId because tokens
        // can be burned (destroyed), so we need a separate counter.
        _safeMint(to, _tokenId);
        _setTokenURI(_tokenId, _tokenURI);
    }

    // KSW - set max mint quantity
    function setMaxMintQuantity(uint256 quantity) external onlyOwnerOrMinter {
        maxMintQuantity = quantity;
        emit MaxMintQuantityChanged(msg.sender, quantity);
    }

    // KSW - clear max mint quantity
    function clearMintedQuantity(address account) external onlyOwnerOrMinter {
        mintedQuantity[account] = 0;
        emit ClearMintedQuantity(account);
    }

    // Burn 3 tokens at a time.
    function batchBurn(uint256 _tokenIdA, uint256 _tokenIdB, uint256 _tokenIdC) external {
        require(ownerOf(_tokenIdA) == msg.sender, "ERC721: batchBurn caller is not owner");
        require(ownerOf(_tokenIdB) == msg.sender, "ERC721: batchBurn caller is not owner");
        require(ownerOf(_tokenIdC) == msg.sender, "ERC721: batchBurn caller is not owner");
        _burn(_tokenIdA);
        _burn(_tokenIdB);
        _burn(_tokenIdC);
        // Since this function is for special purpose, add another event.
        emit SpecialBurn(msg.sender, _tokenIdA, _tokenIdB, _tokenIdC);
    }

    function burn(uint256 _tokenId) external {
        require(ownerOf(_tokenId) == msg.sender, "ERC721: burn caller is not owner");
        _burn(_tokenId);
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token");

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();
 
        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If base URI is exist, go ERC721 tokenURI, base+id
        return super.tokenURI(tokenId);
    }

    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
        emit TokenUriChanged(tokenId, _tokenURI); 
    }

    modifier onlyOwnerOrMinter() {
        require(owner() == _msgSender() || hasMinterRole(_msgSender()), "Ownable: caller is not the owner or minter");
        _;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_contractUri","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":false,"internalType":"string","name":"baseUri","type":"string"}],"name":"BaseUriChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"ClearMintedQuantity","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"contractUri","type":"string"}],"name":"ContractUriChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"MaxMintQuantityChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isMinter","type":"bool"}],"name":"MinterRoleChanged","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":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenIdA","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenIdB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenIdC","type":"uint256"}],"name":"SpecialBurn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"string","name":"tokenUri","type":"string"}],"name":"TokenUriChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenIdA","type":"uint256"},{"internalType":"uint256","name":"_tokenIdB","type":"uint256"},{"internalType":"uint256","name":"_tokenIdC","type":"uint256"}],"name":"batchBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"clearMintedQuantity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"grantMinterRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"hasMinterRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"maxMintQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintedQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeMinterRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseTokenURI","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setContractUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setMaxMintQuantity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"setTokenURI","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"}]

60806040523480156200001157600080fd5b5060405162002c2738038062002c2783398101604081905262000034916200022e565b8282600062000042620000d9565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508151620000a1906001906020850190620000dd565b508051620000b7906002906020840190620000dd565b50508151620000cf9150600b906020840190620000dd565b505050506200030e565b3390565b828054620000eb90620002bb565b90600052602060002090601f0160209004810192826200010f57600085556200015a565b82601f106200012a57805160ff19168380011785556200015a565b828001600101855582156200015a579182015b828111156200015a5782518255916020019190600101906200013d565b50620001689291506200016c565b5090565b5b808211156200016857600081556001016200016d565b600082601f83011262000194578081fd5b81516001600160401b0380821115620001b157620001b1620002f8565b6040516020601f8401601f1916820181018381118382101715620001d957620001d9620002f8565b6040528382528584018101871015620001f0578485fd5b8492505b83831015620002135785830181015182840182015291820191620001f4565b838311156200022457848185840101525b5095945050505050565b60008060006060848603121562000243578283fd5b83516001600160401b03808211156200025a578485fd5b620002688783880162000183565b945060208601519150808211156200027e578384fd5b6200028c8783880162000183565b93506040860151915080821115620002a2578283fd5b50620002b18682870162000183565b9150509250925092565b600281046001821680620002d057607f821691505b60208210811415620002f257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b612909806200031e6000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c806369e2f0fb1161011a578063b88d4fde116100ad578063d7ad08d31161007c578063d7ad08d314610424578063e1f860bd14610437578063e8a3d4851461044a578063e985e9c514610452578063f2fde38b1461046557610206565b8063b88d4fde146103d8578063c87b56dd146103eb578063ccb4807b146103fe578063d3fc98641461041157610206565b806395d89b41116100e957806395d89b41146103a2578063a0bcfc7f146103aa578063a22cb465146103bd578063ae9aea6d146103d057610206565b806369e2f0fb1461036c57806370a082311461037f578063715018a6146103925780638da5cb5b1461039a57610206565b806323b872dd1161019d57806342842e0e1161016c57806342842e0e1461030d57806342966c68146103205780634f6ccce7146103335780636352211e1461034657806363cc12d11461035957610206565b806323b872dd146102c15780632f745c59146102d45780633dd1eb61146102e7578063413dc9fd146102fa57610206565b8063099db017116101d9578063099db0171461027e5780630cac36b214610291578063162094c41461029957806318160ddd146102ac57610206565b806301ffc9a71461020b57806306fdde0314610234578063081812fc14610249578063095ea7b314610269575b600080fd5b61021e610219366004611e9b565b610478565b60405161022b9190612094565b60405180910390f35b61023c6104a5565b60405161022b919061209f565b61025c610257366004611f06565b610537565b60405161022b9190611fe9565b61027c610277366004611e1d565b610583565b005b61021e61028c366004611ce3565b61061b565b61023c610639565b61027c6102a7366004611f1e565b610648565b6102b4610695565b60405161022b9190612780565b61027c6102cf366004611d2f565b61069b565b6102b46102e2366004611e1d565b6106d3565b61027c6102f5366004611ce3565b610725565b6102b4610308366004611ce3565b6107ed565b61027c61031b366004611d2f565b6107ff565b61027c61032e366004611f06565b61081a565b6102b4610341366004611f06565b610853565b61025c610354366004611f06565b6108ae565b61027c610367366004611ce3565b6108e3565b61027c61037a366004611ce3565b61097e565b6102b461038d366004611ce3565b610a33565b61027c610a77565b61025c610b00565b61023c610b0f565b61027c6103b8366004611ed3565b610b1e565b61027c6103cb366004611de3565b610ba0565b6102b4610c6e565b61027c6103e6366004611d6a565b610c74565b61023c6103f9366004611f06565b610cb3565b61027c61040c366004611ed3565b610da2565b61027c61041f366004611e46565b610e24565b61027c610432366004611f06565b610ed3565b61027c610445366004611f63565b610f5a565b61023c611047565b61021e610460366004611cfd565b611056565b61027c610473366004611ce3565b611084565b60006001600160e01b0319821663780e9d6360e01b148061049d575061049d82611144565b90505b919050565b6060600180546104b490612811565b80601f01602080910402602001604051908101604052809291908181526020018280546104e090612811565b801561052d5780601f106105025761010080835404028352916020019161052d565b820191906000526020600020905b81548152906001019060200180831161051057829003601f168201915b5050505050905090565b600061054282611184565b6105675760405162461bcd60e51b815260040161055e9061248e565b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b600061058e826108ae565b9050806001600160a01b0316836001600160a01b031614156105c25760405162461bcd60e51b815260040161055e9061266b565b806001600160a01b03166105d46111a1565b6001600160a01b031614806105f057506105f0816104606111a1565b61060c5760405162461bcd60e51b815260040161055e906122ca565b61061683836111a5565b505050565b6001600160a01b03166000908152600e602052604090205460ff1690565b6060600c80546104b490612811565b6106506111a1565b6001600160a01b0316610661610b00565b6001600160a01b0316146106875760405162461bcd60e51b815260040161055e906124da565b6106918282611213565b5050565b60095490565b6106ac6106a66111a1565b82611295565b6106c85760405162461bcd60e51b815260040161055e906126e3565b610616838383611312565b60006106de83610a33565b82106106fc5760405162461bcd60e51b815260040161055e906120b2565b506001600160a01b03919091166000908152600760209081526040808320938352929052205490565b61072d6111a1565b6001600160a01b031661073e610b00565b6001600160a01b0316146107645760405162461bcd60e51b815260040161055e906124da565b6001600160a01b0381166000908152600e602052604090205460ff1615156001146107ea576001600160a01b0381166000908152600e602052604090819020805460ff1916600190811790915590517f0dfe125844182931a142d83434ec10aa591c730e0b3065ff5dce283cee857d5c916107e19184919061203a565b60405180910390a15b50565b600f6020526000908152604090205481565b61061683838360405180602001604052806000815250610c74565b33610824826108ae565b6001600160a01b03161461084a5760405162461bcd60e51b815260040161055e9061250f565b6107ea8161143f565b600061085d610695565b821061087b5760405162461bcd60e51b815260040161055e90612734565b6009828154811061089c57634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b6000818152600360205260408120546001600160a01b03168061049d5760405162461bcd60e51b815260040161055e90612371565b6108eb6111a1565b6001600160a01b03166108fc610b00565b6001600160a01b03161480610917575061091761028c6111a1565b6109335760405162461bcd60e51b815260040161055e906125dc565b6001600160a01b0381166000908152600f602052604080822091909155517fde47c4047583df7f77a80d1e7444b157ccd3b756c004c81277769913779c4a38906107e1908390611fe9565b6109866111a1565b6001600160a01b0316610997610b00565b6001600160a01b0316146109bd5760405162461bcd60e51b815260040161055e906124da565b6001600160a01b0381166000908152600e602052604090205460ff161515600114156107ea576001600160a01b0381166000908152600e6020526040808220805460ff19169055517f0dfe125844182931a142d83434ec10aa591c730e0b3065ff5dce283cee857d5c916107e19184919061203a565b60006001600160a01b038216610a5b5760405162461bcd60e51b815260040161055e90612327565b506001600160a01b031660009081526004602052604090205490565b610a7f6111a1565b6001600160a01b0316610a90610b00565b6001600160a01b031614610ab65760405162461bcd60e51b815260040161055e906124da565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b6060600280546104b490612811565b610b266111a1565b6001600160a01b0316610b37610b00565b6001600160a01b031614610b5d5760405162461bcd60e51b815260040161055e906124da565b8051610b7090600c906020840190611ba4565b507f87cdeaffd8e70903d6ce7cc983fac3b09ca79e83818124c98e47a1d70f8027d6816040516107e1919061209f565b610ba86111a1565b6001600160a01b0316826001600160a01b03161415610bd95760405162461bcd60e51b815260040161055e90612210565b8060066000610be66111a1565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155610c2a6111a1565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610c629190612094565b60405180910390a35050565b60105481565b610c85610c7f6111a1565b83611295565b610ca15760405162461bcd60e51b815260040161055e906126e3565b610cad848484846114e6565b50505050565b6060610cbe82611184565b610cda5760405162461bcd60e51b815260040161055e9061243d565b6000828152600d602052604081208054610cf390612811565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1f90612811565b8015610d6c5780601f10610d4157610100808354040283529160200191610d6c565b820191906000526020600020905b815481529060010190602001808311610d4f57829003601f168201915b505050505090506000610d7d610639565b9050805160001415610d91575090506104a0565b610d9a84611519565b949350505050565b610daa6111a1565b6001600160a01b0316610dbb610b00565b6001600160a01b031614610de15760405162461bcd60e51b815260040161055e906124da565b8051610df490600b906020840190611ba4565b507fe88f8427748def9baf1a4a6a9e77c6d7d2be8ba756acdf3d6e131fc83c1a39d3816040516107e1919061209f565b610e2d3361061b565b610e495760405162461bcd60e51b815260040161055e90612293565b6010546001600160a01b0384166000908152600f602052604090205410610e825760405162461bcd60e51b815260040161055e906126ac565b6001600160a01b0383166000908152600f6020526040902054610ea69060016127a2565b6001600160a01b0384166000908152600f6020526040902055610ec9838361159c565b6106168282611213565b610edb6111a1565b6001600160a01b0316610eec610b00565b6001600160a01b03161480610f075750610f0761028c6111a1565b610f235760405162461bcd60e51b815260040161055e906125dc565b60108190556040517ff3bf06885d1992d5f8f41481728ec2c093d33a48270ee4c52a0dc9bf8816f1ce906107e19033908490612055565b33610f64846108ae565b6001600160a01b031614610f8a5760405162461bcd60e51b815260040161055e90612626565b33610f94836108ae565b6001600160a01b031614610fba5760405162461bcd60e51b815260040161055e90612626565b33610fc4826108ae565b6001600160a01b031614610fea5760405162461bcd60e51b815260040161055e90612626565b610ff38361143f565b610ffc8261143f565b6110058161143f565b7f12648cae99b8b2244dedb53a1d2d2634310b3be06c37e06cf134337ef373e3353384848460405161103a949392919061206e565b60405180910390a1505050565b6060600b80546104b490612811565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b61108c6111a1565b6001600160a01b031661109d610b00565b6001600160a01b0316146110c35760405162461bcd60e51b815260040161055e906124da565b6001600160a01b0381166110e95760405162461bcd60e51b815260040161055e9061214f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160e01b031982166380ac58cd60e01b148061117557506001600160e01b03198216635b5e139f60e01b145b8061049d575061049d826115b6565b6000908152600360205260409020546001600160a01b0316151590565b3390565b600081815260056020526040902080546001600160a01b0319166001600160a01b03841690811790915581906111da826108ae565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61121c82611184565b6112385760405162461bcd60e51b815260040161055e906123ba565b6000828152600d60209081526040909120825161125792840190611ba4565b507f7f4449296e3be94c171d37caee72eddc2e253fe45652e877e931e31d758a54408282604051611289929190612789565b60405180910390a15050565b60006112a082611184565b6112bc5760405162461bcd60e51b815260040161055e90612247565b60006112c7836108ae565b9050806001600160a01b0316846001600160a01b031614806113025750836001600160a01b03166112f784610537565b6001600160a01b0316145b80610d9a5750610d9a8185611056565b826001600160a01b0316611325826108ae565b6001600160a01b03161461134b5760405162461bcd60e51b815260040161055e90612544565b6001600160a01b0382166113715760405162461bcd60e51b815260040161055e906121cc565b61137c8383836115cf565b6113876000826111a5565b6001600160a01b03831660009081526004602052604081208054600192906113b09084906127ce565b90915550506001600160a01b03821660009081526004602052604081208054600192906113de9084906127a2565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600061144a826108ae565b9050611458816000846115cf565b6114636000836111a5565b6001600160a01b038116600090815260046020526040812080546001929061148c9084906127ce565b909155505060008281526003602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6114f1848484611312565b6114fd84848484611658565b610cad5760405162461bcd60e51b815260040161055e906120fd565b606061152482611184565b6115405760405162461bcd60e51b815260040161055e9061258d565b600061154a610639565b9050600081511161156a5760405180602001604052806000815250611595565b8061157484611773565b604051602001611585929190611fba565b6040516020818303038152906040525b9392505050565b61069182826040518060200160405280600081525061188e565b6001600160e01b031981166301ffc9a760e01b14919050565b6115da838383610616565b6001600160a01b0383166115f6576115f1816118c1565b611619565b816001600160a01b0316836001600160a01b031614611619576116198382611905565b6001600160a01b03821661163557611630816119a2565b610616565b826001600160a01b0316826001600160a01b031614610616576106168282611a7b565b600061166c846001600160a01b0316611abf565b1561176857836001600160a01b031663150b7a026116886111a1565b8786866040518563ffffffff1660e01b81526004016116aa9493929190611ffd565b602060405180830381600087803b1580156116c457600080fd5b505af19250505080156116f4575060408051601f3d908101601f191682019092526116f191810190611eb7565b60015b61174e573d808015611722576040519150601f19603f3d011682016040523d82523d6000602084013e611727565b606091505b5080516117465760405162461bcd60e51b815260040161055e906120fd565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610d9a565b506001949350505050565b60608161179857506040805180820190915260018152600360fc1b60208201526104a0565b8160005b81156117c257806117ac8161284c565b91506117bb9050600a836127ba565b915061179c565b60008167ffffffffffffffff8111156117eb57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611815576020820181803683370190505b5090505b8415610d9a5761182a6001836127ce565b9150611837600a86612867565b6118429060306127a2565b60f81b81838151811061186557634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611887600a866127ba565b9450611819565b6118988383611ac5565b6118a56000848484611658565b6106165760405162461bcd60e51b815260040161055e906120fd565b600980546000838152600a60205260408120829055600182018355919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0155565b6000600161191284610a33565b61191c91906127ce565b60008381526008602052604090205490915080821461196f576001600160a01b03841660009081526007602090815260408083208584528252808320548484528184208190558352600890915290208190555b5060009182526008602090815260408084208490556001600160a01b039094168352600781528383209183525290812055565b6009546000906119b4906001906127ce565b6000838152600a6020526040812054600980549394509092849081106119ea57634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508060098381548110611a1957634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255828152600a90915260408082208490558582528120556009805480611a5f57634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000611a8683610a33565b6001600160a01b039093166000908152600760209081526040808320868452825280832085905593825260089052919091209190915550565b3b151590565b6001600160a01b038216611aeb5760405162461bcd60e51b815260040161055e90612408565b611af481611184565b15611b115760405162461bcd60e51b815260040161055e90612195565b611b1d600083836115cf565b6001600160a01b0382166000908152600460205260408120805460019290611b469084906127a2565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611bb090612811565b90600052602060002090601f016020900481019282611bd25760008555611c18565b82601f10611beb57805160ff1916838001178555611c18565b82800160010185558215611c18579182015b82811115611c18578251825591602001919060010190611bfd565b50611c24929150611c28565b5090565b5b80821115611c245760008155600101611c29565b600067ffffffffffffffff80841115611c5857611c586128a7565b604051601f8501601f191681016020018281118282101715611c7c57611c7c6128a7565b604052848152915081838501861015611c9457600080fd5b8484602083013760006020868301015250509392505050565b80356001600160a01b03811681146104a057600080fd5b600082601f830112611cd4578081fd5b61159583833560208501611c3d565b600060208284031215611cf4578081fd5b61159582611cad565b60008060408385031215611d0f578081fd5b611d1883611cad565b9150611d2660208401611cad565b90509250929050565b600080600060608486031215611d43578081fd5b611d4c84611cad565b9250611d5a60208501611cad565b9150604084013590509250925092565b60008060008060808587031215611d7f578081fd5b611d8885611cad565b9350611d9660208601611cad565b925060408501359150606085013567ffffffffffffffff811115611db8578182fd5b8501601f81018713611dc8578182fd5b611dd787823560208401611c3d565b91505092959194509250565b60008060408385031215611df5578182fd5b611dfe83611cad565b915060208301358015158114611e12578182fd5b809150509250929050565b60008060408385031215611e2f578182fd5b611e3883611cad565b946020939093013593505050565b600080600060608486031215611e5a578283fd5b611e6384611cad565b925060208401359150604084013567ffffffffffffffff811115611e85578182fd5b611e9186828701611cc4565b9150509250925092565b600060208284031215611eac578081fd5b8135611595816128bd565b600060208284031215611ec8578081fd5b8151611595816128bd565b600060208284031215611ee4578081fd5b813567ffffffffffffffff811115611efa578182fd5b610d9a84828501611cc4565b600060208284031215611f17578081fd5b5035919050565b60008060408385031215611f30578182fd5b82359150602083013567ffffffffffffffff811115611f4d578182fd5b611f5985828601611cc4565b9150509250929050565b600080600060608486031215611f77578283fd5b505081359360208301359350604090920135919050565b60008151808452611fa68160208601602086016127e5565b601f01601f19169290920160200192915050565b60008351611fcc8184602088016127e5565b835190830190611fe08183602088016127e5565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061203090830184611f8e565b9695505050505050565b6001600160a01b039290921682521515602082015260400190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b901515815260200190565b6000602082526115956020830184611f8e565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526018908201527f43616c6c6572206973206e6f7420746865206d696e7465720000000000000000604082015260600190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252602e908201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60408201526d32bc34b9ba32b73a103a37b5b2b760911b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b60208082526031908201527f45524337323155524953746f726167653a2055524920717565727920666f72206040820152703737b732bc34b9ba32b73a103a37b5b2b760791b606082015260800190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252818101527f4552433732313a206275726e2063616c6c6572206973206e6f74206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b6020808252602a908201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726040820152691037b91036b4b73a32b960b11b606082015260800190565b60208082526025908201527f4552433732313a2062617463684275726e2063616c6c6572206973206e6f742060408201526437bbb732b960d91b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b6020808252601f908201527f416c7265616479207265616368206d6178206d696e74207175616e7469747900604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602c908201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60408201526b7574206f6620626f756e647360a01b606082015260800190565b90815260200190565b600083825260406020830152610d9a6040830184611f8e565b600082198211156127b5576127b561287b565b500190565b6000826127c9576127c9612891565b500490565b6000828210156127e0576127e061287b565b500390565b60005b838110156128005781810151838201526020016127e8565b83811115610cad5750506000910152565b60028104600182168061282557607f821691505b6020821081141561284657634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156128605761286061287b565b5060010190565b60008261287657612876612891565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146107ea57600080fdfea2646970667358221220c54210e0e7f154464e9e8e5da4fc0629716b7ae48614c753568bcad36801a38264736f6c63430008000033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000284865617274206f66204e6174757265206279204b726973746a616e6120532e2057696c6c69616d730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005484e4b53570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102065760003560e01c806369e2f0fb1161011a578063b88d4fde116100ad578063d7ad08d31161007c578063d7ad08d314610424578063e1f860bd14610437578063e8a3d4851461044a578063e985e9c514610452578063f2fde38b1461046557610206565b8063b88d4fde146103d8578063c87b56dd146103eb578063ccb4807b146103fe578063d3fc98641461041157610206565b806395d89b41116100e957806395d89b41146103a2578063a0bcfc7f146103aa578063a22cb465146103bd578063ae9aea6d146103d057610206565b806369e2f0fb1461036c57806370a082311461037f578063715018a6146103925780638da5cb5b1461039a57610206565b806323b872dd1161019d57806342842e0e1161016c57806342842e0e1461030d57806342966c68146103205780634f6ccce7146103335780636352211e1461034657806363cc12d11461035957610206565b806323b872dd146102c15780632f745c59146102d45780633dd1eb61146102e7578063413dc9fd146102fa57610206565b8063099db017116101d9578063099db0171461027e5780630cac36b214610291578063162094c41461029957806318160ddd146102ac57610206565b806301ffc9a71461020b57806306fdde0314610234578063081812fc14610249578063095ea7b314610269575b600080fd5b61021e610219366004611e9b565b610478565b60405161022b9190612094565b60405180910390f35b61023c6104a5565b60405161022b919061209f565b61025c610257366004611f06565b610537565b60405161022b9190611fe9565b61027c610277366004611e1d565b610583565b005b61021e61028c366004611ce3565b61061b565b61023c610639565b61027c6102a7366004611f1e565b610648565b6102b4610695565b60405161022b9190612780565b61027c6102cf366004611d2f565b61069b565b6102b46102e2366004611e1d565b6106d3565b61027c6102f5366004611ce3565b610725565b6102b4610308366004611ce3565b6107ed565b61027c61031b366004611d2f565b6107ff565b61027c61032e366004611f06565b61081a565b6102b4610341366004611f06565b610853565b61025c610354366004611f06565b6108ae565b61027c610367366004611ce3565b6108e3565b61027c61037a366004611ce3565b61097e565b6102b461038d366004611ce3565b610a33565b61027c610a77565b61025c610b00565b61023c610b0f565b61027c6103b8366004611ed3565b610b1e565b61027c6103cb366004611de3565b610ba0565b6102b4610c6e565b61027c6103e6366004611d6a565b610c74565b61023c6103f9366004611f06565b610cb3565b61027c61040c366004611ed3565b610da2565b61027c61041f366004611e46565b610e24565b61027c610432366004611f06565b610ed3565b61027c610445366004611f63565b610f5a565b61023c611047565b61021e610460366004611cfd565b611056565b61027c610473366004611ce3565b611084565b60006001600160e01b0319821663780e9d6360e01b148061049d575061049d82611144565b90505b919050565b6060600180546104b490612811565b80601f01602080910402602001604051908101604052809291908181526020018280546104e090612811565b801561052d5780601f106105025761010080835404028352916020019161052d565b820191906000526020600020905b81548152906001019060200180831161051057829003601f168201915b5050505050905090565b600061054282611184565b6105675760405162461bcd60e51b815260040161055e9061248e565b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b600061058e826108ae565b9050806001600160a01b0316836001600160a01b031614156105c25760405162461bcd60e51b815260040161055e9061266b565b806001600160a01b03166105d46111a1565b6001600160a01b031614806105f057506105f0816104606111a1565b61060c5760405162461bcd60e51b815260040161055e906122ca565b61061683836111a5565b505050565b6001600160a01b03166000908152600e602052604090205460ff1690565b6060600c80546104b490612811565b6106506111a1565b6001600160a01b0316610661610b00565b6001600160a01b0316146106875760405162461bcd60e51b815260040161055e906124da565b6106918282611213565b5050565b60095490565b6106ac6106a66111a1565b82611295565b6106c85760405162461bcd60e51b815260040161055e906126e3565b610616838383611312565b60006106de83610a33565b82106106fc5760405162461bcd60e51b815260040161055e906120b2565b506001600160a01b03919091166000908152600760209081526040808320938352929052205490565b61072d6111a1565b6001600160a01b031661073e610b00565b6001600160a01b0316146107645760405162461bcd60e51b815260040161055e906124da565b6001600160a01b0381166000908152600e602052604090205460ff1615156001146107ea576001600160a01b0381166000908152600e602052604090819020805460ff1916600190811790915590517f0dfe125844182931a142d83434ec10aa591c730e0b3065ff5dce283cee857d5c916107e19184919061203a565b60405180910390a15b50565b600f6020526000908152604090205481565b61061683838360405180602001604052806000815250610c74565b33610824826108ae565b6001600160a01b03161461084a5760405162461bcd60e51b815260040161055e9061250f565b6107ea8161143f565b600061085d610695565b821061087b5760405162461bcd60e51b815260040161055e90612734565b6009828154811061089c57634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b6000818152600360205260408120546001600160a01b03168061049d5760405162461bcd60e51b815260040161055e90612371565b6108eb6111a1565b6001600160a01b03166108fc610b00565b6001600160a01b03161480610917575061091761028c6111a1565b6109335760405162461bcd60e51b815260040161055e906125dc565b6001600160a01b0381166000908152600f602052604080822091909155517fde47c4047583df7f77a80d1e7444b157ccd3b756c004c81277769913779c4a38906107e1908390611fe9565b6109866111a1565b6001600160a01b0316610997610b00565b6001600160a01b0316146109bd5760405162461bcd60e51b815260040161055e906124da565b6001600160a01b0381166000908152600e602052604090205460ff161515600114156107ea576001600160a01b0381166000908152600e6020526040808220805460ff19169055517f0dfe125844182931a142d83434ec10aa591c730e0b3065ff5dce283cee857d5c916107e19184919061203a565b60006001600160a01b038216610a5b5760405162461bcd60e51b815260040161055e90612327565b506001600160a01b031660009081526004602052604090205490565b610a7f6111a1565b6001600160a01b0316610a90610b00565b6001600160a01b031614610ab65760405162461bcd60e51b815260040161055e906124da565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b6060600280546104b490612811565b610b266111a1565b6001600160a01b0316610b37610b00565b6001600160a01b031614610b5d5760405162461bcd60e51b815260040161055e906124da565b8051610b7090600c906020840190611ba4565b507f87cdeaffd8e70903d6ce7cc983fac3b09ca79e83818124c98e47a1d70f8027d6816040516107e1919061209f565b610ba86111a1565b6001600160a01b0316826001600160a01b03161415610bd95760405162461bcd60e51b815260040161055e90612210565b8060066000610be66111a1565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155610c2a6111a1565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610c629190612094565b60405180910390a35050565b60105481565b610c85610c7f6111a1565b83611295565b610ca15760405162461bcd60e51b815260040161055e906126e3565b610cad848484846114e6565b50505050565b6060610cbe82611184565b610cda5760405162461bcd60e51b815260040161055e9061243d565b6000828152600d602052604081208054610cf390612811565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1f90612811565b8015610d6c5780601f10610d4157610100808354040283529160200191610d6c565b820191906000526020600020905b815481529060010190602001808311610d4f57829003601f168201915b505050505090506000610d7d610639565b9050805160001415610d91575090506104a0565b610d9a84611519565b949350505050565b610daa6111a1565b6001600160a01b0316610dbb610b00565b6001600160a01b031614610de15760405162461bcd60e51b815260040161055e906124da565b8051610df490600b906020840190611ba4565b507fe88f8427748def9baf1a4a6a9e77c6d7d2be8ba756acdf3d6e131fc83c1a39d3816040516107e1919061209f565b610e2d3361061b565b610e495760405162461bcd60e51b815260040161055e90612293565b6010546001600160a01b0384166000908152600f602052604090205410610e825760405162461bcd60e51b815260040161055e906126ac565b6001600160a01b0383166000908152600f6020526040902054610ea69060016127a2565b6001600160a01b0384166000908152600f6020526040902055610ec9838361159c565b6106168282611213565b610edb6111a1565b6001600160a01b0316610eec610b00565b6001600160a01b03161480610f075750610f0761028c6111a1565b610f235760405162461bcd60e51b815260040161055e906125dc565b60108190556040517ff3bf06885d1992d5f8f41481728ec2c093d33a48270ee4c52a0dc9bf8816f1ce906107e19033908490612055565b33610f64846108ae565b6001600160a01b031614610f8a5760405162461bcd60e51b815260040161055e90612626565b33610f94836108ae565b6001600160a01b031614610fba5760405162461bcd60e51b815260040161055e90612626565b33610fc4826108ae565b6001600160a01b031614610fea5760405162461bcd60e51b815260040161055e90612626565b610ff38361143f565b610ffc8261143f565b6110058161143f565b7f12648cae99b8b2244dedb53a1d2d2634310b3be06c37e06cf134337ef373e3353384848460405161103a949392919061206e565b60405180910390a1505050565b6060600b80546104b490612811565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b61108c6111a1565b6001600160a01b031661109d610b00565b6001600160a01b0316146110c35760405162461bcd60e51b815260040161055e906124da565b6001600160a01b0381166110e95760405162461bcd60e51b815260040161055e9061214f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160e01b031982166380ac58cd60e01b148061117557506001600160e01b03198216635b5e139f60e01b145b8061049d575061049d826115b6565b6000908152600360205260409020546001600160a01b0316151590565b3390565b600081815260056020526040902080546001600160a01b0319166001600160a01b03841690811790915581906111da826108ae565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61121c82611184565b6112385760405162461bcd60e51b815260040161055e906123ba565b6000828152600d60209081526040909120825161125792840190611ba4565b507f7f4449296e3be94c171d37caee72eddc2e253fe45652e877e931e31d758a54408282604051611289929190612789565b60405180910390a15050565b60006112a082611184565b6112bc5760405162461bcd60e51b815260040161055e90612247565b60006112c7836108ae565b9050806001600160a01b0316846001600160a01b031614806113025750836001600160a01b03166112f784610537565b6001600160a01b0316145b80610d9a5750610d9a8185611056565b826001600160a01b0316611325826108ae565b6001600160a01b03161461134b5760405162461bcd60e51b815260040161055e90612544565b6001600160a01b0382166113715760405162461bcd60e51b815260040161055e906121cc565b61137c8383836115cf565b6113876000826111a5565b6001600160a01b03831660009081526004602052604081208054600192906113b09084906127ce565b90915550506001600160a01b03821660009081526004602052604081208054600192906113de9084906127a2565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600061144a826108ae565b9050611458816000846115cf565b6114636000836111a5565b6001600160a01b038116600090815260046020526040812080546001929061148c9084906127ce565b909155505060008281526003602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6114f1848484611312565b6114fd84848484611658565b610cad5760405162461bcd60e51b815260040161055e906120fd565b606061152482611184565b6115405760405162461bcd60e51b815260040161055e9061258d565b600061154a610639565b9050600081511161156a5760405180602001604052806000815250611595565b8061157484611773565b604051602001611585929190611fba565b6040516020818303038152906040525b9392505050565b61069182826040518060200160405280600081525061188e565b6001600160e01b031981166301ffc9a760e01b14919050565b6115da838383610616565b6001600160a01b0383166115f6576115f1816118c1565b611619565b816001600160a01b0316836001600160a01b031614611619576116198382611905565b6001600160a01b03821661163557611630816119a2565b610616565b826001600160a01b0316826001600160a01b031614610616576106168282611a7b565b600061166c846001600160a01b0316611abf565b1561176857836001600160a01b031663150b7a026116886111a1565b8786866040518563ffffffff1660e01b81526004016116aa9493929190611ffd565b602060405180830381600087803b1580156116c457600080fd5b505af19250505080156116f4575060408051601f3d908101601f191682019092526116f191810190611eb7565b60015b61174e573d808015611722576040519150601f19603f3d011682016040523d82523d6000602084013e611727565b606091505b5080516117465760405162461bcd60e51b815260040161055e906120fd565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610d9a565b506001949350505050565b60608161179857506040805180820190915260018152600360fc1b60208201526104a0565b8160005b81156117c257806117ac8161284c565b91506117bb9050600a836127ba565b915061179c565b60008167ffffffffffffffff8111156117eb57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611815576020820181803683370190505b5090505b8415610d9a5761182a6001836127ce565b9150611837600a86612867565b6118429060306127a2565b60f81b81838151811061186557634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611887600a866127ba565b9450611819565b6118988383611ac5565b6118a56000848484611658565b6106165760405162461bcd60e51b815260040161055e906120fd565b600980546000838152600a60205260408120829055600182018355919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0155565b6000600161191284610a33565b61191c91906127ce565b60008381526008602052604090205490915080821461196f576001600160a01b03841660009081526007602090815260408083208584528252808320548484528184208190558352600890915290208190555b5060009182526008602090815260408084208490556001600160a01b039094168352600781528383209183525290812055565b6009546000906119b4906001906127ce565b6000838152600a6020526040812054600980549394509092849081106119ea57634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508060098381548110611a1957634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255828152600a90915260408082208490558582528120556009805480611a5f57634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000611a8683610a33565b6001600160a01b039093166000908152600760209081526040808320868452825280832085905593825260089052919091209190915550565b3b151590565b6001600160a01b038216611aeb5760405162461bcd60e51b815260040161055e90612408565b611af481611184565b15611b115760405162461bcd60e51b815260040161055e90612195565b611b1d600083836115cf565b6001600160a01b0382166000908152600460205260408120805460019290611b469084906127a2565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611bb090612811565b90600052602060002090601f016020900481019282611bd25760008555611c18565b82601f10611beb57805160ff1916838001178555611c18565b82800160010185558215611c18579182015b82811115611c18578251825591602001919060010190611bfd565b50611c24929150611c28565b5090565b5b80821115611c245760008155600101611c29565b600067ffffffffffffffff80841115611c5857611c586128a7565b604051601f8501601f191681016020018281118282101715611c7c57611c7c6128a7565b604052848152915081838501861015611c9457600080fd5b8484602083013760006020868301015250509392505050565b80356001600160a01b03811681146104a057600080fd5b600082601f830112611cd4578081fd5b61159583833560208501611c3d565b600060208284031215611cf4578081fd5b61159582611cad565b60008060408385031215611d0f578081fd5b611d1883611cad565b9150611d2660208401611cad565b90509250929050565b600080600060608486031215611d43578081fd5b611d4c84611cad565b9250611d5a60208501611cad565b9150604084013590509250925092565b60008060008060808587031215611d7f578081fd5b611d8885611cad565b9350611d9660208601611cad565b925060408501359150606085013567ffffffffffffffff811115611db8578182fd5b8501601f81018713611dc8578182fd5b611dd787823560208401611c3d565b91505092959194509250565b60008060408385031215611df5578182fd5b611dfe83611cad565b915060208301358015158114611e12578182fd5b809150509250929050565b60008060408385031215611e2f578182fd5b611e3883611cad565b946020939093013593505050565b600080600060608486031215611e5a578283fd5b611e6384611cad565b925060208401359150604084013567ffffffffffffffff811115611e85578182fd5b611e9186828701611cc4565b9150509250925092565b600060208284031215611eac578081fd5b8135611595816128bd565b600060208284031215611ec8578081fd5b8151611595816128bd565b600060208284031215611ee4578081fd5b813567ffffffffffffffff811115611efa578182fd5b610d9a84828501611cc4565b600060208284031215611f17578081fd5b5035919050565b60008060408385031215611f30578182fd5b82359150602083013567ffffffffffffffff811115611f4d578182fd5b611f5985828601611cc4565b9150509250929050565b600080600060608486031215611f77578283fd5b505081359360208301359350604090920135919050565b60008151808452611fa68160208601602086016127e5565b601f01601f19169290920160200192915050565b60008351611fcc8184602088016127e5565b835190830190611fe08183602088016127e5565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061203090830184611f8e565b9695505050505050565b6001600160a01b039290921682521515602082015260400190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b901515815260200190565b6000602082526115956020830184611f8e565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526018908201527f43616c6c6572206973206e6f7420746865206d696e7465720000000000000000604082015260600190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252602e908201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60408201526d32bc34b9ba32b73a103a37b5b2b760911b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b60208082526031908201527f45524337323155524953746f726167653a2055524920717565727920666f72206040820152703737b732bc34b9ba32b73a103a37b5b2b760791b606082015260800190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252818101527f4552433732313a206275726e2063616c6c6572206973206e6f74206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b6020808252602a908201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726040820152691037b91036b4b73a32b960b11b606082015260800190565b60208082526025908201527f4552433732313a2062617463684275726e2063616c6c6572206973206e6f742060408201526437bbb732b960d91b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b6020808252601f908201527f416c7265616479207265616368206d6178206d696e74207175616e7469747900604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602c908201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60408201526b7574206f6620626f756e647360a01b606082015260800190565b90815260200190565b600083825260406020830152610d9a6040830184611f8e565b600082198211156127b5576127b561287b565b500190565b6000826127c9576127c9612891565b500490565b6000828210156127e0576127e061287b565b500390565b60005b838110156128005781810151838201526020016127e8565b83811115610cad5750506000910152565b60028104600182168061282557607f821691505b6020821081141561284657634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156128605761286061287b565b5060010190565b60008261287657612876612891565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146107ea57600080fdfea2646970667358221220c54210e0e7f154464e9e8e5da4fc0629716b7ae48614c753568bcad36801a38264736f6c63430008000033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000284865617274206f66204e6174757265206279204b726973746a616e6120532e2057696c6c69616d730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005484e4b53570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Heart of Nature by Kristjana S. Williams
Arg [1] : _symbol (string): HNKSW
Arg [2] : _contractUri (string):

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000028
Arg [4] : 4865617274206f66204e6174757265206279204b726973746a616e6120532e20
Arg [5] : 57696c6c69616d73000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [7] : 484e4b5357000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

45157:5435:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36976:237;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25142:100;;;:::i;:::-;;;;;;;:::i;26602:221::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;26139:397::-;;;;;;:::i;:::-;;:::i;:::-;;47617:109;;;;;;:::i;:::-;;:::i;46932:99::-;;;:::i;47039:133::-;;;;;;:::i;:::-;;:::i;37629:113::-;;;:::i;:::-;;;;;;;:::i;27492:305::-;;;;;;:::i;:::-;;:::i;37297:256::-;;;;;;:::i;:::-;;:::i;47180:210::-;;;;;;:::i;:::-;;:::i;45544:50::-;;;;;;:::i;:::-;;:::i;27868:151::-;;;;;;:::i;:::-;;:::i;49433:162::-;;;;;;:::i;:::-;;:::i;37819:233::-;;;;;;:::i;:::-;;:::i;24836:239::-;;;;;;:::i;:::-;;:::i;48621:163::-;;;;;;:::i;:::-;;:::i;47396:213::-;;;;;;:::i;:::-;;:::i;24566:208::-;;;;;;:::i;:::-;;:::i;4877:148::-;;;:::i;4226:87::-;;;:::i;25311:104::-;;;:::i;46766:158::-;;;;;;:::i;:::-;;:::i;26895:295::-;;;;;;:::i;:::-;;:::i;45642:30::-;;;:::i;28090:285::-;;;;;;:::i;:::-;;:::i;49603:532::-;;;;;;:::i;:::-;;:::i;46496:140::-;;;;;;:::i;:::-;;:::i;47734:619::-;;;;;;:::i;:::-;;:::i;48397:178::-;;;;;;:::i;:::-;;:::i;48825:600::-;;;;;;:::i;:::-;;:::i;46390:98::-;;;:::i;27261:164::-;;;;;;:::i;:::-;;:::i;5180:244::-;;;;;;:::i;:::-;;:::i;36976:237::-;37078:4;-1:-1:-1;;;;;;37102:50:0;;-1:-1:-1;;;37102:50:0;;:103;;;37169:36;37193:11;37169:23;:36::i;:::-;37095:110;;36976:237;;;;:::o;25142:100::-;25196:13;25229:5;25222:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25142:100;:::o;26602:221::-;26678:7;26706:16;26714:7;26706;:16::i;:::-;26698:73;;;;-1:-1:-1;;;26698:73:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;26791:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;26791:24:0;;26602:221::o;26139:397::-;26220:13;26236:23;26251:7;26236:14;:23::i;:::-;26220:39;;26284:5;-1:-1:-1;;;;;26278:11:0;:2;-1:-1:-1;;;;;26278:11:0;;;26270:57;;;;-1:-1:-1;;;26270:57:0;;;;;;;:::i;:::-;26364:5;-1:-1:-1;;;;;26348:21:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;26348:21:0;;:62;;;;26373:37;26390:5;26397:12;:10;:12::i;26373:37::-;26340:154;;;;-1:-1:-1;;;26340:154:0;;;;;;;:::i;:::-;26507:21;26516:2;26520:7;26507:8;:21::i;:::-;26139:397;;;:::o;47617:109::-;-1:-1:-1;;;;;47702:16:0;47678:4;47702:16;;;:7;:16;;;;;;;;;47617:109::o;46932:99::-;46977:13;47010;47003:20;;;;;:::i;47039:133::-;4457:12;:10;:12::i;:::-;-1:-1:-1;;;;;4446:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;4446:23:0;;4438:68;;;;-1:-1:-1;;;4438:68:0;;;;;;;:::i;:::-;47132:32:::1;47145:7;47154:9;47132:12;:32::i;:::-;47039:133:::0;;:::o;37629:113::-;37717:10;:17;37629:113;:::o;27492:305::-;27653:41;27672:12;:10;:12::i;:::-;27686:7;27653:18;:41::i;:::-;27645:103;;;;-1:-1:-1;;;27645:103:0;;;;;;;:::i;:::-;27761:28;27771:4;27777:2;27781:7;27761:9;:28::i;37297:256::-;37394:7;37430:23;37447:5;37430:16;:23::i;:::-;37422:5;:31;37414:87;;;;-1:-1:-1;;;37414:87:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;37519:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;37297:256::o;47180:210::-;4457:12;:10;:12::i;:::-;-1:-1:-1;;;;;4446:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;4446:23:0;;4438:68;;;;-1:-1:-1;;;4438:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;47255:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;::::1;;:24;;:16:::0;:24:::1;47252:131;;-1:-1:-1::0;;;;;47296:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;:23;;-1:-1:-1;;47296:23:0::1;47315:4;47296:23:::0;;::::1;::::0;;;47339:32;;::::1;::::0;::::1;::::0;47304:7;;47315:4;47339:32:::1;:::i;:::-;;;;;;;;47252:131;47180:210:::0;:::o;45544:50::-;;;;;;;;;;;;;:::o;27868:151::-;27972:39;27989:4;27995:2;27999:7;27972:39;;;;;;;;;;;;:16;:39::i;49433:162::-;49514:10;49493:17;49501:8;49493:7;:17::i;:::-;-1:-1:-1;;;;;49493:31:0;;49485:76;;;;-1:-1:-1;;;49485:76:0;;;;;;;:::i;:::-;49572:15;49578:8;49572:5;:15::i;37819:233::-;37894:7;37930:30;:28;:30::i;:::-;37922:5;:38;37914:95;;;;-1:-1:-1;;;37914:95:0;;;;;;;:::i;:::-;38027:10;38038:5;38027:17;;;;;;-1:-1:-1;;;38027:17:0;;;;;;;;;;;;;;;;;38020:24;;37819:233;;;:::o;24836:239::-;24908:7;24944:16;;;:7;:16;;;;;;-1:-1:-1;;;;;24944:16:0;24979:19;24971:73;;;;-1:-1:-1;;;24971:73:0;;;;;;;:::i;48621:163::-;50479:12;:10;:12::i;:::-;-1:-1:-1;;;;;50468:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;50468:23:0;;:54;;;;50495:27;50509:12;:10;:12::i;50495:27::-;50460:109;;;;-1:-1:-1;;;50460:109:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;48705:23:0;::::1;48731:1;48705:23:::0;;;:14:::1;:23;::::0;;;;;:27;;;;48748:28;::::1;::::0;::::1;::::0;48720:7;;48748:28:::1;:::i;47396:213::-:0;4457:12;:10;:12::i;:::-;-1:-1:-1;;;;;4446:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;4446:23:0;;4438:68;;;;-1:-1:-1;;;4438:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;47472:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;::::1;;:24;;:16:::0;:24:::1;47469:133;;;-1:-1:-1::0;;;;;47513:16:0;::::1;47532:5;47513:16:::0;;;:7:::1;:16;::::0;;;;;:24;;-1:-1:-1;;47513:24:0::1;::::0;;47557:33;::::1;::::0;::::1;::::0;47521:7;;47532:5;47557:33:::1;:::i;24566:208::-:0;24638:7;-1:-1:-1;;;;;24666:19:0;;24658:74;;;;-1:-1:-1;;;24658:74:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;24750:16:0;;;;;:9;:16;;;;;;;24566:208::o;4877:148::-;4457:12;:10;:12::i;:::-;-1:-1:-1;;;;;4446:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;4446:23:0;;4438:68;;;;-1:-1:-1;;;4438:68:0;;;;;;;:::i;:::-;4984:1:::1;4968:6:::0;;4947:40:::1;::::0;-1:-1:-1;;;;;4968:6:0;;::::1;::::0;4947:40:::1;::::0;4984:1;;4947:40:::1;5015:1;4998:19:::0;;-1:-1:-1;;;;;;4998:19:0::1;::::0;;4877:148::o;4226:87::-;4272:7;4299:6;-1:-1:-1;;;;;4299:6:0;4226:87;:::o;25311:104::-;25367:13;25400:7;25393:14;;;;;:::i;46766:158::-;4457:12;:10;:12::i;:::-;-1:-1:-1;;;;;4446:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;4446:23:0;;4438:68;;;;-1:-1:-1;;;4438:68:0;;;;;;;:::i;:::-;46844:28;;::::1;::::0;:13:::1;::::0;:28:::1;::::0;::::1;::::0;::::1;:::i;:::-;;46888;46903:12;46888:28;;;;;;:::i;26895:295::-:0;27010:12;:10;:12::i;:::-;-1:-1:-1;;;;;26998:24:0;:8;-1:-1:-1;;;;;26998:24:0;;;26990:62;;;;-1:-1:-1;;;26990:62:0;;;;;;;:::i;:::-;27110:8;27065:18;:32;27084:12;:10;:12::i;:::-;-1:-1:-1;;;;;27065:32:0;;;;;;;;;;;;;;;;;-1:-1:-1;27065:32:0;;;:42;;;;;;;;;;;;:53;;-1:-1:-1;;27065:53:0;;;;;;;;;;;27149:12;:10;:12::i;:::-;-1:-1:-1;;;;;27134:48:0;;27173:8;27134:48;;;;;;:::i;:::-;;;;;;;;26895:295;;:::o;45642:30::-;;;;:::o;28090:285::-;28222:41;28241:12;:10;:12::i;:::-;28255:7;28222:18;:41::i;:::-;28214:103;;;;-1:-1:-1;;;28214:103:0;;;;;;;:::i;:::-;28328:39;28342:4;28348:2;28352:7;28361:5;28328:13;:39::i;:::-;28090:285;;;;:::o;49603:532::-;49676:13;49710:16;49718:7;49710;:16::i;:::-;49702:78;;;;-1:-1:-1;;;49702:78:0;;;;;;;:::i;:::-;49793:23;49819:19;;;:10;:19;;;;;49793:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49849:18;49870:10;:8;:10::i;:::-;49849:31;;49963:4;49957:18;49979:1;49957:23;49953:72;;;-1:-1:-1;50004:9:0;-1:-1:-1;49997:16:0;;49953:72;50104:23;50119:7;50104:14;:23::i;:::-;50097:30;49603:532;-1:-1:-1;;;;49603:532:0:o;46496:140::-;4457:12;:10;:12::i;:::-;-1:-1:-1;;;;;4446:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;4446:23:0;;4438:68;;;;-1:-1:-1;;;4438:68:0;;;;;;;:::i;:::-;46570:18;;::::1;::::0;:11:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;:::-;;46604:24;46623:4;46604:24;;;;;;:::i;47734:619::-:0;47831:25;47845:10;47831:13;:25::i;:::-;47823:62;;;;-1:-1:-1;;;47823:62:0;;;;;;;:::i;:::-;47964:15;;-1:-1:-1;;;;;47943:18:0;;;;;;:14;:18;;;;;;:36;47935:80;;;;-1:-1:-1;;;47935:80:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;48091:18:0;;;;;;:14;:18;;;;;;:22;;48112:1;48091:22;:::i;:::-;-1:-1:-1;;;;;48070:18:0;;;;;;:14;:18;;;;;:43;48278:23;48085:2;48292:8;48278:9;:23::i;:::-;48312:33;48325:8;48335:9;48312:12;:33::i;48397:178::-;50479:12;:10;:12::i;:::-;-1:-1:-1;;;;;50468:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;50468:23:0;;:54;;;;50495:27;50509:12;:10;:12::i;50495:27::-;50460:109;;;;-1:-1:-1;;;50460:109:0;;;;;;;:::i;:::-;48481:15:::1;:26:::0;;;48523:44:::1;::::0;::::1;::::0;::::1;::::0;48546:10:::1;::::0;48499:8;;48523:44:::1;:::i;48825:600::-:0;48951:10;48929:18;48937:9;48929:7;:18::i;:::-;-1:-1:-1;;;;;48929:32:0;;48921:82;;;;-1:-1:-1;;;48921:82:0;;;;;;;:::i;:::-;49044:10;49022:18;49030:9;49022:7;:18::i;:::-;-1:-1:-1;;;;;49022:32:0;;49014:82;;;;-1:-1:-1;;;49014:82:0;;;;;;;:::i;:::-;49137:10;49115:18;49123:9;49115:7;:18::i;:::-;-1:-1:-1;;;;;49115:32:0;;49107:82;;;;-1:-1:-1;;;49107:82:0;;;;;;;:::i;:::-;49200:16;49206:9;49200:5;:16::i;:::-;49227;49233:9;49227:5;:16::i;:::-;49254;49260:9;49254:5;:16::i;:::-;49361:56;49373:10;49385:9;49396;49407;49361:56;;;;;;;;;:::i;:::-;;;;;;;;48825:600;;;:::o;46390:98::-;46436:13;46469:11;46462:18;;;;;:::i;27261:164::-;-1:-1:-1;;;;;27382:25:0;;;27358:4;27382:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;27261:164::o;5180:244::-;4457:12;:10;:12::i;:::-;-1:-1:-1;;;;;4446:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;4446:23:0;;4438:68;;;;-1:-1:-1;;;4438:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5269:22:0;::::1;5261:73;;;;-1:-1:-1::0;;;5261:73:0::1;;;;;;;:::i;:::-;5371:6;::::0;;5350:38:::1;::::0;-1:-1:-1;;;;;5350:38:0;;::::1;::::0;5371:6;::::1;::::0;5350:38:::1;::::0;::::1;5399:6;:17:::0;;-1:-1:-1;;;;;;5399:17:0::1;-1:-1:-1::0;;;;;5399:17:0;;;::::1;::::0;;;::::1;::::0;;5180:244::o;24210:292::-;24312:4;-1:-1:-1;;;;;;24336:40:0;;-1:-1:-1;;;24336:40:0;;:105;;-1:-1:-1;;;;;;;24393:48:0;;-1:-1:-1;;;24393:48:0;24336:105;:158;;;;24458:36;24482:11;24458:23;:36::i;29842:127::-;29907:4;29931:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29931:16:0;:30;;;29842:127::o;2752:98::-;2832:10;2752:98;:::o;33719:174::-;33794:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;33794:29:0;-1:-1:-1;;;;;33794:29:0;;;;;;;;:24;;33848:23;33794:24;33848:14;:23::i;:::-;-1:-1:-1;;;;;33839:46:0;;;;;;;;;;;33719:174;;:::o;50143:269::-;50243:16;50251:7;50243;:16::i;:::-;50235:75;;;;-1:-1:-1;;;50235:75:0;;;;;;;:::i;:::-;50321:19;;;;:10;:19;;;;;;;;:31;;;;;;;;:::i;:::-;;50368:35;50384:7;50393:9;50368:35;;;;;;;:::i;:::-;;;;;;;;50143:269;;:::o;30136:348::-;30229:4;30254:16;30262:7;30254;:16::i;:::-;30246:73;;;;-1:-1:-1;;;30246:73:0;;;;;;;:::i;:::-;30330:13;30346:23;30361:7;30346:14;:23::i;:::-;30330:39;;30399:5;-1:-1:-1;;;;;30388:16:0;:7;-1:-1:-1;;;;;30388:16:0;;:51;;;;30432:7;-1:-1:-1;;;;;30408:31:0;:20;30420:7;30408:11;:20::i;:::-;-1:-1:-1;;;;;30408:31:0;;30388:51;:87;;;;30443:32;30460:5;30467:7;30443:16;:32::i;33057:544::-;33182:4;-1:-1:-1;;;;;33155:31:0;:23;33170:7;33155:14;:23::i;:::-;-1:-1:-1;;;;;33155:31:0;;33147:85;;;;-1:-1:-1;;;33147:85:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33251:16:0;;33243:65;;;;-1:-1:-1;;;33243:65:0;;;;;;;:::i;:::-;33321:39;33342:4;33348:2;33352:7;33321:20;:39::i;:::-;33425:29;33442:1;33446:7;33425:8;:29::i;:::-;-1:-1:-1;;;;;33467:15:0;;;;;;:9;:15;;;;;:20;;33486:1;;33467:15;:20;;33486:1;;33467:20;:::i;:::-;;;;-1:-1:-1;;;;;;;33498:13:0;;;;;;:9;:13;;;;;:18;;33515:1;;33498:13;:18;;33515:1;;33498:18;:::i;:::-;;;;-1:-1:-1;;33527:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;33527:21:0;-1:-1:-1;;;;;33527:21:0;;;;;;;;;33566:27;;33527:16;;33566:27;;;;;;;33057:544;;;:::o;32360:360::-;32420:13;32436:23;32451:7;32436:14;:23::i;:::-;32420:39;;32472:48;32493:5;32508:1;32512:7;32472:20;:48::i;:::-;32561:29;32578:1;32582:7;32561:8;:29::i;:::-;-1:-1:-1;;;;;32603:16:0;;;;;;:9;:16;;;;;:21;;32623:1;;32603:16;:21;;32623:1;;32603:21;:::i;:::-;;;;-1:-1:-1;;32642:16:0;;;;:7;:16;;;;;;32635:23;;-1:-1:-1;;;;;;32635:23:0;;;32676:36;32650:7;;32642:16;-1:-1:-1;;;;;32676:36:0;;;;;32642:16;;32676:36;32360:360;;:::o;29257:272::-;29371:28;29381:4;29387:2;29391:7;29371:9;:28::i;:::-;29418:48;29441:4;29447:2;29451:7;29460:5;29418:22;:48::i;:::-;29410:111;;;;-1:-1:-1;;;29410:111:0;;;;;;;:::i;25486:360::-;25559:13;25593:16;25601:7;25593;:16::i;:::-;25585:76;;;;-1:-1:-1;;;25585:76:0;;;;;;;:::i;:::-;25674:21;25698:10;:8;:10::i;:::-;25674:34;;25750:1;25732:7;25726:21;:25;:112;;;;;;;;;;;;;;;;;25791:7;25800:18;:7;:16;:18::i;:::-;25774:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25726:112;25719:119;25486:360;-1:-1:-1;;;25486:360:0:o;30826:110::-;30902:26;30912:2;30916:7;30902:26;;;;;;;;;;;;:9;:26::i;16150:157::-;-1:-1:-1;;;;;;16259:40:0;;-1:-1:-1;;;16259:40:0;16150:157;;;:::o;38665:555::-;38775:45;38802:4;38808:2;38812:7;38775:26;:45::i;:::-;-1:-1:-1;;;;;38837:18:0;;38833:187;;38872:40;38904:7;38872:31;:40::i;:::-;38833:187;;;38942:2;-1:-1:-1;;;;;38934:10:0;:4;-1:-1:-1;;;;;38934:10:0;;38930:90;;38961:47;38994:4;39000:7;38961:32;:47::i;:::-;-1:-1:-1;;;;;39034:16:0;;39030:183;;39067:45;39104:7;39067:36;:45::i;:::-;39030:183;;;39140:4;-1:-1:-1;;;;;39134:10:0;:2;-1:-1:-1;;;;;39134:10:0;;39130:83;;39161:40;39189:2;39193:7;39161:27;:40::i;34458:843::-;34579:4;34605:15;:2;-1:-1:-1;;;;;34605:13:0;;:15::i;:::-;34601:693;;;34657:2;-1:-1:-1;;;;;34641:36:0;;34678:12;:10;:12::i;:::-;34692:4;34698:7;34707:5;34641:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34641:72:0;;;;;;;;-1:-1:-1;;34641:72:0;;;;;;;;;;;;:::i;:::-;;;34637:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34887:13:0;;34883:341;;34930:60;;-1:-1:-1;;;34930:60:0;;;;;;;:::i;34883:341::-;35174:6;35168:13;35159:6;35155:2;35151:15;35144:38;34637:602;-1:-1:-1;;;;;;34764:55:0;-1:-1:-1;;;34764:55:0;;-1:-1:-1;34757:62:0;;34601:693;-1:-1:-1;35278:4:0;34458:843;;;;;;:::o;339:723::-;395:13;616:10;612:53;;-1:-1:-1;643:10:0;;;;;;;;;;;;-1:-1:-1;;;643:10:0;;;;;;612:53;690:5;675:12;731:78;738:9;;731:78;;764:8;;;;:::i;:::-;;-1:-1:-1;787:10:0;;-1:-1:-1;795:2:0;787:10;;:::i;:::-;;;731:78;;;819:19;851:6;841:17;;;;;;-1:-1:-1;;;841:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;841:17:0;;819:39;;869:154;876:10;;869:154;;903:11;913:1;903:11;;:::i;:::-;;-1:-1:-1;972:10:0;980:2;972:5;:10;:::i;:::-;959:24;;:2;:24;:::i;:::-;946:39;;929:6;936;929:14;;;;;;-1:-1:-1;;;929:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;929:56:0;;;;;;;;-1:-1:-1;1000:11:0;1009:2;1000:11;;:::i;:::-;;;869:154;;31163:250;31259:18;31265:2;31269:7;31259:5;:18::i;:::-;31296:54;31327:1;31331:2;31335:7;31344:5;31296:22;:54::i;:::-;31288:117;;;;-1:-1:-1;;;31288:117:0;;;;;;;:::i;39943:164::-;40047:10;:17;;40020:24;;;;:15;:24;;;;;:44;;;40075:24;;;;;;;;;;;;39943:164::o;40734:988::-;41000:22;41050:1;41025:22;41042:4;41025:16;:22::i;:::-;:26;;;;:::i;:::-;41062:18;41083:26;;;:17;:26;;;;;;41000:51;;-1:-1:-1;41216:28:0;;;41212:328;;-1:-1:-1;;;;;41283:18:0;;41261:19;41283:18;;;:12;:18;;;;;;;;:34;;;;;;;;;41334:30;;;;;;:44;;;41451:30;;:17;:30;;;;;:43;;;41212:328;-1:-1:-1;41636:26:0;;;;:17;:26;;;;;;;;41629:33;;;-1:-1:-1;;;;;41680:18:0;;;;;:12;:18;;;;;:34;;;;;;;41673:41;40734:988::o;42017:1079::-;42295:10;:17;42270:22;;42295:21;;42315:1;;42295:21;:::i;:::-;42327:18;42348:24;;;:15;:24;;;;;;42721:10;:26;;42270:46;;-1:-1:-1;42348:24:0;;42270:46;;42721:26;;;;-1:-1:-1;;;42721:26:0;;;;;;;;;;;;;;;;;42699:48;;42785:11;42760:10;42771;42760:22;;;;;;-1:-1:-1;;;42760:22:0;;;;;;;;;;;;;;;;;;;;:36;;;;42865:28;;;:15;:28;;;;;;;:41;;;43037:24;;;;;43030:31;43072:10;:16;;;;;-1:-1:-1;;;43072:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;42017:1079;;;;:::o;39521:221::-;39606:14;39623:20;39640:2;39623:16;:20::i;:::-;-1:-1:-1;;;;;39654:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;39699:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;39521:221:0:o;6229:422::-;6596:20;6635:8;;;6229:422::o;31749:382::-;-1:-1:-1;;;;;31829:16:0;;31821:61;;;;-1:-1:-1;;;31821:61:0;;;;;;;:::i;:::-;31902:16;31910:7;31902;:16::i;:::-;31901:17;31893:58;;;;-1:-1:-1;;;31893:58:0;;;;;;;:::i;:::-;31964:45;31993:1;31997:2;32001:7;31964:20;:45::i;:::-;-1:-1:-1;;;;;32022:13:0;;;;;;:9;:13;;;;;:18;;32039:1;;32022:13;:18;;32039:1;;32022:18;:::i;:::-;;;;-1:-1:-1;;32051:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;32051:21:0;-1:-1:-1;;;;;32051:21:0;;;;;;;;32090:33;;32051:16;;;32090:33;;32051:16;;32090:33;31749:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:607:1;;110:18;151:2;143:6;140:14;137:2;;;157:18;;:::i;:::-;206:2;200:9;279:2;256:17;;-1:-1:-1;;252:31:1;240:44;;286:4;236:55;306:18;;;326:22;;;303:46;300:2;;;352:18;;:::i;:::-;388:2;381:22;436;;;421:6;-1:-1:-1;421:6:1;473:16;;;470:25;-1:-1:-1;467:2:1;;;508:1;505;498:12;467:2;558:6;553:3;546:4;538:6;534:17;521:44;613:1;606:4;597:6;589;585:19;581:30;574:41;;;90:531;;;;;:::o;626:175::-;696:20;;-1:-1:-1;;;;;745:31:1;;735:42;;725:2;;791:1;788;781:12;806:233;;904:3;897:4;889:6;885:17;881:27;871:2;;926:5;919;912:20;871:2;952:81;1029:3;1020:6;1007:20;1000:4;992:6;988:17;952:81;:::i;1044:198::-;;1156:2;1144:9;1135:7;1131:23;1127:32;1124:2;;;1177:6;1169;1162:22;1124:2;1205:31;1226:9;1205:31;:::i;1247:274::-;;;1376:2;1364:9;1355:7;1351:23;1347:32;1344:2;;;1397:6;1389;1382:22;1344:2;1425:31;1446:9;1425:31;:::i;:::-;1415:41;;1475:40;1511:2;1500:9;1496:18;1475:40;:::i;:::-;1465:50;;1334:187;;;;;:::o;1526:342::-;;;;1672:2;1660:9;1651:7;1647:23;1643:32;1640:2;;;1693:6;1685;1678:22;1640:2;1721:31;1742:9;1721:31;:::i;:::-;1711:41;;1771:40;1807:2;1796:9;1792:18;1771:40;:::i;:::-;1761:50;;1858:2;1847:9;1843:18;1830:32;1820:42;;1630:238;;;;;:::o;1873:702::-;;;;;2045:3;2033:9;2024:7;2020:23;2016:33;2013:2;;;2067:6;2059;2052:22;2013:2;2095:31;2116:9;2095:31;:::i;:::-;2085:41;;2145:40;2181:2;2170:9;2166:18;2145:40;:::i;:::-;2135:50;;2232:2;2221:9;2217:18;2204:32;2194:42;;2287:2;2276:9;2272:18;2259:32;2314:18;2306:6;2303:30;2300:2;;;2351:6;2343;2336:22;2300:2;2379:22;;2432:4;2424:13;;2420:27;-1:-1:-1;2410:2:1;;2466:6;2458;2451:22;2410:2;2494:75;2561:7;2556:2;2543:16;2538:2;2534;2530:11;2494:75;:::i;:::-;2484:85;;;2003:572;;;;;;;:::o;2580:369::-;;;2706:2;2694:9;2685:7;2681:23;2677:32;2674:2;;;2727:6;2719;2712:22;2674:2;2755:31;2776:9;2755:31;:::i;:::-;2745:41;;2836:2;2825:9;2821:18;2808:32;2883:5;2876:13;2869:21;2862:5;2859:32;2849:2;;2910:6;2902;2895:22;2849:2;2938:5;2928:15;;;2664:285;;;;;:::o;2954:266::-;;;3083:2;3071:9;3062:7;3058:23;3054:32;3051:2;;;3104:6;3096;3089:22;3051:2;3132:31;3153:9;3132:31;:::i;:::-;3122:41;3210:2;3195:18;;;;3182:32;;-1:-1:-1;;;3041:179:1:o;3225:488::-;;;;3381:2;3369:9;3360:7;3356:23;3352:32;3349:2;;;3402:6;3394;3387:22;3349:2;3430:31;3451:9;3430:31;:::i;:::-;3420:41;;3508:2;3497:9;3493:18;3480:32;3470:42;;3563:2;3552:9;3548:18;3535:32;3590:18;3582:6;3579:30;3576:2;;;3627:6;3619;3612:22;3576:2;3655:52;3699:7;3690:6;3679:9;3675:22;3655:52;:::i;:::-;3645:62;;;3339:374;;;;;:::o;3718:257::-;;3829:2;3817:9;3808:7;3804:23;3800:32;3797:2;;;3850:6;3842;3835:22;3797:2;3894:9;3881:23;3913:32;3939:5;3913:32;:::i;3980:261::-;;4102:2;4090:9;4081:7;4077:23;4073:32;4070:2;;;4123:6;4115;4108:22;4070:2;4160:9;4154:16;4179:32;4205:5;4179:32;:::i;4246:344::-;;4368:2;4356:9;4347:7;4343:23;4339:32;4336:2;;;4389:6;4381;4374:22;4336:2;4434:9;4421:23;4467:18;4459:6;4456:30;4453:2;;;4504:6;4496;4489:22;4453:2;4532:52;4576:7;4567:6;4556:9;4552:22;4532:52;:::i;4595:190::-;;4707:2;4695:9;4686:7;4682:23;4678:32;4675:2;;;4728:6;4720;4713:22;4675:2;-1:-1:-1;4756:23:1;;4665:120;-1:-1:-1;4665:120:1:o;4790:412::-;;;4929:2;4917:9;4908:7;4904:23;4900:32;4897:2;;;4950:6;4942;4935:22;4897:2;4991:9;4978:23;4968:33;;5052:2;5041:9;5037:18;5024:32;5079:18;5071:6;5068:30;5065:2;;;5116:6;5108;5101:22;5065:2;5144:52;5188:7;5179:6;5168:9;5164:22;5144:52;:::i;:::-;5134:62;;;4887:315;;;;;:::o;5207:326::-;;;;5353:2;5341:9;5332:7;5328:23;5324:32;5321:2;;;5374:6;5366;5359:22;5321:2;-1:-1:-1;;5402:23:1;;;5472:2;5457:18;;5444:32;;-1:-1:-1;5523:2:1;5508:18;;;5495:32;;5311:222;-1:-1:-1;5311:222:1:o;5538:259::-;;5619:5;5613:12;5646:6;5641:3;5634:19;5662:63;5718:6;5711:4;5706:3;5702:14;5695:4;5688:5;5684:16;5662:63;:::i;:::-;5779:2;5758:15;-1:-1:-1;;5754:29:1;5745:39;;;;5786:4;5741:50;;5589:208;-1:-1:-1;;5589:208:1:o;5802:470::-;;6019:6;6013:13;6035:53;6081:6;6076:3;6069:4;6061:6;6057:17;6035:53;:::i;:::-;6151:13;;6110:16;;;;6173:57;6151:13;6110:16;6207:4;6195:17;;6173:57;:::i;:::-;6246:20;;5989:283;-1:-1:-1;;;;5989:283:1:o;6277:203::-;-1:-1:-1;;;;;6441:32:1;;;;6423:51;;6411:2;6396:18;;6378:102::o;6485:490::-;-1:-1:-1;;;;;6754:15:1;;;6736:34;;6806:15;;6801:2;6786:18;;6779:43;6853:2;6838:18;;6831:34;;;6901:3;6896:2;6881:18;;6874:31;;;6485:490;;6922:47;;6949:19;;6941:6;6922:47;:::i;:::-;6914:55;6688:287;-1:-1:-1;;;;;;6688:287:1:o;6980:284::-;-1:-1:-1;;;;;7166:32:1;;;;7148:51;;7242:14;7235:22;7230:2;7215:18;;7208:50;7136:2;7121:18;;7103:161::o;7269:274::-;-1:-1:-1;;;;;7461:32:1;;;;7443:51;;7525:2;7510:18;;7503:34;7431:2;7416:18;;7398:145::o;7548:417::-;-1:-1:-1;;;;;7797:32:1;;;;7779:51;;7861:2;7846:18;;7839:34;;;;7904:2;7889:18;;7882:34;7947:2;7932:18;;7925:34;7766:3;7751:19;;7733:232::o;7970:187::-;8135:14;;8128:22;8110:41;;8098:2;8083:18;;8065:92::o;8162:221::-;;8311:2;8300:9;8293:21;8331:46;8373:2;8362:9;8358:18;8350:6;8331:46;:::i;8388:407::-;8590:2;8572:21;;;8629:2;8609:18;;;8602:30;8668:34;8663:2;8648:18;;8641:62;-1:-1:-1;;;8734:2:1;8719:18;;8712:41;8785:3;8770:19;;8562:233::o;8800:414::-;9002:2;8984:21;;;9041:2;9021:18;;;9014:30;9080:34;9075:2;9060:18;;9053:62;-1:-1:-1;;;9146:2:1;9131:18;;9124:48;9204:3;9189:19;;8974:240::o;9219:402::-;9421:2;9403:21;;;9460:2;9440:18;;;9433:30;9499:34;9494:2;9479:18;;9472:62;-1:-1:-1;;;9565:2:1;9550:18;;9543:36;9611:3;9596:19;;9393:228::o;9626:352::-;9828:2;9810:21;;;9867:2;9847:18;;;9840:30;9906;9901:2;9886:18;;9879:58;9969:2;9954:18;;9800:178::o;9983:400::-;10185:2;10167:21;;;10224:2;10204:18;;;10197:30;10263:34;10258:2;10243:18;;10236:62;-1:-1:-1;;;10329:2:1;10314:18;;10307:34;10373:3;10358:19;;10157:226::o;10388:349::-;10590:2;10572:21;;;10629:2;10609:18;;;10602:30;10668:27;10663:2;10648:18;;10641:55;10728:2;10713:18;;10562:175::o;10742:408::-;10944:2;10926:21;;;10983:2;10963:18;;;10956:30;11022:34;11017:2;11002:18;;10995:62;-1:-1:-1;;;11088:2:1;11073:18;;11066:42;11140:3;11125:19;;10916:234::o;11155:348::-;11357:2;11339:21;;;11396:2;11376:18;;;11369:30;11435:26;11430:2;11415:18;;11408:54;11494:2;11479:18;;11329:174::o;11508:420::-;11710:2;11692:21;;;11749:2;11729:18;;;11722:30;11788:34;11783:2;11768:18;;11761:62;11859:26;11854:2;11839:18;;11832:54;11918:3;11903:19;;11682:246::o;11933:406::-;12135:2;12117:21;;;12174:2;12154:18;;;12147:30;12213:34;12208:2;12193:18;;12186:62;-1:-1:-1;;;12279:2:1;12264:18;;12257:40;12329:3;12314:19;;12107:232::o;12344:405::-;12546:2;12528:21;;;12585:2;12565:18;;;12558:30;12624:34;12619:2;12604:18;;12597:62;-1:-1:-1;;;12690:2:1;12675:18;;12668:39;12739:3;12724:19;;12518:231::o;12754:410::-;12956:2;12938:21;;;12995:2;12975:18;;;12968:30;13034:34;13029:2;13014:18;;13007:62;-1:-1:-1;;;13100:2:1;13085:18;;13078:44;13154:3;13139:19;;12928:236::o;13169:356::-;13371:2;13353:21;;;13390:18;;;13383:30;13449:34;13444:2;13429:18;;13422:62;13516:2;13501:18;;13343:182::o;13530:413::-;13732:2;13714:21;;;13771:2;13751:18;;;13744:30;13810:34;13805:2;13790:18;;13783:62;-1:-1:-1;;;13876:2:1;13861:18;;13854:47;13933:3;13918:19;;13704:239::o;13948:408::-;14150:2;14132:21;;;14189:2;14169:18;;;14162:30;14228:34;14223:2;14208:18;;14201:62;-1:-1:-1;;;14294:2:1;14279:18;;14272:42;14346:3;14331:19;;14122:234::o;14361:356::-;14563:2;14545:21;;;14582:18;;;14575:30;14641:34;14636:2;14621:18;;14614:62;14708:2;14693:18;;14535:182::o;14722:356::-;14924:2;14906:21;;;14943:18;;;14936:30;15002:34;14997:2;14982:18;;14975:62;15069:2;15054:18;;14896:182::o;15083:405::-;15285:2;15267:21;;;15324:2;15304:18;;;15297:30;15363:34;15358:2;15343:18;;15336:62;-1:-1:-1;;;15429:2:1;15414:18;;15407:39;15478:3;15463:19;;15257:231::o;15493:411::-;15695:2;15677:21;;;15734:2;15714:18;;;15707:30;15773:34;15768:2;15753:18;;15746:62;-1:-1:-1;;;15839:2:1;15824:18;;15817:45;15894:3;15879:19;;15667:237::o;15909:406::-;16111:2;16093:21;;;16150:2;16130:18;;;16123:30;16189:34;16184:2;16169:18;;16162:62;-1:-1:-1;;;16255:2:1;16240:18;;16233:40;16305:3;16290:19;;16083:232::o;16320:401::-;16522:2;16504:21;;;16561:2;16541:18;;;16534:30;16600:34;16595:2;16580:18;;16573:62;-1:-1:-1;;;16666:2:1;16651:18;;16644:35;16711:3;16696:19;;16494:227::o;16726:397::-;16928:2;16910:21;;;16967:2;16947:18;;;16940:30;17006:34;17001:2;16986:18;;16979:62;-1:-1:-1;;;17072:2:1;17057:18;;17050:31;17113:3;17098:19;;16900:223::o;17128:355::-;17330:2;17312:21;;;17369:2;17349:18;;;17342:30;17408:33;17403:2;17388:18;;17381:61;17474:2;17459:18;;17302:181::o;17488:413::-;17690:2;17672:21;;;17729:2;17709:18;;;17702:30;17768:34;17763:2;17748:18;;17741:62;-1:-1:-1;;;17834:2:1;17819:18;;17812:47;17891:3;17876:19;;17662:239::o;17906:408::-;18108:2;18090:21;;;18147:2;18127:18;;;18120:30;18186:34;18181:2;18166:18;;18159:62;-1:-1:-1;;;18252:2:1;18237:18;;18230:42;18304:3;18289:19;;18080:234::o;18319:177::-;18465:25;;;18453:2;18438:18;;18420:76::o;18501:292::-;;18678:6;18667:9;18660:25;18721:2;18716;18705:9;18701:18;18694:30;18741:46;18783:2;18772:9;18768:18;18760:6;18741:46;:::i;18798:128::-;;18869:1;18865:6;18862:1;18859:13;18856:2;;;18875:18;;:::i;:::-;-1:-1:-1;18911:9:1;;18846:80::o;18931:120::-;;18997:1;18987:2;;19002:18;;:::i;:::-;-1:-1:-1;19036:9:1;;18977:74::o;19056:125::-;;19124:1;19121;19118:8;19115:2;;;19129:18;;:::i;:::-;-1:-1:-1;19166:9:1;;19105:76::o;19186:258::-;19258:1;19268:113;19282:6;19279:1;19276:13;19268:113;;;19358:11;;;19352:18;19339:11;;;19332:39;19304:2;19297:10;19268:113;;;19399:6;19396:1;19393:13;19390:2;;;-1:-1:-1;;19434:1:1;19416:16;;19409:27;19239:205::o;19449:380::-;19534:1;19524:12;;19581:1;19571:12;;;19592:2;;19646:4;19638:6;19634:17;19624:27;;19592:2;19699;19691:6;19688:14;19668:18;19665:38;19662:2;;;19745:10;19740:3;19736:20;19733:1;19726:31;19780:4;19777:1;19770:15;19808:4;19805:1;19798:15;19662:2;;19504:325;;;:::o;19834:135::-;;-1:-1:-1;;19894:17:1;;19891:2;;;19914:18;;:::i;:::-;-1:-1:-1;19961:1:1;19950:13;;19881:88::o;19974:112::-;;20032:1;20022:2;;20037:18;;:::i;:::-;-1:-1:-1;20071:9:1;;20012:74::o;20091:127::-;20152:10;20147:3;20143:20;20140:1;20133:31;20183:4;20180:1;20173:15;20207:4;20204:1;20197:15;20223:127;20284:10;20279:3;20275:20;20272:1;20265:31;20315:4;20312:1;20305:15;20339:4;20336:1;20329:15;20355:127;20416:10;20411:3;20407:20;20404:1;20397:31;20447:4;20444:1;20437:15;20471:4;20468:1;20461:15;20487:133;-1:-1:-1;;;;;;20563:32:1;;20553:43;;20543:2;;20610:1;20607;20600:12

Swarm Source

ipfs://c54210e0e7f154464e9e8e5da4fc0629716b7ae48614c753568bcad36801a382
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.