ETH Price: $3,226.83 (-1.56%)

Token

0xBTC Stats (0xStats)
 

Overview

Max Total Supply

10 0xStats

Holders

9

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
0x808.eth
Balance
1 0xStats
0x808A023B72260170c95d831F589A1ae0DCa1e43E
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:
MineableTokenStats

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-05
*/

// SPDX-License-Identifier: MIT

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);
}






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

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

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

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

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

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

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

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

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

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

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

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




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

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

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

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

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




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

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









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

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

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

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

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

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

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

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





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

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

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

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

        _;

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














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







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

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

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





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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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









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


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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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







/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}


/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

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

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

interface IERC918  {
   
   function mint(uint256 nonce) external returns (bool success);

   function getAdjustmentInterval() external view returns (uint);

   function getChallengeNumber() external view returns (bytes32);

   function getMiningDifficulty() external view returns (uint);

   function getMiningTarget() external view returns (uint);

   function getMiningReward() external view returns (uint);
   
   function tokensMinted() external view returns (uint);
   
   function lastRewardTo() external view returns (address);
   
   function rewardEra() external view returns (uint);
   
   function lastRewardEthBlockNumber() external view returns (uint);

   event Mint(address indexed from, uint rewardAmount, uint epochCount, bytes32 newChallengeNumber);
}



contract MineableTokenStats is ERC721Enumerable, ReentrancyGuard, Ownable {

    address public _mToken ;
    uint256 public _claimPrice = 2 * 10**16; 
    
   
   constructor(address mToken) ERC721("0xBTC Stats", "0xStats") Ownable() {
          _mToken = mToken;
        
    }
    
    

    function tokenURI(uint256 tokenId) override public view returns (string memory) {
        string[12] memory parts;
        parts[0] = '<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" viewBox="0 0 350 350"><style>.base { fill: white; font-family: serif; font-size: 16px; }</style><rect width="100%" height="100%" fill="black" /><text x="10" y="20" class="base">';

        parts[1] = '--- 0xBTC Stats --- ';

        parts[2] = '</text><text x="10" y="40" class="base">';

        parts[3] = 'Mined Supply: ';
        
        parts[4] = toString( IERC918(_mToken).tokensMinted() / 10**8  );
        
        parts[5] = '</text><text x="10" y="60" class="base">';

        parts[6] = 'Difficulty: ';
        
        parts[7] = toString( IERC918(_mToken).getMiningDifficulty() );
        
        parts[8] = '</text><text x="10" y="80" class="base">';

        parts[9] = 'Block Reward: ';
        
        parts[10] = toString( IERC918(_mToken).getMiningReward() / 10**8 );

        parts[11] = '</text></svg>';

        string memory output = string(abi.encodePacked(parts[0], parts[1], parts[2], parts[3], parts[4], parts[5], parts[6], parts[7], parts[8], parts[9], parts[10], parts[11]));
        
        string memory json = Base64.encode(bytes(string(abi.encodePacked('{"name": "0xBTC Stats #', toString(tokenId), '", "description": "Mineable token statistics.", "image": "data:image/svg+xml;base64,', Base64.encode(bytes(output)), '"}'))));
        output = string(abi.encodePacked('data:application/json;base64,', json));

        return output;
    }
    
    
    
    function claim(uint256 amount) public payable nonReentrant {
        require(amount <= 10);
        require(msg.value == amount * _claimPrice);
        
        require( totalSupply()+amount <= 420, 'total supply limit reached' );
        
        for(uint i=0;i<amount;i++){
           _safeMint(_msgSender(),  totalSupply() );
        }
        
        
    }
    
    
    function extractFunds() external onlyOwner {
        payable(owner()).transfer( address(this).balance  );
    } 
   
    
      function toString(uint256 value) internal pure returns (string memory) {
    // Inspired by OraclizeAPI's implementation - MIT license
    // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

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

    
}

/// [MIT License]
/// @title Base64
/// @notice Provides a function for encoding some bytes in base64
/// @author Brecht Devos <[email protected]>
library Base64 {
    bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    /// @notice Encodes some bytes to the base64 representation
    function encode(bytes memory data) internal pure returns (string memory) {
        uint256 len = data.length;
        if (len == 0) return "";

        // multiply by 4/3 rounded up
        uint256 encodedLen = 4 * ((len + 2) / 3);

        // Add some extra buffer at the end
        bytes memory result = new bytes(encodedLen + 32);

        bytes memory table = TABLE;

        assembly {
            let tablePtr := add(table, 1)
            let resultPtr := add(result, 32)

            for {
                let i := 0
            } lt(i, len) {

            } {
                i := add(i, 3)
                let input := and(mload(add(data, i)), 0xffffff)

                let out := mload(add(tablePtr, and(shr(18, input), 0x3F)))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF))
                out := shl(224, out)

                mstore(resultPtr, out)

                resultPtr := add(resultPtr, 4)
            }

            switch mod(len, 3)
            case 1 {
                mstore(sub(resultPtr, 2), shl(240, 0x3d3d))
            }
            case 2 {
                mstore(sub(resultPtr, 1), shl(248, 0x3d))
            }

            mstore(result, encodedLen)
        }

        return string(result);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"mToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_claimPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"extractFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405266470de4df820000600d553480156200001c57600080fd5b50604051620046a3380380620046a38339818101604052810190620000429190620002e7565b6040518060400160405280600b81526020017f30784254432053746174730000000000000000000000000000000000000000008152506040518060400160405280600781526020017f30785374617473000000000000000000000000000000000000000000000000008152508160009080519060200190620000c692919062000220565b508060019080519060200190620000df92919062000220565b5050506001600a819055506200010a620000fe6200015260201b60201c565b6200015a60201b60201c565b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050620003d1565b600033905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200022e906200034d565b90600052602060002090601f0160209004810192826200025257600085556200029e565b82601f106200026d57805160ff19168380011785556200029e565b828001600101855582156200029e579182015b828111156200029d57825182559160200191906001019062000280565b5b509050620002ad9190620002b1565b5090565b5b80821115620002cc576000816000905550600101620002b2565b5090565b600081519050620002e181620003b7565b92915050565b6000602082840312156200030057620002ff620003b2565b5b60006200031084828501620002d0565b91505092915050565b600062000326826200032d565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200036657607f821691505b602082108114156200037d576200037c62000383565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b620003c28162000319565b8114620003ce57600080fd5b50565b6142c280620003e16000396000f3fe6080604052600436106101405760003560e01c80636ec51af0116100b6578063b88d4fde1161006f578063b88d4fde14610461578063c87b56dd1461048a578063e721d87e146104c7578063e985e9c5146104f2578063f0c4c04e1461052f578063f2fde38b1461054657610140565b80636ec51af01461036357806370a082311461038e578063715018a6146103cb5780638da5cb5b146103e257806395d89b411461040d578063a22cb4651461043857610140565b806323b872dd1161010857806323b872dd1461023e5780632f745c5914610267578063379607f5146102a457806342842e0e146102c05780634f6ccce7146102e95780636352211e1461032657610140565b806301ffc9a71461014557806306fdde0314610182578063081812fc146101ad578063095ea7b3146101ea57806318160ddd14610213575b600080fd5b34801561015157600080fd5b5061016c60048036038101906101679190612d3d565b61056f565b604051610179919061335a565b60405180910390f35b34801561018e57600080fd5b506101976105e9565b6040516101a49190613375565b60405180910390f35b3480156101b957600080fd5b506101d460048036038101906101cf9190612d97565b61067b565b6040516101e191906132f3565b60405180910390f35b3480156101f657600080fd5b50610211600480360381019061020c9190612cfd565b610700565b005b34801561021f57600080fd5b50610228610818565b60405161023591906135f7565b60405180910390f35b34801561024a57600080fd5b5061026560048036038101906102609190612be7565b610825565b005b34801561027357600080fd5b5061028e60048036038101906102899190612cfd565b610885565b60405161029b91906135f7565b60405180910390f35b6102be60048036038101906102b99190612d97565b61092a565b005b3480156102cc57600080fd5b506102e760048036038101906102e29190612be7565b610a38565b005b3480156102f557600080fd5b50610310600480360381019061030b9190612d97565b610a58565b60405161031d91906135f7565b60405180910390f35b34801561033257600080fd5b5061034d60048036038101906103489190612d97565b610ac9565b60405161035a91906132f3565b60405180910390f35b34801561036f57600080fd5b50610378610b7b565b60405161038591906135f7565b60405180910390f35b34801561039a57600080fd5b506103b560048036038101906103b09190612b7a565b610b81565b6040516103c291906135f7565b60405180910390f35b3480156103d757600080fd5b506103e0610c39565b005b3480156103ee57600080fd5b506103f7610cc1565b60405161040491906132f3565b60405180910390f35b34801561041957600080fd5b50610422610ceb565b60405161042f9190613375565b60405180910390f35b34801561044457600080fd5b5061045f600480360381019061045a9190612cbd565b610d7d565b005b34801561046d57600080fd5b5061048860048036038101906104839190612c3a565b610efe565b005b34801561049657600080fd5b506104b160048036038101906104ac9190612d97565b610f60565b6040516104be9190613375565b60405180910390f35b3480156104d357600080fd5b506104dc611608565b6040516104e991906132f3565b60405180910390f35b3480156104fe57600080fd5b5061051960048036038101906105149190612ba7565b61162e565b604051610526919061335a565b60405180910390f35b34801561053b57600080fd5b506105446116c2565b005b34801561055257600080fd5b5061056d60048036038101906105689190612b7a565b61178e565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105e257506105e182611886565b5b9050919050565b6060600080546105f890613876565b80601f016020809104026020016040519081016040528092919081815260200182805461062490613876565b80156106715780601f1061064657610100808354040283529160200191610671565b820191906000526020600020905b81548152906001019060200180831161065457829003601f168201915b5050505050905090565b600061068682611968565b6106c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106bc90613517565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061070b82610ac9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561077c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077390613577565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661079b6119d4565b73ffffffffffffffffffffffffffffffffffffffff1614806107ca57506107c9816107c46119d4565b61162e565b5b610809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080090613497565b60405180910390fd5b61081383836119dc565b505050565b6000600880549050905090565b6108366108306119d4565b82611a95565b610875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086c90613597565b60405180910390fd5b610880838383611b73565b505050565b600061089083610b81565b82106108d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c890613397565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6002600a541415610970576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610967906135d7565b60405180910390fd5b6002600a81905550600a81111561098657600080fd5b600d54816109949190613732565b341461099f57600080fd5b6101a4816109ab610818565b6109b591906136ab565b11156109f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ed90613417565b60405180910390fd5b60005b81811015610a2c57610a19610a0c6119d4565b610a14610818565b611dcf565b8080610a24906138d9565b9150506109f9565b506001600a8190555050565b610a5383838360405180602001604052806000815250610efe565b505050565b6000610a62610818565b8210610aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9a906135b7565b60405180910390fd5b60088281548110610ab757610ab6613a0f565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b69906134d7565b60405180910390fd5b80915050919050565b600d5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be9906134b7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c416119d4565b73ffffffffffffffffffffffffffffffffffffffff16610c5f610cc1565b73ffffffffffffffffffffffffffffffffffffffff1614610cb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cac90613537565b60405180910390fd5b610cbf6000611ded565b565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610cfa90613876565b80601f0160208091040260200160405190810160405280929190818152602001828054610d2690613876565b8015610d735780601f10610d4857610100808354040283529160200191610d73565b820191906000526020600020905b815481529060010190602001808311610d5657829003601f168201915b5050505050905090565b610d856119d4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dea90613457565b60405180910390fd5b8060056000610e006119d4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610ead6119d4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610ef2919061335a565b60405180910390a35050565b610f0f610f096119d4565b83611a95565b610f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4590613597565b60405180910390fd5b610f5a84848484611eb3565b50505050565b6060610f6a612a64565b60405180610120016040528060fd815260200161416860fd9139816000600c8110610f9857610f97613a0f565b5b60200201819052506040518060400160405280601481526020017f2d2d2d203078425443205374617473202d2d2d20000000000000000000000000815250816001600c8110610fea57610fe9613a0f565b5b602002018190525060405180606001604052806028815260200161426560289139816002600c811061101f5761101e613a0f565b5b60200201819052506040518060400160405280600e81526020017f4d696e656420537570706c793a20000000000000000000000000000000000000815250816003600c811061107157611070613a0f565b5b60200201819052506111306305f5e100600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636de9f32b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156110e957600080fd5b505afa1580156110fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111219190612dc4565b61112b9190613701565b611f0f565b816004600c811061114457611143613a0f565b5b60200201819052506040518060600160405280602881526020016140d860289139816005600c811061117957611178613a0f565b5b60200201819052506040518060400160405280600c81526020017f446966666963756c74793a200000000000000000000000000000000000000000815250816006600c81106111cb576111ca613a0f565b5b602002018190525061127b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166317da485f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561123e57600080fd5b505afa158015611252573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112769190612dc4565b611f0f565b816007600c811061128f5761128e613a0f565b5b602002018190525060405180606001604052806028815260200161410060289139816008600c81106112c4576112c3613a0f565b5b60200201819052506040518060400160405280600e81526020017f426c6f636b205265776172643a20000000000000000000000000000000000000815250816009600c811061131657611315613a0f565b5b60200201819052506113d56305f5e100600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663490203a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561138e57600080fd5b505afa1580156113a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c69190612dc4565b6113d09190613701565b611f0f565b81600a600c81106113e9576113e8613a0f565b5b60200201819052506040518060400160405280600d81526020017f3c2f746578743e3c2f7376673e0000000000000000000000000000000000000081525081600b600c811061143b5761143a613a0f565b5b60200201819052506000816000600c811061145957611458613a0f565b5b6020020151826001600c811061147257611471613a0f565b5b6020020151836002600c811061148b5761148a613a0f565b5b6020020151846003600c81106114a4576114a3613a0f565b5b6020020151856004600c81106114bd576114bc613a0f565b5b6020020151866005600c81106114d6576114d5613a0f565b5b6020020151876006600c81106114ef576114ee613a0f565b5b6020020151886007600c811061150857611507613a0f565b5b6020020151896008600c811061152157611520613a0f565b5b60200201518a6009600c811061153a57611539613a0f565b5b60200201518b600a600c811061155357611552613a0f565b5b60200201518c600b600c811061156c5761156b613a0f565b5b602002015160405160200161158c9c9b9a999897969594939291906131e6565b604051602081830303815290604052905060006115d96115ab86611f0f565b6115b484612070565b6040516020016115c59291906132ae565b604051602081830303815290604052612070565b9050806040516020016115ec919061328c565b6040516020818303038152906040529150819350505050919050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6116ca6119d4565b73ffffffffffffffffffffffffffffffffffffffff166116e8610cc1565b73ffffffffffffffffffffffffffffffffffffffff161461173e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173590613537565b60405180910390fd5b611746610cc1565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561178b573d6000803e3d6000fd5b50565b6117966119d4565b73ffffffffffffffffffffffffffffffffffffffff166117b4610cc1565b73ffffffffffffffffffffffffffffffffffffffff161461180a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180190613537565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561187a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611871906133d7565b60405180910390fd5b61188381611ded565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061195157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611961575061196082612208565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611a4f83610ac9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611aa082611968565b611adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad690613477565b60405180910390fd5b6000611aea83610ac9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b5957508373ffffffffffffffffffffffffffffffffffffffff16611b418461067b565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b6a5750611b69818561162e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611b9382610ac9565b73ffffffffffffffffffffffffffffffffffffffff1614611be9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be090613557565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5090613437565b60405180910390fd5b611c64838383612272565b611c6f6000826119dc565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cbf919061378c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d1691906136ab565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611de9828260405180602001604052806000815250612386565b5050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611ebe848484611b73565b611eca848484846123e1565b611f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f00906133b7565b60405180910390fd5b50505050565b60606000821415611f57576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061206b565b600082905060005b60008214611f89578080611f72906138d9565b915050600a82611f829190613701565b9150611f5f565b60008167ffffffffffffffff811115611fa557611fa4613a3e565b5b6040519080825280601f01601f191660200182016040528015611fd75781602001600182028036833780820191505090505b5090505b6000851461206457600182611ff0919061378c565b9150600a85611fff9190613922565b603061200b91906136ab565b60f81b81838151811061202157612020613a0f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561205d9190613701565b9450611fdb565b8093505050505b919050565b606060008251905060008114156120995760405180602001604052806000815250915050612203565b600060036002836120aa91906136ab565b6120b49190613701565b60046120c09190613732565b905060006020826120d191906136ab565b67ffffffffffffffff8111156120ea576120e9613a3e565b5b6040519080825280601f01601f19166020018201604052801561211c5781602001600182028036833780820191505090505b5090506000604051806060016040528060408152602001614128604091399050600181016020830160005b868110156121c05760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b90508084526004840193505050612147565b5060038606600181146121da57600281146121ea576121f5565b613d3d60f01b60028303526121f5565b603d60f81b60018303525b508484525050819450505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61227d838383612578565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122c0576122bb8161257d565b6122ff565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146122fe576122fd83826125c6565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123425761233d81612733565b612381565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146123805761237f8282612804565b5b5b505050565b6123908383612883565b61239d60008484846123e1565b6123dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d3906133b7565b60405180910390fd5b505050565b60006124028473ffffffffffffffffffffffffffffffffffffffff16612a51565b1561256b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261242b6119d4565b8786866040518563ffffffff1660e01b815260040161244d949392919061330e565b602060405180830381600087803b15801561246757600080fd5b505af192505050801561249857506040513d601f19601f820116820180604052508101906124959190612d6a565b60015b61251b573d80600081146124c8576040519150601f19603f3d011682016040523d82523d6000602084013e6124cd565b606091505b50600081511415612513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250a906133b7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612570565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016125d384610b81565b6125dd919061378c565b90506000600760008481526020019081526020016000205490508181146126c2576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612747919061378c565b905060006009600084815260200190815260200160002054905060006008838154811061277757612776613a0f565b5b90600052602060002001549050806008838154811061279957612798613a0f565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806127e8576127e76139e0565b5b6001900381819060005260206000200160009055905550505050565b600061280f83610b81565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ea906134f7565b60405180910390fd5b6128fc81611968565b1561293c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612933906133f7565b60405180910390fd5b61294860008383612272565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461299891906136ab565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b604051806101800160405280600c905b6060815260200190600190039081612a745790505090565b6000612a9f612a9a84613637565b613612565b905082815260208101848484011115612abb57612aba613a72565b5b612ac6848285613834565b509392505050565b600081359050612add8161407b565b92915050565b600081359050612af281614092565b92915050565b600081359050612b07816140a9565b92915050565b600081519050612b1c816140a9565b92915050565b600082601f830112612b3757612b36613a6d565b5b8135612b47848260208601612a8c565b91505092915050565b600081359050612b5f816140c0565b92915050565b600081519050612b74816140c0565b92915050565b600060208284031215612b9057612b8f613a7c565b5b6000612b9e84828501612ace565b91505092915050565b60008060408385031215612bbe57612bbd613a7c565b5b6000612bcc85828601612ace565b9250506020612bdd85828601612ace565b9150509250929050565b600080600060608486031215612c0057612bff613a7c565b5b6000612c0e86828701612ace565b9350506020612c1f86828701612ace565b9250506040612c3086828701612b50565b9150509250925092565b60008060008060808587031215612c5457612c53613a7c565b5b6000612c6287828801612ace565b9450506020612c7387828801612ace565b9350506040612c8487828801612b50565b925050606085013567ffffffffffffffff811115612ca557612ca4613a77565b5b612cb187828801612b22565b91505092959194509250565b60008060408385031215612cd457612cd3613a7c565b5b6000612ce285828601612ace565b9250506020612cf385828601612ae3565b9150509250929050565b60008060408385031215612d1457612d13613a7c565b5b6000612d2285828601612ace565b9250506020612d3385828601612b50565b9150509250929050565b600060208284031215612d5357612d52613a7c565b5b6000612d6184828501612af8565b91505092915050565b600060208284031215612d8057612d7f613a7c565b5b6000612d8e84828501612b0d565b91505092915050565b600060208284031215612dad57612dac613a7c565b5b6000612dbb84828501612b50565b91505092915050565b600060208284031215612dda57612dd9613a7c565b5b6000612de884828501612b65565b91505092915050565b612dfa816137c0565b82525050565b612e09816137d2565b82525050565b6000612e1a82613668565b612e24818561367e565b9350612e34818560208601613843565b612e3d81613a81565b840191505092915050565b6000612e5382613673565b612e5d818561368f565b9350612e6d818560208601613843565b612e7681613a81565b840191505092915050565b6000612e8c82613673565b612e9681856136a0565b9350612ea6818560208601613843565b80840191505092915050565b6000612ebf602b8361368f565b9150612eca82613a92565b604082019050919050565b6000612ee260328361368f565b9150612eed82613ae1565b604082019050919050565b6000612f0560268361368f565b9150612f1082613b30565b604082019050919050565b6000612f28601c8361368f565b9150612f3382613b7f565b602082019050919050565b6000612f4b601a8361368f565b9150612f5682613ba8565b602082019050919050565b6000612f6e60248361368f565b9150612f7982613bd1565b604082019050919050565b6000612f9160198361368f565b9150612f9c82613c20565b602082019050919050565b6000612fb4602c8361368f565b9150612fbf82613c49565b604082019050919050565b6000612fd760388361368f565b9150612fe282613c98565b604082019050919050565b6000612ffa602a8361368f565b915061300582613ce7565b604082019050919050565b600061301d60298361368f565b915061302882613d36565b604082019050919050565b60006130406002836136a0565b915061304b82613d85565b600282019050919050565b600061306360208361368f565b915061306e82613dae565b602082019050919050565b60006130866054836136a0565b915061309182613dd7565b605482019050919050565b60006130a9602c8361368f565b91506130b482613e4c565b604082019050919050565b60006130cc60208361368f565b91506130d782613e9b565b602082019050919050565b60006130ef60298361368f565b91506130fa82613ec4565b604082019050919050565b600061311260218361368f565b915061311d82613f13565b604082019050919050565b6000613135601d836136a0565b915061314082613f62565b601d82019050919050565b600061315860318361368f565b915061316382613f8b565b604082019050919050565b600061317b6017836136a0565b915061318682613fda565b601782019050919050565b600061319e602c8361368f565b91506131a982614003565b604082019050919050565b60006131c1601f8361368f565b91506131cc82614052565b602082019050919050565b6131e08161382a565b82525050565b60006131f2828f612e81565b91506131fe828e612e81565b915061320a828d612e81565b9150613216828c612e81565b9150613222828b612e81565b915061322e828a612e81565b915061323a8289612e81565b91506132468288612e81565b91506132528287612e81565b915061325e8286612e81565b915061326a8285612e81565b91506132768284612e81565b91508190509d9c50505050505050505050505050565b600061329782613128565b91506132a38284612e81565b915081905092915050565b60006132b98261316e565b91506132c58285612e81565b91506132d082613079565b91506132dc8284612e81565b91506132e782613033565b91508190509392505050565b60006020820190506133086000830184612df1565b92915050565b60006080820190506133236000830187612df1565b6133306020830186612df1565b61333d60408301856131d7565b818103606083015261334f8184612e0f565b905095945050505050565b600060208201905061336f6000830184612e00565b92915050565b6000602082019050818103600083015261338f8184612e48565b905092915050565b600060208201905081810360008301526133b081612eb2565b9050919050565b600060208201905081810360008301526133d081612ed5565b9050919050565b600060208201905081810360008301526133f081612ef8565b9050919050565b6000602082019050818103600083015261341081612f1b565b9050919050565b6000602082019050818103600083015261343081612f3e565b9050919050565b6000602082019050818103600083015261345081612f61565b9050919050565b6000602082019050818103600083015261347081612f84565b9050919050565b6000602082019050818103600083015261349081612fa7565b9050919050565b600060208201905081810360008301526134b081612fca565b9050919050565b600060208201905081810360008301526134d081612fed565b9050919050565b600060208201905081810360008301526134f081613010565b9050919050565b6000602082019050818103600083015261351081613056565b9050919050565b600060208201905081810360008301526135308161309c565b9050919050565b60006020820190508181036000830152613550816130bf565b9050919050565b60006020820190508181036000830152613570816130e2565b9050919050565b6000602082019050818103600083015261359081613105565b9050919050565b600060208201905081810360008301526135b08161314b565b9050919050565b600060208201905081810360008301526135d081613191565b9050919050565b600060208201905081810360008301526135f0816131b4565b9050919050565b600060208201905061360c60008301846131d7565b92915050565b600061361c61362d565b905061362882826138a8565b919050565b6000604051905090565b600067ffffffffffffffff82111561365257613651613a3e565b5b61365b82613a81565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006136b68261382a565b91506136c18361382a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136f6576136f5613953565b5b828201905092915050565b600061370c8261382a565b91506137178361382a565b92508261372757613726613982565b5b828204905092915050565b600061373d8261382a565b91506137488361382a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561378157613780613953565b5b828202905092915050565b60006137978261382a565b91506137a28361382a565b9250828210156137b5576137b4613953565b5b828203905092915050565b60006137cb8261380a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613861578082015181840152602081019050613846565b83811115613870576000848401525b50505050565b6000600282049050600182168061388e57607f821691505b602082108114156138a2576138a16139b1565b5b50919050565b6138b182613a81565b810181811067ffffffffffffffff821117156138d0576138cf613a3e565b5b80604052505050565b60006138e48261382a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561391757613916613953565b5b600182019050919050565b600061392d8261382a565b91506139388361382a565b92508261394857613947613982565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f746f74616c20737570706c79206c696d69742072656163686564000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f222c20226465736372697074696f6e223a20224d696e6561626c6520746f6b6560008201527f6e20737461746973746963732e222c2022696d616765223a2022646174613a6960208201527f6d6167652f7376672b786d6c3b6261736536342c000000000000000000000000604082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f7b226e616d65223a202230784254432053746174732023000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b614084816137c0565b811461408f57600080fd5b50565b61409b816137d2565b81146140a657600080fd5b50565b6140b2816137de565b81146140bd57600080fd5b50565b6140c98161382a565b81146140d457600080fd5b5056fe3c2f746578743e3c7465787420783d2231302220793d2236302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d2238302220636c6173733d2262617365223e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302033353020333530223e3c7374796c653e2e62617365207b2066696c6c3a2077686974653b20666f6e742d66616d696c793a2073657269663b20666f6e742d73697a653a20313670783b207d3c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d22626c61636b22202f3e3c7465787420783d2231302220793d2232302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d2234302220636c6173733d2262617365223ea2646970667358221220f4edcf1ee01ebf69d7caec07ce99638606bf8f0d3a0c973f4b07e89fc8d37cf264736f6c63430008070033000000000000000000000000b6ed7644c69416d67b522e20bc294a9a9b405b31

Deployed Bytecode

0x6080604052600436106101405760003560e01c80636ec51af0116100b6578063b88d4fde1161006f578063b88d4fde14610461578063c87b56dd1461048a578063e721d87e146104c7578063e985e9c5146104f2578063f0c4c04e1461052f578063f2fde38b1461054657610140565b80636ec51af01461036357806370a082311461038e578063715018a6146103cb5780638da5cb5b146103e257806395d89b411461040d578063a22cb4651461043857610140565b806323b872dd1161010857806323b872dd1461023e5780632f745c5914610267578063379607f5146102a457806342842e0e146102c05780634f6ccce7146102e95780636352211e1461032657610140565b806301ffc9a71461014557806306fdde0314610182578063081812fc146101ad578063095ea7b3146101ea57806318160ddd14610213575b600080fd5b34801561015157600080fd5b5061016c60048036038101906101679190612d3d565b61056f565b604051610179919061335a565b60405180910390f35b34801561018e57600080fd5b506101976105e9565b6040516101a49190613375565b60405180910390f35b3480156101b957600080fd5b506101d460048036038101906101cf9190612d97565b61067b565b6040516101e191906132f3565b60405180910390f35b3480156101f657600080fd5b50610211600480360381019061020c9190612cfd565b610700565b005b34801561021f57600080fd5b50610228610818565b60405161023591906135f7565b60405180910390f35b34801561024a57600080fd5b5061026560048036038101906102609190612be7565b610825565b005b34801561027357600080fd5b5061028e60048036038101906102899190612cfd565b610885565b60405161029b91906135f7565b60405180910390f35b6102be60048036038101906102b99190612d97565b61092a565b005b3480156102cc57600080fd5b506102e760048036038101906102e29190612be7565b610a38565b005b3480156102f557600080fd5b50610310600480360381019061030b9190612d97565b610a58565b60405161031d91906135f7565b60405180910390f35b34801561033257600080fd5b5061034d60048036038101906103489190612d97565b610ac9565b60405161035a91906132f3565b60405180910390f35b34801561036f57600080fd5b50610378610b7b565b60405161038591906135f7565b60405180910390f35b34801561039a57600080fd5b506103b560048036038101906103b09190612b7a565b610b81565b6040516103c291906135f7565b60405180910390f35b3480156103d757600080fd5b506103e0610c39565b005b3480156103ee57600080fd5b506103f7610cc1565b60405161040491906132f3565b60405180910390f35b34801561041957600080fd5b50610422610ceb565b60405161042f9190613375565b60405180910390f35b34801561044457600080fd5b5061045f600480360381019061045a9190612cbd565b610d7d565b005b34801561046d57600080fd5b5061048860048036038101906104839190612c3a565b610efe565b005b34801561049657600080fd5b506104b160048036038101906104ac9190612d97565b610f60565b6040516104be9190613375565b60405180910390f35b3480156104d357600080fd5b506104dc611608565b6040516104e991906132f3565b60405180910390f35b3480156104fe57600080fd5b5061051960048036038101906105149190612ba7565b61162e565b604051610526919061335a565b60405180910390f35b34801561053b57600080fd5b506105446116c2565b005b34801561055257600080fd5b5061056d60048036038101906105689190612b7a565b61178e565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105e257506105e182611886565b5b9050919050565b6060600080546105f890613876565b80601f016020809104026020016040519081016040528092919081815260200182805461062490613876565b80156106715780601f1061064657610100808354040283529160200191610671565b820191906000526020600020905b81548152906001019060200180831161065457829003601f168201915b5050505050905090565b600061068682611968565b6106c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106bc90613517565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061070b82610ac9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561077c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077390613577565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661079b6119d4565b73ffffffffffffffffffffffffffffffffffffffff1614806107ca57506107c9816107c46119d4565b61162e565b5b610809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080090613497565b60405180910390fd5b61081383836119dc565b505050565b6000600880549050905090565b6108366108306119d4565b82611a95565b610875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086c90613597565b60405180910390fd5b610880838383611b73565b505050565b600061089083610b81565b82106108d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c890613397565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6002600a541415610970576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610967906135d7565b60405180910390fd5b6002600a81905550600a81111561098657600080fd5b600d54816109949190613732565b341461099f57600080fd5b6101a4816109ab610818565b6109b591906136ab565b11156109f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ed90613417565b60405180910390fd5b60005b81811015610a2c57610a19610a0c6119d4565b610a14610818565b611dcf565b8080610a24906138d9565b9150506109f9565b506001600a8190555050565b610a5383838360405180602001604052806000815250610efe565b505050565b6000610a62610818565b8210610aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9a906135b7565b60405180910390fd5b60088281548110610ab757610ab6613a0f565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b69906134d7565b60405180910390fd5b80915050919050565b600d5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be9906134b7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c416119d4565b73ffffffffffffffffffffffffffffffffffffffff16610c5f610cc1565b73ffffffffffffffffffffffffffffffffffffffff1614610cb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cac90613537565b60405180910390fd5b610cbf6000611ded565b565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610cfa90613876565b80601f0160208091040260200160405190810160405280929190818152602001828054610d2690613876565b8015610d735780601f10610d4857610100808354040283529160200191610d73565b820191906000526020600020905b815481529060010190602001808311610d5657829003601f168201915b5050505050905090565b610d856119d4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dea90613457565b60405180910390fd5b8060056000610e006119d4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610ead6119d4565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610ef2919061335a565b60405180910390a35050565b610f0f610f096119d4565b83611a95565b610f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4590613597565b60405180910390fd5b610f5a84848484611eb3565b50505050565b6060610f6a612a64565b60405180610120016040528060fd815260200161416860fd9139816000600c8110610f9857610f97613a0f565b5b60200201819052506040518060400160405280601481526020017f2d2d2d203078425443205374617473202d2d2d20000000000000000000000000815250816001600c8110610fea57610fe9613a0f565b5b602002018190525060405180606001604052806028815260200161426560289139816002600c811061101f5761101e613a0f565b5b60200201819052506040518060400160405280600e81526020017f4d696e656420537570706c793a20000000000000000000000000000000000000815250816003600c811061107157611070613a0f565b5b60200201819052506111306305f5e100600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636de9f32b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156110e957600080fd5b505afa1580156110fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111219190612dc4565b61112b9190613701565b611f0f565b816004600c811061114457611143613a0f565b5b60200201819052506040518060600160405280602881526020016140d860289139816005600c811061117957611178613a0f565b5b60200201819052506040518060400160405280600c81526020017f446966666963756c74793a200000000000000000000000000000000000000000815250816006600c81106111cb576111ca613a0f565b5b602002018190525061127b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166317da485f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561123e57600080fd5b505afa158015611252573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112769190612dc4565b611f0f565b816007600c811061128f5761128e613a0f565b5b602002018190525060405180606001604052806028815260200161410060289139816008600c81106112c4576112c3613a0f565b5b60200201819052506040518060400160405280600e81526020017f426c6f636b205265776172643a20000000000000000000000000000000000000815250816009600c811061131657611315613a0f565b5b60200201819052506113d56305f5e100600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663490203a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561138e57600080fd5b505afa1580156113a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c69190612dc4565b6113d09190613701565b611f0f565b81600a600c81106113e9576113e8613a0f565b5b60200201819052506040518060400160405280600d81526020017f3c2f746578743e3c2f7376673e0000000000000000000000000000000000000081525081600b600c811061143b5761143a613a0f565b5b60200201819052506000816000600c811061145957611458613a0f565b5b6020020151826001600c811061147257611471613a0f565b5b6020020151836002600c811061148b5761148a613a0f565b5b6020020151846003600c81106114a4576114a3613a0f565b5b6020020151856004600c81106114bd576114bc613a0f565b5b6020020151866005600c81106114d6576114d5613a0f565b5b6020020151876006600c81106114ef576114ee613a0f565b5b6020020151886007600c811061150857611507613a0f565b5b6020020151896008600c811061152157611520613a0f565b5b60200201518a6009600c811061153a57611539613a0f565b5b60200201518b600a600c811061155357611552613a0f565b5b60200201518c600b600c811061156c5761156b613a0f565b5b602002015160405160200161158c9c9b9a999897969594939291906131e6565b604051602081830303815290604052905060006115d96115ab86611f0f565b6115b484612070565b6040516020016115c59291906132ae565b604051602081830303815290604052612070565b9050806040516020016115ec919061328c565b6040516020818303038152906040529150819350505050919050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6116ca6119d4565b73ffffffffffffffffffffffffffffffffffffffff166116e8610cc1565b73ffffffffffffffffffffffffffffffffffffffff161461173e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173590613537565b60405180910390fd5b611746610cc1565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561178b573d6000803e3d6000fd5b50565b6117966119d4565b73ffffffffffffffffffffffffffffffffffffffff166117b4610cc1565b73ffffffffffffffffffffffffffffffffffffffff161461180a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180190613537565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561187a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611871906133d7565b60405180910390fd5b61188381611ded565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061195157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611961575061196082612208565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611a4f83610ac9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611aa082611968565b611adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad690613477565b60405180910390fd5b6000611aea83610ac9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b5957508373ffffffffffffffffffffffffffffffffffffffff16611b418461067b565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b6a5750611b69818561162e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611b9382610ac9565b73ffffffffffffffffffffffffffffffffffffffff1614611be9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be090613557565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5090613437565b60405180910390fd5b611c64838383612272565b611c6f6000826119dc565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cbf919061378c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d1691906136ab565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611de9828260405180602001604052806000815250612386565b5050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611ebe848484611b73565b611eca848484846123e1565b611f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f00906133b7565b60405180910390fd5b50505050565b60606000821415611f57576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061206b565b600082905060005b60008214611f89578080611f72906138d9565b915050600a82611f829190613701565b9150611f5f565b60008167ffffffffffffffff811115611fa557611fa4613a3e565b5b6040519080825280601f01601f191660200182016040528015611fd75781602001600182028036833780820191505090505b5090505b6000851461206457600182611ff0919061378c565b9150600a85611fff9190613922565b603061200b91906136ab565b60f81b81838151811061202157612020613a0f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561205d9190613701565b9450611fdb565b8093505050505b919050565b606060008251905060008114156120995760405180602001604052806000815250915050612203565b600060036002836120aa91906136ab565b6120b49190613701565b60046120c09190613732565b905060006020826120d191906136ab565b67ffffffffffffffff8111156120ea576120e9613a3e565b5b6040519080825280601f01601f19166020018201604052801561211c5781602001600182028036833780820191505090505b5090506000604051806060016040528060408152602001614128604091399050600181016020830160005b868110156121c05760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b90508084526004840193505050612147565b5060038606600181146121da57600281146121ea576121f5565b613d3d60f01b60028303526121f5565b603d60f81b60018303525b508484525050819450505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61227d838383612578565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122c0576122bb8161257d565b6122ff565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146122fe576122fd83826125c6565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123425761233d81612733565b612381565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146123805761237f8282612804565b5b5b505050565b6123908383612883565b61239d60008484846123e1565b6123dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d3906133b7565b60405180910390fd5b505050565b60006124028473ffffffffffffffffffffffffffffffffffffffff16612a51565b1561256b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261242b6119d4565b8786866040518563ffffffff1660e01b815260040161244d949392919061330e565b602060405180830381600087803b15801561246757600080fd5b505af192505050801561249857506040513d601f19601f820116820180604052508101906124959190612d6a565b60015b61251b573d80600081146124c8576040519150601f19603f3d011682016040523d82523d6000602084013e6124cd565b606091505b50600081511415612513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250a906133b7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612570565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016125d384610b81565b6125dd919061378c565b90506000600760008481526020019081526020016000205490508181146126c2576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612747919061378c565b905060006009600084815260200190815260200160002054905060006008838154811061277757612776613a0f565b5b90600052602060002001549050806008838154811061279957612798613a0f565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806127e8576127e76139e0565b5b6001900381819060005260206000200160009055905550505050565b600061280f83610b81565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ea906134f7565b60405180910390fd5b6128fc81611968565b1561293c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612933906133f7565b60405180910390fd5b61294860008383612272565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461299891906136ab565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b604051806101800160405280600c905b6060815260200190600190039081612a745790505090565b6000612a9f612a9a84613637565b613612565b905082815260208101848484011115612abb57612aba613a72565b5b612ac6848285613834565b509392505050565b600081359050612add8161407b565b92915050565b600081359050612af281614092565b92915050565b600081359050612b07816140a9565b92915050565b600081519050612b1c816140a9565b92915050565b600082601f830112612b3757612b36613a6d565b5b8135612b47848260208601612a8c565b91505092915050565b600081359050612b5f816140c0565b92915050565b600081519050612b74816140c0565b92915050565b600060208284031215612b9057612b8f613a7c565b5b6000612b9e84828501612ace565b91505092915050565b60008060408385031215612bbe57612bbd613a7c565b5b6000612bcc85828601612ace565b9250506020612bdd85828601612ace565b9150509250929050565b600080600060608486031215612c0057612bff613a7c565b5b6000612c0e86828701612ace565b9350506020612c1f86828701612ace565b9250506040612c3086828701612b50565b9150509250925092565b60008060008060808587031215612c5457612c53613a7c565b5b6000612c6287828801612ace565b9450506020612c7387828801612ace565b9350506040612c8487828801612b50565b925050606085013567ffffffffffffffff811115612ca557612ca4613a77565b5b612cb187828801612b22565b91505092959194509250565b60008060408385031215612cd457612cd3613a7c565b5b6000612ce285828601612ace565b9250506020612cf385828601612ae3565b9150509250929050565b60008060408385031215612d1457612d13613a7c565b5b6000612d2285828601612ace565b9250506020612d3385828601612b50565b9150509250929050565b600060208284031215612d5357612d52613a7c565b5b6000612d6184828501612af8565b91505092915050565b600060208284031215612d8057612d7f613a7c565b5b6000612d8e84828501612b0d565b91505092915050565b600060208284031215612dad57612dac613a7c565b5b6000612dbb84828501612b50565b91505092915050565b600060208284031215612dda57612dd9613a7c565b5b6000612de884828501612b65565b91505092915050565b612dfa816137c0565b82525050565b612e09816137d2565b82525050565b6000612e1a82613668565b612e24818561367e565b9350612e34818560208601613843565b612e3d81613a81565b840191505092915050565b6000612e5382613673565b612e5d818561368f565b9350612e6d818560208601613843565b612e7681613a81565b840191505092915050565b6000612e8c82613673565b612e9681856136a0565b9350612ea6818560208601613843565b80840191505092915050565b6000612ebf602b8361368f565b9150612eca82613a92565b604082019050919050565b6000612ee260328361368f565b9150612eed82613ae1565b604082019050919050565b6000612f0560268361368f565b9150612f1082613b30565b604082019050919050565b6000612f28601c8361368f565b9150612f3382613b7f565b602082019050919050565b6000612f4b601a8361368f565b9150612f5682613ba8565b602082019050919050565b6000612f6e60248361368f565b9150612f7982613bd1565b604082019050919050565b6000612f9160198361368f565b9150612f9c82613c20565b602082019050919050565b6000612fb4602c8361368f565b9150612fbf82613c49565b604082019050919050565b6000612fd760388361368f565b9150612fe282613c98565b604082019050919050565b6000612ffa602a8361368f565b915061300582613ce7565b604082019050919050565b600061301d60298361368f565b915061302882613d36565b604082019050919050565b60006130406002836136a0565b915061304b82613d85565b600282019050919050565b600061306360208361368f565b915061306e82613dae565b602082019050919050565b60006130866054836136a0565b915061309182613dd7565b605482019050919050565b60006130a9602c8361368f565b91506130b482613e4c565b604082019050919050565b60006130cc60208361368f565b91506130d782613e9b565b602082019050919050565b60006130ef60298361368f565b91506130fa82613ec4565b604082019050919050565b600061311260218361368f565b915061311d82613f13565b604082019050919050565b6000613135601d836136a0565b915061314082613f62565b601d82019050919050565b600061315860318361368f565b915061316382613f8b565b604082019050919050565b600061317b6017836136a0565b915061318682613fda565b601782019050919050565b600061319e602c8361368f565b91506131a982614003565b604082019050919050565b60006131c1601f8361368f565b91506131cc82614052565b602082019050919050565b6131e08161382a565b82525050565b60006131f2828f612e81565b91506131fe828e612e81565b915061320a828d612e81565b9150613216828c612e81565b9150613222828b612e81565b915061322e828a612e81565b915061323a8289612e81565b91506132468288612e81565b91506132528287612e81565b915061325e8286612e81565b915061326a8285612e81565b91506132768284612e81565b91508190509d9c50505050505050505050505050565b600061329782613128565b91506132a38284612e81565b915081905092915050565b60006132b98261316e565b91506132c58285612e81565b91506132d082613079565b91506132dc8284612e81565b91506132e782613033565b91508190509392505050565b60006020820190506133086000830184612df1565b92915050565b60006080820190506133236000830187612df1565b6133306020830186612df1565b61333d60408301856131d7565b818103606083015261334f8184612e0f565b905095945050505050565b600060208201905061336f6000830184612e00565b92915050565b6000602082019050818103600083015261338f8184612e48565b905092915050565b600060208201905081810360008301526133b081612eb2565b9050919050565b600060208201905081810360008301526133d081612ed5565b9050919050565b600060208201905081810360008301526133f081612ef8565b9050919050565b6000602082019050818103600083015261341081612f1b565b9050919050565b6000602082019050818103600083015261343081612f3e565b9050919050565b6000602082019050818103600083015261345081612f61565b9050919050565b6000602082019050818103600083015261347081612f84565b9050919050565b6000602082019050818103600083015261349081612fa7565b9050919050565b600060208201905081810360008301526134b081612fca565b9050919050565b600060208201905081810360008301526134d081612fed565b9050919050565b600060208201905081810360008301526134f081613010565b9050919050565b6000602082019050818103600083015261351081613056565b9050919050565b600060208201905081810360008301526135308161309c565b9050919050565b60006020820190508181036000830152613550816130bf565b9050919050565b60006020820190508181036000830152613570816130e2565b9050919050565b6000602082019050818103600083015261359081613105565b9050919050565b600060208201905081810360008301526135b08161314b565b9050919050565b600060208201905081810360008301526135d081613191565b9050919050565b600060208201905081810360008301526135f0816131b4565b9050919050565b600060208201905061360c60008301846131d7565b92915050565b600061361c61362d565b905061362882826138a8565b919050565b6000604051905090565b600067ffffffffffffffff82111561365257613651613a3e565b5b61365b82613a81565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006136b68261382a565b91506136c18361382a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136f6576136f5613953565b5b828201905092915050565b600061370c8261382a565b91506137178361382a565b92508261372757613726613982565b5b828204905092915050565b600061373d8261382a565b91506137488361382a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561378157613780613953565b5b828202905092915050565b60006137978261382a565b91506137a28361382a565b9250828210156137b5576137b4613953565b5b828203905092915050565b60006137cb8261380a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613861578082015181840152602081019050613846565b83811115613870576000848401525b50505050565b6000600282049050600182168061388e57607f821691505b602082108114156138a2576138a16139b1565b5b50919050565b6138b182613a81565b810181811067ffffffffffffffff821117156138d0576138cf613a3e565b5b80604052505050565b60006138e48261382a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561391757613916613953565b5b600182019050919050565b600061392d8261382a565b91506139388361382a565b92508261394857613947613982565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f746f74616c20737570706c79206c696d69742072656163686564000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f222c20226465736372697074696f6e223a20224d696e6561626c6520746f6b6560008201527f6e20737461746973746963732e222c2022696d616765223a2022646174613a6960208201527f6d6167652f7376672b786d6c3b6261736536342c000000000000000000000000604082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f7b226e616d65223a202230784254432053746174732023000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b614084816137c0565b811461408f57600080fd5b50565b61409b816137d2565b81146140a657600080fd5b50565b6140b2816137de565b81146140bd57600080fd5b50565b6140c98161382a565b81146140d457600080fd5b5056fe3c2f746578743e3c7465787420783d2231302220793d2236302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d2238302220636c6173733d2262617365223e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302033353020333530223e3c7374796c653e2e62617365207b2066696c6c3a2077686974653b20666f6e742d66616d696c793a2073657269663b20666f6e742d73697a653a20313670783b207d3c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d22626c61636b22202f3e3c7465787420783d2231302220793d2232302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d2234302220636c6173733d2262617365223ea2646970667358221220f4edcf1ee01ebf69d7caec07ce99638606bf8f0d3a0c973f4b07e89fc8d37cf264736f6c63430008070033

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

000000000000000000000000b6ed7644c69416d67b522e20bc294a9a9b405b31

-----Decoded View---------------
Arg [0] : mToken (address): 0xB6eD7644C69416d67B522e20bC294A9a9B405B31

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000b6ed7644c69416d67b522e20bc294a9a9b405b31


Deployed Bytecode Sourcemap

45299:3207:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38350:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25464:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27023:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26546:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38990:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27913:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38658:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47250:373;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28323:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39180:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25158:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45412:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24888:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9856:94;;;;;;;;;;;;;:::i;:::-;;9205:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25633:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27316:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28579:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45607:1619;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45382:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27682:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47641:113;;;;;;;;;;;;;:::i;:::-;;10105:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38350:224;38452:4;38491:35;38476:50;;;:11;:50;;;;:90;;;;38530:36;38554:11;38530:23;:36::i;:::-;38476:90;38469:97;;38350:224;;;:::o;25464:100::-;25518:13;25551:5;25544:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25464:100;:::o;27023:221::-;27099:7;27127:16;27135:7;27127;:16::i;:::-;27119:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27212:15;:24;27228:7;27212:24;;;;;;;;;;;;;;;;;;;;;27205:31;;27023:221;;;:::o;26546:411::-;26627:13;26643:23;26658:7;26643:14;:23::i;:::-;26627:39;;26691:5;26685:11;;:2;:11;;;;26677:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26785:5;26769:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26794:37;26811:5;26818:12;:10;:12::i;:::-;26794:16;:37::i;:::-;26769:62;26747:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;26928:21;26937:2;26941:7;26928:8;:21::i;:::-;26616:341;26546:411;;:::o;38990:113::-;39051:7;39078:10;:17;;;;39071:24;;38990:113;:::o;27913:339::-;28108:41;28127:12;:10;:12::i;:::-;28141:7;28108:18;:41::i;:::-;28100:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28216:28;28226:4;28232:2;28236:7;28216:9;:28::i;:::-;27913:339;;;:::o;38658:256::-;38755:7;38791:23;38808:5;38791:16;:23::i;:::-;38783:5;:31;38775:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38880:12;:19;38893:5;38880:19;;;;;;;;;;;;;;;:26;38900:5;38880:26;;;;;;;;;;;;38873:33;;38658:256;;;;:::o;47250:373::-;12144:1;12740:7;;:19;;12732:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;12144:1;12873:7;:18;;;;47338:2:::1;47328:6;:12;;47320:21;;;::::0;::::1;;47382:11;;47373:6;:20;;;;:::i;:::-;47360:9;:33;47352:42;;;::::0;::::1;;47448:3;47438:6;47424:13;:11;:13::i;:::-;:20;;;;:::i;:::-;:27;;47415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47508:6;47504:92;47519:6;47517:1;:8;47504:92;;;47544:40;47554:12;:10;:12::i;:::-;47569:13;:11;:13::i;:::-;47544:9;:40::i;:::-;47526:3;;;;;:::i;:::-;;;;47504:92;;;;12100:1:::0;13052:7;:22;;;;47250:373;:::o;28323:185::-;28461:39;28478:4;28484:2;28488:7;28461:39;;;;;;;;;;;;:16;:39::i;:::-;28323:185;;;:::o;39180:233::-;39255:7;39291:30;:28;:30::i;:::-;39283:5;:38;39275:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;39388:10;39399:5;39388:17;;;;;;;;:::i;:::-;;;;;;;;;;39381:24;;39180:233;;;:::o;25158:239::-;25230:7;25250:13;25266:7;:16;25274:7;25266:16;;;;;;;;;;;;;;;;;;;;;25250:32;;25318:1;25301:19;;:5;:19;;;;25293:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25384:5;25377:12;;;25158:239;;;:::o;45412:39::-;;;;:::o;24888:208::-;24960:7;25005:1;24988:19;;:5;:19;;;;24980:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25072:9;:16;25082:5;25072:16;;;;;;;;;;;;;;;;25065:23;;24888:208;;;:::o;9856:94::-;9436:12;:10;:12::i;:::-;9425:23;;:7;:5;:7::i;:::-;:23;;;9417:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9921:21:::1;9939:1;9921:9;:21::i;:::-;9856:94::o:0;9205:87::-;9251:7;9278:6;;;;;;;;;;;9271:13;;9205:87;:::o;25633:104::-;25689:13;25722:7;25715:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25633:104;:::o;27316:295::-;27431:12;:10;:12::i;:::-;27419:24;;:8;:24;;;;27411:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;27531:8;27486:18;:32;27505:12;:10;:12::i;:::-;27486:32;;;;;;;;;;;;;;;:42;27519:8;27486:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;27584:8;27555:48;;27570:12;:10;:12::i;:::-;27555:48;;;27594:8;27555:48;;;;;;:::i;:::-;;;;;;;;27316:295;;:::o;28579:328::-;28754:41;28773:12;:10;:12::i;:::-;28787:7;28754:18;:41::i;:::-;28746:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28860:39;28874:4;28880:2;28884:7;28893:5;28860:13;:39::i;:::-;28579:328;;;;:::o;45607:1619::-;45672:13;45698:23;;:::i;:::-;45732:266;;;;;;;;;;;;;;;;;:5;45738:1;45732:8;;;;;;;:::i;:::-;;;;;:266;;;;46011:33;;;;;;;;;;;;;;;;;:5;46017:1;46011:8;;;;;;;:::i;:::-;;;;;:33;;;;46057:53;;;;;;;;;;;;;;;;;:5;46063:1;46057:8;;;;;;;:::i;:::-;;;;;:53;;;;46123:27;;;;;;;;;;;;;;;;;:5;46129:1;46123:8;;;;;;;:::i;:::-;;;;;:27;;;;46182:52;46226:5;46200:7;;;;;;;;;;;46192:29;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;;;;:::i;:::-;46182:8;:52::i;:::-;46171:5;46177:1;46171:8;;;;;;;:::i;:::-;;;;;:63;;;;46255:53;;;;;;;;;;;;;;;;;:5;46261:1;46255:8;;;;;;;:::i;:::-;;;;;:53;;;;46321:25;;;;;;;;;;;;;;;;;:5;46327:1;46321:8;;;;;;;:::i;:::-;;;;;:25;;;;46378:50;46396:7;;;;;;;;;;;46388:36;;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46378:8;:50::i;:::-;46367:5;46373:1;46367:8;;;;;;;:::i;:::-;;;;;:61;;;;46449:53;;;;;;;;;;;;;;;;;:5;46455:1;46449:8;;;;;;;:::i;:::-;;;;;:53;;;;46515:27;;;;;;;;;;;;;;;;;:5;46521:1;46515:8;;;;;;;:::i;:::-;;;;;:27;;;;46575:54;46622:5;46593:7;;;;;;;;;;;46585:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;;;;:::i;:::-;46575:8;:54::i;:::-;46563:5;46569:2;46563:9;;;;;;;:::i;:::-;;;;;:66;;;;46642:27;;;;;;;;;;;;;;;;;:5;46648:2;46642:9;;;;;;;:::i;:::-;;;;;:27;;;;46682:20;46729:5;46735:1;46729:8;;;;;;;:::i;:::-;;;;;;46739:5;46745:1;46739:8;;;;;;;:::i;:::-;;;;;;46749:5;46755:1;46749:8;;;;;;;:::i;:::-;;;;;;46759:5;46765:1;46759:8;;;;;;;:::i;:::-;;;;;;46769:5;46775:1;46769:8;;;;;;;:::i;:::-;;;;;;46779:5;46785:1;46779:8;;;;;;;:::i;:::-;;;;;;46789:5;46795:1;46789:8;;;;;;;:::i;:::-;;;;;;46799:5;46805:1;46799:8;;;;;;;:::i;:::-;;;;;;46809:5;46815:1;46809:8;;;;;;;:::i;:::-;;;;;;46819:5;46825:1;46819:8;;;;;;;:::i;:::-;;;;;;46829:5;46835:2;46829:9;;;;;;;:::i;:::-;;;;;;46840:5;46846:2;46840:9;;;;;;;:::i;:::-;;;;;;46712:138;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46682:169;;46872:18;46893:216;46964:17;46973:7;46964:8;:17::i;:::-;47071:28;47091:6;47071:13;:28::i;:::-;46920:186;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46893:13;:216::i;:::-;46872:237;;47186:4;47136:55;;;;;;;;:::i;:::-;;;;;;;;;;;;;47120:72;;47212:6;47205:13;;;;;45607:1619;;;:::o;45382:22::-;;;;;;;;;;;;;:::o;27682:164::-;27779:4;27803:18;:25;27822:5;27803:25;;;;;;;;;;;;;;;:35;27829:8;27803:35;;;;;;;;;;;;;;;;;;;;;;;;;27796:42;;27682:164;;;;:::o;47641:113::-;9436:12;:10;:12::i;:::-;9425:23;;:7;:5;:7::i;:::-;:23;;;9417:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47703:7:::1;:5;:7::i;:::-;47695:25;;:51;47722:21;47695:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;47641:113::o:0;10105:192::-;9436:12;:10;:12::i;:::-;9425:23;;:7;:5;:7::i;:::-;:23;;;9417:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10214:1:::1;10194:22;;:8;:22;;;;10186:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10270:19;10280:8;10270:9;:19::i;:::-;10105:192:::0;:::o;24519:305::-;24621:4;24673:25;24658:40;;;:11;:40;;;;:105;;;;24730:33;24715:48;;;:11;:48;;;;24658:105;:158;;;;24780:36;24804:11;24780:23;:36::i;:::-;24658:158;24638:178;;24519:305;;;:::o;30417:127::-;30482:4;30534:1;30506:30;;:7;:16;30514:7;30506:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30499:37;;30417:127;;;:::o;8065:98::-;8118:7;8145:10;8138:17;;8065:98;:::o;34399:174::-;34501:2;34474:15;:24;34490:7;34474:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34557:7;34553:2;34519:46;;34528:23;34543:7;34528:14;:23::i;:::-;34519:46;;;;;;;;;;;;34399:174;;:::o;30711:348::-;30804:4;30829:16;30837:7;30829;:16::i;:::-;30821:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30905:13;30921:23;30936:7;30921:14;:23::i;:::-;30905:39;;30974:5;30963:16;;:7;:16;;;:51;;;;31007:7;30983:31;;:20;30995:7;30983:11;:20::i;:::-;:31;;;30963:51;:87;;;;31018:32;31035:5;31042:7;31018:16;:32::i;:::-;30963:87;30955:96;;;30711:348;;;;:::o;33703:578::-;33862:4;33835:31;;:23;33850:7;33835:14;:23::i;:::-;:31;;;33827:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;33945:1;33931:16;;:2;:16;;;;33923:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34001:39;34022:4;34028:2;34032:7;34001:20;:39::i;:::-;34105:29;34122:1;34126:7;34105:8;:29::i;:::-;34166:1;34147:9;:15;34157:4;34147:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34195:1;34178:9;:13;34188:2;34178:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34226:2;34207:7;:16;34215:7;34207:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34265:7;34261:2;34246:27;;34255:4;34246:27;;;;;;;;;;;;33703:578;;;:::o;31401:110::-;31477:26;31487:2;31491:7;31477:26;;;;;;;;;;;;:9;:26::i;:::-;31401:110;;:::o;10305:173::-;10361:16;10380:6;;;;;;;;;;;10361:25;;10406:8;10397:6;;:17;;;;;;;;;;;;;;;;;;10461:8;10430:40;;10451:8;10430:40;;;;;;;;;;;;10350:128;10305:173;:::o;29789:315::-;29946:28;29956:4;29962:2;29966:7;29946:9;:28::i;:::-;29993:48;30016:4;30022:2;30026:7;30035:5;29993:22;:48::i;:::-;29985:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29789:315;;;;:::o;47774:715::-;47830:13;48052:1;48043:5;:10;48039:53;;;48070:10;;;;;;;;;;;;;;;;;;;;;48039:53;48102:12;48117:5;48102:20;;48133:14;48158:78;48173:1;48165:4;:9;48158:78;;48191:8;;;;;:::i;:::-;;;;48222:2;48214:10;;;;;:::i;:::-;;;48158:78;;;48246:19;48278:6;48268:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48246:39;;48296:154;48312:1;48303:5;:10;48296:154;;48340:1;48330:11;;;;;:::i;:::-;;;48407:2;48399:5;:10;;;;:::i;:::-;48386:2;:24;;;;:::i;:::-;48373:39;;48356:6;48363;48356:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;48436:2;48427:11;;;;;:::i;:::-;;;48296:154;;;48474:6;48460:21;;;;;47774:715;;;;:::o;48857:1607::-;48915:13;48941:11;48955:4;:11;48941:25;;48988:1;48981:3;:8;48977:23;;;48991:9;;;;;;;;;;;;;;;;;48977:23;49052:18;49090:1;49085;49079:3;:7;;;;:::i;:::-;49078:13;;;;:::i;:::-;49073:1;:19;;;;:::i;:::-;49052:40;;49150:19;49195:2;49182:10;:15;;;;:::i;:::-;49172:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49150:48;;49211:18;49232:5;;;;;;;;;;;;;;;;;49211:26;;49301:1;49294:5;49290:13;49346:2;49338:6;49334:15;49397:1;49365:777;49420:3;49417:1;49414:10;49365:777;;;49475:1;49472;49468:9;49463:14;;49533:8;49528:1;49522:4;49518:12;49512:19;49508:34;49613:4;49605:5;49601:2;49597:14;49593:25;49583:8;49579:40;49573:47;49652:3;49649:1;49645:11;49638:18;;49743:4;49734;49726:5;49722:2;49718:14;49714:25;49704:8;49700:40;49694:47;49690:58;49685:3;49681:68;49674:75;;49781:3;49778:1;49774:11;49767:18;;49871:4;49862;49854:5;49851:1;49847:13;49843:24;49833:8;49829:39;49823:46;49819:57;49814:3;49810:67;49803:74;;49909:3;49906:1;49902:11;49895:18;;49991:4;49982;49975:5;49971:16;49961:8;49957:31;49951:38;49947:49;49942:3;49938:59;49931:66;;50031:3;50026;50022:13;50015:20;;50073:3;50062:9;50055:22;50125:1;50114:9;50110:17;50097:30;;49444:698;;49365:777;;;49369:44;50174:1;50169:3;50165:11;50195:1;50190:84;;;;50293:1;50288:82;;;;50158:212;;50190:84;50251:6;50246:3;50242:16;50238:1;50227:9;50223:17;50216:43;50190:84;;50288:82;50349:4;50344:3;50340:14;50336:1;50325:9;50321:17;50314:41;50158:212;;50401:10;50393:6;50386:26;49259:1164;;50449:6;50435:21;;;;;;48857:1607;;;;:::o;23126:157::-;23211:4;23250:25;23235:40;;;:11;:40;;;;23228:47;;23126:157;;;:::o;40026:589::-;40170:45;40197:4;40203:2;40207:7;40170:26;:45::i;:::-;40248:1;40232:18;;:4;:18;;;40228:187;;;40267:40;40299:7;40267:31;:40::i;:::-;40228:187;;;40337:2;40329:10;;:4;:10;;;40325:90;;40356:47;40389:4;40395:7;40356:32;:47::i;:::-;40325:90;40228:187;40443:1;40429:16;;:2;:16;;;40425:183;;;40462:45;40499:7;40462:36;:45::i;:::-;40425:183;;;40535:4;40529:10;;:2;:10;;;40525:83;;40556:40;40584:2;40588:7;40556:27;:40::i;:::-;40525:83;40425:183;40026:589;;;:::o;31738:321::-;31868:18;31874:2;31878:7;31868:5;:18::i;:::-;31919:54;31950:1;31954:2;31958:7;31967:5;31919:22;:54::i;:::-;31897:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31738:321;;;:::o;35138:803::-;35293:4;35314:15;:2;:13;;;:15::i;:::-;35310:624;;;35366:2;35350:36;;;35387:12;:10;:12::i;:::-;35401:4;35407:7;35416:5;35350:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35346:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35613:1;35596:6;:13;:18;35592:272;;;35639:60;;;;;;;;;;:::i;:::-;;;;;;;;35592:272;35814:6;35808:13;35799:6;35795:2;35791:15;35784:38;35346:533;35483:45;;;35473:55;;;:6;:55;;;;35466:62;;;;;35310:624;35918:4;35911:11;;35138:803;;;;;;;:::o;36513:126::-;;;;:::o;41338:164::-;41442:10;:17;;;;41415:15;:24;41431:7;41415:24;;;;;;;;;;;:44;;;;41470:10;41486:7;41470:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41338:164;:::o;42129:988::-;42395:22;42445:1;42420:22;42437:4;42420:16;:22::i;:::-;:26;;;;:::i;:::-;42395:51;;42457:18;42478:17;:26;42496:7;42478:26;;;;;;;;;;;;42457:47;;42625:14;42611:10;:28;42607:328;;42656:19;42678:12;:18;42691:4;42678:18;;;;;;;;;;;;;;;:34;42697:14;42678:34;;;;;;;;;;;;42656:56;;42762:11;42729:12;:18;42742:4;42729:18;;;;;;;;;;;;;;;:30;42748:10;42729:30;;;;;;;;;;;:44;;;;42879:10;42846:17;:30;42864:11;42846:30;;;;;;;;;;;:43;;;;42641:294;42607:328;43031:17;:26;43049:7;43031:26;;;;;;;;;;;43024:33;;;43075:12;:18;43088:4;43075:18;;;;;;;;;;;;;;;:34;43094:14;43075:34;;;;;;;;;;;43068:41;;;42210:907;;42129:988;;:::o;43412:1079::-;43665:22;43710:1;43690:10;:17;;;;:21;;;;:::i;:::-;43665:46;;43722:18;43743:15;:24;43759:7;43743:24;;;;;;;;;;;;43722:45;;44094:19;44116:10;44127:14;44116:26;;;;;;;;:::i;:::-;;;;;;;;;;44094:48;;44180:11;44155:10;44166;44155:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;44291:10;44260:15;:28;44276:11;44260:28;;;;;;;;;;;:41;;;;44432:15;:24;44448:7;44432:24;;;;;;;;;;;44425:31;;;44467:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43483:1008;;;43412:1079;:::o;40916:221::-;41001:14;41018:20;41035:2;41018:16;:20::i;:::-;41001:37;;41076:7;41049:12;:16;41062:2;41049:16;;;;;;;;;;;;;;;:24;41066:6;41049:24;;;;;;;;;;;:34;;;;41123:6;41094:17;:26;41112:7;41094:26;;;;;;;;;;;:35;;;;40990:147;40916:221;;:::o;32395:382::-;32489:1;32475:16;;:2;:16;;;;32467:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32548:16;32556:7;32548;:16::i;:::-;32547:17;32539:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32610:45;32639:1;32643:2;32647:7;32610:20;:45::i;:::-;32685:1;32668:9;:13;32678:2;32668:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32716:2;32697:7;:16;32705:7;32697:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32761:7;32757:2;32736:33;;32753:1;32736:33;;;;;;;;;;;;32395:382;;:::o;15298:387::-;15358:4;15566:12;15633:7;15621:20;15613:28;;15676:1;15669:4;:8;15662:15;;;15298:387;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1354:139::-;1400:5;1438:6;1425:20;1416:29;;1454:33;1481:5;1454:33;:::i;:::-;1354:139;;;;:::o;1499:143::-;1556:5;1587:6;1581:13;1572:22;;1603:33;1630:5;1603:33;:::i;:::-;1499:143;;;;:::o;1648:329::-;1707:6;1756:2;1744:9;1735:7;1731:23;1727:32;1724:119;;;1762:79;;:::i;:::-;1724:119;1882:1;1907:53;1952:7;1943:6;1932:9;1928:22;1907:53;:::i;:::-;1897:63;;1853:117;1648:329;;;;:::o;1983:474::-;2051:6;2059;2108:2;2096:9;2087:7;2083:23;2079:32;2076:119;;;2114:79;;:::i;:::-;2076:119;2234:1;2259:53;2304:7;2295:6;2284:9;2280:22;2259:53;:::i;:::-;2249:63;;2205:117;2361:2;2387:53;2432:7;2423:6;2412:9;2408:22;2387:53;:::i;:::-;2377:63;;2332:118;1983:474;;;;;:::o;2463:619::-;2540:6;2548;2556;2605:2;2593:9;2584:7;2580:23;2576:32;2573:119;;;2611:79;;:::i;:::-;2573:119;2731:1;2756:53;2801:7;2792:6;2781:9;2777:22;2756:53;:::i;:::-;2746:63;;2702:117;2858:2;2884:53;2929:7;2920:6;2909:9;2905:22;2884:53;:::i;:::-;2874:63;;2829:118;2986:2;3012:53;3057:7;3048:6;3037:9;3033:22;3012:53;:::i;:::-;3002:63;;2957:118;2463:619;;;;;:::o;3088:943::-;3183:6;3191;3199;3207;3256:3;3244:9;3235:7;3231:23;3227:33;3224:120;;;3263:79;;:::i;:::-;3224:120;3383:1;3408:53;3453:7;3444:6;3433:9;3429:22;3408:53;:::i;:::-;3398:63;;3354:117;3510:2;3536:53;3581:7;3572:6;3561:9;3557:22;3536:53;:::i;:::-;3526:63;;3481:118;3638:2;3664:53;3709:7;3700:6;3689:9;3685:22;3664:53;:::i;:::-;3654:63;;3609:118;3794:2;3783:9;3779:18;3766:32;3825:18;3817:6;3814:30;3811:117;;;3847:79;;:::i;:::-;3811:117;3952:62;4006:7;3997:6;3986:9;3982:22;3952:62;:::i;:::-;3942:72;;3737:287;3088:943;;;;;;;:::o;4037:468::-;4102:6;4110;4159:2;4147:9;4138:7;4134:23;4130:32;4127:119;;;4165:79;;:::i;:::-;4127:119;4285:1;4310:53;4355:7;4346:6;4335:9;4331:22;4310:53;:::i;:::-;4300:63;;4256:117;4412:2;4438:50;4480:7;4471:6;4460:9;4456:22;4438:50;:::i;:::-;4428:60;;4383:115;4037:468;;;;;:::o;4511:474::-;4579:6;4587;4636:2;4624:9;4615:7;4611:23;4607:32;4604:119;;;4642:79;;:::i;:::-;4604:119;4762:1;4787:53;4832:7;4823:6;4812:9;4808:22;4787:53;:::i;:::-;4777:63;;4733:117;4889:2;4915:53;4960:7;4951:6;4940:9;4936:22;4915:53;:::i;:::-;4905:63;;4860:118;4511:474;;;;;:::o;4991:327::-;5049:6;5098:2;5086:9;5077:7;5073:23;5069:32;5066:119;;;5104:79;;:::i;:::-;5066:119;5224:1;5249:52;5293:7;5284:6;5273:9;5269:22;5249:52;:::i;:::-;5239:62;;5195:116;4991:327;;;;:::o;5324:349::-;5393:6;5442:2;5430:9;5421:7;5417:23;5413:32;5410:119;;;5448:79;;:::i;:::-;5410:119;5568:1;5593:63;5648:7;5639:6;5628:9;5624:22;5593:63;:::i;:::-;5583:73;;5539:127;5324:349;;;;:::o;5679:329::-;5738:6;5787:2;5775:9;5766:7;5762:23;5758:32;5755:119;;;5793:79;;:::i;:::-;5755:119;5913:1;5938:53;5983:7;5974:6;5963:9;5959:22;5938:53;:::i;:::-;5928:63;;5884:117;5679:329;;;;:::o;6014:351::-;6084:6;6133:2;6121:9;6112:7;6108:23;6104:32;6101:119;;;6139:79;;:::i;:::-;6101:119;6259:1;6284:64;6340:7;6331:6;6320:9;6316:22;6284:64;:::i;:::-;6274:74;;6230:128;6014:351;;;;:::o;6371:118::-;6458:24;6476:5;6458:24;:::i;:::-;6453:3;6446:37;6371:118;;:::o;6495:109::-;6576:21;6591:5;6576:21;:::i;:::-;6571:3;6564:34;6495:109;;:::o;6610:360::-;6696:3;6724:38;6756:5;6724:38;:::i;:::-;6778:70;6841:6;6836:3;6778:70;:::i;:::-;6771:77;;6857:52;6902:6;6897:3;6890:4;6883:5;6879:16;6857:52;:::i;:::-;6934:29;6956:6;6934:29;:::i;:::-;6929:3;6925:39;6918:46;;6700:270;6610:360;;;;:::o;6976:364::-;7064:3;7092:39;7125:5;7092:39;:::i;:::-;7147:71;7211:6;7206:3;7147:71;:::i;:::-;7140:78;;7227:52;7272:6;7267:3;7260:4;7253:5;7249:16;7227:52;:::i;:::-;7304:29;7326:6;7304:29;:::i;:::-;7299:3;7295:39;7288:46;;7068:272;6976:364;;;;:::o;7346:377::-;7452:3;7480:39;7513:5;7480:39;:::i;:::-;7535:89;7617:6;7612:3;7535:89;:::i;:::-;7528:96;;7633:52;7678:6;7673:3;7666:4;7659:5;7655:16;7633:52;:::i;:::-;7710:6;7705:3;7701:16;7694:23;;7456:267;7346:377;;;;:::o;7729:366::-;7871:3;7892:67;7956:2;7951:3;7892:67;:::i;:::-;7885:74;;7968:93;8057:3;7968:93;:::i;:::-;8086:2;8081:3;8077:12;8070:19;;7729:366;;;:::o;8101:::-;8243:3;8264:67;8328:2;8323:3;8264:67;:::i;:::-;8257:74;;8340:93;8429:3;8340:93;:::i;:::-;8458:2;8453:3;8449:12;8442:19;;8101:366;;;:::o;8473:::-;8615:3;8636:67;8700:2;8695:3;8636:67;:::i;:::-;8629:74;;8712:93;8801:3;8712:93;:::i;:::-;8830:2;8825:3;8821:12;8814:19;;8473:366;;;:::o;8845:::-;8987:3;9008:67;9072:2;9067:3;9008:67;:::i;:::-;9001:74;;9084:93;9173:3;9084:93;:::i;:::-;9202:2;9197:3;9193:12;9186:19;;8845:366;;;:::o;9217:::-;9359:3;9380:67;9444:2;9439:3;9380:67;:::i;:::-;9373:74;;9456:93;9545:3;9456:93;:::i;:::-;9574:2;9569:3;9565:12;9558:19;;9217:366;;;:::o;9589:::-;9731:3;9752:67;9816:2;9811:3;9752:67;:::i;:::-;9745:74;;9828:93;9917:3;9828:93;:::i;:::-;9946:2;9941:3;9937:12;9930:19;;9589:366;;;:::o;9961:::-;10103:3;10124:67;10188:2;10183:3;10124:67;:::i;:::-;10117:74;;10200:93;10289:3;10200:93;:::i;:::-;10318:2;10313:3;10309:12;10302:19;;9961:366;;;:::o;10333:::-;10475:3;10496:67;10560:2;10555:3;10496:67;:::i;:::-;10489:74;;10572:93;10661:3;10572:93;:::i;:::-;10690:2;10685:3;10681:12;10674:19;;10333:366;;;:::o;10705:::-;10847:3;10868:67;10932:2;10927:3;10868:67;:::i;:::-;10861:74;;10944:93;11033:3;10944:93;:::i;:::-;11062:2;11057:3;11053:12;11046:19;;10705:366;;;:::o;11077:::-;11219:3;11240:67;11304:2;11299:3;11240:67;:::i;:::-;11233:74;;11316:93;11405:3;11316:93;:::i;:::-;11434:2;11429:3;11425:12;11418:19;;11077:366;;;:::o;11449:::-;11591:3;11612:67;11676:2;11671:3;11612:67;:::i;:::-;11605:74;;11688:93;11777:3;11688:93;:::i;:::-;11806:2;11801:3;11797:12;11790:19;;11449:366;;;:::o;11821:400::-;11981:3;12002:84;12084:1;12079:3;12002:84;:::i;:::-;11995:91;;12095:93;12184:3;12095:93;:::i;:::-;12213:1;12208:3;12204:11;12197:18;;11821:400;;;:::o;12227:366::-;12369:3;12390:67;12454:2;12449:3;12390:67;:::i;:::-;12383:74;;12466:93;12555:3;12466:93;:::i;:::-;12584:2;12579:3;12575:12;12568:19;;12227:366;;;:::o;12599:402::-;12759:3;12780:85;12862:2;12857:3;12780:85;:::i;:::-;12773:92;;12874:93;12963:3;12874:93;:::i;:::-;12992:2;12987:3;12983:12;12976:19;;12599:402;;;:::o;13007:366::-;13149:3;13170:67;13234:2;13229:3;13170:67;:::i;:::-;13163:74;;13246:93;13335:3;13246:93;:::i;:::-;13364:2;13359:3;13355:12;13348:19;;13007:366;;;:::o;13379:::-;13521:3;13542:67;13606:2;13601:3;13542:67;:::i;:::-;13535:74;;13618:93;13707:3;13618:93;:::i;:::-;13736:2;13731:3;13727:12;13720:19;;13379:366;;;:::o;13751:::-;13893:3;13914:67;13978:2;13973:3;13914:67;:::i;:::-;13907:74;;13990:93;14079:3;13990:93;:::i;:::-;14108:2;14103:3;14099:12;14092:19;;13751:366;;;:::o;14123:::-;14265:3;14286:67;14350:2;14345:3;14286:67;:::i;:::-;14279:74;;14362:93;14451:3;14362:93;:::i;:::-;14480:2;14475:3;14471:12;14464:19;;14123:366;;;:::o;14495:402::-;14655:3;14676:85;14758:2;14753:3;14676:85;:::i;:::-;14669:92;;14770:93;14859:3;14770:93;:::i;:::-;14888:2;14883:3;14879:12;14872:19;;14495:402;;;:::o;14903:366::-;15045:3;15066:67;15130:2;15125:3;15066:67;:::i;:::-;15059:74;;15142:93;15231:3;15142:93;:::i;:::-;15260:2;15255:3;15251:12;15244:19;;14903:366;;;:::o;15275:402::-;15435:3;15456:85;15538:2;15533:3;15456:85;:::i;:::-;15449:92;;15550:93;15639:3;15550:93;:::i;:::-;15668:2;15663:3;15659:12;15652:19;;15275:402;;;:::o;15683:366::-;15825:3;15846:67;15910:2;15905:3;15846:67;:::i;:::-;15839:74;;15922:93;16011:3;15922:93;:::i;:::-;16040:2;16035:3;16031:12;16024:19;;15683:366;;;:::o;16055:::-;16197:3;16218:67;16282:2;16277:3;16218:67;:::i;:::-;16211:74;;16294:93;16383:3;16294:93;:::i;:::-;16412:2;16407:3;16403:12;16396:19;;16055:366;;;:::o;16427:118::-;16514:24;16532:5;16514:24;:::i;:::-;16509:3;16502:37;16427:118;;:::o;16551:2039::-;17213:3;17235:95;17326:3;17317:6;17235:95;:::i;:::-;17228:102;;17347:95;17438:3;17429:6;17347:95;:::i;:::-;17340:102;;17459:95;17550:3;17541:6;17459:95;:::i;:::-;17452:102;;17571:95;17662:3;17653:6;17571:95;:::i;:::-;17564:102;;17683:95;17774:3;17765:6;17683:95;:::i;:::-;17676:102;;17795:95;17886:3;17877:6;17795:95;:::i;:::-;17788:102;;17907:95;17998:3;17989:6;17907:95;:::i;:::-;17900:102;;18019:95;18110:3;18101:6;18019:95;:::i;:::-;18012:102;;18131:95;18222:3;18213:6;18131:95;:::i;:::-;18124:102;;18243:95;18334:3;18325:6;18243:95;:::i;:::-;18236:102;;18355:96;18447:3;18437:7;18355:96;:::i;:::-;18348:103;;18468:96;18560:3;18550:7;18468:96;:::i;:::-;18461:103;;18581:3;18574:10;;16551:2039;;;;;;;;;;;;;;;:::o;18596:541::-;18829:3;18851:148;18995:3;18851:148;:::i;:::-;18844:155;;19016:95;19107:3;19098:6;19016:95;:::i;:::-;19009:102;;19128:3;19121:10;;18596:541;;;;:::o;19143:1233::-;19626:3;19648:148;19792:3;19648:148;:::i;:::-;19641:155;;19813:95;19904:3;19895:6;19813:95;:::i;:::-;19806:102;;19925:148;20069:3;19925:148;:::i;:::-;19918:155;;20090:95;20181:3;20172:6;20090:95;:::i;:::-;20083:102;;20202:148;20346:3;20202:148;:::i;:::-;20195:155;;20367:3;20360:10;;19143:1233;;;;;:::o;20382:222::-;20475:4;20513:2;20502:9;20498:18;20490:26;;20526:71;20594:1;20583:9;20579:17;20570:6;20526:71;:::i;:::-;20382:222;;;;:::o;20610:640::-;20805:4;20843:3;20832:9;20828:19;20820:27;;20857:71;20925:1;20914:9;20910:17;20901:6;20857:71;:::i;:::-;20938:72;21006:2;20995:9;20991:18;20982:6;20938:72;:::i;:::-;21020;21088:2;21077:9;21073:18;21064:6;21020:72;:::i;:::-;21139:9;21133:4;21129:20;21124:2;21113:9;21109:18;21102:48;21167:76;21238:4;21229:6;21167:76;:::i;:::-;21159:84;;20610:640;;;;;;;:::o;21256:210::-;21343:4;21381:2;21370:9;21366:18;21358:26;;21394:65;21456:1;21445:9;21441:17;21432:6;21394:65;:::i;:::-;21256:210;;;;:::o;21472:313::-;21585:4;21623:2;21612:9;21608:18;21600:26;;21672:9;21666:4;21662:20;21658:1;21647:9;21643:17;21636:47;21700:78;21773:4;21764:6;21700:78;:::i;:::-;21692:86;;21472:313;;;;:::o;21791:419::-;21957:4;21995:2;21984:9;21980:18;21972:26;;22044:9;22038:4;22034:20;22030:1;22019:9;22015:17;22008:47;22072:131;22198:4;22072:131;:::i;:::-;22064:139;;21791:419;;;:::o;22216:::-;22382:4;22420:2;22409:9;22405:18;22397:26;;22469:9;22463:4;22459:20;22455:1;22444:9;22440:17;22433:47;22497:131;22623:4;22497:131;:::i;:::-;22489:139;;22216:419;;;:::o;22641:::-;22807:4;22845:2;22834:9;22830:18;22822:26;;22894:9;22888:4;22884:20;22880:1;22869:9;22865:17;22858:47;22922:131;23048:4;22922:131;:::i;:::-;22914:139;;22641:419;;;:::o;23066:::-;23232:4;23270:2;23259:9;23255:18;23247:26;;23319:9;23313:4;23309:20;23305:1;23294:9;23290:17;23283:47;23347:131;23473:4;23347:131;:::i;:::-;23339:139;;23066:419;;;:::o;23491:::-;23657:4;23695:2;23684:9;23680:18;23672:26;;23744:9;23738:4;23734:20;23730:1;23719:9;23715:17;23708:47;23772:131;23898:4;23772:131;:::i;:::-;23764:139;;23491:419;;;:::o;23916:::-;24082:4;24120:2;24109:9;24105:18;24097:26;;24169:9;24163:4;24159:20;24155:1;24144:9;24140:17;24133:47;24197:131;24323:4;24197:131;:::i;:::-;24189:139;;23916:419;;;:::o;24341:::-;24507:4;24545:2;24534:9;24530:18;24522:26;;24594:9;24588:4;24584:20;24580:1;24569:9;24565:17;24558:47;24622:131;24748:4;24622:131;:::i;:::-;24614:139;;24341:419;;;:::o;24766:::-;24932:4;24970:2;24959:9;24955:18;24947:26;;25019:9;25013:4;25009:20;25005:1;24994:9;24990:17;24983:47;25047:131;25173:4;25047:131;:::i;:::-;25039:139;;24766:419;;;:::o;25191:::-;25357:4;25395:2;25384:9;25380:18;25372:26;;25444:9;25438:4;25434:20;25430:1;25419:9;25415:17;25408:47;25472:131;25598:4;25472:131;:::i;:::-;25464:139;;25191:419;;;:::o;25616:::-;25782:4;25820:2;25809:9;25805:18;25797:26;;25869:9;25863:4;25859:20;25855:1;25844:9;25840:17;25833:47;25897:131;26023:4;25897:131;:::i;:::-;25889:139;;25616:419;;;:::o;26041:::-;26207:4;26245:2;26234:9;26230:18;26222:26;;26294:9;26288:4;26284:20;26280:1;26269:9;26265:17;26258:47;26322:131;26448:4;26322:131;:::i;:::-;26314:139;;26041:419;;;:::o;26466:::-;26632:4;26670:2;26659:9;26655:18;26647:26;;26719:9;26713:4;26709:20;26705:1;26694:9;26690:17;26683:47;26747:131;26873:4;26747:131;:::i;:::-;26739:139;;26466:419;;;:::o;26891:::-;27057:4;27095:2;27084:9;27080:18;27072:26;;27144:9;27138:4;27134:20;27130:1;27119:9;27115:17;27108:47;27172:131;27298:4;27172:131;:::i;:::-;27164:139;;26891:419;;;:::o;27316:::-;27482:4;27520:2;27509:9;27505:18;27497:26;;27569:9;27563:4;27559:20;27555:1;27544:9;27540:17;27533:47;27597:131;27723:4;27597:131;:::i;:::-;27589:139;;27316:419;;;:::o;27741:::-;27907:4;27945:2;27934:9;27930:18;27922:26;;27994:9;27988:4;27984:20;27980:1;27969:9;27965:17;27958:47;28022:131;28148:4;28022:131;:::i;:::-;28014:139;;27741:419;;;:::o;28166:::-;28332:4;28370:2;28359:9;28355:18;28347:26;;28419:9;28413:4;28409:20;28405:1;28394:9;28390:17;28383:47;28447:131;28573:4;28447:131;:::i;:::-;28439:139;;28166:419;;;:::o;28591:::-;28757:4;28795:2;28784:9;28780:18;28772:26;;28844:9;28838:4;28834:20;28830:1;28819:9;28815:17;28808:47;28872:131;28998:4;28872:131;:::i;:::-;28864:139;;28591:419;;;:::o;29016:::-;29182:4;29220:2;29209:9;29205:18;29197:26;;29269:9;29263:4;29259:20;29255:1;29244:9;29240:17;29233:47;29297:131;29423:4;29297:131;:::i;:::-;29289:139;;29016:419;;;:::o;29441:::-;29607:4;29645:2;29634:9;29630:18;29622:26;;29694:9;29688:4;29684:20;29680:1;29669:9;29665:17;29658:47;29722:131;29848:4;29722:131;:::i;:::-;29714:139;;29441:419;;;:::o;29866:222::-;29959:4;29997:2;29986:9;29982:18;29974:26;;30010:71;30078:1;30067:9;30063:17;30054:6;30010:71;:::i;:::-;29866:222;;;;:::o;30094:129::-;30128:6;30155:20;;:::i;:::-;30145:30;;30184:33;30212:4;30204:6;30184:33;:::i;:::-;30094:129;;;:::o;30229:75::-;30262:6;30295:2;30289:9;30279:19;;30229:75;:::o;30310:307::-;30371:4;30461:18;30453:6;30450:30;30447:56;;;30483:18;;:::i;:::-;30447:56;30521:29;30543:6;30521:29;:::i;:::-;30513:37;;30605:4;30599;30595:15;30587:23;;30310:307;;;:::o;30623:98::-;30674:6;30708:5;30702:12;30692:22;;30623:98;;;:::o;30727:99::-;30779:6;30813:5;30807:12;30797:22;;30727:99;;;:::o;30832:168::-;30915:11;30949:6;30944:3;30937:19;30989:4;30984:3;30980:14;30965:29;;30832:168;;;;:::o;31006:169::-;31090:11;31124:6;31119:3;31112:19;31164:4;31159:3;31155:14;31140:29;;31006:169;;;;:::o;31181:148::-;31283:11;31320:3;31305:18;;31181:148;;;;:::o;31335:305::-;31375:3;31394:20;31412:1;31394:20;:::i;:::-;31389:25;;31428:20;31446:1;31428:20;:::i;:::-;31423:25;;31582:1;31514:66;31510:74;31507:1;31504:81;31501:107;;;31588:18;;:::i;:::-;31501:107;31632:1;31629;31625:9;31618:16;;31335:305;;;;:::o;31646:185::-;31686:1;31703:20;31721:1;31703:20;:::i;:::-;31698:25;;31737:20;31755:1;31737:20;:::i;:::-;31732:25;;31776:1;31766:35;;31781:18;;:::i;:::-;31766:35;31823:1;31820;31816:9;31811:14;;31646:185;;;;:::o;31837:348::-;31877:7;31900:20;31918:1;31900:20;:::i;:::-;31895:25;;31934:20;31952:1;31934:20;:::i;:::-;31929:25;;32122:1;32054:66;32050:74;32047:1;32044:81;32039:1;32032:9;32025:17;32021:105;32018:131;;;32129:18;;:::i;:::-;32018:131;32177:1;32174;32170:9;32159:20;;31837:348;;;;:::o;32191:191::-;32231:4;32251:20;32269:1;32251:20;:::i;:::-;32246:25;;32285:20;32303:1;32285:20;:::i;:::-;32280:25;;32324:1;32321;32318:8;32315:34;;;32329:18;;:::i;:::-;32315:34;32374:1;32371;32367:9;32359:17;;32191:191;;;;:::o;32388:96::-;32425:7;32454:24;32472:5;32454:24;:::i;:::-;32443:35;;32388:96;;;:::o;32490:90::-;32524:7;32567:5;32560:13;32553:21;32542:32;;32490:90;;;:::o;32586:149::-;32622:7;32662:66;32655:5;32651:78;32640:89;;32586:149;;;:::o;32741:126::-;32778:7;32818:42;32811:5;32807:54;32796:65;;32741:126;;;:::o;32873:77::-;32910:7;32939:5;32928:16;;32873:77;;;:::o;32956:154::-;33040:6;33035:3;33030;33017:30;33102:1;33093:6;33088:3;33084:16;33077:27;32956:154;;;:::o;33116:307::-;33184:1;33194:113;33208:6;33205:1;33202:13;33194:113;;;33293:1;33288:3;33284:11;33278:18;33274:1;33269:3;33265:11;33258:39;33230:2;33227:1;33223:10;33218:15;;33194:113;;;33325:6;33322:1;33319:13;33316:101;;;33405:1;33396:6;33391:3;33387:16;33380:27;33316:101;33165:258;33116:307;;;:::o;33429:320::-;33473:6;33510:1;33504:4;33500:12;33490:22;;33557:1;33551:4;33547:12;33578:18;33568:81;;33634:4;33626:6;33622:17;33612:27;;33568:81;33696:2;33688:6;33685:14;33665:18;33662:38;33659:84;;;33715:18;;:::i;:::-;33659:84;33480:269;33429:320;;;:::o;33755:281::-;33838:27;33860:4;33838:27;:::i;:::-;33830:6;33826:40;33968:6;33956:10;33953:22;33932:18;33920:10;33917:34;33914:62;33911:88;;;33979:18;;:::i;:::-;33911:88;34019:10;34015:2;34008:22;33798:238;33755:281;;:::o;34042:233::-;34081:3;34104:24;34122:5;34104:24;:::i;:::-;34095:33;;34150:66;34143:5;34140:77;34137:103;;;34220:18;;:::i;:::-;34137:103;34267:1;34260:5;34256:13;34249:20;;34042:233;;;:::o;34281:176::-;34313:1;34330:20;34348:1;34330:20;:::i;:::-;34325:25;;34364:20;34382:1;34364:20;:::i;:::-;34359:25;;34403:1;34393:35;;34408:18;;:::i;:::-;34393:35;34449:1;34446;34442:9;34437:14;;34281:176;;;;:::o;34463:180::-;34511:77;34508:1;34501:88;34608:4;34605:1;34598:15;34632:4;34629:1;34622:15;34649:180;34697:77;34694:1;34687:88;34794:4;34791:1;34784:15;34818:4;34815:1;34808:15;34835:180;34883:77;34880:1;34873:88;34980:4;34977:1;34970:15;35004:4;35001:1;34994:15;35021:180;35069:77;35066:1;35059:88;35166:4;35163:1;35156:15;35190:4;35187:1;35180:15;35207:180;35255:77;35252:1;35245:88;35352:4;35349:1;35342:15;35376:4;35373:1;35366:15;35393:180;35441:77;35438:1;35431:88;35538:4;35535:1;35528:15;35562:4;35559:1;35552:15;35579:117;35688:1;35685;35678:12;35702:117;35811:1;35808;35801:12;35825:117;35934:1;35931;35924:12;35948:117;36057:1;36054;36047:12;36071:102;36112:6;36163:2;36159:7;36154:2;36147:5;36143:14;36139:28;36129:38;;36071:102;;;:::o;36179:230::-;36319:34;36315:1;36307:6;36303:14;36296:58;36388:13;36383:2;36375:6;36371:15;36364:38;36179:230;:::o;36415:237::-;36555:34;36551:1;36543:6;36539:14;36532:58;36624:20;36619:2;36611:6;36607:15;36600:45;36415:237;:::o;36658:225::-;36798:34;36794:1;36786:6;36782:14;36775:58;36867:8;36862:2;36854:6;36850:15;36843:33;36658:225;:::o;36889:178::-;37029:30;37025:1;37017:6;37013:14;37006:54;36889:178;:::o;37073:176::-;37213:28;37209:1;37201:6;37197:14;37190:52;37073:176;:::o;37255:223::-;37395:34;37391:1;37383:6;37379:14;37372:58;37464:6;37459:2;37451:6;37447:15;37440:31;37255:223;:::o;37484:175::-;37624:27;37620:1;37612:6;37608:14;37601:51;37484:175;:::o;37665:231::-;37805:34;37801:1;37793:6;37789:14;37782:58;37874:14;37869:2;37861:6;37857:15;37850:39;37665:231;:::o;37902:243::-;38042:34;38038:1;38030:6;38026:14;38019:58;38111:26;38106:2;38098:6;38094:15;38087:51;37902:243;:::o;38151:229::-;38291:34;38287:1;38279:6;38275:14;38268:58;38360:12;38355:2;38347:6;38343:15;38336:37;38151:229;:::o;38386:228::-;38526:34;38522:1;38514:6;38510:14;38503:58;38595:11;38590:2;38582:6;38578:15;38571:36;38386:228;:::o;38620:214::-;38760:66;38756:1;38748:6;38744:14;38737:90;38620:214;:::o;38840:182::-;38980:34;38976:1;38968:6;38964:14;38957:58;38840:182;:::o;39028:372::-;39168:66;39164:1;39156:6;39152:14;39145:90;39269:66;39264:2;39256:6;39252:15;39245:91;39370:22;39365:2;39357:6;39353:15;39346:47;39028:372;:::o;39406:231::-;39546:34;39542:1;39534:6;39530:14;39523:58;39615:14;39610:2;39602:6;39598:15;39591:39;39406:231;:::o;39643:182::-;39783:34;39779:1;39771:6;39767:14;39760:58;39643:182;:::o;39831:228::-;39971:34;39967:1;39959:6;39955:14;39948:58;40040:11;40035:2;40027:6;40023:15;40016:36;39831:228;:::o;40065:220::-;40205:34;40201:1;40193:6;40189:14;40182:58;40274:3;40269:2;40261:6;40257:15;40250:28;40065:220;:::o;40291:179::-;40431:31;40427:1;40419:6;40415:14;40408:55;40291:179;:::o;40476:236::-;40616:34;40612:1;40604:6;40600:14;40593:58;40685:19;40680:2;40672:6;40668:15;40661:44;40476:236;:::o;40718:214::-;40858:66;40854:1;40846:6;40842:14;40835:90;40718:214;:::o;40938:231::-;41078:34;41074:1;41066:6;41062:14;41055:58;41147:14;41142:2;41134:6;41130:15;41123:39;40938:231;:::o;41175:181::-;41315:33;41311:1;41303:6;41299:14;41292:57;41175:181;:::o;41362:122::-;41435:24;41453:5;41435:24;:::i;:::-;41428:5;41425:35;41415:63;;41474:1;41471;41464:12;41415:63;41362:122;:::o;41490:116::-;41560:21;41575:5;41560:21;:::i;:::-;41553:5;41550:32;41540:60;;41596:1;41593;41586:12;41540:60;41490:116;:::o;41612:120::-;41684:23;41701:5;41684:23;:::i;:::-;41677:5;41674:34;41664:62;;41722:1;41719;41712:12;41664:62;41612:120;:::o;41738:122::-;41811:24;41829:5;41811:24;:::i;:::-;41804:5;41801:35;41791:63;;41850:1;41847;41840:12;41791:63;41738:122;:::o

Swarm Source

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