ETH Price: $2,472.01 (+7.04%)

Neo Tokyo Part 4 Land Deeds (NTLD)
 

Overview

TokenID

3422

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

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:
NTS2LandDeploy

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-24
*/

/*
* Generated by @Thrasher66099
* Email [email protected] for your NFT launch needs
*/

pragma solidity ^0.8.0;

interface IByteContract {
    function burn(address _from, uint256 _amount) external;
}

/**
 * @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);
}

/**
 * @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;
}



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

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

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


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

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


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

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


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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_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 {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}



/**
 * @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);
}


/**
 * @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);
}


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    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

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




/**
 * @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;
    }
}


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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        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 {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

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



/**
 * @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);
}


/**
 * @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();
    }
}

contract NTS2LandDeploy is ERC721Enumerable, ReentrancyGuard, Ownable {

    bool landMintActive;
    address landMint;
    address identityContract;
    address bytesContract;
    uint256 boughtLandCount;
    uint256 landCost = 500 ether;

    bytes32[] _rootHash;


    // Mapping for identity tokenIds that have previously claimed
    mapping(uint256 => uint256) private _identityClaims;

    // Mapping to look up what identity minted a specific token
    mapping(uint256 => uint256) private _tokenMintedByIdentity;

    string[] private location = [
        "Outer Forest",
        "Outer Camp Grounds",
        "Chipland Spring Apartments",
        "Middlish Ooterberg",
        "Fritata",
        "Naracuga Suburbs",
        "Upper Ooterberg",
        "Pacifc Byte Hills",
        "Ocean Edge Park",
        "Ocean Edge Beachfront",
        "Omnipresent"
    ];

    function getLocation(uint256 tokenId) public view returns (string memory)
    {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
        string memory output;

        NTS2LandDeploy dataContract = NTS2LandDeploy(landMint);
        output = dataContract.getLocation(tokenId);

        return output;
    }

    function getTokenClaimedByIdentityTokenId(uint256 identityTokenId) public view returns (uint256) {
        return _identityClaims[identityTokenId];
    }

    function getClaimantIdentityIdByTokenId(uint256 tokenId) public view returns (uint256) {
        return _tokenMintedByIdentity[tokenId];
    }

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

        NTS2LandDeploy dataContract = NTS2LandDeploy(landMint);
        output = dataContract.tokenURI(tokenId);

        return output;
    }

    function landClaim(uint256 identityTokenId, uint256 spotOnLeaderboard, uint256 spotInWhitelist, bytes32[] memory proof) public nonReentrant {
        require(landMintActive, "Minting is not currently active");
        require(whitelistValidated(identityTokenId, spotOnLeaderboard, spotInWhitelist, proof), "That identity cannot claim that land");
        require(identityValidated(identityTokenId), "You are not the owner of that identity");

        _safeMint(_msgSender(), spotOnLeaderboard);

        //Set the _identityClaims value to spotOnLeaderboard for this identity so the identity cannot mint again
        _identityClaims[identityTokenId] = spotOnLeaderboard;

        //Set the identity that minted this token for reverse lookup
        _tokenMintedByIdentity[spotOnLeaderboard] = identityTokenId;
    }

    function buyLand() public nonReentrant
    {
        require(address(bytesContract) != address(0), "Land cannot be bought yet");
        IByteContract iBytes = IByteContract(bytesContract);
        iBytes.burn(_msgSender(), landCost);
        _safeMint(_msgSender(), boughtLandCount + 4501);
        boughtLandCount++;
    }

    //Used only in cases where the identity owner does not or cannot claim an item
    function emergencyClaim(uint256 identityId, uint256 tokenId) public onlyOwner {
        require(tokenId > 0 && tokenId < 4501, "Token ID invalid");
        require(!_exists(tokenId), "That token already exists");
        require(_identityClaims[identityId] == 0, "That identity has already claimed");

        _safeMint(owner(), tokenId);
        _identityClaims[identityId] = tokenId;
    }

    function identityValidated(uint256 identityId) internal view returns (bool) {
        require(_identityClaims[identityId] == 0, "This identity has minted");
        ERC721Enumerable identityEnumerable = ERC721Enumerable(identityContract);
        return(identityEnumerable.ownerOf(identityId) == _msgSender());
    }

    function whitelistValidated(uint256 identityTokenId, uint256 leaderboardSpot,uint256 index, bytes32[] memory proof) internal view returns (bool) {

        // Compute the merkle root
        bytes32 node = keccak256(abi.encodePacked(index, identityTokenId, leaderboardSpot));
        uint256 path = index;
        for (uint16 i = 0; i < proof.length; i++) {
            if ((path & 0x01) == 1) {
                node = keccak256(abi.encodePacked(proof[i], node));
            } else {
                node = keccak256(abi.encodePacked(node, proof[i]));
            }
            path /= 2;
        }

        // Check the merkle proof against the root hash array
        for(uint i = 0; i < _rootHash.length; i++)
        {
            if (node == _rootHash[i])
            {
                return true;
            }
        }

        return false;
    }

    function setLandMintActive() public onlyOwner {
        landMintActive = !landMintActive;
    }

    function setLandCost(uint256 _cost) public onlyOwner {
        landCost = _cost;
    }

    function setContract(address contractAddress) public onlyOwner {
        landMint = contractAddress;
    }

    function setIdentityContract(address contractAddress) public onlyOwner {
        identityContract = contractAddress;
    }

    function setBytesAddress(address contractAddress) public onlyOwner {
        bytesContract = contractAddress;
    }
    
    
    function toString(uint256 value) internal pure returns (string memory) {
    // Inspired by OraclizeAPI's implementation - MIT license
    // 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);
    }
    
    constructor() ERC721("Neo Tokyo Part 4 Land Deeds", "NTLD") Ownable() {
        _rootHash = new bytes32[](3);
        _rootHash[0] = 0x9350561bc62b4dc91ac7cec52fbb737be1282e8fe89c01775501ab718fcc6ad1;
        _rootHash[1] = 0xfe6b43fa814be1abe290335212f6f701b4f0754178beaeae8261abc0ccad3cfc;
        _rootHash[2] = 0xd544ea3841a26c32ba81f8e467be825f5378bc7fd7ebb16501d5de0905a040de;

        bytesContract = 0x7d647b1A0dcD5525e9C6B3D14BE58f27674f8c95;
        identityContract = 0x698FbAACA64944376e2CDC4CAD86eaa91362cF54;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLand","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"identityId","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"emergencyClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getClaimantIdentityIdByTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getLocation","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"identityTokenId","type":"uint256"}],"name":"getTokenClaimedByIdentityTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"identityTokenId","type":"uint256"},{"internalType":"uint256","name":"spotOnLeaderboard","type":"uint256"},{"internalType":"uint256","name":"spotInWhitelist","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"landClaim","outputs":[],"stateMutability":"nonpayable","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":"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":"address","name":"contractAddress","type":"address"}],"name":"setBytesAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"setContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"setIdentityContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setLandCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setLandMintActive","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"}]

681b1ae4d6e2ef5000006010908155600c6101e09081526b13dd5d195c88119bdc995cdd60a21b6102005260809081526012610220818152714f757465722043616d702047726f756e647360701b6102405260a052601a6102609081527f436869706c616e6420537072696e672041706172746d656e74730000000000006102805260c0526102a0908152714d6964646c697368204f6f7465726265726760701b6102c05260e05260076102e0908152664672697461746160c81b61030052610100526103209182526f4e61726163756761205375627572627360801b6103405261012091909152600f6103608181526e5570706572204f6f7465726265726760881b610380526101405260116103a09081527050616369666320427974652048696c6c7360781b6103c052610160526103e09081526e4f6365616e2045646765205061726b60881b610400526101805260156104209081527f4f6365616e204564676520426561636866726f6e740000000000000000000000610440526101a0526104a0604052600b6104608181526a13db5b9a5c1c995cd95b9d60aa1b610480526101c052620001b491601491620003f9565b50348015620001c257600080fd5b50604080518082018252601b81527f4e656f20546f6b796f20506172742034204c616e6420446565647300000000006020808301918252835180850190945260048452631395131160e21b90840152815191929162000224916000916200045d565b5080516200023a9060019060208401906200045d565b50506001600a55506200024d33620003a7565b604080516003808252608082019092529060208201606080368337505081516200027f926011925060200190620004e8565b507f9350561bc62b4dc91ac7cec52fbb737be1282e8fe89c01775501ab718fcc6ad160001b6011600081548110620002bb57620002bb620005dc565b90600052602060002001819055507ffe6b43fa814be1abe290335212f6f701b4f0754178beaeae8261abc0ccad3cfc60001b6011600181548110620003045762000304620005dc565b90600052602060002001819055507fd544ea3841a26c32ba81f8e467be825f5378bc7fd7ebb16501d5de0905a040de60001b60116002815481106200034d576200034d620005dc565b600091825260209091200155600e80546001600160a01b0319908116737d647b1a0dcd5525e9c6b3d14be58f27674f8c9517909155600d805490911673698fbaaca64944376e2cdc4cad86eaa91362cf54179055620005f2565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280548282559060005260206000209081019282156200044b579160200282015b828111156200044b57825180516200043a9184916020909101906200045d565b50916020019190600101906200041a565b506200045992915062000525565b5090565b8280546200046b906200059f565b90600052602060002090601f0160209004810192826200048f5760008555620004da565b82601f10620004aa57805160ff1916838001178555620004da565b82800160010185558215620004da579182015b82811115620004da578251825591602001919060010190620004bd565b506200045992915062000546565b828054828255906000526020600020908101928215620004da5791602002820182811115620004da578251825591602001919060010190620004bd565b80821115620004595760006200053c82826200055d565b5060010162000525565b5b8082111562000459576000815560010162000547565b5080546200056b906200059f565b6000825580601f106200057c575050565b601f0160209004906000526020600020908101906200059c919062000546565b50565b600181811c90821680620005b457607f821691505b60208210811415620005d657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b61244d80620006026000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80636352211e116101045780638da5cb5b116100a2578063c87b56dd11610071578063c87b56dd146103e9578063e6d5864b146103fc578063e985e9c51461040f578063f2fde38b1461044b57600080fd5b80638da5cb5b146103aa57806395d89b41146103bb578063a22cb465146103c3578063b88d4fde146103d657600080fd5b8063715018a6116100de578063715018a61461036957806375f890ab146103715780637a25a677146103845780637f7b13931461039757600080fd5b80636352211e14610323578063672c7ae71461033657806370a082311461035657600080fd5b806323b872dd1161017c578063469327dd1161014b578063469327dd146102ed5780634f6ccce7146102f557806356e4b0aa146103085780635949dc101461031b57600080fd5b806323b872dd146102945780632f745c59146102a757806333724c25146102ba57806342842e0e146102da57600080fd5b8063095ea7b3116101b8578063095ea7b314610247578063140c08a51461025c57806316beafb61461026f57806318160ddd1461028257600080fd5b806301ffc9a7146101df57806306fdde0314610207578063081812fc1461021c575b600080fd5b6101f26101ed366004611eed565b61045e565b60405190151581526020015b60405180910390f35b61020f610489565b6040516101fe919061210c565b61022f61022a366004611f9e565b61051b565b6040516001600160a01b0390911681526020016101fe565b61025a610255366004611ec1565b6105a8565b005b61025a61026a366004611d24565b6106be565b61025a61027d366004611fb7565b61070a565b6008545b6040519081526020016101fe565b61025a6102a2366004611d9e565b61086d565b6102866102b5366004611ec1565b61089e565b6102866102c8366004611f9e565b60009081526013602052604090205490565b61025a6102e8366004611d9e565b610934565b61025a61094f565b610286610303366004611f9e565b610aae565b61025a610316366004611fd9565b610b41565b61025a610cea565b61022f610331366004611f9e565b610d35565b610286610344366004611f9e565b60009081526012602052604090205490565b610286610364366004611d24565b610dac565b61025a610e33565b61025a61037f366004611d24565b610e69565b61025a610392366004611f9e565b610eb5565b61020f6103a5366004611f9e565b610ee4565b600b546001600160a01b031661022f565b61020f610f97565b61025a6103d1366004611e8e565b610fa6565b61025a6103e4366004611ddf565b61106b565b61020f6103f7366004611f9e565b6110a3565b61025a61040a366004611d24565b6110fe565b6101f261041d366004611d65565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61025a610459366004611d24565b61114a565b60006001600160e01b0319821663780e9d6360e01b14806104835750610483826111e5565b92915050565b6060600080546104989061231c565b80601f01602080910402602001604051908101604052809291908181526020018280546104c49061231c565b80156105115780601f106104e657610100808354040283529160200191610511565b820191906000526020600020905b8154815290600101906020018083116104f457829003601f168201915b5050505050905090565b600061052682611235565b61058c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006105b382610d35565b9050806001600160a01b0316836001600160a01b031614156106215760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610583565b336001600160a01b038216148061063d575061063d813361041d565b6106af5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610583565b6106b98383611252565b505050565b600b546001600160a01b031633146106e85760405162461bcd60e51b815260040161058390612171565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b600b546001600160a01b031633146107345760405162461bcd60e51b815260040161058390612171565b600081118015610745575061119581105b6107845760405162461bcd60e51b815260206004820152601060248201526f151bdad95b881251081a5b9d985b1a5960821b6044820152606401610583565b61078d81611235565b156107da5760405162461bcd60e51b815260206004820152601960248201527f5468617420746f6b656e20616c726561647920657869737473000000000000006044820152606401610583565b600082815260126020526040902054156108405760405162461bcd60e51b815260206004820152602160248201527f54686174206964656e746974792068617320616c726561647920636c61696d656044820152601960fa1b6064820152608401610583565b61085b610855600b546001600160a01b031690565b826112c0565b60009182526012602052604090912055565b61087733826112de565b6108935760405162461bcd60e51b8152600401610583906121f5565b6106b98383836113c4565b60006108a983610dac565b821061090b5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610583565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6106b98383836040518060200160405280600081525061106b565b6002600a5414156109a25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610583565b6002600a55600e546001600160a01b03166109ff5760405162461bcd60e51b815260206004820152601960248201527f4c616e642063616e6e6f7420626520626f7567687420796574000000000000006044820152606401610583565b600e546001600160a01b031680639dc29fac336010546040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015610a5b57600080fd5b505af1158015610a6f573d6000803e3d6000fd5b50505050610a91610a7d3390565b600f54610a8c9061119561229f565b6112c0565b600f8054906000610aa183612379565b90915550506001600a5550565b6000610ab960085490565b8210610b1c5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610583565b60088281548110610b2f57610b2f6123c0565b90600052602060002001549050919050565b6002600a541415610b945760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610583565b6002600a55600b54600160a01b900460ff16610bf25760405162461bcd60e51b815260206004820152601f60248201527f4d696e74696e67206973206e6f742063757272656e746c7920616374697665006044820152606401610583565b610bfe8484848461156f565b610c565760405162461bcd60e51b8152602060048201526024808201527f54686174206964656e746974792063616e6e6f7420636c61696d2074686174206044820152631b185b9960e21b6064820152608401610583565b610c5f846116e5565b610cba5760405162461bcd60e51b815260206004820152602660248201527f596f7520617265206e6f7420746865206f776e6572206f662074686174206964604482015265656e7469747960d01b6064820152608401610583565b610cc433846112c0565b505060008281526012602090815260408083208490559282526013905220556001600a55565b600b546001600160a01b03163314610d145760405162461bcd60e51b815260040161058390612171565b600b805460ff60a01b198116600160a01b9182900460ff1615909102179055565b6000818152600260205260408120546001600160a01b0316806104835760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610583565b60006001600160a01b038216610e175760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610583565b506001600160a01b031660009081526003602052604090205490565b600b546001600160a01b03163314610e5d5760405162461bcd60e51b815260040161058390612171565b610e6760006117db565b565b600b546001600160a01b03163314610e935760405162461bcd60e51b815260040161058390612171565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b600b546001600160a01b03163314610edf5760405162461bcd60e51b815260040161058390612171565b601055565b6060610eef82611235565b610f0b5760405162461bcd60e51b8152600401610583906121a6565b600c54604051637f7b139360e01b8152600481018490526060916001600160a01b0316908190637f7b1393906024015b60006040518083038186803b158015610f5357600080fd5b505afa158015610f67573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f8f9190810190611f27565b949350505050565b6060600180546104989061231c565b6001600160a01b038216331415610fff5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610583565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61107533836112de565b6110915760405162461bcd60e51b8152600401610583906121f5565b61109d8484848461182d565b50505050565b60606110ae82611235565b6110ca5760405162461bcd60e51b8152600401610583906121a6565b600c5460405163c87b56dd60e01b8152600481018490526060916001600160a01b031690819063c87b56dd90602401610f3b565b600b546001600160a01b031633146111285760405162461bcd60e51b815260040161058390612171565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b600b546001600160a01b031633146111745760405162461bcd60e51b815260040161058390612171565b6001600160a01b0381166111d95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610583565b6111e2816117db565b50565b60006001600160e01b031982166380ac58cd60e01b148061121657506001600160e01b03198216635b5e139f60e01b145b8061048357506301ffc9a760e01b6001600160e01b0319831614610483565b6000908152600260205260409020546001600160a01b0316151590565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061128782610d35565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6112da828260405180602001604052806000815250611860565b5050565b60006112e982611235565b61134a5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610583565b600061135583610d35565b9050806001600160a01b0316846001600160a01b031614806113905750836001600160a01b03166113858461051b565b6001600160a01b0316145b80610f8f57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff16610f8f565b826001600160a01b03166113d782610d35565b6001600160a01b03161461143f5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610583565b6001600160a01b0382166114a15760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610583565b6114ac838383611893565b6114b7600082611252565b6001600160a01b03831660009081526003602052604081208054600192906114e09084906122d9565b90915550506001600160a01b038216600090815260036020526040812080546001929061150e90849061229f565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6040805160208082018590528183018790526060808301879052835180840390910181526080909201909252805191012060009083825b84518161ffff16101561168657816001166001141561161557848161ffff16815181106115d5576115d56123c0565b6020026020010151836040516020016115f8929190918252602082015260400190565b604051602081830303815290604052805190602001209250611667565b82858261ffff168151811061162c5761162c6123c0565b602002602001015160405160200161164e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b6116726002836122b7565b91508061167e81612357565b9150506115a6565b5060005b6011548110156116d757601181815481106116a7576116a76123c0565b90600052602060002001548314156116c55760019350505050610f8f565b806116cf81612379565b91505061168a565b506000979650505050505050565b600081815260126020526040812054156117415760405162461bcd60e51b815260206004820152601860248201527f54686973206964656e7469747920686173206d696e74656400000000000000006044820152606401610583565b600d546001600160a01b0316336040516331a9108f60e11b8152600481018590526001600160a01b0391821691831690636352211e9060240160206040518083038186803b15801561179257600080fd5b505afa1580156117a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ca9190611d48565b6001600160a01b0316149392505050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6118388484846113c4565b6118448484848461194b565b61109d5760405162461bcd60e51b81526004016105839061211f565b61186a8383611a55565b611877600084848461194b565b6106b95760405162461bcd60e51b81526004016105839061211f565b6001600160a01b0383166118ee576118e981600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611911565b816001600160a01b0316836001600160a01b031614611911576119118382611b94565b6001600160a01b038216611928576106b981611c31565b826001600160a01b0316826001600160a01b0316146106b9576106b98282611ce0565b60006001600160a01b0384163b15611a4d57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061198f9033908990889088906004016120cf565b602060405180830381600087803b1580156119a957600080fd5b505af19250505080156119d9575060408051601f3d908101601f191682019092526119d691810190611f0a565b60015b611a33573d808015611a07576040519150601f19603f3d011682016040523d82523d6000602084013e611a0c565b606091505b508051611a2b5760405162461bcd60e51b81526004016105839061211f565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610f8f565b506001610f8f565b6001600160a01b038216611aab5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610583565b611ab481611235565b15611b015760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610583565b611b0d60008383611893565b6001600160a01b0382166000908152600360205260408120805460019290611b3690849061229f565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001611ba184610dac565b611bab91906122d9565b600083815260076020526040902054909150808214611bfe576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611c43906001906122d9565b60008381526009602052604081205460088054939450909284908110611c6b57611c6b6123c0565b906000526020600020015490508060088381548110611c8c57611c8c6123c0565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611cc457611cc46123aa565b6001900381819060005260206000200160009055905550505050565b6000611ceb83610dac565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b600060208284031215611d3657600080fd5b8135611d41816123ec565b9392505050565b600060208284031215611d5a57600080fd5b8151611d41816123ec565b60008060408385031215611d7857600080fd5b8235611d83816123ec565b91506020830135611d93816123ec565b809150509250929050565b600080600060608486031215611db357600080fd5b8335611dbe816123ec565b92506020840135611dce816123ec565b929592945050506040919091013590565b60008060008060808587031215611df557600080fd5b8435611e00816123ec565b93506020850135611e10816123ec565b925060408501359150606085013567ffffffffffffffff811115611e3357600080fd5b8501601f81018713611e4457600080fd5b8035611e57611e5282612277565b612246565b818152886020838501011115611e6c57600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060408385031215611ea157600080fd5b8235611eac816123ec565b915060208301358015158114611d9357600080fd5b60008060408385031215611ed457600080fd5b8235611edf816123ec565b946020939093013593505050565b600060208284031215611eff57600080fd5b8135611d4181612401565b600060208284031215611f1c57600080fd5b8151611d4181612401565b600060208284031215611f3957600080fd5b815167ffffffffffffffff811115611f5057600080fd5b8201601f81018413611f6157600080fd5b8051611f6f611e5282612277565b818152856020838501011115611f8457600080fd5b611f958260208301602086016122f0565b95945050505050565b600060208284031215611fb057600080fd5b5035919050565b60008060408385031215611fca57600080fd5b50508035926020909101359150565b60008060008060808587031215611fef57600080fd5b84359350602080860135935060408601359250606086013567ffffffffffffffff8082111561201d57600080fd5b818801915088601f83011261203157600080fd5b813581811115612043576120436123d6565b8060051b9150612054848301612246565b8181528481019084860184860187018d101561206f57600080fd5b600095505b83861015612092578035835260019590950194918601918601612074565b50989b979a50959850505050505050565b600081518084526120bb8160208601602086016122f0565b601f01601f19169290920160200192915050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612102908301846120a3565b9695505050505050565b602081526000611d4160208301846120a3565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561226f5761226f6123d6565b604052919050565b600067ffffffffffffffff821115612291576122916123d6565b50601f01601f191660200190565b600082198211156122b2576122b2612394565b500190565b6000826122d457634e487b7160e01b600052601260045260246000fd5b500490565b6000828210156122eb576122eb612394565b500390565b60005b8381101561230b5781810151838201526020016122f3565b8381111561109d5750506000910152565b600181811c9082168061233057607f821691505b6020821081141561235157634e487b7160e01b600052602260045260246000fd5b50919050565b600061ffff8083168181141561236f5761236f612394565b6001019392505050565b600060001982141561238d5761238d612394565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146111e257600080fd5b6001600160e01b0319811681146111e257600080fdfea2646970667358221220a60f0b99da9de7a2b5c98a09c970bb0309d231a05bb8ca3609abfdbadf66bbf964736f6c63430008060033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101da5760003560e01c80636352211e116101045780638da5cb5b116100a2578063c87b56dd11610071578063c87b56dd146103e9578063e6d5864b146103fc578063e985e9c51461040f578063f2fde38b1461044b57600080fd5b80638da5cb5b146103aa57806395d89b41146103bb578063a22cb465146103c3578063b88d4fde146103d657600080fd5b8063715018a6116100de578063715018a61461036957806375f890ab146103715780637a25a677146103845780637f7b13931461039757600080fd5b80636352211e14610323578063672c7ae71461033657806370a082311461035657600080fd5b806323b872dd1161017c578063469327dd1161014b578063469327dd146102ed5780634f6ccce7146102f557806356e4b0aa146103085780635949dc101461031b57600080fd5b806323b872dd146102945780632f745c59146102a757806333724c25146102ba57806342842e0e146102da57600080fd5b8063095ea7b3116101b8578063095ea7b314610247578063140c08a51461025c57806316beafb61461026f57806318160ddd1461028257600080fd5b806301ffc9a7146101df57806306fdde0314610207578063081812fc1461021c575b600080fd5b6101f26101ed366004611eed565b61045e565b60405190151581526020015b60405180910390f35b61020f610489565b6040516101fe919061210c565b61022f61022a366004611f9e565b61051b565b6040516001600160a01b0390911681526020016101fe565b61025a610255366004611ec1565b6105a8565b005b61025a61026a366004611d24565b6106be565b61025a61027d366004611fb7565b61070a565b6008545b6040519081526020016101fe565b61025a6102a2366004611d9e565b61086d565b6102866102b5366004611ec1565b61089e565b6102866102c8366004611f9e565b60009081526013602052604090205490565b61025a6102e8366004611d9e565b610934565b61025a61094f565b610286610303366004611f9e565b610aae565b61025a610316366004611fd9565b610b41565b61025a610cea565b61022f610331366004611f9e565b610d35565b610286610344366004611f9e565b60009081526012602052604090205490565b610286610364366004611d24565b610dac565b61025a610e33565b61025a61037f366004611d24565b610e69565b61025a610392366004611f9e565b610eb5565b61020f6103a5366004611f9e565b610ee4565b600b546001600160a01b031661022f565b61020f610f97565b61025a6103d1366004611e8e565b610fa6565b61025a6103e4366004611ddf565b61106b565b61020f6103f7366004611f9e565b6110a3565b61025a61040a366004611d24565b6110fe565b6101f261041d366004611d65565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61025a610459366004611d24565b61114a565b60006001600160e01b0319821663780e9d6360e01b14806104835750610483826111e5565b92915050565b6060600080546104989061231c565b80601f01602080910402602001604051908101604052809291908181526020018280546104c49061231c565b80156105115780601f106104e657610100808354040283529160200191610511565b820191906000526020600020905b8154815290600101906020018083116104f457829003601f168201915b5050505050905090565b600061052682611235565b61058c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006105b382610d35565b9050806001600160a01b0316836001600160a01b031614156106215760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610583565b336001600160a01b038216148061063d575061063d813361041d565b6106af5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610583565b6106b98383611252565b505050565b600b546001600160a01b031633146106e85760405162461bcd60e51b815260040161058390612171565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b600b546001600160a01b031633146107345760405162461bcd60e51b815260040161058390612171565b600081118015610745575061119581105b6107845760405162461bcd60e51b815260206004820152601060248201526f151bdad95b881251081a5b9d985b1a5960821b6044820152606401610583565b61078d81611235565b156107da5760405162461bcd60e51b815260206004820152601960248201527f5468617420746f6b656e20616c726561647920657869737473000000000000006044820152606401610583565b600082815260126020526040902054156108405760405162461bcd60e51b815260206004820152602160248201527f54686174206964656e746974792068617320616c726561647920636c61696d656044820152601960fa1b6064820152608401610583565b61085b610855600b546001600160a01b031690565b826112c0565b60009182526012602052604090912055565b61087733826112de565b6108935760405162461bcd60e51b8152600401610583906121f5565b6106b98383836113c4565b60006108a983610dac565b821061090b5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610583565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6106b98383836040518060200160405280600081525061106b565b6002600a5414156109a25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610583565b6002600a55600e546001600160a01b03166109ff5760405162461bcd60e51b815260206004820152601960248201527f4c616e642063616e6e6f7420626520626f7567687420796574000000000000006044820152606401610583565b600e546001600160a01b031680639dc29fac336010546040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015610a5b57600080fd5b505af1158015610a6f573d6000803e3d6000fd5b50505050610a91610a7d3390565b600f54610a8c9061119561229f565b6112c0565b600f8054906000610aa183612379565b90915550506001600a5550565b6000610ab960085490565b8210610b1c5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610583565b60088281548110610b2f57610b2f6123c0565b90600052602060002001549050919050565b6002600a541415610b945760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610583565b6002600a55600b54600160a01b900460ff16610bf25760405162461bcd60e51b815260206004820152601f60248201527f4d696e74696e67206973206e6f742063757272656e746c7920616374697665006044820152606401610583565b610bfe8484848461156f565b610c565760405162461bcd60e51b8152602060048201526024808201527f54686174206964656e746974792063616e6e6f7420636c61696d2074686174206044820152631b185b9960e21b6064820152608401610583565b610c5f846116e5565b610cba5760405162461bcd60e51b815260206004820152602660248201527f596f7520617265206e6f7420746865206f776e6572206f662074686174206964604482015265656e7469747960d01b6064820152608401610583565b610cc433846112c0565b505060008281526012602090815260408083208490559282526013905220556001600a55565b600b546001600160a01b03163314610d145760405162461bcd60e51b815260040161058390612171565b600b805460ff60a01b198116600160a01b9182900460ff1615909102179055565b6000818152600260205260408120546001600160a01b0316806104835760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610583565b60006001600160a01b038216610e175760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610583565b506001600160a01b031660009081526003602052604090205490565b600b546001600160a01b03163314610e5d5760405162461bcd60e51b815260040161058390612171565b610e6760006117db565b565b600b546001600160a01b03163314610e935760405162461bcd60e51b815260040161058390612171565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b600b546001600160a01b03163314610edf5760405162461bcd60e51b815260040161058390612171565b601055565b6060610eef82611235565b610f0b5760405162461bcd60e51b8152600401610583906121a6565b600c54604051637f7b139360e01b8152600481018490526060916001600160a01b0316908190637f7b1393906024015b60006040518083038186803b158015610f5357600080fd5b505afa158015610f67573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f8f9190810190611f27565b949350505050565b6060600180546104989061231c565b6001600160a01b038216331415610fff5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610583565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61107533836112de565b6110915760405162461bcd60e51b8152600401610583906121f5565b61109d8484848461182d565b50505050565b60606110ae82611235565b6110ca5760405162461bcd60e51b8152600401610583906121a6565b600c5460405163c87b56dd60e01b8152600481018490526060916001600160a01b031690819063c87b56dd90602401610f3b565b600b546001600160a01b031633146111285760405162461bcd60e51b815260040161058390612171565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b600b546001600160a01b031633146111745760405162461bcd60e51b815260040161058390612171565b6001600160a01b0381166111d95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610583565b6111e2816117db565b50565b60006001600160e01b031982166380ac58cd60e01b148061121657506001600160e01b03198216635b5e139f60e01b145b8061048357506301ffc9a760e01b6001600160e01b0319831614610483565b6000908152600260205260409020546001600160a01b0316151590565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061128782610d35565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6112da828260405180602001604052806000815250611860565b5050565b60006112e982611235565b61134a5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610583565b600061135583610d35565b9050806001600160a01b0316846001600160a01b031614806113905750836001600160a01b03166113858461051b565b6001600160a01b0316145b80610f8f57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff16610f8f565b826001600160a01b03166113d782610d35565b6001600160a01b03161461143f5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610583565b6001600160a01b0382166114a15760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610583565b6114ac838383611893565b6114b7600082611252565b6001600160a01b03831660009081526003602052604081208054600192906114e09084906122d9565b90915550506001600160a01b038216600090815260036020526040812080546001929061150e90849061229f565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6040805160208082018590528183018790526060808301879052835180840390910181526080909201909252805191012060009083825b84518161ffff16101561168657816001166001141561161557848161ffff16815181106115d5576115d56123c0565b6020026020010151836040516020016115f8929190918252602082015260400190565b604051602081830303815290604052805190602001209250611667565b82858261ffff168151811061162c5761162c6123c0565b602002602001015160405160200161164e929190918252602082015260400190565b6040516020818303038152906040528051906020012092505b6116726002836122b7565b91508061167e81612357565b9150506115a6565b5060005b6011548110156116d757601181815481106116a7576116a76123c0565b90600052602060002001548314156116c55760019350505050610f8f565b806116cf81612379565b91505061168a565b506000979650505050505050565b600081815260126020526040812054156117415760405162461bcd60e51b815260206004820152601860248201527f54686973206964656e7469747920686173206d696e74656400000000000000006044820152606401610583565b600d546001600160a01b0316336040516331a9108f60e11b8152600481018590526001600160a01b0391821691831690636352211e9060240160206040518083038186803b15801561179257600080fd5b505afa1580156117a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ca9190611d48565b6001600160a01b0316149392505050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6118388484846113c4565b6118448484848461194b565b61109d5760405162461bcd60e51b81526004016105839061211f565b61186a8383611a55565b611877600084848461194b565b6106b95760405162461bcd60e51b81526004016105839061211f565b6001600160a01b0383166118ee576118e981600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611911565b816001600160a01b0316836001600160a01b031614611911576119118382611b94565b6001600160a01b038216611928576106b981611c31565b826001600160a01b0316826001600160a01b0316146106b9576106b98282611ce0565b60006001600160a01b0384163b15611a4d57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061198f9033908990889088906004016120cf565b602060405180830381600087803b1580156119a957600080fd5b505af19250505080156119d9575060408051601f3d908101601f191682019092526119d691810190611f0a565b60015b611a33573d808015611a07576040519150601f19603f3d011682016040523d82523d6000602084013e611a0c565b606091505b508051611a2b5760405162461bcd60e51b81526004016105839061211f565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610f8f565b506001610f8f565b6001600160a01b038216611aab5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610583565b611ab481611235565b15611b015760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610583565b611b0d60008383611893565b6001600160a01b0382166000908152600360205260408120805460019290611b3690849061229f565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001611ba184610dac565b611bab91906122d9565b600083815260076020526040902054909150808214611bfe576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611c43906001906122d9565b60008381526009602052604081205460088054939450909284908110611c6b57611c6b6123c0565b906000526020600020015490508060088381548110611c8c57611c8c6123c0565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611cc457611cc46123aa565b6001900381819060005260206000200160009055905550505050565b6000611ceb83610dac565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b600060208284031215611d3657600080fd5b8135611d41816123ec565b9392505050565b600060208284031215611d5a57600080fd5b8151611d41816123ec565b60008060408385031215611d7857600080fd5b8235611d83816123ec565b91506020830135611d93816123ec565b809150509250929050565b600080600060608486031215611db357600080fd5b8335611dbe816123ec565b92506020840135611dce816123ec565b929592945050506040919091013590565b60008060008060808587031215611df557600080fd5b8435611e00816123ec565b93506020850135611e10816123ec565b925060408501359150606085013567ffffffffffffffff811115611e3357600080fd5b8501601f81018713611e4457600080fd5b8035611e57611e5282612277565b612246565b818152886020838501011115611e6c57600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060408385031215611ea157600080fd5b8235611eac816123ec565b915060208301358015158114611d9357600080fd5b60008060408385031215611ed457600080fd5b8235611edf816123ec565b946020939093013593505050565b600060208284031215611eff57600080fd5b8135611d4181612401565b600060208284031215611f1c57600080fd5b8151611d4181612401565b600060208284031215611f3957600080fd5b815167ffffffffffffffff811115611f5057600080fd5b8201601f81018413611f6157600080fd5b8051611f6f611e5282612277565b818152856020838501011115611f8457600080fd5b611f958260208301602086016122f0565b95945050505050565b600060208284031215611fb057600080fd5b5035919050565b60008060408385031215611fca57600080fd5b50508035926020909101359150565b60008060008060808587031215611fef57600080fd5b84359350602080860135935060408601359250606086013567ffffffffffffffff8082111561201d57600080fd5b818801915088601f83011261203157600080fd5b813581811115612043576120436123d6565b8060051b9150612054848301612246565b8181528481019084860184860187018d101561206f57600080fd5b600095505b83861015612092578035835260019590950194918601918601612074565b50989b979a50959850505050505050565b600081518084526120bb8160208601602086016122f0565b601f01601f19169290920160200192915050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612102908301846120a3565b9695505050505050565b602081526000611d4160208301846120a3565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561226f5761226f6123d6565b604052919050565b600067ffffffffffffffff821115612291576122916123d6565b50601f01601f191660200190565b600082198211156122b2576122b2612394565b500190565b6000826122d457634e487b7160e01b600052601260045260246000fd5b500490565b6000828210156122eb576122eb612394565b500390565b60005b8381101561230b5781810151838201526020016122f3565b8381111561109d5750506000910152565b600181811c9082168061233057607f821691505b6020821081141561235157634e487b7160e01b600052602260045260246000fd5b50919050565b600061ffff8083168181141561236f5761236f612394565b6001019392505050565b600060001982141561238d5761238d612394565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146111e257600080fd5b6001600160e01b0319811681146111e257600080fdfea2646970667358221220a60f0b99da9de7a2b5c98a09c970bb0309d231a05bb8ca3609abfdbadf66bbf964736f6c63430008060033

Deployed Bytecode Sourcemap

44567:6678:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38419:224;;;;;;:::i;:::-;;:::i;:::-;;;7863:14:1;;7856:22;7838:41;;7826:2;7811:18;38419:224:0;;;;;;;;25541:100;;;:::i;:::-;;;;;;;:::i;27100:221::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6882:32:1;;;6864:51;;6852:2;6837:18;27100:221:0;6819:102:1;26623:411:0;;;;;;:::i;:::-;;:::i;:::-;;49844:117;;;;;;:::i;:::-;;:::i;47772:398::-;;;;;;:::i;:::-;;:::i;39059:113::-;39147:10;:17;39059:113;;;18807:25:1;;;18795:2;18780:18;39059:113:0;18762:76:1;27990:339:0;;;;;;:::i;:::-;;:::i;38727:256::-;;;;;;:::i;:::-;;:::i;45995:144::-;;;;;;:::i;:::-;46073:7;46100:31;;;:22;:31;;;;;;;45995:144;28400:185;;;;;;:::i;:::-;;:::i;47349:331::-;;;:::i;39249:233::-;;;;;;:::i;:::-;;:::i;46514:827::-;;;;;;:::i;:::-;;:::i;49395:97::-;;;:::i;25235:239::-;;;;;;:::i;:::-;;:::i;45832:155::-;;;;;;:::i;:::-;45920:7;45947:32;;;:15;:32;;;;;;;45832:155;24965:208;;;;;;:::i;:::-;;:::i;9987:94::-;;;:::i;49596:108::-;;;;;;:::i;:::-;;:::i;49500:88::-;;;;;;:::i;:::-;;:::i;45473:351::-;;;;;;:::i;:::-;;:::i;9336:87::-;9409:6;;-1:-1:-1;;;;;9409:6:0;9336:87;;25710:104;;;:::i;27393:295::-;;;;;;:::i;:::-;;:::i;28656:328::-;;;;;;:::i;:::-;;:::i;46147:359::-;;;;;;:::i;:::-;;:::i;49712:124::-;;;;;;:::i;:::-;;:::i;27759:164::-;;;;;;:::i;:::-;-1:-1:-1;;;;;27880:25:0;;;27856:4;27880:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;27759:164;10236:192;;;;;;:::i;:::-;;:::i;38419:224::-;38521:4;-1:-1:-1;;;;;;38545:50:0;;-1:-1:-1;;;38545:50:0;;:90;;;38599:36;38623:11;38599:23;:36::i;:::-;38538:97;38419:224;-1:-1:-1;;38419:224:0:o;25541:100::-;25595:13;25628:5;25621:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25541:100;:::o;27100:221::-;27176:7;27204:16;27212:7;27204;:16::i;:::-;27196:73;;;;-1:-1:-1;;;27196:73:0;;13811:2:1;27196:73:0;;;13793:21:1;13850:2;13830:18;;;13823:30;13889:34;13869:18;;;13862:62;-1:-1:-1;;;13940:18:1;;;13933:42;13992:19;;27196:73:0;;;;;;;;;-1:-1:-1;27289:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;27289:24:0;;27100:221::o;26623:411::-;26704:13;26720:23;26735:7;26720:14;:23::i;:::-;26704:39;;26768:5;-1:-1:-1;;;;;26762:11:0;:2;-1:-1:-1;;;;;26762:11:0;;;26754:57;;;;-1:-1:-1;;;26754:57:0;;16511:2:1;26754:57:0;;;16493:21:1;16550:2;16530:18;;;16523:30;16589:34;16569:18;;;16562:62;-1:-1:-1;;;16640:18:1;;;16633:31;16681:19;;26754:57:0;16483:223:1;26754:57:0;8290:10;-1:-1:-1;;;;;26846:21:0;;;;:62;;-1:-1:-1;26871:37:0;26888:5;8290:10;27759:164;:::i;26871:37::-;26824:168;;;;-1:-1:-1;;;26824:168:0;;12204:2:1;26824:168:0;;;12186:21:1;12243:2;12223:18;;;12216:30;12282:34;12262:18;;;12255:62;12353:26;12333:18;;;12326:54;12397:19;;26824:168:0;12176:246:1;26824:168:0;27005:21;27014:2;27018:7;27005:8;:21::i;:::-;26693:341;26623:411;;:::o;49844:117::-;9409:6;;-1:-1:-1;;;;;9409:6:0;8290:10;9556:23;9548:68;;;;-1:-1:-1;;;9548:68:0;;;;;;;:::i;:::-;49922:13:::1;:31:::0;;-1:-1:-1;;;;;;49922:31:0::1;-1:-1:-1::0;;;;;49922:31:0;;;::::1;::::0;;;::::1;::::0;;49844:117::o;47772:398::-;9409:6;;-1:-1:-1;;;;;9409:6:0;8290:10;9556:23;9548:68;;;;-1:-1:-1;;;9548:68:0;;;;;;;:::i;:::-;47879:1:::1;47869:7;:11;:29;;;;;47894:4;47884:7;:14;47869:29;47861:58;;;::::0;-1:-1:-1;;;47861:58:0;;14987:2:1;47861:58:0::1;::::0;::::1;14969:21:1::0;15026:2;15006:18;;;14999:30;-1:-1:-1;;;15045:18:1;;;15038:46;15101:18;;47861:58:0::1;14959:166:1::0;47861:58:0::1;47939:16;47947:7;47939;:16::i;:::-;47938:17;47930:55;;;::::0;-1:-1:-1;;;47930:55:0;;10271:2:1;47930:55:0::1;::::0;::::1;10253:21:1::0;10310:2;10290:18;;;10283:30;10349:27;10329:18;;;10322:55;10394:18;;47930:55:0::1;10243:175:1::0;47930:55:0::1;48004:27;::::0;;;:15:::1;:27;::::0;;;;;:32;47996:78:::1;;;::::0;-1:-1:-1;;;47996:78:0;;14224:2:1;47996:78:0::1;::::0;::::1;14206:21:1::0;14263:2;14243:18;;;14236:30;14302:34;14282:18;;;14275:62;-1:-1:-1;;;14353:18:1;;;14346:31;14394:19;;47996:78:0::1;14196:223:1::0;47996:78:0::1;48087:27;48097:7;9409:6:::0;;-1:-1:-1;;;;;9409:6:0;;9336:87;48097:7:::1;48106;48087:9;:27::i;:::-;48125;::::0;;;:15:::1;:27;::::0;;;;;:37;47772:398::o;27990:339::-;28185:41;8290:10;28218:7;28185:18;:41::i;:::-;28177:103;;;;-1:-1:-1;;;28177:103:0;;;;;;;:::i;:::-;28293:28;28303:4;28309:2;28313:7;28293:9;:28::i;38727:256::-;38824:7;38860:23;38877:5;38860:16;:23::i;:::-;38852:5;:31;38844:87;;;;-1:-1:-1;;;38844:87:0;;8676:2:1;38844:87:0;;;8658:21:1;8715:2;8695:18;;;8688:30;8754:34;8734:18;;;8727:62;-1:-1:-1;;;8805:18:1;;;8798:41;8856:19;;38844:87:0;8648:233:1;38844:87:0;-1:-1:-1;;;;;;38949:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;38727:256::o;28400:185::-;28538:39;28555:4;28561:2;28565:7;28538:39;;;;;;;;;;;;:16;:39::i;47349:331::-;12269:1;12865:7;;:19;;12857:63;;;;-1:-1:-1;;;12857:63:0;;18503:2:1;12857:63:0;;;18485:21:1;18542:2;18522:18;;;18515:30;18581:33;18561:18;;;18554:61;18632:18;;12857:63:0;18475:181:1;12857:63:0;12269:1;12998:7;:18;47420:13:::1;::::0;-1:-1:-1;;;;;47420:13:0::1;47404:74;;;::::0;-1:-1:-1;;;47404:74:0;;17331:2:1;47404:74:0::1;::::0;::::1;17313:21:1::0;17370:2;17350:18;;;17343:30;17409:27;17389:18;;;17382:55;17454:18;;47404:74:0::1;17303:175:1::0;47404:74:0::1;47526:13;::::0;-1:-1:-1;;;;;47526:13:0::1;::::0;47551:11:::1;8290:10:::0;47577:8:::1;::::0;47551:35:::1;::::0;-1:-1:-1;;;;;;47551:35:0::1;::::0;;;;;;-1:-1:-1;;;;;7611:32:1;;;47551:35:0::1;::::0;::::1;7593:51:1::0;7660:18;;;7653:34;7566:18;;47551:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;47597:47;47607:12;8290:10:::0;;8210:98;47607:12:::1;47621:15;::::0;:22:::1;::::0;47639:4:::1;47621:22;:::i;:::-;47597:9;:47::i;:::-;47655:15;:17:::0;;;:15:::1;:17;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;12225:1:0;13177:7;:22;-1:-1:-1;47349:331:0:o;39249:233::-;39324:7;39360:30;39147:10;:17;;39059:113;39360:30;39352:5;:38;39344:95;;;;-1:-1:-1;;;39344:95:0;;17685:2:1;39344:95:0;;;17667:21:1;17724:2;17704:18;;;17697:30;17763:34;17743:18;;;17736:62;-1:-1:-1;;;17814:18:1;;;17807:42;17866:19;;39344:95:0;17657:234:1;39344:95:0;39457:10;39468:5;39457:17;;;;;;;;:::i;:::-;;;;;;;;;39450:24;;39249:233;;;:::o;46514:827::-;12269:1;12865:7;;:19;;12857:63;;;;-1:-1:-1;;;12857:63:0;;18503:2:1;12857:63:0;;;18485:21:1;18542:2;18522:18;;;18515:30;18581:33;18561:18;;;18554:61;18632:18;;12857:63:0;18475:181:1;12857:63:0;12269:1;12998:7;:18;46673:14:::1;::::0;-1:-1:-1;;;46673:14:0;::::1;;;46665:58;;;::::0;-1:-1:-1;;;46665:58:0;;8316:2:1;46665:58:0::1;::::0;::::1;8298:21:1::0;8355:2;8335:18;;;8328:30;8394:33;8374:18;;;8367:61;8445:18;;46665:58:0::1;8288:181:1::0;46665:58:0::1;46742:78;46761:15;46778:17;46797:15;46814:5;46742:18;:78::i;:::-;46734:127;;;::::0;-1:-1:-1;;;46734:127:0;;18098:2:1;46734:127:0::1;::::0;::::1;18080:21:1::0;18137:2;18117:18;;;18110:30;18176:34;18156:18;;;18149:62;-1:-1:-1;;;18227:18:1;;;18220:34;18271:19;;46734:127:0::1;18070:226:1::0;46734:127:0::1;46880:34;46898:15;46880:17;:34::i;:::-;46872:85;;;::::0;-1:-1:-1;;;46872:85:0;;10625:2:1;46872:85:0::1;::::0;::::1;10607:21:1::0;10664:2;10644:18;;;10637:30;10703:34;10683:18;;;10676:62;-1:-1:-1;;;10754:18:1;;;10747:36;10800:19;;46872:85:0::1;10597:228:1::0;46872:85:0::1;46970:42;8290:10:::0;46994:17:::1;46970:9;:42::i;:::-;-1:-1:-1::0;;47139:32:0::1;::::0;;;:15:::1;:32;::::0;;;;;;;:52;;;47274:41;;;:22:::1;:41:::0;;;:59;12225:1;13177:7;:22;46514:827::o;49395:97::-;9409:6;;-1:-1:-1;;;;;9409:6:0;8290:10;9556:23;9548:68;;;;-1:-1:-1;;;9548:68:0;;;;;;;:::i;:::-;49470:14:::1;::::0;;-1:-1:-1;;;;49452:32:0;::::1;-1:-1:-1::0;;;49470:14:0;;;::::1;;;49469:15;49452:32:::0;;::::1;;::::0;;49395:97::o;25235:239::-;25307:7;25343:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25343:16:0;25378:19;25370:73;;;;-1:-1:-1;;;25370:73:0;;13040:2:1;25370:73:0;;;13022:21:1;13079:2;13059:18;;;13052:30;13118:34;13098:18;;;13091:62;-1:-1:-1;;;13169:18:1;;;13162:39;13218:19;;25370:73:0;13012:231:1;24965:208:0;25037:7;-1:-1:-1;;;;;25065:19:0;;25057:74;;;;-1:-1:-1;;;25057:74:0;;12629:2:1;25057:74:0;;;12611:21:1;12668:2;12648:18;;;12641:30;12707:34;12687:18;;;12680:62;-1:-1:-1;;;12758:18:1;;;12751:40;12808:19;;25057:74:0;12601:232:1;25057:74:0;-1:-1:-1;;;;;;25149:16:0;;;;;:9;:16;;;;;;;24965:208::o;9987:94::-;9409:6;;-1:-1:-1;;;;;9409:6:0;8290:10;9556:23;9548:68;;;;-1:-1:-1;;;9548:68:0;;;;;;;:::i;:::-;10052:21:::1;10070:1;10052:9;:21::i;:::-;9987:94::o:0;49596:108::-;9409:6;;-1:-1:-1;;;;;9409:6:0;8290:10;9556:23;9548:68;;;;-1:-1:-1;;;9548:68:0;;;;;;;:::i;:::-;49670:8:::1;:26:::0;;-1:-1:-1;;;;;;49670:26:0::1;-1:-1:-1::0;;;;;49670:26:0;;;::::1;::::0;;;::::1;::::0;;49596:108::o;49500:88::-;9409:6;;-1:-1:-1;;;;;9409:6:0;8290:10;9556:23;9548:68;;;;-1:-1:-1;;;9548:68:0;;;;;;;:::i;:::-;49564:8:::1;:16:::0;49500:88::o;45473:351::-;45532:13;45571:16;45579:7;45571;:16::i;:::-;45563:76;;;;-1:-1:-1;;;45563:76:0;;;;;;;:::i;:::-;45728:8;;45757:33;;-1:-1:-1;;;45757:33:0;;;;;18807:25:1;;;45650:20:0;;-1:-1:-1;;;;;45728:8:0;;;;45757:24;;18780:18:1;;45757:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;45757:33:0;;;;;;;;;;;;:::i;:::-;45748:42;45473:351;-1:-1:-1;;;;45473:351:0:o;25710:104::-;25766:13;25799:7;25792:14;;;;;:::i;27393:295::-;-1:-1:-1;;;;;27496:24:0;;8290:10;27496:24;;27488:62;;;;-1:-1:-1;;;27488:62:0;;11437:2:1;27488:62:0;;;11419:21:1;11476:2;11456:18;;;11449:30;11515:27;11495:18;;;11488:55;11560:18;;27488:62:0;11409:175:1;27488:62:0;8290:10;27563:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;27563:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;27563:53:0;;;;;;;;;;27632:48;;7838:41:1;;;27563:42:0;;8290:10;27632:48;;7811:18:1;27632:48:0;;;;;;;27393:295;;:::o;28656:328::-;28831:41;8290:10;28864:7;28831:18;:41::i;:::-;28823:103;;;;-1:-1:-1;;;28823:103:0;;;;;;;:::i;:::-;28937:39;28951:4;28957:2;28961:7;28970:5;28937:13;:39::i;:::-;28656:328;;;;:::o;46147:359::-;46212:13;46246:16;46254:7;46246;:16::i;:::-;46238:76;;;;-1:-1:-1;;;46238:76:0;;;;;;;:::i;:::-;46413:8;;46442:30;;-1:-1:-1;;;46442:30:0;;;;;18807:25:1;;;46335:20:0;;-1:-1:-1;;;;;46413:8:0;;;;46442:21;;18780:18:1;;46442:30:0;18762:76:1;49712:124:0;9409:6;;-1:-1:-1;;;;;9409:6:0;8290:10;9556:23;9548:68;;;;-1:-1:-1;;;9548:68:0;;;;;;;:::i;:::-;49794:16:::1;:34:::0;;-1:-1:-1;;;;;;49794:34:0::1;-1:-1:-1::0;;;;;49794:34:0;;;::::1;::::0;;;::::1;::::0;;49712:124::o;10236:192::-;9409:6;;-1:-1:-1;;;;;9409:6:0;8290:10;9556:23;9548:68;;;;-1:-1:-1;;;9548:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10325:22:0;::::1;10317:73;;;::::0;-1:-1:-1;;;10317:73:0;;9507:2:1;10317:73:0::1;::::0;::::1;9489:21:1::0;9546:2;9526:18;;;9519:30;9585:34;9565:18;;;9558:62;-1:-1:-1;;;9636:18:1;;;9629:36;9682:19;;10317:73:0::1;9479:228:1::0;10317:73:0::1;10401:19;10411:8;10401:9;:19::i;:::-;10236:192:::0;:::o;24596:305::-;24698:4;-1:-1:-1;;;;;;24735:40:0;;-1:-1:-1;;;24735:40:0;;:105;;-1:-1:-1;;;;;;;24792:48:0;;-1:-1:-1;;;24792:48:0;24735:105;:158;;;-1:-1:-1;;;;;;;;;;23312:40:0;;;24857:36;23203:157;30494:127;30559:4;30583:16;;;:7;:16;;;;;;-1:-1:-1;;;;;30583:16:0;:30;;;30494:127::o;34476:174::-;34551:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;34551:29:0;-1:-1:-1;;;;;34551:29:0;;;;;;;;:24;;34605:23;34551:24;34605:14;:23::i;:::-;-1:-1:-1;;;;;34596:46:0;;;;;;;;;;;34476:174;;:::o;31478:110::-;31554:26;31564:2;31568:7;31554:26;;;;;;;;;;;;:9;:26::i;:::-;31478:110;;:::o;30788:348::-;30881:4;30906:16;30914:7;30906;:16::i;:::-;30898:73;;;;-1:-1:-1;;;30898:73:0;;11791:2:1;30898:73:0;;;11773:21:1;11830:2;11810:18;;;11803:30;11869:34;11849:18;;;11842:62;-1:-1:-1;;;11920:18:1;;;11913:42;11972:19;;30898:73:0;11763:234:1;30898:73:0;30982:13;30998:23;31013:7;30998:14;:23::i;:::-;30982:39;;31051:5;-1:-1:-1;;;;;31040:16:0;:7;-1:-1:-1;;;;;31040:16:0;;:51;;;;31084:7;-1:-1:-1;;;;;31060:31:0;:20;31072:7;31060:11;:20::i;:::-;-1:-1:-1;;;;;31060:31:0;;31040:51;:87;;;-1:-1:-1;;;;;;27880:25:0;;;27856:4;27880:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;31095:32;27759:164;33780:578;33939:4;-1:-1:-1;;;;;33912:31:0;:23;33927:7;33912:14;:23::i;:::-;-1:-1:-1;;;;;33912:31:0;;33904:85;;;;-1:-1:-1;;;33904:85:0;;15332:2:1;33904:85:0;;;15314:21:1;15371:2;15351:18;;;15344:30;15410:34;15390:18;;;15383:62;-1:-1:-1;;;15461:18:1;;;15454:39;15510:19;;33904:85:0;15304:231:1;33904:85:0;-1:-1:-1;;;;;34008:16:0;;34000:65;;;;-1:-1:-1;;;34000:65:0;;11032:2:1;34000:65:0;;;11014:21:1;11071:2;11051:18;;;11044:30;11110:34;11090:18;;;11083:62;-1:-1:-1;;;11161:18:1;;;11154:34;11205:19;;34000:65:0;11004:226:1;34000:65:0;34078:39;34099:4;34105:2;34109:7;34078:20;:39::i;:::-;34182:29;34199:1;34203:7;34182:8;:29::i;:::-;-1:-1:-1;;;;;34224:15:0;;;;;;:9;:15;;;;;:20;;34243:1;;34224:15;:20;;34243:1;;34224:20;:::i;:::-;;;;-1:-1:-1;;;;;;;34255:13:0;;;;;;:9;:13;;;;;:18;;34272:1;;34255:13;:18;;34272:1;;34255:18;:::i;:::-;;;;-1:-1:-1;;34284:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;34284:21:0;-1:-1:-1;;;;;34284:21:0;;;;;;;;;34323:27;;34284:16;;34323:27;;;;;;;33780:578;;;:::o;48506:881::-;48725:57;;;;;;;6586:19:1;;;6621:12;;;6614:28;;;6658:12;;;;6651:28;;;48725:57:0;;;;;;;;;;6695:12:1;;;;48725:57:0;;;48715:68;;;;;-1:-1:-1;;6586:19:1;-1:-1:-1;48825:292:0;48848:5;:12;48844:1;:16;;;48825:292;;;48887:4;48894;48887:11;48903:1;48886:18;48882:200;;;48959:5;48965:1;48959:8;;;;;;;;;;:::i;:::-;;;;;;;48969:4;48942:32;;;;;;;;6306:19:1;;;6350:2;6341:12;;6334:28;6387:2;6378:12;;6296:100;48942:32:0;;;;;;;;;;;;;48932:43;;;;;;48925:50;;48882:200;;;49050:4;49056:5;49062:1;49056:8;;;;;;;;;;:::i;:::-;;;;;;;49033:32;;;;;;;;6306:19:1;;;6350:2;6341:12;;6334:28;6387:2;6378:12;;6296:100;49033:32:0;;;;;;;;;;;;;49023:43;;;;;;49016:50;;48882:200;49096:9;49104:1;49096:9;;:::i;:::-;;-1:-1:-1;48862:3:0;;;;:::i;:::-;;;;48825:292;;;;49196:6;49192:163;49212:9;:16;49208:20;;49192:163;;;49271:9;49281:1;49271:12;;;;;;;;:::i;:::-;;;;;;;;;49263:4;:20;49259:85;;;49324:4;49317:11;;;;;;;49259:85;49230:3;;;;:::i;:::-;;;;49192:163;;;-1:-1:-1;49374:5:0;;48506:881;-1:-1:-1;;;;;;;48506:881:0:o;48178:320::-;48248:4;48273:27;;;:15;:27;;;;;;:32;48265:69;;;;-1:-1:-1;;;48265:69:0;;16158:2:1;48265:69:0;;;16140:21:1;16197:2;16177:18;;;16170:30;16236:26;16216:18;;;16209:54;16280:18;;48265:69:0;16130:174:1;48265:69:0;48400:16;;-1:-1:-1;;;;;48400:16:0;8290:10;48435:38;;-1:-1:-1;;;48435:38:0;;;;;18807:25:1;;;-1:-1:-1;;;;;48435:54:0;;;;:26;;;;;18780:18:1;;48435:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;48435:54:0;;;48178:320;-1:-1:-1;;;48178:320:0:o;10436:173::-;10511:6;;;-1:-1:-1;;;;;10528:17:0;;;-1:-1:-1;;;;;;10528:17:0;;;;;;;10561:40;;10511:6;;;10528:17;10511:6;;10561:40;;10492:16;;10561:40;10481:128;10436:173;:::o;29866:315::-;30023:28;30033:4;30039:2;30043:7;30023:9;:28::i;:::-;30070:48;30093:4;30099:2;30103:7;30112:5;30070:22;:48::i;:::-;30062:111;;;;-1:-1:-1;;;30062:111:0;;;;;;;:::i;31815:321::-;31945:18;31951:2;31955:7;31945:5;:18::i;:::-;31996:54;32027:1;32031:2;32035:7;32044:5;31996:22;:54::i;:::-;31974:154;;;;-1:-1:-1;;;31974:154:0;;;;;;;:::i;40095:589::-;-1:-1:-1;;;;;40301:18:0;;40297:187;;40336:40;40368:7;41511:10;:17;;41484:24;;;;:15;:24;;;;;:44;;;41539:24;;;;;;;;;;;;41407:164;40336:40;40297:187;;;40406:2;-1:-1:-1;;;;;40398:10:0;:4;-1:-1:-1;;;;;40398:10:0;;40394:90;;40425:47;40458:4;40464:7;40425:32;:47::i;:::-;-1:-1:-1;;;;;40498:16:0;;40494:183;;40531:45;40568:7;40531:36;:45::i;40494:183::-;40604:4;-1:-1:-1;;;;;40598:10:0;:2;-1:-1:-1;;;;;40598:10:0;;40594:83;;40625:40;40653:2;40657:7;40625:27;:40::i;35215:803::-;35370:4;-1:-1:-1;;;;;35391:13:0;;15708:20;15756:8;35387:624;;35427:72;;-1:-1:-1;;;35427:72:0;;-1:-1:-1;;;;;35427:36:0;;;;;:72;;8290:10;;35478:4;;35484:7;;35493:5;;35427:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35427:72:0;;;;;;;;-1:-1:-1;;35427:72:0;;;;;;;;;;;;:::i;:::-;;;35423:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35673:13:0;;35669:272;;35716:60;;-1:-1:-1;;;35716:60:0;;;;;;;:::i;35669:272::-;35891:6;35885:13;35876:6;35872:2;35868:15;35861:38;35423:533;-1:-1:-1;;;;;;35550:55:0;-1:-1:-1;;;35550:55:0;;-1:-1:-1;35543:62:0;;35387:624;-1:-1:-1;35995:4:0;35988:11;;32472:382;-1:-1:-1;;;;;32552:16:0;;32544:61;;;;-1:-1:-1;;;32544:61:0;;13450:2:1;32544:61:0;;;13432:21:1;;;13469:18;;;13462:30;13528:34;13508:18;;;13501:62;13580:18;;32544:61:0;13422:182:1;32544:61:0;32625:16;32633:7;32625;:16::i;:::-;32624:17;32616:58;;;;-1:-1:-1;;;32616:58:0;;9914:2:1;32616:58:0;;;9896:21:1;9953:2;9933:18;;;9926:30;9992;9972:18;;;9965:58;10040:18;;32616:58:0;9886:178:1;32616:58:0;32687:45;32716:1;32720:2;32724:7;32687:20;:45::i;:::-;-1:-1:-1;;;;;32745:13:0;;;;;;:9;:13;;;;;:18;;32762:1;;32745:13;:18;;32762:1;;32745:18;:::i;:::-;;;;-1:-1:-1;;32774:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;32774:21:0;-1:-1:-1;;;;;32774:21:0;;;;;;;;32813:33;;32774:16;;;32813:33;;32774:16;;32813:33;32472:382;;:::o;42198:988::-;42464:22;42514:1;42489:22;42506:4;42489:16;:22::i;:::-;:26;;;;:::i;:::-;42526:18;42547:26;;;:17;:26;;;;;;42464:51;;-1:-1:-1;42680:28:0;;;42676:328;;-1:-1:-1;;;;;42747:18:0;;42725:19;42747:18;;;:12;:18;;;;;;;;:34;;;;;;;;;42798:30;;;;;;:44;;;42915:30;;:17;:30;;;;;:43;;;42676:328;-1:-1:-1;43100:26:0;;;;:17;:26;;;;;;;;43093:33;;;-1:-1:-1;;;;;43144:18:0;;;;;:12;:18;;;;;:34;;;;;;;43137:41;42198:988::o;43481:1079::-;43759:10;:17;43734:22;;43759:21;;43779:1;;43759:21;:::i;:::-;43791:18;43812:24;;;:15;:24;;;;;;44185:10;:26;;43734:46;;-1:-1:-1;43812:24:0;;43734:46;;44185:26;;;;;;:::i;:::-;;;;;;;;;44163:48;;44249:11;44224:10;44235;44224:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;44329:28;;;:15;:28;;;;;;;:41;;;44501:24;;;;;44494:31;44536:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;43552:1008;;;43481:1079;:::o;40985:221::-;41070:14;41087:20;41104:2;41087:16;:20::i;:::-;-1:-1:-1;;;;;41118:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;41163:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;40985:221:0:o;14:247:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:2;;;142:1;139;132:12;94:2;181:9;168:23;200:31;225:5;200:31;:::i;:::-;250:5;84:177;-1:-1:-1;;;84:177:1:o;266:251::-;336:6;389:2;377:9;368:7;364:23;360:32;357:2;;;405:1;402;395:12;357:2;437:9;431:16;456:31;481:5;456:31;:::i;522:388::-;590:6;598;651:2;639:9;630:7;626:23;622:32;619:2;;;667:1;664;657:12;619:2;706:9;693:23;725:31;750:5;725:31;:::i;:::-;775:5;-1:-1:-1;832:2:1;817:18;;804:32;845:33;804:32;845:33;:::i;:::-;897:7;887:17;;;609:301;;;;;:::o;915:456::-;992:6;1000;1008;1061:2;1049:9;1040:7;1036:23;1032:32;1029:2;;;1077:1;1074;1067:12;1029:2;1116:9;1103:23;1135:31;1160:5;1135:31;:::i;:::-;1185:5;-1:-1:-1;1242:2:1;1227:18;;1214:32;1255:33;1214:32;1255:33;:::i;:::-;1019:352;;1307:7;;-1:-1:-1;;;1361:2:1;1346:18;;;;1333:32;;1019:352::o;1376:1016::-;1471:6;1479;1487;1495;1548:3;1536:9;1527:7;1523:23;1519:33;1516:2;;;1565:1;1562;1555:12;1516:2;1604:9;1591:23;1623:31;1648:5;1623:31;:::i;:::-;1673:5;-1:-1:-1;1730:2:1;1715:18;;1702:32;1743:33;1702:32;1743:33;:::i;:::-;1795:7;-1:-1:-1;1849:2:1;1834:18;;1821:32;;-1:-1:-1;1904:2:1;1889:18;;1876:32;1931:18;1920:30;;1917:2;;;1963:1;1960;1953:12;1917:2;1986:22;;2039:4;2031:13;;2027:27;-1:-1:-1;2017:2:1;;2068:1;2065;2058:12;2017:2;2104;2091:16;2129:48;2145:31;2173:2;2145:31;:::i;:::-;2129:48;:::i;:::-;2200:2;2193:5;2186:17;2240:7;2235:2;2230;2226;2222:11;2218:20;2215:33;2212:2;;;2261:1;2258;2251:12;2212:2;2316;2311;2307;2303:11;2298:2;2291:5;2287:14;2274:45;2360:1;2355:2;2350;2343:5;2339:14;2335:23;2328:34;2381:5;2371:15;;;;;1506:886;;;;;;;:::o;2397:416::-;2462:6;2470;2523:2;2511:9;2502:7;2498:23;2494:32;2491:2;;;2539:1;2536;2529:12;2491:2;2578:9;2565:23;2597:31;2622:5;2597:31;:::i;:::-;2647:5;-1:-1:-1;2704:2:1;2689:18;;2676:32;2746:15;;2739:23;2727:36;;2717:2;;2777:1;2774;2767:12;2818:315;2886:6;2894;2947:2;2935:9;2926:7;2922:23;2918:32;2915:2;;;2963:1;2960;2953:12;2915:2;3002:9;2989:23;3021:31;3046:5;3021:31;:::i;:::-;3071:5;3123:2;3108:18;;;;3095:32;;-1:-1:-1;;;2905:228:1:o;3138:245::-;3196:6;3249:2;3237:9;3228:7;3224:23;3220:32;3217:2;;;3265:1;3262;3255:12;3217:2;3304:9;3291:23;3323:30;3347:5;3323:30;:::i;3388:249::-;3457:6;3510:2;3498:9;3489:7;3485:23;3481:32;3478:2;;;3526:1;3523;3516:12;3478:2;3558:9;3552:16;3577:30;3601:5;3577:30;:::i;3642:635::-;3722:6;3775:2;3763:9;3754:7;3750:23;3746:32;3743:2;;;3791:1;3788;3781:12;3743:2;3824:9;3818:16;3857:18;3849:6;3846:30;3843:2;;;3889:1;3886;3879:12;3843:2;3912:22;;3965:4;3957:13;;3953:27;-1:-1:-1;3943:2:1;;3994:1;3991;3984:12;3943:2;4023;4017:9;4048:48;4064:31;4092:2;4064:31;:::i;4048:48::-;4119:2;4112:5;4105:17;4159:7;4154:2;4149;4145;4141:11;4137:20;4134:33;4131:2;;;4180:1;4177;4170:12;4131:2;4193:54;4244:2;4239;4232:5;4228:14;4223:2;4219;4215:11;4193:54;:::i;:::-;4266:5;3733:544;-1:-1:-1;;;;;3733:544:1:o;4282:180::-;4341:6;4394:2;4382:9;4373:7;4369:23;4365:32;4362:2;;;4410:1;4407;4400:12;4362:2;-1:-1:-1;4433:23:1;;4352:110;-1:-1:-1;4352:110:1:o;4467:248::-;4535:6;4543;4596:2;4584:9;4575:7;4571:23;4567:32;4564:2;;;4612:1;4609;4602:12;4564:2;-1:-1:-1;;4635:23:1;;;4705:2;4690:18;;;4677:32;;-1:-1:-1;4554:161:1:o;4720:1162::-;4831:6;4839;4847;4855;4908:3;4896:9;4887:7;4883:23;4879:33;4876:2;;;4925:1;4922;4915:12;4876:2;4961:9;4948:23;4938:33;;4990:2;5039;5028:9;5024:18;5011:32;5001:42;;5090:2;5079:9;5075:18;5062:32;5052:42;;5145:2;5134:9;5130:18;5117:32;5168:18;5209:2;5201:6;5198:14;5195:2;;;5225:1;5222;5215:12;5195:2;5263:6;5252:9;5248:22;5238:32;;5308:7;5301:4;5297:2;5293:13;5289:27;5279:2;;5330:1;5327;5320:12;5279:2;5366;5353:16;5388:2;5384;5381:10;5378:2;;;5394:18;;:::i;:::-;5440:2;5437:1;5433:10;5423:20;;5463:28;5487:2;5483;5479:11;5463:28;:::i;:::-;5525:15;;;5556:12;;;;5588:11;;;5618;;;5614:20;;5611:33;-1:-1:-1;5608:2:1;;;5657:1;5654;5647:12;5608:2;5679:1;5670:10;;5689:163;5703:2;5700:1;5697:9;5689:163;;;5760:17;;5748:30;;5721:1;5714:9;;;;;5798:12;;;;5830;;5689:163;;;-1:-1:-1;4866:1016:1;;;;-1:-1:-1;4866:1016:1;;-1:-1:-1;;;;;;;4866:1016:1:o;5887:257::-;5928:3;5966:5;5960:12;5993:6;5988:3;5981:19;6009:63;6065:6;6058:4;6053:3;6049:14;6042:4;6035:5;6031:16;6009:63;:::i;:::-;6126:2;6105:15;-1:-1:-1;;6101:29:1;6092:39;;;;6133:4;6088:50;;5936:208;-1:-1:-1;;5936:208:1:o;6926:488::-;-1:-1:-1;;;;;7195:15:1;;;7177:34;;7247:15;;7242:2;7227:18;;7220:43;7294:2;7279:18;;7272:34;;;7342:3;7337:2;7322:18;;7315:31;;;7120:4;;7363:45;;7388:19;;7380:6;7363:45;:::i;:::-;7355:53;7129:285;-1:-1:-1;;;;;;7129:285:1:o;7890:219::-;8039:2;8028:9;8021:21;8002:4;8059:44;8099:2;8088:9;8084:18;8076:6;8059:44;:::i;8886:414::-;9088:2;9070:21;;;9127:2;9107:18;;;9100:30;9166:34;9161:2;9146:18;;9139:62;-1:-1:-1;;;9232:2:1;9217:18;;9210:48;9290:3;9275:19;;9060:240::o;14424:356::-;14626:2;14608:21;;;14645:18;;;14638:30;14704:34;14699:2;14684:18;;14677:62;14771:2;14756:18;;14598:182::o;15540:411::-;15742:2;15724:21;;;15781:2;15761:18;;;15754:30;15820:34;15815:2;15800:18;;15793:62;-1:-1:-1;;;15886:2:1;15871:18;;15864:45;15941:3;15926:19;;15714:237::o;16711:413::-;16913:2;16895:21;;;16952:2;16932:18;;;16925:30;16991:34;16986:2;16971:18;;16964:62;-1:-1:-1;;;17057:2:1;17042:18;;17035:47;17114:3;17099:19;;16885:239::o;18843:275::-;18914:2;18908:9;18979:2;18960:13;;-1:-1:-1;;18956:27:1;18944:40;;19014:18;18999:34;;19035:22;;;18996:62;18993:2;;;19061:18;;:::i;:::-;19097:2;19090:22;18888:230;;-1:-1:-1;18888:230:1:o;19123:186::-;19171:4;19204:18;19196:6;19193:30;19190:2;;;19226:18;;:::i;:::-;-1:-1:-1;19292:2:1;19271:15;-1:-1:-1;;19267:29:1;19298:4;19263:40;;19180:129::o;19314:128::-;19354:3;19385:1;19381:6;19378:1;19375:13;19372:2;;;19391:18;;:::i;:::-;-1:-1:-1;19427:9:1;;19362:80::o;19447:217::-;19487:1;19513;19503:2;;19557:10;19552:3;19548:20;19545:1;19538:31;19592:4;19589:1;19582:15;19620:4;19617:1;19610:15;19503:2;-1:-1:-1;19649:9:1;;19493:171::o;19669:125::-;19709:4;19737:1;19734;19731:8;19728:2;;;19742:18;;:::i;:::-;-1:-1:-1;19779:9:1;;19718:76::o;19799:258::-;19871:1;19881:113;19895:6;19892:1;19889:13;19881:113;;;19971:11;;;19965:18;19952:11;;;19945:39;19917:2;19910:10;19881:113;;;20012:6;20009:1;20006:13;20003:2;;;-1:-1:-1;;20047:1:1;20029:16;;20022:27;19852:205::o;20062:380::-;20141:1;20137:12;;;;20184;;;20205:2;;20259:4;20251:6;20247:17;20237:27;;20205:2;20312;20304:6;20301:14;20281:18;20278:38;20275:2;;;20358:10;20353:3;20349:20;20346:1;20339:31;20393:4;20390:1;20383:15;20421:4;20418:1;20411:15;20275:2;;20117:325;;;:::o;20447:197::-;20485:3;20513:6;20554:2;20547:5;20543:14;20581:2;20572:7;20569:15;20566:2;;;20587:18;;:::i;:::-;20636:1;20623:15;;20493:151;-1:-1:-1;;;20493:151:1:o;20649:135::-;20688:3;-1:-1:-1;;20709:17:1;;20706:2;;;20729:18;;:::i;:::-;-1:-1:-1;20776:1:1;20765:13;;20696:88::o;20789:127::-;20850:10;20845:3;20841:20;20838:1;20831:31;20881:4;20878:1;20871:15;20905:4;20902:1;20895:15;20921:127;20982:10;20977:3;20973:20;20970:1;20963:31;21013:4;21010:1;21003:15;21037:4;21034:1;21027:15;21053:127;21114:10;21109:3;21105:20;21102:1;21095:31;21145:4;21142:1;21135:15;21169:4;21166:1;21159:15;21185:127;21246:10;21241:3;21237:20;21234:1;21227:31;21277:4;21274:1;21267:15;21301:4;21298:1;21291:15;21317:131;-1:-1:-1;;;;;21392:31:1;;21382:42;;21372:2;;21438:1;21435;21428:12;21453:131;-1:-1:-1;;;;;;21527:32:1;;21517:43;;21507:2;;21574:1;21571;21564:12

Swarm Source

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