Contract 0x5fFf521Cf177782BF21d4B03F20aa616573Eb8dd 1

 
 
Txn Hash
Method
Block
From
To
Value
0x36cfea971428039f65c33fe7e3f7a3eec28221b2115becf9a414908e31cbc338Safe Transfer Fr...160624372022-11-27 16:11:594 hrs 3 mins ago0xd1065c9daa13dbefb92ff15fe3932ab7f1944990 IN  0x5fff521cf177782bf21d4b03f20aa616573eb8dd0 Ether0.00072527 11.76886013
0xbf6a076b0bfa7898348049c385ba7fb53f16c68ec562715836121fd9e899675dSet Approval For...160621652022-11-27 15:17:354 hrs 57 mins ago0x85aff271be678afcd5214ad46b25a1dafe5bc2d4 IN  0x5fff521cf177782bf21d4b03f20aa616573eb8dd0 Ether0.00045986 9.88648913
0x7b013d0f2b74047cbeef74ab1c029d37887e60e21322f97c881e1eeed480e137Set Approval For...160613632022-11-27 12:36:117 hrs 38 mins ago0x353bc35becfed0c65bf6d4466bdf6b381cc673a9 IN  0x5fff521cf177782bf21d4b03f20aa616573eb8dd0 Ether0.00054491 11.70907761
0x05dff0814e259f04fb38e56ffc2aa3bcbca5fa077cd95e12410e1a0ff6fc469fSet Approval For...160577052022-11-27 0:21:5919 hrs 53 mins agoENS Name surlynft.eth IN  0x5fff521cf177782bf21d4b03f20aa616573eb8dd0 Ether0.00027818 11.30725589
0x8e84a1d25bf708833ba39035b8a6eae0a6e58b992f137a1f59a77f7248246e77Set Approval For...160558562022-11-26 18:09:351 day 2 hrs ago0x04290604d372b8dfb32495fb61f38eba137ca9bf IN  0x5fff521cf177782bf21d4b03f20aa616573eb8dd0 Ether0.00052191 11.22055525
0x8bc87af17d649c8cbffd956ac6c072b2a08cb65e18b0b6a906ab1482b38463cbSet Approval For...160557792022-11-26 17:54:111 day 2 hrs ago0xf5cd17d00178e356354dc070671b6b1dea2c059a IN  0x5fff521cf177782bf21d4b03f20aa616573eb8dd0 Ether0.00053983 11.60581006
0x8c85952c6abd68dabb90880be232e6ebccc3bedd0128e092048bf86e2e2c8565Set Approval For...160533182022-11-26 9:38:351 day 10 hrs agoENS Name rumomv.eth IN  0x5fff521cf177782bf21d4b03f20aa616573eb8dd0 Ether0.00049577 10.65318247
0x3adc96c0a55b83b38f50f09fd59030ba2ce56266a7fa67bd670778d182abb3c7Set Approval For...160494202022-11-25 20:35:471 day 23 hrs ago0x65a463d6c9974360b1885e56a8faf3c478f6a0fd IN  0x5fff521cf177782bf21d4b03f20aa616573eb8dd0 Ether0.00051076 10.98097305
0x2522a0ba67cea94e5e976eb61421cb7d5e96a67c4e3c505e9f7bdf384cabd782Set Approval For...160423922022-11-24 21:01:352 days 23 hrs agoENS Name wala.eth IN  0x5fff521cf177782bf21d4b03f20aa616573eb8dd0 Ether0.00061686 13.26186362
0x83fe889d508583be7beb5b35d6bd10623e488f248660a64c1d03e254460f6722Safe Transfer Fr...160272472022-11-22 18:11:355 days 2 hrs ago0x359ab654338dcc363b4272e5fa85c884e3c4dd58 IN  0x5fff521cf177782bf21d4b03f20aa616573eb8dd0 Ether0.00179143 40.29036611
0x7e7bf6e05c1ae0647b8783242df0defb3168d466c290d29086be1c4013ef71deSafe Transfer Fr...160272172022-11-22 18:05:355 days 2 hrs ago0x359ab654338dcc363b4272e5fa85c884e3c4dd58 IN  0x5fff521cf177782bf21d4b03f20aa616573eb8dd0 Ether0.00214516 32.32464253
0x52bec3acb51dfb72d5c55eab9e7fa1a98640d62f248abf7525468f5f660b51c5Set Approval For...160217952022-11-21 23:53:235 days 20 hrs ago0x7e524b47f79ce997ad083fd76b0033ce5bcf9165 IN  0x5fff521cf177782bf21d4b03f20aa616573eb8dd0 Ether0.00032047 13.02637524
0x6e07d7a60ab08b981b3a45214593a891039a453c999ffe7a41833ca8f7ad8009Safe Transfer Fr...160135792022-11-20 20:21:356 days 23 hrs ago0x303911698a994f52fdd0edfbf21a7dc3905133a8 IN  0x5fff521cf177782bf21d4b03f20aa616573eb8dd0 Ether0.0007165 11.64078305
0xc633b8f46c1087409fbc01622abf05516fcca487c8f0ae31394da624c76c0ebbSet Approval For...160093902022-11-20 6:18:597 days 13 hrs ago0x95d234f2002540c9ee5bd5733b9aa868f01aa30c IN  0x5fff521cf177782bf21d4b03f20aa616573eb8dd0 Ether0.00056733 12.19711295
0x6ecbe29c71b6caa8577434614d9951cf29fafa22bd5ad98216b04f4619fc528eSet Approval For...160088992022-11-20 4:39:477 days 15 hrs ago0x67e45bb1359c580d04264619773d2b7b26092b02 IN  0x5fff521cf177782bf21d4b03f20aa616573eb8dd0 Ether0.00059156 12.71802591
0x5bdd268b39eec8d8ac7ad4cfe67821f94abdd68704d6f6c023dac2a4b1a50c8dSet Approval For...160006772022-11-19 1:07:598 days 19 hrs ago0x303911698a994f52fdd0edfbf21a7dc3905133a8 IN  0x5fff521cf177782bf21d4b03f20aa616573eb8dd0 Ether0.00069237 14.88538353
0x4566bcfd279fa10035402abaf2c90eab58efdbd3d93cbe7a827a17de13c99bd9Set Approval For...159998702022-11-18 22:25:478 days 21 hrs ago0xadf363c6090f911f20c1b59a99928bcb5eed0e5c IN  0x5fff521cf177782bf21d4b03f20aa616573eb8dd0 Ether0.00057246 12.30738944
0xf537a5bcbc8034bd4d6ee8cea838880a2491d8693409aca62c5fdc1d55408e44Transfer From159880612022-11-17 6:49:5910 days 13 hrs ago0xd635732fe95656e2c93e71953c7126bd1056d411 IN  0x5fff521cf177782bf21d4b03f20aa616573eb8dd0 Ether0.00052965 12.7536128
0x1f6dea1e78f53c7cc04dbdeca2665e4abaea41d073b7ace08a29815ba94d34aeSet Approval For...159788542022-11-15 23:56:5911 days 20 hrs ago0xaaac5c66b26deb2245918875a8199f4b3077115c IN  0x5fff521cf177782bf21d4b03f20aa616573eb8dd0 Ether0.00072894 15.64328697
0x6a42f806c1c3550007a82760c77284901cad390e797311f4b8ff17f9edc9bf68Set Approval For...159788542022-11-15 23:56:5911 days 20 hrs ago0xaaac5c66b26deb2245918875a8199f4b3077115c IN  0x5fff521cf177782bf21d4b03f20aa616573eb8dd0 Ether0.000728 15.64328697
0x8ba13516bc646bff0f3e7c20d8e83c4a8ce46ad4d660ecd664f71b89de438f98Set Approval For...159786552022-11-15 23:17:1111 days 20 hrs agoENS Name stepchange.eth IN  0x5fff521cf177782bf21d4b03f20aa616573eb8dd0 Ether0.00067037 14.38629201
0xc35cbab396fdf2316c72222a9da67266217278e86916ef28c0d9470cabb23ef2Set Approval For...159786542022-11-15 23:16:5911 days 20 hrs agoENS Name stepchange.eth IN  0x5fff521cf177782bf21d4b03f20aa616573eb8dd0 Ether0.00068657 14.75297431
0x21729a114e4575cf7848a34a8600231328ca4e36ab572bfa5deea07511e7c75eSafe Transfer Fr...159746762022-11-15 9:55:2312 days 10 hrs ago0xe7a7b02056c17ff52d7d7da5371af6992c421084 IN  0x5fff521cf177782bf21d4b03f20aa616573eb8dd0 Ether0.0008248 13.39767891
0x7ec5c4a6461d47a718220a7b9ce2a17ceb4c15a5a04bc04c110c5e45a2f02d90Set Approval For...159735252022-11-15 6:03:5912 days 14 hrs ago0x8e82f56cf2652f8f9e7862e2bfafa53b2d94094c IN  0x5fff521cf177782bf21d4b03f20aa616573eb8dd0 Ether0.00065133 14.00301099
0x4a3da9c1357489e2fa760525bd15c0f197b1b6cfe2ff5c6e85321e130e2a32fcSet Approval For...159659522022-11-14 4:41:3513 days 15 hrs ago0x048ba6b813b3d0abdddda5b0e58110ec2a319d89 IN  0x5fff521cf177782bf21d4b03f20aa616573eb8dd0 Ether0.00059992 12.89767166
[ Download CSV Export 
Latest 6 internal transactions
Parent Txn Hash Block From To Value
0x9d2730113fde6a88c7c1d0903f485b39625034042e8e5988407444f1a7a6a7ac141954932022-02-13 4:09:11287 days 16 hrs ago 0x5fff521cf177782bf21d4b03f20aa616573eb8dd0xb9f14dae23fe34c267881339b35dce1e297093da46.47 Ether
0x9d2730113fde6a88c7c1d0903f485b39625034042e8e5988407444f1a7a6a7ac141954932022-02-13 4:09:11287 days 16 hrs ago 0x5fff521cf177782bf21d4b03f20aa616573eb8dd0x5039cda148fdd50818d5eb8dbfd8be0c0bd1b08292.94 Ether
0x9d2730113fde6a88c7c1d0903f485b39625034042e8e5988407444f1a7a6a7ac141954932022-02-13 4:09:11287 days 16 hrs ago 0x5fff521cf177782bf21d4b03f20aa616573eb8dd0xc1fdc68dc63d3316f32420d4d2c3dea43091bcdd170.39 Ether
0x5feb0ef3c237517c4b062d1581b454ca4ddf3d0e5c7cae1ba4573b8421211dc0141902582022-02-12 8:52:47288 days 11 hrs ago 0x5fff521cf177782bf21d4b03f20aa616573eb8dd0xb9f14dae23fe34c267881339b35dce1e297093da0.015 Ether
0x5feb0ef3c237517c4b062d1581b454ca4ddf3d0e5c7cae1ba4573b8421211dc0141902582022-02-12 8:52:47288 days 11 hrs ago 0x5fff521cf177782bf21d4b03f20aa616573eb8dd0x5039cda148fdd50818d5eb8dbfd8be0c0bd1b0820.03 Ether
0x5feb0ef3c237517c4b062d1581b454ca4ddf3d0e5c7cae1ba4573b8421211dc0141902582022-02-12 8:52:47288 days 11 hrs ago 0x5fff521cf177782bf21d4b03f20aa616573eb8dd0xc1fdc68dc63d3316f32420d4d2c3dea43091bcdd0.055 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Reflections

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-12
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/*
    Fully commented standard ERC721 Distilled from OpenZeppelin Docs
    Base for Building ERC721 by Martin McConnell
    All the utility without the fluff.*/


interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

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`.
    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;
}

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

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

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, "Addr: cant send val, rcpt revert");
    }

    /**
     * @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, "Addr: low-level call value fail");
    }

    /**
     * @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, "Addr: insufficient balance 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, "Addr: low-level static call fail");
    }

    /**
     * @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), "Addr: static call 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, "Addr: low-level del 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), "Addr: delegate call non-contract");

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

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

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

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

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 0x address");
        _setOwner(newOwner);
    }

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

abstract contract Functional {
    function toString(uint256 value) internal pure returns (string memory) {
        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);
    }
    
    bool private _reentryKey = false;
    modifier reentryLock {
        require(!_reentryKey, "attempt reenter locked function");
        _reentryKey = true;
        _;
        _reentryKey = false;
    }
}


// ******************************************************************************************************************************
// **************************************************  Start of Main Contract ***************************************************
// ******************************************************************************************************************************

contract Reflections is IERC721, Ownable, Functional {

    using Address for address;
    
    // Token name
    string private _name;

    // Token symbol
    string private _symbol;
    
    // URI Root Location for Json Files
    string private _baseURI;

    // 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;
    
    // Specific Functionality
    bool public mintActive;
    bool public whitelistActive;
    bool private _hideTokens;  //for URI redirects
    uint256 public price;
    uint256 public totalTokens;
    uint256 public numberMinted;
    uint256 public maxPerWallet;
    uint256 public reservedTokens;
    
    mapping(address => uint256) private _mintTracker;
    mapping(address => bool) private _whitelist;
    
	address doxxed = payable(0xC1FDc68dc63d3316F32420d4d2c3DeA43091bCDD); 
    address artist = payable(0x5039CDa148fDd50818D5Eb8dBfd8bE0c0Bd1B082);
    address toronto = payable(0xB9f14dae23fe34c267881339B35dCE1e297093Da);

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor() {
        _name = "Reflections NFT";
        _symbol = "RFL";
        _baseURI = "https://reflectionsnft.io/metadata/";
        _hideTokens = true;
        
        
        totalTokens = 3333;
        price = 100 * (10 ** 15); // Replace leading value with price in finney

        maxPerWallet = 2;
        reservedTokens = 233; // uncomment to reserve tokens for the owner or other purposes
    }

    //@dev See {IERC165-supportsInterface}. Interfaces Supported by this Standard
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return  interfaceId == type(IERC721).interfaceId ||
                interfaceId == type(IERC721Metadata).interfaceId ||
                interfaceId == type(IERC165).interfaceId ||
                interfaceId == Reflections.onERC721Received.selector;
    }
    
    // Standard Withdraw function for the owner to pull the contract
    function withdraw() external onlyOwner {
        uint256 totalBalance = address(this).balance;

        bool success;

        uint256 sendAmount = (totalBalance * 55) / 100;
        (success, ) = doxxed.call{value: sendAmount}("");
        require(success, "Transaction Unsuccessful");

        sendAmount = (totalBalance * 30) / 100;
        (success, ) = artist.call{value: sendAmount}("");
        require(success, "Transaction Unsuccessful");

        sendAmount = (totalBalance * 15) / 100;
        (success, ) = toronto.call{value: sendAmount}("");
        require(success, "Transaction Unsuccessful");
    }
    
    function ownerMint(address _to, uint256 qty) external onlyOwner {
        require((numberMinted + qty) > numberMinted, "Math overflow error");
        require((numberMinted + qty) <= totalTokens, "Cannot fill order");
        
        uint256 mintSeedValue = numberMinted; //Store the starting value of the mint batch
        if (reservedTokens >= qty) {
            reservedTokens -= qty;
        } else {
            reservedTokens = 0;
        }
        
        for(uint256 i = 0; i < qty; i++) {
            _safeMint(_to, mintSeedValue + i);
            numberMinted ++;  //reservedTokens can be reset, numberMinted can not
        }
    }
    
    function airDrop(address[] memory _to) external onlyOwner {
        uint256 qty = _to.length;
        require((numberMinted + qty) > numberMinted, "Math overflow error");
        require((numberMinted + qty) <= totalTokens, "Cannot fill order");
        
        uint256 mintSeedValue = numberMinted;
        if (reservedTokens >= qty) {
            reservedTokens -= qty;
        } else {
            reservedTokens = 0;
        }
        
        for(uint256 i = 0; i < qty; i++) {
            _safeMint(_to[i], mintSeedValue + i);
            numberMinted ++;  //reservedTokens can be reset, numberMinted can not
        }
    }
    
    function mint() external payable reentryLock {
        address _to = _msgSender();
        require(msg.value == price, "Mint: Insufficient Funds");
        require((1 + reservedTokens + numberMinted) <= totalTokens, "Mint: Not enough avaialability");
        require((_mintTracker[_msgSender()] + 1) <= maxPerWallet, "Mint: Max tkn per wallet exceeded");
        require(mintActive, "Mint not open");
        
        uint256 mintSeedValue = numberMinted; //Store the starting value of the mint batch
        _mintTracker[_msgSender()]++;

        //send tokens
        _safeMint(_to, mintSeedValue);
        numberMinted ++;
    }

    function WLmint() external payable reentryLock {
        address _to = _msgSender();
        require(msg.value == price, "Mint: Insufficient Funds");
        require((1 + reservedTokens + numberMinted) <= totalTokens, "Mint: Not enough avaialability");
        require(whitelistActive, "Whitelist not open");
        require(_whitelist[_msgSender()] == true, "not Whitelisted or already purchased");

        _whitelist[_msgSender()] = false; //clear name from whitelist
        _mintTracker[_msgSender()]++;
        
        uint256 mintSeedValue = numberMinted; //Store the starting value of the mint batch

        //send tokens
        _safeMint(_to, mintSeedValue);
        numberMinted ++;
    }

    // allows holders to burn their own tokens if desired
    function burn(uint256 tokenID) external {
        require(_msgSender() == ownerOf(tokenID));
        _burn(tokenID);
    }
    
    //////////////////////////////////////////////////////////////
    //////////////////// Setters and Getters /////////////////////
    //////////////////////////////////////////////////////////////
    
    function whiteList(address account) external onlyOwner {
        _whitelist[account] = true;
    }
    
    function whiteListMany(address[] memory accounts) external onlyOwner {
        for (uint256 i; i < accounts.length; i++) {
            _whitelist[accounts[i]] = true;
        }
    }
    
    function checkWhitelist(address testAddress) external view returns (bool) {
        if (_whitelist[testAddress] == true) { return true; }
        return false;
    }
    
    function setMaxWalletThreshold(uint256 maxWallet) external onlyOwner {
        maxPerWallet = maxWallet;
    }
    
    function setBaseURI(string memory newURI) public onlyOwner {
        _baseURI = newURI;
    }
    
    function activateMint() public onlyOwner {
        mintActive = true;
    }
    
    function deactivateMint() public onlyOwner {
        mintActive = false;
    }

    function activateWL() public onlyOwner {
        whitelistActive = true;
    }
    
    function deactivateWL() public onlyOwner {
        whitelistActive = false;
    }
    
    function setPrice(uint256 newPrice) public onlyOwner {
        price = newPrice;
    }
    
    function setTotalTokens(uint256 numTokens) public onlyOwner {
        totalTokens = numTokens;
    }
    
    function setReserve(uint256 newReserve) public onlyOwner {
        reservedTokens = newReserve;
    }

    function totalSupply() external view returns (uint256) {
        return numberMinted; //stupid bs for etherscan's call
    }
    
    function hideTokens() external onlyOwner {
        _hideTokens = true;
    }
    
    function revealTokens() external onlyOwner {
        _hideTokens = false;
    }
    
    function getBalance(address tokenAddress) view external returns (uint256) {
        //return _balances[tokenAddress]; //shows 0 on etherscan due to overflow error
        return _balances[tokenAddress] / (10**15); //temporary fix to report in finneys
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: bal qry for 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: own query nonexist tkn");
        return owner;
    }

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

        require(
            msg.sender == owner || isApprovedForAll(owner, msg.sender),
            "ERC721: caller !owner/!approved"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved nonexistent tkn");
        return _tokenApprovals[tokenId];
    }

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

        _operatorApprovals[msg.sender][operator] = approved;
        emit ApprovalForAll(msg.sender, 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(msg.sender, tokenId), "ERC721: txfr !owner/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(msg.sender, tokenId), "ERC721: txfr !owner/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), "txfr to non ERC721Reciever");
    }

    /**
     * @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: op query nonexistent tkn");
        address owner = 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),
            "txfr to non ERC721Reciever"
        );
    }

    /**
     * @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 = 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(ownerOf(tokenId) == from, "ERC721: txfr token not owned");
        require(to != address(0), "ERC721: txfr to 0x0 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(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(msg.sender, from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("txfr to non ERC721Reciever");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }
    
    // *********************** ERC721 Token Receiver **********************
    /**
     * @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) {
        //InterfaceID=0x150b7a02
        return this.onERC721Received.selector;
    }

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

    // **************************************** Metadata Standard Functions **********
    //@dev Returns the token collection name.
    function name() external view returns (string memory){
        return _name;
    }

    //@dev Returns the token collection symbol.
    function symbol() external view returns (string memory){
        return _symbol;
    }

    //@dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
    function tokenURI(uint256 tokenId) external view returns (string memory){
        require(_exists(tokenId), "ERC721Metadata: URI 0x0 token");
        string memory tokenuri;
        
        if (_hideTokens) {
            //redirect to mystery box
            tokenuri = string(abi.encodePacked(_baseURI, "mystery.json"));
        } else {
            //Input flag data here to send to reveal URI
            tokenuri = string(abi.encodePacked(_baseURI, toString(tokenId), ".json"));
        }
        
        return tokenuri;
    }
    
    function contractURI() public view returns (string memory) {
            return string(abi.encodePacked(_baseURI,"contract.json"));
    }
    // *******************************************************************************

    receive() external payable {}
    
    fallback() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"WLmint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"activateMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activateWL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"}],"name":"airDrop","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":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"testAddress","type":"address"}],"name":"checkWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deactivateMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deactivateWL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hideTokens","outputs":[],"stateMutability":"nonpayable","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":"maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revealTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"setMaxWalletThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newReserve","type":"uint256"}],"name":"setReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"setTotalTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokens","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":"account","type":"address"}],"name":"whiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"whiteListMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260008060146101000a81548160ff02191690831515021790555073c1fdc68dc63d3316f32420d4d2c3dea43091bcdd601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550735039cda148fdd50818d5eb8dbfd8be0c0bd1b082601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073b9f14dae23fe34c267881339b35dce1e297093da601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200012a57600080fd5b506200014b6200013f6200026260201b60201c565b6200026a60201b60201c565b6040518060400160405280600f81526020017f5265666c656374696f6e73204e4654000000000000000000000000000000000081525060019080519060200190620001989291906200032e565b506040518060400160405280600381526020017f52464c000000000000000000000000000000000000000000000000000000000081525060029080519060200190620001e69291906200032e565b50604051806060016040528060238152602001620056226023913960039080519060200190620002189291906200032e565b506001600860026101000a81548160ff021916908315150217905550610d05600a8190555067016345785d8a00006009819055506002600c8190555060e9600d8190555062000443565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200033c90620003de565b90600052602060002090601f016020900481019282620003605760008555620003ac565b82601f106200037b57805160ff1916838001178555620003ac565b82800160010185558215620003ac579182015b82811115620003ab5782518255916020019190600101906200038e565b5b509050620003bb9190620003bf565b5090565b5b80821115620003da576000816000905550600101620003c0565b5090565b60006002820490506001821680620003f757607f821691505b602082108114156200040e576200040d62000414565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6151cf80620004536000396000f3fe60806040526004361061028b5760003560e01c8063484b973c1161015a578063a22cb465116100c1578063c87b56dd1161007a578063c87b56dd146108f7578063c91c046214610934578063e8a3d4851461094b578063e985e9c514610976578063f2fde38b146109b3578063f8b2cb4f146109dc57610292565b8063a22cb46514610832578063b0b922631461085b578063b3aa880614610884578063b5b3e214146108ad578063b733937c146108c4578063b88d4fde146108ce57610292565b80637e1c0c09116101135780637e1c0c0914610746578063877b8644146107715780638da5cb5b1461078857806391b7f5ed146107b357806395d89b41146107dc578063a035b1fe1461080757610292565b8063484b973c1461063857806349a772b51461066157806355f804b31461068c5780636352211e146106b557806370a08231146106f2578063715018a61461072f57610292565b806323b872dd116101fe5780633ccfd60b116101b75780633ccfd60b146105525780634256dbe31461056957806342842e0e1461059257806342966c68146105bb57806343d67565146105e4578063453c23101461060d57610292565b806323b872dd1461049057806325fd90f3146104b957806329869c94146104e45780632e56f71e146104fb578063372c12b1146105125780633ba5939d1461053b57610292565b8063095ea7b311610250578063095ea7b31461038d5780631249c58b146103b6578063150b7a02146103c057806315a55347146103fd57806318160ddd146104285780631950c2181461045357610292565b8062b6849f1461029457806301ffc9a7146102bd57806302ce5813146102fa57806306fdde0314610325578063081812fc1461035057610292565b3661029257005b005b3480156102a057600080fd5b506102bb60048036038101906102b69190613c3e565b610a19565b005b3480156102c957600080fd5b506102e460048036038101906102df9190613c87565b610be0565b6040516102f191906143be565b60405180910390f35b34801561030657600080fd5b5061030f610d69565b60405161031c91906143be565b60405180910390f35b34801561033157600080fd5b5061033a610d7c565b60405161034791906143f4565b60405180910390f35b34801561035c57600080fd5b5061037760048036038101906103729190613d2a565b610e0e565b6040516103849190614357565b60405180910390f35b34801561039957600080fd5b506103b460048036038101906103af9190613bfe565b610e93565b005b6103be610f9d565b005b3480156103cc57600080fd5b506103e760048036038101906103e29190613ab3565b611241565b6040516103f491906143d9565b60405180910390f35b34801561040957600080fd5b50610412611256565b60405161041f9190614756565b60405180910390f35b34801561043457600080fd5b5061043d61125c565b60405161044a9190614756565b60405180910390f35b34801561045f57600080fd5b5061047a600480360381019061047591906139f3565b611266565b60405161048791906143be565b60405180910390f35b34801561049c57600080fd5b506104b760048036038101906104b29190613a60565b6112d4565b005b3480156104c557600080fd5b506104ce61132d565b6040516104db91906143be565b60405180910390f35b3480156104f057600080fd5b506104f9611340565b005b34801561050757600080fd5b506105106113d9565b005b34801561051e57600080fd5b50610539600480360381019061053491906139f3565b611472565b005b34801561054757600080fd5b50610550611549565b005b34801561055e57600080fd5b506105676115e2565b005b34801561057557600080fd5b50610590600480360381019061058b9190613d2a565b611926565b005b34801561059e57600080fd5b506105b960048036038101906105b49190613a60565b6119ac565b005b3480156105c757600080fd5b506105e260048036038101906105dd9190613d2a565b6119cc565b005b3480156105f057600080fd5b5061060b60048036038101906106069190613c3e565b611a1f565b005b34801561061957600080fd5b50610622611b30565b60405161062f9190614756565b60405180910390f35b34801561064457600080fd5b5061065f600480360381019061065a9190613bfe565b611b36565b005b34801561066d57600080fd5b50610676611cdd565b6040516106839190614756565b60405180910390f35b34801561069857600080fd5b506106b360048036038101906106ae9190613ce1565b611ce3565b005b3480156106c157600080fd5b506106dc60048036038101906106d79190613d2a565b611d79565b6040516106e99190614357565b60405180910390f35b3480156106fe57600080fd5b50610719600480360381019061071491906139f3565b611e2b565b6040516107269190614756565b60405180910390f35b34801561073b57600080fd5b50610744611ee3565b005b34801561075257600080fd5b5061075b611f6b565b6040516107689190614756565b60405180910390f35b34801561077d57600080fd5b50610786611f71565b005b34801561079457600080fd5b5061079d61200a565b6040516107aa9190614357565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d59190613d2a565b612033565b005b3480156107e857600080fd5b506107f16120b9565b6040516107fe91906143f4565b60405180910390f35b34801561081357600080fd5b5061081c61214b565b6040516108299190614756565b60405180910390f35b34801561083e57600080fd5b5061085960048036038101906108549190613bbe565b612151565b005b34801561086757600080fd5b50610882600480360381019061087d9190613d2a565b6122bd565b005b34801561089057600080fd5b506108ab60048036038101906108a69190613d2a565b612343565b005b3480156108b957600080fd5b506108c26123c9565b005b6108cc612462565b005b3480156108da57600080fd5b506108f560048036038101906108f09190613b3b565b612768565b005b34801561090357600080fd5b5061091e60048036038101906109199190613d2a565b6127c3565b60405161092b91906143f4565b60405180910390f35b34801561094057600080fd5b50610949612883565b005b34801561095757600080fd5b5061096061291c565b60405161096d91906143f4565b60405180910390f35b34801561098257600080fd5b5061099d60048036038101906109989190613a20565b612944565b6040516109aa91906143be565b60405180910390f35b3480156109bf57600080fd5b506109da60048036038101906109d591906139f3565b6129d8565b005b3480156109e857600080fd5b50610a0360048036038101906109fe91906139f3565b612ad0565b604051610a109190614756565b60405180910390f35b610a21612b2b565b73ffffffffffffffffffffffffffffffffffffffff16610a3f61200a565b73ffffffffffffffffffffffffffffffffffffffff1614610a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8c90614676565b60405180910390fd5b600081519050600b5481600b54610aac9190614887565b11610aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae390614736565b60405180910390fd5b600a5481600b54610afd9190614887565b1115610b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b35906145b6565b60405180910390fd5b6000600b54905081600d5410610b6c5781600d6000828254610b609190614968565b92505081905550610b75565b6000600d819055505b60005b82811015610bda57610baf848281518110610b9657610b95614bbc565b5b60200260200101518284610baa9190614887565b612b33565b600b6000815480929190610bc290614ab5565b91905055508080610bd290614ab5565b915050610b78565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610cab57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610d1357507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610d62575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600860019054906101000a900460ff1681565b606060018054610d8b90614a52565b80601f0160208091040260200160405190810160405280929190818152602001828054610db790614a52565b8015610e045780601f10610dd957610100808354040283529160200191610e04565b820191906000526020600020905b815481529060010190602001808311610de757829003601f168201915b5050505050905090565b6000610e1982612b51565b610e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4f906144b6565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e9e82611d79565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f06906144d6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610f4f5750610f4e8133612944565b5b610f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f85906145d6565b60405180910390fd5b610f988383612bbd565b505050565b600060149054906101000a900460ff1615610fed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe4906145f6565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055506000611012612b2b565b90506009543414611058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104f90614696565b60405180910390fd5b600a54600b54600d54600161106d9190614887565b6110779190614887565b11156110b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110af90614416565b60405180910390fd5b600c546001600e60006110c9612b2b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461110e9190614887565b111561114f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611146906146f6565b60405180910390fd5b600860009054906101000a900460ff1661119e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611195906146d6565b60405180910390fd5b6000600b549050600e60006111b1612b2b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906111fc90614ab5565b919050555061120b8282612b33565b600b600081548092919061121e90614ab5565b9190505550505060008060146101000a81548160ff021916908315150217905550565b600063150b7a0260e01b905095945050505050565b600d5481565b6000600b54905090565b600060011515600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156112ca57600190506112cf565b600090505b919050565b6112de3382612c76565b61131d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611314906146b6565b60405180910390fd5b611328838383612d54565b505050565b600860009054906101000a900460ff1681565b611348612b2b565b73ffffffffffffffffffffffffffffffffffffffff1661136661200a565b73ffffffffffffffffffffffffffffffffffffffff16146113bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b390614676565b60405180910390fd5b6000600860016101000a81548160ff021916908315150217905550565b6113e1612b2b565b73ffffffffffffffffffffffffffffffffffffffff166113ff61200a565b73ffffffffffffffffffffffffffffffffffffffff1614611455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144c90614676565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b61147a612b2b565b73ffffffffffffffffffffffffffffffffffffffff1661149861200a565b73ffffffffffffffffffffffffffffffffffffffff16146114ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e590614676565b60405180910390fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611551612b2b565b73ffffffffffffffffffffffffffffffffffffffff1661156f61200a565b73ffffffffffffffffffffffffffffffffffffffff16146115c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bc90614676565b60405180910390fd5b6000600860026101000a81548160ff021916908315150217905550565b6115ea612b2b565b73ffffffffffffffffffffffffffffffffffffffff1661160861200a565b73ffffffffffffffffffffffffffffffffffffffff161461165e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165590614676565b60405180910390fd5b60004790506000806064603784611675919061490e565b61167f91906148dd565b9050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516116c790614342565b60006040518083038185875af1925050503d8060008114611704576040519150601f19603f3d011682016040523d82523d6000602084013e611709565b606091505b5050809250508161174f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611746906144f6565b60405180910390fd5b6064601e8461175e919061490e565b61176891906148dd565b9050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516117b090614342565b60006040518083038185875af1925050503d80600081146117ed576040519150601f19603f3d011682016040523d82523d6000602084013e6117f2565b606091505b50508092505081611838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182f906144f6565b60405180910390fd5b6064600f84611847919061490e565b61185191906148dd565b9050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161189990614342565b60006040518083038185875af1925050503d80600081146118d6576040519150601f19603f3d011682016040523d82523d6000602084013e6118db565b606091505b50508092505081611921576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611918906144f6565b60405180910390fd5b505050565b61192e612b2b565b73ffffffffffffffffffffffffffffffffffffffff1661194c61200a565b73ffffffffffffffffffffffffffffffffffffffff16146119a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199990614676565b60405180910390fd5b80600d8190555050565b6119c783838360405180602001604052806000815250612768565b505050565b6119d581611d79565b73ffffffffffffffffffffffffffffffffffffffff166119f3612b2b565b73ffffffffffffffffffffffffffffffffffffffff1614611a1357600080fd5b611a1c81612fb0565b50565b611a27612b2b565b73ffffffffffffffffffffffffffffffffffffffff16611a4561200a565b73ffffffffffffffffffffffffffffffffffffffff1614611a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9290614676565b60405180910390fd5b60005b8151811015611b2c576001600f6000848481518110611ac057611abf614bbc565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611b2490614ab5565b915050611a9e565b5050565b600c5481565b611b3e612b2b565b73ffffffffffffffffffffffffffffffffffffffff16611b5c61200a565b73ffffffffffffffffffffffffffffffffffffffff1614611bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba990614676565b60405180910390fd5b600b5481600b54611bc39190614887565b11611c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfa90614736565b60405180910390fd5b600a5481600b54611c149190614887565b1115611c55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4c906145b6565b60405180910390fd5b6000600b54905081600d5410611c835781600d6000828254611c779190614968565b92505081905550611c8c565b6000600d819055505b60005b82811015611cd757611cac848284611ca79190614887565b612b33565b600b6000815480929190611cbf90614ab5565b91905055508080611ccf90614ab5565b915050611c8f565b50505050565b600b5481565b611ceb612b2b565b73ffffffffffffffffffffffffffffffffffffffff16611d0961200a565b73ffffffffffffffffffffffffffffffffffffffff1614611d5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5690614676565b60405180910390fd5b8060039080519060200190611d75929190613713565b5050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1990614556565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9390614636565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611eeb612b2b565b73ffffffffffffffffffffffffffffffffffffffff16611f0961200a565b73ffffffffffffffffffffffffffffffffffffffff1614611f5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5690614676565b60405180910390fd5b611f6960006130c1565b565b600a5481565b611f79612b2b565b73ffffffffffffffffffffffffffffffffffffffff16611f9761200a565b73ffffffffffffffffffffffffffffffffffffffff1614611fed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe490614676565b60405180910390fd5b6001600860016101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61203b612b2b565b73ffffffffffffffffffffffffffffffffffffffff1661205961200a565b73ffffffffffffffffffffffffffffffffffffffff16146120af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a690614676565b60405180910390fd5b8060098190555050565b6060600280546120c890614a52565b80601f01602080910402602001604051908101604052809291908181526020018280546120f490614a52565b80156121415780601f1061211657610100808354040283529160200191612141565b820191906000526020600020905b81548152906001019060200180831161212457829003601f168201915b5050505050905090565b60095481565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b790614536565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516122b191906143be565b60405180910390a35050565b6122c5612b2b565b73ffffffffffffffffffffffffffffffffffffffff166122e361200a565b73ffffffffffffffffffffffffffffffffffffffff1614612339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233090614676565b60405180910390fd5b80600a8190555050565b61234b612b2b565b73ffffffffffffffffffffffffffffffffffffffff1661236961200a565b73ffffffffffffffffffffffffffffffffffffffff16146123bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b690614676565b60405180910390fd5b80600c8190555050565b6123d1612b2b565b73ffffffffffffffffffffffffffffffffffffffff166123ef61200a565b73ffffffffffffffffffffffffffffffffffffffff1614612445576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243c90614676565b60405180910390fd5b6001600860026101000a81548160ff021916908315150217905550565b600060149054906101000a900460ff16156124b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a9906145f6565b60405180910390fd5b6001600060146101000a81548160ff02191690831515021790555060006124d7612b2b565b9050600954341461251d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251490614696565b60405180910390fd5b600a54600b54600d5460016125329190614887565b61253c9190614887565b111561257d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257490614416565b60405180910390fd5b600860019054906101000a900460ff166125cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c390614476565b60405180910390fd5b60011515600f60006125dc612b2b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514612666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265d90614596565b60405180910390fd5b6000600f6000612674612b2b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600e60006126d1612b2b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061271c90614ab5565b91905055506000600b5490506127328282612b33565b600b600081548092919061274590614ab5565b9190505550505060008060146101000a81548160ff021916908315150217905550565b6127723383612c76565b6127b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a8906146b6565b60405180910390fd5b6127bd84848484613185565b50505050565b60606127ce82612b51565b61280d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280490614716565b60405180910390fd5b6060600860029054906101000a900460ff161561284c5760036040516020016128369190614320565b604051602081830303815290604052905061287a565b6003612857846131e1565b6040516020016128689291906142cf565b60405160208183030381529060405290505b80915050919050565b61288b612b2b565b73ffffffffffffffffffffffffffffffffffffffff166128a961200a565b73ffffffffffffffffffffffffffffffffffffffff16146128ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f690614676565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b6060600360405160200161293091906142fe565b604051602081830303815290604052905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6129e0612b2b565b73ffffffffffffffffffffffffffffffffffffffff166129fe61200a565b73ffffffffffffffffffffffffffffffffffffffff1614612a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4b90614676565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612ac4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612abb90614516565b60405180910390fd5b612acd816130c1565b50565b600066038d7ea4c68000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b2491906148dd565b9050919050565b600033905090565b612b4d828260405180602001604052806000815250613342565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612c3083611d79565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612c8182612b51565b612cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb790614436565b60405180910390fd5b6000612ccb83611d79565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612d3a57508373ffffffffffffffffffffffffffffffffffffffff16612d2284610e0e565b73ffffffffffffffffffffffffffffffffffffffff16145b80612d4b5750612d4a8185612944565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612d7482611d79565b73ffffffffffffffffffffffffffffffffffffffff1614612dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc190614656565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3190614456565b60405180910390fd5b612e4583838361339d565b612e50600082612bbd565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ea09190614968565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ef79190614887565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000612fbb82611d79565b9050612fc98160008461339d565b612fd4600083612bbd565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130249190614968565b925050819055506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613190848484612d54565b61319c848484846133a2565b6131db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d290614576565b60405180910390fd5b50505050565b60606000821415613229576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061333d565b600082905060005b6000821461325b57808061324490614ab5565b915050600a8261325491906148dd565b9150613231565b60008167ffffffffffffffff81111561327757613276614beb565b5b6040519080825280601f01601f1916602001820160405280156132a95781602001600182028036833780820191505090505b5090505b60008514613336576001826132c29190614968565b9150600a856132d19190614afe565b60306132dd9190614887565b60f81b8183815181106132f3576132f2614bbc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561332f91906148dd565b94506132ad565b8093505050505b919050565b61334c8383613532565b61335960008484846133a2565b613398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338f90614576565b60405180910390fd5b505050565b505050565b60006133c38473ffffffffffffffffffffffffffffffffffffffff16613700565b15613525578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b81526004016134079493929190614372565b602060405180830381600087803b15801561342157600080fd5b505af192505050801561345257506040513d601f19601f8201168201806040525081019061344f9190613cb4565b60015b6134d5573d8060008114613482576040519150601f19603f3d011682016040523d82523d6000602084013e613487565b606091505b506000815114156134cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134c490614576565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061352a565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359990614616565b60405180910390fd5b6135ab81612b51565b156135eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135e290614496565b60405180910390fd5b6135f76000838361339d565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136479190614887565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461371f90614a52565b90600052602060002090601f0160209004810192826137415760008555613788565b82601f1061375a57805160ff1916838001178555613788565b82800160010185558215613788579182015b8281111561378757825182559160200191906001019061376c565b5b5090506137959190613799565b5090565b5b808211156137b257600081600090555060010161379a565b5090565b60006137c96137c484614796565b614771565b905080838252602082019050828560208602820111156137ec576137eb614c24565b5b60005b8581101561381c578161380288826138aa565b8452602084019350602083019250506001810190506137ef565b5050509392505050565b6000613839613834846147c2565b614771565b90508281526020810184848401111561385557613854614c29565b5b613860848285614a10565b509392505050565b600061387b613876846147f3565b614771565b90508281526020810184848401111561389757613896614c29565b5b6138a2848285614a10565b509392505050565b6000813590506138b98161513d565b92915050565b600082601f8301126138d4576138d3614c1f565b5b81356138e48482602086016137b6565b91505092915050565b6000813590506138fc81615154565b92915050565b6000813590506139118161516b565b92915050565b6000815190506139268161516b565b92915050565b60008083601f84011261394257613941614c1f565b5b8235905067ffffffffffffffff81111561395f5761395e614c1a565b5b60208301915083600182028301111561397b5761397a614c24565b5b9250929050565b600082601f83011261399757613996614c1f565b5b81356139a7848260208601613826565b91505092915050565b600082601f8301126139c5576139c4614c1f565b5b81356139d5848260208601613868565b91505092915050565b6000813590506139ed81615182565b92915050565b600060208284031215613a0957613a08614c33565b5b6000613a17848285016138aa565b91505092915050565b60008060408385031215613a3757613a36614c33565b5b6000613a45858286016138aa565b9250506020613a56858286016138aa565b9150509250929050565b600080600060608486031215613a7957613a78614c33565b5b6000613a87868287016138aa565b9350506020613a98868287016138aa565b9250506040613aa9868287016139de565b9150509250925092565b600080600080600060808688031215613acf57613ace614c33565b5b6000613add888289016138aa565b9550506020613aee888289016138aa565b9450506040613aff888289016139de565b935050606086013567ffffffffffffffff811115613b2057613b1f614c2e565b5b613b2c8882890161392c565b92509250509295509295909350565b60008060008060808587031215613b5557613b54614c33565b5b6000613b63878288016138aa565b9450506020613b74878288016138aa565b9350506040613b85878288016139de565b925050606085013567ffffffffffffffff811115613ba657613ba5614c2e565b5b613bb287828801613982565b91505092959194509250565b60008060408385031215613bd557613bd4614c33565b5b6000613be3858286016138aa565b9250506020613bf4858286016138ed565b9150509250929050565b60008060408385031215613c1557613c14614c33565b5b6000613c23858286016138aa565b9250506020613c34858286016139de565b9150509250929050565b600060208284031215613c5457613c53614c33565b5b600082013567ffffffffffffffff811115613c7257613c71614c2e565b5b613c7e848285016138bf565b91505092915050565b600060208284031215613c9d57613c9c614c33565b5b6000613cab84828501613902565b91505092915050565b600060208284031215613cca57613cc9614c33565b5b6000613cd884828501613917565b91505092915050565b600060208284031215613cf757613cf6614c33565b5b600082013567ffffffffffffffff811115613d1557613d14614c2e565b5b613d21848285016139b0565b91505092915050565b600060208284031215613d4057613d3f614c33565b5b6000613d4e848285016139de565b91505092915050565b613d608161499c565b82525050565b613d6f816149ae565b82525050565b613d7e816149ba565b82525050565b6000613d8f82614839565b613d99818561484f565b9350613da9818560208601614a1f565b613db281614c38565b840191505092915050565b6000613dc882614844565b613dd2818561486b565b9350613de2818560208601614a1f565b613deb81614c38565b840191505092915050565b6000613e0182614844565b613e0b818561487c565b9350613e1b818560208601614a1f565b80840191505092915050565b60008154613e3481614a52565b613e3e818661487c565b94506001821660008114613e595760018114613e6a57613e9d565b60ff19831686528186019350613e9d565b613e7385614824565b60005b83811015613e9557815481890152600182019150602081019050613e76565b838801955050505b50505092915050565b6000613eb3601e8361486b565b9150613ebe82614c49565b602082019050919050565b6000613ed660208361486b565b9150613ee182614c72565b602082019050919050565b6000613ef9600d8361487c565b9150613f0482614c9b565b600d82019050919050565b6000613f1c601b8361486b565b9150613f2782614cc4565b602082019050919050565b6000613f3f60128361486b565b9150613f4a82614ced565b602082019050919050565b6000613f62601c8361486b565b9150613f6d82614d16565b602082019050919050565b6000613f8560208361486b565b9150613f9082614d3f565b602082019050919050565b6000613fa8601e8361486b565b9150613fb382614d68565b602082019050919050565b6000613fcb60188361486b565b9150613fd682614d91565b602082019050919050565b6000613fee60208361486b565b9150613ff982614dba565b602082019050919050565b600061401160198361486b565b915061401c82614de3565b602082019050919050565b6000614034600c8361487c565b915061403f82614e0c565b600c82019050919050565b6000614057601e8361486b565b915061406282614e35565b602082019050919050565b600061407a601a8361486b565b915061408582614e5e565b602082019050919050565b600061409d60248361486b565b91506140a882614e87565b604082019050919050565b60006140c060118361486b565b91506140cb82614ed6565b602082019050919050565b60006140e3601f8361486b565b91506140ee82614eff565b602082019050919050565b6000614106601f8361486b565b915061411182614f28565b602082019050919050565b600061412960208361486b565b915061413482614f51565b602082019050919050565b600061414c60208361486b565b915061415782614f7a565b602082019050919050565b600061416f60058361487c565b915061417a82614fa3565b600582019050919050565b6000614192601c8361486b565b915061419d82614fcc565b602082019050919050565b60006141b560208361486b565b91506141c082614ff5565b602082019050919050565b60006141d860188361486b565b91506141e38261501e565b602082019050919050565b60006141fb601c8361486b565b915061420682615047565b602082019050919050565b600061421e600d8361486b565b915061422982615070565b602082019050919050565b600061424160218361486b565b915061424c82615099565b604082019050919050565b6000614264600083614860565b915061426f826150e8565b600082019050919050565b6000614287601d8361486b565b9150614292826150eb565b602082019050919050565b60006142aa60138361486b565b91506142b582615114565b602082019050919050565b6142c981614a06565b82525050565b60006142db8285613e27565b91506142e78284613df6565b91506142f282614162565b91508190509392505050565b600061430a8284613e27565b915061431582613eec565b915081905092915050565b600061432c8284613e27565b915061433782614027565b915081905092915050565b600061434d82614257565b9150819050919050565b600060208201905061436c6000830184613d57565b92915050565b60006080820190506143876000830187613d57565b6143946020830186613d57565b6143a160408301856142c0565b81810360608301526143b38184613d84565b905095945050505050565b60006020820190506143d36000830184613d66565b92915050565b60006020820190506143ee6000830184613d75565b92915050565b6000602082019050818103600083015261440e8184613dbd565b905092915050565b6000602082019050818103600083015261442f81613ea6565b9050919050565b6000602082019050818103600083015261444f81613ec9565b9050919050565b6000602082019050818103600083015261446f81613f0f565b9050919050565b6000602082019050818103600083015261448f81613f32565b9050919050565b600060208201905081810360008301526144af81613f55565b9050919050565b600060208201905081810360008301526144cf81613f78565b9050919050565b600060208201905081810360008301526144ef81613f9b565b9050919050565b6000602082019050818103600083015261450f81613fbe565b9050919050565b6000602082019050818103600083015261452f81613fe1565b9050919050565b6000602082019050818103600083015261454f81614004565b9050919050565b6000602082019050818103600083015261456f8161404a565b9050919050565b6000602082019050818103600083015261458f8161406d565b9050919050565b600060208201905081810360008301526145af81614090565b9050919050565b600060208201905081810360008301526145cf816140b3565b9050919050565b600060208201905081810360008301526145ef816140d6565b9050919050565b6000602082019050818103600083015261460f816140f9565b9050919050565b6000602082019050818103600083015261462f8161411c565b9050919050565b6000602082019050818103600083015261464f8161413f565b9050919050565b6000602082019050818103600083015261466f81614185565b9050919050565b6000602082019050818103600083015261468f816141a8565b9050919050565b600060208201905081810360008301526146af816141cb565b9050919050565b600060208201905081810360008301526146cf816141ee565b9050919050565b600060208201905081810360008301526146ef81614211565b9050919050565b6000602082019050818103600083015261470f81614234565b9050919050565b6000602082019050818103600083015261472f8161427a565b9050919050565b6000602082019050818103600083015261474f8161429d565b9050919050565b600060208201905061476b60008301846142c0565b92915050565b600061477b61478c565b90506147878282614a84565b919050565b6000604051905090565b600067ffffffffffffffff8211156147b1576147b0614beb565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156147dd576147dc614beb565b5b6147e682614c38565b9050602081019050919050565b600067ffffffffffffffff82111561480e5761480d614beb565b5b61481782614c38565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061489282614a06565b915061489d83614a06565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148d2576148d1614b2f565b5b828201905092915050565b60006148e882614a06565b91506148f383614a06565b92508261490357614902614b5e565b5b828204905092915050565b600061491982614a06565b915061492483614a06565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561495d5761495c614b2f565b5b828202905092915050565b600061497382614a06565b915061497e83614a06565b92508282101561499157614990614b2f565b5b828203905092915050565b60006149a7826149e6565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614a3d578082015181840152602081019050614a22565b83811115614a4c576000848401525b50505050565b60006002820490506001821680614a6a57607f821691505b60208210811415614a7e57614a7d614b8d565b5b50919050565b614a8d82614c38565b810181811067ffffffffffffffff82111715614aac57614aab614beb565b5b80604052505050565b6000614ac082614a06565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614af357614af2614b2f565b5b600182019050919050565b6000614b0982614a06565b9150614b1483614a06565b925082614b2457614b23614b5e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d696e743a204e6f7420656e6f7567682061766169616c6162696c6974790000600082015250565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e600082015250565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b7f4552433732313a207478667220746f2030783020616464726573730000000000600082015250565b7f57686974656c697374206e6f74206f70656e0000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a20617070726f766564206e6f6e6578697374656e7420746b6e600082015250565b7f4552433732313a20617070726f76616c2063757272656e74206f776e65720000600082015250565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e65722069732030782061646472657373600082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f6d7973746572792e6a736f6e0000000000000000000000000000000000000000600082015250565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e0000600082015250565b7f7478667220746f206e6f6e204552433732315265636965766572000000000000600082015250565b7f6e6f742057686974656c6973746564206f7220616c726561647920707572636860008201527f6173656400000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f742066696c6c206f72646572000000000000000000000000000000600082015250565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f76656400600082015250565b7f617474656d7074207265656e746572206c6f636b65642066756e6374696f6e00600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a2062616c2071727920666f72207a65726f2061646472657373600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207478667220746f6b656e206e6f74206f776e656400000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e743a20496e73756666696369656e742046756e64730000000000000000600082015250565b7f4552433732313a207478667220216f776e65722f617070726f76656400000000600082015250565b7f4d696e74206e6f74206f70656e00000000000000000000000000000000000000600082015250565b7f4d696e743a204d617820746b6e207065722077616c6c6574206578636565646560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732314d657461646174613a205552492030783020746f6b656e000000600082015250565b7f4d617468206f766572666c6f77206572726f7200000000000000000000000000600082015250565b6151468161499c565b811461515157600080fd5b50565b61515d816149ae565b811461516857600080fd5b50565b615174816149ba565b811461517f57600080fd5b50565b61518b81614a06565b811461519657600080fd5b5056fea264697066735822122026e95a192fd231768c13b6fdb2bc1ecd1a6812ac93fd00057b46b2e96b47c19b64736f6c6343000807003368747470733a2f2f7265666c656374696f6e736e66742e696f2f6d657461646174612f

Deployed ByteCode Sourcemap

16576:20783:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20337:647;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18579:361;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17354:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36176:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25820:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25382:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20996:644;;;:::i;:::-;;35120:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17568:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24188:126;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23088:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26690:314;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17325:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23768:83;;;;;;;;;;;;;:::i;:::-;;23588:80;;;;;;;;;;;;;:::i;:::-;;22778:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24416:81;;;;;;;;;;;;;:::i;:::-;;19022:631;;;;;;;;;;;;;:::i;:::-;;24077:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27075:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22431:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22890:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17534:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19665:660;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17500:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23392:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25092:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24832:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14763:94;;;;;;;;;;;;;:::i;:::-;;17467:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23676:80;;;;;;;;;;;;;:::i;:::-;;14112:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23863:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36317;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17440:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26099:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23963:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23268:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24326:78;;;;;;;;;;;;;:::i;:::-;;21648:716;;;:::i;:::-;;27331:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36492:546;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23499:77;;;;;;;;;;;;;:::i;:::-;;37050:139;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26459:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15012:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24509:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20337:647;14343:12;:10;:12::i;:::-;14332:23;;:7;:5;:7::i;:::-;:23;;;14324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20406:11:::1;20420:3;:10;20406:24;;20472:12;;20465:3;20450:12;;:18;;;;:::i;:::-;20449:35;20441:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20551:11;;20543:3;20528:12;;:18;;;;:::i;:::-;20527:35;;20519:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;20605:21;20629:12;;20605:36;;20674:3;20656:14;;:21;20652:126;;20712:3;20694:14;;:21;;;;;;;:::i;:::-;;;;;;;;20652:126;;;20765:1;20748:14;:18;;;;20652:126;20802:9;20798:179;20821:3;20817:1;:7;20798:179;;;20846:36;20856:3;20860:1;20856:6;;;;;;;;:::i;:::-;;;;;;;;20880:1;20864:13;:17;;;;:::i;:::-;20846:9;:36::i;:::-;20897:12;;:15;;;;;;;;;:::i;:::-;;;;;;20826:3;;;;;:::i;:::-;;;;20798:179;;;;20395:589;;20337:647:::0;:::o;18579:361::-;18664:4;18704:25;18689:40;;;:11;:40;;;;:109;;;;18765:33;18750:48;;;:11;:48;;;;18689:109;:170;;;;18834:25;18819:40;;;:11;:40;;;;18689:170;:243;;;;18895:37;;;18880:52;;;:11;:52;;;;18689:243;18681:251;;18579:361;;;:::o;17354:27::-;;;;;;;;;;;;;:::o;36176:84::-;36215:13;36247:5;36240:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36176:84;:::o;25820:207::-;25896:7;25924:16;25932:7;25924;:16::i;:::-;25916:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;25995:15;:24;26011:7;25995:24;;;;;;;;;;;;;;;;;;;;;25988:31;;25820:207;;;:::o;25382:372::-;25463:13;25479:16;25487:7;25479;:16::i;:::-;25463:32;;25520:5;25514:11;;:2;:11;;;;25506:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;25609:5;25595:19;;:10;:19;;;:58;;;;25618:35;25635:5;25642:10;25618:16;:35::i;:::-;25595:58;25573:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;25725:21;25734:2;25738:7;25725:8;:21::i;:::-;25452:302;25382:372;;:::o;20996:644::-;16046:11;;;;;;;;;;;16045:12;16037:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;16118:4;16104:11;;:18;;;;;;;;;;;;;;;;;;21052:11:::1;21066:12;:10;:12::i;:::-;21052:26;;21110:5;;21097:9;:18;21089:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;21202:11;;21185:12;;21168:14;;21164:1;:18;;;;:::i;:::-;:33;;;;:::i;:::-;21163:50;;21155:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;21303:12;;21297:1;21268:12;:26;21281:12;:10;:12::i;:::-;21268:26;;;;;;;;;;;;;;;;:30;;;;:::i;:::-;21267:48;;21259:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;21372:10;;;;;;;;;;;21364:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;21421:21;21445:12;;21421:36;;21513:12;:26;21526:12;:10;:12::i;:::-;21513:26;;;;;;;;;;;;;;;;:28;;;;;;;;;:::i;:::-;;;;;;21577:29;21587:3;21592:13;21577:9;:29::i;:::-;21617:12;;:15;;;;;;;;;:::i;:::-;;;;;;21041:599;;16159:5:::0;16145:11;;:19;;;;;;;;;;;;;;;;;;20996:644::o;35120:215::-;35237:6;35297:30;;;35290:37;;35120:215;;;;;;;:::o;17568:29::-;;;;:::o;24188:126::-;24234:7;24261:12;;24254:19;;24188:126;:::o;23088:168::-;23156:4;23204;23177:31;;:10;:23;23188:11;23177:23;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;23173:53;;;23219:4;23212:11;;;;23173:53;23243:5;23236:12;;23088:168;;;;:::o;26690:314::-;26885:39;26904:10;26916:7;26885:18;:39::i;:::-;26877:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;26968:28;26978:4;26984:2;26988:7;26968:9;:28::i;:::-;26690:314;;;:::o;17325:22::-;;;;;;;;;;;;;:::o;23768:83::-;14343:12;:10;:12::i;:::-;14332:23;;:7;:5;:7::i;:::-;:23;;;14324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23838:5:::1;23820:15;;:23;;;;;;;;;;;;;;;;;;23768:83::o:0;23588:80::-;14343:12;:10;:12::i;:::-;14332:23;;:7;:5;:7::i;:::-;:23;;;14324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23655:5:::1;23642:10;;:18;;;;;;;;;;;;;;;;;;23588:80::o:0;22778:100::-;14343:12;:10;:12::i;:::-;14332:23;;:7;:5;:7::i;:::-;:23;;;14324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22866:4:::1;22844:10;:19;22855:7;22844:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;22778:100:::0;:::o;24416:81::-;14343:12;:10;:12::i;:::-;14332:23;;:7;:5;:7::i;:::-;:23;;;14324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24484:5:::1;24470:11;;:19;;;;;;;;;;;;;;;;;;24416:81::o:0;19022:631::-;14343:12;:10;:12::i;:::-;14332:23;;:7;:5;:7::i;:::-;:23;;;14324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19072:20:::1;19095:21;19072:44;;19129:12;19154:18:::0;19197:3:::1;19191:2;19176:12;:17;;;;:::i;:::-;19175:25;;;;:::i;:::-;19154:46;;19225:6;;;;;;;;;;;:11;;19244:10;19225:34;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19211:48;;;;;19278:7;19270:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;19362:3;19356:2;19341:12;:17;;;;:::i;:::-;19340:25;;;;:::i;:::-;19327:38;;19390:6;;;;;;;;;;;:11;;19409:10;19390:34;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19376:48;;;;;19443:7;19435:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;19527:3;19521:2;19506:12;:17;;;;:::i;:::-;19505:25;;;;:::i;:::-;19492:38;;19555:7;;;;;;;;;;;:12;;19575:10;19555:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19541:49;;;;;19609:7;19601:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;19061:592;;;19022:631::o:0;24077:103::-;14343:12;:10;:12::i;:::-;14332:23;;:7;:5;:7::i;:::-;:23;;;14324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24162:10:::1;24145:14;:27;;;;24077:103:::0;:::o;27075:185::-;27213:39;27230:4;27236:2;27240:7;27213:39;;;;;;;;;;;;:16;:39::i;:::-;27075:185;;;:::o;22431:125::-;22506:16;22514:7;22506;:16::i;:::-;22490:32;;:12;:10;:12::i;:::-;:32;;;22482:41;;;;;;22534:14;22540:7;22534:5;:14::i;:::-;22431:125;:::o;22890:186::-;14343:12;:10;:12::i;:::-;14332:23;;:7;:5;:7::i;:::-;:23;;;14324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22975:9:::1;22970:99;22990:8;:15;22986:1;:19;22970:99;;;23053:4;23027:10;:23;23038:8;23047:1;23038:11;;;;;;;;:::i;:::-;;;;;;;;23027:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;23007:3;;;;;:::i;:::-;;;;22970:99;;;;22890:186:::0;:::o;17534:27::-;;;;:::o;19665:660::-;14343:12;:10;:12::i;:::-;14332:23;;:7;:5;:7::i;:::-;:23;;;14324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19771:12:::1;;19764:3;19749:12;;:18;;;;:::i;:::-;19748:35;19740:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19850:11;;19842:3;19827:12;;:18;;;;:::i;:::-;19826:35;;19818:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;19904:21;19928:12;;19904:36;;20018:3;20000:14;;:21;19996:126;;20056:3;20038:14;;:21;;;;;;;:::i;:::-;;;;;;;;19996:126;;;20109:1;20092:14;:18;;;;19996:126;20146:9;20142:176;20165:3;20161:1;:7;20142:176;;;20190:33;20200:3;20221:1;20205:13;:17;;;;:::i;:::-;20190:9;:33::i;:::-;20238:12;;:15;;;;;;;;;:::i;:::-;;;;;;20170:3;;;;;:::i;:::-;;;;20142:176;;;;19729:596;19665:660:::0;;:::o;17500:27::-;;;;:::o;23392:95::-;14343:12;:10;:12::i;:::-;14332:23;;:7;:5;:7::i;:::-;:23;;;14324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23473:6:::1;23462:8;:17;;;;;;;;;;;;:::i;:::-;;23392:95:::0;:::o;25092:228::-;25164:7;25184:13;25200:7;:16;25208:7;25200:16;;;;;;;;;;;;;;;;;;;;;25184:32;;25252:1;25235:19;;:5;:19;;;;25227:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25307:5;25300:12;;;25092:228;;;:::o;24832:198::-;24904:7;24949:1;24932:19;;:5;:19;;;;24924:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25006:9;:16;25016:5;25006:16;;;;;;;;;;;;;;;;24999:23;;24832:198;;;:::o;14763:94::-;14343:12;:10;:12::i;:::-;14332:23;;:7;:5;:7::i;:::-;:23;;;14324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14828:21:::1;14846:1;14828:9;:21::i;:::-;14763:94::o:0;17467:26::-;;;;:::o;23676:80::-;14343:12;:10;:12::i;:::-;14332:23;;:7;:5;:7::i;:::-;:23;;;14324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23744:4:::1;23726:15;;:22;;;;;;;;;;;;;;;;;;23676:80::o:0;14112:87::-;14158:7;14185:6;;;;;;;;;;;14178:13;;14112:87;:::o;23863:88::-;14343:12;:10;:12::i;:::-;14332:23;;:7;:5;:7::i;:::-;:23;;;14324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23935:8:::1;23927:5;:16;;;;23863:88:::0;:::o;36317:::-;36358:13;36390:7;36383:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36317:88;:::o;17440:20::-;;;;:::o;26099:289::-;26214:10;26202:22;;:8;:22;;;;26194:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;26310:8;26267:18;:30;26286:10;26267:30;;;;;;;;;;;;;;;:40;26298:8;26267:40;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;26361:8;26334:46;;26349:10;26334:46;;;26371:8;26334:46;;;;;;:::i;:::-;;;;;;;;26099:289;;:::o;23963:102::-;14343:12;:10;:12::i;:::-;14332:23;;:7;:5;:7::i;:::-;:23;;;14324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24048:9:::1;24034:11;:23;;;;23963:102:::0;:::o;23268:112::-;14343:12;:10;:12::i;:::-;14332:23;;:7;:5;:7::i;:::-;:23;;;14324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23363:9:::1;23348:12;:24;;;;23268:112:::0;:::o;24326:78::-;14343:12;:10;:12::i;:::-;14332:23;;:7;:5;:7::i;:::-;:23;;;14324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24392:4:::1;24378:11;;:18;;;;;;;;;;;;;;;;;;24326:78::o:0;21648:716::-;16046:11;;;;;;;;;;;16045:12;16037:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;16118:4;16104:11;;:18;;;;;;;;;;;;;;;;;;21706:11:::1;21720:12;:10;:12::i;:::-;21706:26;;21764:5;;21751:9;:18;21743:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;21856:11;;21839:12;;21822:14;;21818:1;:18;;;;:::i;:::-;:33;;;;:::i;:::-;21817:50;;21809:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;21921:15;;;;;;;;;;;21913:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;22006:4;21978:32;;:10;:24;21989:12;:10;:12::i;:::-;21978:24;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;21970:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;22091:5;22064:10;:24;22075:12;:10;:12::i;:::-;22064:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;22135:12;:26;22148:12;:10;:12::i;:::-;22135:26;;;;;;;;;;;;;;;;:28;;;;;;;;;:::i;:::-;;;;;;22184:21;22208:12;;22184:36;;22301:29;22311:3;22316:13;22301:9;:29::i;:::-;22341:12;;:15;;;;;;;;;:::i;:::-;;;;;;21695:669;;16159:5:::0;16145:11;;:19;;;;;;;;;;;;;;;;;;21648:716::o;27331:305::-;27506:39;27525:10;27537:7;27506:18;:39::i;:::-;27498:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;27589:39;27603:4;27609:2;27613:7;27622:5;27589:13;:39::i;:::-;27331:305;;;;:::o;36492:546::-;36550:13;36583:16;36591:7;36583;:16::i;:::-;36575:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;36644:22;36691:11;;;;;;;;;;;36687:308;;;36793:8;36776:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;36758:61;;36687:308;;;36945:8;36955:17;36964:7;36955:8;:17::i;:::-;36928:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;36910:73;;36687:308;37022:8;37015:15;;;36492:546;;;:::o;23499:77::-;14343:12;:10;:12::i;:::-;14332:23;;:7;:5;:7::i;:::-;:23;;;14324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23564:4:::1;23551:10;;:17;;;;;;;;;;;;;;;;;;23499:77::o:0;37050:139::-;37094:13;37155:8;37138:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;37124:57;;37050:139;:::o;26459:164::-;26556:4;26580:18;:25;26599:5;26580:25;;;;;;;;;;;;;;;:35;26606:8;26580:35;;;;;;;;;;;;;;;;;;;;;;;;;26573:42;;26459:164;;;;:::o;15012:186::-;14343:12;:10;:12::i;:::-;14332:23;;:7;:5;:7::i;:::-;:23;;;14324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15121:1:::1;15101:22;;:8;:22;;;;15093:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15171:19;15181:8;15171:9;:19::i;:::-;15012:186:::0;:::o;24509:259::-;24574:7;24716:6;24689:9;:23;24699:12;24689:23;;;;;;;;;;;;;;;;:34;;;;:::i;:::-;24682:41;;24509:259;;;:::o;13495:98::-;13548:7;13575:10;13568:17;;13495:98;:::o;30087:110::-;30163:26;30173:2;30177:7;30163:26;;;;;;;;;;;;:9;:26::i;:::-;30087:110;;:::o;29122:127::-;29187:4;29239:1;29211:30;;:7;:16;29219:7;29211:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29204:37;;29122:127;;;:::o;33023:167::-;33125:2;33098:15;:24;33114:7;33098:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33174:7;33170:2;33143:39;;33152:16;33160:7;33152;:16::i;:::-;33143:39;;;;;;;;;;;;33023:167;;:::o;29416:329::-;29509:4;29534:16;29542:7;29534;:16::i;:::-;29526:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29598:13;29614:16;29622:7;29614;:16::i;:::-;29598:32;;29660:5;29649:16;;:7;:16;;;:51;;;;29693:7;29669:31;;:20;29681:7;29669:11;:20::i;:::-;:31;;;29649:51;:87;;;;29704:32;29721:5;29728:7;29704:16;:32::i;:::-;29649:87;29641:96;;;29416:329;;;;:::o;32358:547::-;32510:4;32490:24;;:16;32498:7;32490;:16::i;:::-;:24;;;32482:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32580:1;32566:16;;:2;:16;;;;32558:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;32625:39;32646:4;32652:2;32656:7;32625:20;:39::i;:::-;32729:29;32746:1;32750:7;32729:8;:29::i;:::-;32790:1;32771:9;:15;32781:4;32771:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32819:1;32802:9;:13;32812:2;32802:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32850:2;32831:7;:16;32839:7;32831:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32889:7;32885:2;32870:27;;32879:4;32870:27;;;;;;;;;;;;32358:547;;;:::o;31668:353::-;31728:13;31744:16;31752:7;31744;:16::i;:::-;31728:32;;31773:48;31794:5;31809:1;31813:7;31773:20;:48::i;:::-;31862:29;31879:1;31883:7;31862:8;:29::i;:::-;31924:1;31904:9;:16;31914:5;31904:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;31943:7;:16;31951:7;31943:16;;;;;;;;;;;;31936:23;;;;;;;;;;;32005:7;32001:1;31977:36;;31986:5;31977:36;;;;;;;;;;;;31717:304;31668:353;:::o;15206:173::-;15262:16;15281:6;;;;;;;;;;;15262:25;;15307:8;15298:6;;:17;;;;;;;;;;;;;;;;;;15362:8;15331:40;;15352:8;15331:40;;;;;;;;;;;;15251:128;15206:173;:::o;28518:291::-;28675:28;28685:4;28691:2;28695:7;28675:9;:28::i;:::-;28722:48;28745:4;28751:2;28755:7;28764:5;28722:22;:48::i;:::-;28714:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;28518:291;;;;:::o;15422:532::-;15478:13;15517:1;15508:5;:10;15504:53;;;15535:10;;;;;;;;;;;;;;;;;;;;;15504:53;15567:12;15582:5;15567:20;;15598:14;15623:78;15638:1;15630:4;:9;15623:78;;15656:8;;;;;:::i;:::-;;;;15687:2;15679:10;;;;;:::i;:::-;;;15623:78;;;15711:19;15743:6;15733:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15711:39;;15761:154;15777:1;15768:5;:10;15761:154;;15805:1;15795:11;;;;;:::i;:::-;;;15872:2;15864:5;:10;;;;:::i;:::-;15851:2;:24;;;;:::i;:::-;15838:39;;15821:6;15828;15821:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;15901:2;15892:11;;;;;:::i;:::-;;;15761:154;;;15939:6;15925:21;;;;;15422:532;;;;:::o;30424:297::-;30554:18;30560:2;30564:7;30554:5;:18::i;:::-;30605:54;30636:1;30640:2;30644:7;30653:5;30605:22;:54::i;:::-;30583:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;30424:297;;;:::o;35907:126::-;;;;:::o;33755:777::-;33910:4;33931:15;:2;:13;;;:15::i;:::-;33927:598;;;33983:2;33967:36;;;34004:10;34016:4;34022:7;34031:5;33967:70;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33963:507;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34228:1;34211:6;:13;:18;34207:248;;;34254:36;;;;;;;;;;:::i;:::-;;;;;;;;34207:248;34405:6;34399:13;34390:6;34386:2;34382:15;34375:38;33963:507;34098:45;;;34088:55;;;:6;:55;;;;34081:62;;;;;33927:598;34509:4;34502:11;;33755:777;;;;;;;:::o;31057:382::-;31151:1;31137:16;;:2;:16;;;;31129:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31210:16;31218:7;31210;:16::i;:::-;31209:17;31201:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31272:45;31301:1;31305:2;31309:7;31272:20;:45::i;:::-;31347:1;31330:9;:13;31340:2;31330:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31378:2;31359:7;:16;31367:7;31359:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31423:7;31419:2;31398:33;;31415:1;31398:33;;;;;;;;;;;;31057:382;;:::o;6416:387::-;6476:4;6684:12;6751:7;6739:20;6731:28;;6794:1;6787:4;:8;6780:15;;;6416:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:552::-;2623:8;2633:6;2683:3;2676:4;2668:6;2664:17;2660:27;2650:122;;2691:79;;:::i;:::-;2650:122;2804:6;2791:20;2781:30;;2834:18;2826:6;2823:30;2820:117;;;2856:79;;:::i;:::-;2820:117;2970:4;2962:6;2958:17;2946:29;;3024:3;3016:4;3008:6;3004:17;2994:8;2990:32;2987:41;2984:128;;;3031:79;;:::i;:::-;2984:128;2566:552;;;;;:::o;3137:338::-;3192:5;3241:3;3234:4;3226:6;3222:17;3218:27;3208:122;;3249:79;;:::i;:::-;3208:122;3366:6;3353:20;3391:78;3465:3;3457:6;3450:4;3442:6;3438:17;3391:78;:::i;:::-;3382:87;;3198:277;3137:338;;;;:::o;3495:340::-;3551:5;3600:3;3593:4;3585:6;3581:17;3577:27;3567:122;;3608:79;;:::i;:::-;3567:122;3725:6;3712:20;3750:79;3825:3;3817:6;3810:4;3802:6;3798:17;3750:79;:::i;:::-;3741:88;;3557:278;3495:340;;;;:::o;3841:139::-;3887:5;3925:6;3912:20;3903:29;;3941:33;3968:5;3941:33;:::i;:::-;3841:139;;;;:::o;3986:329::-;4045:6;4094:2;4082:9;4073:7;4069:23;4065:32;4062:119;;;4100:79;;:::i;:::-;4062:119;4220:1;4245:53;4290:7;4281:6;4270:9;4266:22;4245:53;:::i;:::-;4235:63;;4191:117;3986:329;;;;:::o;4321:474::-;4389:6;4397;4446:2;4434:9;4425:7;4421:23;4417:32;4414:119;;;4452:79;;:::i;:::-;4414:119;4572:1;4597:53;4642:7;4633:6;4622:9;4618:22;4597:53;:::i;:::-;4587:63;;4543:117;4699:2;4725:53;4770:7;4761:6;4750:9;4746:22;4725:53;:::i;:::-;4715:63;;4670:118;4321:474;;;;;:::o;4801:619::-;4878:6;4886;4894;4943:2;4931:9;4922:7;4918:23;4914:32;4911:119;;;4949:79;;:::i;:::-;4911:119;5069:1;5094:53;5139:7;5130:6;5119:9;5115:22;5094:53;:::i;:::-;5084:63;;5040:117;5196:2;5222:53;5267:7;5258:6;5247:9;5243:22;5222:53;:::i;:::-;5212:63;;5167:118;5324:2;5350:53;5395:7;5386:6;5375:9;5371:22;5350:53;:::i;:::-;5340:63;;5295:118;4801:619;;;;;:::o;5426:963::-;5523:6;5531;5539;5547;5555;5604:3;5592:9;5583:7;5579:23;5575:33;5572:120;;;5611:79;;:::i;:::-;5572:120;5731:1;5756:53;5801:7;5792:6;5781:9;5777:22;5756:53;:::i;:::-;5746:63;;5702:117;5858:2;5884:53;5929:7;5920:6;5909:9;5905:22;5884:53;:::i;:::-;5874:63;;5829:118;5986:2;6012:53;6057:7;6048:6;6037:9;6033:22;6012:53;:::i;:::-;6002:63;;5957:118;6142:2;6131:9;6127:18;6114:32;6173:18;6165:6;6162:30;6159:117;;;6195:79;;:::i;:::-;6159:117;6308:64;6364:7;6355:6;6344:9;6340:22;6308:64;:::i;:::-;6290:82;;;;6085:297;5426:963;;;;;;;;:::o;6395:943::-;6490:6;6498;6506;6514;6563:3;6551:9;6542:7;6538:23;6534:33;6531:120;;;6570:79;;:::i;:::-;6531:120;6690:1;6715:53;6760:7;6751:6;6740:9;6736:22;6715:53;:::i;:::-;6705:63;;6661:117;6817:2;6843:53;6888:7;6879:6;6868:9;6864:22;6843:53;:::i;:::-;6833:63;;6788:118;6945:2;6971:53;7016:7;7007:6;6996:9;6992:22;6971:53;:::i;:::-;6961:63;;6916:118;7101:2;7090:9;7086:18;7073:32;7132:18;7124:6;7121:30;7118:117;;;7154:79;;:::i;:::-;7118:117;7259:62;7313:7;7304:6;7293:9;7289:22;7259:62;:::i;:::-;7249:72;;7044:287;6395:943;;;;;;;:::o;7344:468::-;7409:6;7417;7466:2;7454:9;7445:7;7441:23;7437:32;7434:119;;;7472:79;;:::i;:::-;7434:119;7592:1;7617:53;7662:7;7653:6;7642:9;7638:22;7617:53;:::i;:::-;7607:63;;7563:117;7719:2;7745:50;7787:7;7778:6;7767:9;7763:22;7745:50;:::i;:::-;7735:60;;7690:115;7344:468;;;;;:::o;7818:474::-;7886:6;7894;7943:2;7931:9;7922:7;7918:23;7914:32;7911:119;;;7949:79;;:::i;:::-;7911:119;8069:1;8094:53;8139:7;8130:6;8119:9;8115:22;8094:53;:::i;:::-;8084:63;;8040:117;8196:2;8222:53;8267:7;8258:6;8247:9;8243:22;8222:53;:::i;:::-;8212:63;;8167:118;7818:474;;;;;:::o;8298:539::-;8382:6;8431:2;8419:9;8410:7;8406:23;8402:32;8399:119;;;8437:79;;:::i;:::-;8399:119;8585:1;8574:9;8570:17;8557:31;8615:18;8607:6;8604:30;8601:117;;;8637:79;;:::i;:::-;8601:117;8742:78;8812:7;8803:6;8792:9;8788:22;8742:78;:::i;:::-;8732:88;;8528:302;8298:539;;;;:::o;8843:327::-;8901:6;8950:2;8938:9;8929:7;8925:23;8921:32;8918:119;;;8956:79;;:::i;:::-;8918:119;9076:1;9101:52;9145:7;9136:6;9125:9;9121:22;9101:52;:::i;:::-;9091:62;;9047:116;8843:327;;;;:::o;9176:349::-;9245:6;9294:2;9282:9;9273:7;9269:23;9265:32;9262:119;;;9300:79;;:::i;:::-;9262:119;9420:1;9445:63;9500:7;9491:6;9480:9;9476:22;9445:63;:::i;:::-;9435:73;;9391:127;9176:349;;;;:::o;9531:509::-;9600:6;9649:2;9637:9;9628:7;9624:23;9620:32;9617:119;;;9655:79;;:::i;:::-;9617:119;9803:1;9792:9;9788:17;9775:31;9833:18;9825:6;9822:30;9819:117;;;9855:79;;:::i;:::-;9819:117;9960:63;10015:7;10006:6;9995:9;9991:22;9960:63;:::i;:::-;9950:73;;9746:287;9531:509;;;;:::o;10046:329::-;10105:6;10154:2;10142:9;10133:7;10129:23;10125:32;10122:119;;;10160:79;;:::i;:::-;10122:119;10280:1;10305:53;10350:7;10341:6;10330:9;10326:22;10305:53;:::i;:::-;10295:63;;10251:117;10046:329;;;;:::o;10381:118::-;10468:24;10486:5;10468:24;:::i;:::-;10463:3;10456:37;10381:118;;:::o;10505:109::-;10586:21;10601:5;10586:21;:::i;:::-;10581:3;10574:34;10505:109;;:::o;10620:115::-;10705:23;10722:5;10705:23;:::i;:::-;10700:3;10693:36;10620:115;;:::o;10741:360::-;10827:3;10855:38;10887:5;10855:38;:::i;:::-;10909:70;10972:6;10967:3;10909:70;:::i;:::-;10902:77;;10988:52;11033:6;11028:3;11021:4;11014:5;11010:16;10988:52;:::i;:::-;11065:29;11087:6;11065:29;:::i;:::-;11060:3;11056:39;11049:46;;10831:270;10741:360;;;;:::o;11107:364::-;11195:3;11223:39;11256:5;11223:39;:::i;:::-;11278:71;11342:6;11337:3;11278:71;:::i;:::-;11271:78;;11358:52;11403:6;11398:3;11391:4;11384:5;11380:16;11358:52;:::i;:::-;11435:29;11457:6;11435:29;:::i;:::-;11430:3;11426:39;11419:46;;11199:272;11107:364;;;;:::o;11477:377::-;11583:3;11611:39;11644:5;11611:39;:::i;:::-;11666:89;11748:6;11743:3;11666:89;:::i;:::-;11659:96;;11764:52;11809:6;11804:3;11797:4;11790:5;11786:16;11764:52;:::i;:::-;11841:6;11836:3;11832:16;11825:23;;11587:267;11477:377;;;;:::o;11884:845::-;11987:3;12024:5;12018:12;12053:36;12079:9;12053:36;:::i;:::-;12105:89;12187:6;12182:3;12105:89;:::i;:::-;12098:96;;12225:1;12214:9;12210:17;12241:1;12236:137;;;;12387:1;12382:341;;;;12203:520;;12236:137;12320:4;12316:9;12305;12301:25;12296:3;12289:38;12356:6;12351:3;12347:16;12340:23;;12236:137;;12382:341;12449:38;12481:5;12449:38;:::i;:::-;12509:1;12523:154;12537:6;12534:1;12531:13;12523:154;;;12611:7;12605:14;12601:1;12596:3;12592:11;12585:35;12661:1;12652:7;12648:15;12637:26;;12559:4;12556:1;12552:12;12547:17;;12523:154;;;12706:6;12701:3;12697:16;12690:23;;12389:334;;12203:520;;11991:738;;11884:845;;;;:::o;12735:366::-;12877:3;12898:67;12962:2;12957:3;12898:67;:::i;:::-;12891:74;;12974:93;13063:3;12974:93;:::i;:::-;13092:2;13087:3;13083:12;13076:19;;12735:366;;;:::o;13107:::-;13249:3;13270:67;13334:2;13329:3;13270:67;:::i;:::-;13263:74;;13346:93;13435:3;13346:93;:::i;:::-;13464:2;13459:3;13455:12;13448:19;;13107:366;;;:::o;13479:402::-;13639:3;13660:85;13742:2;13737:3;13660:85;:::i;:::-;13653:92;;13754:93;13843:3;13754:93;:::i;:::-;13872:2;13867:3;13863:12;13856:19;;13479:402;;;:::o;13887:366::-;14029:3;14050:67;14114:2;14109:3;14050:67;:::i;:::-;14043:74;;14126:93;14215:3;14126:93;:::i;:::-;14244:2;14239:3;14235:12;14228:19;;13887:366;;;:::o;14259:::-;14401:3;14422:67;14486:2;14481:3;14422:67;:::i;:::-;14415:74;;14498:93;14587:3;14498:93;:::i;:::-;14616:2;14611:3;14607:12;14600:19;;14259:366;;;:::o;14631:::-;14773:3;14794:67;14858:2;14853:3;14794:67;:::i;:::-;14787:74;;14870:93;14959:3;14870:93;:::i;:::-;14988:2;14983:3;14979:12;14972:19;;14631:366;;;:::o;15003:::-;15145:3;15166:67;15230:2;15225:3;15166:67;:::i;:::-;15159:74;;15242:93;15331:3;15242:93;:::i;:::-;15360:2;15355:3;15351:12;15344:19;;15003:366;;;:::o;15375:::-;15517:3;15538:67;15602:2;15597:3;15538:67;:::i;:::-;15531:74;;15614:93;15703:3;15614:93;:::i;:::-;15732:2;15727:3;15723:12;15716:19;;15375:366;;;:::o;15747:::-;15889:3;15910:67;15974:2;15969:3;15910:67;:::i;:::-;15903:74;;15986:93;16075:3;15986:93;:::i;:::-;16104:2;16099:3;16095:12;16088:19;;15747:366;;;:::o;16119:::-;16261:3;16282:67;16346:2;16341:3;16282:67;:::i;:::-;16275:74;;16358:93;16447:3;16358:93;:::i;:::-;16476:2;16471:3;16467:12;16460:19;;16119:366;;;:::o;16491:::-;16633:3;16654:67;16718:2;16713:3;16654:67;:::i;:::-;16647:74;;16730:93;16819:3;16730:93;:::i;:::-;16848:2;16843:3;16839:12;16832:19;;16491:366;;;:::o;16863:402::-;17023:3;17044:85;17126:2;17121:3;17044:85;:::i;:::-;17037:92;;17138:93;17227:3;17138:93;:::i;:::-;17256:2;17251:3;17247:12;17240:19;;16863:402;;;:::o;17271:366::-;17413:3;17434:67;17498:2;17493:3;17434:67;:::i;:::-;17427:74;;17510:93;17599:3;17510:93;:::i;:::-;17628:2;17623:3;17619:12;17612:19;;17271:366;;;:::o;17643:::-;17785:3;17806:67;17870:2;17865:3;17806:67;:::i;:::-;17799:74;;17882:93;17971:3;17882:93;:::i;:::-;18000:2;17995:3;17991:12;17984:19;;17643:366;;;:::o;18015:::-;18157:3;18178:67;18242:2;18237:3;18178:67;:::i;:::-;18171:74;;18254:93;18343:3;18254:93;:::i;:::-;18372:2;18367:3;18363:12;18356:19;;18015:366;;;:::o;18387:::-;18529:3;18550:67;18614:2;18609:3;18550:67;:::i;:::-;18543:74;;18626:93;18715:3;18626:93;:::i;:::-;18744:2;18739:3;18735:12;18728:19;;18387:366;;;:::o;18759:::-;18901:3;18922:67;18986:2;18981:3;18922:67;:::i;:::-;18915:74;;18998:93;19087:3;18998:93;:::i;:::-;19116:2;19111:3;19107:12;19100:19;;18759:366;;;:::o;19131:::-;19273:3;19294:67;19358:2;19353:3;19294:67;:::i;:::-;19287:74;;19370:93;19459:3;19370:93;:::i;:::-;19488:2;19483:3;19479:12;19472:19;;19131:366;;;:::o;19503:::-;19645:3;19666:67;19730:2;19725:3;19666:67;:::i;:::-;19659:74;;19742:93;19831:3;19742:93;:::i;:::-;19860:2;19855:3;19851:12;19844:19;;19503:366;;;:::o;19875:::-;20017:3;20038:67;20102:2;20097:3;20038:67;:::i;:::-;20031:74;;20114:93;20203:3;20114:93;:::i;:::-;20232:2;20227:3;20223:12;20216:19;;19875:366;;;:::o;20247:400::-;20407:3;20428:84;20510:1;20505:3;20428:84;:::i;:::-;20421:91;;20521:93;20610:3;20521:93;:::i;:::-;20639:1;20634:3;20630:11;20623:18;;20247:400;;;:::o;20653:366::-;20795:3;20816:67;20880:2;20875:3;20816:67;:::i;:::-;20809:74;;20892:93;20981:3;20892:93;:::i;:::-;21010:2;21005:3;21001:12;20994:19;;20653:366;;;:::o;21025:::-;21167:3;21188:67;21252:2;21247:3;21188:67;:::i;:::-;21181:74;;21264:93;21353:3;21264:93;:::i;:::-;21382:2;21377:3;21373:12;21366:19;;21025:366;;;:::o;21397:::-;21539:3;21560:67;21624:2;21619:3;21560:67;:::i;:::-;21553:74;;21636:93;21725:3;21636:93;:::i;:::-;21754:2;21749:3;21745:12;21738:19;;21397:366;;;:::o;21769:::-;21911:3;21932:67;21996:2;21991:3;21932:67;:::i;:::-;21925:74;;22008:93;22097:3;22008:93;:::i;:::-;22126:2;22121:3;22117:12;22110:19;;21769:366;;;:::o;22141:::-;22283:3;22304:67;22368:2;22363:3;22304:67;:::i;:::-;22297:74;;22380:93;22469:3;22380:93;:::i;:::-;22498:2;22493:3;22489:12;22482:19;;22141:366;;;:::o;22513:::-;22655:3;22676:67;22740:2;22735:3;22676:67;:::i;:::-;22669:74;;22752:93;22841:3;22752:93;:::i;:::-;22870:2;22865:3;22861:12;22854:19;;22513:366;;;:::o;22885:398::-;23044:3;23065:83;23146:1;23141:3;23065:83;:::i;:::-;23058:90;;23157:93;23246:3;23157:93;:::i;:::-;23275:1;23270:3;23266:11;23259:18;;22885:398;;;:::o;23289:366::-;23431:3;23452:67;23516:2;23511:3;23452:67;:::i;:::-;23445:74;;23528:93;23617:3;23528:93;:::i;:::-;23646:2;23641:3;23637:12;23630:19;;23289:366;;;:::o;23661:::-;23803:3;23824:67;23888:2;23883:3;23824:67;:::i;:::-;23817:74;;23900:93;23989:3;23900:93;:::i;:::-;24018:2;24013:3;24009:12;24002:19;;23661:366;;;:::o;24033:118::-;24120:24;24138:5;24120:24;:::i;:::-;24115:3;24108:37;24033:118;;:::o;24157:695::-;24435:3;24457:92;24545:3;24536:6;24457:92;:::i;:::-;24450:99;;24566:95;24657:3;24648:6;24566:95;:::i;:::-;24559:102;;24678:148;24822:3;24678:148;:::i;:::-;24671:155;;24843:3;24836:10;;24157:695;;;;;:::o;24858:535::-;25088:3;25110:92;25198:3;25189:6;25110:92;:::i;:::-;25103:99;;25219:148;25363:3;25219:148;:::i;:::-;25212:155;;25384:3;25377:10;;24858:535;;;;:::o;25399:::-;25629:3;25651:92;25739:3;25730:6;25651:92;:::i;:::-;25644:99;;25760:148;25904:3;25760:148;:::i;:::-;25753:155;;25925:3;25918:10;;25399:535;;;;:::o;25940:379::-;26124:3;26146:147;26289:3;26146:147;:::i;:::-;26139:154;;26310:3;26303:10;;25940:379;;;:::o;26325:222::-;26418:4;26456:2;26445:9;26441:18;26433:26;;26469:71;26537:1;26526:9;26522:17;26513:6;26469:71;:::i;:::-;26325:222;;;;:::o;26553:640::-;26748:4;26786:3;26775:9;26771:19;26763:27;;26800:71;26868:1;26857:9;26853:17;26844:6;26800:71;:::i;:::-;26881:72;26949:2;26938:9;26934:18;26925:6;26881:72;:::i;:::-;26963;27031:2;27020:9;27016:18;27007:6;26963:72;:::i;:::-;27082:9;27076:4;27072:20;27067:2;27056:9;27052:18;27045:48;27110:76;27181:4;27172:6;27110:76;:::i;:::-;27102:84;;26553:640;;;;;;;:::o;27199:210::-;27286:4;27324:2;27313:9;27309:18;27301:26;;27337:65;27399:1;27388:9;27384:17;27375:6;27337:65;:::i;:::-;27199:210;;;;:::o;27415:218::-;27506:4;27544:2;27533:9;27529:18;27521:26;;27557:69;27623:1;27612:9;27608:17;27599:6;27557:69;:::i;:::-;27415:218;;;;:::o;27639:313::-;27752:4;27790:2;27779:9;27775:18;27767:26;;27839:9;27833:4;27829:20;27825:1;27814:9;27810:17;27803:47;27867:78;27940:4;27931:6;27867:78;:::i;:::-;27859:86;;27639:313;;;;:::o;27958:419::-;28124:4;28162:2;28151:9;28147:18;28139:26;;28211:9;28205:4;28201:20;28197:1;28186:9;28182:17;28175:47;28239:131;28365:4;28239:131;:::i;:::-;28231:139;;27958:419;;;:::o;28383:::-;28549:4;28587:2;28576:9;28572:18;28564:26;;28636:9;28630:4;28626:20;28622:1;28611:9;28607:17;28600:47;28664:131;28790:4;28664:131;:::i;:::-;28656:139;;28383:419;;;:::o;28808:::-;28974:4;29012:2;29001:9;28997:18;28989:26;;29061:9;29055:4;29051:20;29047:1;29036:9;29032:17;29025:47;29089:131;29215:4;29089:131;:::i;:::-;29081:139;;28808:419;;;:::o;29233:::-;29399:4;29437:2;29426:9;29422:18;29414:26;;29486:9;29480:4;29476:20;29472:1;29461:9;29457:17;29450:47;29514:131;29640:4;29514:131;:::i;:::-;29506:139;;29233:419;;;:::o;29658:::-;29824:4;29862:2;29851:9;29847:18;29839:26;;29911:9;29905:4;29901:20;29897:1;29886:9;29882:17;29875:47;29939:131;30065:4;29939:131;:::i;:::-;29931:139;;29658:419;;;:::o;30083:::-;30249:4;30287:2;30276:9;30272:18;30264:26;;30336:9;30330:4;30326:20;30322:1;30311:9;30307:17;30300:47;30364:131;30490:4;30364:131;:::i;:::-;30356:139;;30083:419;;;:::o;30508:::-;30674:4;30712:2;30701:9;30697:18;30689:26;;30761:9;30755:4;30751:20;30747:1;30736:9;30732:17;30725:47;30789:131;30915:4;30789:131;:::i;:::-;30781:139;;30508:419;;;:::o;30933:::-;31099:4;31137:2;31126:9;31122:18;31114:26;;31186:9;31180:4;31176:20;31172:1;31161:9;31157:17;31150:47;31214:131;31340:4;31214:131;:::i;:::-;31206:139;;30933:419;;;:::o;31358:::-;31524:4;31562:2;31551:9;31547:18;31539:26;;31611:9;31605:4;31601:20;31597:1;31586:9;31582:17;31575:47;31639:131;31765:4;31639:131;:::i;:::-;31631:139;;31358:419;;;:::o;31783:::-;31949:4;31987:2;31976:9;31972:18;31964:26;;32036:9;32030:4;32026:20;32022:1;32011:9;32007:17;32000:47;32064:131;32190:4;32064:131;:::i;:::-;32056:139;;31783:419;;;:::o;32208:::-;32374:4;32412:2;32401:9;32397:18;32389:26;;32461:9;32455:4;32451:20;32447:1;32436:9;32432:17;32425:47;32489:131;32615:4;32489:131;:::i;:::-;32481:139;;32208:419;;;:::o;32633:::-;32799:4;32837:2;32826:9;32822:18;32814:26;;32886:9;32880:4;32876:20;32872:1;32861:9;32857:17;32850:47;32914:131;33040:4;32914:131;:::i;:::-;32906:139;;32633:419;;;:::o;33058:::-;33224:4;33262:2;33251:9;33247:18;33239:26;;33311:9;33305:4;33301:20;33297:1;33286:9;33282:17;33275:47;33339:131;33465:4;33339:131;:::i;:::-;33331:139;;33058:419;;;:::o;33483:::-;33649:4;33687:2;33676:9;33672:18;33664:26;;33736:9;33730:4;33726:20;33722:1;33711:9;33707:17;33700:47;33764:131;33890:4;33764:131;:::i;:::-;33756:139;;33483:419;;;:::o;33908:::-;34074:4;34112:2;34101:9;34097:18;34089:26;;34161:9;34155:4;34151:20;34147:1;34136:9;34132:17;34125:47;34189:131;34315:4;34189:131;:::i;:::-;34181:139;;33908:419;;;:::o;34333:::-;34499:4;34537:2;34526:9;34522:18;34514:26;;34586:9;34580:4;34576:20;34572:1;34561:9;34557:17;34550:47;34614:131;34740:4;34614:131;:::i;:::-;34606:139;;34333:419;;;:::o;34758:::-;34924:4;34962:2;34951:9;34947:18;34939:26;;35011:9;35005:4;35001:20;34997:1;34986:9;34982:17;34975:47;35039:131;35165:4;35039:131;:::i;:::-;35031:139;;34758:419;;;:::o;35183:::-;35349:4;35387:2;35376:9;35372:18;35364:26;;35436:9;35430:4;35426:20;35422:1;35411:9;35407:17;35400:47;35464:131;35590:4;35464:131;:::i;:::-;35456:139;;35183:419;;;:::o;35608:::-;35774:4;35812:2;35801:9;35797:18;35789:26;;35861:9;35855:4;35851:20;35847:1;35836:9;35832:17;35825:47;35889:131;36015:4;35889:131;:::i;:::-;35881:139;;35608:419;;;:::o;36033:::-;36199:4;36237:2;36226:9;36222:18;36214:26;;36286:9;36280:4;36276:20;36272:1;36261:9;36257:17;36250:47;36314:131;36440:4;36314:131;:::i;:::-;36306:139;;36033:419;;;:::o;36458:::-;36624:4;36662:2;36651:9;36647:18;36639:26;;36711:9;36705:4;36701:20;36697:1;36686:9;36682:17;36675:47;36739:131;36865:4;36739:131;:::i;:::-;36731:139;;36458:419;;;:::o;36883:::-;37049:4;37087:2;37076:9;37072:18;37064:26;;37136:9;37130:4;37126:20;37122:1;37111:9;37107:17;37100:47;37164:131;37290:4;37164:131;:::i;:::-;37156:139;;36883:419;;;:::o;37308:::-;37474:4;37512:2;37501:9;37497:18;37489:26;;37561:9;37555:4;37551:20;37547:1;37536:9;37532:17;37525:47;37589:131;37715:4;37589:131;:::i;:::-;37581:139;;37308:419;;;:::o;37733:::-;37899:4;37937:2;37926:9;37922:18;37914:26;;37986:9;37980:4;37976:20;37972:1;37961:9;37957:17;37950:47;38014:131;38140:4;38014:131;:::i;:::-;38006:139;;37733:419;;;:::o;38158:::-;38324:4;38362:2;38351:9;38347:18;38339:26;;38411:9;38405:4;38401:20;38397:1;38386:9;38382:17;38375:47;38439:131;38565:4;38439:131;:::i;:::-;38431:139;;38158:419;;;:::o;38583:::-;38749:4;38787:2;38776:9;38772:18;38764:26;;38836:9;38830:4;38826:20;38822:1;38811:9;38807:17;38800:47;38864:131;38990:4;38864:131;:::i;:::-;38856:139;;38583:419;;;:::o;39008:222::-;39101:4;39139:2;39128:9;39124:18;39116:26;;39152:71;39220:1;39209:9;39205:17;39196:6;39152:71;:::i;:::-;39008:222;;;;:::o;39236:129::-;39270:6;39297:20;;:::i;:::-;39287:30;;39326:33;39354:4;39346:6;39326:33;:::i;:::-;39236:129;;;:::o;39371:75::-;39404:6;39437:2;39431:9;39421:19;;39371:75;:::o;39452:311::-;39529:4;39619:18;39611:6;39608:30;39605:56;;;39641:18;;:::i;:::-;39605:56;39691:4;39683:6;39679:17;39671:25;;39751:4;39745;39741:15;39733:23;;39452:311;;;:::o;39769:307::-;39830:4;39920:18;39912:6;39909:30;39906:56;;;39942:18;;:::i;:::-;39906:56;39980:29;40002:6;39980:29;:::i;:::-;39972:37;;40064:4;40058;40054:15;40046:23;;39769:307;;;:::o;40082:308::-;40144:4;40234:18;40226:6;40223:30;40220:56;;;40256:18;;:::i;:::-;40220:56;40294:29;40316:6;40294:29;:::i;:::-;40286:37;;40378:4;40372;40368:15;40360:23;;40082:308;;;:::o;40396:141::-;40445:4;40468:3;40460:11;;40491:3;40488:1;40481:14;40525:4;40522:1;40512:18;40504:26;;40396:141;;;:::o;40543:98::-;40594:6;40628:5;40622:12;40612:22;;40543:98;;;:::o;40647:99::-;40699:6;40733:5;40727:12;40717:22;;40647:99;;;:::o;40752:168::-;40835:11;40869:6;40864:3;40857:19;40909:4;40904:3;40900:14;40885:29;;40752:168;;;;:::o;40926:147::-;41027:11;41064:3;41049:18;;40926:147;;;;:::o;41079:169::-;41163:11;41197:6;41192:3;41185:19;41237:4;41232:3;41228:14;41213:29;;41079:169;;;;:::o;41254:148::-;41356:11;41393:3;41378:18;;41254:148;;;;:::o;41408:305::-;41448:3;41467:20;41485:1;41467:20;:::i;:::-;41462:25;;41501:20;41519:1;41501:20;:::i;:::-;41496:25;;41655:1;41587:66;41583:74;41580:1;41577:81;41574:107;;;41661:18;;:::i;:::-;41574:107;41705:1;41702;41698:9;41691:16;;41408:305;;;;:::o;41719:185::-;41759:1;41776:20;41794:1;41776:20;:::i;:::-;41771:25;;41810:20;41828:1;41810:20;:::i;:::-;41805:25;;41849:1;41839:35;;41854:18;;:::i;:::-;41839:35;41896:1;41893;41889:9;41884:14;;41719:185;;;;:::o;41910:348::-;41950:7;41973:20;41991:1;41973:20;:::i;:::-;41968:25;;42007:20;42025:1;42007:20;:::i;:::-;42002:25;;42195:1;42127:66;42123:74;42120:1;42117:81;42112:1;42105:9;42098:17;42094:105;42091:131;;;42202:18;;:::i;:::-;42091:131;42250:1;42247;42243:9;42232:20;;41910:348;;;;:::o;42264:191::-;42304:4;42324:20;42342:1;42324:20;:::i;:::-;42319:25;;42358:20;42376:1;42358:20;:::i;:::-;42353:25;;42397:1;42394;42391:8;42388:34;;;42402:18;;:::i;:::-;42388:34;42447:1;42444;42440:9;42432:17;;42264:191;;;;:::o;42461:96::-;42498:7;42527:24;42545:5;42527:24;:::i;:::-;42516:35;;42461:96;;;:::o;42563:90::-;42597:7;42640:5;42633:13;42626:21;42615:32;;42563:90;;;:::o;42659:149::-;42695:7;42735:66;42728:5;42724:78;42713:89;;42659:149;;;:::o;42814:126::-;42851:7;42891:42;42884:5;42880:54;42869:65;;42814:126;;;:::o;42946:77::-;42983:7;43012:5;43001:16;;42946:77;;;:::o;43029:154::-;43113:6;43108:3;43103;43090:30;43175:1;43166:6;43161:3;43157:16;43150:27;43029:154;;;:::o;43189:307::-;43257:1;43267:113;43281:6;43278:1;43275:13;43267:113;;;43366:1;43361:3;43357:11;43351:18;43347:1;43342:3;43338:11;43331:39;43303:2;43300:1;43296:10;43291:15;;43267:113;;;43398:6;43395:1;43392:13;43389:101;;;43478:1;43469:6;43464:3;43460:16;43453:27;43389:101;43238:258;43189:307;;;:::o;43502:320::-;43546:6;43583:1;43577:4;43573:12;43563:22;;43630:1;43624:4;43620:12;43651:18;43641:81;;43707:4;43699:6;43695:17;43685:27;;43641:81;43769:2;43761:6;43758:14;43738:18;43735:38;43732:84;;;43788:18;;:::i;:::-;43732:84;43553:269;43502:320;;;:::o;43828:281::-;43911:27;43933:4;43911:27;:::i;:::-;43903:6;43899:40;44041:6;44029:10;44026:22;44005:18;43993:10;43990:34;43987:62;43984:88;;;44052:18;;:::i;:::-;43984:88;44092:10;44088:2;44081:22;43871:238;43828:281;;:::o;44115:233::-;44154:3;44177:24;44195:5;44177:24;:::i;:::-;44168:33;;44223:66;44216:5;44213:77;44210:103;;;44293:18;;:::i;:::-;44210:103;44340:1;44333:5;44329:13;44322:20;;44115:233;;;:::o;44354:176::-;44386:1;44403:20;44421:1;44403:20;:::i;:::-;44398:25;;44437:20;44455:1;44437:20;:::i;:::-;44432:25;;44476:1;44466:35;;44481:18;;:::i;:::-;44466:35;44522:1;44519;44515:9;44510:14;;44354:176;;;;:::o;44536:180::-;44584:77;44581:1;44574:88;44681:4;44678:1;44671:15;44705:4;44702:1;44695:15;44722:180;44770:77;44767:1;44760:88;44867:4;44864:1;44857:15;44891:4;44888:1;44881:15;44908:180;44956:77;44953:1;44946:88;45053:4;45050:1;45043:15;45077:4;45074:1;45067:15;45094:180;45142:77;45139:1;45132:88;45239:4;45236:1;45229:15;45263:4;45260:1;45253:15;45280:180;45328:77;45325:1;45318:88;45425:4;45422:1;45415:15;45449:4;45446:1;45439:15;45466:117;45575:1;45572;45565:12;45589:117;45698:1;45695;45688:12;45712:117;45821:1;45818;45811:12;45835:117;45944:1;45941;45934:12;45958:117;46067:1;46064;46057:12;46081:117;46190:1;46187;46180:12;46204:102;46245:6;46296:2;46292:7;46287:2;46280:5;46276:14;46272:28;46262:38;;46204:102;;;:::o;46312:180::-;46452:32;46448:1;46440:6;46436:14;46429:56;46312:180;:::o;46498:182::-;46638:34;46634:1;46626:6;46622:14;46615:58;46498:182;:::o;46686:163::-;46826:15;46822:1;46814:6;46810:14;46803:39;46686:163;:::o;46855:177::-;46995:29;46991:1;46983:6;46979:14;46972:53;46855:177;:::o;47038:168::-;47178:20;47174:1;47166:6;47162:14;47155:44;47038:168;:::o;47212:178::-;47352:30;47348:1;47340:6;47336:14;47329:54;47212:178;:::o;47396:182::-;47536:34;47532:1;47524:6;47520:14;47513:58;47396:182;:::o;47584:180::-;47724:32;47720:1;47712:6;47708:14;47701:56;47584:180;:::o;47770:174::-;47910:26;47906:1;47898:6;47894:14;47887:50;47770:174;:::o;47950:182::-;48090:34;48086:1;48078:6;48074:14;48067:58;47950:182;:::o;48138:175::-;48278:27;48274:1;48266:6;48262:14;48255:51;48138:175;:::o;48319:162::-;48459:14;48455:1;48447:6;48443:14;48436:38;48319:162;:::o;48487:180::-;48627:32;48623:1;48615:6;48611:14;48604:56;48487:180;:::o;48673:176::-;48813:28;48809:1;48801:6;48797:14;48790:52;48673:176;:::o;48855:223::-;48995:34;48991:1;48983:6;48979:14;48972:58;49064:6;49059:2;49051:6;49047:15;49040:31;48855:223;:::o;49084:167::-;49224:19;49220:1;49212:6;49208:14;49201:43;49084:167;:::o;49257:181::-;49397:33;49393:1;49385:6;49381:14;49374:57;49257:181;:::o;49444:::-;49584:33;49580:1;49572:6;49568:14;49561:57;49444:181;:::o;49631:182::-;49771:34;49767:1;49759:6;49755:14;49748:58;49631:182;:::o;49819:::-;49959:34;49955:1;49947:6;49943:14;49936:58;49819:182;:::o;50007:155::-;50147:7;50143:1;50135:6;50131:14;50124:31;50007:155;:::o;50168:178::-;50308:30;50304:1;50296:6;50292:14;50285:54;50168:178;:::o;50352:182::-;50492:34;50488:1;50480:6;50476:14;50469:58;50352:182;:::o;50540:174::-;50680:26;50676:1;50668:6;50664:14;50657:50;50540:174;:::o;50720:178::-;50860:30;50856:1;50848:6;50844:14;50837:54;50720:178;:::o;50904:163::-;51044:15;51040:1;51032:6;51028:14;51021:39;50904:163;:::o;51073:220::-;51213:34;51209:1;51201:6;51197:14;51190:58;51282:3;51277:2;51269:6;51265:15;51258:28;51073:220;:::o;51299:114::-;;:::o;51419:179::-;51559:31;51555:1;51547:6;51543:14;51536:55;51419:179;:::o;51604:169::-;51744:21;51740:1;51732:6;51728:14;51721:45;51604:169;:::o;51779:122::-;51852:24;51870:5;51852:24;:::i;:::-;51845:5;51842:35;51832:63;;51891:1;51888;51881:12;51832:63;51779:122;:::o;51907:116::-;51977:21;51992:5;51977:21;:::i;:::-;51970:5;51967:32;51957:60;;52013:1;52010;52003:12;51957:60;51907:116;:::o;52029:120::-;52101:23;52118:5;52101:23;:::i;:::-;52094:5;52091:34;52081:62;;52139:1;52136;52129:12;52081:62;52029:120;:::o;52155:122::-;52228:24;52246:5;52228:24;:::i;:::-;52221:5;52218:35;52208:63;;52267:1;52264;52257:12;52208:63;52155:122;:::o

Swarm Source

ipfs://26e95a192fd231768c13b6fdb2bc1ecd1a6812ac93fd00057b46b2e96b47c19b
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.