ETH Price: $3,269.12 (+3.12%)
Gas: 1 Gwei

Token

EvilNFT (EVIL)
 

Overview

Max Total Supply

0 EVIL

Holders

52

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 EVIL
0x785dae0ced5976f682f167193164ac71ebaf8911
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:
EvilNFT

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

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

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

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

        _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/Evil-eth.sol

pragma solidity ^0.8.7;

contract EvilNFT is Ownable, ERC721, NonblockingReceiver {
    address public _owner;
    string private baseURI;
    uint256 nextTokenId = 3900;


    uint256 MAX_MINT_ETHEREUM = 5900;
    uint256 public cost = 0.001 ether;
    bool public paused = true;


    uint256 gasForDestinationLzReceive = 350000;
    uint256 public maxMintAmountPerTx;
    

    constructor(string memory name, string memory symbol, uint _maxMintAmountPerTx, string memory baseURI_, address _layerZeroEndpoint)
        ERC721(name, symbol)
    {
        _owner = msg.sender;
        maxMintAmountPerTx = _maxMintAmountPerTx;
        endpoint = ILayerZeroEndpoint(_layerZeroEndpoint);
        baseURI = baseURI_; 
        
    }

      function setPaused(bool _state) public onlyOwner {
    paused = _state;
  }

    function setCost(uint256 _cost) public onlyOwner {
    cost = _cost;
  }

  function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner {
    maxMintAmountPerTx = _maxMintAmountPerTx;
  }

    function mint(uint8 numTokens) external payable {
        require(!paused, "Evil NFT: The contract is paused!");
        require(numTokens < maxMintAmountPerTx, "Evil NFT: Max 3 NFTs per transaction");
        require(
            nextTokenId + numTokens <= MAX_MINT_ETHEREUM,
            "Evil NFT: Mint exceeds supply"
        );
        require(msg.value >= cost * numTokens, "Evil NFT: Insufficient funds!");
        _safeMint(msg.sender, ++nextTokenId);
        if (numTokens == 2) {
            _safeMint(msg.sender, ++nextTokenId);
        }
    }


    function traverseChains(uint16 _chainId, uint256 tokenId) public payable {
        require(
            msg.sender == ownerOf(tokenId),
            "Evil NFT: You must own the token to traverse"
        );
        require(
            trustedRemoteLookup[_chainId].length > 0,
            "Evil NFT: This chain is currently unavailable for travel"
        );

        _burn(tokenId);
        bytes memory payload = abi.encode(msg.sender, tokenId);


        uint16 version = 1;
        bytes memory adapterParams = abi.encodePacked(
            version,
            gasForDestinationLzReceive
        );

        (uint256 messageFee, ) = endpoint.estimateFees(
            _chainId,
            address(this),
            payload,
            false,
            adapterParams
        );

        require(
            msg.value >= messageFee,
            "Evil NFT: 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 donate() external payable {
        // thank you
    }

    function withdraw(uint256 amt) external onlyOwner {
        (bool sent, ) = payable(_owner).call{value: amt}("");
        require(sent, "Evil NFT: Failed to withdraw Ether");
    }

    function setGasForDestinationLzReceive(uint256 newVal) external onlyOwner {
        gasForDestinationLzReceive = newVal;
    }

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"},{"internalType":"string","name":"baseURI_","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":"cost","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":[{"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":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"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":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"setGasForDestinationLzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","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":"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":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052610f3c600c5561170c600d5566038d7ea4c68000600e55600f805460ff19166001179055620557306010553480156200003c57600080fd5b506040516200302c3803806200302c8339810160408190526200005f91620002ac565b84846200006c33620000e9565b81516200008190600190602085019062000139565b5080516200009790600290602084019062000139565b5050600a8054336001600160a01b0319918216179091556011859055600780549091166001600160a01b038416179055508151620000dd90600b90602085019062000139565b505050505050620003a7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b82805462000147906200036b565b90600052602060002090601f0160209004810192826200016b5760008555620001b6565b82601f106200018657805160ff1916838001178555620001b6565b82800160010185558215620001b6579182015b82811115620001b657825182559160200191906001019062000199565b50620001c4929150620001c8565b5090565b5b80821115620001c45760008155600101620001c9565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200020757600080fd5b81516001600160401b0380821115620002245762000224620001df565b604051601f8301601f19908116603f011681019082821181831017156200024f576200024f620001df565b816040528381526020925086838588010111156200026c57600080fd5b600091505b8382101562000290578582018301518183018401529082019062000271565b83821115620002a25760008385830101525b9695505050505050565b600080600080600060a08688031215620002c557600080fd5b85516001600160401b0380821115620002dd57600080fd5b620002eb89838a01620001f5565b965060208801519150808211156200030257600080fd5b6200031089838a01620001f5565b95506040880151945060608801519150808211156200032e57600080fd5b506200033d88828901620001f5565b608088015190935090506001600160a01b03811681146200035d57600080fd5b809150509295509295909350565b600181811c908216806200038057607f821691505b602082108103620003a157634e487b7160e01b600052602260045260246000fd5b50919050565b612c7580620003b76000396000f3fe6080604052600436106102035760003560e01c8063715018a611610118578063b2bdfa7b116100a0578063d1deba1f1161006f578063d1deba1f14610606578063e985e9c514610619578063eb8d72b714610662578063ed88c68e14610228578063f2fde38b1461068257600080fd5b8063b2bdfa7b14610593578063b88d4fde146105b3578063c87b56dd146105d3578063cf89fa03146105f357600080fd5b806394354fd0116100e757806394354fd014610508578063943fb8721461051e57806395d89b411461053e578063a22cb46514610553578063b071401b1461057357600080fd5b8063715018a61461044a5780637533d7881461045f5780638da5cb5b1461047f5780638ee749121461049d57600080fd5b806323b872dd1161019b57806355f804b31161016a57806355f804b3146103bd5780635c975abb146103dd5780636352211e146103f75780636ecd23061461041757806370a082311461042a57600080fd5b806323b872dd1461033d5780632e1a7d4d1461035d57806342842e0e1461037d57806344a0d68a1461039d57600080fd5b8063095ea7b3116101d7578063095ea7b3146102b957806313faede6146102d957806316c38b3c146102fd5780631c37a8221461031d57600080fd5b80621d35671461020857806301ffc9a71461022a57806306fdde031461025f578063081812fc14610281575b600080fd5b34801561021457600080fd5b50610228610223366004612216565b6106a2565b005b34801561023657600080fd5b5061024a6102453660046122b0565b61089c565b60405190151581526020015b60405180910390f35b34801561026b57600080fd5b506102746108ee565b6040516102569190612325565b34801561028d57600080fd5b506102a161029c366004612338565b610980565b6040516001600160a01b039091168152602001610256565b3480156102c557600080fd5b506102286102d4366004612366565b610a15565b3480156102e557600080fd5b506102ef600e5481565b604051908152602001610256565b34801561030957600080fd5b506102286103183660046123a2565b610b2a565b34801561032957600080fd5b50610228610338366004612216565b610b67565b34801561034957600080fd5b506102286103583660046123bd565b610bd6565b34801561036957600080fd5b50610228610378366004612338565b610c07565b34801561038957600080fd5b506102286103983660046123bd565b610ce3565b3480156103a957600080fd5b506102286103b8366004612338565b610cfe565b3480156103c957600080fd5b506102286103d83660046123fe565b610d2d565b3480156103e957600080fd5b50600f5461024a9060ff1681565b34801561040357600080fd5b506102a1610412366004612338565b610d6a565b610228610425366004612446565b610de1565b34801561043657600080fd5b506102ef610445366004612469565b610f9e565b34801561045657600080fd5b50610228611025565b34801561046b57600080fd5b5061027461047a366004612486565b61105b565b34801561048b57600080fd5b506000546001600160a01b03166102a1565b3480156104a957600080fd5b506104f36104b83660046124a1565b600860209081526000938452604080852084518086018401805192815290840195840195909520945292905282529020805460019091015482565b60408051928352602083019190915201610256565b34801561051457600080fd5b506102ef60115481565b34801561052a57600080fd5b50610228610539366004612338565b6110f5565b34801561054a57600080fd5b50610274611124565b34801561055f57600080fd5b5061022861056e3660046124f7565b611133565b34801561057f57600080fd5b5061022861058e366004612338565b61113e565b34801561059f57600080fd5b50600a546102a1906001600160a01b031681565b3480156105bf57600080fd5b506102286105ce36600461252c565b61116d565b3480156105df57600080fd5b506102746105ee366004612338565b61119f565b61022861060136600461258b565b61127a565b6102286106143660046125ef565b61156b565b34801561062557600080fd5b5061024a61063436600461267a565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b34801561066e57600080fd5b5061022861067d3660046126b3565b6116f8565b34801561068e57600080fd5b5061022861069d366004612469565b611740565b6007546001600160a01b031633146106b957600080fd5b61ffff8416600090815260096020526040902080546106d790612705565b90508351148015610716575061ffff8416600090815260096020526040908190209051610704919061273f565b60405180910390208380519060200120145b6107845760405162461bcd60e51b815260206004820152603460248201527f4e6f6e626c6f636b696e6752656365697665723a20696e76616c696420736f756044820152731c98d9481cd95b991a5b99c818dbdb9d1c9858dd60621b60648201526084015b60405180910390fd5b604051630e1bd41160e11b81523090631c37a822906107ad9087908790879087906004016127b1565b600060405180830381600087803b1580156107c757600080fd5b505af19250505080156107d8575060015b610896576040518060400160405280825181526020018280519060200120815250600860008661ffff1661ffff1681526020019081526020016000208460405161082291906127fa565b9081526040805191829003602090810183206001600160401b038716600090815290825291909120835181559201516001909201919091557fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d9061088d9086908690869086906127b1565b60405180910390a15b50505050565b60006001600160e01b031982166380ac58cd60e01b14806108cd57506001600160e01b03198216635b5e139f60e01b145b806108e857506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600180546108fd90612705565b80601f016020809104026020016040519081016040528092919081815260200182805461092990612705565b80156109765780601f1061094b57610100808354040283529160200191610976565b820191906000526020600020905b81548152906001019060200180831161095957829003601f168201915b5050505050905090565b6000818152600360205260408120546001600160a01b03166109f95760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161077b565b506000908152600560205260409020546001600160a01b031690565b6000610a2082610d6a565b9050806001600160a01b0316836001600160a01b031603610a8d5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161077b565b336001600160a01b0382161480610aa95750610aa98133610634565b610b1b5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161077b565b610b2583836117d8565b505050565b6000546001600160a01b03163314610b545760405162461bcd60e51b815260040161077b90612816565b600f805460ff1916911515919091179055565b333014610bca5760405162461bcd60e51b815260206004820152602b60248201527f4e6f6e626c6f636b696e6752656365697665723a2063616c6c6572206d75737460448201526a10313290213934b233b29760a91b606482015260840161077b565b61089684848484611846565b610be03382611873565b610bfc5760405162461bcd60e51b815260040161077b9061284b565b610b2583838361196a565b6000546001600160a01b03163314610c315760405162461bcd60e51b815260040161077b90612816565b600a546040516000916001600160a01b03169083908381818185875af1925050503d8060008114610c7e576040519150601f19603f3d011682016040523d82523d6000602084013e610c83565b606091505b5050905080610cdf5760405162461bcd60e51b815260206004820152602260248201527f4576696c204e46543a204661696c656420746f2077697468647261772045746860448201526132b960f11b606482015260840161077b565b5050565b610b258383836040518060200160405280600081525061116d565b6000546001600160a01b03163314610d285760405162461bcd60e51b815260040161077b90612816565b600e55565b6000546001600160a01b03163314610d575760405162461bcd60e51b815260040161077b90612816565b8051610cdf90600b906020840190612030565b6000818152600360205260408120546001600160a01b0316806108e85760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161077b565b600f5460ff1615610e3e5760405162461bcd60e51b815260206004820152602160248201527f4576696c204e46543a2054686520636f6e7472616374206973207061757365646044820152602160f81b606482015260840161077b565b6011548160ff1610610e9e5760405162461bcd60e51b8152602060048201526024808201527f4576696c204e46543a204d61782033204e46547320706572207472616e7361636044820152633a34b7b760e11b606482015260840161077b565b600d548160ff16600c54610eb291906128b2565b1115610f005760405162461bcd60e51b815260206004820152601d60248201527f4576696c204e46543a204d696e74206578636565647320737570706c79000000604482015260640161077b565b8060ff16600e54610f1191906128ca565b341015610f605760405162461bcd60e51b815260206004820152601d60248201527f4576696c204e46543a20496e73756666696369656e742066756e647321000000604482015260640161077b565b610f7d33600c60008154610f73906128e9565b9182905550611b0a565b8060ff16600203610f9b57610f9b33600c60008154610f73906128e9565b50565b60006001600160a01b0382166110095760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161077b565b506001600160a01b031660009081526004602052604090205490565b6000546001600160a01b0316331461104f5760405162461bcd60e51b815260040161077b90612816565b6110596000611b24565b565b6009602052600090815260409020805461107490612705565b80601f01602080910402602001604051908101604052809291908181526020018280546110a090612705565b80156110ed5780601f106110c2576101008083540402835291602001916110ed565b820191906000526020600020905b8154815290600101906020018083116110d057829003601f168201915b505050505081565b6000546001600160a01b0316331461111f5760405162461bcd60e51b815260040161077b90612816565b601055565b6060600280546108fd90612705565b610cdf338383611b74565b6000546001600160a01b031633146111685760405162461bcd60e51b815260040161077b90612816565b601155565b6111773383611873565b6111935760405162461bcd60e51b815260040161077b9061284b565b61089684848484611c42565b6000818152600360205260409020546060906001600160a01b031661121e5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161077b565b6000611228611c75565b905060008151116112485760405180602001604052806000815250611273565b8061125284611c84565b604051602001611263929190612902565b6040516020818303038152906040525b9392505050565b61128381610d6a565b6001600160a01b0316336001600160a01b0316146112f85760405162461bcd60e51b815260206004820152602c60248201527f4576696c204e46543a20596f75206d757374206f776e2074686520746f6b656e60448201526b20746f20747261766572736560a01b606482015260840161077b565b61ffff82166000908152600960205260408120805461131690612705565b90501161138b5760405162461bcd60e51b815260206004820152603860248201527f4576696c204e46543a205468697320636861696e2069732063757272656e746c60448201527f7920756e617661696c61626c6520666f722074726176656c0000000000000000606482015260840161077b565b61139481611d84565b60408051336020820152808201839052815180820383018152606082018352601054600160f01b60808401526082808401919091528351808403909101815260a283019384905260075463040a7bb160e41b90945290926001926000916001600160a01b0316906340a7bb1090611417908990309089908790899060a601612931565b6040805180830381865afa158015611433573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114579190612985565b509050803410156114e65760405162461bcd60e51b815260206004820152604d60248201527f4576696c204e46543a206d73672e76616c7565206e6f7420656e6f756768207460448201527f6f20636f766572206d6573736167654665652e2053656e642067617320666f7260648201526c206d657373616765206665657360981b608482015260a40161077b565b60075461ffff8716600090815260096020526040808220905162c5803160e81b81526001600160a01b039093169263c5803100923492611531928c928b913391908b906004016129a9565b6000604051808303818588803b15801561154a57600080fd5b505af115801561155e573d6000803e3d6000fd5b5050505050505050505050565b61ffff8516600090815260086020526040808220905161158c9087906127fa565b90815260408051602092819003830190206001600160401b03871660009081529252902060018101549091506116135760405162461bcd60e51b815260206004820152602660248201527f4e6f6e626c6f636b696e6752656365697665723a206e6f2073746f726564206d60448201526565737361676560d01b606482015260840161077b565b80548214801561163d575080600101548383604051611633929190612a89565b6040518091039020145b6116895760405162461bcd60e51b815260206004820152601a60248201527f4c617965725a65726f3a20696e76616c6964207061796c6f6164000000000000604482015260640161077b565b60008082556001820155604051630e1bd41160e11b81523090631c37a822906116be9089908990899089908990600401612a99565b600060405180830381600087803b1580156116d857600080fd5b505af11580156116ec573d6000803e3d6000fd5b50505050505050505050565b6000546001600160a01b031633146117225760405162461bcd60e51b815260040161077b90612816565b61ffff831660009081526009602052604090206108969083836120b4565b6000546001600160a01b0316331461176a5760405162461bcd60e51b815260040161077b90612816565b6001600160a01b0381166117cf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161077b565b610f9b81611b24565b600081815260056020526040902080546001600160a01b0319166001600160a01b038416908117909155819061180d82610d6a565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000808280602001905181019061185d9190612afa565b9150915061186b8282611b0a565b505050505050565b6000818152600360205260408120546001600160a01b03166118ec5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161077b565b60006118f783610d6a565b9050806001600160a01b0316846001600160a01b031614806119325750836001600160a01b031661192784610980565b6001600160a01b0316145b8061196257506001600160a01b0380821660009081526006602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661197d82610d6a565b6001600160a01b0316146119e55760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161077b565b6001600160a01b038216611a475760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161077b565b611a526000826117d8565b6001600160a01b0383166000908152600460205260408120805460019290611a7b908490612b28565b90915550506001600160a01b0382166000908152600460205260408120805460019290611aa99084906128b2565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610cdf828260405180602001604052806000815250611e1f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b816001600160a01b0316836001600160a01b031603611bd55760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161077b565b6001600160a01b03838116600081815260066020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611c4d84848461196a565b611c5984848484611e52565b6108965760405162461bcd60e51b815260040161077b90612b3f565b6060600b80546108fd90612705565b606081600003611cab5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611cd55780611cbf816128e9565b9150611cce9050600a83612ba7565b9150611caf565b6000816001600160401b03811115611cef57611cef612154565b6040519080825280601f01601f191660200182016040528015611d19576020820181803683370190505b5090505b841561196257611d2e600183612b28565b9150611d3b600a86612bbb565b611d469060306128b2565b60f81b818381518110611d5b57611d5b612bcf565b60200101906001600160f81b031916908160001a905350611d7d600a86612ba7565b9450611d1d565b6000611d8f82610d6a565b9050611d9c6000836117d8565b6001600160a01b0381166000908152600460205260408120805460019290611dc5908490612b28565b909155505060008281526003602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b611e298383611f53565b611e366000848484611e52565b610b255760405162461bcd60e51b815260040161077b90612b3f565b60006001600160a01b0384163b15611f4857604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611e96903390899088908890600401612be5565b6020604051808303816000875af1925050508015611ed1575060408051601f3d908101601f19168201909252611ece91810190612c22565b60015b611f2e573d808015611eff576040519150601f19603f3d011682016040523d82523d6000602084013e611f04565b606091505b508051600003611f265760405162461bcd60e51b815260040161077b90612b3f565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611962565b506001949350505050565b6001600160a01b038216611fa95760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161077b565b6001600160a01b0382166000908152600460205260408120805460019290611fd29084906128b2565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461203c90612705565b90600052602060002090601f01602090048101928261205e57600085556120a4565b82601f1061207757805160ff19168380011785556120a4565b828001600101855582156120a4579182015b828111156120a4578251825591602001919060010190612089565b506120b0929150612128565b5090565b8280546120c090612705565b90600052602060002090601f0160209004810192826120e257600085556120a4565b82601f106120fb5782800160ff198235161785556120a4565b828001600101855582156120a4579182015b828111156120a457823582559160200191906001019061210d565b5b808211156120b05760008155600101612129565b803561ffff8116811461214f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b038084111561218457612184612154565b604051601f8501601f19908116603f011681019082821181831017156121ac576121ac612154565b816040528093508581528686860111156121c557600080fd5b858560208301376000602087830101525050509392505050565b600082601f8301126121f057600080fd5b6112738383356020850161216a565b80356001600160401b038116811461214f57600080fd5b6000806000806080858703121561222c57600080fd5b6122358561213d565b935060208501356001600160401b038082111561225157600080fd5b61225d888389016121df565b945061226b604088016121ff565b9350606087013591508082111561228157600080fd5b5061228e878288016121df565b91505092959194509250565b6001600160e01b031981168114610f9b57600080fd5b6000602082840312156122c257600080fd5b81356112738161229a565b60005b838110156122e85781810151838201526020016122d0565b838111156108965750506000910152565b600081518084526123118160208601602086016122cd565b601f01601f19169290920160200192915050565b60208152600061127360208301846122f9565b60006020828403121561234a57600080fd5b5035919050565b6001600160a01b0381168114610f9b57600080fd5b6000806040838503121561237957600080fd5b823561238481612351565b946020939093013593505050565b8035801515811461214f57600080fd5b6000602082840312156123b457600080fd5b61127382612392565b6000806000606084860312156123d257600080fd5b83356123dd81612351565b925060208401356123ed81612351565b929592945050506040919091013590565b60006020828403121561241057600080fd5b81356001600160401b0381111561242657600080fd5b8201601f8101841361243757600080fd5b6119628482356020840161216a565b60006020828403121561245857600080fd5b813560ff8116811461127357600080fd5b60006020828403121561247b57600080fd5b813561127381612351565b60006020828403121561249857600080fd5b6112738261213d565b6000806000606084860312156124b657600080fd5b6124bf8461213d565b925060208401356001600160401b038111156124da57600080fd5b6124e6868287016121df565b925050604084013590509250925092565b6000806040838503121561250a57600080fd5b823561251581612351565b915061252360208401612392565b90509250929050565b6000806000806080858703121561254257600080fd5b843561254d81612351565b9350602085013561255d81612351565b92506040850135915060608501356001600160401b0381111561257f57600080fd5b61228e878288016121df565b6000806040838503121561259e57600080fd5b6123848361213d565b60008083601f8401126125b957600080fd5b5081356001600160401b038111156125d057600080fd5b6020830191508360208285010111156125e857600080fd5b9250929050565b60008060008060006080868803121561260757600080fd5b6126108661213d565b945060208601356001600160401b038082111561262c57600080fd5b61263889838a016121df565b9550612646604089016121ff565b9450606088013591508082111561265c57600080fd5b50612669888289016125a7565b969995985093965092949392505050565b6000806040838503121561268d57600080fd5b823561269881612351565b915060208301356126a881612351565b809150509250929050565b6000806000604084860312156126c857600080fd5b6126d18461213d565b925060208401356001600160401b038111156126ec57600080fd5b6126f8868287016125a7565b9497909650939450505050565b600181811c9082168061271957607f821691505b60208210810361273957634e487b7160e01b600052602260045260246000fd5b50919050565b600080835461274d81612705565b600182811680156127655760018114612776576127a5565b60ff198416875282870194506127a5565b8760005260208060002060005b8581101561279c5781548a820152908401908201612783565b50505082870194505b50929695505050505050565b61ffff851681526080602082015260006127ce60808301866122f9565b6001600160401b038516604084015282810360608401526127ef81856122f9565b979650505050505050565b6000825161280c8184602087016122cd565b9190910192915050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600082198211156128c5576128c561289c565b500190565b60008160001904831182151516156128e4576128e461289c565b500290565b6000600182016128fb576128fb61289c565b5060010190565b600083516129148184602088016122cd565b8351908301906129288183602088016122cd565b01949350505050565b61ffff861681526001600160a01b038516602082015260a06040820181905260009061295f908301866122f9565b8415156060840152828103608084015261297981856122f9565b98975050505050505050565b6000806040838503121561299857600080fd5b505080516020909101519092909150565b61ffff871681526000602060c081840152600088546129c781612705565b8060c087015260e06001808416600081146129e957600181146129fe57612a2c565b60ff1985168984015261010089019550612a2c565b8d6000528660002060005b85811015612a245781548b8201860152908301908801612a09565b8a0184019650505b50505050508381036040850152612a4381896122f9565b915050612a5b60608401876001600160a01b03169052565b6001600160a01b038516608084015282810360a0840152612a7c81856122f9565b9998505050505050505050565b8183823760009101908152919050565b61ffff86168152608060208201526000612ab660808301876122f9565b6001600160401b03861660408401528281036060840152838152838560208301376000602085830101526020601f19601f8601168201019150509695505050505050565b60008060408385031215612b0d57600080fd5b8251612b1881612351565b6020939093015192949293505050565b600082821015612b3a57612b3a61289c565b500390565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b600082612bb657612bb6612b91565b500490565b600082612bca57612bca612b91565b500690565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612c18908301846122f9565b9695505050505050565b600060208284031215612c3457600080fd5b81516112738161229a56fea2646970667358221220287beb2e0d5c6e22b63ccdd6f44a8a265c722875fe9db416a59fce3679a7b61d64736f6c634300080d003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000012000000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd67500000000000000000000000000000000000000000000000000000000000000074576696c4e46540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044556494c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d595253544236447843667a4b7a3168553739754566667674544d626d5046525679664e5353597562553965452f00000000000000000000

Deployed Bytecode

0x6080604052600436106102035760003560e01c8063715018a611610118578063b2bdfa7b116100a0578063d1deba1f1161006f578063d1deba1f14610606578063e985e9c514610619578063eb8d72b714610662578063ed88c68e14610228578063f2fde38b1461068257600080fd5b8063b2bdfa7b14610593578063b88d4fde146105b3578063c87b56dd146105d3578063cf89fa03146105f357600080fd5b806394354fd0116100e757806394354fd014610508578063943fb8721461051e57806395d89b411461053e578063a22cb46514610553578063b071401b1461057357600080fd5b8063715018a61461044a5780637533d7881461045f5780638da5cb5b1461047f5780638ee749121461049d57600080fd5b806323b872dd1161019b57806355f804b31161016a57806355f804b3146103bd5780635c975abb146103dd5780636352211e146103f75780636ecd23061461041757806370a082311461042a57600080fd5b806323b872dd1461033d5780632e1a7d4d1461035d57806342842e0e1461037d57806344a0d68a1461039d57600080fd5b8063095ea7b3116101d7578063095ea7b3146102b957806313faede6146102d957806316c38b3c146102fd5780631c37a8221461031d57600080fd5b80621d35671461020857806301ffc9a71461022a57806306fdde031461025f578063081812fc14610281575b600080fd5b34801561021457600080fd5b50610228610223366004612216565b6106a2565b005b34801561023657600080fd5b5061024a6102453660046122b0565b61089c565b60405190151581526020015b60405180910390f35b34801561026b57600080fd5b506102746108ee565b6040516102569190612325565b34801561028d57600080fd5b506102a161029c366004612338565b610980565b6040516001600160a01b039091168152602001610256565b3480156102c557600080fd5b506102286102d4366004612366565b610a15565b3480156102e557600080fd5b506102ef600e5481565b604051908152602001610256565b34801561030957600080fd5b506102286103183660046123a2565b610b2a565b34801561032957600080fd5b50610228610338366004612216565b610b67565b34801561034957600080fd5b506102286103583660046123bd565b610bd6565b34801561036957600080fd5b50610228610378366004612338565b610c07565b34801561038957600080fd5b506102286103983660046123bd565b610ce3565b3480156103a957600080fd5b506102286103b8366004612338565b610cfe565b3480156103c957600080fd5b506102286103d83660046123fe565b610d2d565b3480156103e957600080fd5b50600f5461024a9060ff1681565b34801561040357600080fd5b506102a1610412366004612338565b610d6a565b610228610425366004612446565b610de1565b34801561043657600080fd5b506102ef610445366004612469565b610f9e565b34801561045657600080fd5b50610228611025565b34801561046b57600080fd5b5061027461047a366004612486565b61105b565b34801561048b57600080fd5b506000546001600160a01b03166102a1565b3480156104a957600080fd5b506104f36104b83660046124a1565b600860209081526000938452604080852084518086018401805192815290840195840195909520945292905282529020805460019091015482565b60408051928352602083019190915201610256565b34801561051457600080fd5b506102ef60115481565b34801561052a57600080fd5b50610228610539366004612338565b6110f5565b34801561054a57600080fd5b50610274611124565b34801561055f57600080fd5b5061022861056e3660046124f7565b611133565b34801561057f57600080fd5b5061022861058e366004612338565b61113e565b34801561059f57600080fd5b50600a546102a1906001600160a01b031681565b3480156105bf57600080fd5b506102286105ce36600461252c565b61116d565b3480156105df57600080fd5b506102746105ee366004612338565b61119f565b61022861060136600461258b565b61127a565b6102286106143660046125ef565b61156b565b34801561062557600080fd5b5061024a61063436600461267a565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b34801561066e57600080fd5b5061022861067d3660046126b3565b6116f8565b34801561068e57600080fd5b5061022861069d366004612469565b611740565b6007546001600160a01b031633146106b957600080fd5b61ffff8416600090815260096020526040902080546106d790612705565b90508351148015610716575061ffff8416600090815260096020526040908190209051610704919061273f565b60405180910390208380519060200120145b6107845760405162461bcd60e51b815260206004820152603460248201527f4e6f6e626c6f636b696e6752656365697665723a20696e76616c696420736f756044820152731c98d9481cd95b991a5b99c818dbdb9d1c9858dd60621b60648201526084015b60405180910390fd5b604051630e1bd41160e11b81523090631c37a822906107ad9087908790879087906004016127b1565b600060405180830381600087803b1580156107c757600080fd5b505af19250505080156107d8575060015b610896576040518060400160405280825181526020018280519060200120815250600860008661ffff1661ffff1681526020019081526020016000208460405161082291906127fa565b9081526040805191829003602090810183206001600160401b038716600090815290825291909120835181559201516001909201919091557fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d9061088d9086908690869086906127b1565b60405180910390a15b50505050565b60006001600160e01b031982166380ac58cd60e01b14806108cd57506001600160e01b03198216635b5e139f60e01b145b806108e857506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600180546108fd90612705565b80601f016020809104026020016040519081016040528092919081815260200182805461092990612705565b80156109765780601f1061094b57610100808354040283529160200191610976565b820191906000526020600020905b81548152906001019060200180831161095957829003601f168201915b5050505050905090565b6000818152600360205260408120546001600160a01b03166109f95760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161077b565b506000908152600560205260409020546001600160a01b031690565b6000610a2082610d6a565b9050806001600160a01b0316836001600160a01b031603610a8d5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161077b565b336001600160a01b0382161480610aa95750610aa98133610634565b610b1b5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161077b565b610b2583836117d8565b505050565b6000546001600160a01b03163314610b545760405162461bcd60e51b815260040161077b90612816565b600f805460ff1916911515919091179055565b333014610bca5760405162461bcd60e51b815260206004820152602b60248201527f4e6f6e626c6f636b696e6752656365697665723a2063616c6c6572206d75737460448201526a10313290213934b233b29760a91b606482015260840161077b565b61089684848484611846565b610be03382611873565b610bfc5760405162461bcd60e51b815260040161077b9061284b565b610b2583838361196a565b6000546001600160a01b03163314610c315760405162461bcd60e51b815260040161077b90612816565b600a546040516000916001600160a01b03169083908381818185875af1925050503d8060008114610c7e576040519150601f19603f3d011682016040523d82523d6000602084013e610c83565b606091505b5050905080610cdf5760405162461bcd60e51b815260206004820152602260248201527f4576696c204e46543a204661696c656420746f2077697468647261772045746860448201526132b960f11b606482015260840161077b565b5050565b610b258383836040518060200160405280600081525061116d565b6000546001600160a01b03163314610d285760405162461bcd60e51b815260040161077b90612816565b600e55565b6000546001600160a01b03163314610d575760405162461bcd60e51b815260040161077b90612816565b8051610cdf90600b906020840190612030565b6000818152600360205260408120546001600160a01b0316806108e85760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161077b565b600f5460ff1615610e3e5760405162461bcd60e51b815260206004820152602160248201527f4576696c204e46543a2054686520636f6e7472616374206973207061757365646044820152602160f81b606482015260840161077b565b6011548160ff1610610e9e5760405162461bcd60e51b8152602060048201526024808201527f4576696c204e46543a204d61782033204e46547320706572207472616e7361636044820152633a34b7b760e11b606482015260840161077b565b600d548160ff16600c54610eb291906128b2565b1115610f005760405162461bcd60e51b815260206004820152601d60248201527f4576696c204e46543a204d696e74206578636565647320737570706c79000000604482015260640161077b565b8060ff16600e54610f1191906128ca565b341015610f605760405162461bcd60e51b815260206004820152601d60248201527f4576696c204e46543a20496e73756666696369656e742066756e647321000000604482015260640161077b565b610f7d33600c60008154610f73906128e9565b9182905550611b0a565b8060ff16600203610f9b57610f9b33600c60008154610f73906128e9565b50565b60006001600160a01b0382166110095760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161077b565b506001600160a01b031660009081526004602052604090205490565b6000546001600160a01b0316331461104f5760405162461bcd60e51b815260040161077b90612816565b6110596000611b24565b565b6009602052600090815260409020805461107490612705565b80601f01602080910402602001604051908101604052809291908181526020018280546110a090612705565b80156110ed5780601f106110c2576101008083540402835291602001916110ed565b820191906000526020600020905b8154815290600101906020018083116110d057829003601f168201915b505050505081565b6000546001600160a01b0316331461111f5760405162461bcd60e51b815260040161077b90612816565b601055565b6060600280546108fd90612705565b610cdf338383611b74565b6000546001600160a01b031633146111685760405162461bcd60e51b815260040161077b90612816565b601155565b6111773383611873565b6111935760405162461bcd60e51b815260040161077b9061284b565b61089684848484611c42565b6000818152600360205260409020546060906001600160a01b031661121e5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161077b565b6000611228611c75565b905060008151116112485760405180602001604052806000815250611273565b8061125284611c84565b604051602001611263929190612902565b6040516020818303038152906040525b9392505050565b61128381610d6a565b6001600160a01b0316336001600160a01b0316146112f85760405162461bcd60e51b815260206004820152602c60248201527f4576696c204e46543a20596f75206d757374206f776e2074686520746f6b656e60448201526b20746f20747261766572736560a01b606482015260840161077b565b61ffff82166000908152600960205260408120805461131690612705565b90501161138b5760405162461bcd60e51b815260206004820152603860248201527f4576696c204e46543a205468697320636861696e2069732063757272656e746c60448201527f7920756e617661696c61626c6520666f722074726176656c0000000000000000606482015260840161077b565b61139481611d84565b60408051336020820152808201839052815180820383018152606082018352601054600160f01b60808401526082808401919091528351808403909101815260a283019384905260075463040a7bb160e41b90945290926001926000916001600160a01b0316906340a7bb1090611417908990309089908790899060a601612931565b6040805180830381865afa158015611433573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114579190612985565b509050803410156114e65760405162461bcd60e51b815260206004820152604d60248201527f4576696c204e46543a206d73672e76616c7565206e6f7420656e6f756768207460448201527f6f20636f766572206d6573736167654665652e2053656e642067617320666f7260648201526c206d657373616765206665657360981b608482015260a40161077b565b60075461ffff8716600090815260096020526040808220905162c5803160e81b81526001600160a01b039093169263c5803100923492611531928c928b913391908b906004016129a9565b6000604051808303818588803b15801561154a57600080fd5b505af115801561155e573d6000803e3d6000fd5b5050505050505050505050565b61ffff8516600090815260086020526040808220905161158c9087906127fa565b90815260408051602092819003830190206001600160401b03871660009081529252902060018101549091506116135760405162461bcd60e51b815260206004820152602660248201527f4e6f6e626c6f636b696e6752656365697665723a206e6f2073746f726564206d60448201526565737361676560d01b606482015260840161077b565b80548214801561163d575080600101548383604051611633929190612a89565b6040518091039020145b6116895760405162461bcd60e51b815260206004820152601a60248201527f4c617965725a65726f3a20696e76616c6964207061796c6f6164000000000000604482015260640161077b565b60008082556001820155604051630e1bd41160e11b81523090631c37a822906116be9089908990899089908990600401612a99565b600060405180830381600087803b1580156116d857600080fd5b505af11580156116ec573d6000803e3d6000fd5b50505050505050505050565b6000546001600160a01b031633146117225760405162461bcd60e51b815260040161077b90612816565b61ffff831660009081526009602052604090206108969083836120b4565b6000546001600160a01b0316331461176a5760405162461bcd60e51b815260040161077b90612816565b6001600160a01b0381166117cf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161077b565b610f9b81611b24565b600081815260056020526040902080546001600160a01b0319166001600160a01b038416908117909155819061180d82610d6a565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000808280602001905181019061185d9190612afa565b9150915061186b8282611b0a565b505050505050565b6000818152600360205260408120546001600160a01b03166118ec5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161077b565b60006118f783610d6a565b9050806001600160a01b0316846001600160a01b031614806119325750836001600160a01b031661192784610980565b6001600160a01b0316145b8061196257506001600160a01b0380821660009081526006602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661197d82610d6a565b6001600160a01b0316146119e55760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161077b565b6001600160a01b038216611a475760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161077b565b611a526000826117d8565b6001600160a01b0383166000908152600460205260408120805460019290611a7b908490612b28565b90915550506001600160a01b0382166000908152600460205260408120805460019290611aa99084906128b2565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610cdf828260405180602001604052806000815250611e1f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b816001600160a01b0316836001600160a01b031603611bd55760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161077b565b6001600160a01b03838116600081815260066020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611c4d84848461196a565b611c5984848484611e52565b6108965760405162461bcd60e51b815260040161077b90612b3f565b6060600b80546108fd90612705565b606081600003611cab5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611cd55780611cbf816128e9565b9150611cce9050600a83612ba7565b9150611caf565b6000816001600160401b03811115611cef57611cef612154565b6040519080825280601f01601f191660200182016040528015611d19576020820181803683370190505b5090505b841561196257611d2e600183612b28565b9150611d3b600a86612bbb565b611d469060306128b2565b60f81b818381518110611d5b57611d5b612bcf565b60200101906001600160f81b031916908160001a905350611d7d600a86612ba7565b9450611d1d565b6000611d8f82610d6a565b9050611d9c6000836117d8565b6001600160a01b0381166000908152600460205260408120805460019290611dc5908490612b28565b909155505060008281526003602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b611e298383611f53565b611e366000848484611e52565b610b255760405162461bcd60e51b815260040161077b90612b3f565b60006001600160a01b0384163b15611f4857604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611e96903390899088908890600401612be5565b6020604051808303816000875af1925050508015611ed1575060408051601f3d908101601f19168201909252611ece91810190612c22565b60015b611f2e573d808015611eff576040519150601f19603f3d011682016040523d82523d6000602084013e611f04565b606091505b508051600003611f265760405162461bcd60e51b815260040161077b90612b3f565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611962565b506001949350505050565b6001600160a01b038216611fa95760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161077b565b6001600160a01b0382166000908152600460205260408120805460019290611fd29084906128b2565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461203c90612705565b90600052602060002090601f01602090048101928261205e57600085556120a4565b82601f1061207757805160ff19168380011785556120a4565b828001600101855582156120a4579182015b828111156120a4578251825591602001919060010190612089565b506120b0929150612128565b5090565b8280546120c090612705565b90600052602060002090601f0160209004810192826120e257600085556120a4565b82601f106120fb5782800160ff198235161785556120a4565b828001600101855582156120a4579182015b828111156120a457823582559160200191906001019061210d565b5b808211156120b05760008155600101612129565b803561ffff8116811461214f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b038084111561218457612184612154565b604051601f8501601f19908116603f011681019082821181831017156121ac576121ac612154565b816040528093508581528686860111156121c557600080fd5b858560208301376000602087830101525050509392505050565b600082601f8301126121f057600080fd5b6112738383356020850161216a565b80356001600160401b038116811461214f57600080fd5b6000806000806080858703121561222c57600080fd5b6122358561213d565b935060208501356001600160401b038082111561225157600080fd5b61225d888389016121df565b945061226b604088016121ff565b9350606087013591508082111561228157600080fd5b5061228e878288016121df565b91505092959194509250565b6001600160e01b031981168114610f9b57600080fd5b6000602082840312156122c257600080fd5b81356112738161229a565b60005b838110156122e85781810151838201526020016122d0565b838111156108965750506000910152565b600081518084526123118160208601602086016122cd565b601f01601f19169290920160200192915050565b60208152600061127360208301846122f9565b60006020828403121561234a57600080fd5b5035919050565b6001600160a01b0381168114610f9b57600080fd5b6000806040838503121561237957600080fd5b823561238481612351565b946020939093013593505050565b8035801515811461214f57600080fd5b6000602082840312156123b457600080fd5b61127382612392565b6000806000606084860312156123d257600080fd5b83356123dd81612351565b925060208401356123ed81612351565b929592945050506040919091013590565b60006020828403121561241057600080fd5b81356001600160401b0381111561242657600080fd5b8201601f8101841361243757600080fd5b6119628482356020840161216a565b60006020828403121561245857600080fd5b813560ff8116811461127357600080fd5b60006020828403121561247b57600080fd5b813561127381612351565b60006020828403121561249857600080fd5b6112738261213d565b6000806000606084860312156124b657600080fd5b6124bf8461213d565b925060208401356001600160401b038111156124da57600080fd5b6124e6868287016121df565b925050604084013590509250925092565b6000806040838503121561250a57600080fd5b823561251581612351565b915061252360208401612392565b90509250929050565b6000806000806080858703121561254257600080fd5b843561254d81612351565b9350602085013561255d81612351565b92506040850135915060608501356001600160401b0381111561257f57600080fd5b61228e878288016121df565b6000806040838503121561259e57600080fd5b6123848361213d565b60008083601f8401126125b957600080fd5b5081356001600160401b038111156125d057600080fd5b6020830191508360208285010111156125e857600080fd5b9250929050565b60008060008060006080868803121561260757600080fd5b6126108661213d565b945060208601356001600160401b038082111561262c57600080fd5b61263889838a016121df565b9550612646604089016121ff565b9450606088013591508082111561265c57600080fd5b50612669888289016125a7565b969995985093965092949392505050565b6000806040838503121561268d57600080fd5b823561269881612351565b915060208301356126a881612351565b809150509250929050565b6000806000604084860312156126c857600080fd5b6126d18461213d565b925060208401356001600160401b038111156126ec57600080fd5b6126f8868287016125a7565b9497909650939450505050565b600181811c9082168061271957607f821691505b60208210810361273957634e487b7160e01b600052602260045260246000fd5b50919050565b600080835461274d81612705565b600182811680156127655760018114612776576127a5565b60ff198416875282870194506127a5565b8760005260208060002060005b8581101561279c5781548a820152908401908201612783565b50505082870194505b50929695505050505050565b61ffff851681526080602082015260006127ce60808301866122f9565b6001600160401b038516604084015282810360608401526127ef81856122f9565b979650505050505050565b6000825161280c8184602087016122cd565b9190910192915050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600082198211156128c5576128c561289c565b500190565b60008160001904831182151516156128e4576128e461289c565b500290565b6000600182016128fb576128fb61289c565b5060010190565b600083516129148184602088016122cd565b8351908301906129288183602088016122cd565b01949350505050565b61ffff861681526001600160a01b038516602082015260a06040820181905260009061295f908301866122f9565b8415156060840152828103608084015261297981856122f9565b98975050505050505050565b6000806040838503121561299857600080fd5b505080516020909101519092909150565b61ffff871681526000602060c081840152600088546129c781612705565b8060c087015260e06001808416600081146129e957600181146129fe57612a2c565b60ff1985168984015261010089019550612a2c565b8d6000528660002060005b85811015612a245781548b8201860152908301908801612a09565b8a0184019650505b50505050508381036040850152612a4381896122f9565b915050612a5b60608401876001600160a01b03169052565b6001600160a01b038516608084015282810360a0840152612a7c81856122f9565b9998505050505050505050565b8183823760009101908152919050565b61ffff86168152608060208201526000612ab660808301876122f9565b6001600160401b03861660408401528281036060840152838152838560208301376000602085830101526020601f19601f8601168201019150509695505050505050565b60008060408385031215612b0d57600080fd5b8251612b1881612351565b6020939093015192949293505050565b600082821015612b3a57612b3a61289c565b500390565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b600082612bb657612bb6612b91565b500490565b600082612bca57612bca612b91565b500690565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612c18908301846122f9565b9695505050505050565b600060208284031215612c3457600080fd5b81516112738161229a56fea2646970667358221220287beb2e0d5c6e22b63ccdd6f44a8a265c722875fe9db416a59fce3679a7b61d64736f6c634300080d0033

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

00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000012000000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd67500000000000000000000000000000000000000000000000000000000000000074576696c4e46540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044556494c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d595253544236447843667a4b7a3168553739754566667674544d626d5046525679664e5353597562553965452f00000000000000000000

-----Decoded View---------------
Arg [0] : name (string): EvilNFT
Arg [1] : symbol (string): EVIL
Arg [2] : _maxMintAmountPerTx (uint256): 4
Arg [3] : baseURI_ (string): ipfs://QmYRSTB6DxCfzKz1hU79uEffvtTMbmPFRVyfNSSYubU9eE/
Arg [4] : _layerZeroEndpoint (address): 0x66A71Dcef29A0fFBDBE3c6a460a3B5BC225Cd675

-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [4] : 00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd675
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [6] : 4576696c4e465400000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [8] : 4556494c00000000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [10] : 697066733a2f2f516d595253544236447843667a4b7a31685537397545666676
Arg [11] : 74544d626d5046525679664e5353597562553965452f00000000000000000000


Deployed Bytecode Sourcemap

50197:3943:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46822:1098;;;;;;;;;;-1:-1:-1;46822:1098:0;;;;;:::i;:::-;;:::i;:::-;;32887:355;;;;;;;;;;-1:-1:-1;32887:355:0;;;;;:::i;:::-;;:::i;:::-;;;2587:14:1;;2580:22;2562:41;;2550:2;2535:18;32887:355:0;;;;;;;;34056:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;35749:308::-;;;;;;;;;;-1:-1:-1;35749:308:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;3823:32:1;;;3805:51;;3793:2;3778:18;35749:308:0;3659:203:1;35272:411:0;;;;;;;;;;-1:-1:-1;35272:411:0;;;;;:::i;:::-;;:::i;50394:33::-;;;;;;;;;;;;;;;;;;;4469:25:1;;;4457:2;4442:18;50394:33:0;4323:177:1;50934:77:0;;;;;;;;;;-1:-1:-1;50934:77:0;;;;;:::i;:::-;;:::i;47928:435::-;;;;;;;;;;-1:-1:-1;47928:435:0;;;;;:::i;:::-;;:::i;36668:376::-;;;;;;;;;;-1:-1:-1;36668:376:0;;;;;:::i;:::-;;:::i;53368:183::-;;;;;;;;;;-1:-1:-1;53368:183:0;;;;;:::i;:::-;;:::i;37115:185::-;;;;;;;;;;-1:-1:-1;37115:185:0;;;;;:::i;:::-;;:::i;51019:74::-;;;;;;;;;;-1:-1:-1;51019:74:0;;;;;:::i;:::-;;:::i;53197:90::-;;;;;;;;;;-1:-1:-1;53197:90:0;;;;;:::i;:::-;;:::i;50434:25::-;;;;;;;;;;-1:-1:-1;50434:25:0;;;;;;;;33663:326;;;;;;;;;;-1:-1:-1;33663:326:0;;;;;:::i;:::-;;:::i;51237:566::-;;;;;;:::i;:::-;;:::i;33306:295::-;;;;;;;;;;-1:-1:-1;33306:295:0;;;;;:::i;:::-;;:::i;13199:103::-;;;;;;;;;;;;;:::i;46621:51::-;;;;;;;;;;-1:-1:-1;46621:51:0;;;;;:::i;:::-;;:::i;12548:87::-;;;;;;;;;;-1:-1:-1;12594:7:0;12621:6;-1:-1:-1;;;;;12621:6:0;12548:87;;46512:102;;;;;;;;;;-1:-1:-1;46512:102:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7348:25:1;;;7404:2;7389:18;;7382:34;;;;7321:18;46512:102:0;7174:248:1;50520:33:0;;;;;;;;;;;;;;;;53559:128;;;;;;;;;;-1:-1:-1;53559:128:0;;;;;:::i;:::-;;:::i;34225:104::-;;;;;;;;;;;;;:::i;36129:187::-;;;;;;;;;;-1:-1:-1;36129:187:0;;;;;:::i;:::-;;:::i;51099:130::-;;;;;;;;;;-1:-1:-1;51099:130:0;;;;;:::i;:::-;;:::i;50261:21::-;;;;;;;;;;-1:-1:-1;50261:21:0;;;;-1:-1:-1;;;;;50261:21:0;;;37371:365;;;;;;;;;;-1:-1:-1;37371:365:0;;;;;:::i;:::-;;:::i;34400:468::-;;;;;;;;;;-1:-1:-1;34400:468:0;;;;;:::i;:::-;;:::i;51813:1376::-;;;;;;:::i;:::-;;:::i;49023:916::-;;;;;;:::i;:::-;;:::i;36387:214::-;;;;;;;;;;-1:-1:-1;36387:214:0;;;;;:::i;:::-;-1:-1:-1;;;;;36558:25:0;;;36529:4;36558:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;36387:214;49947:181;;;;;;;;;;-1:-1:-1;49947:181:0;;;;;:::i;:::-;;:::i;13457:238::-;;;;;;;;;;-1:-1:-1;13457:238:0;;;;;:::i;:::-;;:::i;46822:1098::-;47027:8;;-1:-1:-1;;;;;47027:8:0;47005:10;:31;46997:40;;;;;;47162:32;;;;;;;:19;:32;;;;;:39;;;;;:::i;:::-;;;47140:11;:18;:61;:168;;;;-1:-1:-1;47275:32:0;;;;;;;:19;:32;;;;;;;47265:43;;;;47275:32;47265:43;:::i;:::-;;;;;;;;47232:11;47222:22;;;;;;:86;47140:168;47118:270;;;;-1:-1:-1;;;47118:270:0;;12086:2:1;47118:270:0;;;12068:21:1;12125:2;12105:18;;;12098:30;12164:34;12144:18;;;12137:62;-1:-1:-1;;;12215:18:1;;;12208:50;12275:19;;47118:270:0;;;;;;;;;47516:60;;-1:-1:-1;;;47516:60:0;;:4;;:16;;:60;;47533:11;;47546;;47559:6;;47567:8;;47516:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47512:401;;47723:101;;;;;;;;47756:8;:15;47723:101;;;;47800:8;47790:19;;;;;;47723:101;;;47672:14;:27;47687:11;47672:27;;;;;;;;;;;;;;;47700:11;47672:40;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;47672:48:0;;;;;;;;;;;;;:152;;;;;;;;;;;;;;;47844:57;;;;47858:11;;47871;;47713:6;;47892:8;;47844:57;:::i;:::-;;;;;;;;47512:401;46822:1098;;;;:::o;32887:355::-;33034:4;-1:-1:-1;;;;;;33076:40:0;;-1:-1:-1;;;33076:40:0;;:105;;-1:-1:-1;;;;;;;33133:48:0;;-1:-1:-1;;;33133:48:0;33076:105;:158;;;-1:-1:-1;;;;;;;;;;25633:40:0;;;33198:36;33056:178;32887:355;-1:-1:-1;;32887:355:0:o;34056:100::-;34110:13;34143:5;34136:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34056:100;:::o;35749:308::-;35870:7;39372:16;;;:7;:16;;;;;;-1:-1:-1;;;;;39372:16:0;35895:110;;;;-1:-1:-1;;;35895:110:0;;13348:2:1;35895:110:0;;;13330:21:1;13387:2;13367:18;;;13360:30;13426:34;13406:18;;;13399:62;-1:-1:-1;;;13477:18:1;;;13470:42;13529:19;;35895:110:0;13146:408:1;35895:110:0;-1:-1:-1;36025:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;36025:24:0;;35749:308::o;35272:411::-;35353:13;35369:23;35384:7;35369:14;:23::i;:::-;35353:39;;35417:5;-1:-1:-1;;;;;35411:11:0;:2;-1:-1:-1;;;;;35411:11:0;;35403:57;;;;-1:-1:-1;;;35403:57:0;;13761:2:1;35403:57:0;;;13743:21:1;13800:2;13780:18;;;13773:30;13839:34;13819:18;;;13812:62;-1:-1:-1;;;13890:18:1;;;13883:31;13931:19;;35403:57:0;13559:397:1;35403:57:0;11331:10;-1:-1:-1;;;;;35495:21:0;;;;:62;;-1:-1:-1;35520:37:0;35537:5;11331:10;36387:214;:::i;35520:37::-;35473:168;;;;-1:-1:-1;;;35473:168:0;;14163:2:1;35473:168:0;;;14145:21:1;14202:2;14182:18;;;14175:30;14241:34;14221:18;;;14214:62;14312:26;14292:18;;;14285:54;14356:19;;35473:168:0;13961:420:1;35473:168:0;35654:21;35663:2;35667:7;35654:8;:21::i;:::-;35342:341;35272:411;;:::o;50934:77::-;12594:7;12621:6;-1:-1:-1;;;;;12621:6:0;11331:10;12768:23;12760:68;;;;-1:-1:-1;;;12760:68:0;;;;;;;:::i;:::-;50990:6:::1;:15:::0;;-1:-1:-1;;50990:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;50934:77::o;47928:435::-;48154:10;48176:4;48154:27;48132:120;;;;-1:-1:-1;;;48132:120:0;;14949:2:1;48132:120:0;;;14931:21:1;14988:2;14968:18;;;14961:30;15027:34;15007:18;;;15000:62;-1:-1:-1;;;15078:18:1;;;15071:41;15129:19;;48132:120:0;14747:407:1;48132:120:0;48301:54;48312:11;48325;48338:6;48346:8;48301:10;:54::i;36668:376::-;36877:41;11331:10;36910:7;36877:18;:41::i;:::-;36855:140;;;;-1:-1:-1;;;36855:140:0;;;;;;;:::i;:::-;37008:28;37018:4;37024:2;37028:7;37008:9;:28::i;53368:183::-;12594:7;12621:6;-1:-1:-1;;;;;12621:6:0;11331:10;12768:23;12760:68;;;;-1:-1:-1;;;12760:68:0;;;;;;;:::i;:::-;53453:6:::1;::::0;53445:36:::1;::::0;53430:9:::1;::::0;-1:-1:-1;;;;;53453:6:0::1;::::0;53473:3;;53430:9;53445:36;53430:9;53445:36;53473:3;53453:6;53445:36:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53429:52;;;53500:4;53492:51;;;::::0;-1:-1:-1;;;53492:51:0;;15989:2:1;53492:51:0::1;::::0;::::1;15971:21:1::0;16028:2;16008:18;;;16001:30;16067:34;16047:18;;;16040:62;-1:-1:-1;;;16118:18:1;;;16111:32;16160:19;;53492:51:0::1;15787:398:1::0;53492:51:0::1;53418:133;53368:183:::0;:::o;37115:185::-;37253:39;37270:4;37276:2;37280:7;37253:39;;;;;;;;;;;;:16;:39::i;51019:74::-;12594:7;12621:6;-1:-1:-1;;;;;12621:6:0;11331:10;12768:23;12760:68;;;;-1:-1:-1;;;12760:68:0;;;;;;;:::i;:::-;51075:4:::1;:12:::0;51019:74::o;53197:90::-;12594:7;12621:6;-1:-1:-1;;;;;12621:6:0;11331:10;12768:23;12760:68;;;;-1:-1:-1;;;12760:68:0;;;;;;;:::i;:::-;53266:13;;::::1;::::0;:7:::1;::::0;:13:::1;::::0;::::1;::::0;::::1;:::i;33663:326::-:0;33780:7;33821:16;;;:7;:16;;;;;;-1:-1:-1;;;;;33821:16:0;;33848:110;;;;-1:-1:-1;;;33848:110:0;;16392:2:1;33848:110:0;;;16374:21:1;16431:2;16411:18;;;16404:30;16470:34;16450:18;;;16443:62;-1:-1:-1;;;16521:18:1;;;16514:39;16570:19;;33848:110:0;16190:405:1;51237:566:0;51305:6;;;;51304:7;51296:53;;;;-1:-1:-1;;;51296:53:0;;16802:2:1;51296:53:0;;;16784:21:1;16841:2;16821:18;;;16814:30;16880:34;16860:18;;;16853:62;-1:-1:-1;;;16931:18:1;;;16924:31;16972:19;;51296:53:0;16600:397:1;51296:53:0;51380:18;;51368:9;:30;;;51360:79;;;;-1:-1:-1;;;51360:79:0;;17204:2:1;51360:79:0;;;17186:21:1;17243:2;17223:18;;;17216:30;17282:34;17262:18;;;17255:62;-1:-1:-1;;;17333:18:1;;;17326:34;17377:19;;51360:79:0;17002:400:1;51360:79:0;51499:17;;51486:9;51472:23;;:11;;:23;;;;:::i;:::-;:44;;51450:123;;;;-1:-1:-1;;;51450:123:0;;17874:2:1;51450:123:0;;;17856:21:1;17913:2;17893:18;;;17886:30;17952:31;17932:18;;;17925:59;18001:18;;51450:123:0;17672:353:1;51450:123:0;51612:9;51605:16;;:4;;:16;;;;:::i;:::-;51592:9;:29;;51584:71;;;;-1:-1:-1;;;51584:71:0;;18405:2:1;51584:71:0;;;18387:21:1;18444:2;18424:18;;;18417:30;18483:31;18463:18;;;18456:59;18532:18;;51584:71:0;18203:353:1;51584:71:0;51666:36;51676:10;51690:11;;51688:13;;;;;:::i;:::-;;;;;-1:-1:-1;51666:9:0;:36::i;:::-;51717:9;:14;;51730:1;51717:14;51713:83;;51748:36;51758:10;51772:11;;51770:13;;;;;:::i;51748:36::-;51237:566;:::o;33306:295::-;33423:7;-1:-1:-1;;;;;33470:19:0;;33448:111;;;;-1:-1:-1;;;33448:111:0;;18903:2:1;33448:111:0;;;18885:21:1;18942:2;18922:18;;;18915:30;18981:34;18961:18;;;18954:62;-1:-1:-1;;;19032:18:1;;;19025:40;19082:19;;33448:111:0;18701:406:1;33448:111:0;-1:-1:-1;;;;;;33577:16:0;;;;;:9;:16;;;;;;;33306:295::o;13199:103::-;12594:7;12621:6;-1:-1:-1;;;;;12621:6:0;11331:10;12768:23;12760:68;;;;-1:-1:-1;;;12760:68:0;;;;;;;:::i;:::-;13264:30:::1;13291:1;13264:18;:30::i;:::-;13199:103::o:0;46621:51::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;53559:128::-;12594:7;12621:6;-1:-1:-1;;;;;12621:6:0;11331:10;12768:23;12760:68;;;;-1:-1:-1;;;12760:68:0;;;;;;;:::i;:::-;53644:26:::1;:35:::0;53559:128::o;34225:104::-;34281:13;34314:7;34307:14;;;;;:::i;36129:187::-;36256:52;11331:10;36289:8;36299;36256:18;:52::i;51099:130::-;12594:7;12621:6;-1:-1:-1;;;;;12621:6:0;11331:10;12768:23;12760:68;;;;-1:-1:-1;;;12760:68:0;;;;;;;:::i;:::-;51183:18:::1;:40:::0;51099:130::o;37371:365::-;37560:41;11331:10;37593:7;37560:18;:41::i;:::-;37538:140;;;;-1:-1:-1;;;37538:140:0;;;;;;;:::i;:::-;37689:39;37703:4;37709:2;37713:7;37722:5;37689:13;:39::i;34400:468::-;39348:4;39372:16;;;:7;:16;;;;;;34518:13;;-1:-1:-1;;;;;39372:16:0;34549:113;;;;-1:-1:-1;;;34549:113:0;;19314:2:1;34549:113:0;;;19296:21:1;19353:2;19333:18;;;19326:30;19392:34;19372:18;;;19365:62;-1:-1:-1;;;19443:18:1;;;19436:45;19498:19;;34549:113:0;19112:411:1;34549:113:0;34675:21;34699:10;:8;:10::i;:::-;34675:34;;34764:1;34746:7;34740:21;:25;:120;;;;;;;;;;;;;;;;;34809:7;34818:18;:7;:16;:18::i;:::-;34792:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34740:120;34720:140;34400:468;-1:-1:-1;;;34400:468:0:o;51813:1376::-;51933:16;51941:7;51933;:16::i;:::-;-1:-1:-1;;;;;51919:30:0;:10;-1:-1:-1;;;;;51919:30:0;;51897:124;;;;-1:-1:-1;;;51897:124:0;;20205:2:1;51897:124:0;;;20187:21:1;20244:2;20224:18;;;20217:30;20283:34;20263:18;;;20256:62;-1:-1:-1;;;20334:18:1;;;20327:42;20386:19;;51897:124:0;20003:408:1;51897:124:0;52054:29;;;52093:1;52054:29;;;:19;:29;;;;;:36;;;;;:::i;:::-;;;:40;52032:146;;;;-1:-1:-1;;;52032:146:0;;20618:2:1;52032:146:0;;;20600:21:1;20657:2;20637:18;;;20630:30;20696:34;20676:18;;;20669:62;20767:26;20747:18;;;20740:54;20811:19;;52032:146:0;20416:420:1;52032:146:0;52191:14;52197:7;52191:5;:14::i;:::-;52239:31;;;52250:10;52239:31;;;21015:51:1;21082:18;;;21075:34;;;52239:31:0;;;;;;;;;20988:18:1;;;52239:31:0;;52396:26;;-1:-1:-1;;;52343:90:0;;;21275:51:1;21342:11;;;;21335:27;;;;52343:90:0;;;;;;;;;;21378:12:1;;;52343:90:0;;;;52471:8;;-1:-1:-1;;;52471:153:0;;;52239:31;;52302:1;;-1:-1:-1;;;;;;;52471:8:0;;:21;;:153;;52507:8;;52538:4;;52239:31;;-1:-1:-1;;52343:90:0;;52471:153;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52446:178;;;52672:10;52659:9;:23;;52637:150;;;;-1:-1:-1;;;52637:150:0;;22500:2:1;52637:150:0;;;22482:21:1;22539:2;22519:18;;;22512:30;22578:34;22558:18;;;22551:62;22649:34;22629:18;;;22622:62;-1:-1:-1;;;22700:19:1;;;22693:44;22754:19;;52637:150:0;22298:481:1;52637:150:0;52800:8;;52892:29;;;52800:8;52892:29;;;:19;:29;;;;;;52800:381;;-1:-1:-1;;;52800:381:0;;-1:-1:-1;;;;;52800:8:0;;;;:13;;52821:9;;52800:381;;52846:8;;52975:7;;53031:10;;52800:8;53141:13;;52800:381;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51886:1303;;;;51813:1376;;:::o;49023:916::-;49282:27;;;49247:32;49282:27;;;:14;:27;;;;;;:64;;;;49324:11;;49282:64;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;49282:72:0;;;;;;;;;;49387:21;;;;49282:72;;-1:-1:-1;49365:123:0;;;;-1:-1:-1;;;49365:123:0;;24475:2:1;49365:123:0;;;24457:21:1;24514:2;24494:18;;;24487:30;24553:34;24533:18;;;24526:62;-1:-1:-1;;;24604:18:1;;;24597:36;24650:19;;49365:123:0;24273:402:1;49365:123:0;49540:23;;49521:42;;:107;;;;;49607:9;:21;;;49594:8;;49584:19;;;;;;;:::i;:::-;;;;;;;;:44;49521:107;49499:183;;;;-1:-1:-1;;;49499:183:0;;25158:2:1;49499:183:0;;;25140:21:1;25197:2;25177:18;;;25170:30;25236:28;25216:18;;;25209:56;25282:18;;49499:183:0;24956:350:1;49499:183:0;49756:1;49730:27;;;49768:21;;;:34;49871:60;;-1:-1:-1;;;49871:60:0;;:4;;:16;;:60;;49888:11;;49901;;49914:6;;49922:8;;;;49871:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49191:748;49023:916;;;;;:::o;49947:181::-;12594:7;12621:6;-1:-1:-1;;;;;12621:6:0;11331:10;12768:23;12760:68;;;;-1:-1:-1;;;12760:68:0;;;;;;;:::i;:::-;50074:29:::1;::::0;::::1;;::::0;;;:19:::1;:29;::::0;;;;:46:::1;::::0;50106:14;;50074:46:::1;:::i;13457:238::-:0;12594:7;12621:6;-1:-1:-1;;;;;12621:6:0;11331:10;12768:23;12760:68;;;;-1:-1:-1;;;12760:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13560:22:0;::::1;13538:110;;;::::0;-1:-1:-1;;;13538:110:0;;26236:2:1;13538:110:0::1;::::0;::::1;26218:21:1::0;26275:2;26255:18;;;26248:30;26314:34;26294:18;;;26287:62;-1:-1:-1;;;26365:18:1;;;26358:36;26411:19;;13538:110:0::1;26034:402:1::0;13538:110:0::1;13659:28;13678:8;13659:18;:28::i;43337:174::-:0;43412:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;43412:29:0;-1:-1:-1;;;;;43412:29:0;;;;;;;;:24;;43466:23;43412:24;43466:14;:23::i;:::-;-1:-1:-1;;;;;43457:46:0;;;;;;;;;;;43337:174;;:::o;53695:334::-;53872:14;53888:15;53932:8;53907:77;;;;;;;;;;;;:::i;:::-;53871:113;;;;53995:26;54005:6;54013:7;53995:9;:26::i;:::-;53860:169;;53695:334;;;;:::o;39577:452::-;39706:4;39372:16;;;:7;:16;;;;;;-1:-1:-1;;;;;39372:16:0;39728:110;;;;-1:-1:-1;;;39728:110:0;;26968:2:1;39728:110:0;;;26950:21:1;27007:2;26987:18;;;26980:30;27046:34;27026:18;;;27019:62;-1:-1:-1;;;27097:18:1;;;27090:42;27149:19;;39728:110:0;26766:408:1;39728:110:0;39849:13;39865:23;39880:7;39865:14;:23::i;:::-;39849:39;;39918:5;-1:-1:-1;;;;;39907:16:0;:7;-1:-1:-1;;;;;39907:16:0;;:64;;;;39964:7;-1:-1:-1;;;;;39940:31:0;:20;39952:7;39940:11;:20::i;:::-;-1:-1:-1;;;;;39940:31:0;;39907:64;:113;;;-1:-1:-1;;;;;;36558:25:0;;;36529:4;36558:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;39988:32;39899:122;39577:452;-1:-1:-1;;;;39577:452:0:o;42604:615::-;42777:4;-1:-1:-1;;;;;42750:31:0;:23;42765:7;42750:14;:23::i;:::-;-1:-1:-1;;;;;42750:31:0;;42728:122;;;;-1:-1:-1;;;42728:122:0;;27381:2:1;42728:122:0;;;27363:21:1;27420:2;27400:18;;;27393:30;27459:34;27439:18;;;27432:62;-1:-1:-1;;;27510:18:1;;;27503:39;27559:19;;42728:122:0;27179:405:1;42728:122:0;-1:-1:-1;;;;;42869:16:0;;42861:65;;;;-1:-1:-1;;;42861:65:0;;27791:2:1;42861:65:0;;;27773:21:1;27830:2;27810:18;;;27803:30;27869:34;27849:18;;;27842:62;-1:-1:-1;;;27920:18:1;;;27913:34;27964:19;;42861:65:0;27589:400:1;42861:65:0;43043:29;43060:1;43064:7;43043:8;:29::i;:::-;-1:-1:-1;;;;;43085:15:0;;;;;;:9;:15;;;;;:20;;43104:1;;43085:15;:20;;43104:1;;43085:20;:::i;:::-;;;;-1:-1:-1;;;;;;;43116:13:0;;;;;;:9;:13;;;;;:18;;43133:1;;43116:13;:18;;43133:1;;43116:18;:::i;:::-;;;;-1:-1:-1;;43145:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;43145:21:0;-1:-1:-1;;;;;43145:21:0;;;;;;;;;43184:27;;43145:16;;43184:27;;;;;;;42604:615;;;:::o;40371:110::-;40447:26;40457:2;40461:7;40447:26;;;;;;;;;;;;:9;:26::i;13855:191::-;13929:16;13948:6;;-1:-1:-1;;;;;13965:17:0;;;-1:-1:-1;;;;;;13965:17:0;;;;;;13998:40;;13948:6;;;;;;;13998:40;;13929:16;13998:40;13918:128;13855:191;:::o;43653:315::-;43808:8;-1:-1:-1;;;;;43799:17:0;:5;-1:-1:-1;;;;;43799:17:0;;43791:55;;;;-1:-1:-1;;;43791:55:0;;28326:2:1;43791:55:0;;;28308:21:1;28365:2;28345:18;;;28338:30;28404:27;28384:18;;;28377:55;28449:18;;43791:55:0;28124:349:1;43791:55:0;-1:-1:-1;;;;;43857:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;43857:46:0;;;;;;;;;;43919:41;;2562::1;;;43919::0;;2535:18:1;43919:41:0;;;;;;;43653:315;;;:::o;38618:352::-;38775:28;38785:4;38791:2;38795:7;38775:9;:28::i;:::-;38836:48;38859:4;38865:2;38869:7;38878:5;38836:22;:48::i;:::-;38814:148;;;;-1:-1:-1;;;38814:148:0;;;;;;;:::i;54037:100::-;54089:13;54122:7;54115:14;;;;;:::i;8783:723::-;8839:13;9060:5;9069:1;9060:10;9056:53;;-1:-1:-1;;9087:10:0;;;;;;;;;;;;-1:-1:-1;;;9087:10:0;;;;;8783:723::o;9056:53::-;9134:5;9119:12;9175:78;9182:9;;9175:78;;9208:8;;;;:::i;:::-;;-1:-1:-1;9231:10:0;;-1:-1:-1;9239:2:0;9231:10;;:::i;:::-;;;9175:78;;;9263:19;9295:6;-1:-1:-1;;;;;9285:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9285:17:0;;9263:39;;9313:154;9320:10;;9313:154;;9347:11;9357:1;9347:11;;:::i;:::-;;-1:-1:-1;9416:10:0;9424:2;9416:5;:10;:::i;:::-;9403:24;;:2;:24;:::i;:::-;9390:39;;9373:6;9380;9373:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;9373:56:0;;;;;;;;-1:-1:-1;9444:11:0;9453:2;9444:11;;:::i;:::-;;;9313:154;;41907:360;41967:13;41983:23;41998:7;41983:14;:23::i;:::-;41967:39;;42108:29;42125:1;42129:7;42108:8;:29::i;:::-;-1:-1:-1;;;;;42150:16:0;;;;;;:9;:16;;;;;:21;;42170:1;;42150:16;:21;;42170:1;;42150:21;:::i;:::-;;;;-1:-1:-1;;42189:16:0;;;;:7;:16;;;;;;42182:23;;-1:-1:-1;;;;;;42182:23:0;;;42223:36;42197:7;;42189:16;-1:-1:-1;;;;;42223:36:0;;;;;42189:16;;42223:36;41956:311;41907:360;:::o;40708:321::-;40838:18;40844:2;40848:7;40838:5;:18::i;:::-;40889:54;40920:1;40924:2;40928:7;40937:5;40889:22;:54::i;:::-;40867:154;;;;-1:-1:-1;;;40867:154:0;;;;;;;:::i;44533:980::-;44688:4;-1:-1:-1;;;;;44709:13:0;;15194:20;15242:8;44705:801;;44762:175;;-1:-1:-1;;;44762:175:0;;-1:-1:-1;;;;;44762:36:0;;;;;:175;;11331:10;;44856:4;;44883:7;;44913:5;;44762:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44762:175:0;;;;;;;;-1:-1:-1;;44762:175:0;;;;;;;;;;;;:::i;:::-;;;44741:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45120:6;:13;45137:1;45120:18;45116:320;;45163:108;;-1:-1:-1;;;45163:108:0;;;;;;;:::i;45116:320::-;45386:6;45380:13;45371:6;45367:2;45363:15;45356:38;44741:710;-1:-1:-1;;;;;;45001:51:0;-1:-1:-1;;;45001:51:0;;-1:-1:-1;44994:58:0;;44705:801;-1:-1:-1;45490:4:0;44533:980;;;;;;:::o;41365:313::-;-1:-1:-1;;;;;41445:16:0;;41437:61;;;;-1:-1:-1;;;41437:61:0;;30353:2:1;41437:61:0;;;30335:21:1;;;30372:18;;;30365:30;30431:34;30411:18;;;30404:62;30483:18;;41437:61:0;30151:356:1;41437:61:0;-1:-1:-1;;;;;41569:13:0;;;;;;:9;:13;;;;;:18;;41586:1;;41569:13;:18;;41586:1;;41569:18;:::i;:::-;;;;-1:-1:-1;;41598:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;41598:21:0;-1:-1:-1;;;;;41598:21:0;;;;;;;;41637:33;;41598:16;;;41637:33;;41598:16;;41637:33;41365:313;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:159:1;81:20;;141:6;130:18;;120:29;;110:57;;163:1;160;153:12;110:57;14:159;;;:::o;178:127::-;239:10;234:3;230:20;227:1;220:31;270:4;267:1;260:15;294:4;291:1;284:15;310:631;374:5;-1:-1:-1;;;;;445:2:1;437:6;434:14;431:40;;;451:18;;:::i;:::-;526:2;520:9;494:2;580:15;;-1:-1:-1;;576:24:1;;;602:2;572:33;568:42;556:55;;;626:18;;;646:22;;;623:46;620:72;;;672:18;;:::i;:::-;712:10;708:2;701:22;741:6;732:15;;771:6;763;756:22;811:3;802:6;797:3;793:16;790:25;787:45;;;828:1;825;818:12;787:45;878:6;873:3;866:4;858:6;854:17;841:44;933:1;926:4;917:6;909;905:19;901:30;894:41;;;;310:631;;;;;:::o;946:220::-;988:5;1041:3;1034:4;1026:6;1022:17;1018:27;1008:55;;1059:1;1056;1049:12;1008:55;1081:79;1156:3;1147:6;1134:20;1127:4;1119:6;1115:17;1081:79;:::i;1171:171::-;1238:20;;-1:-1:-1;;;;;1287:30:1;;1277:41;;1267:69;;1332:1;1329;1322:12;1347:684;1449:6;1457;1465;1473;1526:3;1514:9;1505:7;1501:23;1497:33;1494:53;;;1543:1;1540;1533:12;1494:53;1566:28;1584:9;1566:28;:::i;:::-;1556:38;;1645:2;1634:9;1630:18;1617:32;-1:-1:-1;;;;;1709:2:1;1701:6;1698:14;1695:34;;;1725:1;1722;1715:12;1695:34;1748:49;1789:7;1780:6;1769:9;1765:22;1748:49;:::i;:::-;1738:59;;1816:37;1849:2;1838:9;1834:18;1816:37;:::i;:::-;1806:47;;1906:2;1895:9;1891:18;1878:32;1862:48;;1935:2;1925:8;1922:16;1919:36;;;1951:1;1948;1941:12;1919:36;;1974:51;2017:7;2006:8;1995:9;1991:24;1974:51;:::i;:::-;1964:61;;;1347:684;;;;;;;:::o;2036:131::-;-1:-1:-1;;;;;;2110:32:1;;2100:43;;2090:71;;2157:1;2154;2147:12;2172:245;2230:6;2283:2;2271:9;2262:7;2258:23;2254:32;2251:52;;;2299:1;2296;2289:12;2251:52;2338:9;2325:23;2357:30;2381:5;2357:30;:::i;2614:258::-;2686:1;2696:113;2710:6;2707:1;2704:13;2696:113;;;2786:11;;;2780:18;2767:11;;;2760:39;2732:2;2725:10;2696:113;;;2827:6;2824:1;2821:13;2818:48;;;-1:-1:-1;;2862:1:1;2844:16;;2837:27;2614:258::o;2877:::-;2919:3;2957:5;2951:12;2984:6;2979:3;2972:19;3000:63;3056:6;3049:4;3044:3;3040:14;3033:4;3026:5;3022:16;3000:63;:::i;:::-;3117:2;3096:15;-1:-1:-1;;3092:29:1;3083:39;;;;3124:4;3079:50;;2877:258;-1:-1:-1;;2877:258:1:o;3140:220::-;3289:2;3278:9;3271:21;3252:4;3309:45;3350:2;3339:9;3335:18;3327:6;3309:45;:::i;3365:180::-;3424:6;3477:2;3465:9;3456:7;3452:23;3448:32;3445:52;;;3493:1;3490;3483:12;3445:52;-1:-1:-1;3516:23:1;;3365:180;-1:-1:-1;3365:180:1:o;3867:131::-;-1:-1:-1;;;;;3942:31:1;;3932:42;;3922:70;;3988:1;3985;3978:12;4003:315;4071:6;4079;4132:2;4120:9;4111:7;4107:23;4103:32;4100:52;;;4148:1;4145;4138:12;4100:52;4187:9;4174:23;4206:31;4231:5;4206:31;:::i;:::-;4256:5;4308:2;4293:18;;;;4280:32;;-1:-1:-1;;;4003:315:1:o;4505:160::-;4570:20;;4626:13;;4619:21;4609:32;;4599:60;;4655:1;4652;4645:12;4670:180;4726:6;4779:2;4767:9;4758:7;4754:23;4750:32;4747:52;;;4795:1;4792;4785:12;4747:52;4818:26;4834:9;4818:26;:::i;4855:456::-;4932:6;4940;4948;5001:2;4989:9;4980:7;4976:23;4972:32;4969:52;;;5017:1;5014;5007:12;4969:52;5056:9;5043:23;5075:31;5100:5;5075:31;:::i;:::-;5125:5;-1:-1:-1;5182:2:1;5167:18;;5154:32;5195:33;5154:32;5195:33;:::i;:::-;4855:456;;5247:7;;-1:-1:-1;;;5301:2:1;5286:18;;;;5273:32;;4855:456::o;5316:450::-;5385:6;5438:2;5426:9;5417:7;5413:23;5409:32;5406:52;;;5454:1;5451;5444:12;5406:52;5494:9;5481:23;-1:-1:-1;;;;;5519:6:1;5516:30;5513:50;;;5559:1;5556;5549:12;5513:50;5582:22;;5635:4;5627:13;;5623:27;-1:-1:-1;5613:55:1;;5664:1;5661;5654:12;5613:55;5687:73;5752:7;5747:2;5734:16;5729:2;5725;5721:11;5687:73;:::i;5771:269::-;5828:6;5881:2;5869:9;5860:7;5856:23;5852:32;5849:52;;;5897:1;5894;5887:12;5849:52;5936:9;5923:23;5986:4;5979:5;5975:16;5968:5;5965:27;5955:55;;6006:1;6003;5996:12;6045:247;6104:6;6157:2;6145:9;6136:7;6132:23;6128:32;6125:52;;;6173:1;6170;6163:12;6125:52;6212:9;6199:23;6231:31;6256:5;6231:31;:::i;6297:184::-;6355:6;6408:2;6396:9;6387:7;6383:23;6379:32;6376:52;;;6424:1;6421;6414:12;6376:52;6447:28;6465:9;6447:28;:::i;6709:460::-;6794:6;6802;6810;6863:2;6851:9;6842:7;6838:23;6834:32;6831:52;;;6879:1;6876;6869:12;6831:52;6902:28;6920:9;6902:28;:::i;:::-;6892:38;;6981:2;6970:9;6966:18;6953:32;-1:-1:-1;;;;;7000:6:1;6997:30;6994:50;;;7040:1;7037;7030:12;6994:50;7063:49;7104:7;7095:6;7084:9;7080:22;7063:49;:::i;:::-;7053:59;;;7159:2;7148:9;7144:18;7131:32;7121:42;;6709:460;;;;;:::o;7427:315::-;7492:6;7500;7553:2;7541:9;7532:7;7528:23;7524:32;7521:52;;;7569:1;7566;7559:12;7521:52;7608:9;7595:23;7627:31;7652:5;7627:31;:::i;:::-;7677:5;-1:-1:-1;7701:35:1;7732:2;7717:18;;7701:35;:::i;:::-;7691:45;;7427:315;;;;;:::o;7747:665::-;7842:6;7850;7858;7866;7919:3;7907:9;7898:7;7894:23;7890:33;7887:53;;;7936:1;7933;7926:12;7887:53;7975:9;7962:23;7994:31;8019:5;7994:31;:::i;:::-;8044:5;-1:-1:-1;8101:2:1;8086:18;;8073:32;8114:33;8073:32;8114:33;:::i;:::-;8166:7;-1:-1:-1;8220:2:1;8205:18;;8192:32;;-1:-1:-1;8275:2:1;8260:18;;8247:32;-1:-1:-1;;;;;8291:30:1;;8288:50;;;8334:1;8331;8324:12;8288:50;8357:49;8398:7;8389:6;8378:9;8374:22;8357:49;:::i;8417:252::-;8484:6;8492;8545:2;8533:9;8524:7;8520:23;8516:32;8513:52;;;8561:1;8558;8551:12;8513:52;8584:28;8602:9;8584:28;:::i;8674:347::-;8725:8;8735:6;8789:3;8782:4;8774:6;8770:17;8766:27;8756:55;;8807:1;8804;8797:12;8756:55;-1:-1:-1;8830:20:1;;-1:-1:-1;;;;;8862:30:1;;8859:50;;;8905:1;8902;8895:12;8859:50;8942:4;8934:6;8930:17;8918:29;;8994:3;8987:4;8978:6;8970;8966:19;8962:30;8959:39;8956:59;;;9011:1;9008;9001:12;8956:59;8674:347;;;;;:::o;9026:773::-;9130:6;9138;9146;9154;9162;9215:3;9203:9;9194:7;9190:23;9186:33;9183:53;;;9232:1;9229;9222:12;9183:53;9255:28;9273:9;9255:28;:::i;:::-;9245:38;;9334:2;9323:9;9319:18;9306:32;-1:-1:-1;;;;;9398:2:1;9390:6;9387:14;9384:34;;;9414:1;9411;9404:12;9384:34;9437:49;9478:7;9469:6;9458:9;9454:22;9437:49;:::i;:::-;9427:59;;9505:37;9538:2;9527:9;9523:18;9505:37;:::i;:::-;9495:47;;9595:2;9584:9;9580:18;9567:32;9551:48;;9624:2;9614:8;9611:16;9608:36;;;9640:1;9637;9630:12;9608:36;;9679:60;9731:7;9720:8;9709:9;9705:24;9679:60;:::i;:::-;9026:773;;;;-1:-1:-1;9026:773:1;;-1:-1:-1;9758:8:1;;9653:86;9026:773;-1:-1:-1;;;9026:773:1:o;9804:388::-;9872:6;9880;9933:2;9921:9;9912:7;9908:23;9904:32;9901:52;;;9949:1;9946;9939:12;9901:52;9988:9;9975:23;10007:31;10032:5;10007:31;:::i;:::-;10057:5;-1:-1:-1;10114:2:1;10099:18;;10086:32;10127:33;10086:32;10127:33;:::i;:::-;10179:7;10169:17;;;9804:388;;;;;:::o;10197:481::-;10275:6;10283;10291;10344:2;10332:9;10323:7;10319:23;10315:32;10312:52;;;10360:1;10357;10350:12;10312:52;10383:28;10401:9;10383:28;:::i;:::-;10373:38;;10462:2;10451:9;10447:18;10434:32;-1:-1:-1;;;;;10481:6:1;10478:30;10475:50;;;10521:1;10518;10511:12;10475:50;10560:58;10610:7;10601:6;10590:9;10586:22;10560:58;:::i;:::-;10197:481;;10637:8;;-1:-1:-1;10534:84:1;;-1:-1:-1;;;;10197:481:1:o;10683:380::-;10762:1;10758:12;;;;10805;;;10826:61;;10880:4;10872:6;10868:17;10858:27;;10826:61;10933:2;10925:6;10922:14;10902:18;10899:38;10896:161;;10979:10;10974:3;10970:20;10967:1;10960:31;11014:4;11011:1;11004:15;11042:4;11039:1;11032:15;10896:161;;10683:380;;;:::o;11068:811::-;11194:3;11223:1;11256:6;11250:13;11286:36;11312:9;11286:36;:::i;:::-;11341:1;11358:18;;;11385:104;;;;11503:1;11498:356;;;;11351:503;;11385:104;-1:-1:-1;;11418:24:1;;11406:37;;11463:16;;;;-1:-1:-1;11385:104:1;;11498:356;11529:6;11526:1;11519:17;11559:4;11604:2;11601:1;11591:16;11629:1;11643:165;11657:6;11654:1;11651:13;11643:165;;;11735:14;;11722:11;;;11715:35;11778:16;;;;11672:10;;11643:165;;;11647:3;;;11837:6;11832:3;11828:16;11821:23;;11351:503;-1:-1:-1;11870:3:1;;11068:811;-1:-1:-1;;;;;;11068:811:1:o;12305:557::-;12562:6;12554;12550:19;12539:9;12532:38;12606:3;12601:2;12590:9;12586:18;12579:31;12513:4;12633:46;12674:3;12663:9;12659:19;12651:6;12633:46;:::i;:::-;-1:-1:-1;;;;;12719:6:1;12715:31;12710:2;12699:9;12695:18;12688:59;12795:9;12787:6;12783:22;12778:2;12767:9;12763:18;12756:50;12823:33;12849:6;12841;12823:33;:::i;:::-;12815:41;12305:557;-1:-1:-1;;;;;;;12305:557:1:o;12867:274::-;12996:3;13034:6;13028:13;13050:53;13096:6;13091:3;13084:4;13076:6;13072:17;13050:53;:::i;:::-;13119:16;;;;;12867:274;-1:-1:-1;;12867:274:1:o;14386:356::-;14588:2;14570:21;;;14607:18;;;14600:30;14666:34;14661:2;14646:18;;14639:62;14733:2;14718:18;;14386:356::o;15159:413::-;15361:2;15343:21;;;15400:2;15380:18;;;15373:30;15439:34;15434:2;15419:18;;15412:62;-1:-1:-1;;;15505:2:1;15490:18;;15483:47;15562:3;15547:19;;15159:413::o;17407:127::-;17468:10;17463:3;17459:20;17456:1;17449:31;17499:4;17496:1;17489:15;17523:4;17520:1;17513:15;17539:128;17579:3;17610:1;17606:6;17603:1;17600:13;17597:39;;;17616:18;;:::i;:::-;-1:-1:-1;17652:9:1;;17539:128::o;18030:168::-;18070:7;18136:1;18132;18128:6;18124:14;18121:1;18118:21;18113:1;18106:9;18099:17;18095:45;18092:71;;;18143:18;;:::i;:::-;-1:-1:-1;18183:9:1;;18030:168::o;18561:135::-;18600:3;18621:17;;;18618:43;;18641:18;;:::i;:::-;-1:-1:-1;18688:1:1;18677:13;;18561:135::o;19528:470::-;19707:3;19745:6;19739:13;19761:53;19807:6;19802:3;19795:4;19787:6;19783:17;19761:53;:::i;:::-;19877:13;;19836:16;;;;19899:57;19877:13;19836:16;19933:4;19921:17;;19899:57;:::i;:::-;19972:20;;19528:470;-1:-1:-1;;;;19528:470:1:o;21401:642::-;21682:6;21670:19;;21652:38;;-1:-1:-1;;;;;21726:32:1;;21721:2;21706:18;;21699:60;21746:3;21790:2;21775:18;;21768:31;;;-1:-1:-1;;21822:46:1;;21848:19;;21840:6;21822:46;:::i;:::-;21918:6;21911:14;21904:22;21899:2;21888:9;21884:18;21877:50;21976:9;21968:6;21964:22;21958:3;21947:9;21943:19;21936:51;22004:33;22030:6;22022;22004:33;:::i;:::-;21996:41;21401:642;-1:-1:-1;;;;;;;;21401:642:1:o;22048:245::-;22127:6;22135;22188:2;22176:9;22167:7;22163:23;22159:32;22156:52;;;22204:1;22201;22194:12;22156:52;-1:-1:-1;;22227:16:1;;22283:2;22268:18;;;22262:25;22227:16;;22262:25;;-1:-1:-1;22048:245:1:o;22784:1484::-;23130:6;23122;23118:19;23107:9;23100:38;23081:4;23157:2;23195:3;23190:2;23179:9;23175:18;23168:31;23219:1;23252:6;23246:13;23282:36;23308:9;23282:36;:::i;:::-;23355:6;23349:3;23338:9;23334:19;23327:35;23381:3;23403:1;23435:2;23424:9;23420:18;23452:1;23447:122;;;;23583:1;23578:354;;;;23413:519;;23447:122;-1:-1:-1;;23495:24:1;;23475:18;;;23468:52;23555:3;23540:19;;;-1:-1:-1;23447:122:1;;23578:354;23609:6;23606:1;23599:17;23657:2;23654:1;23644:16;23682:1;23696:180;23710:6;23707:1;23704:13;23696:180;;;23803:14;;23779:17;;;23775:26;;23768:50;23846:16;;;;23725:10;;23696:180;;;23900:17;;23896:26;;;-1:-1:-1;;23413:519:1;;;;;;23977:9;23972:3;23968:19;23963:2;23952:9;23948:18;23941:47;24011:30;24037:3;24029:6;24011:30;:::i;:::-;23997:44;;;24050:46;24092:2;24081:9;24077:18;24069:6;-1:-1:-1;;;;;3616:31:1;3604:44;;3550:104;24050:46;-1:-1:-1;;;;;3616:31:1;;24147:3;24132:19;;3604:44;24201:9;24193:6;24189:22;24183:3;24172:9;24168:19;24161:51;24229:33;24255:6;24247;24229:33;:::i;:::-;24221:41;22784:1484;-1:-1:-1;;;;;;;;;22784:1484:1:o;24680:271::-;24863:6;24855;24850:3;24837:33;24819:3;24889:16;;24914:13;;;24889:16;24680:271;-1:-1:-1;24680:271:1:o;25311:718::-;25578:6;25570;25566:19;25555:9;25548:38;25622:3;25617:2;25606:9;25602:18;25595:31;25529:4;25649:46;25690:3;25679:9;25675:19;25667:6;25649:46;:::i;:::-;-1:-1:-1;;;;;25735:6:1;25731:31;25726:2;25715:9;25711:18;25704:59;25811:9;25803:6;25799:22;25794:2;25783:9;25779:18;25772:50;25846:6;25838;25831:22;25900:6;25892;25887:2;25879:6;25875:15;25862:45;25953:1;25948:2;25939:6;25931;25927:19;25923:28;25916:39;26020:2;26013;26009:7;26004:2;25996:6;25992:15;25988:29;25980:6;25976:42;25972:51;25964:59;;;25311:718;;;;;;;;:::o;26441:320::-;26528:6;26536;26589:2;26577:9;26568:7;26564:23;26560:32;26557:52;;;26605:1;26602;26595:12;26557:52;26637:9;26631:16;26656:31;26681:5;26656:31;:::i;:::-;26751:2;26736:18;;;;26730:25;26706:5;;26730:25;;-1:-1:-1;;;26441:320:1:o;27994:125::-;28034:4;28062:1;28059;28056:8;28053:34;;;28067:18;;:::i;:::-;-1:-1:-1;28104:9:1;;27994:125::o;28478:414::-;28680:2;28662:21;;;28719:2;28699:18;;;28692:30;28758:34;28753:2;28738:18;;28731:62;-1:-1:-1;;;28824:2:1;28809:18;;28802:48;28882:3;28867:19;;28478:414::o;28897:127::-;28958:10;28953:3;28949:20;28946:1;28939:31;28989:4;28986:1;28979:15;29013:4;29010:1;29003:15;29029:120;29069:1;29095;29085:35;;29100:18;;:::i;:::-;-1:-1:-1;29134:9:1;;29029:120::o;29154:112::-;29186:1;29212;29202:35;;29217:18;;:::i;:::-;-1:-1:-1;29251:9:1;;29154:112::o;29271:127::-;29332:10;29327:3;29323:20;29320:1;29313:31;29363:4;29360:1;29353:15;29387:4;29384:1;29377:15;29403:489;-1:-1:-1;;;;;29672:15:1;;;29654:34;;29724:15;;29719:2;29704:18;;29697:43;29771:2;29756:18;;29749:34;;;29819:3;29814:2;29799:18;;29792:31;;;29597:4;;29840:46;;29866:19;;29858:6;29840:46;:::i;:::-;29832:54;29403:489;-1:-1:-1;;;;;;29403:489:1:o;29897:249::-;29966:6;30019:2;30007:9;29998:7;29994:23;29990:32;29987:52;;;30035:1;30032;30025:12;29987:52;30067:9;30061:16;30086:30;30110:5;30086:30;:::i

Swarm Source

ipfs://287beb2e0d5c6e22b63ccdd6f44a8a265c722875fe9db416a59fce3679a7b61d
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.