ETH Price: $2,329.28 (-5.02%)

Token

RoverX OG (RoverX_OG)
 

Overview

Max Total Supply

222 RoverX_OG

Holders

55

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 RoverX_OG
0x47F714b1d846B0Bf4af5204263186889e98E62C6
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:
RoverXOgToken

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-26
*/

// File: openzeppelin-solidity/contracts/utils/introspection/IERC165.sol

// SPDX-License-Identifier: MIT
// 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-solidity/contracts/token/ERC721/IERC721.sol

// OpenZeppelin Contracts (last updated v4.6.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 be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

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

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

    /**
     * @dev 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-solidity/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-solidity/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-solidity/contracts/utils/Address.sol

// OpenZeppelin Contracts (last updated v4.5.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

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

// File: openzeppelin-solidity/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-solidity/contracts/utils/Strings.sol

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

pragma solidity ^0.8.0;

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

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

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

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

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

// File: openzeppelin-solidity/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-solidity/contracts/token/ERC721/ERC721.sol

// OpenZeppelin Contracts (last updated v4.6.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: balance query for the zero address");
        return _balances[owner];
    }

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

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

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

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

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

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be 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 owner nor approved for all"
        );

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || 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 a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

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

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

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

    /**
     * @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-solidity/contracts/security/Pausable.sol

// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

// File: openzeppelin-solidity/contracts/access/Ownable.sol

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

// File: openzeppelin-solidity/contracts/utils/Counters.sol

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

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

// File: contracts/RoverXOgToken.sol

pragma solidity 0.8.14;




contract RoverXOgToken is ERC721, Pausable, Ownable {

    using Counters for Counters.Counter;
    Counters.Counter public lastTokenId;
    Counters.Counter public addressesWhitelisted;

    uint public totalSupply = 222;
    string private _baseUri = "";
    uint private _baseUriUpdateLimit = 5;
    Counters.Counter private _baseUriUpdateCount;
    bool public baseUriLocked = false;
    bool public publicMintOpen = false;
    mapping(address => uint256) public whitelist;
    mapping(address => uint256) public ogClaimed;

    event PublicMintOpen();
    event PublicMintPaused();
    event BaseUri(string _from, string _to);

    constructor(string memory baseUri_) ERC721("RoverX OG", "RoverX_OG") {
        require(keccak256(abi.encodePacked((baseUri_))) != keccak256(abi.encodePacked((""))), "Base uri cannot be empty");
        emit BaseUri(_baseUri, baseUri_);
        _baseUri = baseUri_;
    }

    modifier canUpdateBaseUri() {
        require(_baseUriUpdateCount.current() < _baseUriUpdateLimit && !baseUriLocked, "Base uri cannot be updated");
        _;
    }

    function pause() public onlyOwner {
        _pause();
    }

    function unpause() public onlyOwner {
        _unpause();
    }

    function lockBaseUri() external onlyOwner {
        baseUriLocked = true;
    }

    function setBaseURI(string memory baseURI) external onlyOwner canUpdateBaseUri {
        emit BaseUri(_baseUri, baseURI);
        _baseUriUpdateCount.increment();
        if(_baseUriUpdateCount.current() == _baseUriUpdateLimit) {
            baseUriLocked = true;
        }
        _baseUri = baseURI;
    }

    function uploadWhitelist(address[] calldata addresses) public whenNotPaused onlyOwner {
        uint addressesLength = addresses.length;
        require(addressesLength + addressesWhitelisted.current() <= totalSupply,
            "There are more address in the whitelist than the total supply.");

        for (uint256 i = 0; i < addressesLength; i++) {
            if (!_isAddressWhitelisted(addresses[i])) {
                whitelist[addresses[i]] = 1;
                addressesWhitelisted.increment();
            }
        }
    }

    function setPublicMintStatus(bool status) public onlyOwner whenNotPaused returns (bool) {
        if (status)
            emit PublicMintOpen();
        else
            emit PublicMintPaused();
        publicMintOpen = status;
        return publicMintOpen;
    }

    /**
    @dev call this method to check if a user is eligible to mint an NFT
    @param msgSender to be checked for eligibility
    @return bool canMint which tells if user is eligible
    @return bool isError which tells if the user has already minted an NFT or if the user is ineligible altogether
    */
    function isEligible(address msgSender) public view whenNotPaused returns (bool, bool, string memory) {
        bool canMint = false;
        bool isError = false;
        string memory message;
        if (lastTokenId.current() >= totalSupply) {
            isError = true;
            message = "All the NFTs are already minted.";
        } else if (!_isOgClaimed(msgSender) && (_isAddressWhitelisted(msgSender) || publicMintOpen)) {
            canMint = true;
            message = "Mint an OG";
        }
        else if (!_isAddressWhitelisted(msgSender) && !publicMintOpen) {
            isError = true;
            message = "You are not whitelisted. Join our discord for getting whitelisted.";
        }
        else if (_isOgClaimed(msgSender)) {
            message = "You've successfully minted OG NFT. Welcome Fam! Join our discord to start your journey.";
        }

        return (canMint, isError, message);
    }

    function transferOg(address to) public onlyOwner whenNotPaused returns (uint256) {

        require(publicMintOpen || _isAddressWhitelisted(to), "Not a whitelisted address.");
        return _mintAction(to);
    }

    function mintOg() public whenNotPaused returns (uint256) {

        require(publicMintOpen || _isAddressWhitelisted(_msgSender()), "Public mint is not available. Apply for whitelist or wait for public mint.");
        return _mintAction(_msgSender());
    }

    function _mintAction(address to) private returns (uint256) {

        // Existing OG check
        require(!_isOgClaimed(to), "User has already minted an OG.");
        require(lastTokenId.current() < totalSupply, "You are late for minting.");

        lastTokenId.increment();
        uint256 id = lastTokenId.current();
        ogClaimed[to] = id;
        _safeMint(to, id);
        return id;
    }

    function _isOgClaimed(address _address) view private returns (bool) {
        return ogClaimed[_address] > 0;
    }

    function _isAddressWhitelisted(address _address) view private returns (bool) {
        return whitelist[_address] == 1;
    }

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

    function safeTransferFrom(address /*from*/, address /*to*/, uint256 /*id*/) public virtual override {
        revert("Token is non-transferable");
    }

    function safeTransferFrom(address /*from*/, address /*to*/, uint256 /*id*/, bytes memory /*_data*/) public virtual override {
        revert("Token is non-transferable");
    }

    function approve(address /*to*/, uint256 /*id*/) public virtual override {
        revert("Token is non-transferable");
    }

    function transferFrom(address /*from*/, address /*to*/, uint256 /*id*/) public virtual override {
        revert("Token is non-transferable");
    }

    function renounceOwnership() override view public onlyOwner {
        revert("You can checkout anytime you like, but you can never leave.");
    }

    function setApprovalForAll(address /*operator*/, bool /*approved*/) public virtual override {
        revert("Token is non-transferable");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseUri_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_from","type":"string"},{"indexed":false,"internalType":"string","name":"_to","type":"string"}],"name":"BaseUri","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[],"name":"PublicMintOpen","type":"event"},{"anonymous":false,"inputs":[],"name":"PublicMintPaused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"addressesWhitelisted","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseUriLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"msgSender","type":"address"}],"name":"isEligible","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastTokenId","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintOg","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ogClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMintOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bool","name":"","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setPublicMintStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"transferOg","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"uploadWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

608060405260de60095560405180602001604052806000815250600a90805190602001906200003092919062000337565b506005600b556000600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055503480156200007957600080fd5b506040516200431d3803806200431d83398181016040528101906200009f919062000584565b6040518060400160405280600981526020017f526f76657258204f4700000000000000000000000000000000000000000000008152506040518060400160405280600981526020017f526f766572585f4f47000000000000000000000000000000000000000000000081525081600090805190602001906200012392919062000337565b5080600190805190602001906200013c92919062000337565b5050506000600660006101000a81548160ff0219169083151502179055506200017a6200016e6200026960201b60201c565b6200027160201b60201c565b6040516020016200018b906200060a565b6040516020818303038152906040528051906020012081604051602001620001b4919062000663565b60405160208183030381529060405280519060200120036200020d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200020490620006dd565b60405180910390fd5b7f9e30389099fbd0cfa7f14f27328e45e857b8d582d70741dde100593ab60d3cc7600a826040516200024192919062000845565b60405180910390a180600a90805190602001906200026192919062000337565b505062000880565b600033905090565b6000600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805462000345906200072e565b90600052602060002090601f016020900481019282620003695760008555620003b5565b82601f106200038457805160ff1916838001178555620003b5565b82800160010185558215620003b5579182015b82811115620003b457825182559160200191906001019062000397565b5b509050620003c49190620003c8565b5090565b5b80821115620003e3576000816000905550600101620003c9565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620004508262000405565b810181811067ffffffffffffffff8211171562000472576200047162000416565b5b80604052505050565b600062000487620003e7565b905062000495828262000445565b919050565b600067ffffffffffffffff821115620004b857620004b762000416565b5b620004c38262000405565b9050602081019050919050565b60005b83811015620004f0578082015181840152602081019050620004d3565b8381111562000500576000848401525b50505050565b60006200051d62000517846200049a565b6200047b565b9050828152602081018484840111156200053c576200053b62000400565b5b62000549848285620004d0565b509392505050565b600082601f830112620005695762000568620003fb565b5b81516200057b84826020860162000506565b91505092915050565b6000602082840312156200059d576200059c620003f1565b5b600082015167ffffffffffffffff811115620005be57620005bd620003f6565b5b620005cc8482850162000551565b91505092915050565b600081905092915050565b50565b6000620005f2600083620005d5565b9150620005ff82620005e0565b600082019050919050565b60006200061782620005e3565b9150819050919050565b600081519050919050565b6000620006398262000621565b620006458185620005d5565b935062000657818560208601620004d0565b80840191505092915050565b60006200067182846200062c565b915081905092915050565b600082825260208201905092915050565b7f42617365207572692063616e6e6f7420626520656d7074790000000000000000600082015250565b6000620006c56018836200067c565b9150620006d2826200068d565b602082019050919050565b60006020820190508181036000830152620006f881620006b6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200074757607f821691505b6020821081036200075d576200075c620006ff565b5b50919050565b60008190508160005260206000209050919050565b6000815462000787816200072e565b6200079381866200067c565b94506001821660008114620007b15760018114620007c457620007fb565b60ff1983168652602086019350620007fb565b620007cf8562000763565b60005b83811015620007f357815481890152600182019150602081019050620007d2565b808801955050505b50505092915050565b6000620008118262000621565b6200081d81856200067c565b93506200082f818560208601620004d0565b6200083a8162000405565b840191505092915050565b6000604082019050818103600083015262000861818562000778565b9050818103602083015262000877818462000804565b90509392505050565b613a8d80620008906000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063715018a61161011a578063a22cb465116100ad578063bcc9ca5b1161007c578063bcc9ca5b1461058e578063c87b56dd146105ac578063e985e9c5146105dc578063f2fde38b1461060c578063f84ddf0b14610628576101fb565b8063a22cb46514610508578063a9b1cc7914610524578063b61ff93c14610542578063b88d4fde14610572576101fb565b80638da5cb5b116100e95780638da5cb5b1461048057806395d89b411461049e5780639b19251a146104bc5780639f211946146104ec576101fb565b8063715018a61461041e57806371b9d3161461042857806373fc16ad146104465780638456cb5914610476576101fb565b806342842e0e116101925780635cbd3a7e116101615780635cbd3a7e1461036e5780636352211e1461038c57806366e305fd146103bc57806370a08231146103ee576101fb565b806342842e0e146102e85780634db1df3b1461030457806355f804b3146103345780635c975abb14610350576101fb565b806318160ddd116101ce57806318160ddd1461029a57806323b872dd146102b8578063312767ca146102d45780633f4ba83a146102de576101fb565b806301ffc9a71461020057806306fdde0314610230578063081812fc1461024e578063095ea7b31461027e575b600080fd5b61021a600480360381019061021591906124b5565b610646565b60405161022791906124fd565b60405180910390f35b610238610728565b60405161024591906125b1565b60405180910390f35b61026860048036038101906102639190612609565b6107ba565b6040516102759190612677565b60405180910390f35b610298600480360381019061029391906126be565b61083f565b005b6102a261087a565b6040516102af919061270d565b60405180910390f35b6102d260048036038101906102cd9190612728565b610880565b005b6102dc6108bb565b005b6102e6610954565b005b61030260048036038101906102fd9190612728565b6109da565b005b61031e6004803603810190610319919061277b565b610a15565b60405161032b919061270d565b60405180910390f35b61034e600480360381019061034991906128dd565b610b4a565b005b610358610cb8565b60405161036591906124fd565b60405180910390f35b610376610ccf565b604051610383919061270d565b60405180910390f35b6103a660048036038101906103a19190612609565b610cdb565b6040516103b39190612677565b60405180910390f35b6103d660048036038101906103d1919061277b565b610d8c565b6040516103e593929190612926565b60405180910390f35b6104086004803603810190610403919061277b565b610f35565b604051610415919061270d565b60405180910390f35b610426610fec565b005b6104306110a3565b60405161043d91906124fd565b60405180910390f35b610460600480360381019061045b919061277b565b6110b6565b60405161046d919061270d565b60405180910390f35b61047e6110ce565b005b610488611154565b6040516104959190612677565b60405180910390f35b6104a661117e565b6040516104b391906125b1565b60405180910390f35b6104d660048036038101906104d1919061277b565b611210565b6040516104e3919061270d565b60405180910390f35b610506600480360381019061050191906129c4565b611228565b005b610522600480360381019061051d9190612a3d565b61141c565b005b61052c611457565b604051610539919061270d565b60405180910390f35b61055c60048036038101906105579190612a7d565b61151c565b60405161056991906124fd565b60405180910390f35b61058c60048036038101906105879190612b4b565b611677565b005b6105966116b2565b6040516105a391906124fd565b60405180910390f35b6105c660048036038101906105c19190612609565b6116c5565b6040516105d391906125b1565b60405180910390f35b6105f660048036038101906105f19190612bce565b61176c565b60405161060391906124fd565b60405180910390f35b6106266004803603810190610621919061277b565b611800565b005b6106306118f7565b60405161063d919061270d565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061071157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610721575061072082611903565b5b9050919050565b60606000805461073790612c3d565b80601f016020809104026020016040519081016040528092919081815260200182805461076390612c3d565b80156107b05780601f10610785576101008083540402835291602001916107b0565b820191906000526020600020905b81548152906001019060200180831161079357829003601f168201915b5050505050905090565b60006107c58261196d565b610804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107fb90612ce0565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087190612d4c565b60405180910390fd5b60095481565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b290612d4c565b60405180910390fd5b6108c36119d9565b73ffffffffffffffffffffffffffffffffffffffff166108e1611154565b73ffffffffffffffffffffffffffffffffffffffff1614610937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092e90612db8565b60405180910390fd5b6001600d60006101000a81548160ff021916908315150217905550565b61095c6119d9565b73ffffffffffffffffffffffffffffffffffffffff1661097a611154565b73ffffffffffffffffffffffffffffffffffffffff16146109d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c790612db8565b60405180910390fd5b6109d86119e1565b565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0c90612d4c565b60405180910390fd5b6000610a1f6119d9565b73ffffffffffffffffffffffffffffffffffffffff16610a3d611154565b73ffffffffffffffffffffffffffffffffffffffff1614610a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8a90612db8565b60405180910390fd5b610a9b610cb8565b15610adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad290612e24565b60405180910390fd5b600d60019054906101000a900460ff1680610afb5750610afa82611a83565b5b610b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3190612e90565b60405180910390fd5b610b4382611acf565b9050919050565b610b526119d9565b73ffffffffffffffffffffffffffffffffffffffff16610b70611154565b73ffffffffffffffffffffffffffffffffffffffff1614610bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbd90612db8565b60405180910390fd5b600b54610bd3600c611bd6565b108015610bed5750600d60009054906101000a900460ff16155b610c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2390612efc565b60405180910390fd5b7f9e30389099fbd0cfa7f14f27328e45e857b8d582d70741dde100593ab60d3cc7600a82604051610c5e929190612fb1565b60405180910390a1610c70600c611be4565b600b54610c7d600c611bd6565b03610c9e576001600d60006101000a81548160ff0219169083151502179055505b80600a9080519060200190610cb49291906123a6565b5050565b6000600660009054906101000a900460ff16905090565b60088060000154905081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7a9061305a565b60405180910390fd5b80915050919050565b6000806060610d99610cb8565b15610dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd090612e24565b60405180910390fd5b6000806060600954610deb6007611bd6565b10610e3157600191506040518060400160405280602081526020017f416c6c20746865204e4654732061726520616c7265616479206d696e7465642e8152509050610f22565b610e3a87611bfa565b158015610e635750610e4b87611a83565b80610e625750600d60019054906101000a900460ff165b5b15610ea957600192506040518060400160405280600a81526020017f4d696e7420616e204f47000000000000000000000000000000000000000000008152509050610f21565b610eb287611a83565b158015610ecc5750600d60019054906101000a900460ff16155b15610ef557600191506040518060800160405280604281526020016139bf604291399050610f20565b610efe87611bfa565b15610f1f57604051806080016040528060578152602001613a016057913990505b5b5b5b8282829550955095505050509193909250565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9c906130ec565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ff46119d9565b73ffffffffffffffffffffffffffffffffffffffff16611012611154565b73ffffffffffffffffffffffffffffffffffffffff1614611068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105f90612db8565b60405180910390fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109a9061317e565b60405180910390fd5b600d60009054906101000a900460ff1681565b600f6020528060005260406000206000915090505481565b6110d66119d9565b73ffffffffffffffffffffffffffffffffffffffff166110f4611154565b73ffffffffffffffffffffffffffffffffffffffff161461114a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114190612db8565b60405180910390fd5b611152611c45565b565b6000600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461118d90612c3d565b80601f01602080910402602001604051908101604052809291908181526020018280546111b990612c3d565b80156112065780601f106111db57610100808354040283529160200191611206565b820191906000526020600020905b8154815290600101906020018083116111e957829003601f168201915b5050505050905090565b600e6020528060005260406000206000915090505481565b611230610cb8565b15611270576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126790612e24565b60405180910390fd5b6112786119d9565b73ffffffffffffffffffffffffffffffffffffffff16611296611154565b73ffffffffffffffffffffffffffffffffffffffff16146112ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e390612db8565b60405180910390fd5b60008282905090506009546113016008611bd6565b8261130c91906131cd565b111561134d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134490613295565b60405180910390fd5b60005b818110156114165761138884848381811061136e5761136d6132b5565b5b9050602002016020810190611383919061277b565b611a83565b611403576001600e60008686858181106113a5576113a46132b5565b5b90506020020160208101906113ba919061277b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506114026008611be4565b5b808061140e906132e4565b915050611350565b50505050565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144e90612d4c565b60405180910390fd5b6000611461610cb8565b156114a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149890612e24565b60405180910390fd5b600d60019054906101000a900460ff16806114c857506114c76114c26119d9565b611a83565b5b611507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fe906133c4565b60405180910390fd5b6115176115126119d9565b611acf565b905090565b60006115266119d9565b73ffffffffffffffffffffffffffffffffffffffff16611544611154565b73ffffffffffffffffffffffffffffffffffffffff161461159a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159190612db8565b60405180910390fd5b6115a2610cb8565b156115e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d990612e24565b60405180910390fd5b8115611619577f652bdb42d00441813d1211c6f4c84fe867279e472bfe04439e9c728deeffed0660405160405180910390a1611646565b7f9213aad187aca309dce8a8effaaa1e7b60ad3a1ad485e61ddeecdcc8be87997360405160405180910390a15b81600d60016101000a81548160ff021916908315150217905550600d60019054906101000a900460ff169050919050565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a990612d4c565b60405180910390fd5b600d60019054906101000a900460ff1681565b60606116d08261196d565b61170f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170690613456565b60405180910390fd5b6000611719611ce8565b905060008151116117395760405180602001604052806000815250611764565b8061174384611d7a565b6040516020016117549291906134b2565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118086119d9565b73ffffffffffffffffffffffffffffffffffffffff16611826611154565b73ffffffffffffffffffffffffffffffffffffffff161461187c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187390612db8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e290613548565b60405180910390fd5b6118f481611eda565b50565b60078060000154905081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b6119e9610cb8565b611a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1f906135b4565b60405180910390fd5b6000600660006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611a6c6119d9565b604051611a799190612677565b60405180910390a1565b60006001600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054149050919050565b6000611ada82611bfa565b15611b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1190613620565b60405180910390fd5b600954611b276007611bd6565b10611b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5e9061368c565b60405180910390fd5b611b716007611be4565b6000611b7d6007611bd6565b905080600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611bcd8382611fa0565b80915050919050565b600081600001549050919050565b6001816000016000828254019250508190555050565b600080600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054119050919050565b611c4d610cb8565b15611c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8490612e24565b60405180910390fd5b6001600660006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611cd16119d9565b604051611cde9190612677565b60405180910390a1565b6060600a8054611cf790612c3d565b80601f0160208091040260200160405190810160405280929190818152602001828054611d2390612c3d565b8015611d705780601f10611d4557610100808354040283529160200191611d70565b820191906000526020600020905b815481529060010190602001808311611d5357829003601f168201915b5050505050905090565b606060008203611dc1576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611ed5565b600082905060005b60008214611df3578080611ddc906132e4565b915050600a82611dec91906136db565b9150611dc9565b60008167ffffffffffffffff811115611e0f57611e0e6127b2565b5b6040519080825280601f01601f191660200182016040528015611e415781602001600182028036833780820191505090505b5090505b60008514611ece57600182611e5a919061370c565b9150600a85611e699190613740565b6030611e7591906131cd565b60f81b818381518110611e8b57611e8a6132b5565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611ec791906136db565b9450611e45565b8093505050505b919050565b6000600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611fba828260405180602001604052806000815250611fbe565b5050565b611fc88383612019565b611fd560008484846121f2565b612014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200b906137e3565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207f9061384f565b60405180910390fd5b6120918161196d565b156120d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c8906138bb565b60405180910390fd5b6120dd60008383612379565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461212d91906131cd565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121ee6000838361237e565b5050565b60006122138473ffffffffffffffffffffffffffffffffffffffff16612383565b1561236c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261223c6119d9565b8786866040518563ffffffff1660e01b815260040161225e9493929190613930565b6020604051808303816000875af192505050801561229a57506040513d601f19601f820116820180604052508101906122979190613991565b60015b61231c573d80600081146122ca576040519150601f19603f3d011682016040523d82523d6000602084013e6122cf565b606091505b506000815103612314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230b906137e3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612371565b600190505b949350505050565b505050565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546123b290612c3d565b90600052602060002090601f0160209004810192826123d4576000855561241b565b82601f106123ed57805160ff191683800117855561241b565b8280016001018555821561241b579182015b8281111561241a5782518255916020019190600101906123ff565b5b509050612428919061242c565b5090565b5b8082111561244557600081600090555060010161242d565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6124928161245d565b811461249d57600080fd5b50565b6000813590506124af81612489565b92915050565b6000602082840312156124cb576124ca612453565b5b60006124d9848285016124a0565b91505092915050565b60008115159050919050565b6124f7816124e2565b82525050565b600060208201905061251260008301846124ee565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612552578082015181840152602081019050612537565b83811115612561576000848401525b50505050565b6000601f19601f8301169050919050565b600061258382612518565b61258d8185612523565b935061259d818560208601612534565b6125a681612567565b840191505092915050565b600060208201905081810360008301526125cb8184612578565b905092915050565b6000819050919050565b6125e6816125d3565b81146125f157600080fd5b50565b600081359050612603816125dd565b92915050565b60006020828403121561261f5761261e612453565b5b600061262d848285016125f4565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061266182612636565b9050919050565b61267181612656565b82525050565b600060208201905061268c6000830184612668565b92915050565b61269b81612656565b81146126a657600080fd5b50565b6000813590506126b881612692565b92915050565b600080604083850312156126d5576126d4612453565b5b60006126e3858286016126a9565b92505060206126f4858286016125f4565b9150509250929050565b612707816125d3565b82525050565b600060208201905061272260008301846126fe565b92915050565b60008060006060848603121561274157612740612453565b5b600061274f868287016126a9565b9350506020612760868287016126a9565b9250506040612771868287016125f4565b9150509250925092565b60006020828403121561279157612790612453565b5b600061279f848285016126a9565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6127ea82612567565b810181811067ffffffffffffffff82111715612809576128086127b2565b5b80604052505050565b600061281c612449565b905061282882826127e1565b919050565b600067ffffffffffffffff821115612848576128476127b2565b5b61285182612567565b9050602081019050919050565b82818337600083830152505050565b600061288061287b8461282d565b612812565b90508281526020810184848401111561289c5761289b6127ad565b5b6128a784828561285e565b509392505050565b600082601f8301126128c4576128c36127a8565b5b81356128d484826020860161286d565b91505092915050565b6000602082840312156128f3576128f2612453565b5b600082013567ffffffffffffffff81111561291157612910612458565b5b61291d848285016128af565b91505092915050565b600060608201905061293b60008301866124ee565b61294860208301856124ee565b818103604083015261295a8184612578565b9050949350505050565b600080fd5b600080fd5b60008083601f840112612984576129836127a8565b5b8235905067ffffffffffffffff8111156129a1576129a0612964565b5b6020830191508360208202830111156129bd576129bc612969565b5b9250929050565b600080602083850312156129db576129da612453565b5b600083013567ffffffffffffffff8111156129f9576129f8612458565b5b612a058582860161296e565b92509250509250929050565b612a1a816124e2565b8114612a2557600080fd5b50565b600081359050612a3781612a11565b92915050565b60008060408385031215612a5457612a53612453565b5b6000612a62858286016126a9565b9250506020612a7385828601612a28565b9150509250929050565b600060208284031215612a9357612a92612453565b5b6000612aa184828501612a28565b91505092915050565b600067ffffffffffffffff821115612ac557612ac46127b2565b5b612ace82612567565b9050602081019050919050565b6000612aee612ae984612aaa565b612812565b905082815260208101848484011115612b0a57612b096127ad565b5b612b1584828561285e565b509392505050565b600082601f830112612b3257612b316127a8565b5b8135612b42848260208601612adb565b91505092915050565b60008060008060808587031215612b6557612b64612453565b5b6000612b73878288016126a9565b9450506020612b84878288016126a9565b9350506040612b95878288016125f4565b925050606085013567ffffffffffffffff811115612bb657612bb5612458565b5b612bc287828801612b1d565b91505092959194509250565b60008060408385031215612be557612be4612453565b5b6000612bf3858286016126a9565b9250506020612c04858286016126a9565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612c5557607f821691505b602082108103612c6857612c67612c0e565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612cca602c83612523565b9150612cd582612c6e565b604082019050919050565b60006020820190508181036000830152612cf981612cbd565b9050919050565b7f546f6b656e206973206e6f6e2d7472616e7366657261626c6500000000000000600082015250565b6000612d36601983612523565b9150612d4182612d00565b602082019050919050565b60006020820190508181036000830152612d6581612d29565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612da2602083612523565b9150612dad82612d6c565b602082019050919050565b60006020820190508181036000830152612dd181612d95565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000612e0e601083612523565b9150612e1982612dd8565b602082019050919050565b60006020820190508181036000830152612e3d81612e01565b9050919050565b7f4e6f7420612077686974656c697374656420616464726573732e000000000000600082015250565b6000612e7a601a83612523565b9150612e8582612e44565b602082019050919050565b60006020820190508181036000830152612ea981612e6d565b9050919050565b7f42617365207572692063616e6e6f742062652075706461746564000000000000600082015250565b6000612ee6601a83612523565b9150612ef182612eb0565b602082019050919050565b60006020820190508181036000830152612f1581612ed9565b9050919050565b60008190508160005260206000209050919050565b60008154612f3e81612c3d565b612f488186612523565b94506001821660008114612f635760018114612f7557612fa8565b60ff1983168652602086019350612fa8565b612f7e85612f1c565b60005b83811015612fa057815481890152600182019150602081019050612f81565b808801955050505b50505092915050565b60006040820190508181036000830152612fcb8185612f31565b90508181036020830152612fdf8184612578565b90509392505050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613044602983612523565b915061304f82612fe8565b604082019050919050565b6000602082019050818103600083015261307381613037565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006130d6602a83612523565b91506130e18261307a565b604082019050919050565b60006020820190508181036000830152613105816130c9565b9050919050565b7f596f752063616e20636865636b6f757420616e7974696d6520796f75206c696b60008201527f652c2062757420796f752063616e206e65766572206c656176652e0000000000602082015250565b6000613168603b83612523565b91506131738261310c565b604082019050919050565b600060208201905081810360008301526131978161315b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006131d8826125d3565b91506131e3836125d3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156132185761321761319e565b5b828201905092915050565b7f546865726520617265206d6f7265206164647265737320696e2074686520776860008201527f6974656c697374207468616e2074686520746f74616c20737570706c792e0000602082015250565b600061327f603e83612523565b915061328a82613223565b604082019050919050565b600060208201905081810360008301526132ae81613272565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006132ef826125d3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036133215761332061319e565b5b600182019050919050565b7f5075626c6963206d696e74206973206e6f7420617661696c61626c652e20417060008201527f706c7920666f722077686974656c697374206f72207761697420666f7220707560208201527f626c6963206d696e742e00000000000000000000000000000000000000000000604082015250565b60006133ae604a83612523565b91506133b98261332c565b606082019050919050565b600060208201905081810360008301526133dd816133a1565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613440602f83612523565b915061344b826133e4565b604082019050919050565b6000602082019050818103600083015261346f81613433565b9050919050565b600081905092915050565b600061348c82612518565b6134968185613476565b93506134a6818560208601612534565b80840191505092915050565b60006134be8285613481565b91506134ca8284613481565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613532602683612523565b915061353d826134d6565b604082019050919050565b6000602082019050818103600083015261356181613525565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b600061359e601483612523565b91506135a982613568565b602082019050919050565b600060208201905081810360008301526135cd81613591565b9050919050565b7f557365722068617320616c7265616479206d696e74656420616e204f472e0000600082015250565b600061360a601e83612523565b9150613615826135d4565b602082019050919050565b60006020820190508181036000830152613639816135fd565b9050919050565b7f596f7520617265206c61746520666f72206d696e74696e672e00000000000000600082015250565b6000613676601983612523565b915061368182613640565b602082019050919050565b600060208201905081810360008301526136a581613669565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006136e6826125d3565b91506136f1836125d3565b925082613701576137006136ac565b5b828204905092915050565b6000613717826125d3565b9150613722836125d3565b9250828210156137355761373461319e565b5b828203905092915050565b600061374b826125d3565b9150613756836125d3565b925082613766576137656136ac565b5b828206905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006137cd603283612523565b91506137d882613771565b604082019050919050565b600060208201905081810360008301526137fc816137c0565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613839602083612523565b915061384482613803565b602082019050919050565b600060208201905081810360008301526138688161382c565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006138a5601c83612523565b91506138b08261386f565b602082019050919050565b600060208201905081810360008301526138d481613898565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613902826138db565b61390c81856138e6565b935061391c818560208601612534565b61392581612567565b840191505092915050565b60006080820190506139456000830187612668565b6139526020830186612668565b61395f60408301856126fe565b818103606083015261397181846138f7565b905095945050505050565b60008151905061398b81612489565b92915050565b6000602082840312156139a7576139a6612453565b5b60006139b58482850161397c565b9150509291505056fe596f7520617265206e6f742077686974656c69737465642e204a6f696e206f757220646973636f726420666f722067657474696e672077686974656c69737465642e596f75277665207375636365737366756c6c79206d696e746564204f47204e46542e2057656c636f6d652046616d21204a6f696e206f757220646973636f726420746f20737461727420796f7572206a6f75726e65792ea2646970667358221220993bc00323b00b64a576f72bfeb57ff10686074c19996dcf58a7585f568255e764736f6c634300080e003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d555751374b4179513962414a6343417651725047417667527a65424d53395575384b3738413173564a4253562f00000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063715018a61161011a578063a22cb465116100ad578063bcc9ca5b1161007c578063bcc9ca5b1461058e578063c87b56dd146105ac578063e985e9c5146105dc578063f2fde38b1461060c578063f84ddf0b14610628576101fb565b8063a22cb46514610508578063a9b1cc7914610524578063b61ff93c14610542578063b88d4fde14610572576101fb565b80638da5cb5b116100e95780638da5cb5b1461048057806395d89b411461049e5780639b19251a146104bc5780639f211946146104ec576101fb565b8063715018a61461041e57806371b9d3161461042857806373fc16ad146104465780638456cb5914610476576101fb565b806342842e0e116101925780635cbd3a7e116101615780635cbd3a7e1461036e5780636352211e1461038c57806366e305fd146103bc57806370a08231146103ee576101fb565b806342842e0e146102e85780634db1df3b1461030457806355f804b3146103345780635c975abb14610350576101fb565b806318160ddd116101ce57806318160ddd1461029a57806323b872dd146102b8578063312767ca146102d45780633f4ba83a146102de576101fb565b806301ffc9a71461020057806306fdde0314610230578063081812fc1461024e578063095ea7b31461027e575b600080fd5b61021a600480360381019061021591906124b5565b610646565b60405161022791906124fd565b60405180910390f35b610238610728565b60405161024591906125b1565b60405180910390f35b61026860048036038101906102639190612609565b6107ba565b6040516102759190612677565b60405180910390f35b610298600480360381019061029391906126be565b61083f565b005b6102a261087a565b6040516102af919061270d565b60405180910390f35b6102d260048036038101906102cd9190612728565b610880565b005b6102dc6108bb565b005b6102e6610954565b005b61030260048036038101906102fd9190612728565b6109da565b005b61031e6004803603810190610319919061277b565b610a15565b60405161032b919061270d565b60405180910390f35b61034e600480360381019061034991906128dd565b610b4a565b005b610358610cb8565b60405161036591906124fd565b60405180910390f35b610376610ccf565b604051610383919061270d565b60405180910390f35b6103a660048036038101906103a19190612609565b610cdb565b6040516103b39190612677565b60405180910390f35b6103d660048036038101906103d1919061277b565b610d8c565b6040516103e593929190612926565b60405180910390f35b6104086004803603810190610403919061277b565b610f35565b604051610415919061270d565b60405180910390f35b610426610fec565b005b6104306110a3565b60405161043d91906124fd565b60405180910390f35b610460600480360381019061045b919061277b565b6110b6565b60405161046d919061270d565b60405180910390f35b61047e6110ce565b005b610488611154565b6040516104959190612677565b60405180910390f35b6104a661117e565b6040516104b391906125b1565b60405180910390f35b6104d660048036038101906104d1919061277b565b611210565b6040516104e3919061270d565b60405180910390f35b610506600480360381019061050191906129c4565b611228565b005b610522600480360381019061051d9190612a3d565b61141c565b005b61052c611457565b604051610539919061270d565b60405180910390f35b61055c60048036038101906105579190612a7d565b61151c565b60405161056991906124fd565b60405180910390f35b61058c60048036038101906105879190612b4b565b611677565b005b6105966116b2565b6040516105a391906124fd565b60405180910390f35b6105c660048036038101906105c19190612609565b6116c5565b6040516105d391906125b1565b60405180910390f35b6105f660048036038101906105f19190612bce565b61176c565b60405161060391906124fd565b60405180910390f35b6106266004803603810190610621919061277b565b611800565b005b6106306118f7565b60405161063d919061270d565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061071157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610721575061072082611903565b5b9050919050565b60606000805461073790612c3d565b80601f016020809104026020016040519081016040528092919081815260200182805461076390612c3d565b80156107b05780601f10610785576101008083540402835291602001916107b0565b820191906000526020600020905b81548152906001019060200180831161079357829003601f168201915b5050505050905090565b60006107c58261196d565b610804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107fb90612ce0565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087190612d4c565b60405180910390fd5b60095481565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b290612d4c565b60405180910390fd5b6108c36119d9565b73ffffffffffffffffffffffffffffffffffffffff166108e1611154565b73ffffffffffffffffffffffffffffffffffffffff1614610937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092e90612db8565b60405180910390fd5b6001600d60006101000a81548160ff021916908315150217905550565b61095c6119d9565b73ffffffffffffffffffffffffffffffffffffffff1661097a611154565b73ffffffffffffffffffffffffffffffffffffffff16146109d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c790612db8565b60405180910390fd5b6109d86119e1565b565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0c90612d4c565b60405180910390fd5b6000610a1f6119d9565b73ffffffffffffffffffffffffffffffffffffffff16610a3d611154565b73ffffffffffffffffffffffffffffffffffffffff1614610a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8a90612db8565b60405180910390fd5b610a9b610cb8565b15610adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad290612e24565b60405180910390fd5b600d60019054906101000a900460ff1680610afb5750610afa82611a83565b5b610b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3190612e90565b60405180910390fd5b610b4382611acf565b9050919050565b610b526119d9565b73ffffffffffffffffffffffffffffffffffffffff16610b70611154565b73ffffffffffffffffffffffffffffffffffffffff1614610bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbd90612db8565b60405180910390fd5b600b54610bd3600c611bd6565b108015610bed5750600d60009054906101000a900460ff16155b610c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2390612efc565b60405180910390fd5b7f9e30389099fbd0cfa7f14f27328e45e857b8d582d70741dde100593ab60d3cc7600a82604051610c5e929190612fb1565b60405180910390a1610c70600c611be4565b600b54610c7d600c611bd6565b03610c9e576001600d60006101000a81548160ff0219169083151502179055505b80600a9080519060200190610cb49291906123a6565b5050565b6000600660009054906101000a900460ff16905090565b60088060000154905081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7a9061305a565b60405180910390fd5b80915050919050565b6000806060610d99610cb8565b15610dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd090612e24565b60405180910390fd5b6000806060600954610deb6007611bd6565b10610e3157600191506040518060400160405280602081526020017f416c6c20746865204e4654732061726520616c7265616479206d696e7465642e8152509050610f22565b610e3a87611bfa565b158015610e635750610e4b87611a83565b80610e625750600d60019054906101000a900460ff165b5b15610ea957600192506040518060400160405280600a81526020017f4d696e7420616e204f47000000000000000000000000000000000000000000008152509050610f21565b610eb287611a83565b158015610ecc5750600d60019054906101000a900460ff16155b15610ef557600191506040518060800160405280604281526020016139bf604291399050610f20565b610efe87611bfa565b15610f1f57604051806080016040528060578152602001613a016057913990505b5b5b5b8282829550955095505050509193909250565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9c906130ec565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ff46119d9565b73ffffffffffffffffffffffffffffffffffffffff16611012611154565b73ffffffffffffffffffffffffffffffffffffffff1614611068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105f90612db8565b60405180910390fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109a9061317e565b60405180910390fd5b600d60009054906101000a900460ff1681565b600f6020528060005260406000206000915090505481565b6110d66119d9565b73ffffffffffffffffffffffffffffffffffffffff166110f4611154565b73ffffffffffffffffffffffffffffffffffffffff161461114a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114190612db8565b60405180910390fd5b611152611c45565b565b6000600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461118d90612c3d565b80601f01602080910402602001604051908101604052809291908181526020018280546111b990612c3d565b80156112065780601f106111db57610100808354040283529160200191611206565b820191906000526020600020905b8154815290600101906020018083116111e957829003601f168201915b5050505050905090565b600e6020528060005260406000206000915090505481565b611230610cb8565b15611270576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126790612e24565b60405180910390fd5b6112786119d9565b73ffffffffffffffffffffffffffffffffffffffff16611296611154565b73ffffffffffffffffffffffffffffffffffffffff16146112ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e390612db8565b60405180910390fd5b60008282905090506009546113016008611bd6565b8261130c91906131cd565b111561134d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134490613295565b60405180910390fd5b60005b818110156114165761138884848381811061136e5761136d6132b5565b5b9050602002016020810190611383919061277b565b611a83565b611403576001600e60008686858181106113a5576113a46132b5565b5b90506020020160208101906113ba919061277b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506114026008611be4565b5b808061140e906132e4565b915050611350565b50505050565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144e90612d4c565b60405180910390fd5b6000611461610cb8565b156114a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149890612e24565b60405180910390fd5b600d60019054906101000a900460ff16806114c857506114c76114c26119d9565b611a83565b5b611507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fe906133c4565b60405180910390fd5b6115176115126119d9565b611acf565b905090565b60006115266119d9565b73ffffffffffffffffffffffffffffffffffffffff16611544611154565b73ffffffffffffffffffffffffffffffffffffffff161461159a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159190612db8565b60405180910390fd5b6115a2610cb8565b156115e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d990612e24565b60405180910390fd5b8115611619577f652bdb42d00441813d1211c6f4c84fe867279e472bfe04439e9c728deeffed0660405160405180910390a1611646565b7f9213aad187aca309dce8a8effaaa1e7b60ad3a1ad485e61ddeecdcc8be87997360405160405180910390a15b81600d60016101000a81548160ff021916908315150217905550600d60019054906101000a900460ff169050919050565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a990612d4c565b60405180910390fd5b600d60019054906101000a900460ff1681565b60606116d08261196d565b61170f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170690613456565b60405180910390fd5b6000611719611ce8565b905060008151116117395760405180602001604052806000815250611764565b8061174384611d7a565b6040516020016117549291906134b2565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118086119d9565b73ffffffffffffffffffffffffffffffffffffffff16611826611154565b73ffffffffffffffffffffffffffffffffffffffff161461187c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187390612db8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e290613548565b60405180910390fd5b6118f481611eda565b50565b60078060000154905081565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b6119e9610cb8565b611a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1f906135b4565b60405180910390fd5b6000600660006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611a6c6119d9565b604051611a799190612677565b60405180910390a1565b60006001600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054149050919050565b6000611ada82611bfa565b15611b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1190613620565b60405180910390fd5b600954611b276007611bd6565b10611b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5e9061368c565b60405180910390fd5b611b716007611be4565b6000611b7d6007611bd6565b905080600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611bcd8382611fa0565b80915050919050565b600081600001549050919050565b6001816000016000828254019250508190555050565b600080600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054119050919050565b611c4d610cb8565b15611c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8490612e24565b60405180910390fd5b6001600660006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611cd16119d9565b604051611cde9190612677565b60405180910390a1565b6060600a8054611cf790612c3d565b80601f0160208091040260200160405190810160405280929190818152602001828054611d2390612c3d565b8015611d705780601f10611d4557610100808354040283529160200191611d70565b820191906000526020600020905b815481529060010190602001808311611d5357829003601f168201915b5050505050905090565b606060008203611dc1576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611ed5565b600082905060005b60008214611df3578080611ddc906132e4565b915050600a82611dec91906136db565b9150611dc9565b60008167ffffffffffffffff811115611e0f57611e0e6127b2565b5b6040519080825280601f01601f191660200182016040528015611e415781602001600182028036833780820191505090505b5090505b60008514611ece57600182611e5a919061370c565b9150600a85611e699190613740565b6030611e7591906131cd565b60f81b818381518110611e8b57611e8a6132b5565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611ec791906136db565b9450611e45565b8093505050505b919050565b6000600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611fba828260405180602001604052806000815250611fbe565b5050565b611fc88383612019565b611fd560008484846121f2565b612014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200b906137e3565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207f9061384f565b60405180910390fd5b6120918161196d565b156120d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c8906138bb565b60405180910390fd5b6120dd60008383612379565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461212d91906131cd565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121ee6000838361237e565b5050565b60006122138473ffffffffffffffffffffffffffffffffffffffff16612383565b1561236c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261223c6119d9565b8786866040518563ffffffff1660e01b815260040161225e9493929190613930565b6020604051808303816000875af192505050801561229a57506040513d601f19601f820116820180604052508101906122979190613991565b60015b61231c573d80600081146122ca576040519150601f19603f3d011682016040523d82523d6000602084013e6122cf565b606091505b506000815103612314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230b906137e3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612371565b600190505b949350505050565b505050565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546123b290612c3d565b90600052602060002090601f0160209004810192826123d4576000855561241b565b82601f106123ed57805160ff191683800117855561241b565b8280016001018555821561241b579182015b8281111561241a5782518255916020019190600101906123ff565b5b509050612428919061242c565b5090565b5b8082111561244557600081600090555060010161242d565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6124928161245d565b811461249d57600080fd5b50565b6000813590506124af81612489565b92915050565b6000602082840312156124cb576124ca612453565b5b60006124d9848285016124a0565b91505092915050565b60008115159050919050565b6124f7816124e2565b82525050565b600060208201905061251260008301846124ee565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612552578082015181840152602081019050612537565b83811115612561576000848401525b50505050565b6000601f19601f8301169050919050565b600061258382612518565b61258d8185612523565b935061259d818560208601612534565b6125a681612567565b840191505092915050565b600060208201905081810360008301526125cb8184612578565b905092915050565b6000819050919050565b6125e6816125d3565b81146125f157600080fd5b50565b600081359050612603816125dd565b92915050565b60006020828403121561261f5761261e612453565b5b600061262d848285016125f4565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061266182612636565b9050919050565b61267181612656565b82525050565b600060208201905061268c6000830184612668565b92915050565b61269b81612656565b81146126a657600080fd5b50565b6000813590506126b881612692565b92915050565b600080604083850312156126d5576126d4612453565b5b60006126e3858286016126a9565b92505060206126f4858286016125f4565b9150509250929050565b612707816125d3565b82525050565b600060208201905061272260008301846126fe565b92915050565b60008060006060848603121561274157612740612453565b5b600061274f868287016126a9565b9350506020612760868287016126a9565b9250506040612771868287016125f4565b9150509250925092565b60006020828403121561279157612790612453565b5b600061279f848285016126a9565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6127ea82612567565b810181811067ffffffffffffffff82111715612809576128086127b2565b5b80604052505050565b600061281c612449565b905061282882826127e1565b919050565b600067ffffffffffffffff821115612848576128476127b2565b5b61285182612567565b9050602081019050919050565b82818337600083830152505050565b600061288061287b8461282d565b612812565b90508281526020810184848401111561289c5761289b6127ad565b5b6128a784828561285e565b509392505050565b600082601f8301126128c4576128c36127a8565b5b81356128d484826020860161286d565b91505092915050565b6000602082840312156128f3576128f2612453565b5b600082013567ffffffffffffffff81111561291157612910612458565b5b61291d848285016128af565b91505092915050565b600060608201905061293b60008301866124ee565b61294860208301856124ee565b818103604083015261295a8184612578565b9050949350505050565b600080fd5b600080fd5b60008083601f840112612984576129836127a8565b5b8235905067ffffffffffffffff8111156129a1576129a0612964565b5b6020830191508360208202830111156129bd576129bc612969565b5b9250929050565b600080602083850312156129db576129da612453565b5b600083013567ffffffffffffffff8111156129f9576129f8612458565b5b612a058582860161296e565b92509250509250929050565b612a1a816124e2565b8114612a2557600080fd5b50565b600081359050612a3781612a11565b92915050565b60008060408385031215612a5457612a53612453565b5b6000612a62858286016126a9565b9250506020612a7385828601612a28565b9150509250929050565b600060208284031215612a9357612a92612453565b5b6000612aa184828501612a28565b91505092915050565b600067ffffffffffffffff821115612ac557612ac46127b2565b5b612ace82612567565b9050602081019050919050565b6000612aee612ae984612aaa565b612812565b905082815260208101848484011115612b0a57612b096127ad565b5b612b1584828561285e565b509392505050565b600082601f830112612b3257612b316127a8565b5b8135612b42848260208601612adb565b91505092915050565b60008060008060808587031215612b6557612b64612453565b5b6000612b73878288016126a9565b9450506020612b84878288016126a9565b9350506040612b95878288016125f4565b925050606085013567ffffffffffffffff811115612bb657612bb5612458565b5b612bc287828801612b1d565b91505092959194509250565b60008060408385031215612be557612be4612453565b5b6000612bf3858286016126a9565b9250506020612c04858286016126a9565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612c5557607f821691505b602082108103612c6857612c67612c0e565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612cca602c83612523565b9150612cd582612c6e565b604082019050919050565b60006020820190508181036000830152612cf981612cbd565b9050919050565b7f546f6b656e206973206e6f6e2d7472616e7366657261626c6500000000000000600082015250565b6000612d36601983612523565b9150612d4182612d00565b602082019050919050565b60006020820190508181036000830152612d6581612d29565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612da2602083612523565b9150612dad82612d6c565b602082019050919050565b60006020820190508181036000830152612dd181612d95565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000612e0e601083612523565b9150612e1982612dd8565b602082019050919050565b60006020820190508181036000830152612e3d81612e01565b9050919050565b7f4e6f7420612077686974656c697374656420616464726573732e000000000000600082015250565b6000612e7a601a83612523565b9150612e8582612e44565b602082019050919050565b60006020820190508181036000830152612ea981612e6d565b9050919050565b7f42617365207572692063616e6e6f742062652075706461746564000000000000600082015250565b6000612ee6601a83612523565b9150612ef182612eb0565b602082019050919050565b60006020820190508181036000830152612f1581612ed9565b9050919050565b60008190508160005260206000209050919050565b60008154612f3e81612c3d565b612f488186612523565b94506001821660008114612f635760018114612f7557612fa8565b60ff1983168652602086019350612fa8565b612f7e85612f1c565b60005b83811015612fa057815481890152600182019150602081019050612f81565b808801955050505b50505092915050565b60006040820190508181036000830152612fcb8185612f31565b90508181036020830152612fdf8184612578565b90509392505050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613044602983612523565b915061304f82612fe8565b604082019050919050565b6000602082019050818103600083015261307381613037565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006130d6602a83612523565b91506130e18261307a565b604082019050919050565b60006020820190508181036000830152613105816130c9565b9050919050565b7f596f752063616e20636865636b6f757420616e7974696d6520796f75206c696b60008201527f652c2062757420796f752063616e206e65766572206c656176652e0000000000602082015250565b6000613168603b83612523565b91506131738261310c565b604082019050919050565b600060208201905081810360008301526131978161315b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006131d8826125d3565b91506131e3836125d3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156132185761321761319e565b5b828201905092915050565b7f546865726520617265206d6f7265206164647265737320696e2074686520776860008201527f6974656c697374207468616e2074686520746f74616c20737570706c792e0000602082015250565b600061327f603e83612523565b915061328a82613223565b604082019050919050565b600060208201905081810360008301526132ae81613272565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006132ef826125d3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036133215761332061319e565b5b600182019050919050565b7f5075626c6963206d696e74206973206e6f7420617661696c61626c652e20417060008201527f706c7920666f722077686974656c697374206f72207761697420666f7220707560208201527f626c6963206d696e742e00000000000000000000000000000000000000000000604082015250565b60006133ae604a83612523565b91506133b98261332c565b606082019050919050565b600060208201905081810360008301526133dd816133a1565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613440602f83612523565b915061344b826133e4565b604082019050919050565b6000602082019050818103600083015261346f81613433565b9050919050565b600081905092915050565b600061348c82612518565b6134968185613476565b93506134a6818560208601612534565b80840191505092915050565b60006134be8285613481565b91506134ca8284613481565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613532602683612523565b915061353d826134d6565b604082019050919050565b6000602082019050818103600083015261356181613525565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b600061359e601483612523565b91506135a982613568565b602082019050919050565b600060208201905081810360008301526135cd81613591565b9050919050565b7f557365722068617320616c7265616479206d696e74656420616e204f472e0000600082015250565b600061360a601e83612523565b9150613615826135d4565b602082019050919050565b60006020820190508181036000830152613639816135fd565b9050919050565b7f596f7520617265206c61746520666f72206d696e74696e672e00000000000000600082015250565b6000613676601983612523565b915061368182613640565b602082019050919050565b600060208201905081810360008301526136a581613669565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006136e6826125d3565b91506136f1836125d3565b925082613701576137006136ac565b5b828204905092915050565b6000613717826125d3565b9150613722836125d3565b9250828210156137355761373461319e565b5b828203905092915050565b600061374b826125d3565b9150613756836125d3565b925082613766576137656136ac565b5b828206905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006137cd603283612523565b91506137d882613771565b604082019050919050565b600060208201905081810360008301526137fc816137c0565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613839602083612523565b915061384482613803565b602082019050919050565b600060208201905081810360008301526138688161382c565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006138a5601c83612523565b91506138b08261386f565b602082019050919050565b600060208201905081810360008301526138d481613898565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613902826138db565b61390c81856138e6565b935061391c818560208601612534565b61392581612567565b840191505092915050565b60006080820190506139456000830187612668565b6139526020830186612668565b61395f60408301856126fe565b818103606083015261397181846138f7565b905095945050505050565b60008151905061398b81612489565b92915050565b6000602082840312156139a7576139a6612453565b5b60006139b58482850161397c565b9150509291505056fe596f7520617265206e6f742077686974656c69737465642e204a6f696e206f757220646973636f726420666f722067657474696e672077686974656c69737465642e596f75277665207375636365737366756c6c79206d696e746564204f47204e46542e2057656c636f6d652046616d21204a6f696e206f757220646973636f726420746f20737461727420796f7572206a6f75726e65792ea2646970667358221220993bc00323b00b64a576f72bfeb57ff10686074c19996dcf58a7585f568255e764736f6c634300080e0033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d555751374b4179513962414a6343417651725047417667527a65424d53395575384b3738413173564a4253562f00000000000000000000

-----Decoded View---------------
Arg [0] : baseUri_ (string): ipfs://QmUWQ7KAyQ9bAJcCAvQrPGAvgRzeBMS9Uu8K78A1sVJBSV/

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d555751374b4179513962414a6343417651725047417667
Arg [3] : 527a65424d53395575384b3738413173564a4253562f00000000000000000000


Deployed Bytecode Sourcemap

41211:6008:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21696:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22641:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24201:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46621:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41409:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46756:150;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42466:81;;;:::i;:::-;;42393:65;;;:::i;:::-;;46273:154;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44982:217;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42555:314;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35947:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41356:44;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22335:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44025:949;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;22065:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46914:148;;;:::i;:::-;;41574:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41706:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42324:61;;;:::i;:::-;;38199:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22810:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41655:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42877:545;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47070:146;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45207:261;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43430:271;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46435:178;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41614:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22985:334;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24720:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39108:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41314:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21696:305;21798:4;21850:25;21835:40;;;:11;:40;;;;:105;;;;21907:33;21892:48;;;:11;:48;;;;21835:105;:158;;;;21957:36;21981:11;21957:23;:36::i;:::-;21835:158;21815:178;;21696:305;;;:::o;22641:100::-;22695:13;22728:5;22721:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22641:100;:::o;24201:221::-;24277:7;24305:16;24313:7;24305;:16::i;:::-;24297:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24390:15;:24;24406:7;24390:24;;;;;;;;;;;;;;;;;;;;;24383:31;;24201:221;;;:::o;46621:127::-;46705:35;;;;;;;;;;:::i;:::-;;;;;;;;41409:29;;;;:::o;46756:150::-;46863:35;;;;;;;;;;:::i;:::-;;;;;;;;42466:81;38430:12;:10;:12::i;:::-;38419:23;;:7;:5;:7::i;:::-;:23;;;38411:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42535:4:::1;42519:13;;:20;;;;;;;;;;;;;;;;;;42466:81::o:0;42393:65::-;38430:12;:10;:12::i;:::-;38419:23;;:7;:5;:7::i;:::-;:23;;;38411:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42440:10:::1;:8;:10::i;:::-;42393:65::o:0;46273:154::-;46384:35;;;;;;;;;;:::i;:::-;;;;;;;;44982:217;45054:7;38430:12;:10;:12::i;:::-;38419:23;;:7;:5;:7::i;:::-;:23;;;38411:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36273:8:::1;:6;:8::i;:::-;36272:9;36264:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;45084:14:::2;;;;;;;;;;;:43;;;;45102:25;45124:2;45102:21;:25::i;:::-;45084:43;45076:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;45176:15;45188:2;45176:11;:15::i;:::-;45169:22;;44982:217:::0;;;:::o;42555:314::-;38430:12;:10;:12::i;:::-;38419:23;;:7;:5;:7::i;:::-;:23;;;38411:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42228:19:::1;;42196:29;:19;:27;:29::i;:::-;:51;:69;;;;;42252:13;;;;;;;;;;;42251:14;42196:69;42188:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;42650:26:::2;42658:8;42668:7;42650:26;;;;;;;:::i;:::-;;;;;;;;42687:31;:19;:29;:31::i;:::-;42765:19;;42732:29;:19;:27;:29::i;:::-;:52:::0;42729:104:::2;;42817:4;42801:13;;:20;;;;;;;;;;;;;;;;;;42729:104;42854:7;42843:8;:18;;;;;;;;;;;;:::i;:::-;;42555:314:::0;:::o;35947:86::-;35994:4;36018:7;;;;;;;;;;;36011:14;;35947:86;:::o;41356:44::-;;;;;;;;;:::o;22335:239::-;22407:7;22427:13;22443:7;:16;22451:7;22443:16;;;;;;;;;;;;;;;;;;;;;22427:32;;22495:1;22478:19;;:5;:19;;;22470:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22561:5;22554:12;;;22335:239;;;:::o;44025:949::-;44099:4;44105;44111:13;36273:8;:6;:8::i;:::-;36272:9;36264:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;44137:12:::1;44168::::0;44199:21:::1;44260:11;;44235:21;:11;:19;:21::i;:::-;:36;44231:689;;44298:4;44288:14;;44317:44;;;;;;;;;;;;;;;;::::0;::::1;;44231:689;;;44384:23;44397:9;44384:12;:23::i;:::-;44383:24;:80;;;;;44412:32;44434:9;44412:21;:32::i;:::-;:50;;;;44448:14;;;;;;;;;;;44412:50;44383:80;44379:541;;;44490:4;44480:14;;44509:22;;;;;;;;;;;;;;;;::::0;::::1;;44379:541;;;44563:32;44585:9;44563:21;:32::i;:::-;44562:33;:52;;;;;44600:14;;;;;;;;;;;44599:15;44562:52;44558:362;;;44641:4;44631:14;;44660:78;;;;;;;;;;;;;;;;;;;44558:362;;;44769:23;44782:9;44769:12;:23::i;:::-;44765:155;;;44809:99;;;;;;;;;;;;;;;;;;;44765:155;44558:362;44379:541;44231:689;44940:7;44949;44958;44932:34;;;;;;;;;44025:949:::0;;;;;:::o;22065:208::-;22137:7;22182:1;22165:19;;:5;:19;;;22157:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22249:9;:16;22259:5;22249:16;;;;;;;;;;;;;;;;22242:23;;22065:208;;;:::o;46914:148::-;38430:12;:10;:12::i;:::-;38419:23;;:7;:5;:7::i;:::-;:23;;;38411:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46985:69:::1;;;;;;;;;;:::i;:::-;;;;;;;;41574:33:::0;;;;;;;;;;;;;:::o;41706:44::-;;;;;;;;;;;;;;;;;:::o;42324:61::-;38430:12;:10;:12::i;:::-;38419:23;;:7;:5;:7::i;:::-;:23;;;38411:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42369:8:::1;:6;:8::i;:::-;42324:61::o:0;38199:87::-;38245:7;38272:6;;;;;;;;;;;38265:13;;38199:87;:::o;22810:104::-;22866:13;22899:7;22892:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22810:104;:::o;41655:44::-;;;;;;;;;;;;;;;;;:::o;42877:545::-;36273:8;:6;:8::i;:::-;36272:9;36264:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;38430:12:::1;:10;:12::i;:::-;38419:23;;:7;:5;:7::i;:::-;:23;;;38411:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42974:20:::2;42997:9;;:16;;42974:39;;43084:11;;43050:30;:20;:28;:30::i;:::-;43032:15;:48;;;;:::i;:::-;:63;;43024:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;43193:9;43188:227;43212:15;43208:1;:19;43188:227;;;43254:35;43276:9;;43286:1;43276:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;43254:21;:35::i;:::-;43249:155;;43336:1;43310:9;:23;43320:9;;43330:1;43320:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;43310:23;;;;;;;;;;;;;;;:27;;;;43356:32;:20;:30;:32::i;:::-;43249:155;43229:3;;;;;:::i;:::-;;;;43188:227;;;;42963:459;42877:545:::0;;:::o;47070:146::-;47173:35;;;;;;;;;;:::i;:::-;;;;;;;;45207:261;45255:7;36273:8;:6;:8::i;:::-;36272:9;36264:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;45285:14:::1;;;;;;;;;;;:53;;;;45303:35;45325:12;:10;:12::i;:::-;45303:21;:35::i;:::-;45285:53;45277:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;45435:25;45447:12;:10;:12::i;:::-;45435:11;:25::i;:::-;45428:32;;45207:261:::0;:::o;43430:271::-;43512:4;38430:12;:10;:12::i;:::-;38419:23;;:7;:5;:7::i;:::-;:23;;;38411:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36273:8:::1;:6;:8::i;:::-;36272:9;36264:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;43533:6:::2;43529:98;;;43559:16;;;;;;;;;;43529:98;;;43609:18;;;;;;;;;;43529:98;43655:6;43638:14;;:23;;;;;;;;;;;;;;;;;;43679:14;;;;;;;;;;;43672:21;;43430:271:::0;;;:::o;46435:178::-;46570:35;;;;;;;;;;:::i;:::-;;;;;;;;41614:34;;;;;;;;;;;;;:::o;22985:334::-;23058:13;23092:16;23100:7;23092;:16::i;:::-;23084:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23173:21;23197:10;:8;:10::i;:::-;23173:34;;23249:1;23231:7;23225:21;:25;:86;;;;;;;;;;;;;;;;;23277:7;23286:18;:7;:16;:18::i;:::-;23260:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23225:86;23218:93;;;22985:334;;;:::o;24720:164::-;24817:4;24841:18;:25;24860:5;24841:25;;;;;;;;;;;;;;;:35;24867:8;24841:35;;;;;;;;;;;;;;;;;;;;;;;;;24834:42;;24720:164;;;;:::o;39108:201::-;38430:12;:10;:12::i;:::-;38419:23;;:7;:5;:7::i;:::-;:23;;;38411:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39217:1:::1;39197:22;;:8;:22;;::::0;39189:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;39273:28;39292:8;39273:18;:28::i;:::-;39108:201:::0;:::o;41314:35::-;;;;;;;;;:::o;20121:157::-;20206:4;20245:25;20230:40;;;:11;:40;;;;20223:47;;20121:157;;;:::o;27455:127::-;27520:4;27572:1;27544:30;;:7;:16;27552:7;27544:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27537:37;;27455:127;;;:::o;16908:98::-;16961:7;16988:10;16981:17;;16908:98;:::o;37006:120::-;36550:8;:6;:8::i;:::-;36542:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;37075:5:::1;37065:7;;:15;;;;;;;;;;;;;;;;;;37096:22;37105:12;:10;:12::i;:::-;37096:22;;;;;;:::i;:::-;;;;;;;;37006:120::o:0;46021:127::-;46092:4;46139:1;46116:9;:19;46126:8;46116:19;;;;;;;;;;;;;;;;:24;46109:31;;46021:127;;;:::o;45476:412::-;45526:7;45587:16;45600:2;45587:12;:16::i;:::-;45586:17;45578:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;45681:11;;45657:21;:11;:19;:21::i;:::-;:35;45649:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;45735:23;:11;:21;:23::i;:::-;45769:10;45782:21;:11;:19;:21::i;:::-;45769:34;;45830:2;45814:9;:13;45824:2;45814:13;;;;;;;;;;;;;;;:18;;;;45843:17;45853:2;45857;45843:9;:17::i;:::-;45878:2;45871:9;;;45476:412;;;:::o;40545:114::-;40610:7;40637;:14;;;40630:21;;40545:114;;;:::o;40667:127::-;40774:1;40756:7;:14;;;:19;;;;;;;;;;;40667:127;:::o;45896:117::-;45958:4;46004:1;45982:9;:19;45992:8;45982:19;;;;;;;;;;;;;;;;:23;45975:30;;45896:117;;;:::o;36747:118::-;36273:8;:6;:8::i;:::-;36272:9;36264:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;36817:4:::1;36807:7;;:14;;;;;;;;;;;;;;;;;;36837:20;36844:12;:10;:12::i;:::-;36837:20;;;;;;:::i;:::-;;;;;;;;36747:118::o:0;46156:109::-;46216:13;46249:8;46242:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46156:109;:::o;17493:723::-;17549:13;17779:1;17770:5;:10;17766:53;;17797:10;;;;;;;;;;;;;;;;;;;;;17766:53;17829:12;17844:5;17829:20;;17860:14;17885:78;17900:1;17892:4;:9;17885:78;;17918:8;;;;;:::i;:::-;;;;17949:2;17941:10;;;;;:::i;:::-;;;17885:78;;;17973:19;18005:6;17995:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17973:39;;18023:154;18039:1;18030:5;:10;18023:154;;18067:1;18057:11;;;;;:::i;:::-;;;18134:2;18126:5;:10;;;;:::i;:::-;18113:2;:24;;;;:::i;:::-;18100:39;;18083:6;18090;18083:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;18163:2;18154:11;;;;;:::i;:::-;;;18023:154;;;18201:6;18187:21;;;;;17493:723;;;;:::o;39469:191::-;39543:16;39562:6;;;;;;;;;;;39543:25;;39588:8;39579:6;;:17;;;;;;;;;;;;;;;;;;39643:8;39612:40;;39633:8;39612:40;;;;;;;;;;;;39532:128;39469:191;:::o;28439:110::-;28515:26;28525:2;28529:7;28515:26;;;;;;;;;;;;:9;:26::i;:::-;28439:110;;:::o;28776:321::-;28906:18;28912:2;28916:7;28906:5;:18::i;:::-;28957:54;28988:1;28992:2;28996:7;29005:5;28957:22;:54::i;:::-;28935:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28776:321;;;:::o;29433:439::-;29527:1;29513:16;;:2;:16;;;29505:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29586:16;29594:7;29586;:16::i;:::-;29585:17;29577:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29648:45;29677:1;29681:2;29685:7;29648:20;:45::i;:::-;29723:1;29706:9;:13;29716:2;29706:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29754:2;29735:7;:16;29743:7;29735:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29799:7;29795:2;29774:33;;29791:1;29774:33;;;;;;;;;;;;29820:44;29848:1;29852:2;29856:7;29820:19;:44::i;:::-;29433:439;;:::o;32797:799::-;32952:4;32973:15;:2;:13;;;:15::i;:::-;32969:620;;;33025:2;33009:36;;;33046:12;:10;:12::i;:::-;33060:4;33066:7;33075:5;33009:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33005:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33268:1;33251:6;:13;:18;33247:272;;33294:60;;;;;;;;;;:::i;:::-;;;;;;;;33247:272;33469:6;33463:13;33454:6;33450:2;33446:15;33439:38;33005:529;33142:41;;;33132:51;;;:6;:51;;;;33125:58;;;;;32969:620;33573:4;33566:11;;32797:799;;;;;;;:::o;34168:126::-;;;;:::o;34679:125::-;;;;:::o;8953:326::-;9013:4;9270:1;9248:7;:19;;;:23;9241:30;;8953:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:329::-;5974:6;6023:2;6011:9;6002:7;5998:23;5994:32;5991:119;;;6029:79;;:::i;:::-;5991:119;6149:1;6174:53;6219:7;6210:6;6199:9;6195:22;6174:53;:::i;:::-;6164:63;;6120:117;5915:329;;;;:::o;6250:117::-;6359:1;6356;6349:12;6373:117;6482:1;6479;6472:12;6496:180;6544:77;6541:1;6534:88;6641:4;6638:1;6631:15;6665:4;6662:1;6655:15;6682:281;6765:27;6787:4;6765:27;:::i;:::-;6757:6;6753:40;6895:6;6883:10;6880:22;6859:18;6847:10;6844:34;6841:62;6838:88;;;6906:18;;:::i;:::-;6838:88;6946:10;6942:2;6935:22;6725:238;6682:281;;:::o;6969:129::-;7003:6;7030:20;;:::i;:::-;7020:30;;7059:33;7087:4;7079:6;7059:33;:::i;:::-;6969:129;;;:::o;7104:308::-;7166:4;7256:18;7248:6;7245:30;7242:56;;;7278:18;;:::i;:::-;7242:56;7316:29;7338:6;7316:29;:::i;:::-;7308:37;;7400:4;7394;7390:15;7382:23;;7104:308;;;:::o;7418:154::-;7502:6;7497:3;7492;7479:30;7564:1;7555:6;7550:3;7546:16;7539:27;7418:154;;;:::o;7578:412::-;7656:5;7681:66;7697:49;7739:6;7697:49;:::i;:::-;7681:66;:::i;:::-;7672:75;;7770:6;7763:5;7756:21;7808:4;7801:5;7797:16;7846:3;7837:6;7832:3;7828:16;7825:25;7822:112;;;7853:79;;:::i;:::-;7822:112;7943:41;7977:6;7972:3;7967;7943:41;:::i;:::-;7662:328;7578:412;;;;;:::o;8010:340::-;8066:5;8115:3;8108:4;8100:6;8096:17;8092:27;8082:122;;8123:79;;:::i;:::-;8082:122;8240:6;8227:20;8265:79;8340:3;8332:6;8325:4;8317:6;8313:17;8265:79;:::i;:::-;8256:88;;8072:278;8010:340;;;;:::o;8356:509::-;8425:6;8474:2;8462:9;8453:7;8449:23;8445:32;8442:119;;;8480:79;;:::i;:::-;8442:119;8628:1;8617:9;8613:17;8600:31;8658:18;8650:6;8647:30;8644:117;;;8680:79;;:::i;:::-;8644:117;8785:63;8840:7;8831:6;8820:9;8816:22;8785:63;:::i;:::-;8775:73;;8571:287;8356:509;;;;:::o;8871:::-;9028:4;9066:2;9055:9;9051:18;9043:26;;9079:65;9141:1;9130:9;9126:17;9117:6;9079:65;:::i;:::-;9154:66;9216:2;9205:9;9201:18;9192:6;9154:66;:::i;:::-;9267:9;9261:4;9257:20;9252:2;9241:9;9237:18;9230:48;9295:78;9368:4;9359:6;9295:78;:::i;:::-;9287:86;;8871:509;;;;;;:::o;9386:117::-;9495:1;9492;9485:12;9509:117;9618:1;9615;9608:12;9649:568;9722:8;9732:6;9782:3;9775:4;9767:6;9763:17;9759:27;9749:122;;9790:79;;:::i;:::-;9749:122;9903:6;9890:20;9880:30;;9933:18;9925:6;9922:30;9919:117;;;9955:79;;:::i;:::-;9919:117;10069:4;10061:6;10057:17;10045:29;;10123:3;10115:4;10107:6;10103:17;10093:8;10089:32;10086:41;10083:128;;;10130:79;;:::i;:::-;10083:128;9649:568;;;;;:::o;10223:559::-;10309:6;10317;10366:2;10354:9;10345:7;10341:23;10337:32;10334:119;;;10372:79;;:::i;:::-;10334:119;10520:1;10509:9;10505:17;10492:31;10550:18;10542:6;10539:30;10536:117;;;10572:79;;:::i;:::-;10536:117;10685:80;10757:7;10748:6;10737:9;10733:22;10685:80;:::i;:::-;10667:98;;;;10463:312;10223:559;;;;;:::o;10788:116::-;10858:21;10873:5;10858:21;:::i;:::-;10851:5;10848:32;10838:60;;10894:1;10891;10884:12;10838:60;10788:116;:::o;10910:133::-;10953:5;10991:6;10978:20;10969:29;;11007:30;11031:5;11007:30;:::i;:::-;10910:133;;;;:::o;11049:468::-;11114:6;11122;11171:2;11159:9;11150:7;11146:23;11142:32;11139:119;;;11177:79;;:::i;:::-;11139:119;11297:1;11322:53;11367:7;11358:6;11347:9;11343:22;11322:53;:::i;:::-;11312:63;;11268:117;11424:2;11450:50;11492:7;11483:6;11472:9;11468:22;11450:50;:::i;:::-;11440:60;;11395:115;11049:468;;;;;:::o;11523:323::-;11579:6;11628:2;11616:9;11607:7;11603:23;11599:32;11596:119;;;11634:79;;:::i;:::-;11596:119;11754:1;11779:50;11821:7;11812:6;11801:9;11797:22;11779:50;:::i;:::-;11769:60;;11725:114;11523:323;;;;:::o;11852:307::-;11913:4;12003:18;11995:6;11992:30;11989:56;;;12025:18;;:::i;:::-;11989:56;12063:29;12085:6;12063:29;:::i;:::-;12055:37;;12147:4;12141;12137:15;12129:23;;11852:307;;;:::o;12165:410::-;12242:5;12267:65;12283:48;12324:6;12283:48;:::i;:::-;12267:65;:::i;:::-;12258:74;;12355:6;12348:5;12341:21;12393:4;12386:5;12382:16;12431:3;12422:6;12417:3;12413:16;12410:25;12407:112;;;12438:79;;:::i;:::-;12407:112;12528:41;12562:6;12557:3;12552;12528:41;:::i;:::-;12248:327;12165:410;;;;;:::o;12594:338::-;12649:5;12698:3;12691:4;12683:6;12679:17;12675:27;12665:122;;12706:79;;:::i;:::-;12665:122;12823:6;12810:20;12848:78;12922:3;12914:6;12907:4;12899:6;12895:17;12848:78;:::i;:::-;12839:87;;12655:277;12594:338;;;;:::o;12938:943::-;13033:6;13041;13049;13057;13106:3;13094:9;13085:7;13081:23;13077:33;13074:120;;;13113:79;;:::i;:::-;13074:120;13233:1;13258:53;13303:7;13294:6;13283:9;13279:22;13258:53;:::i;:::-;13248:63;;13204:117;13360:2;13386:53;13431:7;13422:6;13411:9;13407:22;13386:53;:::i;:::-;13376:63;;13331:118;13488:2;13514:53;13559:7;13550:6;13539:9;13535:22;13514:53;:::i;:::-;13504:63;;13459:118;13644:2;13633:9;13629:18;13616:32;13675:18;13667:6;13664:30;13661:117;;;13697:79;;:::i;:::-;13661:117;13802:62;13856:7;13847:6;13836:9;13832:22;13802:62;:::i;:::-;13792:72;;13587:287;12938:943;;;;;;;:::o;13887:474::-;13955:6;13963;14012:2;14000:9;13991:7;13987:23;13983:32;13980:119;;;14018:79;;:::i;:::-;13980:119;14138:1;14163:53;14208:7;14199:6;14188:9;14184:22;14163:53;:::i;:::-;14153:63;;14109:117;14265:2;14291:53;14336:7;14327:6;14316:9;14312:22;14291:53;:::i;:::-;14281:63;;14236:118;13887:474;;;;;:::o;14367:180::-;14415:77;14412:1;14405:88;14512:4;14509:1;14502:15;14536:4;14533:1;14526:15;14553:320;14597:6;14634:1;14628:4;14624:12;14614:22;;14681:1;14675:4;14671:12;14702:18;14692:81;;14758:4;14750:6;14746:17;14736:27;;14692:81;14820:2;14812:6;14809:14;14789:18;14786:38;14783:84;;14839:18;;:::i;:::-;14783:84;14604:269;14553:320;;;:::o;14879:231::-;15019:34;15015:1;15007:6;15003:14;14996:58;15088:14;15083:2;15075:6;15071:15;15064:39;14879:231;:::o;15116:366::-;15258:3;15279:67;15343:2;15338:3;15279:67;:::i;:::-;15272:74;;15355:93;15444:3;15355:93;:::i;:::-;15473:2;15468:3;15464:12;15457:19;;15116:366;;;:::o;15488:419::-;15654:4;15692:2;15681:9;15677:18;15669:26;;15741:9;15735:4;15731:20;15727:1;15716:9;15712:17;15705:47;15769:131;15895:4;15769:131;:::i;:::-;15761:139;;15488:419;;;:::o;15913:175::-;16053:27;16049:1;16041:6;16037:14;16030:51;15913:175;:::o;16094:366::-;16236:3;16257:67;16321:2;16316:3;16257:67;:::i;:::-;16250:74;;16333:93;16422:3;16333:93;:::i;:::-;16451:2;16446:3;16442:12;16435:19;;16094:366;;;:::o;16466:419::-;16632:4;16670:2;16659:9;16655:18;16647:26;;16719:9;16713:4;16709:20;16705:1;16694:9;16690:17;16683:47;16747:131;16873:4;16747:131;:::i;:::-;16739:139;;16466:419;;;:::o;16891:182::-;17031:34;17027:1;17019:6;17015:14;17008:58;16891:182;:::o;17079:366::-;17221:3;17242:67;17306:2;17301:3;17242:67;:::i;:::-;17235:74;;17318:93;17407:3;17318:93;:::i;:::-;17436:2;17431:3;17427:12;17420:19;;17079:366;;;:::o;17451:419::-;17617:4;17655:2;17644:9;17640:18;17632:26;;17704:9;17698:4;17694:20;17690:1;17679:9;17675:17;17668:47;17732:131;17858:4;17732:131;:::i;:::-;17724:139;;17451:419;;;:::o;17876:166::-;18016:18;18012:1;18004:6;18000:14;17993:42;17876:166;:::o;18048:366::-;18190:3;18211:67;18275:2;18270:3;18211:67;:::i;:::-;18204:74;;18287:93;18376:3;18287:93;:::i;:::-;18405:2;18400:3;18396:12;18389:19;;18048:366;;;:::o;18420:419::-;18586:4;18624:2;18613:9;18609:18;18601:26;;18673:9;18667:4;18663:20;18659:1;18648:9;18644:17;18637:47;18701:131;18827:4;18701:131;:::i;:::-;18693:139;;18420:419;;;:::o;18845:176::-;18985:28;18981:1;18973:6;18969:14;18962:52;18845:176;:::o;19027:366::-;19169:3;19190:67;19254:2;19249:3;19190:67;:::i;:::-;19183:74;;19266:93;19355:3;19266:93;:::i;:::-;19384:2;19379:3;19375:12;19368:19;;19027:366;;;:::o;19399:419::-;19565:4;19603:2;19592:9;19588:18;19580:26;;19652:9;19646:4;19642:20;19638:1;19627:9;19623:17;19616:47;19680:131;19806:4;19680:131;:::i;:::-;19672:139;;19399:419;;;:::o;19824:176::-;19964:28;19960:1;19952:6;19948:14;19941:52;19824:176;:::o;20006:366::-;20148:3;20169:67;20233:2;20228:3;20169:67;:::i;:::-;20162:74;;20245:93;20334:3;20245:93;:::i;:::-;20363:2;20358:3;20354:12;20347:19;;20006:366;;;:::o;20378:419::-;20544:4;20582:2;20571:9;20567:18;20559:26;;20631:9;20625:4;20621:20;20617:1;20606:9;20602:17;20595:47;20659:131;20785:4;20659:131;:::i;:::-;20651:139;;20378:419;;;:::o;20803:141::-;20852:4;20875:3;20867:11;;20898:3;20895:1;20888:14;20932:4;20929:1;20919:18;20911:26;;20803:141;;;:::o;20974:802::-;21059:3;21096:5;21090:12;21125:36;21151:9;21125:36;:::i;:::-;21177:71;21241:6;21236:3;21177:71;:::i;:::-;21170:78;;21279:1;21268:9;21264:17;21295:1;21290:135;;;;21439:1;21434:336;;;;21257:513;;21290:135;21374:4;21370:9;21359;21355:25;21350:3;21343:38;21410:4;21405:3;21401:14;21394:21;;21290:135;;21434:336;21501:38;21533:5;21501:38;:::i;:::-;21561:1;21575:154;21589:6;21586:1;21583:13;21575:154;;;21663:7;21657:14;21653:1;21648:3;21644:11;21637:35;21713:1;21704:7;21700:15;21689:26;;21611:4;21608:1;21604:12;21599:17;;21575:154;;;21758:1;21753:3;21749:11;21742:18;;21441:329;;21257:513;;21063:713;;20974:802;;;;:::o;21782:508::-;21940:4;21978:2;21967:9;21963:18;21955:26;;22027:9;22021:4;22017:20;22013:1;22002:9;21998:17;21991:47;22055:75;22125:4;22116:6;22055:75;:::i;:::-;22047:83;;22177:9;22171:4;22167:20;22162:2;22151:9;22147:18;22140:48;22205:78;22278:4;22269:6;22205:78;:::i;:::-;22197:86;;21782:508;;;;;:::o;22296:228::-;22436:34;22432:1;22424:6;22420:14;22413:58;22505:11;22500:2;22492:6;22488:15;22481:36;22296:228;:::o;22530:366::-;22672:3;22693:67;22757:2;22752:3;22693:67;:::i;:::-;22686:74;;22769:93;22858:3;22769:93;:::i;:::-;22887:2;22882:3;22878:12;22871:19;;22530:366;;;:::o;22902:419::-;23068:4;23106:2;23095:9;23091:18;23083:26;;23155:9;23149:4;23145:20;23141:1;23130:9;23126:17;23119:47;23183:131;23309:4;23183:131;:::i;:::-;23175:139;;22902:419;;;:::o;23327:229::-;23467:34;23463:1;23455:6;23451:14;23444:58;23536:12;23531:2;23523:6;23519:15;23512:37;23327:229;:::o;23562:366::-;23704:3;23725:67;23789:2;23784:3;23725:67;:::i;:::-;23718:74;;23801:93;23890:3;23801:93;:::i;:::-;23919:2;23914:3;23910:12;23903:19;;23562:366;;;:::o;23934:419::-;24100:4;24138:2;24127:9;24123:18;24115:26;;24187:9;24181:4;24177:20;24173:1;24162:9;24158:17;24151:47;24215:131;24341:4;24215:131;:::i;:::-;24207:139;;23934:419;;;:::o;24359:246::-;24499:34;24495:1;24487:6;24483:14;24476:58;24568:29;24563:2;24555:6;24551:15;24544:54;24359:246;:::o;24611:366::-;24753:3;24774:67;24838:2;24833:3;24774:67;:::i;:::-;24767:74;;24850:93;24939:3;24850:93;:::i;:::-;24968:2;24963:3;24959:12;24952:19;;24611:366;;;:::o;24983:419::-;25149:4;25187:2;25176:9;25172:18;25164:26;;25236:9;25230:4;25226:20;25222:1;25211:9;25207:17;25200:47;25264:131;25390:4;25264:131;:::i;:::-;25256:139;;24983:419;;;:::o;25408:180::-;25456:77;25453:1;25446:88;25553:4;25550:1;25543:15;25577:4;25574:1;25567:15;25594:305;25634:3;25653:20;25671:1;25653:20;:::i;:::-;25648:25;;25687:20;25705:1;25687:20;:::i;:::-;25682:25;;25841:1;25773:66;25769:74;25766:1;25763:81;25760:107;;;25847:18;;:::i;:::-;25760:107;25891:1;25888;25884:9;25877:16;;25594:305;;;;:::o;25905:249::-;26045:34;26041:1;26033:6;26029:14;26022:58;26114:32;26109:2;26101:6;26097:15;26090:57;25905:249;:::o;26160:366::-;26302:3;26323:67;26387:2;26382:3;26323:67;:::i;:::-;26316:74;;26399:93;26488:3;26399:93;:::i;:::-;26517:2;26512:3;26508:12;26501:19;;26160:366;;;:::o;26532:419::-;26698:4;26736:2;26725:9;26721:18;26713:26;;26785:9;26779:4;26775:20;26771:1;26760:9;26756:17;26749:47;26813:131;26939:4;26813:131;:::i;:::-;26805:139;;26532:419;;;:::o;26957:180::-;27005:77;27002:1;26995:88;27102:4;27099:1;27092:15;27126:4;27123:1;27116:15;27143:233;27182:3;27205:24;27223:5;27205:24;:::i;:::-;27196:33;;27251:66;27244:5;27241:77;27238:103;;27321:18;;:::i;:::-;27238:103;27368:1;27361:5;27357:13;27350:20;;27143:233;;;:::o;27382:298::-;27522:34;27518:1;27510:6;27506:14;27499:58;27591:34;27586:2;27578:6;27574:15;27567:59;27660:12;27655:2;27647:6;27643:15;27636:37;27382:298;:::o;27686:366::-;27828:3;27849:67;27913:2;27908:3;27849:67;:::i;:::-;27842:74;;27925:93;28014:3;27925:93;:::i;:::-;28043:2;28038:3;28034:12;28027:19;;27686:366;;;:::o;28058:419::-;28224:4;28262:2;28251:9;28247:18;28239:26;;28311:9;28305:4;28301:20;28297:1;28286:9;28282:17;28275:47;28339:131;28465:4;28339:131;:::i;:::-;28331:139;;28058:419;;;:::o;28483:234::-;28623:34;28619:1;28611:6;28607:14;28600:58;28692:17;28687:2;28679:6;28675:15;28668:42;28483:234;:::o;28723:366::-;28865:3;28886:67;28950:2;28945:3;28886:67;:::i;:::-;28879:74;;28962:93;29051:3;28962:93;:::i;:::-;29080:2;29075:3;29071:12;29064:19;;28723:366;;;:::o;29095:419::-;29261:4;29299:2;29288:9;29284:18;29276:26;;29348:9;29342:4;29338:20;29334:1;29323:9;29319:17;29312:47;29376:131;29502:4;29376:131;:::i;:::-;29368:139;;29095:419;;;:::o;29520:148::-;29622:11;29659:3;29644:18;;29520:148;;;;:::o;29674:377::-;29780:3;29808:39;29841:5;29808:39;:::i;:::-;29863:89;29945:6;29940:3;29863:89;:::i;:::-;29856:96;;29961:52;30006:6;30001:3;29994:4;29987:5;29983:16;29961:52;:::i;:::-;30038:6;30033:3;30029:16;30022:23;;29784:267;29674:377;;;;:::o;30057:435::-;30237:3;30259:95;30350:3;30341:6;30259:95;:::i;:::-;30252:102;;30371:95;30462:3;30453:6;30371:95;:::i;:::-;30364:102;;30483:3;30476:10;;30057:435;;;;;:::o;30498:225::-;30638:34;30634:1;30626:6;30622:14;30615:58;30707:8;30702:2;30694:6;30690:15;30683:33;30498:225;:::o;30729:366::-;30871:3;30892:67;30956:2;30951:3;30892:67;:::i;:::-;30885:74;;30968:93;31057:3;30968:93;:::i;:::-;31086:2;31081:3;31077:12;31070:19;;30729:366;;;:::o;31101:419::-;31267:4;31305:2;31294:9;31290:18;31282:26;;31354:9;31348:4;31344:20;31340:1;31329:9;31325:17;31318:47;31382:131;31508:4;31382:131;:::i;:::-;31374:139;;31101:419;;;:::o;31526:170::-;31666:22;31662:1;31654:6;31650:14;31643:46;31526:170;:::o;31702:366::-;31844:3;31865:67;31929:2;31924:3;31865:67;:::i;:::-;31858:74;;31941:93;32030:3;31941:93;:::i;:::-;32059:2;32054:3;32050:12;32043:19;;31702:366;;;:::o;32074:419::-;32240:4;32278:2;32267:9;32263:18;32255:26;;32327:9;32321:4;32317:20;32313:1;32302:9;32298:17;32291:47;32355:131;32481:4;32355:131;:::i;:::-;32347:139;;32074:419;;;:::o;32499:180::-;32639:32;32635:1;32627:6;32623:14;32616:56;32499:180;:::o;32685:366::-;32827:3;32848:67;32912:2;32907:3;32848:67;:::i;:::-;32841:74;;32924:93;33013:3;32924:93;:::i;:::-;33042:2;33037:3;33033:12;33026:19;;32685:366;;;:::o;33057:419::-;33223:4;33261:2;33250:9;33246:18;33238:26;;33310:9;33304:4;33300:20;33296:1;33285:9;33281:17;33274:47;33338:131;33464:4;33338:131;:::i;:::-;33330:139;;33057:419;;;:::o;33482:175::-;33622:27;33618:1;33610:6;33606:14;33599:51;33482:175;:::o;33663:366::-;33805:3;33826:67;33890:2;33885:3;33826:67;:::i;:::-;33819:74;;33902:93;33991:3;33902:93;:::i;:::-;34020:2;34015:3;34011:12;34004:19;;33663:366;;;:::o;34035:419::-;34201:4;34239:2;34228:9;34224:18;34216:26;;34288:9;34282:4;34278:20;34274:1;34263:9;34259:17;34252:47;34316:131;34442:4;34316:131;:::i;:::-;34308:139;;34035:419;;;:::o;34460:180::-;34508:77;34505:1;34498:88;34605:4;34602:1;34595:15;34629:4;34626:1;34619:15;34646:185;34686:1;34703:20;34721:1;34703:20;:::i;:::-;34698:25;;34737:20;34755:1;34737:20;:::i;:::-;34732:25;;34776:1;34766:35;;34781:18;;:::i;:::-;34766:35;34823:1;34820;34816:9;34811:14;;34646:185;;;;:::o;34837:191::-;34877:4;34897:20;34915:1;34897:20;:::i;:::-;34892:25;;34931:20;34949:1;34931:20;:::i;:::-;34926:25;;34970:1;34967;34964:8;34961:34;;;34975:18;;:::i;:::-;34961:34;35020:1;35017;35013:9;35005:17;;34837:191;;;;:::o;35034:176::-;35066:1;35083:20;35101:1;35083:20;:::i;:::-;35078:25;;35117:20;35135:1;35117:20;:::i;:::-;35112:25;;35156:1;35146:35;;35161:18;;:::i;:::-;35146:35;35202:1;35199;35195:9;35190:14;;35034:176;;;;:::o;35216:237::-;35356:34;35352:1;35344:6;35340:14;35333:58;35425:20;35420:2;35412:6;35408:15;35401:45;35216:237;:::o;35459:366::-;35601:3;35622:67;35686:2;35681:3;35622:67;:::i;:::-;35615:74;;35698:93;35787:3;35698:93;:::i;:::-;35816:2;35811:3;35807:12;35800:19;;35459:366;;;:::o;35831:419::-;35997:4;36035:2;36024:9;36020:18;36012:26;;36084:9;36078:4;36074:20;36070:1;36059:9;36055:17;36048:47;36112:131;36238:4;36112:131;:::i;:::-;36104:139;;35831:419;;;:::o;36256:182::-;36396:34;36392:1;36384:6;36380:14;36373:58;36256:182;:::o;36444:366::-;36586:3;36607:67;36671:2;36666:3;36607:67;:::i;:::-;36600:74;;36683:93;36772:3;36683:93;:::i;:::-;36801:2;36796:3;36792:12;36785:19;;36444:366;;;:::o;36816:419::-;36982:4;37020:2;37009:9;37005:18;36997:26;;37069:9;37063:4;37059:20;37055:1;37044:9;37040:17;37033:47;37097:131;37223:4;37097:131;:::i;:::-;37089:139;;36816:419;;;:::o;37241:178::-;37381:30;37377:1;37369:6;37365:14;37358:54;37241:178;:::o;37425:366::-;37567:3;37588:67;37652:2;37647:3;37588:67;:::i;:::-;37581:74;;37664:93;37753:3;37664:93;:::i;:::-;37782:2;37777:3;37773:12;37766:19;;37425:366;;;:::o;37797:419::-;37963:4;38001:2;37990:9;37986:18;37978:26;;38050:9;38044:4;38040:20;38036:1;38025:9;38021:17;38014:47;38078:131;38204:4;38078:131;:::i;:::-;38070:139;;37797:419;;;:::o;38222:98::-;38273:6;38307:5;38301:12;38291:22;;38222:98;;;:::o;38326:168::-;38409:11;38443:6;38438:3;38431:19;38483:4;38478:3;38474:14;38459:29;;38326:168;;;;:::o;38500:360::-;38586:3;38614:38;38646:5;38614:38;:::i;:::-;38668:70;38731:6;38726:3;38668:70;:::i;:::-;38661:77;;38747:52;38792:6;38787:3;38780:4;38773:5;38769:16;38747:52;:::i;:::-;38824:29;38846:6;38824:29;:::i;:::-;38819:3;38815:39;38808:46;;38590:270;38500:360;;;;:::o;38866:640::-;39061:4;39099:3;39088:9;39084:19;39076:27;;39113:71;39181:1;39170:9;39166:17;39157:6;39113:71;:::i;:::-;39194:72;39262:2;39251:9;39247:18;39238:6;39194:72;:::i;:::-;39276;39344:2;39333:9;39329:18;39320:6;39276:72;:::i;:::-;39395:9;39389:4;39385:20;39380:2;39369:9;39365:18;39358:48;39423:76;39494:4;39485:6;39423:76;:::i;:::-;39415:84;;38866:640;;;;;;;:::o;39512:141::-;39568:5;39599:6;39593:13;39584:22;;39615:32;39641:5;39615:32;:::i;:::-;39512:141;;;;:::o;39659:349::-;39728:6;39777:2;39765:9;39756:7;39752:23;39748:32;39745:119;;;39783:79;;:::i;:::-;39745:119;39903:1;39928:63;39983:7;39974:6;39963:9;39959:22;39928:63;:::i;:::-;39918:73;;39874:127;39659:349;;;;:::o

Swarm Source

ipfs://993bc00323b00b64a576f72bfeb57ff10686074c19996dcf58a7585f568255e7
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.