ETH Price: $2,981.17 (+2.09%)
Gas: 1 Gwei

Token

FOUR EMPERORS COLLECTION (YonkoNFT)
 

Overview

Max Total Supply

595 YonkoNFT

Holders

106

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
5 YonkoNFT
0x4bdb2280eae404780dfec4b163161e30820f126d
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:
YonkoNFT

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-19
*/

/**
 *Submitted for verification at polygonscan.com on 2021-09-06
*/

// SPDX-License-Identifier: GPL-3.0

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

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
pragma solidity ^0.8.0;
/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

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

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

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

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

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

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

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

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

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

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

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


// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol
pragma solidity ^0.8.0;
/**
 * @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);
}


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

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



pragma solidity ^0.8.0;

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;


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

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

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

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



pragma solidity ^0.8.0;

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

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

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


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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        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.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

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

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



pragma solidity ^0.8.0;



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


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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _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);
    }
}

// File: contracts/YonkoNFT.sol



// Created by HashLips
// The Nerdy Coder Clones

pragma solidity ^0.8.0;



contract YonkoNFT is ERC721Enumerable, Ownable {
  using Strings for uint256;

  string private baseURI;
  string private baseExtension = ".json";
  string private unrevealedUri;
  uint256 public cost = 0.07 ether;
  uint256 public maxSupply = 1001;
  uint256 public maxMintAmount = 5;
  uint256 public maxOnceMintAmount = 2;
  bool public paused = false;
  bool public revealed = false;
  bool public autoPause = true;
  uint256 public autoPauseLimit = 500;
  mapping(address => bool) public whitelisted;
  address public feeReceiver;
  IERC721 public previousNft = IERC721(0x37F9Ad2632f389fC3cE9a5B84feA838595c06c24);


  constructor(
    string memory _name,
    string memory _symbol,
    string memory _initBaseURI,
    string memory _unrevealedUri,
    address _feeReceiver
  ) ERC721(_name, _symbol) {
    setBaseURI(_initBaseURI);
    unrevealedUri = _unrevealedUri;
    feeReceiver = _feeReceiver;
  }

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

  function reveal() public onlyOwner {
    revealed = true;
  }

  function setAutoPause(bool _state, uint256 _limit) public onlyOwner {
    autoPause = _state;
    autoPauseLimit = _limit;
  }

  // public
  function mint(address _to, uint256 _mintAmount) public payable {
    uint256 supply = totalSupply();
    uint256 _toTokenCount = tokenCount(_to);
    require(!paused);
    require(_mintAmount > 0);
    require(_mintAmount + _toTokenCount <= maxMintAmount);
    require(_mintAmount <= maxOnceMintAmount);
    require(supply + _mintAmount <= maxSupply);
    
    if (msg.sender != owner()) {
        if(whitelisted[msg.sender] != true) {
            uint256 totalCost;
            if(autoPause && supply + _mintAmount > autoPauseLimit){
                revert("Auto paused!!");
            }

            for(uint i=1; i <= _mintAmount; i++){

                if(supply + i <= 250){
                    _setCost(0.07 ether);
                    totalCost += 0.07 ether;
                }
                else if(supply + i <= 500){
                    _setCost(0.07 ether);
                    totalCost += 0.07 ether;
                }
                else if(supply + i <= 750){
                    _setCost(0.1 ether);
                    totalCost += 0.1 ether;
                }
                else if(supply + i <= 1000){
                    _setCost(0.12 ether);
                    totalCost += 0.12 ether;
                }
                else if(supply + i == 1001){
                    _setCost(0.15 ether);
                    totalCost += 0.15 ether;
                }
                else {
                    revert("Exceeding Supply");
                }
            }
            require(msg.value >= totalCost, "Not enough");
        }
    }

    payable(feeReceiver).transfer(msg.value);
    for (uint256 i = 1; i <= _mintAmount; i++) {
      _safeMint(_to, supply + i);
    }
  }

  function _setCost(uint256 _cost) private {
    if(cost != _cost){
        cost = _cost;
    }
  }

  function airdropExistingHolders(uint256 _startTokenId, uint256 _endTokenId) public onlyOwner {
    for(uint256 i= _startTokenId; i <= _endTokenId; i++){
        address previousOwner = previousNft.ownerOf(i);
        _safeMint(previousOwner, i);
    }
  }

  function walletOfOwner(address _owner)
    public
    view
    returns (uint256[] memory)
  {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory tokenIds = new uint256[](ownerTokenCount);
    for (uint256 i; i < ownerTokenCount; i++) {
      tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
    }
    return tokenIds;
  }

  function tokenCount(address _owner)
    public
    view
    returns (uint256)
    {
        uint256 _tokenCount = balanceOf(_owner);
        return _tokenCount;
    }

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

    string memory currentBaseURI = _baseURI();
    if(!revealed){
        return unrevealedUri;
    }
    return bytes(currentBaseURI).length > 0
        ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension))
        : "";
  }

  //only owner
  function setCost(uint256 _newCost) public onlyOwner() {
    cost = _newCost;
  }
  function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner() {
    maxMintAmount = _newmaxMintAmount;
  }

  function setBaseURI(string memory _newBaseURI) public onlyOwner {
    baseURI = _newBaseURI;
  }

  function setBaseExtension(string memory _newBaseExtension) public onlyOwner {
    baseExtension = _newBaseExtension;
  }

  function pause(bool _state) public onlyOwner {
    paused = _state;
  }
 
 function whitelistUser(address _user) public onlyOwner {
    whitelisted[_user] = true;
  }
 
  function removeWhitelistUser(address _user) public onlyOwner {
    whitelisted[_user] = false;
  }

  function withdraw() public payable onlyOwner {
    require(payable(msg.sender).send(address(this).balance));
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_unrevealedUri","type":"string"},{"internalType":"address","name":"_feeReceiver","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":[{"internalType":"uint256","name":"_startTokenId","type":"uint256"},{"internalType":"uint256","name":"_endTokenId","type":"uint256"}],"name":"airdropExistingHolders","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoPause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoPauseLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxOnceMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","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":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"previousNft","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeWhitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"},{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setAutoPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","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"}],"name":"tokenCount","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"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"whitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c908051906020019062000051929190620003bb565b5066f8b0a10e470000600e556103e9600f55600560105560026011556000601260006101000a81548160ff0219169083151502179055506000601260016101000a81548160ff0219169083151502179055506001601260026101000a81548160ff0219169083151502179055506101f46013557337f9ad2632f389fc3ce9a5b84fea838595c06c24601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200012657600080fd5b50604051620054193803806200541983398181016040528101906200014c9190620004f4565b8484816000908051906020019062000166929190620003bb565b5080600190805190602001906200017f929190620003bb565b505050620001a2620001966200021860201b60201c565b6200022060201b60201c565b620001b383620002e660201b60201c565b81600d9080519060200190620001cb929190620003bb565b5080601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050620007ce565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002f66200021860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200031c6200039160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000375576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200036c906200061c565b60405180910390fd5b80600b90805190602001906200038d929190620003bb565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003c99062000720565b90600052602060002090601f016020900481019282620003ed576000855562000439565b82601f106200040857805160ff191683800117855562000439565b8280016001018555821562000439579182015b82811115620004385782518255916020019190600101906200041b565b5b5090506200044891906200044c565b5090565b5b80821115620004675760008160009055506001016200044d565b5090565b6000620004826200047c8462000672565b6200063e565b9050828152602081018484840111156200049b57600080fd5b620004a8848285620006ea565b509392505050565b600081519050620004c181620007b4565b92915050565b600082601f830112620004d957600080fd5b8151620004eb8482602086016200046b565b91505092915050565b600080600080600060a086880312156200050d57600080fd5b600086015167ffffffffffffffff8111156200052857600080fd5b6200053688828901620004c7565b955050602086015167ffffffffffffffff8111156200055457600080fd5b6200056288828901620004c7565b945050604086015167ffffffffffffffff8111156200058057600080fd5b6200058e88828901620004c7565b935050606086015167ffffffffffffffff811115620005ac57600080fd5b620005ba88828901620004c7565b9250506080620005cd88828901620004b0565b9150509295509295909350565b6000620005e9602083620006a5565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600060208201905081810360008301526200063781620005da565b9050919050565b6000604051905081810181811067ffffffffffffffff8211171562000668576200066762000785565b5b8060405250919050565b600067ffffffffffffffff82111562000690576200068f62000785565b5b601f19601f8301169050602081019050919050565b600082825260208201905092915050565b6000620006c382620006ca565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b838110156200070a578082015181840152602081019050620006ed565b838111156200071a576000848401525b50505050565b600060028204905060018216806200073957607f821691505b6020821081141562000750576200074f62000756565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620007bf81620006b6565b8114620007cb57600080fd5b50565b614c3b80620007de6000396000f3fe6080604052600436106102675760003560e01c80635c975abb11610144578063a22cb465116100b6578063d5abeb011161007a578063d5abeb01146108fe578063d936547e14610929578063da3ef23f14610966578063e985e9c51461098f578063ee4de643146109cc578063f2fde38b146109f757610267565b8063a22cb4651461082d578063a475b5dd14610856578063b3f006741461086d578063b88d4fde14610898578063c87b56dd146108c157610267565b8063871690da11610108578063871690da1461072f5780638b7ebf94146107585780638da5cb5b1461078357806395d89b41146107ae57806398d9b49c146107d95780639e32adc91461080257610267565b80635c975abb1461064a5780636352211e1461067557806370a08231146106b2578063715018a6146106ef5780637f00c7a61461070657610267565b806330cc7ae0116101dd57806344a0d68a116101a157806344a0d68a1461052a5780634a4c560d146105535780634f6ccce71461057c57806351830227146105b957806355f804b3146105e457806356225a091461060d57610267565b806330cc7ae0146104755780633ccfd60b1461049e57806340c10f19146104a857806342842e0e146104c4578063438b6300146104ed57610267565b806313faede61161022f57806313faede61461036357806318160ddd1461038e578063191ff898146103b9578063239c70ae146103e457806323b872dd1461040f5780632f745c591461043857610267565b806301ffc9a71461026c57806302329a29146102a957806306fdde03146102d2578063081812fc146102fd578063095ea7b31461033a575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e919061397d565b610a20565b6040516102a09190614466565b60405180910390f35b3480156102b557600080fd5b506102d060048036038101906102cb9190613918565b610a9a565b005b3480156102de57600080fd5b506102e7610b33565b6040516102f4919061449c565b60405180910390f35b34801561030957600080fd5b50610324600480360381019061031f9190613a10565b610bc5565b60405161033191906143dd565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c91906138dc565b610c4a565b005b34801561036f57600080fd5b50610378610d62565b604051610385919061475e565b60405180910390f35b34801561039a57600080fd5b506103a3610d68565b6040516103b0919061475e565b60405180910390f35b3480156103c557600080fd5b506103ce610d75565b6040516103db919061475e565b60405180910390f35b3480156103f057600080fd5b506103f9610d7b565b604051610406919061475e565b60405180910390f35b34801561041b57600080fd5b50610436600480360381019061043191906137d6565b610d81565b005b34801561044457600080fd5b5061045f600480360381019061045a91906138dc565b610de1565b60405161046c919061475e565b60405180910390f35b34801561048157600080fd5b5061049c60048036038101906104979190613748565b610e86565b005b6104a6610f5d565b005b6104c260048036038101906104bd91906138dc565b611019565b005b3480156104d057600080fd5b506104eb60048036038101906104e691906137d6565b611421565b005b3480156104f957600080fd5b50610514600480360381019061050f9190613748565b611441565b6040516105219190614444565b60405180910390f35b34801561053657600080fd5b50610551600480360381019061054c9190613a10565b61153b565b005b34801561055f57600080fd5b5061057a60048036038101906105759190613748565b6115c1565b005b34801561058857600080fd5b506105a3600480360381019061059e9190613a10565b611698565b6040516105b0919061475e565b60405180910390f35b3480156105c557600080fd5b506105ce61172f565b6040516105db9190614466565b60405180910390f35b3480156105f057600080fd5b5061060b600480360381019061060691906139cf565b611742565b005b34801561061957600080fd5b50610634600480360381019061062f9190613748565b6117d8565b604051610641919061475e565b60405180910390f35b34801561065657600080fd5b5061065f6117ef565b60405161066c9190614466565b60405180910390f35b34801561068157600080fd5b5061069c60048036038101906106979190613a10565b611802565b6040516106a991906143dd565b60405180910390f35b3480156106be57600080fd5b506106d960048036038101906106d49190613748565b6118b4565b6040516106e6919061475e565b60405180910390f35b3480156106fb57600080fd5b5061070461196c565b005b34801561071257600080fd5b5061072d60048036038101906107289190613a10565b6119f4565b005b34801561073b57600080fd5b5061075660048036038101906107519190613941565b611a7a565b005b34801561076457600080fd5b5061076d611b1b565b60405161077a9190614481565b60405180910390f35b34801561078f57600080fd5b50610798611b41565b6040516107a591906143dd565b60405180910390f35b3480156107ba57600080fd5b506107c3611b6b565b6040516107d0919061449c565b60405180910390f35b3480156107e557600080fd5b5061080060048036038101906107fb9190613a39565b611bfd565b005b34801561080e57600080fd5b50610817611d58565b604051610824919061475e565b60405180910390f35b34801561083957600080fd5b50610854600480360381019061084f91906138a0565b611d5e565b005b34801561086257600080fd5b5061086b611edf565b005b34801561087957600080fd5b50610882611f78565b60405161088f91906143dd565b60405180910390f35b3480156108a457600080fd5b506108bf60048036038101906108ba9190613825565b611f9e565b005b3480156108cd57600080fd5b506108e860048036038101906108e39190613a10565b612000565b6040516108f5919061449c565b60405180910390f35b34801561090a57600080fd5b50610913612152565b604051610920919061475e565b60405180910390f35b34801561093557600080fd5b50610950600480360381019061094b9190613748565b612158565b60405161095d9190614466565b60405180910390f35b34801561097257600080fd5b5061098d600480360381019061098891906139cf565b612178565b005b34801561099b57600080fd5b506109b660048036038101906109b1919061379a565b61220e565b6040516109c39190614466565b60405180910390f35b3480156109d857600080fd5b506109e16122a2565b6040516109ee9190614466565b60405180910390f35b348015610a0357600080fd5b50610a1e6004803603810190610a199190613748565b6122b5565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a935750610a92826123ad565b5b9050919050565b610aa261248f565b73ffffffffffffffffffffffffffffffffffffffff16610ac0611b41565b73ffffffffffffffffffffffffffffffffffffffff1614610b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0d9061465e565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b606060008054610b4290614a30565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6e90614a30565b8015610bbb5780601f10610b9057610100808354040283529160200191610bbb565b820191906000526020600020905b815481529060010190602001808311610b9e57829003601f168201915b5050505050905090565b6000610bd082612497565b610c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c069061463e565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c5582611802565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbd906146de565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ce561248f565b73ffffffffffffffffffffffffffffffffffffffff161480610d145750610d1381610d0e61248f565b61220e565b5b610d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4a9061459e565b60405180910390fd5b610d5d8383612503565b505050565b600e5481565b6000600880549050905090565b60115481565b60105481565b610d92610d8c61248f565b826125bc565b610dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc8906146fe565b60405180910390fd5b610ddc83838361269a565b505050565b6000610dec836118b4565b8210610e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e24906144be565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e8e61248f565b73ffffffffffffffffffffffffffffffffffffffff16610eac611b41565b73ffffffffffffffffffffffffffffffffffffffff1614610f02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef99061465e565b60405180910390fd5b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610f6561248f565b73ffffffffffffffffffffffffffffffffffffffff16610f83611b41565b73ffffffffffffffffffffffffffffffffffffffff1614610fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd09061465e565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061101757600080fd5b565b6000611023610d68565b90506000611030846117d8565b9050601260009054906101000a900460ff161561104c57600080fd5b6000831161105957600080fd5b6010548184611068919061489b565b111561107357600080fd5b60115483111561108257600080fd5b600f548383611091919061489b565b111561109c57600080fd5b6110a4611b41565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461137b5760011515601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461137a576000601260029054906101000a900460ff16801561115857506013548484611156919061489b565b115b15611198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118f9061473e565b60405180910390fd5b6000600190505b8481116113345760fa81856111b4919061489b565b116111e3576111c966f8b0a10e4700006128f6565b66f8b0a10e470000826111dc919061489b565b9150611321565b6101f481856111f2919061489b565b116112215761120766f8b0a10e4700006128f6565b66f8b0a10e4700008261121a919061489b565b9150611320565b6102ee8185611230919061489b565b116112615761124667016345785d8a00006128f6565b67016345785d8a00008261125a919061489b565b915061131f565b6103e88185611270919061489b565b116112a1576112866701aa535d3d0c00006128f6565b6701aa535d3d0c00008261129a919061489b565b915061131e565b6103e981856112b0919061489b565b14156112e2576112c7670214e8348c4f00006128f6565b670214e8348c4f0000826112db919061489b565b915061131d565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611314906146be565b60405180910390fd5b5b5b5b5b808061132c90614a62565b91505061119f565b5080341015611378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136f906145be565b60405180910390fd5b505b5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156113e3573d6000803e3d6000fd5b506000600190505b83811161141a57611407858285611402919061489b565b61290a565b808061141290614a62565b9150506113eb565b5050505050565b61143c83838360405180602001604052806000815250611f9e565b505050565b6060600061144e836118b4565b905060008167ffffffffffffffff811115611492577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156114c05781602001602082028036833780820191505090505b50905060005b82811015611530576114d88582610de1565b828281518110611511577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061152890614a62565b9150506114c6565b508092505050919050565b61154361248f565b73ffffffffffffffffffffffffffffffffffffffff16611561611b41565b73ffffffffffffffffffffffffffffffffffffffff16146115b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ae9061465e565b60405180910390fd5b80600e8190555050565b6115c961248f565b73ffffffffffffffffffffffffffffffffffffffff166115e7611b41565b73ffffffffffffffffffffffffffffffffffffffff161461163d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116349061465e565b60405180910390fd5b6001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006116a2610d68565b82106116e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116da9061471e565b60405180910390fd5b6008828154811061171d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b601260019054906101000a900460ff1681565b61174a61248f565b73ffffffffffffffffffffffffffffffffffffffff16611768611b41565b73ffffffffffffffffffffffffffffffffffffffff16146117be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b59061465e565b60405180910390fd5b80600b90805190602001906117d4929190613557565b5050565b6000806117e4836118b4565b905080915050919050565b601260009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a2906145fe565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191c906145de565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61197461248f565b73ffffffffffffffffffffffffffffffffffffffff16611992611b41565b73ffffffffffffffffffffffffffffffffffffffff16146119e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119df9061465e565b60405180910390fd5b6119f26000612928565b565b6119fc61248f565b73ffffffffffffffffffffffffffffffffffffffff16611a1a611b41565b73ffffffffffffffffffffffffffffffffffffffff1614611a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a679061465e565b60405180910390fd5b8060108190555050565b611a8261248f565b73ffffffffffffffffffffffffffffffffffffffff16611aa0611b41565b73ffffffffffffffffffffffffffffffffffffffff1614611af6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aed9061465e565b60405180910390fd5b81601260026101000a81548160ff021916908315150217905550806013819055505050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611b7a90614a30565b80601f0160208091040260200160405190810160405280929190818152602001828054611ba690614a30565b8015611bf35780601f10611bc857610100808354040283529160200191611bf3565b820191906000526020600020905b815481529060010190602001808311611bd657829003601f168201915b5050505050905090565b611c0561248f565b73ffffffffffffffffffffffffffffffffffffffff16611c23611b41565b73ffffffffffffffffffffffffffffffffffffffff1614611c79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c709061465e565b60405180910390fd5b60008290505b818111611d53576000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401611ce3919061475e565b60206040518083038186803b158015611cfb57600080fd5b505afa158015611d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d339190613771565b9050611d3f818361290a565b508080611d4b90614a62565b915050611c7f565b505050565b60135481565b611d6661248f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611dd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcb9061455e565b60405180910390fd5b8060056000611de161248f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611e8e61248f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ed39190614466565b60405180910390a35050565b611ee761248f565b73ffffffffffffffffffffffffffffffffffffffff16611f05611b41565b73ffffffffffffffffffffffffffffffffffffffff1614611f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f529061465e565b60405180910390fd5b6001601260016101000a81548160ff021916908315150217905550565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611faf611fa961248f565b836125bc565b611fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe5906146fe565b60405180910390fd5b611ffa848484846129ee565b50505050565b606061200b82612497565b61204a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120419061469e565b60405180910390fd5b6000612054612a4a565b9050601260019054906101000a900460ff166120fd57600d805461207790614a30565b80601f01602080910402602001604051908101604052809291908181526020018280546120a390614a30565b80156120f05780601f106120c5576101008083540402835291602001916120f0565b820191906000526020600020905b8154815290600101906020018083116120d357829003601f168201915b505050505091505061214d565b600081511161211b5760405180602001604052806000815250612149565b8061212584612adc565b600c604051602001612139939291906143ac565b6040516020818303038152906040525b9150505b919050565b600f5481565b60146020528060005260406000206000915054906101000a900460ff1681565b61218061248f565b73ffffffffffffffffffffffffffffffffffffffff1661219e611b41565b73ffffffffffffffffffffffffffffffffffffffff16146121f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121eb9061465e565b60405180910390fd5b80600c908051906020019061220a929190613557565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b601260029054906101000a900460ff1681565b6122bd61248f565b73ffffffffffffffffffffffffffffffffffffffff166122db611b41565b73ffffffffffffffffffffffffffffffffffffffff1614612331576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123289061465e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612398906144fe565b60405180910390fd5b6123aa81612928565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061247857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612488575061248782612c89565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661257683611802565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006125c782612497565b612606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fd9061457e565b60405180910390fd5b600061261183611802565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061268057508373ffffffffffffffffffffffffffffffffffffffff1661266884610bc5565b73ffffffffffffffffffffffffffffffffffffffff16145b806126915750612690818561220e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166126ba82611802565b73ffffffffffffffffffffffffffffffffffffffff1614612710576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127079061467e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612780576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127779061453e565b60405180910390fd5b61278b838383612cf3565b612796600082612503565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127e69190614922565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461283d919061489b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b80600e54146129075780600e819055505b50565b612924828260405180602001604052806000815250612e07565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6129f984848461269a565b612a0584848484612e62565b612a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3b906144de565b60405180910390fd5b50505050565b6060600b8054612a5990614a30565b80601f0160208091040260200160405190810160405280929190818152602001828054612a8590614a30565b8015612ad25780601f10612aa757610100808354040283529160200191612ad2565b820191906000526020600020905b815481529060010190602001808311612ab557829003601f168201915b5050505050905090565b60606000821415612b24576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c84565b600082905060005b60008214612b56578080612b3f90614a62565b915050600a82612b4f91906148f1565b9150612b2c565b60008167ffffffffffffffff811115612b98577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612bca5781602001600182028036833780820191505090505b5090505b60008514612c7d57600182612be39190614922565b9150600a85612bf29190614aab565b6030612bfe919061489b565b60f81b818381518110612c3a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c7691906148f1565b9450612bce565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612cfe838383612ff9565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d4157612d3c81612ffe565b612d80565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612d7f57612d7e8382613047565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612dc357612dbe816131b4565b612e02565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612e0157612e0082826132f7565b5b5b505050565b612e118383613376565b612e1e6000848484612e62565b612e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e54906144de565b60405180910390fd5b505050565b6000612e838473ffffffffffffffffffffffffffffffffffffffff16613544565b15612fec578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612eac61248f565b8786866040518563ffffffff1660e01b8152600401612ece94939291906143f8565b602060405180830381600087803b158015612ee857600080fd5b505af1925050508015612f1957506040513d601f19601f82011682018060405250810190612f1691906139a6565b60015b612f9c573d8060008114612f49576040519150601f19603f3d011682016040523d82523d6000602084013e612f4e565b606091505b50600081511415612f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8b906144de565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ff1565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613054846118b4565b61305e9190614922565b9050600060076000848152602001908152602001600020549050818114613143576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506131c89190614922565b905060006009600084815260200190815260200160002054905060006008838154811061321e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613266577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806132db577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000613302836118b4565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133dd9061461e565b60405180910390fd5b6133ef81612497565b1561342f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134269061451e565b60405180910390fd5b61343b60008383612cf3565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461348b919061489b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461356390614a30565b90600052602060002090601f01602090048101928261358557600085556135cc565b82601f1061359e57805160ff19168380011785556135cc565b828001600101855582156135cc579182015b828111156135cb5782518255916020019190600101906135b0565b5b5090506135d991906135dd565b5090565b5b808211156135f65760008160009055506001016135de565b5090565b600061360d613608846147aa565b614779565b90508281526020810184848401111561362557600080fd5b6136308482856149ee565b509392505050565b600061364b613646846147da565b614779565b90508281526020810184848401111561366357600080fd5b61366e8482856149ee565b509392505050565b60008135905061368581614ba9565b92915050565b60008151905061369a81614ba9565b92915050565b6000813590506136af81614bc0565b92915050565b6000813590506136c481614bd7565b92915050565b6000815190506136d981614bd7565b92915050565b600082601f8301126136f057600080fd5b81356137008482602086016135fa565b91505092915050565b600082601f83011261371a57600080fd5b813561372a848260208601613638565b91505092915050565b60008135905061374281614bee565b92915050565b60006020828403121561375a57600080fd5b600061376884828501613676565b91505092915050565b60006020828403121561378357600080fd5b60006137918482850161368b565b91505092915050565b600080604083850312156137ad57600080fd5b60006137bb85828601613676565b92505060206137cc85828601613676565b9150509250929050565b6000806000606084860312156137eb57600080fd5b60006137f986828701613676565b935050602061380a86828701613676565b925050604061381b86828701613733565b9150509250925092565b6000806000806080858703121561383b57600080fd5b600061384987828801613676565b945050602061385a87828801613676565b935050604061386b87828801613733565b925050606085013567ffffffffffffffff81111561388857600080fd5b613894878288016136df565b91505092959194509250565b600080604083850312156138b357600080fd5b60006138c185828601613676565b92505060206138d2858286016136a0565b9150509250929050565b600080604083850312156138ef57600080fd5b60006138fd85828601613676565b925050602061390e85828601613733565b9150509250929050565b60006020828403121561392a57600080fd5b6000613938848285016136a0565b91505092915050565b6000806040838503121561395457600080fd5b6000613962858286016136a0565b925050602061397385828601613733565b9150509250929050565b60006020828403121561398f57600080fd5b600061399d848285016136b5565b91505092915050565b6000602082840312156139b857600080fd5b60006139c6848285016136ca565b91505092915050565b6000602082840312156139e157600080fd5b600082013567ffffffffffffffff8111156139fb57600080fd5b613a0784828501613709565b91505092915050565b600060208284031215613a2257600080fd5b6000613a3084828501613733565b91505092915050565b60008060408385031215613a4c57600080fd5b6000613a5a85828601613733565b9250506020613a6b85828601613733565b9150509250929050565b6000613a81838361438e565b60208301905092915050565b613a9681614956565b82525050565b6000613aa78261482f565b613ab1818561485d565b9350613abc8361480a565b8060005b83811015613aed578151613ad48882613a75565b9750613adf83614850565b925050600181019050613ac0565b5085935050505092915050565b613b0381614968565b82525050565b6000613b148261483a565b613b1e818561486e565b9350613b2e8185602086016149fd565b613b3781614b98565b840191505092915050565b613b4b816149ca565b82525050565b6000613b5c82614845565b613b66818561487f565b9350613b768185602086016149fd565b613b7f81614b98565b840191505092915050565b6000613b9582614845565b613b9f8185614890565b9350613baf8185602086016149fd565b80840191505092915050565b60008154613bc881614a30565b613bd28186614890565b94506001821660008114613bed5760018114613bfe57613c31565b60ff19831686528186019350613c31565b613c078561481a565b60005b83811015613c2957815481890152600182019150602081019050613c0a565b838801955050505b50505092915050565b6000613c47602b8361487f565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000613cad60328361487f565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000613d1360268361487f565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d79601c8361487f565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000613db960248361487f565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e1f60198361487f565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000613e5f602c8361487f565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613ec560388361487f565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613f2b600a8361487f565b91507f4e6f7420656e6f756768000000000000000000000000000000000000000000006000830152602082019050919050565b6000613f6b602a8361487f565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613fd160298361487f565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b600061403760208361487f565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000614077602c8361487f565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006140dd60208361487f565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061411d60298361487f565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614183602f8361487f565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b60006141e960108361487f565b91507f457863656564696e6720537570706c79000000000000000000000000000000006000830152602082019050919050565b600061422960218361487f565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061428f60318361487f565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b60006142f5602c8361487f565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b600061435b600d8361487f565b91507f4175746f207061757365642121000000000000000000000000000000000000006000830152602082019050919050565b614397816149c0565b82525050565b6143a6816149c0565b82525050565b60006143b88286613b8a565b91506143c48285613b8a565b91506143d08284613bbb565b9150819050949350505050565b60006020820190506143f26000830184613a8d565b92915050565b600060808201905061440d6000830187613a8d565b61441a6020830186613a8d565b614427604083018561439d565b81810360608301526144398184613b09565b905095945050505050565b6000602082019050818103600083015261445e8184613a9c565b905092915050565b600060208201905061447b6000830184613afa565b92915050565b60006020820190506144966000830184613b42565b92915050565b600060208201905081810360008301526144b68184613b51565b905092915050565b600060208201905081810360008301526144d781613c3a565b9050919050565b600060208201905081810360008301526144f781613ca0565b9050919050565b6000602082019050818103600083015261451781613d06565b9050919050565b6000602082019050818103600083015261453781613d6c565b9050919050565b6000602082019050818103600083015261455781613dac565b9050919050565b6000602082019050818103600083015261457781613e12565b9050919050565b6000602082019050818103600083015261459781613e52565b9050919050565b600060208201905081810360008301526145b781613eb8565b9050919050565b600060208201905081810360008301526145d781613f1e565b9050919050565b600060208201905081810360008301526145f781613f5e565b9050919050565b6000602082019050818103600083015261461781613fc4565b9050919050565b600060208201905081810360008301526146378161402a565b9050919050565b600060208201905081810360008301526146578161406a565b9050919050565b60006020820190508181036000830152614677816140d0565b9050919050565b6000602082019050818103600083015261469781614110565b9050919050565b600060208201905081810360008301526146b781614176565b9050919050565b600060208201905081810360008301526146d7816141dc565b9050919050565b600060208201905081810360008301526146f78161421c565b9050919050565b6000602082019050818103600083015261471781614282565b9050919050565b60006020820190508181036000830152614737816142e8565b9050919050565b600060208201905081810360008301526147578161434e565b9050919050565b6000602082019050614773600083018461439d565b92915050565b6000604051905081810181811067ffffffffffffffff821117156147a05761479f614b69565b5b8060405250919050565b600067ffffffffffffffff8211156147c5576147c4614b69565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156147f5576147f4614b69565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006148a6826149c0565b91506148b1836149c0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148e6576148e5614adc565b5b828201905092915050565b60006148fc826149c0565b9150614907836149c0565b92508261491757614916614b0b565b5b828204905092915050565b600061492d826149c0565b9150614938836149c0565b92508282101561494b5761494a614adc565b5b828203905092915050565b6000614961826149a0565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006149d5826149dc565b9050919050565b60006149e7826149a0565b9050919050565b82818337600083830152505050565b60005b83811015614a1b578082015181840152602081019050614a00565b83811115614a2a576000848401525b50505050565b60006002820490506001821680614a4857607f821691505b60208210811415614a5c57614a5b614b3a565b5b50919050565b6000614a6d826149c0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614aa057614a9f614adc565b5b600182019050919050565b6000614ab6826149c0565b9150614ac1836149c0565b925082614ad157614ad0614b0b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b614bb281614956565b8114614bbd57600080fd5b50565b614bc981614968565b8114614bd457600080fd5b50565b614be081614974565b8114614beb57600080fd5b50565b614bf7816149c0565b8114614c0257600080fd5b5056fea264697066735822122026462cf0b2267f76ddc544e9e6f4939257145a4f8f3d2bc142b66167bf50320e64736f6c6343000800003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000018000000000000000000000000026a8cd618a6b812feb0691ce21c98d3bb4a594ab0000000000000000000000000000000000000000000000000000000000000018464f555220454d5045524f525320434f4c4c454354494f4e00000000000000000000000000000000000000000000000000000000000000000000000000000008596f6e6b6f4e46540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d55313143515959336543736e72656b50586461464e4a6e547234476a32596d7a347a335568384a4a525636582f000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d5339547554663338794d39566a6255623644796f4479354c364a4a6f5636474d454d766e5646695353345a342f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102675760003560e01c80635c975abb11610144578063a22cb465116100b6578063d5abeb011161007a578063d5abeb01146108fe578063d936547e14610929578063da3ef23f14610966578063e985e9c51461098f578063ee4de643146109cc578063f2fde38b146109f757610267565b8063a22cb4651461082d578063a475b5dd14610856578063b3f006741461086d578063b88d4fde14610898578063c87b56dd146108c157610267565b8063871690da11610108578063871690da1461072f5780638b7ebf94146107585780638da5cb5b1461078357806395d89b41146107ae57806398d9b49c146107d95780639e32adc91461080257610267565b80635c975abb1461064a5780636352211e1461067557806370a08231146106b2578063715018a6146106ef5780637f00c7a61461070657610267565b806330cc7ae0116101dd57806344a0d68a116101a157806344a0d68a1461052a5780634a4c560d146105535780634f6ccce71461057c57806351830227146105b957806355f804b3146105e457806356225a091461060d57610267565b806330cc7ae0146104755780633ccfd60b1461049e57806340c10f19146104a857806342842e0e146104c4578063438b6300146104ed57610267565b806313faede61161022f57806313faede61461036357806318160ddd1461038e578063191ff898146103b9578063239c70ae146103e457806323b872dd1461040f5780632f745c591461043857610267565b806301ffc9a71461026c57806302329a29146102a957806306fdde03146102d2578063081812fc146102fd578063095ea7b31461033a575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e919061397d565b610a20565b6040516102a09190614466565b60405180910390f35b3480156102b557600080fd5b506102d060048036038101906102cb9190613918565b610a9a565b005b3480156102de57600080fd5b506102e7610b33565b6040516102f4919061449c565b60405180910390f35b34801561030957600080fd5b50610324600480360381019061031f9190613a10565b610bc5565b60405161033191906143dd565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c91906138dc565b610c4a565b005b34801561036f57600080fd5b50610378610d62565b604051610385919061475e565b60405180910390f35b34801561039a57600080fd5b506103a3610d68565b6040516103b0919061475e565b60405180910390f35b3480156103c557600080fd5b506103ce610d75565b6040516103db919061475e565b60405180910390f35b3480156103f057600080fd5b506103f9610d7b565b604051610406919061475e565b60405180910390f35b34801561041b57600080fd5b50610436600480360381019061043191906137d6565b610d81565b005b34801561044457600080fd5b5061045f600480360381019061045a91906138dc565b610de1565b60405161046c919061475e565b60405180910390f35b34801561048157600080fd5b5061049c60048036038101906104979190613748565b610e86565b005b6104a6610f5d565b005b6104c260048036038101906104bd91906138dc565b611019565b005b3480156104d057600080fd5b506104eb60048036038101906104e691906137d6565b611421565b005b3480156104f957600080fd5b50610514600480360381019061050f9190613748565b611441565b6040516105219190614444565b60405180910390f35b34801561053657600080fd5b50610551600480360381019061054c9190613a10565b61153b565b005b34801561055f57600080fd5b5061057a60048036038101906105759190613748565b6115c1565b005b34801561058857600080fd5b506105a3600480360381019061059e9190613a10565b611698565b6040516105b0919061475e565b60405180910390f35b3480156105c557600080fd5b506105ce61172f565b6040516105db9190614466565b60405180910390f35b3480156105f057600080fd5b5061060b600480360381019061060691906139cf565b611742565b005b34801561061957600080fd5b50610634600480360381019061062f9190613748565b6117d8565b604051610641919061475e565b60405180910390f35b34801561065657600080fd5b5061065f6117ef565b60405161066c9190614466565b60405180910390f35b34801561068157600080fd5b5061069c60048036038101906106979190613a10565b611802565b6040516106a991906143dd565b60405180910390f35b3480156106be57600080fd5b506106d960048036038101906106d49190613748565b6118b4565b6040516106e6919061475e565b60405180910390f35b3480156106fb57600080fd5b5061070461196c565b005b34801561071257600080fd5b5061072d60048036038101906107289190613a10565b6119f4565b005b34801561073b57600080fd5b5061075660048036038101906107519190613941565b611a7a565b005b34801561076457600080fd5b5061076d611b1b565b60405161077a9190614481565b60405180910390f35b34801561078f57600080fd5b50610798611b41565b6040516107a591906143dd565b60405180910390f35b3480156107ba57600080fd5b506107c3611b6b565b6040516107d0919061449c565b60405180910390f35b3480156107e557600080fd5b5061080060048036038101906107fb9190613a39565b611bfd565b005b34801561080e57600080fd5b50610817611d58565b604051610824919061475e565b60405180910390f35b34801561083957600080fd5b50610854600480360381019061084f91906138a0565b611d5e565b005b34801561086257600080fd5b5061086b611edf565b005b34801561087957600080fd5b50610882611f78565b60405161088f91906143dd565b60405180910390f35b3480156108a457600080fd5b506108bf60048036038101906108ba9190613825565b611f9e565b005b3480156108cd57600080fd5b506108e860048036038101906108e39190613a10565b612000565b6040516108f5919061449c565b60405180910390f35b34801561090a57600080fd5b50610913612152565b604051610920919061475e565b60405180910390f35b34801561093557600080fd5b50610950600480360381019061094b9190613748565b612158565b60405161095d9190614466565b60405180910390f35b34801561097257600080fd5b5061098d600480360381019061098891906139cf565b612178565b005b34801561099b57600080fd5b506109b660048036038101906109b1919061379a565b61220e565b6040516109c39190614466565b60405180910390f35b3480156109d857600080fd5b506109e16122a2565b6040516109ee9190614466565b60405180910390f35b348015610a0357600080fd5b50610a1e6004803603810190610a199190613748565b6122b5565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a935750610a92826123ad565b5b9050919050565b610aa261248f565b73ffffffffffffffffffffffffffffffffffffffff16610ac0611b41565b73ffffffffffffffffffffffffffffffffffffffff1614610b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0d9061465e565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b606060008054610b4290614a30565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6e90614a30565b8015610bbb5780601f10610b9057610100808354040283529160200191610bbb565b820191906000526020600020905b815481529060010190602001808311610b9e57829003601f168201915b5050505050905090565b6000610bd082612497565b610c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c069061463e565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c5582611802565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbd906146de565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ce561248f565b73ffffffffffffffffffffffffffffffffffffffff161480610d145750610d1381610d0e61248f565b61220e565b5b610d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4a9061459e565b60405180910390fd5b610d5d8383612503565b505050565b600e5481565b6000600880549050905090565b60115481565b60105481565b610d92610d8c61248f565b826125bc565b610dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc8906146fe565b60405180910390fd5b610ddc83838361269a565b505050565b6000610dec836118b4565b8210610e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e24906144be565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e8e61248f565b73ffffffffffffffffffffffffffffffffffffffff16610eac611b41565b73ffffffffffffffffffffffffffffffffffffffff1614610f02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef99061465e565b60405180910390fd5b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610f6561248f565b73ffffffffffffffffffffffffffffffffffffffff16610f83611b41565b73ffffffffffffffffffffffffffffffffffffffff1614610fd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd09061465e565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061101757600080fd5b565b6000611023610d68565b90506000611030846117d8565b9050601260009054906101000a900460ff161561104c57600080fd5b6000831161105957600080fd5b6010548184611068919061489b565b111561107357600080fd5b60115483111561108257600080fd5b600f548383611091919061489b565b111561109c57600080fd5b6110a4611b41565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461137b5760011515601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461137a576000601260029054906101000a900460ff16801561115857506013548484611156919061489b565b115b15611198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118f9061473e565b60405180910390fd5b6000600190505b8481116113345760fa81856111b4919061489b565b116111e3576111c966f8b0a10e4700006128f6565b66f8b0a10e470000826111dc919061489b565b9150611321565b6101f481856111f2919061489b565b116112215761120766f8b0a10e4700006128f6565b66f8b0a10e4700008261121a919061489b565b9150611320565b6102ee8185611230919061489b565b116112615761124667016345785d8a00006128f6565b67016345785d8a00008261125a919061489b565b915061131f565b6103e88185611270919061489b565b116112a1576112866701aa535d3d0c00006128f6565b6701aa535d3d0c00008261129a919061489b565b915061131e565b6103e981856112b0919061489b565b14156112e2576112c7670214e8348c4f00006128f6565b670214e8348c4f0000826112db919061489b565b915061131d565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611314906146be565b60405180910390fd5b5b5b5b5b808061132c90614a62565b91505061119f565b5080341015611378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136f906145be565b60405180910390fd5b505b5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156113e3573d6000803e3d6000fd5b506000600190505b83811161141a57611407858285611402919061489b565b61290a565b808061141290614a62565b9150506113eb565b5050505050565b61143c83838360405180602001604052806000815250611f9e565b505050565b6060600061144e836118b4565b905060008167ffffffffffffffff811115611492577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156114c05781602001602082028036833780820191505090505b50905060005b82811015611530576114d88582610de1565b828281518110611511577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061152890614a62565b9150506114c6565b508092505050919050565b61154361248f565b73ffffffffffffffffffffffffffffffffffffffff16611561611b41565b73ffffffffffffffffffffffffffffffffffffffff16146115b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ae9061465e565b60405180910390fd5b80600e8190555050565b6115c961248f565b73ffffffffffffffffffffffffffffffffffffffff166115e7611b41565b73ffffffffffffffffffffffffffffffffffffffff161461163d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116349061465e565b60405180910390fd5b6001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006116a2610d68565b82106116e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116da9061471e565b60405180910390fd5b6008828154811061171d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b601260019054906101000a900460ff1681565b61174a61248f565b73ffffffffffffffffffffffffffffffffffffffff16611768611b41565b73ffffffffffffffffffffffffffffffffffffffff16146117be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b59061465e565b60405180910390fd5b80600b90805190602001906117d4929190613557565b5050565b6000806117e4836118b4565b905080915050919050565b601260009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a2906145fe565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191c906145de565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61197461248f565b73ffffffffffffffffffffffffffffffffffffffff16611992611b41565b73ffffffffffffffffffffffffffffffffffffffff16146119e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119df9061465e565b60405180910390fd5b6119f26000612928565b565b6119fc61248f565b73ffffffffffffffffffffffffffffffffffffffff16611a1a611b41565b73ffffffffffffffffffffffffffffffffffffffff1614611a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a679061465e565b60405180910390fd5b8060108190555050565b611a8261248f565b73ffffffffffffffffffffffffffffffffffffffff16611aa0611b41565b73ffffffffffffffffffffffffffffffffffffffff1614611af6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aed9061465e565b60405180910390fd5b81601260026101000a81548160ff021916908315150217905550806013819055505050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611b7a90614a30565b80601f0160208091040260200160405190810160405280929190818152602001828054611ba690614a30565b8015611bf35780601f10611bc857610100808354040283529160200191611bf3565b820191906000526020600020905b815481529060010190602001808311611bd657829003601f168201915b5050505050905090565b611c0561248f565b73ffffffffffffffffffffffffffffffffffffffff16611c23611b41565b73ffffffffffffffffffffffffffffffffffffffff1614611c79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c709061465e565b60405180910390fd5b60008290505b818111611d53576000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401611ce3919061475e565b60206040518083038186803b158015611cfb57600080fd5b505afa158015611d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d339190613771565b9050611d3f818361290a565b508080611d4b90614a62565b915050611c7f565b505050565b60135481565b611d6661248f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611dd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcb9061455e565b60405180910390fd5b8060056000611de161248f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611e8e61248f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ed39190614466565b60405180910390a35050565b611ee761248f565b73ffffffffffffffffffffffffffffffffffffffff16611f05611b41565b73ffffffffffffffffffffffffffffffffffffffff1614611f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f529061465e565b60405180910390fd5b6001601260016101000a81548160ff021916908315150217905550565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611faf611fa961248f565b836125bc565b611fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe5906146fe565b60405180910390fd5b611ffa848484846129ee565b50505050565b606061200b82612497565b61204a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120419061469e565b60405180910390fd5b6000612054612a4a565b9050601260019054906101000a900460ff166120fd57600d805461207790614a30565b80601f01602080910402602001604051908101604052809291908181526020018280546120a390614a30565b80156120f05780601f106120c5576101008083540402835291602001916120f0565b820191906000526020600020905b8154815290600101906020018083116120d357829003601f168201915b505050505091505061214d565b600081511161211b5760405180602001604052806000815250612149565b8061212584612adc565b600c604051602001612139939291906143ac565b6040516020818303038152906040525b9150505b919050565b600f5481565b60146020528060005260406000206000915054906101000a900460ff1681565b61218061248f565b73ffffffffffffffffffffffffffffffffffffffff1661219e611b41565b73ffffffffffffffffffffffffffffffffffffffff16146121f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121eb9061465e565b60405180910390fd5b80600c908051906020019061220a929190613557565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b601260029054906101000a900460ff1681565b6122bd61248f565b73ffffffffffffffffffffffffffffffffffffffff166122db611b41565b73ffffffffffffffffffffffffffffffffffffffff1614612331576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123289061465e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612398906144fe565b60405180910390fd5b6123aa81612928565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061247857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612488575061248782612c89565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661257683611802565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006125c782612497565b612606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fd9061457e565b60405180910390fd5b600061261183611802565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061268057508373ffffffffffffffffffffffffffffffffffffffff1661266884610bc5565b73ffffffffffffffffffffffffffffffffffffffff16145b806126915750612690818561220e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166126ba82611802565b73ffffffffffffffffffffffffffffffffffffffff1614612710576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127079061467e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612780576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127779061453e565b60405180910390fd5b61278b838383612cf3565b612796600082612503565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127e69190614922565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461283d919061489b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b80600e54146129075780600e819055505b50565b612924828260405180602001604052806000815250612e07565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6129f984848461269a565b612a0584848484612e62565b612a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3b906144de565b60405180910390fd5b50505050565b6060600b8054612a5990614a30565b80601f0160208091040260200160405190810160405280929190818152602001828054612a8590614a30565b8015612ad25780601f10612aa757610100808354040283529160200191612ad2565b820191906000526020600020905b815481529060010190602001808311612ab557829003601f168201915b5050505050905090565b60606000821415612b24576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c84565b600082905060005b60008214612b56578080612b3f90614a62565b915050600a82612b4f91906148f1565b9150612b2c565b60008167ffffffffffffffff811115612b98577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612bca5781602001600182028036833780820191505090505b5090505b60008514612c7d57600182612be39190614922565b9150600a85612bf29190614aab565b6030612bfe919061489b565b60f81b818381518110612c3a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c7691906148f1565b9450612bce565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612cfe838383612ff9565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d4157612d3c81612ffe565b612d80565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612d7f57612d7e8382613047565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612dc357612dbe816131b4565b612e02565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612e0157612e0082826132f7565b5b5b505050565b612e118383613376565b612e1e6000848484612e62565b612e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e54906144de565b60405180910390fd5b505050565b6000612e838473ffffffffffffffffffffffffffffffffffffffff16613544565b15612fec578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612eac61248f565b8786866040518563ffffffff1660e01b8152600401612ece94939291906143f8565b602060405180830381600087803b158015612ee857600080fd5b505af1925050508015612f1957506040513d601f19601f82011682018060405250810190612f1691906139a6565b60015b612f9c573d8060008114612f49576040519150601f19603f3d011682016040523d82523d6000602084013e612f4e565b606091505b50600081511415612f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8b906144de565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ff1565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613054846118b4565b61305e9190614922565b9050600060076000848152602001908152602001600020549050818114613143576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506131c89190614922565b905060006009600084815260200190815260200160002054905060006008838154811061321e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613266577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806132db577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000613302836118b4565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133dd9061461e565b60405180910390fd5b6133ef81612497565b1561342f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134269061451e565b60405180910390fd5b61343b60008383612cf3565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461348b919061489b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461356390614a30565b90600052602060002090601f01602090048101928261358557600085556135cc565b82601f1061359e57805160ff19168380011785556135cc565b828001600101855582156135cc579182015b828111156135cb5782518255916020019190600101906135b0565b5b5090506135d991906135dd565b5090565b5b808211156135f65760008160009055506001016135de565b5090565b600061360d613608846147aa565b614779565b90508281526020810184848401111561362557600080fd5b6136308482856149ee565b509392505050565b600061364b613646846147da565b614779565b90508281526020810184848401111561366357600080fd5b61366e8482856149ee565b509392505050565b60008135905061368581614ba9565b92915050565b60008151905061369a81614ba9565b92915050565b6000813590506136af81614bc0565b92915050565b6000813590506136c481614bd7565b92915050565b6000815190506136d981614bd7565b92915050565b600082601f8301126136f057600080fd5b81356137008482602086016135fa565b91505092915050565b600082601f83011261371a57600080fd5b813561372a848260208601613638565b91505092915050565b60008135905061374281614bee565b92915050565b60006020828403121561375a57600080fd5b600061376884828501613676565b91505092915050565b60006020828403121561378357600080fd5b60006137918482850161368b565b91505092915050565b600080604083850312156137ad57600080fd5b60006137bb85828601613676565b92505060206137cc85828601613676565b9150509250929050565b6000806000606084860312156137eb57600080fd5b60006137f986828701613676565b935050602061380a86828701613676565b925050604061381b86828701613733565b9150509250925092565b6000806000806080858703121561383b57600080fd5b600061384987828801613676565b945050602061385a87828801613676565b935050604061386b87828801613733565b925050606085013567ffffffffffffffff81111561388857600080fd5b613894878288016136df565b91505092959194509250565b600080604083850312156138b357600080fd5b60006138c185828601613676565b92505060206138d2858286016136a0565b9150509250929050565b600080604083850312156138ef57600080fd5b60006138fd85828601613676565b925050602061390e85828601613733565b9150509250929050565b60006020828403121561392a57600080fd5b6000613938848285016136a0565b91505092915050565b6000806040838503121561395457600080fd5b6000613962858286016136a0565b925050602061397385828601613733565b9150509250929050565b60006020828403121561398f57600080fd5b600061399d848285016136b5565b91505092915050565b6000602082840312156139b857600080fd5b60006139c6848285016136ca565b91505092915050565b6000602082840312156139e157600080fd5b600082013567ffffffffffffffff8111156139fb57600080fd5b613a0784828501613709565b91505092915050565b600060208284031215613a2257600080fd5b6000613a3084828501613733565b91505092915050565b60008060408385031215613a4c57600080fd5b6000613a5a85828601613733565b9250506020613a6b85828601613733565b9150509250929050565b6000613a81838361438e565b60208301905092915050565b613a9681614956565b82525050565b6000613aa78261482f565b613ab1818561485d565b9350613abc8361480a565b8060005b83811015613aed578151613ad48882613a75565b9750613adf83614850565b925050600181019050613ac0565b5085935050505092915050565b613b0381614968565b82525050565b6000613b148261483a565b613b1e818561486e565b9350613b2e8185602086016149fd565b613b3781614b98565b840191505092915050565b613b4b816149ca565b82525050565b6000613b5c82614845565b613b66818561487f565b9350613b768185602086016149fd565b613b7f81614b98565b840191505092915050565b6000613b9582614845565b613b9f8185614890565b9350613baf8185602086016149fd565b80840191505092915050565b60008154613bc881614a30565b613bd28186614890565b94506001821660008114613bed5760018114613bfe57613c31565b60ff19831686528186019350613c31565b613c078561481a565b60005b83811015613c2957815481890152600182019150602081019050613c0a565b838801955050505b50505092915050565b6000613c47602b8361487f565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000613cad60328361487f565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000613d1360268361487f565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d79601c8361487f565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000613db960248361487f565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e1f60198361487f565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000613e5f602c8361487f565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613ec560388361487f565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613f2b600a8361487f565b91507f4e6f7420656e6f756768000000000000000000000000000000000000000000006000830152602082019050919050565b6000613f6b602a8361487f565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613fd160298361487f565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b600061403760208361487f565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000614077602c8361487f565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006140dd60208361487f565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061411d60298361487f565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614183602f8361487f565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b60006141e960108361487f565b91507f457863656564696e6720537570706c79000000000000000000000000000000006000830152602082019050919050565b600061422960218361487f565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061428f60318361487f565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b60006142f5602c8361487f565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b600061435b600d8361487f565b91507f4175746f207061757365642121000000000000000000000000000000000000006000830152602082019050919050565b614397816149c0565b82525050565b6143a6816149c0565b82525050565b60006143b88286613b8a565b91506143c48285613b8a565b91506143d08284613bbb565b9150819050949350505050565b60006020820190506143f26000830184613a8d565b92915050565b600060808201905061440d6000830187613a8d565b61441a6020830186613a8d565b614427604083018561439d565b81810360608301526144398184613b09565b905095945050505050565b6000602082019050818103600083015261445e8184613a9c565b905092915050565b600060208201905061447b6000830184613afa565b92915050565b60006020820190506144966000830184613b42565b92915050565b600060208201905081810360008301526144b68184613b51565b905092915050565b600060208201905081810360008301526144d781613c3a565b9050919050565b600060208201905081810360008301526144f781613ca0565b9050919050565b6000602082019050818103600083015261451781613d06565b9050919050565b6000602082019050818103600083015261453781613d6c565b9050919050565b6000602082019050818103600083015261455781613dac565b9050919050565b6000602082019050818103600083015261457781613e12565b9050919050565b6000602082019050818103600083015261459781613e52565b9050919050565b600060208201905081810360008301526145b781613eb8565b9050919050565b600060208201905081810360008301526145d781613f1e565b9050919050565b600060208201905081810360008301526145f781613f5e565b9050919050565b6000602082019050818103600083015261461781613fc4565b9050919050565b600060208201905081810360008301526146378161402a565b9050919050565b600060208201905081810360008301526146578161406a565b9050919050565b60006020820190508181036000830152614677816140d0565b9050919050565b6000602082019050818103600083015261469781614110565b9050919050565b600060208201905081810360008301526146b781614176565b9050919050565b600060208201905081810360008301526146d7816141dc565b9050919050565b600060208201905081810360008301526146f78161421c565b9050919050565b6000602082019050818103600083015261471781614282565b9050919050565b60006020820190508181036000830152614737816142e8565b9050919050565b600060208201905081810360008301526147578161434e565b9050919050565b6000602082019050614773600083018461439d565b92915050565b6000604051905081810181811067ffffffffffffffff821117156147a05761479f614b69565b5b8060405250919050565b600067ffffffffffffffff8211156147c5576147c4614b69565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156147f5576147f4614b69565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006148a6826149c0565b91506148b1836149c0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148e6576148e5614adc565b5b828201905092915050565b60006148fc826149c0565b9150614907836149c0565b92508261491757614916614b0b565b5b828204905092915050565b600061492d826149c0565b9150614938836149c0565b92508282101561494b5761494a614adc565b5b828203905092915050565b6000614961826149a0565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006149d5826149dc565b9050919050565b60006149e7826149a0565b9050919050565b82818337600083830152505050565b60005b83811015614a1b578082015181840152602081019050614a00565b83811115614a2a576000848401525b50505050565b60006002820490506001821680614a4857607f821691505b60208210811415614a5c57614a5b614b3a565b5b50919050565b6000614a6d826149c0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614aa057614a9f614adc565b5b600182019050919050565b6000614ab6826149c0565b9150614ac1836149c0565b925082614ad157614ad0614b0b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b614bb281614956565b8114614bbd57600080fd5b50565b614bc981614968565b8114614bd457600080fd5b50565b614be081614974565b8114614beb57600080fd5b50565b614bf7816149c0565b8114614c0257600080fd5b5056fea264697066735822122026462cf0b2267f76ddc544e9e6f4939257145a4f8f3d2bc142b66167bf50320e64736f6c63430008000033

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

00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000018000000000000000000000000026a8cd618a6b812feb0691ce21c98d3bb4a594ab0000000000000000000000000000000000000000000000000000000000000018464f555220454d5045524f525320434f4c4c454354494f4e00000000000000000000000000000000000000000000000000000000000000000000000000000008596f6e6b6f4e46540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d55313143515959336543736e72656b50586461464e4a6e547234476a32596d7a347a335568384a4a525636582f000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d5339547554663338794d39566a6255623644796f4479354c364a4a6f5636474d454d766e5646695353345a342f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): FOUR EMPERORS COLLECTION
Arg [1] : _symbol (string): YonkoNFT
Arg [2] : _initBaseURI (string): ipfs://QmU11CQYY3eCsnrekPXdaFNJnTr4Gj2Ymz4z3Uh8JJRV6X/
Arg [3] : _unrevealedUri (string): ipfs://QmS9TuTf38yM9VjbUb6DyoDy5L6JJoV6GMEMvnVFiSS4Z4/hidden.json
Arg [4] : _feeReceiver (address): 0x26a8CD618a6b812fEb0691cE21C98D3BB4A594Ab

-----Encoded View---------------
16 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [4] : 00000000000000000000000026a8cd618a6b812feb0691ce21c98d3bb4a594ab
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000018
Arg [6] : 464f555220454d5045524f525320434f4c4c454354494f4e0000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [8] : 596f6e6b6f4e4654000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [10] : 697066733a2f2f516d55313143515959336543736e72656b50586461464e4a6e
Arg [11] : 547234476a32596d7a347a335568384a4a525636582f00000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000041
Arg [13] : 697066733a2f2f516d5339547554663338794d39566a6255623644796f447935
Arg [14] : 4c364a4a6f5636474d454d766e5646695353345a342f68696464656e2e6a736f
Arg [15] : 6e00000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

43281:5293:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34740:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48172:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22632:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24191:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23714:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43468:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35380:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43578:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43541:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25081:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35048:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48351:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48457:114;;;:::i;:::-;;44566:1749;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25491:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46694:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47730:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48251:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35570:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43650:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47940:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47048:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43619:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22326:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22056:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42529:94;;;;;;;;;;;;;:::i;:::-;;47816:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44418:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43835:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41878:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22801:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46428:260;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43716:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24484:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44349:63;;;;;;;;;;;;;:::i;:::-;;43804:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25747:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47227:481;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43505:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43756:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48044:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24850:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43683:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42778:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34740:224;34842:4;34881:35;34866:50;;;:11;:50;;;;:90;;;;34920:36;34944:11;34920:23;:36::i;:::-;34866:90;34859:97;;34740:224;;;:::o;48172:73::-;42109:12;:10;:12::i;:::-;42098:23;;:7;:5;:7::i;:::-;:23;;;42090:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48233:6:::1;48224;;:15;;;;;;;;;;;;;;;;;;48172:73:::0;:::o;22632:100::-;22686:13;22719:5;22712:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22632:100;:::o;24191:221::-;24267:7;24295:16;24303:7;24295;:16::i;:::-;24287:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24380:15;:24;24396:7;24380:24;;;;;;;;;;;;;;;;;;;;;24373:31;;24191:221;;;:::o;23714:411::-;23795:13;23811:23;23826:7;23811:14;:23::i;:::-;23795:39;;23859:5;23853:11;;:2;:11;;;;23845:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23953:5;23937:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23962:37;23979:5;23986:12;:10;:12::i;:::-;23962:16;:37::i;:::-;23937:62;23915:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24096:21;24105:2;24109:7;24096:8;:21::i;:::-;23714:411;;;:::o;43468:32::-;;;;:::o;35380:113::-;35441:7;35468:10;:17;;;;35461:24;;35380:113;:::o;43578:36::-;;;;:::o;43541:32::-;;;;:::o;25081:339::-;25276:41;25295:12;:10;:12::i;:::-;25309:7;25276:18;:41::i;:::-;25268:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25384:28;25394:4;25400:2;25404:7;25384:9;:28::i;:::-;25081:339;;;:::o;35048:256::-;35145:7;35181:23;35198:5;35181:16;:23::i;:::-;35173:5;:31;35165:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35270:12;:19;35283:5;35270:19;;;;;;;;;;;;;;;:26;35290:5;35270:26;;;;;;;;;;;;35263:33;;35048:256;;;;:::o;48351:100::-;42109:12;:10;:12::i;:::-;42098:23;;:7;:5;:7::i;:::-;:23;;;42090:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48440:5:::1;48419:11;:18;48431:5;48419:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;48351:100:::0;:::o;48457:114::-;42109:12;:10;:12::i;:::-;42098:23;;:7;:5;:7::i;:::-;:23;;;42090:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48525:10:::1;48517:24;;:47;48542:21;48517:47;;;;;;;;;;;;;;;;;;;;;;;48509:56;;;::::0;::::1;;48457:114::o:0;44566:1749::-;44636:14;44653:13;:11;:13::i;:::-;44636:30;;44673:21;44697:15;44708:3;44697:10;:15::i;:::-;44673:39;;44728:6;;;;;;;;;;;44727:7;44719:16;;;;;;44764:1;44750:11;:15;44742:24;;;;;;44812:13;;44795;44781:11;:27;;;;:::i;:::-;:44;;44773:53;;;;;;44856:17;;44841:11;:32;;44833:41;;;;;;44913:9;;44898:11;44889:6;:20;;;;:::i;:::-;:33;;44881:42;;;;;;44954:7;:5;:7::i;:::-;44940:21;;:10;:21;;;44936:1233;;45004:4;44977:31;;:11;:23;44989:10;44977:23;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;44974:1188;;45025:17;45060:9;;;;;;;;;;;:50;;;;;45096:14;;45082:11;45073:6;:20;;;;:::i;:::-;:37;45060:50;45057:112;;;45130:23;;;;;;;;;;:::i;:::-;;;;;;;;45057:112;45189:6;45196:1;45189:8;;45185:906;45204:11;45199:1;:16;45185:906;;45259:3;45254:1;45245:6;:10;;;;:::i;:::-;:17;45242:834;;45286:20;45295:10;45286:8;:20::i;:::-;45342:10;45329:23;;;;;:::i;:::-;;;45242:834;;;45412:3;45407:1;45398:6;:10;;;;:::i;:::-;:17;45395:681;;45439:20;45448:10;45439:8;:20::i;:::-;45495:10;45482:23;;;;;:::i;:::-;;;45395:681;;;45565:3;45560:1;45551:6;:10;;;;:::i;:::-;:17;45548:528;;45592:19;45601:9;45592:8;:19::i;:::-;45647:9;45634:22;;;;;:::i;:::-;;;45548:528;;;45716:4;45711:1;45702:6;:10;;;;:::i;:::-;:18;45699:377;;45744:20;45753:10;45744:8;:20::i;:::-;45800:10;45787:23;;;;;:::i;:::-;;;45699:377;;;45870:4;45865:1;45856:6;:10;;;;:::i;:::-;:18;45853:223;;;45898:20;45907:10;45898:8;:20::i;:::-;45954:10;45941:23;;;;;:::i;:::-;;;45853:223;;;46030:26;;;;;;;;;;:::i;:::-;;;;;;;;45853:223;45699:377;45548:528;45395:681;45242:834;45217:3;;;;;:::i;:::-;;;;45185:906;;;;46126:9;46113;:22;;46105:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;44974:1188;;44936:1233;46185:11;;;;;;;;;;;46177:29;;:40;46207:9;46177:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46229:9;46241:1;46229:13;;46224:86;46249:11;46244:1;:16;46224:86;;46276:26;46286:3;46300:1;46291:6;:10;;;;:::i;:::-;46276:9;:26::i;:::-;46262:3;;;;;:::i;:::-;;;;46224:86;;;;44566:1749;;;;:::o;25491:185::-;25629:39;25646:4;25652:2;25656:7;25629:39;;;;;;;;;;;;:16;:39::i;:::-;25491:185;;;:::o;46694:348::-;46769:16;46797:23;46823:17;46833:6;46823:9;:17::i;:::-;46797:43;;46847:25;46889:15;46875:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46847:58;;46917:9;46912:103;46932:15;46928:1;:19;46912:103;;;46977:30;46997:6;47005:1;46977:19;:30::i;:::-;46963:8;46972:1;46963:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;46949:3;;;;;:::i;:::-;;;;46912:103;;;;47028:8;47021:15;;;;46694:348;;;:::o;47730:82::-;42109:12;:10;:12::i;:::-;42098:23;;:7;:5;:7::i;:::-;:23;;;42090:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47798:8:::1;47791:4;:15;;;;47730:82:::0;:::o;48251:93::-;42109:12;:10;:12::i;:::-;42098:23;;:7;:5;:7::i;:::-;:23;;;42090:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48334:4:::1;48313:11;:18;48325:5;48313:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;48251:93:::0;:::o;35570:233::-;35645:7;35681:30;:28;:30::i;:::-;35673:5;:38;35665:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35778:10;35789:5;35778:17;;;;;;;;;;;;;;;;;;;;;;;;35771:24;;35570:233;;;:::o;43650:28::-;;;;;;;;;;;;;:::o;47940:98::-;42109:12;:10;:12::i;:::-;42098:23;;:7;:5;:7::i;:::-;:23;;;42090:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48021:11:::1;48011:7;:21;;;;;;;;;;;;:::i;:::-;;47940:98:::0;:::o;47048:173::-;47120:7;47145:19;47167:17;47177:6;47167:9;:17::i;:::-;47145:39;;47202:11;47195:18;;;47048:173;;;:::o;43619:26::-;;;;;;;;;;;;;:::o;22326:239::-;22398:7;22418:13;22434:7;:16;22442:7;22434:16;;;;;;;;;;;;;;;;;;;;;22418:32;;22486:1;22469:19;;:5;:19;;;;22461:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22552:5;22545:12;;;22326:239;;;:::o;22056:208::-;22128:7;22173:1;22156:19;;:5;:19;;;;22148:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22240:9;:16;22250:5;22240:16;;;;;;;;;;;;;;;;22233:23;;22056:208;;;:::o;42529:94::-;42109:12;:10;:12::i;:::-;42098:23;;:7;:5;:7::i;:::-;:23;;;42090:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42594:21:::1;42612:1;42594:9;:21::i;:::-;42529:94::o:0;47816:118::-;42109:12;:10;:12::i;:::-;42098:23;;:7;:5;:7::i;:::-;:23;;;42090:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47911:17:::1;47895:13;:33;;;;47816:118:::0;:::o;44418:129::-;42109:12;:10;:12::i;:::-;42098:23;;:7;:5;:7::i;:::-;:23;;;42090:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44505:6:::1;44493:9;;:18;;;;;;;;;;;;;;;;;;44535:6;44518:14;:23;;;;44418:129:::0;;:::o;43835:80::-;;;;;;;;;;;;;:::o;41878:87::-;41924:7;41951:6;;;;;;;;;;;41944:13;;41878:87;:::o;22801:104::-;22857:13;22890:7;22883:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22801:104;:::o;46428:260::-;42109:12;:10;:12::i;:::-;42098:23;;:7;:5;:7::i;:::-;:23;;;42090:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46532:9:::1;46543:13;46532:24;;46528:155;46563:11;46558:1;:16;46528:155;;46591:21;46615:11;;;;;;;;;;;:19;;;46635:1;46615:22;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46591:46;;46648:27;46658:13;46673:1;46648:9;:27::i;:::-;46528:155;46576:3;;;;;:::i;:::-;;;;46528:155;;;;46428:260:::0;;:::o;43716:35::-;;;;:::o;24484:295::-;24599:12;:10;:12::i;:::-;24587:24;;:8;:24;;;;24579:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24699:8;24654:18;:32;24673:12;:10;:12::i;:::-;24654:32;;;;;;;;;;;;;;;:42;24687:8;24654:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;24752:8;24723:48;;24738:12;:10;:12::i;:::-;24723:48;;;24762:8;24723:48;;;;;;:::i;:::-;;;;;;;;24484:295;;:::o;44349:63::-;42109:12;:10;:12::i;:::-;42098:23;;:7;:5;:7::i;:::-;:23;;;42090:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44402:4:::1;44391:8;;:15;;;;;;;;;;;;;;;;;;44349:63::o:0;43804:26::-;;;;;;;;;;;;;:::o;25747:328::-;25922:41;25941:12;:10;:12::i;:::-;25955:7;25922:18;:41::i;:::-;25914:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26028:39;26042:4;26048:2;26052:7;26061:5;26028:13;:39::i;:::-;25747:328;;;;:::o;47227:481::-;47325:13;47366:16;47374:7;47366;:16::i;:::-;47350:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;47456:28;47487:10;:8;:10::i;:::-;47456:41;;47508:8;;;;;;;;;;;47504:52;;47535:13;47528:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47504:52;47600:1;47575:14;47569:28;:32;:133;;;;;;;;;;;;;;;;;47637:14;47653:18;:7;:16;:18::i;:::-;47673:13;47620:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47569:133;47562:140;;;47227:481;;;;:::o;43505:31::-;;;;:::o;43756:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;48044:122::-;42109:12;:10;:12::i;:::-;42098:23;;:7;:5;:7::i;:::-;:23;;;42090:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48143:17:::1;48127:13;:33;;;;;;;;;;;;:::i;:::-;;48044:122:::0;:::o;24850:164::-;24947:4;24971:18;:25;24990:5;24971:25;;;;;;;;;;;;;;;:35;24997:8;24971:35;;;;;;;;;;;;;;;;;;;;;;;;;24964:42;;24850:164;;;;:::o;43683:28::-;;;;;;;;;;;;;:::o;42778:192::-;42109:12;:10;:12::i;:::-;42098:23;;:7;:5;:7::i;:::-;:23;;;42090:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42887:1:::1;42867:22;;:8;:22;;;;42859:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42943:19;42953:8;42943:9;:19::i;:::-;42778:192:::0;:::o;21687:305::-;21789:4;21841:25;21826:40;;;:11;:40;;;;:105;;;;21898:33;21883:48;;;:11;:48;;;;21826:105;:158;;;;21948:36;21972:11;21948:23;:36::i;:::-;21826:158;21806:178;;21687:305;;;:::o;20161:98::-;20214:7;20241:10;20234:17;;20161:98;:::o;27585:127::-;27650:4;27702:1;27674:30;;:7;:16;27682:7;27674:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27667:37;;27585:127;;;:::o;31567:174::-;31669:2;31642:15;:24;31658:7;31642:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31725:7;31721:2;31687:46;;31696:23;31711:7;31696:14;:23::i;:::-;31687:46;;;;;;;;;;;;31567:174;;:::o;27879:348::-;27972:4;27997:16;28005:7;27997;:16::i;:::-;27989:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28073:13;28089:23;28104:7;28089:14;:23::i;:::-;28073:39;;28142:5;28131:16;;:7;:16;;;:51;;;;28175:7;28151:31;;:20;28163:7;28151:11;:20::i;:::-;:31;;;28131:51;:87;;;;28186:32;28203:5;28210:7;28186:16;:32::i;:::-;28131:87;28123:96;;;27879:348;;;;:::o;30871:578::-;31030:4;31003:31;;:23;31018:7;31003:14;:23::i;:::-;:31;;;30995:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31113:1;31099:16;;:2;:16;;;;31091:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31169:39;31190:4;31196:2;31200:7;31169:20;:39::i;:::-;31273:29;31290:1;31294:7;31273:8;:29::i;:::-;31334:1;31315:9;:15;31325:4;31315:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31363:1;31346:9;:13;31356:2;31346:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31394:2;31375:7;:16;31383:7;31375:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31433:7;31429:2;31414:27;;31423:4;31414:27;;;;;;;;;;;;30871:578;;;:::o;46321:101::-;46380:5;46372:4;;:13;46369:48;;46404:5;46397:4;:12;;;;46369:48;46321:101;:::o;28569:110::-;28645:26;28655:2;28659:7;28645:26;;;;;;;;;;;;:9;:26::i;:::-;28569:110;;:::o;42978:173::-;43034:16;43053:6;;;;;;;;;;;43034:25;;43079:8;43070:6;;:17;;;;;;;;;;;;;;;;;;43134:8;43103:40;;43124:8;43103:40;;;;;;;;;;;;42978:173;;:::o;26957:315::-;27114:28;27124:4;27130:2;27134:7;27114:9;:28::i;:::-;27161:48;27184:4;27190:2;27194:7;27203:5;27161:22;:48::i;:::-;27153:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26957:315;;;;:::o;44241:102::-;44301:13;44330:7;44323:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44241:102;:::o;7993:723::-;8049:13;8279:1;8270:5;:10;8266:53;;;8297:10;;;;;;;;;;;;;;;;;;;;;8266:53;8329:12;8344:5;8329:20;;8360:14;8385:78;8400:1;8392:4;:9;8385:78;;8418:8;;;;;:::i;:::-;;;;8449:2;8441:10;;;;;:::i;:::-;;;8385:78;;;8473:19;8505:6;8495:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8473:39;;8523:154;8539:1;8530:5;:10;8523:154;;8567:1;8557:11;;;;;:::i;:::-;;;8634:2;8626:5;:10;;;;:::i;:::-;8613:2;:24;;;;:::i;:::-;8600:39;;8583:6;8590;8583:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;8663:2;8654:11;;;;;:::i;:::-;;;8523:154;;;8701:6;8687:21;;;;;7993:723;;;;:::o;7518:157::-;7603:4;7642:25;7627:40;;;:11;:40;;;;7620:47;;7518:157;;;:::o;36416:589::-;36560:45;36587:4;36593:2;36597:7;36560:26;:45::i;:::-;36638:1;36622:18;;:4;:18;;;36618:187;;;36657:40;36689:7;36657:31;:40::i;:::-;36618:187;;;36727:2;36719:10;;:4;:10;;;36715:90;;36746:47;36779:4;36785:7;36746:32;:47::i;:::-;36715:90;36618:187;36833:1;36819:16;;:2;:16;;;36815:183;;;36852:45;36889:7;36852:36;:45::i;:::-;36815:183;;;36925:4;36919:10;;:2;:10;;;36915:83;;36946:40;36974:2;36978:7;36946:27;:40::i;:::-;36915:83;36815:183;36416:589;;;:::o;28906:321::-;29036:18;29042:2;29046:7;29036:5;:18::i;:::-;29087:54;29118:1;29122:2;29126:7;29135:5;29087:22;:54::i;:::-;29065:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28906:321;;;:::o;32306:799::-;32461:4;32482:15;:2;:13;;;:15::i;:::-;32478:620;;;32534:2;32518:36;;;32555:12;:10;:12::i;:::-;32569:4;32575:7;32584:5;32518:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32514:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32777:1;32760:6;:13;:18;32756:272;;;32803:60;;;;;;;;;;:::i;:::-;;;;;;;;32756:272;32978:6;32972:13;32963:6;32959:2;32955:15;32948:38;32514:529;32651:41;;;32641:51;;;:6;:51;;;;32634:58;;;;;32478:620;33082:4;33075:11;;32306:799;;;;;;;:::o;33677:126::-;;;;:::o;37728:164::-;37832:10;:17;;;;37805:15;:24;37821:7;37805:24;;;;;;;;;;;:44;;;;37860:10;37876:7;37860:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37728:164;:::o;38519:988::-;38785:22;38835:1;38810:22;38827:4;38810:16;:22::i;:::-;:26;;;;:::i;:::-;38785:51;;38847:18;38868:17;:26;38886:7;38868:26;;;;;;;;;;;;38847:47;;39015:14;39001:10;:28;38997:328;;39046:19;39068:12;:18;39081:4;39068:18;;;;;;;;;;;;;;;:34;39087:14;39068:34;;;;;;;;;;;;39046:56;;39152:11;39119:12;:18;39132:4;39119:18;;;;;;;;;;;;;;;:30;39138:10;39119:30;;;;;;;;;;;:44;;;;39269:10;39236:17;:30;39254:11;39236:30;;;;;;;;;;;:43;;;;38997:328;;39421:17;:26;39439:7;39421:26;;;;;;;;;;;39414:33;;;39465:12;:18;39478:4;39465:18;;;;;;;;;;;;;;;:34;39484:14;39465:34;;;;;;;;;;;39458:41;;;38519:988;;;;:::o;39802:1079::-;40055:22;40100:1;40080:10;:17;;;;:21;;;;:::i;:::-;40055:46;;40112:18;40133:15;:24;40149:7;40133:24;;;;;;;;;;;;40112:45;;40484:19;40506:10;40517:14;40506:26;;;;;;;;;;;;;;;;;;;;;;;;40484:48;;40570:11;40545:10;40556;40545:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;40681:10;40650:15;:28;40666:11;40650:28;;;;;;;;;;;:41;;;;40822:15;:24;40838:7;40822:24;;;;;;;;;;;40815:31;;;40857:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39802:1079;;;;:::o;37306:221::-;37391:14;37408:20;37425:2;37408:16;:20::i;:::-;37391:37;;37466:7;37439:12;:16;37452:2;37439:16;;;;;;;;;;;;;;;:24;37456:6;37439:24;;;;;;;;;;;:34;;;;37513:6;37484:17;:26;37502:7;37484:26;;;;;;;;;;;:35;;;;37306:221;;;:::o;29563:382::-;29657:1;29643:16;;:2;:16;;;;29635:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29716:16;29724:7;29716;:16::i;:::-;29715:17;29707:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29778:45;29807:1;29811:2;29815:7;29778:20;:45::i;:::-;29853:1;29836:9;:13;29846:2;29836:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29884:2;29865:7;:16;29873:7;29865:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29929:7;29925:2;29904:33;;29921:1;29904:33;;;;;;;;;;;;29563:382;;:::o;10518:387::-;10578:4;10786:12;10853:7;10841:20;10833:28;;10896:1;10889:4;:8;10882:15;;;10518:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:344::-;;458:65;473:49;515:6;473:49;:::i;:::-;458:65;:::i;:::-;449:74;;546:6;539:5;532:21;584:4;577:5;573:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;652:41;686:6;681:3;676;652:41;:::i;:::-;439:260;;;;;;:::o;705:139::-;;789:6;776:20;767:29;;805:33;832:5;805:33;:::i;:::-;757:87;;;;:::o;850:143::-;;938:6;932:13;923:22;;954:33;981:5;954:33;:::i;:::-;913:80;;;;:::o;999:133::-;;1080:6;1067:20;1058:29;;1096:30;1120:5;1096:30;:::i;:::-;1048:84;;;;:::o;1138:137::-;;1221:6;1208:20;1199:29;;1237:32;1263:5;1237:32;:::i;:::-;1189:86;;;;:::o;1281:141::-;;1368:6;1362:13;1353:22;;1384:32;1410:5;1384:32;:::i;:::-;1343:79;;;;:::o;1441:271::-;;1545:3;1538:4;1530:6;1526:17;1522:27;1512:2;;1563:1;1560;1553:12;1512:2;1603:6;1590:20;1628:78;1702:3;1694:6;1687:4;1679:6;1675:17;1628:78;:::i;:::-;1619:87;;1502:210;;;;;:::o;1732:273::-;;1837:3;1830:4;1822:6;1818:17;1814:27;1804:2;;1855:1;1852;1845:12;1804:2;1895:6;1882:20;1920:79;1995:3;1987:6;1980:4;1972:6;1968:17;1920:79;:::i;:::-;1911:88;;1794:211;;;;;:::o;2011:139::-;;2095:6;2082:20;2073:29;;2111:33;2138:5;2111:33;:::i;:::-;2063:87;;;;:::o;2156:262::-;;2264:2;2252:9;2243:7;2239:23;2235:32;2232:2;;;2280:1;2277;2270:12;2232:2;2323:1;2348:53;2393:7;2384:6;2373:9;2369:22;2348:53;:::i;:::-;2338:63;;2294:117;2222:196;;;;:::o;2424:284::-;;2543:2;2531:9;2522:7;2518:23;2514:32;2511:2;;;2559:1;2556;2549:12;2511:2;2602:1;2627:64;2683:7;2674:6;2663:9;2659:22;2627:64;:::i;:::-;2617:74;;2573:128;2501:207;;;;:::o;2714:407::-;;;2839:2;2827:9;2818:7;2814:23;2810:32;2807:2;;;2855:1;2852;2845:12;2807:2;2898:1;2923:53;2968:7;2959:6;2948:9;2944:22;2923:53;:::i;:::-;2913:63;;2869:117;3025:2;3051:53;3096:7;3087:6;3076:9;3072:22;3051:53;:::i;:::-;3041:63;;2996:118;2797:324;;;;;:::o;3127:552::-;;;;3269:2;3257:9;3248:7;3244:23;3240:32;3237:2;;;3285:1;3282;3275:12;3237:2;3328:1;3353:53;3398:7;3389:6;3378:9;3374:22;3353:53;:::i;:::-;3343:63;;3299:117;3455:2;3481:53;3526:7;3517:6;3506:9;3502:22;3481:53;:::i;:::-;3471:63;;3426:118;3583:2;3609:53;3654:7;3645:6;3634:9;3630:22;3609:53;:::i;:::-;3599:63;;3554:118;3227:452;;;;;:::o;3685:809::-;;;;;3853:3;3841:9;3832:7;3828:23;3824:33;3821:2;;;3870:1;3867;3860:12;3821:2;3913:1;3938:53;3983:7;3974:6;3963:9;3959:22;3938:53;:::i;:::-;3928:63;;3884:117;4040:2;4066:53;4111:7;4102:6;4091:9;4087:22;4066:53;:::i;:::-;4056:63;;4011:118;4168:2;4194:53;4239:7;4230:6;4219:9;4215:22;4194:53;:::i;:::-;4184:63;;4139:118;4324:2;4313:9;4309:18;4296:32;4355:18;4347:6;4344:30;4341:2;;;4387:1;4384;4377:12;4341:2;4415:62;4469:7;4460:6;4449:9;4445:22;4415:62;:::i;:::-;4405:72;;4267:220;3811:683;;;;;;;:::o;4500:401::-;;;4622:2;4610:9;4601:7;4597:23;4593:32;4590:2;;;4638:1;4635;4628:12;4590:2;4681:1;4706:53;4751:7;4742:6;4731:9;4727:22;4706:53;:::i;:::-;4696:63;;4652:117;4808:2;4834:50;4876:7;4867:6;4856:9;4852:22;4834:50;:::i;:::-;4824:60;;4779:115;4580:321;;;;;:::o;4907:407::-;;;5032:2;5020:9;5011:7;5007:23;5003:32;5000:2;;;5048:1;5045;5038:12;5000:2;5091:1;5116:53;5161:7;5152:6;5141:9;5137:22;5116:53;:::i;:::-;5106:63;;5062:117;5218:2;5244:53;5289:7;5280:6;5269:9;5265:22;5244:53;:::i;:::-;5234:63;;5189:118;4990:324;;;;;:::o;5320:256::-;;5425:2;5413:9;5404:7;5400:23;5396:32;5393:2;;;5441:1;5438;5431:12;5393:2;5484:1;5509:50;5551:7;5542:6;5531:9;5527:22;5509:50;:::i;:::-;5499:60;;5455:114;5383:193;;;;:::o;5582:401::-;;;5704:2;5692:9;5683:7;5679:23;5675:32;5672:2;;;5720:1;5717;5710:12;5672:2;5763:1;5788:50;5830:7;5821:6;5810:9;5806:22;5788:50;:::i;:::-;5778:60;;5734:114;5887:2;5913:53;5958:7;5949:6;5938:9;5934:22;5913:53;:::i;:::-;5903:63;;5858:118;5662:321;;;;;:::o;5989:260::-;;6096:2;6084:9;6075:7;6071:23;6067:32;6064:2;;;6112:1;6109;6102:12;6064:2;6155:1;6180:52;6224:7;6215:6;6204:9;6200:22;6180:52;:::i;:::-;6170:62;;6126:116;6054:195;;;;:::o;6255:282::-;;6373:2;6361:9;6352:7;6348:23;6344:32;6341:2;;;6389:1;6386;6379:12;6341:2;6432:1;6457:63;6512:7;6503:6;6492:9;6488:22;6457:63;:::i;:::-;6447:73;;6403:127;6331:206;;;;:::o;6543:375::-;;6661:2;6649:9;6640:7;6636:23;6632:32;6629:2;;;6677:1;6674;6667:12;6629:2;6748:1;6737:9;6733:17;6720:31;6778:18;6770:6;6767:30;6764:2;;;6810:1;6807;6800:12;6764:2;6838:63;6893:7;6884:6;6873:9;6869:22;6838:63;:::i;:::-;6828:73;;6691:220;6619:299;;;;:::o;6924:262::-;;7032:2;7020:9;7011:7;7007:23;7003:32;7000:2;;;7048:1;7045;7038:12;7000:2;7091:1;7116:53;7161:7;7152:6;7141:9;7137:22;7116:53;:::i;:::-;7106:63;;7062:117;6990:196;;;;:::o;7192:407::-;;;7317:2;7305:9;7296:7;7292:23;7288:32;7285:2;;;7333:1;7330;7323:12;7285:2;7376:1;7401:53;7446:7;7437:6;7426:9;7422:22;7401:53;:::i;:::-;7391:63;;7347:117;7503:2;7529:53;7574:7;7565:6;7554:9;7550:22;7529:53;:::i;:::-;7519:63;;7474:118;7275:324;;;;;:::o;7605:179::-;;7695:46;7737:3;7729:6;7695:46;:::i;:::-;7773:4;7768:3;7764:14;7750:28;;7685:99;;;;:::o;7790:118::-;7877:24;7895:5;7877:24;:::i;:::-;7872:3;7865:37;7855:53;;:::o;7944:732::-;;8092:54;8140:5;8092:54;:::i;:::-;8162:86;8241:6;8236:3;8162:86;:::i;:::-;8155:93;;8272:56;8322:5;8272:56;:::i;:::-;8351:7;8382:1;8367:284;8392:6;8389:1;8386:13;8367:284;;;8468:6;8462:13;8495:63;8554:3;8539:13;8495:63;:::i;:::-;8488:70;;8581:60;8634:6;8581:60;:::i;:::-;8571:70;;8427:224;8414:1;8411;8407:9;8402:14;;8367:284;;;8371:14;8667:3;8660:10;;8068:608;;;;;;;:::o;8682:109::-;8763:21;8778:5;8763:21;:::i;:::-;8758:3;8751:34;8741:50;;:::o;8797:360::-;;8911:38;8943:5;8911:38;:::i;:::-;8965:70;9028:6;9023:3;8965:70;:::i;:::-;8958:77;;9044:52;9089:6;9084:3;9077:4;9070:5;9066:16;9044:52;:::i;:::-;9121:29;9143:6;9121:29;:::i;:::-;9116:3;9112:39;9105:46;;8887:270;;;;;:::o;9163:161::-;9265:52;9311:5;9265:52;:::i;:::-;9260:3;9253:65;9243:81;;:::o;9330:364::-;;9446:39;9479:5;9446:39;:::i;:::-;9501:71;9565:6;9560:3;9501:71;:::i;:::-;9494:78;;9581:52;9626:6;9621:3;9614:4;9607:5;9603:16;9581:52;:::i;:::-;9658:29;9680:6;9658:29;:::i;:::-;9653:3;9649:39;9642:46;;9422:272;;;;;:::o;9700:377::-;;9834:39;9867:5;9834:39;:::i;:::-;9889:89;9971:6;9966:3;9889:89;:::i;:::-;9882:96;;9987:52;10032:6;10027:3;10020:4;10013:5;10009:16;9987:52;:::i;:::-;10064:6;10059:3;10055:16;10048:23;;9810:267;;;;;:::o;10107:845::-;;10247:5;10241:12;10276:36;10302:9;10276:36;:::i;:::-;10328:89;10410:6;10405:3;10328:89;:::i;:::-;10321:96;;10448:1;10437:9;10433:17;10464:1;10459:137;;;;10610:1;10605:341;;;;10426:520;;10459:137;10543:4;10539:9;10528;10524:25;10519:3;10512:38;10579:6;10574:3;10570:16;10563:23;;10459:137;;10605:341;10672:38;10704:5;10672:38;:::i;:::-;10732:1;10746:154;10760:6;10757:1;10754:13;10746:154;;;10834:7;10828:14;10824:1;10819:3;10815:11;10808:35;10884:1;10875:7;10871:15;10860:26;;10782:4;10779:1;10775:12;10770:17;;10746:154;;;10929:6;10924:3;10920:16;10913:23;;10612:334;;10426:520;;10214:738;;;;;;:::o;10958:375::-;;11121:67;11185:2;11180:3;11121:67;:::i;:::-;11114:74;;11218:34;11214:1;11209:3;11205:11;11198:55;11284:13;11279:2;11274:3;11270:12;11263:35;11324:2;11319:3;11315:12;11308:19;;11104:229;;;:::o;11339:382::-;;11502:67;11566:2;11561:3;11502:67;:::i;:::-;11495:74;;11599:34;11595:1;11590:3;11586:11;11579:55;11665:20;11660:2;11655:3;11651:12;11644:42;11712:2;11707:3;11703:12;11696:19;;11485:236;;;:::o;11727:370::-;;11890:67;11954:2;11949:3;11890:67;:::i;:::-;11883:74;;11987:34;11983:1;11978:3;11974:11;11967:55;12053:8;12048:2;12043:3;12039:12;12032:30;12088:2;12083:3;12079:12;12072:19;;11873:224;;;:::o;12103:326::-;;12266:67;12330:2;12325:3;12266:67;:::i;:::-;12259:74;;12363:30;12359:1;12354:3;12350:11;12343:51;12420:2;12415:3;12411:12;12404:19;;12249:180;;;:::o;12435:368::-;;12598:67;12662:2;12657:3;12598:67;:::i;:::-;12591:74;;12695:34;12691:1;12686:3;12682:11;12675:55;12761:6;12756:2;12751:3;12747:12;12740:28;12794:2;12789:3;12785:12;12778:19;;12581:222;;;:::o;12809:323::-;;12972:67;13036:2;13031:3;12972:67;:::i;:::-;12965:74;;13069:27;13065:1;13060:3;13056:11;13049:48;13123:2;13118:3;13114:12;13107:19;;12955:177;;;:::o;13138:376::-;;13301:67;13365:2;13360:3;13301:67;:::i;:::-;13294:74;;13398:34;13394:1;13389:3;13385:11;13378:55;13464:14;13459:2;13454:3;13450:12;13443:36;13505:2;13500:3;13496:12;13489:19;;13284:230;;;:::o;13520:388::-;;13683:67;13747:2;13742:3;13683:67;:::i;:::-;13676:74;;13780:34;13776:1;13771:3;13767:11;13760:55;13846:26;13841:2;13836:3;13832:12;13825:48;13899:2;13894:3;13890:12;13883:19;;13666:242;;;:::o;13914:308::-;;14077:67;14141:2;14136:3;14077:67;:::i;:::-;14070:74;;14174:12;14170:1;14165:3;14161:11;14154:33;14213:2;14208:3;14204:12;14197:19;;14060:162;;;:::o;14228:374::-;;14391:67;14455:2;14450:3;14391:67;:::i;:::-;14384:74;;14488:34;14484:1;14479:3;14475:11;14468:55;14554:12;14549:2;14544:3;14540:12;14533:34;14593:2;14588:3;14584:12;14577:19;;14374:228;;;:::o;14608:373::-;;14771:67;14835:2;14830:3;14771:67;:::i;:::-;14764:74;;14868:34;14864:1;14859:3;14855:11;14848:55;14934:11;14929:2;14924:3;14920:12;14913:33;14972:2;14967:3;14963:12;14956:19;;14754:227;;;:::o;14987:330::-;;15150:67;15214:2;15209:3;15150:67;:::i;:::-;15143:74;;15247:34;15243:1;15238:3;15234:11;15227:55;15308:2;15303:3;15299:12;15292:19;;15133:184;;;:::o;15323:376::-;;15486:67;15550:2;15545:3;15486:67;:::i;:::-;15479:74;;15583:34;15579:1;15574:3;15570:11;15563:55;15649:14;15644:2;15639:3;15635:12;15628:36;15690:2;15685:3;15681:12;15674:19;;15469:230;;;:::o;15705:330::-;;15868:67;15932:2;15927:3;15868:67;:::i;:::-;15861:74;;15965:34;15961:1;15956:3;15952:11;15945:55;16026:2;16021:3;16017:12;16010:19;;15851:184;;;:::o;16041:373::-;;16204:67;16268:2;16263:3;16204:67;:::i;:::-;16197:74;;16301:34;16297:1;16292:3;16288:11;16281:55;16367:11;16362:2;16357:3;16353:12;16346:33;16405:2;16400:3;16396:12;16389:19;;16187:227;;;:::o;16420:379::-;;16583:67;16647:2;16642:3;16583:67;:::i;:::-;16576:74;;16680:34;16676:1;16671:3;16667:11;16660:55;16746:17;16741:2;16736:3;16732:12;16725:39;16790:2;16785:3;16781:12;16774:19;;16566:233;;;:::o;16805:314::-;;16968:67;17032:2;17027:3;16968:67;:::i;:::-;16961:74;;17065:18;17061:1;17056:3;17052:11;17045:39;17110:2;17105:3;17101:12;17094:19;;16951:168;;;:::o;17125:365::-;;17288:67;17352:2;17347:3;17288:67;:::i;:::-;17281:74;;17385:34;17381:1;17376:3;17372:11;17365:55;17451:3;17446:2;17441:3;17437:12;17430:25;17481:2;17476:3;17472:12;17465:19;;17271:219;;;:::o;17496:381::-;;17659:67;17723:2;17718:3;17659:67;:::i;:::-;17652:74;;17756:34;17752:1;17747:3;17743:11;17736:55;17822:19;17817:2;17812:3;17808:12;17801:41;17868:2;17863:3;17859:12;17852:19;;17642:235;;;:::o;17883:376::-;;18046:67;18110:2;18105:3;18046:67;:::i;:::-;18039:74;;18143:34;18139:1;18134:3;18130:11;18123:55;18209:14;18204:2;18199:3;18195:12;18188:36;18250:2;18245:3;18241:12;18234:19;;18029:230;;;:::o;18265:311::-;;18428:67;18492:2;18487:3;18428:67;:::i;:::-;18421:74;;18525:15;18521:1;18516:3;18512:11;18505:36;18567:2;18562:3;18558:12;18551:19;;18411:165;;;:::o;18582:108::-;18659:24;18677:5;18659:24;:::i;:::-;18654:3;18647:37;18637:53;;:::o;18696:118::-;18783:24;18801:5;18783:24;:::i;:::-;18778:3;18771:37;18761:53;;:::o;18820:589::-;;19067:95;19158:3;19149:6;19067:95;:::i;:::-;19060:102;;19179:95;19270:3;19261:6;19179:95;:::i;:::-;19172:102;;19291:92;19379:3;19370:6;19291:92;:::i;:::-;19284:99;;19400:3;19393:10;;19049:360;;;;;;:::o;19415:222::-;;19546:2;19535:9;19531:18;19523:26;;19559:71;19627:1;19616:9;19612:17;19603:6;19559:71;:::i;:::-;19513:124;;;;:::o;19643:640::-;;19876:3;19865:9;19861:19;19853:27;;19890:71;19958:1;19947:9;19943:17;19934:6;19890:71;:::i;:::-;19971:72;20039:2;20028:9;20024:18;20015:6;19971:72;:::i;:::-;20053;20121:2;20110:9;20106:18;20097:6;20053:72;:::i;:::-;20172:9;20166:4;20162:20;20157:2;20146:9;20142:18;20135:48;20200:76;20271:4;20262:6;20200:76;:::i;:::-;20192:84;;19843:440;;;;;;;:::o;20289:373::-;;20470:2;20459:9;20455:18;20447:26;;20519:9;20513:4;20509:20;20505:1;20494:9;20490:17;20483:47;20547:108;20650:4;20641:6;20547:108;:::i;:::-;20539:116;;20437:225;;;;:::o;20668:210::-;;20793:2;20782:9;20778:18;20770:26;;20806:65;20868:1;20857:9;20853:17;20844:6;20806:65;:::i;:::-;20760:118;;;;:::o;20884:252::-;;21030:2;21019:9;21015:18;21007:26;;21043:86;21126:1;21115:9;21111:17;21102:6;21043:86;:::i;:::-;20997:139;;;;:::o;21142:313::-;;21293:2;21282:9;21278:18;21270:26;;21342:9;21336:4;21332:20;21328:1;21317:9;21313:17;21306:47;21370:78;21443:4;21434:6;21370:78;:::i;:::-;21362:86;;21260:195;;;;:::o;21461:419::-;;21665:2;21654:9;21650:18;21642:26;;21714:9;21708:4;21704:20;21700:1;21689:9;21685:17;21678:47;21742:131;21868:4;21742:131;:::i;:::-;21734:139;;21632:248;;;:::o;21886:419::-;;22090:2;22079:9;22075:18;22067:26;;22139:9;22133:4;22129:20;22125:1;22114:9;22110:17;22103:47;22167:131;22293:4;22167:131;:::i;:::-;22159:139;;22057:248;;;:::o;22311:419::-;;22515:2;22504:9;22500:18;22492:26;;22564:9;22558:4;22554:20;22550:1;22539:9;22535:17;22528:47;22592:131;22718:4;22592:131;:::i;:::-;22584:139;;22482:248;;;:::o;22736:419::-;;22940:2;22929:9;22925:18;22917:26;;22989:9;22983:4;22979:20;22975:1;22964:9;22960:17;22953:47;23017:131;23143:4;23017:131;:::i;:::-;23009:139;;22907:248;;;:::o;23161:419::-;;23365:2;23354:9;23350:18;23342:26;;23414:9;23408:4;23404:20;23400:1;23389:9;23385:17;23378:47;23442:131;23568:4;23442:131;:::i;:::-;23434:139;;23332:248;;;:::o;23586:419::-;;23790:2;23779:9;23775:18;23767:26;;23839:9;23833:4;23829:20;23825:1;23814:9;23810:17;23803:47;23867:131;23993:4;23867:131;:::i;:::-;23859:139;;23757:248;;;:::o;24011:419::-;;24215:2;24204:9;24200:18;24192:26;;24264:9;24258:4;24254:20;24250:1;24239:9;24235:17;24228:47;24292:131;24418:4;24292:131;:::i;:::-;24284:139;;24182:248;;;:::o;24436:419::-;;24640:2;24629:9;24625:18;24617:26;;24689:9;24683:4;24679:20;24675:1;24664:9;24660:17;24653:47;24717:131;24843:4;24717:131;:::i;:::-;24709:139;;24607:248;;;:::o;24861:419::-;;25065:2;25054:9;25050:18;25042:26;;25114:9;25108:4;25104:20;25100:1;25089:9;25085:17;25078:47;25142:131;25268:4;25142:131;:::i;:::-;25134:139;;25032:248;;;:::o;25286:419::-;;25490:2;25479:9;25475:18;25467:26;;25539:9;25533:4;25529:20;25525:1;25514:9;25510:17;25503:47;25567:131;25693:4;25567:131;:::i;:::-;25559:139;;25457:248;;;:::o;25711:419::-;;25915:2;25904:9;25900:18;25892:26;;25964:9;25958:4;25954:20;25950:1;25939:9;25935:17;25928:47;25992:131;26118:4;25992:131;:::i;:::-;25984:139;;25882:248;;;:::o;26136:419::-;;26340:2;26329:9;26325:18;26317:26;;26389:9;26383:4;26379:20;26375:1;26364:9;26360:17;26353:47;26417:131;26543:4;26417:131;:::i;:::-;26409:139;;26307:248;;;:::o;26561:419::-;;26765:2;26754:9;26750:18;26742:26;;26814:9;26808:4;26804:20;26800:1;26789:9;26785:17;26778:47;26842:131;26968:4;26842:131;:::i;:::-;26834:139;;26732:248;;;:::o;26986:419::-;;27190:2;27179:9;27175:18;27167:26;;27239:9;27233:4;27229:20;27225:1;27214:9;27210:17;27203:47;27267:131;27393:4;27267:131;:::i;:::-;27259:139;;27157:248;;;:::o;27411:419::-;;27615:2;27604:9;27600:18;27592:26;;27664:9;27658:4;27654:20;27650:1;27639:9;27635:17;27628:47;27692:131;27818:4;27692:131;:::i;:::-;27684:139;;27582:248;;;:::o;27836:419::-;;28040:2;28029:9;28025:18;28017:26;;28089:9;28083:4;28079:20;28075:1;28064:9;28060:17;28053:47;28117:131;28243:4;28117:131;:::i;:::-;28109:139;;28007:248;;;:::o;28261:419::-;;28465:2;28454:9;28450:18;28442:26;;28514:9;28508:4;28504:20;28500:1;28489:9;28485:17;28478:47;28542:131;28668:4;28542:131;:::i;:::-;28534:139;;28432:248;;;:::o;28686:419::-;;28890:2;28879:9;28875:18;28867:26;;28939:9;28933:4;28929:20;28925:1;28914:9;28910:17;28903:47;28967:131;29093:4;28967:131;:::i;:::-;28959:139;;28857:248;;;:::o;29111:419::-;;29315:2;29304:9;29300:18;29292:26;;29364:9;29358:4;29354:20;29350:1;29339:9;29335:17;29328:47;29392:131;29518:4;29392:131;:::i;:::-;29384:139;;29282:248;;;:::o;29536:419::-;;29740:2;29729:9;29725:18;29717:26;;29789:9;29783:4;29779:20;29775:1;29764:9;29760:17;29753:47;29817:131;29943:4;29817:131;:::i;:::-;29809:139;;29707:248;;;:::o;29961:419::-;;30165:2;30154:9;30150:18;30142:26;;30214:9;30208:4;30204:20;30200:1;30189:9;30185:17;30178:47;30242:131;30368:4;30242:131;:::i;:::-;30234:139;;30132:248;;;:::o;30386:222::-;;30517:2;30506:9;30502:18;30494:26;;30530:71;30598:1;30587:9;30583:17;30574:6;30530:71;:::i;:::-;30484:124;;;;:::o;30614:283::-;;30680:2;30674:9;30664:19;;30722:4;30714:6;30710:17;30829:6;30817:10;30814:22;30793:18;30781:10;30778:34;30775:62;30772:2;;;30840:18;;:::i;:::-;30772:2;30880:10;30876:2;30869:22;30654:243;;;;:::o;30903:331::-;;31054:18;31046:6;31043:30;31040:2;;;31076:18;;:::i;:::-;31040:2;31161:4;31157:9;31150:4;31142:6;31138:17;31134:33;31126:41;;31222:4;31216;31212:15;31204:23;;30969:265;;;:::o;31240:332::-;;31392:18;31384:6;31381:30;31378:2;;;31414:18;;:::i;:::-;31378:2;31499:4;31495:9;31488:4;31480:6;31476:17;31472:33;31464:41;;31560:4;31554;31550:15;31542:23;;31307:265;;;:::o;31578:132::-;;31668:3;31660:11;;31698:4;31693:3;31689:14;31681:22;;31650:60;;;:::o;31716:141::-;;31788:3;31780:11;;31811:3;31808:1;31801:14;31845:4;31842:1;31832:18;31824:26;;31770:87;;;:::o;31863:114::-;;31964:5;31958:12;31948:22;;31937:40;;;:::o;31983:98::-;;32068:5;32062:12;32052:22;;32041:40;;;:::o;32087:99::-;;32173:5;32167:12;32157:22;;32146:40;;;:::o;32192:113::-;;32294:4;32289:3;32285:14;32277:22;;32267:38;;;:::o;32311:184::-;;32444:6;32439:3;32432:19;32484:4;32479:3;32475:14;32460:29;;32422:73;;;;:::o;32501:168::-;;32618:6;32613:3;32606:19;32658:4;32653:3;32649:14;32634:29;;32596:73;;;;:::o;32675:169::-;;32793:6;32788:3;32781:19;32833:4;32828:3;32824:14;32809:29;;32771:73;;;;:::o;32850:148::-;;32989:3;32974:18;;32964:34;;;;:::o;33004:305::-;;33063:20;33081:1;33063:20;:::i;:::-;33058:25;;33097:20;33115:1;33097:20;:::i;:::-;33092:25;;33251:1;33183:66;33179:74;33176:1;33173:81;33170:2;;;33257:18;;:::i;:::-;33170:2;33301:1;33298;33294:9;33287:16;;33048:261;;;;:::o;33315:185::-;;33372:20;33390:1;33372:20;:::i;:::-;33367:25;;33406:20;33424:1;33406:20;:::i;:::-;33401:25;;33445:1;33435:2;;33450:18;;:::i;:::-;33435:2;33492:1;33489;33485:9;33480:14;;33357:143;;;;:::o;33506:191::-;;33566:20;33584:1;33566:20;:::i;:::-;33561:25;;33600:20;33618:1;33600:20;:::i;:::-;33595:25;;33639:1;33636;33633:8;33630:2;;;33644:18;;:::i;:::-;33630:2;33689:1;33686;33682:9;33674:17;;33551:146;;;;:::o;33703:96::-;;33769:24;33787:5;33769:24;:::i;:::-;33758:35;;33748:51;;;:::o;33805:90::-;;33882:5;33875:13;33868:21;33857:32;;33847:48;;;:::o;33901:149::-;;33977:66;33970:5;33966:78;33955:89;;33945:105;;;:::o;34056:126::-;;34133:42;34126:5;34122:54;34111:65;;34101:81;;;:::o;34188:77::-;;34254:5;34243:16;;34233:32;;;:::o;34271:156::-;;34369:52;34415:5;34369:52;:::i;:::-;34356:65;;34346:81;;;:::o;34433:128::-;;34531:24;34549:5;34531:24;:::i;:::-;34518:37;;34508:53;;;:::o;34567:154::-;34651:6;34646:3;34641;34628:30;34713:1;34704:6;34699:3;34695:16;34688:27;34618:103;;;:::o;34727:307::-;34795:1;34805:113;34819:6;34816:1;34813:13;34805:113;;;34904:1;34899:3;34895:11;34889:18;34885:1;34880:3;34876:11;34869:39;34841:2;34838:1;34834:10;34829:15;;34805:113;;;34936:6;34933:1;34930:13;34927:2;;;35016:1;35007:6;35002:3;34998:16;34991:27;34927:2;34776:258;;;;:::o;35040:320::-;;35121:1;35115:4;35111:12;35101:22;;35168:1;35162:4;35158:12;35189:18;35179:2;;35245:4;35237:6;35233:17;35223:27;;35179:2;35307;35299:6;35296:14;35276:18;35273:38;35270:2;;;35326:18;;:::i;:::-;35270:2;35091:269;;;;:::o;35366:233::-;;35428:24;35446:5;35428:24;:::i;:::-;35419:33;;35474:66;35467:5;35464:77;35461:2;;;35544:18;;:::i;:::-;35461:2;35591:1;35584:5;35580:13;35573:20;;35409:190;;;:::o;35605:176::-;;35654:20;35672:1;35654:20;:::i;:::-;35649:25;;35688:20;35706:1;35688:20;:::i;:::-;35683:25;;35727:1;35717:2;;35732:18;;:::i;:::-;35717:2;35773:1;35770;35766:9;35761:14;;35639:142;;;;:::o;35787:180::-;35835:77;35832:1;35825:88;35932:4;35929:1;35922:15;35956:4;35953:1;35946:15;35973:180;36021:77;36018:1;36011:88;36118:4;36115:1;36108:15;36142:4;36139:1;36132:15;36159:180;36207:77;36204:1;36197:88;36304:4;36301:1;36294:15;36328:4;36325:1;36318:15;36345:180;36393:77;36390:1;36383:88;36490:4;36487:1;36480:15;36514:4;36511:1;36504:15;36531:102;;36623:2;36619:7;36614:2;36607:5;36603:14;36599:28;36589:38;;36579:54;;;:::o;36639:122::-;36712:24;36730:5;36712:24;:::i;:::-;36705:5;36702:35;36692:2;;36751:1;36748;36741:12;36692:2;36682:79;:::o;36767:116::-;36837:21;36852:5;36837:21;:::i;:::-;36830:5;36827:32;36817:2;;36873:1;36870;36863:12;36817:2;36807:76;:::o;36889:120::-;36961:23;36978:5;36961:23;:::i;:::-;36954:5;36951:34;36941:2;;36999:1;36996;36989:12;36941:2;36931:78;:::o;37015:122::-;37088:24;37106:5;37088:24;:::i;:::-;37081:5;37078:35;37068:2;;37127:1;37124;37117:12;37068:2;37058:79;:::o

Swarm Source

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