ETH Price: $2,484.53 (-1.16%)

Token

OLDV.M (OLDV.M)
 

Overview

Max Total Supply

0 OLDV.M

Holders

1

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
shunmatsuo.eth
Balance
1 OLDV.M
0x77ea4c7254657940a355b8e83ec784fba6a52a3e
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:
OldvM

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-23
*/

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/Strings.sol


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

// 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/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 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
                /// @solidity memory-safe-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 (last updated v4.6.0) (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 `IERC721Receiver.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 (last updated v4.7.0) (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`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;

    /**
     * @dev 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 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 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 the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

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

// 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 (last updated v4.7.0) (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: address zero is not a valid owner");
        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: invalid token ID");
        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) {
        _requireMinted(tokenId);

        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 overridden 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 token owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        _requireMinted(tokenId);

        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: caller is not token 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: caller is not token 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) {
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);
    }

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

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

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

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

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

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

        _afterTokenTransfer(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);

        _afterTokenTransfer(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 from incorrect owner");
        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);

        _afterTokenTransfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits an {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 an {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 Reverts if the `tokenId` has not been minted yet.
     */
    function _requireMinted(uint256 tokenId) internal view virtual {
        require(_exists(tokenId), "ERC721: invalid token ID");
    }

    /**
     * @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 {
                    /// @solidity memory-safe-assembly
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

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

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

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


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/extensions/ERC721Burnable.sol)

pragma solidity ^0.8.0;



/**
 * @title ERC721 Burnable Token
 * @dev ERC721 Token that can be burned (destroyed).
 */
abstract contract ERC721Burnable is Context, ERC721 {
    /**
     * @dev Burns `tokenId`. See {ERC721-_burn}.
     *
     * Requirements:
     *
     * - The caller must own `tokenId` or be an approved operator.
     */
    function burn(uint256 tokenId) public virtual {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved");
        _burn(tokenId);
    }
}

// File: contracts/OldvM.sol



pragma solidity ^0.8.0;



contract OldvM is ERC721, ERC721Burnable {
  constructor() ERC721("OLDV.M", "OLDV.M") {
      _safeMint(0x77Ea4c7254657940A355b8E83Ec784FBA6A52a3E, 0);
   }

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

    return "ipfs://bafkreierpnvhsfjdw6ntdw5eyfhcnx23mymct5z2o2d6whjwrjekypclyu";
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"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"}]

60806040523480156200001157600080fd5b506040518060400160405280600681526020017f4f4c44562e4d00000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f4f4c44562e4d0000000000000000000000000000000000000000000000000000815250816000908051906020019062000096929190620005c8565b508060019080519060200190620000af929190620005c8565b505050620000d97377ea4c7254657940a355b8e83ec784fba6a52a3e6000620000df60201b60201c565b62000ae2565b620001018282604051806020016040528060008152506200010560201b60201c565b5050565b6200011783836200017360201b60201c565b6200012c60008484846200036d60201b60201c565b6200016e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200016590620007ed565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620001e6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001dd9062000831565b60405180910390fd5b620001f7816200052760201b60201c565b156200023a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000231906200080f565b60405180910390fd5b6200024e600083836200059360201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620002a0919062000880565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a462000369600083836200059860201b60201c565b5050565b60006200039b8473ffffffffffffffffffffffffffffffffffffffff166200059d60201b62000a131760201c565b156200051a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620003cd620005c060201b60201c565b8786866040518563ffffffff1660e01b8152600401620003f1949392919062000799565b602060405180830381600087803b1580156200040c57600080fd5b505af19250505080156200044057506040513d601f19601f820116820180604052508101906200043d91906200068f565b60015b620004c9573d806000811462000473576040519150601f19603f3d011682016040523d82523d6000602084013e62000478565b606091505b50600081511415620004c1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004b890620007ed565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506200051f565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600033905090565b828054620005d6906200097d565b90600052602060002090601f016020900481019282620005fa576000855562000646565b82601f106200061557805160ff191683800117855562000646565b8280016001018555821562000646579182015b828111156200064557825182559160200191906001019062000628565b5b50905062000655919062000659565b5090565b5b80821115620006745760008160009055506001016200065a565b5090565b600081519050620006898162000ac8565b92915050565b600060208284031215620006a857620006a762000a11565b5b6000620006b88482850162000678565b91505092915050565b620006cc81620008dd565b82525050565b6000620006df8262000853565b620006eb81856200085e565b9350620006fd81856020860162000947565b620007088162000a16565b840191505092915050565b6000620007226032836200086f565b91506200072f8262000a27565b604082019050919050565b600062000749601c836200086f565b9150620007568262000a76565b602082019050919050565b6000620007706020836200086f565b91506200077d8262000a9f565b602082019050919050565b62000793816200093d565b82525050565b6000608082019050620007b06000830187620006c1565b620007bf6020830186620006c1565b620007ce604083018562000788565b8181036060830152620007e28184620006d2565b905095945050505050565b60006020820190508181036000830152620008088162000713565b9050919050565b600060208201905081810360008301526200082a816200073a565b9050919050565b600060208201905081810360008301526200084c8162000761565b9050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006200088d826200093d565b91506200089a836200093d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620008d257620008d1620009b3565b5b828201905092915050565b6000620008ea826200091d565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015620009675780820151818401526020810190506200094a565b8381111562000977576000848401525b50505050565b600060028204905060018216806200099657607f821691505b60208210811415620009ad57620009ac620009e2565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b62000ad381620008f1565b811462000adf57600080fd5b50565b61213b8062000af26000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80636352211e1161008c578063a22cb46511610066578063a22cb4651461025b578063b88d4fde14610277578063c87b56dd14610293578063e985e9c5146102c3576100ea565b80636352211e146101dd57806370a082311461020d57806395d89b411461023d576100ea565b8063095ea7b3116100c8578063095ea7b31461016d57806323b872dd1461018957806342842e0e146101a557806342966c68146101c1576100ea565b806301ffc9a7146100ef57806306fdde031461011f578063081812fc1461013d575b600080fd5b61010960048036038101906101049190611637565b6102f3565b6040516101169190611922565b60405180910390f35b6101276103d5565b604051610134919061193d565b60405180910390f35b61015760048036038101906101529190611691565b610467565b60405161016491906118bb565b60405180910390f35b610187600480360381019061018291906115f7565b6104ad565b005b6101a3600480360381019061019e91906114e1565b6105c5565b005b6101bf60048036038101906101ba91906114e1565b610625565b005b6101db60048036038101906101d69190611691565b610645565b005b6101f760048036038101906101f29190611691565b6106a1565b60405161020491906118bb565b60405180910390f35b61022760048036038101906102229190611474565b610753565b6040516102349190611a9f565b60405180910390f35b61024561080b565b604051610252919061193d565b60405180910390f35b610275600480360381019061027091906115b7565b61089d565b005b610291600480360381019061028c9190611534565b6108b3565b005b6102ad60048036038101906102a89190611691565b610915565b6040516102ba919061193d565b60405180910390f35b6102dd60048036038101906102d891906114a1565b61097f565b6040516102ea9190611922565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103be57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806103ce57506103cd82610a36565b5b9050919050565b6060600080546103e490611c88565b80601f016020809104026020016040519081016040528092919081815260200182805461041090611c88565b801561045d5780601f106104325761010080835404028352916020019161045d565b820191906000526020600020905b81548152906001019060200180831161044057829003601f168201915b5050505050905090565b600061047282610aa0565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006104b8826106a1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610529576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052090611a5f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610548610aeb565b73ffffffffffffffffffffffffffffffffffffffff161480610577575061057681610571610aeb565b61097f565b5b6105b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ad906119ff565b60405180910390fd5b6105c08383610af3565b505050565b6105d66105d0610aeb565b82610bac565b610615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060c90611a7f565b60405180910390fd5b610620838383610c41565b505050565b610640838383604051806020016040528060008152506108b3565b505050565b610656610650610aeb565b82610bac565b610695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068c90611a7f565b60405180910390fd5b61069e81610ea8565b50565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561074a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074190611a3f565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156107c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bb906119df565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606001805461081a90611c88565b80601f016020809104026020016040519081016040528092919081815260200182805461084690611c88565b80156108935780601f1061086857610100808354040283529160200191610893565b820191906000526020600020905b81548152906001019060200180831161087657829003601f168201915b5050505050905090565b6108af6108a8610aeb565b8383610fc5565b5050565b6108c46108be610aeb565b83610bac565b610903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fa90611a7f565b60405180910390fd5b61090f84848484611132565b50505050565b60606109208261118e565b61095f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095690611a1f565b60405180910390fd5b6040518060800160405280604281526020016120c4604291399050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610aa98161118e565b610ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610adf90611a3f565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610b66836106a1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610bb8836106a1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610bfa5750610bf9818561097f565b5b80610c3857508373ffffffffffffffffffffffffffffffffffffffff16610c2084610467565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610c61826106a1565b73ffffffffffffffffffffffffffffffffffffffff1614610cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cae9061197f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1e9061199f565b60405180910390fd5b610d328383836111fa565b610d3d600082610af3565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d8d9190611b9e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610de49190611b48565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610ea38383836111ff565b505050565b6000610eb3826106a1565b9050610ec1816000846111fa565b610ecc600083610af3565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f1c9190611b9e565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610fc1816000846111ff565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102b906119bf565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516111259190611922565b60405180910390a3505050565b61113d848484610c41565b61114984848484611204565b611188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117f9061195f565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b505050565b60006112258473ffffffffffffffffffffffffffffffffffffffff16610a13565b1561138e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261124e610aeb565b8786866040518563ffffffff1660e01b815260040161127094939291906118d6565b602060405180830381600087803b15801561128a57600080fd5b505af19250505080156112bb57506040513d601f19601f820116820180604052508101906112b89190611664565b60015b61133e573d80600081146112eb576040519150601f19603f3d011682016040523d82523d6000602084013e6112f0565b606091505b50600081511415611336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132d9061195f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611393565b600190505b949350505050565b60006113ae6113a984611adf565b611aba565b9050828152602081018484840111156113ca576113c9611d7d565b5b6113d5848285611c46565b509392505050565b6000813590506113ec81612067565b92915050565b6000813590506114018161207e565b92915050565b60008135905061141681612095565b92915050565b60008151905061142b81612095565b92915050565b600082601f83011261144657611445611d78565b5b813561145684826020860161139b565b91505092915050565b60008135905061146e816120ac565b92915050565b60006020828403121561148a57611489611d87565b5b6000611498848285016113dd565b91505092915050565b600080604083850312156114b8576114b7611d87565b5b60006114c6858286016113dd565b92505060206114d7858286016113dd565b9150509250929050565b6000806000606084860312156114fa576114f9611d87565b5b6000611508868287016113dd565b9350506020611519868287016113dd565b925050604061152a8682870161145f565b9150509250925092565b6000806000806080858703121561154e5761154d611d87565b5b600061155c878288016113dd565b945050602061156d878288016113dd565b935050604061157e8782880161145f565b925050606085013567ffffffffffffffff81111561159f5761159e611d82565b5b6115ab87828801611431565b91505092959194509250565b600080604083850312156115ce576115cd611d87565b5b60006115dc858286016113dd565b92505060206115ed858286016113f2565b9150509250929050565b6000806040838503121561160e5761160d611d87565b5b600061161c858286016113dd565b925050602061162d8582860161145f565b9150509250929050565b60006020828403121561164d5761164c611d87565b5b600061165b84828501611407565b91505092915050565b60006020828403121561167a57611679611d87565b5b60006116888482850161141c565b91505092915050565b6000602082840312156116a7576116a6611d87565b5b60006116b58482850161145f565b91505092915050565b6116c781611bd2565b82525050565b6116d681611be4565b82525050565b60006116e782611b10565b6116f18185611b26565b9350611701818560208601611c55565b61170a81611d8c565b840191505092915050565b600061172082611b1b565b61172a8185611b37565b935061173a818560208601611c55565b61174381611d8c565b840191505092915050565b600061175b603283611b37565b915061176682611d9d565b604082019050919050565b600061177e602583611b37565b915061178982611dec565b604082019050919050565b60006117a1602483611b37565b91506117ac82611e3b565b604082019050919050565b60006117c4601983611b37565b91506117cf82611e8a565b602082019050919050565b60006117e7602983611b37565b91506117f282611eb3565b604082019050919050565b600061180a603e83611b37565b915061181582611f02565b604082019050919050565b600061182d602f83611b37565b915061183882611f51565b604082019050919050565b6000611850601883611b37565b915061185b82611fa0565b602082019050919050565b6000611873602183611b37565b915061187e82611fc9565b604082019050919050565b6000611896602e83611b37565b91506118a182612018565b604082019050919050565b6118b581611c3c565b82525050565b60006020820190506118d060008301846116be565b92915050565b60006080820190506118eb60008301876116be565b6118f860208301866116be565b61190560408301856118ac565b818103606083015261191781846116dc565b905095945050505050565b600060208201905061193760008301846116cd565b92915050565b600060208201905081810360008301526119578184611715565b905092915050565b600060208201905081810360008301526119788161174e565b9050919050565b6000602082019050818103600083015261199881611771565b9050919050565b600060208201905081810360008301526119b881611794565b9050919050565b600060208201905081810360008301526119d8816117b7565b9050919050565b600060208201905081810360008301526119f8816117da565b9050919050565b60006020820190508181036000830152611a18816117fd565b9050919050565b60006020820190508181036000830152611a3881611820565b9050919050565b60006020820190508181036000830152611a5881611843565b9050919050565b60006020820190508181036000830152611a7881611866565b9050919050565b60006020820190508181036000830152611a9881611889565b9050919050565b6000602082019050611ab460008301846118ac565b92915050565b6000611ac4611ad5565b9050611ad08282611cba565b919050565b6000604051905090565b600067ffffffffffffffff821115611afa57611af9611d49565b5b611b0382611d8c565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000611b5382611c3c565b9150611b5e83611c3c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611b9357611b92611ceb565b5b828201905092915050565b6000611ba982611c3c565b9150611bb483611c3c565b925082821015611bc757611bc6611ceb565b5b828203905092915050565b6000611bdd82611c1c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015611c73578082015181840152602081019050611c58565b83811115611c82576000848401525b50505050565b60006002820490506001821680611ca057607f821691505b60208210811415611cb457611cb3611d1a565b5b50919050565b611cc382611d8c565b810181811067ffffffffffffffff82111715611ce257611ce1611d49565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b61207081611bd2565b811461207b57600080fd5b50565b61208781611be4565b811461209257600080fd5b50565b61209e81611bf0565b81146120a957600080fd5b50565b6120b581611c3c565b81146120c057600080fd5b5056fe697066733a2f2f6261666b7265696572706e766873666a6477366e7464773565796668636e7832336d796d6374357a326f32643677686a77726a656b7970636c7975a26469706673582212205ccea36e8303453436e31b4ff45affaad755ce6fa2839d2feccc52ab5622d42564736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c80636352211e1161008c578063a22cb46511610066578063a22cb4651461025b578063b88d4fde14610277578063c87b56dd14610293578063e985e9c5146102c3576100ea565b80636352211e146101dd57806370a082311461020d57806395d89b411461023d576100ea565b8063095ea7b3116100c8578063095ea7b31461016d57806323b872dd1461018957806342842e0e146101a557806342966c68146101c1576100ea565b806301ffc9a7146100ef57806306fdde031461011f578063081812fc1461013d575b600080fd5b61010960048036038101906101049190611637565b6102f3565b6040516101169190611922565b60405180910390f35b6101276103d5565b604051610134919061193d565b60405180910390f35b61015760048036038101906101529190611691565b610467565b60405161016491906118bb565b60405180910390f35b610187600480360381019061018291906115f7565b6104ad565b005b6101a3600480360381019061019e91906114e1565b6105c5565b005b6101bf60048036038101906101ba91906114e1565b610625565b005b6101db60048036038101906101d69190611691565b610645565b005b6101f760048036038101906101f29190611691565b6106a1565b60405161020491906118bb565b60405180910390f35b61022760048036038101906102229190611474565b610753565b6040516102349190611a9f565b60405180910390f35b61024561080b565b604051610252919061193d565b60405180910390f35b610275600480360381019061027091906115b7565b61089d565b005b610291600480360381019061028c9190611534565b6108b3565b005b6102ad60048036038101906102a89190611691565b610915565b6040516102ba919061193d565b60405180910390f35b6102dd60048036038101906102d891906114a1565b61097f565b6040516102ea9190611922565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103be57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806103ce57506103cd82610a36565b5b9050919050565b6060600080546103e490611c88565b80601f016020809104026020016040519081016040528092919081815260200182805461041090611c88565b801561045d5780601f106104325761010080835404028352916020019161045d565b820191906000526020600020905b81548152906001019060200180831161044057829003601f168201915b5050505050905090565b600061047282610aa0565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006104b8826106a1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610529576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052090611a5f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610548610aeb565b73ffffffffffffffffffffffffffffffffffffffff161480610577575061057681610571610aeb565b61097f565b5b6105b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ad906119ff565b60405180910390fd5b6105c08383610af3565b505050565b6105d66105d0610aeb565b82610bac565b610615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060c90611a7f565b60405180910390fd5b610620838383610c41565b505050565b610640838383604051806020016040528060008152506108b3565b505050565b610656610650610aeb565b82610bac565b610695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068c90611a7f565b60405180910390fd5b61069e81610ea8565b50565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561074a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074190611a3f565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156107c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bb906119df565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606001805461081a90611c88565b80601f016020809104026020016040519081016040528092919081815260200182805461084690611c88565b80156108935780601f1061086857610100808354040283529160200191610893565b820191906000526020600020905b81548152906001019060200180831161087657829003601f168201915b5050505050905090565b6108af6108a8610aeb565b8383610fc5565b5050565b6108c46108be610aeb565b83610bac565b610903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fa90611a7f565b60405180910390fd5b61090f84848484611132565b50505050565b60606109208261118e565b61095f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095690611a1f565b60405180910390fd5b6040518060800160405280604281526020016120c4604291399050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610aa98161118e565b610ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610adf90611a3f565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610b66836106a1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610bb8836106a1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610bfa5750610bf9818561097f565b5b80610c3857508373ffffffffffffffffffffffffffffffffffffffff16610c2084610467565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610c61826106a1565b73ffffffffffffffffffffffffffffffffffffffff1614610cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cae9061197f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1e9061199f565b60405180910390fd5b610d328383836111fa565b610d3d600082610af3565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d8d9190611b9e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610de49190611b48565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610ea38383836111ff565b505050565b6000610eb3826106a1565b9050610ec1816000846111fa565b610ecc600083610af3565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f1c9190611b9e565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610fc1816000846111ff565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102b906119bf565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516111259190611922565b60405180910390a3505050565b61113d848484610c41565b61114984848484611204565b611188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117f9061195f565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b505050565b60006112258473ffffffffffffffffffffffffffffffffffffffff16610a13565b1561138e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261124e610aeb565b8786866040518563ffffffff1660e01b815260040161127094939291906118d6565b602060405180830381600087803b15801561128a57600080fd5b505af19250505080156112bb57506040513d601f19601f820116820180604052508101906112b89190611664565b60015b61133e573d80600081146112eb576040519150601f19603f3d011682016040523d82523d6000602084013e6112f0565b606091505b50600081511415611336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132d9061195f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611393565b600190505b949350505050565b60006113ae6113a984611adf565b611aba565b9050828152602081018484840111156113ca576113c9611d7d565b5b6113d5848285611c46565b509392505050565b6000813590506113ec81612067565b92915050565b6000813590506114018161207e565b92915050565b60008135905061141681612095565b92915050565b60008151905061142b81612095565b92915050565b600082601f83011261144657611445611d78565b5b813561145684826020860161139b565b91505092915050565b60008135905061146e816120ac565b92915050565b60006020828403121561148a57611489611d87565b5b6000611498848285016113dd565b91505092915050565b600080604083850312156114b8576114b7611d87565b5b60006114c6858286016113dd565b92505060206114d7858286016113dd565b9150509250929050565b6000806000606084860312156114fa576114f9611d87565b5b6000611508868287016113dd565b9350506020611519868287016113dd565b925050604061152a8682870161145f565b9150509250925092565b6000806000806080858703121561154e5761154d611d87565b5b600061155c878288016113dd565b945050602061156d878288016113dd565b935050604061157e8782880161145f565b925050606085013567ffffffffffffffff81111561159f5761159e611d82565b5b6115ab87828801611431565b91505092959194509250565b600080604083850312156115ce576115cd611d87565b5b60006115dc858286016113dd565b92505060206115ed858286016113f2565b9150509250929050565b6000806040838503121561160e5761160d611d87565b5b600061161c858286016113dd565b925050602061162d8582860161145f565b9150509250929050565b60006020828403121561164d5761164c611d87565b5b600061165b84828501611407565b91505092915050565b60006020828403121561167a57611679611d87565b5b60006116888482850161141c565b91505092915050565b6000602082840312156116a7576116a6611d87565b5b60006116b58482850161145f565b91505092915050565b6116c781611bd2565b82525050565b6116d681611be4565b82525050565b60006116e782611b10565b6116f18185611b26565b9350611701818560208601611c55565b61170a81611d8c565b840191505092915050565b600061172082611b1b565b61172a8185611b37565b935061173a818560208601611c55565b61174381611d8c565b840191505092915050565b600061175b603283611b37565b915061176682611d9d565b604082019050919050565b600061177e602583611b37565b915061178982611dec565b604082019050919050565b60006117a1602483611b37565b91506117ac82611e3b565b604082019050919050565b60006117c4601983611b37565b91506117cf82611e8a565b602082019050919050565b60006117e7602983611b37565b91506117f282611eb3565b604082019050919050565b600061180a603e83611b37565b915061181582611f02565b604082019050919050565b600061182d602f83611b37565b915061183882611f51565b604082019050919050565b6000611850601883611b37565b915061185b82611fa0565b602082019050919050565b6000611873602183611b37565b915061187e82611fc9565b604082019050919050565b6000611896602e83611b37565b91506118a182612018565b604082019050919050565b6118b581611c3c565b82525050565b60006020820190506118d060008301846116be565b92915050565b60006080820190506118eb60008301876116be565b6118f860208301866116be565b61190560408301856118ac565b818103606083015261191781846116dc565b905095945050505050565b600060208201905061193760008301846116cd565b92915050565b600060208201905081810360008301526119578184611715565b905092915050565b600060208201905081810360008301526119788161174e565b9050919050565b6000602082019050818103600083015261199881611771565b9050919050565b600060208201905081810360008301526119b881611794565b9050919050565b600060208201905081810360008301526119d8816117b7565b9050919050565b600060208201905081810360008301526119f8816117da565b9050919050565b60006020820190508181036000830152611a18816117fd565b9050919050565b60006020820190508181036000830152611a3881611820565b9050919050565b60006020820190508181036000830152611a5881611843565b9050919050565b60006020820190508181036000830152611a7881611866565b9050919050565b60006020820190508181036000830152611a9881611889565b9050919050565b6000602082019050611ab460008301846118ac565b92915050565b6000611ac4611ad5565b9050611ad08282611cba565b919050565b6000604051905090565b600067ffffffffffffffff821115611afa57611af9611d49565b5b611b0382611d8c565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000611b5382611c3c565b9150611b5e83611c3c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611b9357611b92611ceb565b5b828201905092915050565b6000611ba982611c3c565b9150611bb483611c3c565b925082821015611bc757611bc6611ceb565b5b828203905092915050565b6000611bdd82611c1c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015611c73578082015181840152602081019050611c58565b83811115611c82576000848401525b50505050565b60006002820490506001821680611ca057607f821691505b60208210811415611cb457611cb3611d1a565b5b50919050565b611cc382611d8c565b810181811067ffffffffffffffff82111715611ce257611ce1611d49565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b61207081611bd2565b811461207b57600080fd5b50565b61208781611be4565b811461209257600080fd5b50565b61209e81611bf0565b81146120a957600080fd5b50565b6120b581611c3c565b81146120c057600080fd5b5056fe697066733a2f2f6261666b7265696572706e766873666a6477366e7464773565796668636e7832336d796d6374357a326f32643677686a77726a656b7970636c7975a26469706673582212205ccea36e8303453436e31b4ff45affaad755ce6fa2839d2feccc52ab5622d42564736f6c63430008070033

Deployed Bytecode Sourcemap

36107:478:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22070:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22997:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24510:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24027:417;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25210:336;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25617:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35790:243;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22708:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22439:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23166:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24753:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25873:323;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36272:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24979:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22070:305;22172:4;22224:25;22209:40;;;:11;:40;;;;:105;;;;22281:33;22266:48;;;:11;:48;;;;22209:105;:158;;;;22331:36;22355:11;22331:23;:36::i;:::-;22209:158;22189:178;;22070:305;;;:::o;22997:100::-;23051:13;23084:5;23077:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22997:100;:::o;24510:171::-;24586:7;24606:23;24621:7;24606:14;:23::i;:::-;24649:15;:24;24665:7;24649:24;;;;;;;;;;;;;;;;;;;;;24642:31;;24510:171;;;:::o;24027:417::-;24108:13;24124:23;24139:7;24124:14;:23::i;:::-;24108:39;;24172:5;24166:11;;:2;:11;;;;24158:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24266:5;24250:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24275:37;24292:5;24299:12;:10;:12::i;:::-;24275:16;:37::i;:::-;24250:62;24228:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;24415:21;24424:2;24428:7;24415:8;:21::i;:::-;24097:347;24027:417;;:::o;25210:336::-;25405:41;25424:12;:10;:12::i;:::-;25438:7;25405:18;:41::i;:::-;25397:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;25510:28;25520:4;25526:2;25530:7;25510:9;:28::i;:::-;25210:336;;;:::o;25617:185::-;25755:39;25772:4;25778:2;25782:7;25755:39;;;;;;;;;;;;:16;:39::i;:::-;25617:185;;;:::o;35790:243::-;35908:41;35927:12;:10;:12::i;:::-;35941:7;35908:18;:41::i;:::-;35900:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;36011:14;36017:7;36011:5;:14::i;:::-;35790:243;:::o;22708:222::-;22780:7;22800:13;22816:7;:16;22824:7;22816:16;;;;;;;;;;;;;;;;;;;;;22800:32;;22868:1;22851:19;;:5;:19;;;;22843:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;22917:5;22910:12;;;22708:222;;;:::o;22439:207::-;22511:7;22556:1;22539:19;;:5;:19;;;;22531:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22622:9;:16;22632:5;22622:16;;;;;;;;;;;;;;;;22615:23;;22439:207;;;:::o;23166:104::-;23222:13;23255:7;23248:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23166:104;:::o;24753:155::-;24848:52;24867:12;:10;:12::i;:::-;24881:8;24891;24848:18;:52::i;:::-;24753:155;;:::o;25873:323::-;26047:41;26066:12;:10;:12::i;:::-;26080:7;26047:18;:41::i;:::-;26039:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;26150:38;26164:4;26170:2;26174:7;26183:4;26150:13;:38::i;:::-;25873:323;;;;:::o;36272:310::-;36370:13;36411:16;36419:7;36411;:16::i;:::-;36395:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;36501:75;;;;;;;;;;;;;;;;;;;36272:310;;;:::o;24979:164::-;25076:4;25100:18;:25;25119:5;25100:25;;;;;;;;;;;;;;;:35;25126:8;25100:35;;;;;;;;;;;;;;;;;;;;;;;;;25093:42;;24979:164;;;;:::o;4656:326::-;4716:4;4973:1;4951:7;:19;;;:23;4944:30;;4656:326;;;:::o;14812:157::-;14897:4;14936:25;14921:40;;;:11;:40;;;;14914:47;;14812:157;;;:::o;32485:135::-;32567:16;32575:7;32567;:16::i;:::-;32559:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;32485:135;:::o;3209:98::-;3262:7;3289:10;3282:17;;3209:98;:::o;31764:174::-;31866:2;31839:15;:24;31855:7;31839:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31922:7;31918:2;31884:46;;31893:23;31908:7;31893:14;:23::i;:::-;31884:46;;;;;;;;;;;;31764:174;;:::o;27997:264::-;28090:4;28107:13;28123:23;28138:7;28123:14;:23::i;:::-;28107:39;;28176:5;28165:16;;:7;:16;;;:52;;;;28185:32;28202:5;28209:7;28185:16;:32::i;:::-;28165:52;:87;;;;28245:7;28221:31;;:20;28233:7;28221:11;:20::i;:::-;:31;;;28165:87;28157:96;;;27997:264;;;;:::o;31020:625::-;31179:4;31152:31;;:23;31167:7;31152:14;:23::i;:::-;:31;;;31144:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;31258:1;31244:16;;:2;:16;;;;31236:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31314:39;31335:4;31341:2;31345:7;31314:20;:39::i;:::-;31418:29;31435:1;31439:7;31418:8;:29::i;:::-;31479:1;31460:9;:15;31470:4;31460:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31508:1;31491:9;:13;31501:2;31491:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31539:2;31520:7;:16;31528:7;31520:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31578:7;31574:2;31559:27;;31568:4;31559:27;;;;;;;;;;;;31599:38;31619:4;31625:2;31629:7;31599:19;:38::i;:::-;31020:625;;;:::o;30263:420::-;30323:13;30339:23;30354:7;30339:14;:23::i;:::-;30323:39;;30375:48;30396:5;30411:1;30415:7;30375:20;:48::i;:::-;30464:29;30481:1;30485:7;30464:8;:29::i;:::-;30526:1;30506:9;:16;30516:5;30506:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;30545:7;:16;30553:7;30545:16;;;;;;;;;;;;30538:23;;;;;;;;;;;30607:7;30603:1;30579:36;;30588:5;30579:36;;;;;;;;;;;;30628:47;30648:5;30663:1;30667:7;30628:19;:47::i;:::-;30312:371;30263:420;:::o;32081:315::-;32236:8;32227:17;;:5;:17;;;;32219:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;32323:8;32285:18;:25;32304:5;32285:25;;;;;;;;;;;;;;;:35;32311:8;32285:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32369:8;32347:41;;32362:5;32347:41;;;32379:8;32347:41;;;;;;:::i;:::-;;;;;;;;32081:315;;;:::o;27077:313::-;27233:28;27243:4;27249:2;27253:7;27233:9;:28::i;:::-;27280:47;27303:4;27309:2;27313:7;27322:4;27280:22;:47::i;:::-;27272:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;27077:313;;;;:::o;27703:127::-;27768:4;27820:1;27792:30;;:7;:16;27800:7;27792:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27785:37;;27703:127;;;:::o;34609:126::-;;;;:::o;35120:125::-;;;;:::o;33184:853::-;33338:4;33359:15;:2;:13;;;:15::i;:::-;33355:675;;;33411:2;33395:36;;;33432:12;:10;:12::i;:::-;33446:4;33452:7;33461:4;33395:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33391:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33653:1;33636:6;:13;:18;33632:328;;;33679:60;;;;;;;;;;:::i;:::-;;;;;;;;33632:328;33910:6;33904:13;33895:6;33891:2;33887:15;33880:38;33391:584;33527:41;;;33517:51;;;:6;:51;;;;33510:58;;;;;33355:675;34014:4;34007:11;;33184:853;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1354:139::-;1400:5;1438:6;1425:20;1416:29;;1454:33;1481:5;1454:33;:::i;:::-;1354:139;;;;:::o;1499:329::-;1558:6;1607:2;1595:9;1586:7;1582:23;1578:32;1575:119;;;1613:79;;:::i;:::-;1575:119;1733:1;1758:53;1803:7;1794:6;1783:9;1779:22;1758:53;:::i;:::-;1748:63;;1704:117;1499:329;;;;:::o;1834:474::-;1902:6;1910;1959:2;1947:9;1938:7;1934:23;1930:32;1927:119;;;1965:79;;:::i;:::-;1927:119;2085:1;2110:53;2155:7;2146:6;2135:9;2131:22;2110:53;:::i;:::-;2100:63;;2056:117;2212:2;2238:53;2283:7;2274:6;2263:9;2259:22;2238:53;:::i;:::-;2228:63;;2183:118;1834:474;;;;;:::o;2314:619::-;2391:6;2399;2407;2456:2;2444:9;2435:7;2431:23;2427:32;2424:119;;;2462:79;;:::i;:::-;2424:119;2582:1;2607:53;2652:7;2643:6;2632:9;2628:22;2607:53;:::i;:::-;2597:63;;2553:117;2709:2;2735:53;2780:7;2771:6;2760:9;2756:22;2735:53;:::i;:::-;2725:63;;2680:118;2837:2;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2808:118;2314:619;;;;;:::o;2939:943::-;3034:6;3042;3050;3058;3107:3;3095:9;3086:7;3082:23;3078:33;3075:120;;;3114:79;;:::i;:::-;3075:120;3234:1;3259:53;3304:7;3295:6;3284:9;3280:22;3259:53;:::i;:::-;3249:63;;3205:117;3361:2;3387:53;3432:7;3423:6;3412:9;3408:22;3387:53;:::i;:::-;3377:63;;3332:118;3489:2;3515:53;3560:7;3551:6;3540:9;3536:22;3515:53;:::i;:::-;3505:63;;3460:118;3645:2;3634:9;3630:18;3617:32;3676:18;3668:6;3665:30;3662:117;;;3698:79;;:::i;:::-;3662:117;3803:62;3857:7;3848:6;3837:9;3833:22;3803:62;:::i;:::-;3793:72;;3588:287;2939:943;;;;;;;:::o;3888:468::-;3953:6;3961;4010:2;3998:9;3989:7;3985:23;3981:32;3978:119;;;4016:79;;:::i;:::-;3978:119;4136:1;4161:53;4206:7;4197:6;4186:9;4182:22;4161:53;:::i;:::-;4151:63;;4107:117;4263:2;4289:50;4331:7;4322:6;4311:9;4307:22;4289:50;:::i;:::-;4279:60;;4234:115;3888:468;;;;;:::o;4362:474::-;4430:6;4438;4487:2;4475:9;4466:7;4462:23;4458:32;4455:119;;;4493:79;;:::i;:::-;4455:119;4613:1;4638:53;4683:7;4674:6;4663:9;4659:22;4638:53;:::i;:::-;4628:63;;4584:117;4740:2;4766:53;4811:7;4802:6;4791:9;4787:22;4766:53;:::i;:::-;4756:63;;4711:118;4362:474;;;;;:::o;4842:327::-;4900:6;4949:2;4937:9;4928:7;4924:23;4920:32;4917:119;;;4955:79;;:::i;:::-;4917:119;5075:1;5100:52;5144:7;5135:6;5124:9;5120:22;5100:52;:::i;:::-;5090:62;;5046:116;4842:327;;;;:::o;5175:349::-;5244:6;5293:2;5281:9;5272:7;5268:23;5264:32;5261:119;;;5299:79;;:::i;:::-;5261:119;5419:1;5444:63;5499:7;5490:6;5479:9;5475:22;5444:63;:::i;:::-;5434:73;;5390:127;5175:349;;;;:::o;5530:329::-;5589:6;5638:2;5626:9;5617:7;5613:23;5609:32;5606:119;;;5644:79;;:::i;:::-;5606:119;5764:1;5789:53;5834:7;5825:6;5814:9;5810:22;5789:53;:::i;:::-;5779:63;;5735:117;5530:329;;;;:::o;5865:118::-;5952:24;5970:5;5952:24;:::i;:::-;5947:3;5940:37;5865:118;;:::o;5989:109::-;6070:21;6085:5;6070:21;:::i;:::-;6065:3;6058:34;5989:109;;:::o;6104:360::-;6190:3;6218:38;6250:5;6218:38;:::i;:::-;6272:70;6335:6;6330:3;6272:70;:::i;:::-;6265:77;;6351:52;6396:6;6391:3;6384:4;6377:5;6373:16;6351:52;:::i;:::-;6428:29;6450:6;6428:29;:::i;:::-;6423:3;6419:39;6412:46;;6194:270;6104:360;;;;:::o;6470:364::-;6558:3;6586:39;6619:5;6586:39;:::i;:::-;6641:71;6705:6;6700:3;6641:71;:::i;:::-;6634:78;;6721:52;6766:6;6761:3;6754:4;6747:5;6743:16;6721:52;:::i;:::-;6798:29;6820:6;6798:29;:::i;:::-;6793:3;6789:39;6782:46;;6562:272;6470:364;;;;:::o;6840:366::-;6982:3;7003:67;7067:2;7062:3;7003:67;:::i;:::-;6996:74;;7079:93;7168:3;7079:93;:::i;:::-;7197:2;7192:3;7188:12;7181:19;;6840:366;;;:::o;7212:::-;7354:3;7375:67;7439:2;7434:3;7375:67;:::i;:::-;7368:74;;7451:93;7540:3;7451:93;:::i;:::-;7569:2;7564:3;7560:12;7553:19;;7212:366;;;:::o;7584:::-;7726:3;7747:67;7811:2;7806:3;7747:67;:::i;:::-;7740:74;;7823:93;7912:3;7823:93;:::i;:::-;7941:2;7936:3;7932:12;7925:19;;7584:366;;;:::o;7956:::-;8098:3;8119:67;8183:2;8178:3;8119:67;:::i;:::-;8112:74;;8195:93;8284:3;8195:93;:::i;:::-;8313:2;8308:3;8304:12;8297:19;;7956:366;;;:::o;8328:::-;8470:3;8491:67;8555:2;8550:3;8491:67;:::i;:::-;8484:74;;8567:93;8656:3;8567:93;:::i;:::-;8685:2;8680:3;8676:12;8669:19;;8328:366;;;:::o;8700:::-;8842:3;8863:67;8927:2;8922:3;8863:67;:::i;:::-;8856:74;;8939:93;9028:3;8939:93;:::i;:::-;9057:2;9052:3;9048:12;9041:19;;8700:366;;;:::o;9072:::-;9214:3;9235:67;9299:2;9294:3;9235:67;:::i;:::-;9228:74;;9311:93;9400:3;9311:93;:::i;:::-;9429:2;9424:3;9420:12;9413:19;;9072:366;;;:::o;9444:::-;9586:3;9607:67;9671:2;9666:3;9607:67;:::i;:::-;9600:74;;9683:93;9772:3;9683:93;:::i;:::-;9801:2;9796:3;9792:12;9785:19;;9444:366;;;:::o;9816:::-;9958:3;9979:67;10043:2;10038:3;9979:67;:::i;:::-;9972:74;;10055:93;10144:3;10055:93;:::i;:::-;10173:2;10168:3;10164:12;10157:19;;9816:366;;;:::o;10188:::-;10330:3;10351:67;10415:2;10410:3;10351:67;:::i;:::-;10344:74;;10427:93;10516:3;10427:93;:::i;:::-;10545:2;10540:3;10536:12;10529:19;;10188:366;;;:::o;10560:118::-;10647:24;10665:5;10647:24;:::i;:::-;10642:3;10635:37;10560:118;;:::o;10684:222::-;10777:4;10815:2;10804:9;10800:18;10792:26;;10828:71;10896:1;10885:9;10881:17;10872:6;10828:71;:::i;:::-;10684:222;;;;:::o;10912:640::-;11107:4;11145:3;11134:9;11130:19;11122:27;;11159:71;11227:1;11216:9;11212:17;11203:6;11159:71;:::i;:::-;11240:72;11308:2;11297:9;11293:18;11284:6;11240:72;:::i;:::-;11322;11390:2;11379:9;11375:18;11366:6;11322:72;:::i;:::-;11441:9;11435:4;11431:20;11426:2;11415:9;11411:18;11404:48;11469:76;11540:4;11531:6;11469:76;:::i;:::-;11461:84;;10912:640;;;;;;;:::o;11558:210::-;11645:4;11683:2;11672:9;11668:18;11660:26;;11696:65;11758:1;11747:9;11743:17;11734:6;11696:65;:::i;:::-;11558:210;;;;:::o;11774:313::-;11887:4;11925:2;11914:9;11910:18;11902:26;;11974:9;11968:4;11964:20;11960:1;11949:9;11945:17;11938:47;12002:78;12075:4;12066:6;12002:78;:::i;:::-;11994:86;;11774:313;;;;:::o;12093:419::-;12259:4;12297:2;12286:9;12282:18;12274:26;;12346:9;12340:4;12336:20;12332:1;12321:9;12317:17;12310:47;12374:131;12500:4;12374:131;:::i;:::-;12366:139;;12093:419;;;:::o;12518:::-;12684:4;12722:2;12711:9;12707:18;12699:26;;12771:9;12765:4;12761:20;12757:1;12746:9;12742:17;12735:47;12799:131;12925:4;12799:131;:::i;:::-;12791:139;;12518:419;;;:::o;12943:::-;13109:4;13147:2;13136:9;13132:18;13124:26;;13196:9;13190:4;13186:20;13182:1;13171:9;13167:17;13160:47;13224:131;13350:4;13224:131;:::i;:::-;13216:139;;12943:419;;;:::o;13368:::-;13534:4;13572:2;13561:9;13557:18;13549:26;;13621:9;13615:4;13611:20;13607:1;13596:9;13592:17;13585:47;13649:131;13775:4;13649:131;:::i;:::-;13641:139;;13368:419;;;:::o;13793:::-;13959:4;13997:2;13986:9;13982:18;13974:26;;14046:9;14040:4;14036:20;14032:1;14021:9;14017:17;14010:47;14074:131;14200:4;14074:131;:::i;:::-;14066:139;;13793:419;;;:::o;14218:::-;14384:4;14422:2;14411:9;14407:18;14399:26;;14471:9;14465:4;14461:20;14457:1;14446:9;14442:17;14435:47;14499:131;14625:4;14499:131;:::i;:::-;14491:139;;14218:419;;;:::o;14643:::-;14809:4;14847:2;14836:9;14832:18;14824:26;;14896:9;14890:4;14886:20;14882:1;14871:9;14867:17;14860:47;14924:131;15050:4;14924:131;:::i;:::-;14916:139;;14643:419;;;:::o;15068:::-;15234:4;15272:2;15261:9;15257:18;15249:26;;15321:9;15315:4;15311:20;15307:1;15296:9;15292:17;15285:47;15349:131;15475:4;15349:131;:::i;:::-;15341:139;;15068:419;;;:::o;15493:::-;15659:4;15697:2;15686:9;15682:18;15674:26;;15746:9;15740:4;15736:20;15732:1;15721:9;15717:17;15710:47;15774:131;15900:4;15774:131;:::i;:::-;15766:139;;15493:419;;;:::o;15918:::-;16084:4;16122:2;16111:9;16107:18;16099:26;;16171:9;16165:4;16161:20;16157:1;16146:9;16142:17;16135:47;16199:131;16325:4;16199:131;:::i;:::-;16191:139;;15918:419;;;:::o;16343:222::-;16436:4;16474:2;16463:9;16459:18;16451:26;;16487:71;16555:1;16544:9;16540:17;16531:6;16487:71;:::i;:::-;16343:222;;;;:::o;16571:129::-;16605:6;16632:20;;:::i;:::-;16622:30;;16661:33;16689:4;16681:6;16661:33;:::i;:::-;16571:129;;;:::o;16706:75::-;16739:6;16772:2;16766:9;16756:19;;16706:75;:::o;16787:307::-;16848:4;16938:18;16930:6;16927:30;16924:56;;;16960:18;;:::i;:::-;16924:56;16998:29;17020:6;16998:29;:::i;:::-;16990:37;;17082:4;17076;17072:15;17064:23;;16787:307;;;:::o;17100:98::-;17151:6;17185:5;17179:12;17169:22;;17100:98;;;:::o;17204:99::-;17256:6;17290:5;17284:12;17274:22;;17204:99;;;:::o;17309:168::-;17392:11;17426:6;17421:3;17414:19;17466:4;17461:3;17457:14;17442:29;;17309:168;;;;:::o;17483:169::-;17567:11;17601:6;17596:3;17589:19;17641:4;17636:3;17632:14;17617:29;;17483:169;;;;:::o;17658:305::-;17698:3;17717:20;17735:1;17717:20;:::i;:::-;17712:25;;17751:20;17769:1;17751:20;:::i;:::-;17746:25;;17905:1;17837:66;17833:74;17830:1;17827:81;17824:107;;;17911:18;;:::i;:::-;17824:107;17955:1;17952;17948:9;17941:16;;17658:305;;;;:::o;17969:191::-;18009:4;18029:20;18047:1;18029:20;:::i;:::-;18024:25;;18063:20;18081:1;18063:20;:::i;:::-;18058:25;;18102:1;18099;18096:8;18093:34;;;18107:18;;:::i;:::-;18093:34;18152:1;18149;18145:9;18137:17;;17969:191;;;;:::o;18166:96::-;18203:7;18232:24;18250:5;18232:24;:::i;:::-;18221:35;;18166:96;;;:::o;18268:90::-;18302:7;18345:5;18338:13;18331:21;18320:32;;18268:90;;;:::o;18364:149::-;18400:7;18440:66;18433:5;18429:78;18418:89;;18364:149;;;:::o;18519:126::-;18556:7;18596:42;18589:5;18585:54;18574:65;;18519:126;;;:::o;18651:77::-;18688:7;18717:5;18706:16;;18651:77;;;:::o;18734:154::-;18818:6;18813:3;18808;18795:30;18880:1;18871:6;18866:3;18862:16;18855:27;18734:154;;;:::o;18894:307::-;18962:1;18972:113;18986:6;18983:1;18980:13;18972:113;;;19071:1;19066:3;19062:11;19056:18;19052:1;19047:3;19043:11;19036:39;19008:2;19005:1;19001:10;18996:15;;18972:113;;;19103:6;19100:1;19097:13;19094:101;;;19183:1;19174:6;19169:3;19165:16;19158:27;19094:101;18943:258;18894:307;;;:::o;19207:320::-;19251:6;19288:1;19282:4;19278:12;19268:22;;19335:1;19329:4;19325:12;19356:18;19346:81;;19412:4;19404:6;19400:17;19390:27;;19346:81;19474:2;19466:6;19463:14;19443:18;19440:38;19437:84;;;19493:18;;:::i;:::-;19437:84;19258:269;19207:320;;;:::o;19533:281::-;19616:27;19638:4;19616:27;:::i;:::-;19608:6;19604:40;19746:6;19734:10;19731:22;19710:18;19698:10;19695:34;19692:62;19689:88;;;19757:18;;:::i;:::-;19689:88;19797:10;19793:2;19786:22;19576:238;19533:281;;:::o;19820:180::-;19868:77;19865:1;19858:88;19965:4;19962:1;19955:15;19989:4;19986:1;19979:15;20006:180;20054:77;20051:1;20044:88;20151:4;20148:1;20141:15;20175:4;20172:1;20165:15;20192:180;20240:77;20237:1;20230:88;20337:4;20334:1;20327:15;20361:4;20358:1;20351:15;20378:117;20487:1;20484;20477:12;20501:117;20610:1;20607;20600:12;20624:117;20733:1;20730;20723:12;20747:117;20856:1;20853;20846:12;20870:102;20911:6;20962:2;20958:7;20953:2;20946:5;20942:14;20938:28;20928:38;;20870:102;;;:::o;20978:237::-;21118:34;21114:1;21106:6;21102:14;21095:58;21187:20;21182:2;21174:6;21170:15;21163:45;20978:237;:::o;21221:224::-;21361:34;21357:1;21349:6;21345:14;21338:58;21430:7;21425:2;21417:6;21413:15;21406:32;21221:224;:::o;21451:223::-;21591:34;21587:1;21579:6;21575:14;21568:58;21660:6;21655:2;21647:6;21643:15;21636:31;21451:223;:::o;21680:175::-;21820:27;21816:1;21808:6;21804:14;21797:51;21680:175;:::o;21861:228::-;22001:34;21997:1;21989:6;21985:14;21978:58;22070:11;22065:2;22057:6;22053:15;22046:36;21861:228;:::o;22095:249::-;22235:34;22231:1;22223:6;22219:14;22212:58;22304:32;22299:2;22291:6;22287:15;22280:57;22095:249;:::o;22350:234::-;22490:34;22486:1;22478:6;22474:14;22467:58;22559:17;22554:2;22546:6;22542:15;22535:42;22350:234;:::o;22590:174::-;22730:26;22726:1;22718:6;22714:14;22707:50;22590:174;:::o;22770:220::-;22910:34;22906:1;22898:6;22894:14;22887:58;22979:3;22974:2;22966:6;22962:15;22955:28;22770:220;:::o;22996:233::-;23136:34;23132:1;23124:6;23120:14;23113:58;23205:16;23200:2;23192:6;23188:15;23181:41;22996:233;:::o;23235:122::-;23308:24;23326:5;23308:24;:::i;:::-;23301:5;23298:35;23288:63;;23347:1;23344;23337:12;23288:63;23235:122;:::o;23363:116::-;23433:21;23448:5;23433:21;:::i;:::-;23426:5;23423:32;23413:60;;23469:1;23466;23459:12;23413:60;23363:116;:::o;23485:120::-;23557:23;23574:5;23557:23;:::i;:::-;23550:5;23547:34;23537:62;;23595:1;23592;23585:12;23537:62;23485:120;:::o;23611:122::-;23684:24;23702:5;23684:24;:::i;:::-;23677:5;23674:35;23664:63;;23723:1;23720;23713:12;23664:63;23611:122;:::o

Swarm Source

ipfs://5ccea36e8303453436e31b4ff45affaad755ce6fa2839d2feccc52ab5622d425
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.