ETH Price: $3,402.34 (-0.46%)
Gas: 17 Gwei

Token

Omni Artblock Apes (OAA)
 

Overview

Max Total Supply

0 OAA

Holders

636

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
nftj1.eth
Balance
5 OAA
0xEF39362f69f041F3057A02F4bBe673C6F59c0d40
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:
OAA

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-15
*/

// SPDX-License-Identifier: MIT
// File: contracts/interfaces/ILayerZeroUserApplicationConfig.sol

pragma solidity >=0.5.0;

interface ILayerZeroUserApplicationConfig {
    // @notice set the configuration of the LayerZero messaging library of the specified version
    // @param _version - messaging library version
    // @param _chainId - the chainId for the pending config change
    // @param _configType - type of configuration. every messaging library has its own convention.
    // @param _config - configuration in the bytes. can encode arbitrary content.
    function setConfig(
        uint16 _version,
        uint16 _chainId,
        uint256 _configType,
        bytes calldata _config
    ) external;

    // @notice set the send() LayerZero messaging library version to _version
    // @param _version - new messaging library version
    function setSendVersion(uint16 _version) external;

    // @notice set the lzReceive() LayerZero messaging library version to _version
    // @param _version - new messaging library version
    function setReceiveVersion(uint16 _version) external;

    // @notice Only when the UA needs to resume the message flow in blocking mode and clear the stored payload
    // @param _srcChainId - the chainId of the source chain
    // @param _srcAddress - the contract address of the source contract at the source chain
    function forceResumeReceive(uint16 _srcChainId, bytes calldata _srcAddress)
        external;
}

// File: contracts/interfaces/ILayerZeroEndpoint.sol

pragma solidity >=0.5.0;

interface ILayerZeroEndpoint is ILayerZeroUserApplicationConfig {
    // @notice send a LayerZero message to the specified address at a LayerZero endpoint.
    // @param _dstChainId - the destination chain identifier
    // @param _destination - the address on destination chain (in bytes). address length/format may vary by chains
    // @param _payload - a custom bytes payload to send to the destination contract
    // @param _refundAddress - if the source transaction is cheaper than the amount of value passed, refund the additional amount to this address
    // @param _zroPaymentAddress - the address of the ZRO token holder who would pay for the transaction
    // @param _adapterParams - parameters for custom functionality. e.g. receive airdropped native gas from the relayer on destination
    function send(
        uint16 _dstChainId,
        bytes calldata _destination,
        bytes calldata _payload,
        address payable _refundAddress,
        address _zroPaymentAddress,
        bytes calldata _adapterParams
    ) external payable;

    // @notice used by the messaging library to publish verified payload
    // @param _srcChainId - the source chain identifier
    // @param _srcAddress - the source contract (as bytes) at the source chain
    // @param _dstAddress - the address on destination chain
    // @param _nonce - the unbound message ordering nonce
    // @param _gasLimit - the gas limit for external contract execution
    // @param _payload - verified payload to send to the destination contract
    function receivePayload(
        uint16 _srcChainId,
        bytes calldata _srcAddress,
        address _dstAddress,
        uint64 _nonce,
        uint256 _gasLimit,
        bytes calldata _payload
    ) external;

    // @notice get the inboundNonce of a receiver from a source chain which could be EVM or non-EVM chain
    // @param _srcChainId - the source chain identifier
    // @param _srcAddress - the source chain contract address
    function getInboundNonce(uint16 _srcChainId, bytes calldata _srcAddress)
        external
        view
        returns (uint64);

    // @notice get the outboundNonce from this source chain which, consequently, is always an EVM
    // @param _srcAddress - the source chain contract address
    function getOutboundNonce(uint16 _dstChainId, address _srcAddress)
        external
        view
        returns (uint64);

    // @notice gets a quote in source native gas, for the amount that send() requires to pay for message delivery
    // @param _dstChainId - the destination chain identifier
    // @param _userApplication - the user app address on this EVM chain
    // @param _payload - the custom message to send over LayerZero
    // @param _payInZRO - if false, user app pays the protocol fee in native token
    // @param _adapterParam - parameters for the adapter service, e.g. send some dust native token to dstChain
    function estimateFees(
        uint16 _dstChainId,
        address _userApplication,
        bytes calldata _payload,
        bool _payInZRO,
        bytes calldata _adapterParam
    ) external view returns (uint256 nativeFee, uint256 zroFee);

    // @notice get this Endpoint's immutable source identifier
    function getChainId() external view returns (uint16);

    // @notice the interface to retry failed message on this Endpoint destination
    // @param _srcChainId - the source chain identifier
    // @param _srcAddress - the source chain contract address
    // @param _payload - the payload to be retried
    function retryPayload(
        uint16 _srcChainId,
        bytes calldata _srcAddress,
        bytes calldata _payload
    ) external;

    // @notice query if any STORED payload (message blocking) at the endpoint.
    // @param _srcChainId - the source chain identifier
    // @param _srcAddress - the source chain contract address
    function hasStoredPayload(uint16 _srcChainId, bytes calldata _srcAddress)
        external
        view
        returns (bool);

    // @notice query if the _libraryAddress is valid for sending msgs.
    // @param _userApplication - the user app address on this EVM chain
    function getSendLibraryAddress(address _userApplication)
        external
        view
        returns (address);

    // @notice query if the _libraryAddress is valid for receiving msgs.
    // @param _userApplication - the user app address on this EVM chain
    function getReceiveLibraryAddress(address _userApplication)
        external
        view
        returns (address);

    // @notice query if the non-reentrancy guard for send() is on
    // @return true if the guard is on. false otherwise
    function isSendingPayload() external view returns (bool);

    // @notice query if the non-reentrancy guard for receive() is on
    // @return true if the guard is on. false otherwise
    function isReceivingPayload() external view returns (bool);

    // @notice get the configuration of the LayerZero messaging library of the specified version
    // @param _version - messaging library version
    // @param _chainId - the chainId for the pending config change
    // @param _userApplication - the contract address of the user application
    // @param _configType - type of configuration. every messaging library has its own convention.
    function getConfig(
        uint16 _version,
        uint16 _chainId,
        address _userApplication,
        uint256 _configType
    ) external view returns (bytes memory);

    // @notice get the send() LayerZero messaging library version
    // @param _userApplication - the contract address of the user application
    function getSendVersion(address _userApplication)
        external
        view
        returns (uint16);

    // @notice get the lzReceive() LayerZero messaging library version
    // @param _userApplication - the contract address of the user application
    function getReceiveVersion(address _userApplication)
        external
        view
        returns (uint16);
}

// File: contracts/interfaces/ILayerZeroReceiver.sol

pragma solidity >=0.5.0;

interface ILayerZeroReceiver {
    // @notice LayerZero endpoint will invoke this function to deliver the message on the destination
    // @param _srcChainId - the source endpoint identifier
    // @param _srcAddress - the source sending contract address from the source chain
    // @param _nonce - the ordered message nonce
    // @param _payload - the signed payload is the UA bytes has encoded to be sent
    function lzReceive(
        uint16 _srcChainId,
        bytes calldata _srcAddress,
        uint64 _nonce,
        bytes calldata _payload
    ) external;
}
// File: @openzeppelin/contracts/utils/Strings.sol

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

pragma solidity ^0.8.0;

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

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

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

pragma solidity ^0.8.0;

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

pragma solidity ^0.8.0;

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

    // Token name
    string private _name;

    string public hiddenMetadataUri;
    
    string public uriSuffix = ".json";

    // 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;

    bool public revealed = false;

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

        if (revealed == false) {
         return hiddenMetadataUri;
         }

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

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

// File: contracts/NonblockingReceiver.sol

pragma solidity ^0.8.6;

abstract contract NonblockingReceiver is Ownable, ILayerZeroReceiver {
    ILayerZeroEndpoint internal endpoint;

    struct FailedMessages {
        uint256 payloadLength;
        bytes32 payloadHash;
    }

    mapping(uint16 => mapping(bytes => mapping(uint256 => FailedMessages)))
        public failedMessages;
    mapping(uint16 => bytes) public trustedRemoteLookup;

    event MessageFailed(
        uint16 _srcChainId,
        bytes _srcAddress,
        uint64 _nonce,
        bytes _payload
    );

    function lzReceive(
        uint16 _srcChainId,
        bytes memory _srcAddress,
        uint64 _nonce,
        bytes memory _payload
    ) external override {
        require(msg.sender == address(endpoint)); // boilerplate! lzReceive must be called by the endpoint for security
        require(
            _srcAddress.length == trustedRemoteLookup[_srcChainId].length &&
                keccak256(_srcAddress) ==
                keccak256(trustedRemoteLookup[_srcChainId]),
            "NonblockingReceiver: invalid source sending contract"
        );

        // try-catch all errors/exceptions
        // having failed messages does not block messages passing
        try this.onLzReceive(_srcChainId, _srcAddress, _nonce, _payload) {
            // do nothing
        } catch {
            // error / exception
            failedMessages[_srcChainId][_srcAddress][_nonce] = FailedMessages(
                _payload.length,
                keccak256(_payload)
            );
            emit MessageFailed(_srcChainId, _srcAddress, _nonce, _payload);
        }
    }

    function onLzReceive(
        uint16 _srcChainId,
        bytes memory _srcAddress,
        uint64 _nonce,
        bytes memory _payload
    ) public {
        // only internal transaction
        require(
            msg.sender == address(this),
            "NonblockingReceiver: caller must be Bridge."
        );

        // handle incoming message
        _LzReceive(_srcChainId, _srcAddress, _nonce, _payload);
    }

    // abstract function
    function _LzReceive(
        uint16 _srcChainId,
        bytes memory _srcAddress,
        uint64 _nonce,
        bytes memory _payload
    ) internal virtual;

    function _lzSend(
        uint16 _dstChainId,
        bytes memory _payload,
        address payable _refundAddress,
        address _zroPaymentAddress,
        bytes memory _txParam
    ) internal {
        endpoint.send{value: msg.value}(
            _dstChainId,
            trustedRemoteLookup[_dstChainId],
            _payload,
            _refundAddress,
            _zroPaymentAddress,
            _txParam
        );
    }

    function retryMessage(
        uint16 _srcChainId,
        bytes memory _srcAddress,
        uint64 _nonce,
        bytes calldata _payload
    ) external payable {
        // assert there is message to retry
        FailedMessages storage failedMsg = failedMessages[_srcChainId][
            _srcAddress
        ][_nonce];
        require(
            failedMsg.payloadHash != bytes32(0),
            "NonblockingReceiver: no stored message"
        );
        require(
            _payload.length == failedMsg.payloadLength &&
                keccak256(_payload) == failedMsg.payloadHash,
            "LayerZero: invalid payload"
        );
        // clear the stored message
        failedMsg.payloadLength = 0;
        failedMsg.payloadHash = bytes32(0);
        // execute the message. revert if it fails again
        this.onLzReceive(_srcChainId, _srcAddress, _nonce, _payload);
    }

    function setTrustedRemote(uint16 _chainId, bytes calldata _trustedRemote)
        external
        onlyOwner
    {
        trustedRemoteLookup[_chainId] = _trustedRemote;
    }
}

// File: contracts/pillowcats-eth.sol

pragma solidity ^0.8.7;

contract OAA is Ownable, ERC721, NonblockingReceiver {
    address public _owner;
    string private baseURI;
    uint256 nextTokenId = 0;
    uint256 MAX_MINT_ETHEREUM = 4444;
    uint256 gasForDestinationLzReceive = 350000;

    constructor(string memory hiddenMetadataUri_, address _layerZeroEndpoint)
        ERC721("Omni Artblock Apes", "OAA")
    {
        _owner = msg.sender;
        endpoint = ILayerZeroEndpoint(_layerZeroEndpoint);
        hiddenMetadataUri = hiddenMetadataUri_;
    }

    // mint function
    // you can choose to mint 1 or 2
    // mint is free, but payments are accepted
    function mint(uint8 numTokens) external payable {
        require(numTokens < 6, "Max 5 NFTs per transaction");
        require(
            nextTokenId + numTokens <= MAX_MINT_ETHEREUM,
            "Mint exceeds supply"
        );
        for(uint i=0;i<numTokens;i++){
            _safeMint(msg.sender, ++nextTokenId);
        }

    }

    // This function transfers the nft from your address on the
    // source chain to the same address on the destination chain
    function traverseChains(uint16 _chainId, uint256 tokenId) public payable {
        require(
            msg.sender == ownerOf(tokenId),
            "You must own the token to traverse"
        );
        require(
            trustedRemoteLookup[_chainId].length > 0,
            "This chain is currently unavailable for travel"
        );

        // burn NFT, eliminating it from circulation on src chain
        _burn(tokenId);

        // abi.encode() the payload with the values to send
        bytes memory payload = abi.encode(msg.sender, tokenId);

        // encode adapterParams to specify more gas for the destination
        uint16 version = 1;
        bytes memory adapterParams = abi.encodePacked(
            version,
            gasForDestinationLzReceive
        );

        // get the fees we need to pay to LayerZero + Relayer to cover message delivery
        // you will be refunded for extra gas paid
        (uint256 messageFee, ) = endpoint.estimateFees(
            _chainId,
            address(this),
            payload,
            false,
            adapterParams
        );

        require(
            msg.value >= messageFee,
            "msg.value not enough to cover messageFee. Send gas for message fees"
        );

        endpoint.send{value: msg.value}(
            _chainId, // destination chainId
            trustedRemoteLookup[_chainId], // destination address of nft contract
            payload, // abi.encoded()'ed bytes
            payable(msg.sender), // refund address
            address(0x0), // 'zroPaymentAddress' unused for this
            adapterParams // txParameters
        );
    }

    function setBaseURI(string memory URI) external onlyOwner {
        baseURI = URI;
    }
    
    function setRevealed(bool _state) public onlyOwner {
    revealed = _state;
    }

    function donate() external payable {
        // thank you
    }

    // This allows the devs to receive kind donations
    function withdraw(uint256 amt) external onlyOwner {
        (bool sent, ) = payable(_owner).call{value: amt}("");
        require(sent, "Failed to withdraw Ether");
    }

    // just in case this fixed variable limits us from future integrations
    function setGasForDestinationLzReceive(uint256 newVal) external onlyOwner {
        gasForDestinationLzReceive = newVal;
    }

    function setUriSuffix(string memory _uriSuffix) public onlyOwner {
    uriSuffix = _uriSuffix;
  }

    // ------------------
    // Internal Functions
    // ------------------

    function _LzReceive(
        uint16 _srcChainId,
        bytes memory _srcAddress,
        uint64 _nonce,
        bytes memory _payload
    ) internal override {
        // decode
        (address toAddr, uint256 tokenId) = abi.decode(
            _payload,
            (address, uint256)
        );

        // mint the tokens back into existence on destination chain
        _safeMint(toAddr, tokenId);
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"hiddenMetadataUri_","type":"string"},{"internalType":"address","name":"_layerZeroEndpoint","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"indexed":false,"internalType":"uint64","name":"_nonce","type":"uint64"},{"indexed":false,"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"MessageFailed","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":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"donate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"failedMessages","outputs":[{"internalType":"uint256","name":"payloadLength","type":"uint256"},{"internalType":"bytes32","name":"payloadHash","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"lzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"numTokens","type":"uint8"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"onLzReceive","outputs":[],"stateMutability":"nonpayable","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":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"retryMessage","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"setGasForDestinationLzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"bytes","name":"_trustedRemote","type":"bytes"}],"name":"setTrustedRemote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"traverseChains","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"trustedRemoteLookup","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c06040526005608081905264173539b7b760d91b60a0908152620000289160039190620001aa565b506009805460ff191690556000600e5561115c600f55620557306010553480156200005257600080fd5b5060405162002fb938038062002fb983398101604081905262000075916200026d565b604051806040016040528060128152602001714f6d6e6920417274626c6f636b204170657360701b815250604051806040016040528060038152602001624f414160e81b815250620000d6620000d06200015660201b60201c565b6200015a565b8151620000eb906001906020850190620001aa565b50805162000101906004906020840190620001aa565b5050600c80546001600160a01b0319163317905550600980546001600160a01b03831661010002610100600160a81b031990911617905581516200014d906002906020850190620001aa565b505050620003b1565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054620001b8906200035e565b90600052602060002090601f016020900481019282620001dc576000855562000227565b82601f10620001f757805160ff191683800117855562000227565b8280016001018555821562000227579182015b82811115620002275782518255916020019190600101906200020a565b506200023592915062000239565b5090565b5b808211156200023557600081556001016200023a565b80516001600160a01b03811681146200026857600080fd5b919050565b600080604083850312156200028157600080fd5b82516001600160401b03808211156200029957600080fd5b818501915085601f830112620002ae57600080fd5b815181811115620002c357620002c36200039b565b604051601f8201601f19908116603f01168101908382118183101715620002ee57620002ee6200039b565b816040528281526020935088848487010111156200030b57600080fd5b600091505b828210156200032f578482018401518183018501529083019062000310565b82821115620003415760008484830101525b95506200035391505085820162000250565b925050509250929050565b600181811c908216806200037357607f821691505b602082108114156200039557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b612bf880620003c16000396000f3fe6080604052600436106101f85760003560e01c80637533d7881161010d578063b88d4fde116100a0578063e0a808531161006f578063e0a80853146105cc578063e985e9c5146105ec578063eb8d72b714610635578063ed88c68e1461021d578063f2fde38b1461065557600080fd5b8063b88d4fde14610566578063c87b56dd14610586578063cf89fa03146105a6578063d1deba1f146105b957600080fd5b806395d89b41116100dc57806395d89b41146104fc578063a22cb46514610511578063a45ba8e714610531578063b2bdfa7b1461054657600080fd5b80637533d788146104335780638da5cb5b146104535780638ee7491214610471578063943fb872146104dc57600080fd5b80632e1a7d4d1161019057806355f804b31161015f57806355f804b31461039d5780636352211e146103bd5780636ecd2306146103dd57806370a08231146103f0578063715018a61461041e57600080fd5b80632e1a7d4d1461032e57806342842e0e1461034e578063518302271461036e5780635503a0e81461038857600080fd5b8063095ea7b3116101cc578063095ea7b3146102ae57806316ba10e0146102ce5780631c37a822146102ee57806323b872dd1461030e57600080fd5b80621d3567146101fd57806301ffc9a71461021f57806306fdde0314610254578063081812fc14610276575b600080fd5b34801561020957600080fd5b5061021d610218366004612567565b610675565b005b34801561022b57600080fd5b5061023f61023a366004612397565b610874565b60405190151581526020015b60405180910390f35b34801561026057600080fd5b506102696108c6565b60405161024b91906127a8565b34801561028257600080fd5b506102966102913660046125fb565b610958565b6040516001600160a01b03909116815260200161024b565b3480156102ba57600080fd5b5061021d6102c9366004612350565b6109ed565b3480156102da57600080fd5b5061021d6102e93660046123d1565b610b03565b3480156102fa57600080fd5b5061021d610309366004612567565b610b44565b34801561031a57600080fd5b5061021d61032936600461226f565b610bb3565b34801561033a57600080fd5b5061021d6103493660046125fb565b610be4565b34801561035a57600080fd5b5061021d61036936600461226f565b610cb1565b34801561037a57600080fd5b5060095461023f9060ff1681565b34801561039457600080fd5b50610269610ccc565b3480156103a957600080fd5b5061021d6103b83660046123d1565b610d5a565b3480156103c957600080fd5b506102966103d83660046125fb565b610d97565b61021d6103eb366004612638565b610e0e565b3480156103fc57600080fd5b5061041061040b3660046121eb565b610ef6565b60405190815260200161024b565b34801561042a57600080fd5b5061021d610f7d565b34801561043f57600080fd5b5061026961044e366004612419565b610fb3565b34801561045f57600080fd5b506000546001600160a01b0316610296565b34801561047d57600080fd5b506104c761048c366004612486565b600a60209081526000938452604080852084518086018401805192815290840195840195909520945292905282529020805460019091015482565b6040805192835260208301919091520161024b565b3480156104e857600080fd5b5061021d6104f73660046125fb565b610fcc565b34801561050857600080fd5b50610269610ffb565b34801561051d57600080fd5b5061021d61052c36600461231b565b61100a565b34801561053d57600080fd5b50610269611015565b34801561055257600080fd5b50600c54610296906001600160a01b031681565b34801561057257600080fd5b5061021d6105813660046122b0565b611022565b34801561059257600080fd5b506102696105a13660046125fb565b611054565b61021d6105b43660046125df565b6111ce565b61021d6105c73660046124dc565b6114b4565b3480156105d857600080fd5b5061021d6105e736600461237c565b611641565b3480156105f857600080fd5b5061023f610607366004612236565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b34801561064157600080fd5b5061021d610650366004612434565b61167e565b34801561066157600080fd5b5061021d6106703660046121eb565b6116c6565b60095461010090046001600160a01b0316331461069157600080fd5b61ffff84166000908152600b6020526040902080546106af90612ad5565b905083511480156106ee575061ffff84166000908152600b60205260409081902090516106dc9190612722565b60405180910390208380519060200120145b61075c5760405162461bcd60e51b815260206004820152603460248201527f4e6f6e626c6f636b696e6752656365697665723a20696e76616c696420736f756044820152731c98d9481cd95b991a5b99c818dbdb9d1c9858dd60621b60648201526084015b60405180910390fd5b604051630e1bd41160e11b81523090631c37a82290610785908790879087908790600401612948565b600060405180830381600087803b15801561079f57600080fd5b505af19250505080156107b0575060015b61086e576040518060400160405280825181526020018280519060200120815250600a60008661ffff1661ffff168152602001908152602001600020846040516107fa9190612706565b9081526040805191829003602090810183206001600160401b038716600090815290825291909120835181559201516001909201919091557fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d90610865908690869086908690612948565b60405180910390a15b50505050565b60006001600160e01b031982166380ac58cd60e01b14806108a557506001600160e01b03198216635b5e139f60e01b145b806108c057506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600180546108d590612ad5565b80601f016020809104026020016040519081016040528092919081815260200182805461090190612ad5565b801561094e5780601f106109235761010080835404028352916020019161094e565b820191906000526020600020905b81548152906001019060200180831161093157829003601f168201915b5050505050905090565b6000818152600560205260408120546001600160a01b03166109d15760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610753565b506000908152600760205260409020546001600160a01b031690565b60006109f882610d97565b9050806001600160a01b0316836001600160a01b03161415610a665760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610753565b336001600160a01b0382161480610a825750610a828133610607565b610af45760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610753565b610afe8383611761565b505050565b6000546001600160a01b03163314610b2d5760405162461bcd60e51b81526004016107539061280d565b8051610b40906003906020840190611fc3565b5050565b333014610ba75760405162461bcd60e51b815260206004820152602b60248201527f4e6f6e626c6f636b696e6752656365697665723a2063616c6c6572206d75737460448201526a10313290213934b233b29760a91b6064820152608401610753565b61086e848484846117cf565b610bbd33826117fc565b610bd95760405162461bcd60e51b815260040161075390612842565b610afe8383836118f3565b6000546001600160a01b03163314610c0e5760405162461bcd60e51b81526004016107539061280d565b600c546040516000916001600160a01b03169083908381818185875af1925050503d8060008114610c5b576040519150601f19603f3d011682016040523d82523d6000602084013e610c60565b606091505b5050905080610b405760405162461bcd60e51b815260206004820152601860248201527f4661696c656420746f20776974686472617720457468657200000000000000006044820152606401610753565b610afe83838360405180602001604052806000815250611022565b60038054610cd990612ad5565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0590612ad5565b8015610d525780601f10610d2757610100808354040283529160200191610d52565b820191906000526020600020905b815481529060010190602001808311610d3557829003601f168201915b505050505081565b6000546001600160a01b03163314610d845760405162461bcd60e51b81526004016107539061280d565b8051610b4090600d906020840190611fc3565b6000818152600560205260408120546001600160a01b0316806108c05760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610753565b60068160ff1610610e615760405162461bcd60e51b815260206004820152601a60248201527f4d61782035204e46547320706572207472616e73616374696f6e0000000000006044820152606401610753565b600f548160ff16600e54610e759190612a66565b1115610eb95760405162461bcd60e51b81526020600482015260136024820152724d696e74206578636565647320737570706c7960681b6044820152606401610753565b60005b8160ff16811015610b4057610ee433600e60008154610eda90612b10565b9182905550611a93565b80610eee81612b10565b915050610ebc565b60006001600160a01b038216610f615760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610753565b506001600160a01b031660009081526006602052604090205490565b6000546001600160a01b03163314610fa75760405162461bcd60e51b81526004016107539061280d565b610fb16000611aad565b565b600b6020526000908152604090208054610cd990612ad5565b6000546001600160a01b03163314610ff65760405162461bcd60e51b81526004016107539061280d565b601055565b6060600480546108d590612ad5565b610b40338383611afd565b60028054610cd990612ad5565b61102c33836117fc565b6110485760405162461bcd60e51b815260040161075390612842565b61086e84848484611bcc565b6000818152600560205260409020546060906001600160a01b03166110d35760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610753565b60095460ff1661116f57600280546110ea90612ad5565b80601f016020809104026020016040519081016040528092919081815260200182805461111690612ad5565b80156111635780601f1061113857610100808354040283529160200191611163565b820191906000526020600020905b81548152906001019060200180831161114657829003601f168201915b50505050509050919050565b6000611179611bff565b9050600081511161119957604051806020016040528060008152506111c7565b806111a384611c0e565b60036040516020016111b79392919061272e565b6040516020818303038152906040525b9392505050565b6111d781610d97565b6001600160a01b0316336001600160a01b0316146112425760405162461bcd60e51b815260206004820152602260248201527f596f75206d757374206f776e2074686520746f6b656e20746f20747261766572604482015261736560f01b6064820152608401610753565b61ffff82166000908152600b60205260408120805461126090612ad5565b9050116112c65760405162461bcd60e51b815260206004820152602e60248201527f5468697320636861696e2069732063757272656e746c7920756e617661696c6160448201526d189b1948199bdc881d1c985d995b60921b6064820152608401610753565b6112cf81611d0b565b60408051336020820152808201839052815180820383018152606082018352601054600160f01b60808401526082808401919091528351808403909101815260a283019384905260095463040a7bb160e41b909452909260019260009161010090046001600160a01b0316906340a7bb1090611357908990309089908790899060a601612893565b604080518083038186803b15801561136e57600080fd5b505afa158015611382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a69190612614565b5090508034101561142b5760405162461bcd60e51b815260206004820152604360248201527f6d73672e76616c7565206e6f7420656e6f75676820746f20636f766572206d6560448201527f73736167654665652e2053656e642067617320666f72206d657373616765206660648201526265657360e81b608482015260a401610753565b60095461ffff87166000908152600b6020526040808220905162c5803160e81b81526101009093046001600160a01b03169263c580310092349261147a928c928b913391908b90600401612986565b6000604051808303818588803b15801561149357600080fd5b505af11580156114a7573d6000803e3d6000fd5b5050505050505050505050565b61ffff85166000908152600a602052604080822090516114d5908790612706565b90815260408051602092819003830190206001600160401b038716600090815292529020600181015490915061155c5760405162461bcd60e51b815260206004820152602660248201527f4e6f6e626c6f636b696e6752656365697665723a206e6f2073746f726564206d60448201526565737361676560d01b6064820152608401610753565b80548214801561158657508060010154838360405161157c9291906126f6565b6040518091039020145b6115d25760405162461bcd60e51b815260206004820152601a60248201527f4c617965725a65726f3a20696e76616c6964207061796c6f61640000000000006044820152606401610753565b60008082556001820155604051630e1bd41160e11b81523090631c37a8229061160790899089908990899089906004016128e7565b600060405180830381600087803b15801561162157600080fd5b505af1158015611635573d6000803e3d6000fd5b50505050505050505050565b6000546001600160a01b0316331461166b5760405162461bcd60e51b81526004016107539061280d565b6009805460ff1916911515919091179055565b6000546001600160a01b031633146116a85760405162461bcd60e51b81526004016107539061280d565b61ffff83166000908152600b6020526040902061086e908383612047565b6000546001600160a01b031633146116f05760405162461bcd60e51b81526004016107539061280d565b6001600160a01b0381166117555760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610753565b61175e81611aad565b50565b600081815260076020526040902080546001600160a01b0319166001600160a01b038416908117909155819061179682610d97565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080828060200190518101906117e69190612208565b915091506117f48282611a93565b505050505050565b6000818152600560205260408120546001600160a01b03166118755760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610753565b600061188083610d97565b9050806001600160a01b0316846001600160a01b031614806118bb5750836001600160a01b03166118b084610958565b6001600160a01b0316145b806118eb57506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661190682610d97565b6001600160a01b03161461196e5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610753565b6001600160a01b0382166119d05760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610753565b6119db600082611761565b6001600160a01b0383166000908152600660205260408120805460019290611a04908490612a92565b90915550506001600160a01b0382166000908152600660205260408120805460019290611a32908490612a66565b909155505060008181526005602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610b40828260405180602001604052806000815250611da6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b816001600160a01b0316836001600160a01b03161415611b5f5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610753565b6001600160a01b03838116600081815260086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611bd78484846118f3565b611be384848484611dd9565b61086e5760405162461bcd60e51b8152600401610753906127bb565b6060600d80546108d590612ad5565b606081611c325750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611c5c5780611c4681612b10565b9150611c559050600a83612a7e565b9150611c36565b6000816001600160401b03811115611c7657611c76612b81565b6040519080825280601f01601f191660200182016040528015611ca0576020820181803683370190505b5090505b84156118eb57611cb5600183612a92565b9150611cc2600a86612b2b565b611ccd906030612a66565b60f81b818381518110611ce257611ce2612b6b565b60200101906001600160f81b031916908160001a905350611d04600a86612a7e565b9450611ca4565b6000611d1682610d97565b9050611d23600083611761565b6001600160a01b0381166000908152600660205260408120805460019290611d4c908490612a92565b909155505060008281526005602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b611db08383611ee6565b611dbd6000848484611dd9565b610afe5760405162461bcd60e51b8152600401610753906127bb565b60006001600160a01b0384163b15611edb57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611e1d90339089908890889060040161276b565b602060405180830381600087803b158015611e3757600080fd5b505af1925050508015611e67575060408051601f3d908101601f19168201909252611e64918101906123b4565b60015b611ec1573d808015611e95576040519150601f19603f3d011682016040523d82523d6000602084013e611e9a565b606091505b508051611eb95760405162461bcd60e51b8152600401610753906127bb565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506118eb565b506001949350505050565b6001600160a01b038216611f3c5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610753565b6001600160a01b0382166000908152600660205260408120805460019290611f65908490612a66565b909155505060008181526005602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611fcf90612ad5565b90600052602060002090601f016020900481019282611ff15760008555612037565b82601f1061200a57805160ff1916838001178555612037565b82800160010185558215612037579182015b8281111561203757825182559160200191906001019061201c565b506120439291506120bb565b5090565b82805461205390612ad5565b90600052602060002090601f0160209004810192826120755760008555612037565b82601f1061208e5782800160ff19823516178555612037565b82800160010185558215612037579182015b828111156120375782358255916020019190600101906120a0565b5b8082111561204357600081556001016120bc565b60006001600160401b03808411156120ea576120ea612b81565b604051601f8501601f19908116603f0116810190828211818310171561211257612112612b81565b8160405280935085815286868601111561212b57600080fd5b858560208301376000602087830101525050509392505050565b8035801515811461215557600080fd5b919050565b60008083601f84011261216c57600080fd5b5081356001600160401b0381111561218357600080fd5b60208301915083602082850101111561219b57600080fd5b9250929050565b600082601f8301126121b357600080fd5b6111c7838335602085016120d0565b803561ffff8116811461215557600080fd5b80356001600160401b038116811461215557600080fd5b6000602082840312156121fd57600080fd5b81356111c781612b97565b6000806040838503121561221b57600080fd5b825161222681612b97565b6020939093015192949293505050565b6000806040838503121561224957600080fd5b823561225481612b97565b9150602083013561226481612b97565b809150509250929050565b60008060006060848603121561228457600080fd5b833561228f81612b97565b9250602084013561229f81612b97565b929592945050506040919091013590565b600080600080608085870312156122c657600080fd5b84356122d181612b97565b935060208501356122e181612b97565b92506040850135915060608501356001600160401b0381111561230357600080fd5b61230f878288016121a2565b91505092959194509250565b6000806040838503121561232e57600080fd5b823561233981612b97565b915061234760208401612145565b90509250929050565b6000806040838503121561236357600080fd5b823561236e81612b97565b946020939093013593505050565b60006020828403121561238e57600080fd5b6111c782612145565b6000602082840312156123a957600080fd5b81356111c781612bac565b6000602082840312156123c657600080fd5b81516111c781612bac565b6000602082840312156123e357600080fd5b81356001600160401b038111156123f957600080fd5b8201601f8101841361240a57600080fd5b6118eb848235602084016120d0565b60006020828403121561242b57600080fd5b6111c7826121c2565b60008060006040848603121561244957600080fd5b612452846121c2565b925060208401356001600160401b0381111561246d57600080fd5b6124798682870161215a565b9497909650939450505050565b60008060006060848603121561249b57600080fd5b6124a4846121c2565b925060208401356001600160401b038111156124bf57600080fd5b6124cb868287016121a2565b925050604084013590509250925092565b6000806000806000608086880312156124f457600080fd5b6124fd866121c2565b945060208601356001600160401b038082111561251957600080fd5b61252589838a016121a2565b9550612533604089016121d4565b9450606088013591508082111561254957600080fd5b506125568882890161215a565b969995985093965092949392505050565b6000806000806080858703121561257d57600080fd5b612586856121c2565b935060208501356001600160401b03808211156125a257600080fd5b6125ae888389016121a2565b94506125bc604088016121d4565b935060608701359150808211156125d257600080fd5b5061230f878288016121a2565b600080604083850312156125f257600080fd5b61236e836121c2565b60006020828403121561260d57600080fd5b5035919050565b6000806040838503121561262757600080fd5b505080516020909101519092909150565b60006020828403121561264a57600080fd5b813560ff811681146111c757600080fd5b60008151808452612673816020860160208601612aa9565b601f01601f19169290920160200192915050565b6000815461269481612ad5565b600182811680156126ac57600181146126bd576126ec565b60ff198416875282870194506126ec565b8560005260208060002060005b858110156126e35781548a8201529084019082016126ca565b50505082870194505b5050505092915050565b8183823760009101908152919050565b60008251612718818460208701612aa9565b9190910192915050565b60006111c78284612687565b60008451612740818460208901612aa9565b845190830190612754818360208901612aa9565b61276081830186612687565b979650505050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061279e9083018461265b565b9695505050505050565b6020815260006111c7602083018461265b565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b61ffff861681526001600160a01b038516602082015260a0604082018190526000906128c19083018661265b565b841515606084015282810360808401526128db818561265b565b98975050505050505050565b61ffff86168152608060208201526000612904608083018761265b565b6001600160401b03861660408401528281036060840152838152838560208301376000602085830101526020601f19601f8601168201019150509695505050505050565b61ffff85168152608060208201526000612965608083018661265b565b6001600160401b03851660408401528281036060840152612760818561265b565b61ffff871681526000602060c081840152600088546129a481612ad5565b8060c087015260e06001808416600081146129c657600181146129db57612a09565b60ff1985168984015261010089019550612a09565b8d6000528660002060005b85811015612a015781548b82018601529083019088016129e6565b8a0184019650505b50505050508381036040850152612a20818961265b565b915050612a3860608401876001600160a01b03169052565b6001600160a01b038516608084015282810360a0840152612a59818561265b565b9998505050505050505050565b60008219821115612a7957612a79612b3f565b500190565b600082612a8d57612a8d612b55565b500490565b600082821015612aa457612aa4612b3f565b500390565b60005b83811015612ac4578181015183820152602001612aac565b8381111561086e5750506000910152565b600181811c90821680612ae957607f821691505b60208210811415612b0a57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612b2457612b24612b3f565b5060010190565b600082612b3a57612b3a612b55565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461175e57600080fd5b6001600160e01b03198116811461175e57600080fdfea2646970667358221220895852eff1705ddeef7c1f0eab3667ed2fdf39865e1a161497f3e3452481a62a64736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000004c71de340b06926d502d3deeec069a5751c280060000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d5865335a59766b344c53677a556574436e61564d36435062464c4c6a3751776a4d7175617544577a53635a550000000000000000000000

Deployed Bytecode

0x6080604052600436106101f85760003560e01c80637533d7881161010d578063b88d4fde116100a0578063e0a808531161006f578063e0a80853146105cc578063e985e9c5146105ec578063eb8d72b714610635578063ed88c68e1461021d578063f2fde38b1461065557600080fd5b8063b88d4fde14610566578063c87b56dd14610586578063cf89fa03146105a6578063d1deba1f146105b957600080fd5b806395d89b41116100dc57806395d89b41146104fc578063a22cb46514610511578063a45ba8e714610531578063b2bdfa7b1461054657600080fd5b80637533d788146104335780638da5cb5b146104535780638ee7491214610471578063943fb872146104dc57600080fd5b80632e1a7d4d1161019057806355f804b31161015f57806355f804b31461039d5780636352211e146103bd5780636ecd2306146103dd57806370a08231146103f0578063715018a61461041e57600080fd5b80632e1a7d4d1461032e57806342842e0e1461034e578063518302271461036e5780635503a0e81461038857600080fd5b8063095ea7b3116101cc578063095ea7b3146102ae57806316ba10e0146102ce5780631c37a822146102ee57806323b872dd1461030e57600080fd5b80621d3567146101fd57806301ffc9a71461021f57806306fdde0314610254578063081812fc14610276575b600080fd5b34801561020957600080fd5b5061021d610218366004612567565b610675565b005b34801561022b57600080fd5b5061023f61023a366004612397565b610874565b60405190151581526020015b60405180910390f35b34801561026057600080fd5b506102696108c6565b60405161024b91906127a8565b34801561028257600080fd5b506102966102913660046125fb565b610958565b6040516001600160a01b03909116815260200161024b565b3480156102ba57600080fd5b5061021d6102c9366004612350565b6109ed565b3480156102da57600080fd5b5061021d6102e93660046123d1565b610b03565b3480156102fa57600080fd5b5061021d610309366004612567565b610b44565b34801561031a57600080fd5b5061021d61032936600461226f565b610bb3565b34801561033a57600080fd5b5061021d6103493660046125fb565b610be4565b34801561035a57600080fd5b5061021d61036936600461226f565b610cb1565b34801561037a57600080fd5b5060095461023f9060ff1681565b34801561039457600080fd5b50610269610ccc565b3480156103a957600080fd5b5061021d6103b83660046123d1565b610d5a565b3480156103c957600080fd5b506102966103d83660046125fb565b610d97565b61021d6103eb366004612638565b610e0e565b3480156103fc57600080fd5b5061041061040b3660046121eb565b610ef6565b60405190815260200161024b565b34801561042a57600080fd5b5061021d610f7d565b34801561043f57600080fd5b5061026961044e366004612419565b610fb3565b34801561045f57600080fd5b506000546001600160a01b0316610296565b34801561047d57600080fd5b506104c761048c366004612486565b600a60209081526000938452604080852084518086018401805192815290840195840195909520945292905282529020805460019091015482565b6040805192835260208301919091520161024b565b3480156104e857600080fd5b5061021d6104f73660046125fb565b610fcc565b34801561050857600080fd5b50610269610ffb565b34801561051d57600080fd5b5061021d61052c36600461231b565b61100a565b34801561053d57600080fd5b50610269611015565b34801561055257600080fd5b50600c54610296906001600160a01b031681565b34801561057257600080fd5b5061021d6105813660046122b0565b611022565b34801561059257600080fd5b506102696105a13660046125fb565b611054565b61021d6105b43660046125df565b6111ce565b61021d6105c73660046124dc565b6114b4565b3480156105d857600080fd5b5061021d6105e736600461237c565b611641565b3480156105f857600080fd5b5061023f610607366004612236565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b34801561064157600080fd5b5061021d610650366004612434565b61167e565b34801561066157600080fd5b5061021d6106703660046121eb565b6116c6565b60095461010090046001600160a01b0316331461069157600080fd5b61ffff84166000908152600b6020526040902080546106af90612ad5565b905083511480156106ee575061ffff84166000908152600b60205260409081902090516106dc9190612722565b60405180910390208380519060200120145b61075c5760405162461bcd60e51b815260206004820152603460248201527f4e6f6e626c6f636b696e6752656365697665723a20696e76616c696420736f756044820152731c98d9481cd95b991a5b99c818dbdb9d1c9858dd60621b60648201526084015b60405180910390fd5b604051630e1bd41160e11b81523090631c37a82290610785908790879087908790600401612948565b600060405180830381600087803b15801561079f57600080fd5b505af19250505080156107b0575060015b61086e576040518060400160405280825181526020018280519060200120815250600a60008661ffff1661ffff168152602001908152602001600020846040516107fa9190612706565b9081526040805191829003602090810183206001600160401b038716600090815290825291909120835181559201516001909201919091557fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d90610865908690869086908690612948565b60405180910390a15b50505050565b60006001600160e01b031982166380ac58cd60e01b14806108a557506001600160e01b03198216635b5e139f60e01b145b806108c057506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600180546108d590612ad5565b80601f016020809104026020016040519081016040528092919081815260200182805461090190612ad5565b801561094e5780601f106109235761010080835404028352916020019161094e565b820191906000526020600020905b81548152906001019060200180831161093157829003601f168201915b5050505050905090565b6000818152600560205260408120546001600160a01b03166109d15760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610753565b506000908152600760205260409020546001600160a01b031690565b60006109f882610d97565b9050806001600160a01b0316836001600160a01b03161415610a665760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610753565b336001600160a01b0382161480610a825750610a828133610607565b610af45760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610753565b610afe8383611761565b505050565b6000546001600160a01b03163314610b2d5760405162461bcd60e51b81526004016107539061280d565b8051610b40906003906020840190611fc3565b5050565b333014610ba75760405162461bcd60e51b815260206004820152602b60248201527f4e6f6e626c6f636b696e6752656365697665723a2063616c6c6572206d75737460448201526a10313290213934b233b29760a91b6064820152608401610753565b61086e848484846117cf565b610bbd33826117fc565b610bd95760405162461bcd60e51b815260040161075390612842565b610afe8383836118f3565b6000546001600160a01b03163314610c0e5760405162461bcd60e51b81526004016107539061280d565b600c546040516000916001600160a01b03169083908381818185875af1925050503d8060008114610c5b576040519150601f19603f3d011682016040523d82523d6000602084013e610c60565b606091505b5050905080610b405760405162461bcd60e51b815260206004820152601860248201527f4661696c656420746f20776974686472617720457468657200000000000000006044820152606401610753565b610afe83838360405180602001604052806000815250611022565b60038054610cd990612ad5565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0590612ad5565b8015610d525780601f10610d2757610100808354040283529160200191610d52565b820191906000526020600020905b815481529060010190602001808311610d3557829003601f168201915b505050505081565b6000546001600160a01b03163314610d845760405162461bcd60e51b81526004016107539061280d565b8051610b4090600d906020840190611fc3565b6000818152600560205260408120546001600160a01b0316806108c05760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610753565b60068160ff1610610e615760405162461bcd60e51b815260206004820152601a60248201527f4d61782035204e46547320706572207472616e73616374696f6e0000000000006044820152606401610753565b600f548160ff16600e54610e759190612a66565b1115610eb95760405162461bcd60e51b81526020600482015260136024820152724d696e74206578636565647320737570706c7960681b6044820152606401610753565b60005b8160ff16811015610b4057610ee433600e60008154610eda90612b10565b9182905550611a93565b80610eee81612b10565b915050610ebc565b60006001600160a01b038216610f615760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610753565b506001600160a01b031660009081526006602052604090205490565b6000546001600160a01b03163314610fa75760405162461bcd60e51b81526004016107539061280d565b610fb16000611aad565b565b600b6020526000908152604090208054610cd990612ad5565b6000546001600160a01b03163314610ff65760405162461bcd60e51b81526004016107539061280d565b601055565b6060600480546108d590612ad5565b610b40338383611afd565b60028054610cd990612ad5565b61102c33836117fc565b6110485760405162461bcd60e51b815260040161075390612842565b61086e84848484611bcc565b6000818152600560205260409020546060906001600160a01b03166110d35760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610753565b60095460ff1661116f57600280546110ea90612ad5565b80601f016020809104026020016040519081016040528092919081815260200182805461111690612ad5565b80156111635780601f1061113857610100808354040283529160200191611163565b820191906000526020600020905b81548152906001019060200180831161114657829003601f168201915b50505050509050919050565b6000611179611bff565b9050600081511161119957604051806020016040528060008152506111c7565b806111a384611c0e565b60036040516020016111b79392919061272e565b6040516020818303038152906040525b9392505050565b6111d781610d97565b6001600160a01b0316336001600160a01b0316146112425760405162461bcd60e51b815260206004820152602260248201527f596f75206d757374206f776e2074686520746f6b656e20746f20747261766572604482015261736560f01b6064820152608401610753565b61ffff82166000908152600b60205260408120805461126090612ad5565b9050116112c65760405162461bcd60e51b815260206004820152602e60248201527f5468697320636861696e2069732063757272656e746c7920756e617661696c6160448201526d189b1948199bdc881d1c985d995b60921b6064820152608401610753565b6112cf81611d0b565b60408051336020820152808201839052815180820383018152606082018352601054600160f01b60808401526082808401919091528351808403909101815260a283019384905260095463040a7bb160e41b909452909260019260009161010090046001600160a01b0316906340a7bb1090611357908990309089908790899060a601612893565b604080518083038186803b15801561136e57600080fd5b505afa158015611382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a69190612614565b5090508034101561142b5760405162461bcd60e51b815260206004820152604360248201527f6d73672e76616c7565206e6f7420656e6f75676820746f20636f766572206d6560448201527f73736167654665652e2053656e642067617320666f72206d657373616765206660648201526265657360e81b608482015260a401610753565b60095461ffff87166000908152600b6020526040808220905162c5803160e81b81526101009093046001600160a01b03169263c580310092349261147a928c928b913391908b90600401612986565b6000604051808303818588803b15801561149357600080fd5b505af11580156114a7573d6000803e3d6000fd5b5050505050505050505050565b61ffff85166000908152600a602052604080822090516114d5908790612706565b90815260408051602092819003830190206001600160401b038716600090815292529020600181015490915061155c5760405162461bcd60e51b815260206004820152602660248201527f4e6f6e626c6f636b696e6752656365697665723a206e6f2073746f726564206d60448201526565737361676560d01b6064820152608401610753565b80548214801561158657508060010154838360405161157c9291906126f6565b6040518091039020145b6115d25760405162461bcd60e51b815260206004820152601a60248201527f4c617965725a65726f3a20696e76616c6964207061796c6f61640000000000006044820152606401610753565b60008082556001820155604051630e1bd41160e11b81523090631c37a8229061160790899089908990899089906004016128e7565b600060405180830381600087803b15801561162157600080fd5b505af1158015611635573d6000803e3d6000fd5b50505050505050505050565b6000546001600160a01b0316331461166b5760405162461bcd60e51b81526004016107539061280d565b6009805460ff1916911515919091179055565b6000546001600160a01b031633146116a85760405162461bcd60e51b81526004016107539061280d565b61ffff83166000908152600b6020526040902061086e908383612047565b6000546001600160a01b031633146116f05760405162461bcd60e51b81526004016107539061280d565b6001600160a01b0381166117555760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610753565b61175e81611aad565b50565b600081815260076020526040902080546001600160a01b0319166001600160a01b038416908117909155819061179682610d97565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080828060200190518101906117e69190612208565b915091506117f48282611a93565b505050505050565b6000818152600560205260408120546001600160a01b03166118755760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610753565b600061188083610d97565b9050806001600160a01b0316846001600160a01b031614806118bb5750836001600160a01b03166118b084610958565b6001600160a01b0316145b806118eb57506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661190682610d97565b6001600160a01b03161461196e5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610753565b6001600160a01b0382166119d05760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610753565b6119db600082611761565b6001600160a01b0383166000908152600660205260408120805460019290611a04908490612a92565b90915550506001600160a01b0382166000908152600660205260408120805460019290611a32908490612a66565b909155505060008181526005602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610b40828260405180602001604052806000815250611da6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b816001600160a01b0316836001600160a01b03161415611b5f5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610753565b6001600160a01b03838116600081815260086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611bd78484846118f3565b611be384848484611dd9565b61086e5760405162461bcd60e51b8152600401610753906127bb565b6060600d80546108d590612ad5565b606081611c325750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611c5c5780611c4681612b10565b9150611c559050600a83612a7e565b9150611c36565b6000816001600160401b03811115611c7657611c76612b81565b6040519080825280601f01601f191660200182016040528015611ca0576020820181803683370190505b5090505b84156118eb57611cb5600183612a92565b9150611cc2600a86612b2b565b611ccd906030612a66565b60f81b818381518110611ce257611ce2612b6b565b60200101906001600160f81b031916908160001a905350611d04600a86612a7e565b9450611ca4565b6000611d1682610d97565b9050611d23600083611761565b6001600160a01b0381166000908152600660205260408120805460019290611d4c908490612a92565b909155505060008281526005602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b611db08383611ee6565b611dbd6000848484611dd9565b610afe5760405162461bcd60e51b8152600401610753906127bb565b60006001600160a01b0384163b15611edb57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611e1d90339089908890889060040161276b565b602060405180830381600087803b158015611e3757600080fd5b505af1925050508015611e67575060408051601f3d908101601f19168201909252611e64918101906123b4565b60015b611ec1573d808015611e95576040519150601f19603f3d011682016040523d82523d6000602084013e611e9a565b606091505b508051611eb95760405162461bcd60e51b8152600401610753906127bb565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506118eb565b506001949350505050565b6001600160a01b038216611f3c5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610753565b6001600160a01b0382166000908152600660205260408120805460019290611f65908490612a66565b909155505060008181526005602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611fcf90612ad5565b90600052602060002090601f016020900481019282611ff15760008555612037565b82601f1061200a57805160ff1916838001178555612037565b82800160010185558215612037579182015b8281111561203757825182559160200191906001019061201c565b506120439291506120bb565b5090565b82805461205390612ad5565b90600052602060002090601f0160209004810192826120755760008555612037565b82601f1061208e5782800160ff19823516178555612037565b82800160010185558215612037579182015b828111156120375782358255916020019190600101906120a0565b5b8082111561204357600081556001016120bc565b60006001600160401b03808411156120ea576120ea612b81565b604051601f8501601f19908116603f0116810190828211818310171561211257612112612b81565b8160405280935085815286868601111561212b57600080fd5b858560208301376000602087830101525050509392505050565b8035801515811461215557600080fd5b919050565b60008083601f84011261216c57600080fd5b5081356001600160401b0381111561218357600080fd5b60208301915083602082850101111561219b57600080fd5b9250929050565b600082601f8301126121b357600080fd5b6111c7838335602085016120d0565b803561ffff8116811461215557600080fd5b80356001600160401b038116811461215557600080fd5b6000602082840312156121fd57600080fd5b81356111c781612b97565b6000806040838503121561221b57600080fd5b825161222681612b97565b6020939093015192949293505050565b6000806040838503121561224957600080fd5b823561225481612b97565b9150602083013561226481612b97565b809150509250929050565b60008060006060848603121561228457600080fd5b833561228f81612b97565b9250602084013561229f81612b97565b929592945050506040919091013590565b600080600080608085870312156122c657600080fd5b84356122d181612b97565b935060208501356122e181612b97565b92506040850135915060608501356001600160401b0381111561230357600080fd5b61230f878288016121a2565b91505092959194509250565b6000806040838503121561232e57600080fd5b823561233981612b97565b915061234760208401612145565b90509250929050565b6000806040838503121561236357600080fd5b823561236e81612b97565b946020939093013593505050565b60006020828403121561238e57600080fd5b6111c782612145565b6000602082840312156123a957600080fd5b81356111c781612bac565b6000602082840312156123c657600080fd5b81516111c781612bac565b6000602082840312156123e357600080fd5b81356001600160401b038111156123f957600080fd5b8201601f8101841361240a57600080fd5b6118eb848235602084016120d0565b60006020828403121561242b57600080fd5b6111c7826121c2565b60008060006040848603121561244957600080fd5b612452846121c2565b925060208401356001600160401b0381111561246d57600080fd5b6124798682870161215a565b9497909650939450505050565b60008060006060848603121561249b57600080fd5b6124a4846121c2565b925060208401356001600160401b038111156124bf57600080fd5b6124cb868287016121a2565b925050604084013590509250925092565b6000806000806000608086880312156124f457600080fd5b6124fd866121c2565b945060208601356001600160401b038082111561251957600080fd5b61252589838a016121a2565b9550612533604089016121d4565b9450606088013591508082111561254957600080fd5b506125568882890161215a565b969995985093965092949392505050565b6000806000806080858703121561257d57600080fd5b612586856121c2565b935060208501356001600160401b03808211156125a257600080fd5b6125ae888389016121a2565b94506125bc604088016121d4565b935060608701359150808211156125d257600080fd5b5061230f878288016121a2565b600080604083850312156125f257600080fd5b61236e836121c2565b60006020828403121561260d57600080fd5b5035919050565b6000806040838503121561262757600080fd5b505080516020909101519092909150565b60006020828403121561264a57600080fd5b813560ff811681146111c757600080fd5b60008151808452612673816020860160208601612aa9565b601f01601f19169290920160200192915050565b6000815461269481612ad5565b600182811680156126ac57600181146126bd576126ec565b60ff198416875282870194506126ec565b8560005260208060002060005b858110156126e35781548a8201529084019082016126ca565b50505082870194505b5050505092915050565b8183823760009101908152919050565b60008251612718818460208701612aa9565b9190910192915050565b60006111c78284612687565b60008451612740818460208901612aa9565b845190830190612754818360208901612aa9565b61276081830186612687565b979650505050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061279e9083018461265b565b9695505050505050565b6020815260006111c7602083018461265b565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b61ffff861681526001600160a01b038516602082015260a0604082018190526000906128c19083018661265b565b841515606084015282810360808401526128db818561265b565b98975050505050505050565b61ffff86168152608060208201526000612904608083018761265b565b6001600160401b03861660408401528281036060840152838152838560208301376000602085830101526020601f19601f8601168201019150509695505050505050565b61ffff85168152608060208201526000612965608083018661265b565b6001600160401b03851660408401528281036060840152612760818561265b565b61ffff871681526000602060c081840152600088546129a481612ad5565b8060c087015260e06001808416600081146129c657600181146129db57612a09565b60ff1985168984015261010089019550612a09565b8d6000528660002060005b85811015612a015781548b82018601529083019088016129e6565b8a0184019650505b50505050508381036040850152612a20818961265b565b915050612a3860608401876001600160a01b03169052565b6001600160a01b038516608084015282810360a0840152612a59818561265b565b9998505050505050505050565b60008219821115612a7957612a79612b3f565b500190565b600082612a8d57612a8d612b55565b500490565b600082821015612aa457612aa4612b3f565b500390565b60005b83811015612ac4578181015183820152602001612aac565b8381111561086e5750506000910152565b600181811c90821680612ae957607f821691505b60208210811415612b0a57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612b2457612b24612b3f565b5060010190565b600082612b3a57612b3a612b55565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461175e57600080fd5b6001600160e01b03198116811461175e57600080fdfea2646970667358221220895852eff1705ddeef7c1f0eab3667ed2fdf39865e1a161497f3e3452481a62a64736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000400000000000000000000000004c71de340b06926d502d3deeec069a5751c280060000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d5865335a59766b344c53677a556574436e61564d36435062464c4c6a3751776a4d7175617544577a53635a550000000000000000000000

-----Decoded View---------------
Arg [0] : hiddenMetadataUri_ (string): ipfs://QmXe3ZYvk4LSgzUetCnaVM6CPbFLLj7QwjMquauDWzScZU
Arg [1] : _layerZeroEndpoint (address): 0x4C71dE340b06926d502d3deEeC069a5751c28006

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000004c71de340b06926d502d3deeec069a5751c28006
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [3] : 697066733a2f2f516d5865335a59766b344c53677a556574436e61564d364350
Arg [4] : 62464c4c6a3751776a4d7175617544577a53635a550000000000000000000000


Deployed Bytecode Sourcemap

50385:4247:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47004:1098;;;;;;;;;;-1:-1:-1;47004:1098:0;;;;;:::i;:::-;;:::i;:::-;;32972:355;;;;;;;;;;-1:-1:-1;32972:355:0;;;;;:::i;:::-;;:::i;:::-;;;13210:14:1;;13203:22;13185:41;;13173:2;13158:18;32972:355:0;;;;;;;;34141:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;35929:308::-;;;;;;;;;;-1:-1:-1;35929:308:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;12229:32:1;;;12211:51;;12199:2;12184:18;35929:308:0;12065:203:1;35452:411:0;;;;;;;;;;-1:-1:-1;35452:411:0;;;;;:::i;:::-;;:::i;53906:100::-;;;;;;;;;;-1:-1:-1;53906:100:0;;;;;:::i;:::-;;:::i;48110:435::-;;;;;;;;;;-1:-1:-1;48110:435:0;;;;;:::i;:::-;;:::i;36848:376::-;;;;;;;;;;-1:-1:-1;36848:376:0;;;;;:::i;:::-;;:::i;53513:173::-;;;;;;;;;;-1:-1:-1;53513:173:0;;;;;:::i;:::-;;:::i;37295:185::-;;;;;;;;;;-1:-1:-1;37295:185:0;;;;;:::i;:::-;;:::i;32631:28::-;;;;;;;;;;-1:-1:-1;32631:28:0;;;;;;;;32100:33;;;;;;;;;;;;;:::i;53192:90::-;;;;;;;;;;-1:-1:-1;53192:90:0;;;;;:::i;:::-;;:::i;33748:326::-;;;;;;;;;;-1:-1:-1;33748:326:0;;;;;:::i;:::-;;:::i;51010:347::-;;;;;;:::i;:::-;;:::i;33391:295::-;;;;;;;;;;-1:-1:-1;33391:295:0;;;;;:::i;:::-;;:::i;:::-;;;27229:25:1;;;27217:2;27202:18;33391:295:0;27083:177:1;13161:103:0;;;;;;;;;;;;;:::i;46803:51::-;;;;;;;;;;-1:-1:-1;46803:51:0;;;;;:::i;:::-;;:::i;12510:87::-;;;;;;;;;;-1:-1:-1;12556:7:0;12583:6;-1:-1:-1;;;;;12583:6:0;12510:87;;46694:102;;;;;;;;;;-1:-1:-1;46694:102:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27439:25:1;;;27495:2;27480:18;;27473:34;;;;27412:18;46694:102:0;27265:248:1;53770:128:0;;;;;;;;;;-1:-1:-1;53770:128:0;;;;;:::i;:::-;;:::i;34310:104::-;;;;;;;;;;;;;:::i;36309:187::-;;;;;;;;;;-1:-1:-1;36309:187:0;;;;;:::i;:::-;;:::i;32056:31::-;;;;;;;;;;;;;:::i;50445:21::-;;;;;;;;;;-1:-1:-1;50445:21:0;;;;-1:-1:-1;;;;;50445:21:0;;;37551:365;;;;;;;;;;-1:-1:-1;37551:365:0;;;;;:::i;:::-;;:::i;34485:563::-;;;;;;;;;;-1:-1:-1;34485:563:0;;;;;:::i;:::-;;:::i;51496:1688::-;;;;;;:::i;:::-;;:::i;49205:916::-;;;;;;:::i;:::-;;:::i;53294:83::-;;;;;;;;;;-1:-1:-1;53294:83:0;;;;;:::i;:::-;;:::i;36567:214::-;;;;;;;;;;-1:-1:-1;36567:214:0;;;;;:::i;:::-;-1:-1:-1;;;;;36738:25:0;;;36709:4;36738:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;36567:214;50129:181;;;;;;;;;;-1:-1:-1;50129:181:0;;;;;:::i;:::-;;:::i;13419:238::-;;;;;;;;;;-1:-1:-1;13419:238:0;;;;;:::i;:::-;;:::i;47004:1098::-;47209:8;;;;;-1:-1:-1;;;;;47209:8:0;47187:10;:31;47179:40;;;;;;47344:32;;;;;;;:19;:32;;;;;:39;;;;;:::i;:::-;;;47322:11;:18;:61;:168;;;;-1:-1:-1;47457:32:0;;;;;;;:19;:32;;;;;;;47447:43;;;;47457:32;47447:43;:::i;:::-;;;;;;;;47414:11;47404:22;;;;;;:86;47322:168;47300:270;;;;-1:-1:-1;;;47300:270:0;;21028:2:1;47300:270:0;;;21010:21:1;21067:2;21047:18;;;21040:30;21106:34;21086:18;;;21079:62;-1:-1:-1;;;21157:18:1;;;21150:50;21217:19;;47300:270:0;;;;;;;;;47698:60;;-1:-1:-1;;;47698:60:0;;:4;;:16;;:60;;47715:11;;47728;;47741:6;;47749:8;;47698:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47694:401;;47905:101;;;;;;;;47938:8;:15;47905:101;;;;47982:8;47972:19;;;;;;47905:101;;;47854:14;:27;47869:11;47854:27;;;;;;;;;;;;;;;47882:11;47854:40;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;47854:48:0;;;;;;;;;;;;;:152;;;;;;;;;;;;;;;48026:57;;;;48040:11;;48053;;47895:6;;48074:8;;48026:57;:::i;:::-;;;;;;;;47694:401;47004:1098;;;;:::o;32972:355::-;33119:4;-1:-1:-1;;;;;;33161:40:0;;-1:-1:-1;;;33161:40:0;;:105;;-1:-1:-1;;;;;;;33218:48:0;;-1:-1:-1;;;33218:48:0;33161:105;:158;;;-1:-1:-1;;;;;;;;;;25595:40:0;;;33283:36;33141:178;32972:355;-1:-1:-1;;32972:355:0:o;34141:100::-;34195:13;34228:5;34221:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34141:100;:::o;35929:308::-;36050:7;39552:16;;;:7;:16;;;;;;-1:-1:-1;;;;;39552:16:0;36075:110;;;;-1:-1:-1;;;36075:110:0;;19899:2:1;36075:110:0;;;19881:21:1;19938:2;19918:18;;;19911:30;19977:34;19957:18;;;19950:62;-1:-1:-1;;;20028:18:1;;;20021:42;20080:19;;36075:110:0;19697:408:1;36075:110:0;-1:-1:-1;36205:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;36205:24:0;;35929:308::o;35452:411::-;35533:13;35549:23;35564:7;35549:14;:23::i;:::-;35533:39;;35597:5;-1:-1:-1;;;;;35591:11:0;:2;-1:-1:-1;;;;;35591:11:0;;;35583:57;;;;-1:-1:-1;;;35583:57:0;;22628:2:1;35583:57:0;;;22610:21:1;22667:2;22647:18;;;22640:30;22706:34;22686:18;;;22679:62;-1:-1:-1;;;22757:18:1;;;22750:31;22798:19;;35583:57:0;22426:397:1;35583:57:0;11293:10;-1:-1:-1;;;;;35675:21:0;;;;:62;;-1:-1:-1;35700:37:0;35717:5;11293:10;36567:214;:::i;35700:37::-;35653:168;;;;-1:-1:-1;;;35653:168:0;;17880:2:1;35653:168:0;;;17862:21:1;17919:2;17899:18;;;17892:30;17958:34;17938:18;;;17931:62;18029:26;18009:18;;;18002:54;18073:19;;35653:168:0;17678:420:1;35653:168:0;35834:21;35843:2;35847:7;35834:8;:21::i;:::-;35522:341;35452:411;;:::o;53906:100::-;12556:7;12583:6;-1:-1:-1;;;;;12583:6:0;11293:10;12730:23;12722:68;;;;-1:-1:-1;;;12722:68:0;;;;;;;:::i;:::-;53978:22;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;;53906:100:::0;:::o;48110:435::-;48336:10;48358:4;48336:27;48314:120;;;;-1:-1:-1;;;48314:120:0;;19126:2:1;48314:120:0;;;19108:21:1;19165:2;19145:18;;;19138:30;19204:34;19184:18;;;19177:62;-1:-1:-1;;;19255:18:1;;;19248:41;19306:19;;48314:120:0;18924:407:1;48314:120:0;48483:54;48494:11;48507;48520:6;48528:8;48483:10;:54::i;36848:376::-;37057:41;11293:10;37090:7;37057:18;:41::i;:::-;37035:140;;;;-1:-1:-1;;;37035:140:0;;;;;;;:::i;:::-;37188:28;37198:4;37204:2;37208:7;37188:9;:28::i;53513:173::-;12556:7;12583:6;-1:-1:-1;;;;;12583:6:0;11293:10;12730:23;12722:68;;;;-1:-1:-1;;;12722:68:0;;;;;;;:::i;:::-;53598:6:::1;::::0;53590:36:::1;::::0;53575:9:::1;::::0;-1:-1:-1;;;;;53598:6:0::1;::::0;53618:3;;53575:9;53590:36;53575:9;53590:36;53618:3;53598:6;53590:36:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53574:52;;;53645:4;53637:41;;;::::0;-1:-1:-1;;;53637:41:0;;22275:2:1;53637:41:0::1;::::0;::::1;22257:21:1::0;22314:2;22294:18;;;22287:30;22353:26;22333:18;;;22326:54;22397:18;;53637:41:0::1;22073:348:1::0;37295:185:0;37433:39;37450:4;37456:2;37460:7;37433:39;;;;;;;;;;;;:16;:39::i;32100:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;53192:90::-;12556:7;12583:6;-1:-1:-1;;;;;12583:6:0;11293:10;12730:23;12722:68;;;;-1:-1:-1;;;12722:68:0;;;;;;;:::i;:::-;53261:13;;::::1;::::0;:7:::1;::::0;:13:::1;::::0;::::1;::::0;::::1;:::i;33748:326::-:0;33865:7;33906:16;;;:7;:16;;;;;;-1:-1:-1;;;;;33906:16:0;33955:19;33933:110;;;;-1:-1:-1;;;33933:110:0;;18716:2:1;33933:110:0;;;18698:21:1;18755:2;18735:18;;;18728:30;18794:34;18774:18;;;18767:62;-1:-1:-1;;;18845:18:1;;;18838:39;18894:19;;33933:110:0;18514:405:1;51010:347:0;51089:1;51077:9;:13;;;51069:52;;;;-1:-1:-1;;;51069:52:0;;20312:2:1;51069:52:0;;;20294:21:1;20351:2;20331:18;;;20324:30;20390:28;20370:18;;;20363:56;20436:18;;51069:52:0;20110:350:1;51069:52:0;51181:17;;51168:9;51154:23;;:11;;:23;;;;:::i;:::-;:44;;51132:113;;;;-1:-1:-1;;;51132:113:0;;17119:2:1;51132:113:0;;;17101:21:1;17158:2;17138:18;;;17131:30;-1:-1:-1;;;17177:18:1;;;17170:49;17236:18;;51132:113:0;16917:343:1;51132:113:0;51260:6;51256:92;51271:9;51269:11;;:1;:11;51256:92;;;51300:36;51310:10;51324:11;;51322:13;;;;;:::i;:::-;;;;;-1:-1:-1;51300:9:0;:36::i;:::-;51281:3;;;;:::i;:::-;;;;51256:92;;33391:295;33508:7;-1:-1:-1;;;;;33555:19:0;;33533:111;;;;-1:-1:-1;;;33533:111:0;;18305:2:1;33533:111:0;;;18287:21:1;18344:2;18324:18;;;18317:30;18383:34;18363:18;;;18356:62;-1:-1:-1;;;18434:18:1;;;18427:40;18484:19;;33533:111:0;18103:406:1;33533:111:0;-1:-1:-1;;;;;;33662:16:0;;;;;:9;:16;;;;;;;33391:295::o;13161:103::-;12556:7;12583:6;-1:-1:-1;;;;;12583:6:0;11293:10;12730:23;12722:68;;;;-1:-1:-1;;;12722:68:0;;;;;;;:::i;:::-;13226:30:::1;13253:1;13226:18;:30::i;:::-;13161:103::o:0;46803:51::-;;;;;;;;;;;;;;;;:::i;53770:128::-;12556:7;12583:6;-1:-1:-1;;;;;12583:6:0;11293:10;12730:23;12722:68;;;;-1:-1:-1;;;12722:68:0;;;;;;;:::i;:::-;53855:26:::1;:35:::0;53770:128::o;34310:104::-;34366:13;34399:7;34392:14;;;;;:::i;36309:187::-;36436:52;11293:10;36469:8;36479;36436:18;:52::i;32056:31::-;;;;;;;:::i;37551:365::-;37740:41;11293:10;37773:7;37740:18;:41::i;:::-;37718:140;;;;-1:-1:-1;;;37718:140:0;;;;;;;:::i;:::-;37869:39;37883:4;37889:2;37893:7;37902:5;37869:13;:39::i;34485:563::-;39528:4;39552:16;;;:7;:16;;;;;;34603:13;;-1:-1:-1;;;;;39552:16:0;34634:113;;;;-1:-1:-1;;;34634:113:0;;21859:2:1;34634:113:0;;;21841:21:1;21898:2;21878:18;;;21871:30;21937:34;21917:18;;;21910:62;-1:-1:-1;;;21988:18:1;;;21981:45;22043:19;;34634:113:0;21657:411:1;34634:113:0;34764:8;;;;34760:72;;34802:17;34795:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34485:563;;;:::o;34760:72::-;34844:21;34868:10;:8;:10::i;:::-;34844:34;;34933:1;34915:7;34909:21;:25;:131;;;;;;;;;;;;;;;;;34978:7;34987:18;:7;:16;:18::i;:::-;35007:9;34961:56;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34909:131;34889:151;34485:563;-1:-1:-1;;;34485:563:0:o;51496:1688::-;51616:16;51624:7;51616;:16::i;:::-;-1:-1:-1;;;;;51602:30:0;:10;-1:-1:-1;;;;;51602:30:0;;51580:114;;;;-1:-1:-1;;;51580:114:0;;16716:2:1;51580:114:0;;;16698:21:1;16755:2;16735:18;;;16728:30;16794:34;16774:18;;;16767:62;-1:-1:-1;;;16845:18:1;;;16838:32;16887:19;;51580:114:0;16514:398:1;51580:114:0;51727:29;;;51766:1;51727:29;;;:19;:29;;;;;:36;;;;;:::i;:::-;;;:40;51705:136;;;;-1:-1:-1;;;51705:136:0;;15946:2:1;51705:136:0;;;15928:21:1;15985:2;15965:18;;;15958:30;16024:34;16004:18;;;15997:62;-1:-1:-1;;;16075:18:1;;;16068:44;16129:19;;51705:136:0;15744:410:1;51705:136:0;51921:14;51927:7;51921:5;:14::i;:::-;52032:31;;;52043:10;52032:31;;;12940:51:1;13007:18;;;13000:34;;;52032:31:0;;;;;;;;;12913:18:1;;;52032:31:0;;52260:26;;-1:-1:-1;;;52207:90:0;;;11939:51:1;12006:11;;;;11999:27;;;;52207:90:0;;;;;;;;;;12042:12:1;;;52207:90:0;;;;52476:8;;-1:-1:-1;;;52476:153:0;;;52032:31;;52166:1;;-1:-1:-1;;52476:8:0;;;-1:-1:-1;;;;;52476:8:0;;:21;;:153;;52512:8;;52543:4;;52032:31;;-1:-1:-1;;52207:90:0;;52476:153;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52451:178;;;52677:10;52664:9;:23;;52642:140;;;;-1:-1:-1;;;52642:140:0;;13885:2:1;52642:140:0;;;13867:21:1;13924:2;13904:18;;;13897:30;13963:34;13943:18;;;13936:62;14034:34;14014:18;;;14007:62;-1:-1:-1;;;14085:19:1;;;14078:34;14129:19;;52642:140:0;13683:471:1;52642:140:0;52795:8;;52887:29;;;;;;;:19;:29;;;;;;52795:381;;-1:-1:-1;;;52795:381:0;;:8;;;;-1:-1:-1;;;;;52795:8:0;;:13;;52816:9;;52795:381;;52887:29;;52970:7;;53026:10;;52887:29;53136:13;;52795:381;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51569:1615;;;;51496:1688;;:::o;49205:916::-;49464:27;;;49429:32;49464:27;;;:14;:27;;;;;;:64;;;;49506:11;;49464:64;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;49464:72:0;;;;;;;;;;49569:21;;;;49464:72;;-1:-1:-1;49547:123:0;;;;-1:-1:-1;;;49547:123:0;;23448:2:1;49547:123:0;;;23430:21:1;23487:2;23467:18;;;23460:30;23526:34;23506:18;;;23499:62;-1:-1:-1;;;23577:18:1;;;23570:36;23623:19;;49547:123:0;23246:402:1;49547:123:0;49722:23;;49703:42;;:107;;;;;49789:9;:21;;;49776:8;;49766:19;;;;;;;:::i;:::-;;;;;;;;:44;49703:107;49681:183;;;;-1:-1:-1;;;49681:183:0;;16361:2:1;49681:183:0;;;16343:21:1;16400:2;16380:18;;;16373:30;16439:28;16419:18;;;16412:56;16485:18;;49681:183:0;16159:350:1;49681:183:0;49938:1;49912:27;;;49950:21;;;:34;50053:60;;-1:-1:-1;;;50053:60:0;;:4;;:16;;:60;;50070:11;;50083;;50096:6;;50104:8;;;;50053:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49373:748;49205:916;;;;;:::o;53294:83::-;12556:7;12583:6;-1:-1:-1;;;;;12583:6:0;11293:10;12730:23;12722:68;;;;-1:-1:-1;;;12722:68:0;;;;;;;:::i;:::-;53352:8:::1;:17:::0;;-1:-1:-1;;53352:17:0::1;::::0;::::1;;::::0;;;::::1;::::0;;53294:83::o;50129:181::-;12556:7;12583:6;-1:-1:-1;;;;;12583:6:0;11293:10;12730:23;12722:68;;;;-1:-1:-1;;;12722:68:0;;;;;;;:::i;:::-;50256:29:::1;::::0;::::1;;::::0;;;:19:::1;:29;::::0;;;;:46:::1;::::0;50288:14;;50256:46:::1;:::i;13419:238::-:0;12556:7;12583:6;-1:-1:-1;;;;;12583:6:0;11293:10;12730:23;12722:68;;;;-1:-1:-1;;;12722:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13522:22:0;::::1;13500:110;;;::::0;-1:-1:-1;;;13500:110:0;;14780:2:1;13500:110:0::1;::::0;::::1;14762:21:1::0;14819:2;14799:18;;;14792:30;14858:34;14838:18;;;14831:62;-1:-1:-1;;;14909:18:1;;;14902:36;14955:19;;13500:110:0::1;14578:402:1::0;13500:110:0::1;13621:28;13640:8;13621:18;:28::i;:::-;13419:238:::0;:::o;43519:174::-;43594:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;43594:29:0;-1:-1:-1;;;;;43594:29:0;;;;;;;;:24;;43648:23;43594:24;43648:14;:23::i;:::-;-1:-1:-1;;;;;43639:46:0;;;;;;;;;;;43519:174;;:::o;54097:424::-;54293:14;54309:15;54353:8;54328:77;;;;;;;;;;;;:::i;:::-;54292:113;;;;54487:26;54497:6;54505:7;54487:9;:26::i;:::-;54262:259;;54097:424;;;;:::o;39757:452::-;39886:4;39552:16;;;:7;:16;;;;;;-1:-1:-1;;;;;39552:16:0;39908:110;;;;-1:-1:-1;;;39908:110:0;;17467:2:1;39908:110:0;;;17449:21:1;17506:2;17486:18;;;17479:30;17545:34;17525:18;;;17518:62;-1:-1:-1;;;17596:18:1;;;17589:42;17648:19;;39908:110:0;17265:408:1;39908:110:0;40029:13;40045:23;40060:7;40045:14;:23::i;:::-;40029:39;;40098:5;-1:-1:-1;;;;;40087:16:0;:7;-1:-1:-1;;;;;40087:16:0;;:64;;;;40144:7;-1:-1:-1;;;;;40120:31:0;:20;40132:7;40120:11;:20::i;:::-;-1:-1:-1;;;;;40120:31:0;;40087:64;:113;;;-1:-1:-1;;;;;;36738:25:0;;;36709:4;36738:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;40168:32;40079:122;39757:452;-1:-1:-1;;;;39757:452:0:o;42786:615::-;42959:4;-1:-1:-1;;;;;42932:31:0;:23;42947:7;42932:14;:23::i;:::-;-1:-1:-1;;;;;42932:31:0;;42910:122;;;;-1:-1:-1;;;42910:122:0;;21449:2:1;42910:122:0;;;21431:21:1;21488:2;21468:18;;;21461:30;21527:34;21507:18;;;21500:62;-1:-1:-1;;;21578:18:1;;;21571:39;21627:19;;42910:122:0;21247:405:1;42910:122:0;-1:-1:-1;;;;;43051:16:0;;43043:65;;;;-1:-1:-1;;;43043:65:0;;15187:2:1;43043:65:0;;;15169:21:1;15226:2;15206:18;;;15199:30;15265:34;15245:18;;;15238:62;-1:-1:-1;;;15316:18:1;;;15309:34;15360:19;;43043:65:0;14985:400:1;43043:65:0;43225:29;43242:1;43246:7;43225:8;:29::i;:::-;-1:-1:-1;;;;;43267:15:0;;;;;;:9;:15;;;;;:20;;43286:1;;43267:15;:20;;43286:1;;43267:20;:::i;:::-;;;;-1:-1:-1;;;;;;;43298:13:0;;;;;;:9;:13;;;;;:18;;43315:1;;43298:13;:18;;43315:1;;43298:18;:::i;:::-;;;;-1:-1:-1;;43327:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;43327:21:0;-1:-1:-1;;;;;43327:21:0;;;;;;;;;43366:27;;43327:16;;43366:27;;;;;;;42786:615;;;:::o;40551:110::-;40627:26;40637:2;40641:7;40627:26;;;;;;;;;;;;:9;:26::i;13817:191::-;13891:16;13910:6;;-1:-1:-1;;;;;13927:17:0;;;-1:-1:-1;;;;;;13927:17:0;;;;;;13960:40;;13910:6;;;;;;;13960:40;;13891:16;13960:40;13880:128;13817:191;:::o;43835:315::-;43990:8;-1:-1:-1;;;;;43981:17:0;:5;-1:-1:-1;;;;;43981:17:0;;;43973:55;;;;-1:-1:-1;;;43973:55:0;;15592:2:1;43973:55:0;;;15574:21:1;15631:2;15611:18;;;15604:30;15670:27;15650:18;;;15643:55;15715:18;;43973:55:0;15390:349:1;43973:55:0;-1:-1:-1;;;;;44039:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;44039:46:0;;;;;;;;;;44101:41;;13185::1;;;44101::0;;13158:18:1;44101:41:0;;;;;;;43835:315;;;:::o;38798:352::-;38955:28;38965:4;38971:2;38975:7;38955:9;:28::i;:::-;39016:48;39039:4;39045:2;39049:7;39058:5;39016:22;:48::i;:::-;38994:148;;;;-1:-1:-1;;;38994:148:0;;;;;;;:::i;54529:100::-;54581:13;54614:7;54607:14;;;;;:::i;8745:723::-;8801:13;9022:10;9018:53;;-1:-1:-1;;9049:10:0;;;;;;;;;;;;-1:-1:-1;;;9049:10:0;;;;;8745:723::o;9018:53::-;9096:5;9081:12;9137:78;9144:9;;9137:78;;9170:8;;;;:::i;:::-;;-1:-1:-1;9193:10:0;;-1:-1:-1;9201:2:0;9193:10;;:::i;:::-;;;9137:78;;;9225:19;9257:6;-1:-1:-1;;;;;9247:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9247:17:0;;9225:39;;9275:154;9282:10;;9275:154;;9309:11;9319:1;9309:11;;:::i;:::-;;-1:-1:-1;9378:10:0;9386:2;9378:5;:10;:::i;:::-;9365:24;;:2;:24;:::i;:::-;9352:39;;9335:6;9342;9335:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;9335:56:0;;;;;;;;-1:-1:-1;9406:11:0;9415:2;9406:11;;:::i;:::-;;;9275:154;;42089:360;42149:13;42165:23;42180:7;42165:14;:23::i;:::-;42149:39;;42290:29;42307:1;42311:7;42290:8;:29::i;:::-;-1:-1:-1;;;;;42332:16:0;;;;;;:9;:16;;;;;:21;;42352:1;;42332:16;:21;;42352:1;;42332:21;:::i;:::-;;;;-1:-1:-1;;42371:16:0;;;;:7;:16;;;;;;42364:23;;-1:-1:-1;;;;;;42364:23:0;;;42405:36;42379:7;;42371:16;-1:-1:-1;;;;;42405:36:0;;;;;42371:16;;42405:36;42138:311;42089:360;:::o;40888:321::-;41018:18;41024:2;41028:7;41018:5;:18::i;:::-;41069:54;41100:1;41104:2;41108:7;41117:5;41069:22;:54::i;:::-;41047:154;;;;-1:-1:-1;;;41047:154:0;;;;;;;:::i;44715:980::-;44870:4;-1:-1:-1;;;;;44891:13:0;;15156:20;15204:8;44887:801;;44944:175;;-1:-1:-1;;;44944:175:0;;-1:-1:-1;;;;;44944:36:0;;;;;:175;;11293:10;;45038:4;;45065:7;;45095:5;;44944:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44944:175:0;;;;;;;;-1:-1:-1;;44944:175:0;;;;;;;;;;;;:::i;:::-;;;44923:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45302:13:0;;45298:320;;45345:108;;-1:-1:-1;;;45345:108:0;;;;;;;:::i;45298:320::-;45568:6;45562:13;45553:6;45549:2;45545:15;45538:38;44923:710;-1:-1:-1;;;;;;45183:51:0;-1:-1:-1;;;45183:51:0;;-1:-1:-1;45176:58:0;;44887:801;-1:-1:-1;45672:4:0;44715:980;;;;;;:::o;41547:313::-;-1:-1:-1;;;;;41627:16:0;;41619:61;;;;-1:-1:-1;;;41619:61:0;;19538:2:1;41619:61:0;;;19520:21:1;;;19557:18;;;19550:30;19616:34;19596:18;;;19589:62;19668:18;;41619:61:0;19336:356:1;41619:61:0;-1:-1:-1;;;;;41751:13:0;;;;;;:9;:13;;;;;:18;;41768:1;;41751:13;:18;;41768:1;;41751:18;:::i;:::-;;;;-1:-1:-1;;41780:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;41780:21:0;-1:-1:-1;;;;;41780:21:0;;;;;;;;41819:33;;41780:16;;;41819:33;;41780:16;;41819:33;41547:313;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:631:1;78:5;-1:-1:-1;;;;;149:2:1;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:45;;;532:1;529;522:12;491:45;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;14:631;;;;;:::o;650:160::-;715:20;;771:13;;764:21;754:32;;744:60;;800:1;797;790:12;744:60;650:160;;;:::o;815:347::-;866:8;876:6;930:3;923:4;915:6;911:17;907:27;897:55;;948:1;945;938:12;897:55;-1:-1:-1;971:20:1;;-1:-1:-1;;;;;1003:30:1;;1000:50;;;1046:1;1043;1036:12;1000:50;1083:4;1075:6;1071:17;1059:29;;1135:3;1128:4;1119:6;1111;1107:19;1103:30;1100:39;1097:59;;;1152:1;1149;1142:12;1097:59;815:347;;;;;:::o;1167:220::-;1209:5;1262:3;1255:4;1247:6;1243:17;1239:27;1229:55;;1280:1;1277;1270:12;1229:55;1302:79;1377:3;1368:6;1355:20;1348:4;1340:6;1336:17;1302:79;:::i;1392:159::-;1459:20;;1519:6;1508:18;;1498:29;;1488:57;;1541:1;1538;1531:12;1556:171;1623:20;;-1:-1:-1;;;;;1672:30:1;;1662:41;;1652:69;;1717:1;1714;1707:12;1732:247;1791:6;1844:2;1832:9;1823:7;1819:23;1815:32;1812:52;;;1860:1;1857;1850:12;1812:52;1899:9;1886:23;1918:31;1943:5;1918:31;:::i;1984:320::-;2071:6;2079;2132:2;2120:9;2111:7;2107:23;2103:32;2100:52;;;2148:1;2145;2138:12;2100:52;2180:9;2174:16;2199:31;2224:5;2199:31;:::i;:::-;2294:2;2279:18;;;;2273:25;2249:5;;2273:25;;-1:-1:-1;;;1984:320:1:o;2309:388::-;2377:6;2385;2438:2;2426:9;2417:7;2413:23;2409:32;2406:52;;;2454:1;2451;2444:12;2406:52;2493:9;2480:23;2512:31;2537:5;2512:31;:::i;:::-;2562:5;-1:-1:-1;2619:2:1;2604:18;;2591:32;2632:33;2591:32;2632:33;:::i;:::-;2684:7;2674:17;;;2309:388;;;;;:::o;2702:456::-;2779:6;2787;2795;2848:2;2836:9;2827:7;2823:23;2819:32;2816:52;;;2864:1;2861;2854:12;2816:52;2903:9;2890:23;2922:31;2947:5;2922:31;:::i;:::-;2972:5;-1:-1:-1;3029:2:1;3014:18;;3001:32;3042:33;3001:32;3042:33;:::i;:::-;2702:456;;3094:7;;-1:-1:-1;;;3148:2:1;3133:18;;;;3120:32;;2702:456::o;3163:665::-;3258:6;3266;3274;3282;3335:3;3323:9;3314:7;3310:23;3306:33;3303:53;;;3352:1;3349;3342:12;3303:53;3391:9;3378:23;3410:31;3435:5;3410:31;:::i;:::-;3460:5;-1:-1:-1;3517:2:1;3502:18;;3489:32;3530:33;3489:32;3530:33;:::i;:::-;3582:7;-1:-1:-1;3636:2:1;3621:18;;3608:32;;-1:-1:-1;3691:2:1;3676:18;;3663:32;-1:-1:-1;;;;;3707:30:1;;3704:50;;;3750:1;3747;3740:12;3704:50;3773:49;3814:7;3805:6;3794:9;3790:22;3773:49;:::i;:::-;3763:59;;;3163:665;;;;;;;:::o;3833:315::-;3898:6;3906;3959:2;3947:9;3938:7;3934:23;3930:32;3927:52;;;3975:1;3972;3965:12;3927:52;4014:9;4001:23;4033:31;4058:5;4033:31;:::i;:::-;4083:5;-1:-1:-1;4107:35:1;4138:2;4123:18;;4107:35;:::i;:::-;4097:45;;3833:315;;;;;:::o;4153:::-;4221:6;4229;4282:2;4270:9;4261:7;4257:23;4253:32;4250:52;;;4298:1;4295;4288:12;4250:52;4337:9;4324:23;4356:31;4381:5;4356:31;:::i;:::-;4406:5;4458:2;4443:18;;;;4430:32;;-1:-1:-1;;;4153:315:1:o;4473:180::-;4529:6;4582:2;4570:9;4561:7;4557:23;4553:32;4550:52;;;4598:1;4595;4588:12;4550:52;4621:26;4637:9;4621:26;:::i;4658:245::-;4716:6;4769:2;4757:9;4748:7;4744:23;4740:32;4737:52;;;4785:1;4782;4775:12;4737:52;4824:9;4811:23;4843:30;4867:5;4843:30;:::i;4908:249::-;4977:6;5030:2;5018:9;5009:7;5005:23;5001:32;4998:52;;;5046:1;5043;5036:12;4998:52;5078:9;5072:16;5097:30;5121:5;5097:30;:::i;5162:450::-;5231:6;5284:2;5272:9;5263:7;5259:23;5255:32;5252:52;;;5300:1;5297;5290:12;5252:52;5340:9;5327:23;-1:-1:-1;;;;;5365:6:1;5362:30;5359:50;;;5405:1;5402;5395:12;5359:50;5428:22;;5481:4;5473:13;;5469:27;-1:-1:-1;5459:55:1;;5510:1;5507;5500:12;5459:55;5533:73;5598:7;5593:2;5580:16;5575:2;5571;5567:11;5533:73;:::i;5617:184::-;5675:6;5728:2;5716:9;5707:7;5703:23;5699:32;5696:52;;;5744:1;5741;5734:12;5696:52;5767:28;5785:9;5767:28;:::i;5806:481::-;5884:6;5892;5900;5953:2;5941:9;5932:7;5928:23;5924:32;5921:52;;;5969:1;5966;5959:12;5921:52;5992:28;6010:9;5992:28;:::i;:::-;5982:38;;6071:2;6060:9;6056:18;6043:32;-1:-1:-1;;;;;6090:6:1;6087:30;6084:50;;;6130:1;6127;6120:12;6084:50;6169:58;6219:7;6210:6;6199:9;6195:22;6169:58;:::i;:::-;5806:481;;6246:8;;-1:-1:-1;6143:84:1;;-1:-1:-1;;;;5806:481:1:o;6292:460::-;6377:6;6385;6393;6446:2;6434:9;6425:7;6421:23;6417:32;6414:52;;;6462:1;6459;6452:12;6414:52;6485:28;6503:9;6485:28;:::i;:::-;6475:38;;6564:2;6553:9;6549:18;6536:32;-1:-1:-1;;;;;6583:6:1;6580:30;6577:50;;;6623:1;6620;6613:12;6577:50;6646:49;6687:7;6678:6;6667:9;6663:22;6646:49;:::i;:::-;6636:59;;;6742:2;6731:9;6727:18;6714:32;6704:42;;6292:460;;;;;:::o;6757:773::-;6861:6;6869;6877;6885;6893;6946:3;6934:9;6925:7;6921:23;6917:33;6914:53;;;6963:1;6960;6953:12;6914:53;6986:28;7004:9;6986:28;:::i;:::-;6976:38;;7065:2;7054:9;7050:18;7037:32;-1:-1:-1;;;;;7129:2:1;7121:6;7118:14;7115:34;;;7145:1;7142;7135:12;7115:34;7168:49;7209:7;7200:6;7189:9;7185:22;7168:49;:::i;:::-;7158:59;;7236:37;7269:2;7258:9;7254:18;7236:37;:::i;:::-;7226:47;;7326:2;7315:9;7311:18;7298:32;7282:48;;7355:2;7345:8;7342:16;7339:36;;;7371:1;7368;7361:12;7339:36;;7410:60;7462:7;7451:8;7440:9;7436:24;7410:60;:::i;:::-;6757:773;;;;-1:-1:-1;6757:773:1;;-1:-1:-1;7489:8:1;;7384:86;6757:773;-1:-1:-1;;;6757:773:1:o;7535:684::-;7637:6;7645;7653;7661;7714:3;7702:9;7693:7;7689:23;7685:33;7682:53;;;7731:1;7728;7721:12;7682:53;7754:28;7772:9;7754:28;:::i;:::-;7744:38;;7833:2;7822:9;7818:18;7805:32;-1:-1:-1;;;;;7897:2:1;7889:6;7886:14;7883:34;;;7913:1;7910;7903:12;7883:34;7936:49;7977:7;7968:6;7957:9;7953:22;7936:49;:::i;:::-;7926:59;;8004:37;8037:2;8026:9;8022:18;8004:37;:::i;:::-;7994:47;;8094:2;8083:9;8079:18;8066:32;8050:48;;8123:2;8113:8;8110:16;8107:36;;;8139:1;8136;8129:12;8107:36;;8162:51;8205:7;8194:8;8183:9;8179:24;8162:51;:::i;8224:252::-;8291:6;8299;8352:2;8340:9;8331:7;8327:23;8323:32;8320:52;;;8368:1;8365;8358:12;8320:52;8391:28;8409:9;8391:28;:::i;8481:180::-;8540:6;8593:2;8581:9;8572:7;8568:23;8564:32;8561:52;;;8609:1;8606;8599:12;8561:52;-1:-1:-1;8632:23:1;;8481:180;-1:-1:-1;8481:180:1:o;8666:245::-;8745:6;8753;8806:2;8794:9;8785:7;8781:23;8777:32;8774:52;;;8822:1;8819;8812:12;8774:52;-1:-1:-1;;8845:16:1;;8901:2;8886:18;;;8880:25;8845:16;;8880:25;;-1:-1:-1;8666:245:1:o;8916:269::-;8973:6;9026:2;9014:9;9005:7;9001:23;8997:32;8994:52;;;9042:1;9039;9032:12;8994:52;9081:9;9068:23;9131:4;9124:5;9120:16;9113:5;9110:27;9100:55;;9151:1;9148;9141:12;9307:257;9348:3;9386:5;9380:12;9413:6;9408:3;9401:19;9429:63;9485:6;9478:4;9473:3;9469:14;9462:4;9455:5;9451:16;9429:63;:::i;:::-;9546:2;9525:15;-1:-1:-1;;9521:29:1;9512:39;;;;9553:4;9508:50;;9307:257;-1:-1:-1;;9307:257:1:o;9569:692::-;9618:3;9659:5;9653:12;9688:36;9714:9;9688:36;:::i;:::-;9743:1;9760:18;;;9787:104;;;;9905:1;9900:355;;;;9753:502;;9787:104;-1:-1:-1;;9820:24:1;;9808:37;;9865:16;;;;-1:-1:-1;9787:104:1;;9900:355;9931:5;9928:1;9921:16;9960:4;10005:2;10002:1;9992:16;10030:1;10044:165;10058:6;10055:1;10052:13;10044:165;;;10136:14;;10123:11;;;10116:35;10179:16;;;;10073:10;;10044:165;;;10048:3;;;10238:6;10233:3;10229:16;10222:23;;9753:502;;;;;9569:692;;;;:::o;10266:271::-;10449:6;10441;10436:3;10423:33;10405:3;10475:16;;10500:13;;;10475:16;10266:271;-1:-1:-1;10266:271:1:o;10542:274::-;10671:3;10709:6;10703:13;10725:53;10771:6;10766:3;10759:4;10751:6;10747:17;10725:53;:::i;:::-;10794:16;;;;;10542:274;-1:-1:-1;;10542:274:1:o;10821:194::-;10947:3;10972:37;11005:3;10997:6;10972:37;:::i;11020:549::-;11244:3;11282:6;11276:13;11298:53;11344:6;11339:3;11332:4;11324:6;11320:17;11298:53;:::i;:::-;11414:13;;11373:16;;;;11436:57;11414:13;11373:16;11470:4;11458:17;;11436:57;:::i;:::-;11509:54;11553:8;11546:5;11542:20;11534:6;11509:54;:::i;:::-;11502:61;11020:549;-1:-1:-1;;;;;;;11020:549:1:o;12273:488::-;-1:-1:-1;;;;;12542:15:1;;;12524:34;;12594:15;;12589:2;12574:18;;12567:43;12641:2;12626:18;;12619:34;;;12689:3;12684:2;12669:18;;12662:31;;;12467:4;;12710:45;;12735:19;;12727:6;12710:45;:::i;:::-;12702:53;12273:488;-1:-1:-1;;;;;;12273:488:1:o;13237:217::-;13384:2;13373:9;13366:21;13347:4;13404:44;13444:2;13433:9;13429:18;13421:6;13404:44;:::i;14159:414::-;14361:2;14343:21;;;14400:2;14380:18;;;14373:30;14439:34;14434:2;14419:18;;14412:62;-1:-1:-1;;;14505:2:1;14490:18;;14483:48;14563:3;14548:19;;14159:414::o;20465:356::-;20667:2;20649:21;;;20686:18;;;20679:30;20745:34;20740:2;20725:18;;20718:62;20812:2;20797:18;;20465:356::o;22828:413::-;23030:2;23012:21;;;23069:2;23049:18;;;23042:30;23108:34;23103:2;23088:18;;23081:62;-1:-1:-1;;;23174:2:1;23159:18;;23152:47;23231:3;23216:19;;22828:413::o;23653:640::-;23934:6;23922:19;;23904:38;;-1:-1:-1;;;;;23978:32:1;;23973:2;23958:18;;23951:60;23998:3;24042:2;24027:18;;24020:31;;;-1:-1:-1;;24074:45:1;;24099:19;;24091:6;24074:45;:::i;:::-;24169:6;24162:14;24155:22;24150:2;24139:9;24135:18;24128:50;24227:9;24219:6;24215:22;24209:3;24198:9;24194:19;24187:51;24255:32;24280:6;24272;24255:32;:::i;:::-;24247:40;23653:640;-1:-1:-1;;;;;;;;23653:640:1:o;24298:717::-;24565:6;24557;24553:19;24542:9;24535:38;24609:3;24604:2;24593:9;24589:18;24582:31;24516:4;24636:45;24676:3;24665:9;24661:19;24653:6;24636:45;:::i;:::-;-1:-1:-1;;;;;24721:6:1;24717:31;24712:2;24701:9;24697:18;24690:59;24797:9;24789:6;24785:22;24780:2;24769:9;24765:18;24758:50;24832:6;24824;24817:22;24886:6;24878;24873:2;24865:6;24861:15;24848:45;24939:1;24934:2;24925:6;24917;24913:19;24909:28;24902:39;25006:2;24999;24995:7;24990:2;24982:6;24978:15;24974:29;24966:6;24962:42;24958:51;24950:59;;;24298:717;;;;;;;;:::o;25020:555::-;25277:6;25269;25265:19;25254:9;25247:38;25321:3;25316:2;25305:9;25301:18;25294:31;25228:4;25348:45;25388:3;25377:9;25373:19;25365:6;25348:45;:::i;:::-;-1:-1:-1;;;;;25433:6:1;25429:31;25424:2;25413:9;25409:18;25402:59;25509:9;25501:6;25497:22;25492:2;25481:9;25477:18;25470:50;25537:32;25562:6;25554;25537:32;:::i;25580:1498::-;25926:6;25918;25914:19;25903:9;25896:38;25877:4;25953:2;25991:3;25986:2;25975:9;25971:18;25964:31;26015:1;26048:6;26042:13;26078:36;26104:9;26078:36;:::i;:::-;26151:6;26145:3;26134:9;26130:19;26123:35;26177:3;26199:1;26231:2;26220:9;26216:18;26248:1;26243:122;;;;26379:1;26374:354;;;;26209:519;;26243:122;-1:-1:-1;;26291:24:1;;26271:18;;;26264:52;26351:3;26336:19;;;-1:-1:-1;26243:122:1;;26374:354;26405:6;26402:1;26395:17;26453:2;26450:1;26440:16;26478:1;26492:180;26506:6;26503:1;26500:13;26492:180;;;26599:14;;26575:17;;;26571:26;;26564:50;26642:16;;;;26521:10;;26492:180;;;26696:17;;26692:26;;;-1:-1:-1;;26209:519:1;;;;;;26773:9;26768:3;26764:19;26759:2;26748:9;26744:18;26737:47;26807:29;26832:3;26824:6;26807:29;:::i;:::-;26793:43;;;26845:54;26895:2;26884:9;26880:18;26872:6;-1:-1:-1;;;;;9264:31:1;9252:44;;9190:112;26845:54;-1:-1:-1;;;;;9264:31:1;;26958:3;26943:19;;9252:44;27012:9;27004:6;27000:22;26994:3;26983:9;26979:19;26972:51;27040:32;27065:6;27057;27040:32;:::i;:::-;27032:40;25580:1498;-1:-1:-1;;;;;;;;;25580:1498:1:o;27518:128::-;27558:3;27589:1;27585:6;27582:1;27579:13;27576:39;;;27595:18;;:::i;:::-;-1:-1:-1;27631:9:1;;27518:128::o;27651:120::-;27691:1;27717;27707:35;;27722:18;;:::i;:::-;-1:-1:-1;27756:9:1;;27651:120::o;27776:125::-;27816:4;27844:1;27841;27838:8;27835:34;;;27849:18;;:::i;:::-;-1:-1:-1;27886:9:1;;27776:125::o;27906:258::-;27978:1;27988:113;28002:6;27999:1;27996:13;27988:113;;;28078:11;;;28072:18;28059:11;;;28052:39;28024:2;28017:10;27988:113;;;28119:6;28116:1;28113:13;28110:48;;;-1:-1:-1;;28154:1:1;28136:16;;28129:27;27906:258::o;28169:380::-;28248:1;28244:12;;;;28291;;;28312:61;;28366:4;28358:6;28354:17;28344:27;;28312:61;28419:2;28411:6;28408:14;28388:18;28385:38;28382:161;;;28465:10;28460:3;28456:20;28453:1;28446:31;28500:4;28497:1;28490:15;28528:4;28525:1;28518:15;28382:161;;28169:380;;;:::o;28554:135::-;28593:3;-1:-1:-1;;28614:17:1;;28611:43;;;28634:18;;:::i;:::-;-1:-1:-1;28681:1:1;28670:13;;28554:135::o;28694:112::-;28726:1;28752;28742:35;;28757:18;;:::i;:::-;-1:-1:-1;28791:9:1;;28694:112::o;28811:127::-;28872:10;28867:3;28863:20;28860:1;28853:31;28903:4;28900:1;28893:15;28927:4;28924:1;28917:15;28943:127;29004:10;28999:3;28995:20;28992:1;28985:31;29035:4;29032:1;29025:15;29059:4;29056:1;29049:15;29075:127;29136:10;29131:3;29127:20;29124:1;29117:31;29167:4;29164:1;29157:15;29191:4;29188:1;29181:15;29207:127;29268:10;29263:3;29259:20;29256:1;29249:31;29299:4;29296:1;29289:15;29323:4;29320:1;29313:15;29339:131;-1:-1:-1;;;;;29414:31:1;;29404:42;;29394:70;;29460:1;29457;29450:12;29475:131;-1:-1:-1;;;;;;29549:32:1;;29539:43;;29529:71;;29596:1;29593;29586:12

Swarm Source

ipfs://895852eff1705ddeef7c1f0eab3667ed2fdf39865e1a161497f3e3452481a62a
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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