ETH Price: $2,644.74 (+0.19%)

Token

EYE EYE EYE (EYE)
 

Overview

Max Total Supply

5,001 EYE

Holders

2,212

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 EYE
0x4a39600c96f6404e57db83982707b19c371183a1
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
eye

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-05-30
*/

/**
 *Submitted for verification at Etherscan.io on 2022-04-06
*/

//SPDX-License-Identifier: MIT
/**
 *Submitted for verification at Etherscan.io on 2022-03-05
*/

// File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol


// OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/access/Ownable.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


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

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


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;


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

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

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

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


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


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

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

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

// File: https://github.com/chiru-labs/ERC721A/blob/main/contracts/ERC721A.sol


// Creator: Chiru Labs

pragma solidity ^0.8.4;









error ApprovalCallerNotOwnerNorApproved();
error ApprovalQueryForNonexistentToken();
error ApproveToCaller();
error ApprovalToCurrentOwner();
error BalanceQueryForZeroAddress();
error MintedQueryForZeroAddress();
error BurnedQueryForZeroAddress();
error AuxQueryForZeroAddress();
error MintToZeroAddress();
error MintZeroQuantity();
error OwnerIndexOutOfBounds();
error OwnerQueryForNonexistentToken();
error TokenIndexOutOfBounds();
error TransferCallerNotOwnerNorApproved();
error TransferFromIncorrectOwner();
error TransferToNonERC721ReceiverImplementer();
error TransferToZeroAddress();
error URIQueryForNonexistentToken();

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..).
 *
 * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply.
 *
 * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256).
 */
contract ERC721A is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Compiler will pack this into a single 256bit word.
    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
    }

    // Compiler will pack this into a single 256bit word.
    struct AddressData {
        // Realistically, 2**64-1 is more than enough.
        uint64 balance;
        // Keeps track of mint count with minimal overhead for tokenomics.
        uint64 numberMinted;
        // Keeps track of burn count with minimal overhead for tokenomics.
        uint64 numberBurned;
        // For miscellaneous variable(s) pertaining to the address
        // (e.g. number of whitelist mint slots used).
        // If there are multiple variables, please pack them into a uint64.
        uint64 aux;
    }

    // The tokenId of the next token to be minted.
    uint256 internal _currentIndex;

    // The number of tokens burned.
    uint256 internal _burnCounter;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) internal _ownerships;

    // Mapping owner address to address data
    mapping(address => AddressData) private _addressData;

    // 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;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _currentIndex = _startTokenId();
    }

    /**
     * To change the starting tokenId, please override this function.
     */
    function _startTokenId() internal view virtual returns (uint256) {
        return 0;
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.
     */
    function totalSupply() public view returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than _currentIndex - _startTokenId() times
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    /**
     * Returns the total amount of tokens minted in the contract.
     */
    function _totalMinted() internal view returns (uint256) {
        // Counter underflow is impossible as _currentIndex does not decrement,
        // and it is initialized to _startTokenId()
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return uint256(_addressData[owner].balance);
    }

    /**
     * Returns the number of tokens minted by `owner`.
     */
    function _numberMinted(address owner) internal view returns (uint256) {
        if (owner == address(0)) revert MintedQueryForZeroAddress();
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Returns the number of tokens burned by or on behalf of `owner`.
     */
    function _numberBurned(address owner) internal view returns (uint256) {
        if (owner == address(0)) revert BurnedQueryForZeroAddress();
        return uint256(_addressData[owner].numberBurned);
    }

    /**
     * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     */
    function _getAux(address owner) internal view returns (uint64) {
        if (owner == address(0)) revert AuxQueryForZeroAddress();
        return _addressData[owner].aux;
    }

    /**
     * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     * If there are multiple variables, please pack them into a uint64.
     */
    function _setAux(address owner, uint64 aux) internal {
        if (owner == address(0)) revert AuxQueryForZeroAddress();
        _addressData[owner].aux = aux;
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr && curr < _currentIndex) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (!ownership.burned) {
                    if (ownership.addr != address(0)) {
                        return ownership;
                    }
                    // Invariant:
                    // There will always be an ownership that has an address and is not burned
                    // before an ownership that does not have an address and is not burned.
                    // Hence, curr will not underflow.
                    while (true) {
                        curr--;
                        ownership = _ownerships[curr];
                        if (ownership.addr != address(0)) {
                            return ownership;
                        }
                    }
                }
            }
        }
        revert OwnerQueryForNonexistentToken();
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return ownershipOf(tokenId).addr;
    }

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

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

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

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

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

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public override {
        address owner = ERC721A.ownerOf(tokenId);
        if (to == owner) revert ApprovalToCurrentOwner();

        if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) {
            revert ApprovalCallerNotOwnerNorApproved();
        }

        _approve(to, tokenId, owner);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public override {
        if (operator == _msgSender()) revert ApproveToCaller();

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

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        _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 {
        _transfer(from, to, tokenId);
        if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) {
            revert TransferToNonERC721ReceiverImplementer();
        }
    }

    /**
     * @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`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return _startTokenId() <= tokenId && tokenId < _currentIndex &&
            !_ownerships[tokenId].burned;
    }

    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        _mint(to, quantity, _data, true);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(
        address to,
        uint256 quantity,
        bytes memory _data,
        bool safe
    ) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            if (safe && to.isContract()) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex != end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex != end);
            }
            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * 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
    ) private {
        TokenOwnership memory prevOwnership = ownershipOf(tokenId);

        bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
            isApprovedForAll(prevOwnership.addr, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

            _ownerships[tokenId].addr = to;
            _ownerships[tokenId].startTimestamp = uint64(block.timestamp);

            // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            if (_ownerships[nextTokenId].addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId < _currentIndex) {
                    _ownerships[nextTokenId].addr = prevOwnership.addr;
                    _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

    /**
     * @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 {
        TokenOwnership memory prevOwnership = ownershipOf(tokenId);

        _beforeTokenTransfers(prevOwnership.addr, address(0), tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            _addressData[prevOwnership.addr].balance -= 1;
            _addressData[prevOwnership.addr].numberBurned += 1;

            // Keep track of who burned the token, and the timestamp of burning.
            _ownerships[tokenId].addr = prevOwnership.addr;
            _ownerships[tokenId].startTimestamp = uint64(block.timestamp);
            _ownerships[tokenId].burned = true;

            // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            if (_ownerships[nextTokenId].addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId < _currentIndex) {
                    _ownerships[nextTokenId].addr = prevOwnership.addr;
                    _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(prevOwnership.addr, address(0), tokenId);
        _afterTokenTransfers(prevOwnership.addr, address(0), tokenId, 1);

        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked {
            _burnCounter++;
        }
    }

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

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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 _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
            return retval == IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) {
                revert TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     * And also called before burning one token.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * 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, `tokenId` will be burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
     * minting.
     * And also called after one token has been burned.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been
     * transferred to `to`.
     * - When `from` is zero, `tokenId` has been minted for `to`.
     * - When `to` is zero, `tokenId` has been burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}

// File: contracts/Sloodle.sol


pragma solidity ^0.8.7;




contract eye is ERC721A, Ownable {
    using Strings for uint256;
    address breedingContract;

    string public baseApiURI;
    string public baseExtension = ".json";
    bytes32 private whitelistRoot;
  

    //General Settings
    uint16 public maxMintAmountPerTransaction = 1;
    uint16 public maxMintAmountPerWallet = 1;

    //whitelisting Settings
    uint16 public maxMintAmountPerWhitelist = 1;
   

    //Inventory
    uint256 public maxSupply = 5000;

    //Prices
    uint256 public cost = 0.00 ether;
    uint256 public whitelistCost = 0.00 ether;

    //Utility
    bool public paused = true;
    bool public whiteListingSale = false;

    //mapping
    mapping(address => uint256) private whitelistedMints;

    constructor(string memory _baseUrl) ERC721A("EYE EYE EYE", "EYE") {
        baseApiURI = _baseUrl;
    }

    //This function will be used to extend the project with more capabilities 
    function setBreedingContractAddress(address _bAddress) public onlyOwner {
        breedingContract = _bAddress;
    }

    //this function can be called only from the extending contract
    function mintExternal(address _address, uint256 _mintAmount) external {
        require(
            msg.sender == breedingContract,
            "NOT ALLOWED"
        );
        _safeMint(_address, _mintAmount);
    }

    function setWhitelistingRoot(bytes32 _root) public onlyOwner {
        whitelistRoot = _root;
    }

   

 
    // Verify that a given leaf is in the tree.
    function _verify(
        bytes32 _leafNode,
        bytes32[] memory proof
    ) internal view returns (bool) {
        return MerkleProof.verify(proof, whitelistRoot, _leafNode);
    }

    // Generate the leaf node (just the hash of tokenID concatenated with the account address)
    function _leaf(address account) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked(account));
    }

    //whitelist mint
    function mintWhitelist(
        bytes32[] calldata proof,
        uint256 _mintAmount
    ) public payable {
     

                
                //Normal WL Verifications
                 require(
                totalSupply() + _mintAmount <= maxSupply,
                "SOLD THE FUCK OUT"
            );

                require(
                    _verify(_leaf(msg.sender), proof),
                    "Invalid proof"
                );
                require(
                    (whitelistedMints[msg.sender] + _mintAmount) <=
                        maxMintAmountPerWhitelist,
                    "DONT BE GREEDY"
                );

                require(
                    msg.value >= (whitelistCost * _mintAmount),
                    "YOU CANT AFFORD FREE?"
                );

                //END WL Verifications

                //Mint
                _mintLoop(msg.sender, _mintAmount);
                whitelistedMints[msg.sender] =
                    whitelistedMints[msg.sender] +
                    _mintAmount;
    }

    function numberMinted(address owner) public view returns (uint256) {
        return _numberMinted(owner);
    }

    // public
    function mint(uint256 _mintAmount) public payable {
        if (msg.sender != owner()) {
            uint256 ownerTokenCount = balanceOf(msg.sender);

            require(!paused);
            require(!whiteListingSale, "YOU SHOULDNT BE HERE");
            require(_mintAmount > 0, "CANT BE ZERO DUMBASS");
            require(
                _mintAmount <= maxMintAmountPerTransaction,
                "MINT ONE. STOP BEING FUCKING GREEDY"
            );
            require(
                totalSupply() + _mintAmount <= maxSupply,
                "THATS TOO MANY"
            );
            require(
                (ownerTokenCount + _mintAmount) <= maxMintAmountPerWallet,
                "YOU ALREADY GOT ONE ASSHOLE."
            );

            require(msg.value >= cost * _mintAmount, "ITS FREE, FIND SOME SPARE CHANGE");
        }

        _mintLoop(msg.sender, _mintAmount);
    }

    function gift(address _to, uint256 _mintAmount) public onlyOwner {
        _mintLoop(_to, _mintAmount);
    }

    function airdrop(address[] memory _airdropAddresses) public onlyOwner {
        for (uint256 i = 0; i < _airdropAddresses.length; i++) {
            address to = _airdropAddresses[i];
            _mintLoop(to, 1);
        }
    }

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

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );
        string memory currentBaseURI = _baseURI();
        return
            bytes(currentBaseURI).length > 0
                ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension))
                : "";
    }

    function setCost(uint256 _newCost) public onlyOwner {
        cost = _newCost;
    }

    function setWhitelistingCost(uint256 _newCost) public onlyOwner {
        whitelistCost = _newCost;
    }

    function setmaxMintAmountPerTransaction(uint16 _amount) public onlyOwner {
        maxMintAmountPerTransaction = _amount;
    }

    function setMaxMintAmountPerWallet(uint16 _amount) public onlyOwner {
        maxMintAmountPerWallet = _amount;
    }

    function setMaxMintAmountPerWhitelist(uint16 _amount) public onlyOwner {
        maxMintAmountPerWhitelist = _amount;
    }

    function setMaxSupply(uint256 _supply) public onlyOwner {
        maxSupply = _supply;
    }

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

    function togglePause() public onlyOwner {
        paused = !paused;
    }

    function toggleWhiteSale() public onlyOwner {
        whiteListingSale = !whiteListingSale;
    }

    function _mintLoop(address _receiver, uint256 _mintAmount) internal {
        _safeMint(_receiver, _mintAmount);
    }

    function getOwnershipData(uint256 tokenId)
        external
        view
        returns (TokenOwnership memory)
    {
        return ownershipOf(tokenId);
    }

    function withdraw() public payable onlyOwner {

        (bool hq, ) = payable(owner()).call{value: address(this).balance}("");
        require(hq);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_baseUrl","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"MintedQueryForZeroAddress","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"_airdropAddresses","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":[],"name":"baseApiURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"},{"internalType":"bool","name":"burned","type":"bool"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"gift","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":"maxMintAmountPerTransaction","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerWallet","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerWhitelist","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintExternal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintWhitelist","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_bAddress","type":"address"}],"name":"setBreedingContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_amount","type":"uint16"}],"name":"setMaxMintAmountPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_amount","type":"uint16"}],"name":"setMaxMintAmountPerWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_supply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setWhitelistingCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_root","type":"bytes32"}],"name":"setWhitelistingRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_amount","type":"uint16"}],"name":"setmaxMintAmountPerTransaction","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":[],"name":"togglePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleWhiteSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whiteListingSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600b908051906020019062000051929190620002ee565b506001600d60006101000a81548161ffff021916908361ffff1602179055506001600d60026101000a81548161ffff021916908361ffff1602179055506001600d60046101000a81548161ffff021916908361ffff160217905550611388600e556000600f5560006010556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff021916908315150217905550348015620000ff57600080fd5b506040516200536f3803806200536f83398181016040528101906200012591906200041c565b6040518060400160405280600b81526020017f45594520455945204559450000000000000000000000000000000000000000008152506040518060400160405280600381526020017f45594500000000000000000000000000000000000000000000000000000000008152508160029080519060200190620001a9929190620002ee565b508060039080519060200190620001c2929190620002ee565b50620001d36200021b60201b60201c565b6000819055505050620001fb620001ef6200022060201b60201c565b6200022860201b60201c565b80600a908051906020019062000213929190620002ee565b5050620005f1565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002fc9062000502565b90600052602060002090601f0160209004810192826200032057600085556200036c565b82601f106200033b57805160ff19168380011785556200036c565b828001600101855582156200036c579182015b828111156200036b5782518255916020019190600101906200034e565b5b5090506200037b91906200037f565b5090565b5b808211156200039a57600081600090555060010162000380565b5090565b6000620003b5620003af8462000496565b6200046d565b905082815260208101848484011115620003d457620003d3620005d1565b5b620003e1848285620004cc565b509392505050565b600082601f830112620004015762000400620005cc565b5b8151620004138482602086016200039e565b91505092915050565b600060208284031215620004355762000434620005db565b5b600082015167ffffffffffffffff811115620004565762000455620005d6565b5b6200046484828501620003e9565b91505092915050565b6000620004796200048c565b905062000487828262000538565b919050565b6000604051905090565b600067ffffffffffffffff821115620004b457620004b36200059d565b5b620004bf82620005e0565b9050602081019050919050565b60005b83811015620004ec578082015181840152602081019050620004cf565b83811115620004fc576000848401525b50505050565b600060028204905060018216806200051b57607f821691505b602082108114156200053257620005316200056e565b5b50919050565b6200054382620005e0565b810181811067ffffffffffffffff821117156200056557620005646200059d565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b614d6e80620006016000396000f3fe60806040526004361061027d5760003560e01c8063a0712d681161014f578063d5abeb01116100c1578063e985e9c51161007a578063e985e9c514610935578063ea44462214610972578063ed8161791461099b578063ee891212146109b2578063f2fde38b146109db578063f4da184614610a045761027d565b8063d5abeb0114610825578063dc33e68114610850578063dfc33dd11461088d578063e5a88cdb146108b6578063e7b99ec7146108e1578063e97800cb1461090c5761027d565b8063bc951b9111610113578063bc951b9114610729578063c4ae316814610754578063c66828621461076b578063c87b56dd14610796578063cbce4c97146107d3578063cef11729146107fc5761027d565b8063a0712d6814610674578063a22cb46514610690578063a6d612f9146106b9578063b88d4fde146106d5578063bbb89744146106fe5761027d565b806344a0d68a116101f357806370a08231116101ac57806370a0823114610564578063715018a6146105a1578063729ad39e146105b85780638da5cb5b146105e15780639231ab2a1461060c57806395d89b41146106495761027d565b806344a0d68a1461045857806355f804b3146104815780635c975abb146104aa5780636352211e146104d557806368570bd6146105125780636f8b44b01461053b5761027d565b806318160ddd1161024557806318160ddd1461037b57806323b872dd146103a65780632cefffa7146103cf5780633ccfd60b146103fa57806341827f131461040457806342842e0e1461042f5761027d565b806301ffc9a71461028257806306fdde03146102bf578063081812fc146102ea578063095ea7b31461032757806313faede614610350575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a49190613cc2565b610a2d565b6040516102b69190614278565b60405180910390f35b3480156102cb57600080fd5b506102d4610b0f565b6040516102e19190614293565b60405180910390f35b3480156102f657600080fd5b50610311600480360381019061030c9190613d92565b610ba1565b60405161031e9190614211565b60405180910390f35b34801561033357600080fd5b5061034e60048036038101906103499190613bac565b610c1d565b005b34801561035c57600080fd5b50610365610d28565b60405161037291906144ab565b60405180910390f35b34801561038757600080fd5b50610390610d2e565b60405161039d91906144ab565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c89190613a96565b610d45565b005b3480156103db57600080fd5b506103e4610d55565b6040516103f19190614490565b60405180910390f35b610402610d69565b005b34801561041057600080fd5b50610419610e65565b6040516104269190614293565b60405180910390f35b34801561043b57600080fd5b5061045660048036038101906104519190613a96565b610ef3565b005b34801561046457600080fd5b5061047f600480360381019061047a9190613d92565b610f13565b005b34801561048d57600080fd5b506104a860048036038101906104a39190613d1c565b610f99565b005b3480156104b657600080fd5b506104bf61102f565b6040516104cc9190614278565b60405180910390f35b3480156104e157600080fd5b506104fc60048036038101906104f79190613d92565b611042565b6040516105099190614211565b60405180910390f35b34801561051e57600080fd5b5061053960048036038101906105349190613a29565b611058565b005b34801561054757600080fd5b50610562600480360381019061055d9190613d92565b611118565b005b34801561057057600080fd5b5061058b60048036038101906105869190613a29565b61119e565b60405161059891906144ab565b60405180910390f35b3480156105ad57600080fd5b506105b661126e565b005b3480156105c457600080fd5b506105df60048036038101906105da9190613bec565b6112f6565b005b3480156105ed57600080fd5b506105f66113c0565b6040516106039190614211565b60405180910390f35b34801561061857600080fd5b50610633600480360381019061062e9190613d92565b6113ea565b6040516106409190614475565b60405180910390f35b34801561065557600080fd5b5061065e611402565b60405161066b9190614293565b60405180910390f35b61068e60048036038101906106899190613d92565b611494565b005b34801561069c57600080fd5b506106b760048036038101906106b29190613b6c565b6116f7565b005b6106d360048036038101906106ce9190613c35565b61186f565b005b3480156106e157600080fd5b506106fc60048036038101906106f79190613ae9565b611ae6565b005b34801561070a57600080fd5b50610713611b62565b6040516107209190614490565b60405180910390f35b34801561073557600080fd5b5061073e611b76565b60405161074b9190614490565b60405180910390f35b34801561076057600080fd5b50610769611b8a565b005b34801561077757600080fd5b50610780611c32565b60405161078d9190614293565b60405180910390f35b3480156107a257600080fd5b506107bd60048036038101906107b89190613d92565b611cc0565b6040516107ca9190614293565b60405180910390f35b3480156107df57600080fd5b506107fa60048036038101906107f59190613bac565b611d6a565b005b34801561080857600080fd5b50610823600480360381019061081e9190613d65565b611df4565b005b34801561083157600080fd5b5061083a611e90565b60405161084791906144ab565b60405180910390f35b34801561085c57600080fd5b5061087760048036038101906108729190613a29565b611e96565b60405161088491906144ab565b60405180910390f35b34801561089957600080fd5b506108b460048036038101906108af9190613d92565b611ea8565b005b3480156108c257600080fd5b506108cb611f2e565b6040516108d89190614278565b60405180910390f35b3480156108ed57600080fd5b506108f6611f41565b60405161090391906144ab565b60405180910390f35b34801561091857600080fd5b50610933600480360381019061092e9190613d65565b611f47565b005b34801561094157600080fd5b5061095c60048036038101906109579190613a56565b611fe3565b6040516109699190614278565b60405180910390f35b34801561097e57600080fd5b5061099960048036038101906109949190613d65565b612077565b005b3480156109a757600080fd5b506109b0612113565b005b3480156109be57600080fd5b506109d960048036038101906109d49190613c95565b6121bb565b005b3480156109e757600080fd5b50610a0260048036038101906109fd9190613a29565b612241565b005b348015610a1057600080fd5b50610a2b6004803603810190610a269190613bac565b612339565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610af857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b085750610b07826123d7565b5b9050919050565b606060028054610b1e906147d3565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4a906147d3565b8015610b975780601f10610b6c57610100808354040283529160200191610b97565b820191906000526020600020905b815481529060010190602001808311610b7a57829003601f168201915b5050505050905090565b6000610bac82612441565b610be2576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c2882611042565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c90576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610caf61248f565b73ffffffffffffffffffffffffffffffffffffffff1614158015610ce15750610cdf81610cda61248f565b611fe3565b155b15610d18576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d23838383612497565b505050565b600f5481565b6000610d38612549565b6001546000540303905090565b610d5083838361254e565b505050565b600d60049054906101000a900461ffff1681565b610d7161248f565b73ffffffffffffffffffffffffffffffffffffffff16610d8f6113c0565b73ffffffffffffffffffffffffffffffffffffffff1614610de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddc906143b5565b60405180910390fd5b6000610def6113c0565b73ffffffffffffffffffffffffffffffffffffffff1647604051610e12906141fc565b60006040518083038185875af1925050503d8060008114610e4f576040519150601f19603f3d011682016040523d82523d6000602084013e610e54565b606091505b5050905080610e6257600080fd5b50565b600a8054610e72906147d3565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9e906147d3565b8015610eeb5780601f10610ec057610100808354040283529160200191610eeb565b820191906000526020600020905b815481529060010190602001808311610ece57829003601f168201915b505050505081565b610f0e83838360405180602001604052806000815250611ae6565b505050565b610f1b61248f565b73ffffffffffffffffffffffffffffffffffffffff16610f396113c0565b73ffffffffffffffffffffffffffffffffffffffff1614610f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f86906143b5565b60405180910390fd5b80600f8190555050565b610fa161248f565b73ffffffffffffffffffffffffffffffffffffffff16610fbf6113c0565b73ffffffffffffffffffffffffffffffffffffffff1614611015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100c906143b5565b60405180910390fd5b80600a908051906020019061102b9291906136dc565b5050565b601160009054906101000a900460ff1681565b600061104d82612a3f565b600001519050919050565b61106061248f565b73ffffffffffffffffffffffffffffffffffffffff1661107e6113c0565b73ffffffffffffffffffffffffffffffffffffffff16146110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cb906143b5565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61112061248f565b73ffffffffffffffffffffffffffffffffffffffff1661113e6113c0565b73ffffffffffffffffffffffffffffffffffffffff1614611194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118b906143b5565b60405180910390fd5b80600e8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611206576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b61127661248f565b73ffffffffffffffffffffffffffffffffffffffff166112946113c0565b73ffffffffffffffffffffffffffffffffffffffff16146112ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e1906143b5565b60405180910390fd5b6112f46000612cce565b565b6112fe61248f565b73ffffffffffffffffffffffffffffffffffffffff1661131c6113c0565b73ffffffffffffffffffffffffffffffffffffffff1614611372576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611369906143b5565b60405180910390fd5b60005b81518110156113bc57600082828151811061139357611392614961565b5b602002602001015190506113a8816001612d94565b5080806113b490614836565b915050611375565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113f2613762565b6113fb82612a3f565b9050919050565b606060038054611411906147d3565b80601f016020809104026020016040519081016040528092919081815260200182805461143d906147d3565b801561148a5780601f1061145f5761010080835404028352916020019161148a565b820191906000526020600020905b81548152906001019060200180831161146d57829003601f168201915b5050505050905090565b61149c6113c0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116ea5760006114d93361119e565b9050601160009054906101000a900460ff16156114f557600080fd5b601160019054906101000a900460ff1615611545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153c90614395565b60405180910390fd5b60008211611588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157f90614335565b60405180910390fd5b600d60009054906101000a900461ffff1661ffff168211156115df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d690614355565b60405180910390fd5b600e54826115eb610d2e565b6115f591906145dc565b1115611636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162d906142f5565b60405180910390fd5b600d60029054906101000a900461ffff1661ffff16828261165791906145dc565b1115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90614455565b60405180910390fd5b81600f546116a69190614663565b3410156116e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116df90614375565b60405180910390fd5b505b6116f43382612d94565b50565b6116ff61248f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611764576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061177161248f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661181e61248f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118639190614278565b60405180910390a35050565b600e548161187b610d2e565b61188591906145dc565b11156118c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bd906142b5565b60405180910390fd5b6119196118d233612da2565b848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050612dd2565b611958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194f90614435565b60405180910390fd5b600d60049054906101000a900461ffff1661ffff1681601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119b891906145dc565b11156119f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f0906143f5565b60405180910390fd5b80601054611a079190614663565b341015611a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4090614315565b60405180910390fd5b611a533382612d94565b80601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a9e91906145dc565b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b611af184848461254e565b611b108373ffffffffffffffffffffffffffffffffffffffff16612de9565b8015611b255750611b2384848484612e0c565b155b15611b5c576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b600d60009054906101000a900461ffff1681565b600d60029054906101000a900461ffff1681565b611b9261248f565b73ffffffffffffffffffffffffffffffffffffffff16611bb06113c0565b73ffffffffffffffffffffffffffffffffffffffff1614611c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfd906143b5565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b600b8054611c3f906147d3565b80601f0160208091040260200160405190810160405280929190818152602001828054611c6b906147d3565b8015611cb85780601f10611c8d57610100808354040283529160200191611cb8565b820191906000526020600020905b815481529060010190602001808311611c9b57829003601f168201915b505050505081565b6060611ccb82612441565b611d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d01906143d5565b60405180910390fd5b6000611d14612f6c565b90506000815111611d345760405180602001604052806000815250611d62565b80611d3e84612ffe565b600b604051602001611d52939291906141cb565b6040516020818303038152906040525b915050919050565b611d7261248f565b73ffffffffffffffffffffffffffffffffffffffff16611d906113c0565b73ffffffffffffffffffffffffffffffffffffffff1614611de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddd906143b5565b60405180910390fd5b611df08282612d94565b5050565b611dfc61248f565b73ffffffffffffffffffffffffffffffffffffffff16611e1a6113c0565b73ffffffffffffffffffffffffffffffffffffffff1614611e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e67906143b5565b60405180910390fd5b80600d60026101000a81548161ffff021916908361ffff16021790555050565b600e5481565b6000611ea18261315f565b9050919050565b611eb061248f565b73ffffffffffffffffffffffffffffffffffffffff16611ece6113c0565b73ffffffffffffffffffffffffffffffffffffffff1614611f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1b906143b5565b60405180910390fd5b8060108190555050565b601160019054906101000a900460ff1681565b60105481565b611f4f61248f565b73ffffffffffffffffffffffffffffffffffffffff16611f6d6113c0565b73ffffffffffffffffffffffffffffffffffffffff1614611fc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fba906143b5565b60405180910390fd5b80600d60006101000a81548161ffff021916908361ffff16021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61207f61248f565b73ffffffffffffffffffffffffffffffffffffffff1661209d6113c0565b73ffffffffffffffffffffffffffffffffffffffff16146120f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ea906143b5565b60405180910390fd5b80600d60046101000a81548161ffff021916908361ffff16021790555050565b61211b61248f565b73ffffffffffffffffffffffffffffffffffffffff166121396113c0565b73ffffffffffffffffffffffffffffffffffffffff161461218f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612186906143b5565b60405180910390fd5b601160019054906101000a900460ff1615601160016101000a81548160ff021916908315150217905550565b6121c361248f565b73ffffffffffffffffffffffffffffffffffffffff166121e16113c0565b73ffffffffffffffffffffffffffffffffffffffff1614612237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222e906143b5565b60405180910390fd5b80600c8190555050565b61224961248f565b73ffffffffffffffffffffffffffffffffffffffff166122676113c0565b73ffffffffffffffffffffffffffffffffffffffff16146122bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b4906143b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561232d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612324906142d5565b60405180910390fd5b61233681612cce565b50565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146123c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c090614415565b60405180910390fd5b6123d3828261322f565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008161244c612549565b1115801561245b575060005482105b8015612488575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b600061255982612a3f565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661258061248f565b73ffffffffffffffffffffffffffffffffffffffff1614806125b357506125b282600001516125ad61248f565b611fe3565b5b806125f857506125c161248f565b73ffffffffffffffffffffffffffffffffffffffff166125e084610ba1565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612631576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461269a576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612701576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61270e858585600161324d565b61271e6000848460000151612497565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156129cf576000548110156129ce5782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a388585856001613253565b5050505050565b612a47613762565b600082905080612a55612549565b11158015612a64575060005481105b15612c97576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612c9557600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612b79578092505050612cc9565b5b600115612c9457818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612c8f578092505050612cc9565b612b7a565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612d9e828261322f565b5050565b600081604051602001612db591906141b0565b604051602081830303815290604052805190602001209050919050565b6000612de182600c5485613259565b905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e3261248f565b8786866040518563ffffffff1660e01b8152600401612e54949392919061422c565b602060405180830381600087803b158015612e6e57600080fd5b505af1925050508015612e9f57506040513d601f19601f82011682018060405250810190612e9c9190613cef565b60015b612f19573d8060008114612ecf576040519150601f19603f3d011682016040523d82523d6000602084013e612ed4565b606091505b50600081511415612f11576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600a8054612f7b906147d3565b80601f0160208091040260200160405190810160405280929190818152602001828054612fa7906147d3565b8015612ff45780601f10612fc957610100808354040283529160200191612ff4565b820191906000526020600020905b815481529060010190602001808311612fd757829003601f168201915b5050505050905090565b60606000821415613046576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061315a565b600082905060005b6000821461307857808061306190614836565b915050600a826130719190614632565b915061304e565b60008167ffffffffffffffff81111561309457613093614990565b5b6040519080825280601f01601f1916602001820160405280156130c65781602001600182028036833780820191505090505b5090505b60008514613153576001826130df91906146bd565b9150600a856130ee91906148a3565b60306130fa91906145dc565b60f81b8183815181106131105761310f614961565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561314c9190614632565b94506130ca565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131c7576040517f35ebb31900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b613249828260405180602001604052806000815250613270565b5050565b50505050565b50505050565b6000826132668584613282565b1490509392505050565b61327d83838360016132f7565b505050565b60008082905060005b84518110156132ec5760008582815181106132a9576132a8614961565b5b602002602001015190508083116132cb576132c483826136c5565b92506132d8565b6132d581846136c5565b92505b5080806132e490614836565b91505061328b565b508091505092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613364576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084141561339f576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6133ac600086838761324d565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000858201905083801561357657506135758773ffffffffffffffffffffffffffffffffffffffff16612de9565b5b1561363c575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46135eb6000888480600101955088612e0c565b613621576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082141561357c57826000541461363757600080fd5b6136a8565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082141561363d575b8160008190555050506136be6000868387613253565b5050505050565b600082600052816020526040600020905092915050565b8280546136e8906147d3565b90600052602060002090601f01602090048101928261370a5760008555613751565b82601f1061372357805160ff1916838001178555613751565b82800160010185558215613751579182015b82811115613750578251825591602001919060010190613735565b5b50905061375e91906137a5565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156137be5760008160009055506001016137a6565b5090565b60006137d56137d0846144eb565b6144c6565b905080838252602082019050828560208602820111156137f8576137f76149c9565b5b60005b85811015613828578161380e88826138b6565b8452602084019350602083019250506001810190506137fb565b5050509392505050565b600061384561384084614517565b6144c6565b905082815260208101848484011115613861576138606149ce565b5b61386c848285614791565b509392505050565b600061388761388284614548565b6144c6565b9050828152602081018484840111156138a3576138a26149ce565b5b6138ae848285614791565b509392505050565b6000813590506138c581614cae565b92915050565b600082601f8301126138e0576138df6149c4565b5b81356138f08482602086016137c2565b91505092915050565b60008083601f84011261390f5761390e6149c4565b5b8235905067ffffffffffffffff81111561392c5761392b6149bf565b5b602083019150836020820283011115613948576139476149c9565b5b9250929050565b60008135905061395e81614cc5565b92915050565b60008135905061397381614cdc565b92915050565b60008135905061398881614cf3565b92915050565b60008151905061399d81614cf3565b92915050565b600082601f8301126139b8576139b76149c4565b5b81356139c8848260208601613832565b91505092915050565b600082601f8301126139e6576139e56149c4565b5b81356139f6848260208601613874565b91505092915050565b600081359050613a0e81614d0a565b92915050565b600081359050613a2381614d21565b92915050565b600060208284031215613a3f57613a3e6149d8565b5b6000613a4d848285016138b6565b91505092915050565b60008060408385031215613a6d57613a6c6149d8565b5b6000613a7b858286016138b6565b9250506020613a8c858286016138b6565b9150509250929050565b600080600060608486031215613aaf57613aae6149d8565b5b6000613abd868287016138b6565b9350506020613ace868287016138b6565b9250506040613adf86828701613a14565b9150509250925092565b60008060008060808587031215613b0357613b026149d8565b5b6000613b11878288016138b6565b9450506020613b22878288016138b6565b9350506040613b3387828801613a14565b925050606085013567ffffffffffffffff811115613b5457613b536149d3565b5b613b60878288016139a3565b91505092959194509250565b60008060408385031215613b8357613b826149d8565b5b6000613b91858286016138b6565b9250506020613ba28582860161394f565b9150509250929050565b60008060408385031215613bc357613bc26149d8565b5b6000613bd1858286016138b6565b9250506020613be285828601613a14565b9150509250929050565b600060208284031215613c0257613c016149d8565b5b600082013567ffffffffffffffff811115613c2057613c1f6149d3565b5b613c2c848285016138cb565b91505092915050565b600080600060408486031215613c4e57613c4d6149d8565b5b600084013567ffffffffffffffff811115613c6c57613c6b6149d3565b5b613c78868287016138f9565b93509350506020613c8b86828701613a14565b9150509250925092565b600060208284031215613cab57613caa6149d8565b5b6000613cb984828501613964565b91505092915050565b600060208284031215613cd857613cd76149d8565b5b6000613ce684828501613979565b91505092915050565b600060208284031215613d0557613d046149d8565b5b6000613d138482850161398e565b91505092915050565b600060208284031215613d3257613d316149d8565b5b600082013567ffffffffffffffff811115613d5057613d4f6149d3565b5b613d5c848285016139d1565b91505092915050565b600060208284031215613d7b57613d7a6149d8565b5b6000613d89848285016139ff565b91505092915050565b600060208284031215613da857613da76149d8565b5b6000613db684828501613a14565b91505092915050565b613dc8816146f1565b82525050565b613dd7816146f1565b82525050565b613dee613de9826146f1565b61487f565b82525050565b613dfd81614703565b82525050565b613e0c81614703565b82525050565b6000613e1d8261458e565b613e2781856145a4565b9350613e378185602086016147a0565b613e40816149dd565b840191505092915050565b6000613e5682614599565b613e6081856145c0565b9350613e708185602086016147a0565b613e79816149dd565b840191505092915050565b6000613e8f82614599565b613e9981856145d1565b9350613ea98185602086016147a0565b80840191505092915050565b60008154613ec2816147d3565b613ecc81866145d1565b94506001821660008114613ee75760018114613ef857613f2b565b60ff19831686528186019350613f2b565b613f0185614579565b60005b83811015613f2357815481890152600182019150602081019050613f04565b838801955050505b50505092915050565b6000613f416011836145c0565b9150613f4c826149fb565b602082019050919050565b6000613f646026836145c0565b9150613f6f82614a24565b604082019050919050565b6000613f87600e836145c0565b9150613f9282614a73565b602082019050919050565b6000613faa6015836145c0565b9150613fb582614a9c565b602082019050919050565b6000613fcd6014836145c0565b9150613fd882614ac5565b602082019050919050565b6000613ff06023836145c0565b9150613ffb82614aee565b604082019050919050565b60006140136020836145c0565b915061401e82614b3d565b602082019050919050565b60006140366014836145c0565b915061404182614b66565b602082019050919050565b60006140596020836145c0565b915061406482614b8f565b602082019050919050565b600061407c602f836145c0565b915061408782614bb8565b604082019050919050565b600061409f6000836145b5565b91506140aa82614c07565b600082019050919050565b60006140c2600e836145c0565b91506140cd82614c0a565b602082019050919050565b60006140e5600b836145c0565b91506140f082614c33565b602082019050919050565b6000614108600d836145c0565b915061411382614c5c565b602082019050919050565b600061412b601c836145c0565b915061413682614c85565b602082019050919050565b6060820160008201516141576000850182613dbf565b50602082015161416a60208501826141a1565b50604082015161417d6040850182613df4565b50505050565b61418c81614745565b82525050565b61419b81614773565b82525050565b6141aa8161477d565b82525050565b60006141bc8284613ddd565b60148201915081905092915050565b60006141d78286613e84565b91506141e38285613e84565b91506141ef8284613eb5565b9150819050949350505050565b600061420782614092565b9150819050919050565b60006020820190506142266000830184613dce565b92915050565b60006080820190506142416000830187613dce565b61424e6020830186613dce565b61425b6040830185614192565b818103606083015261426d8184613e12565b905095945050505050565b600060208201905061428d6000830184613e03565b92915050565b600060208201905081810360008301526142ad8184613e4b565b905092915050565b600060208201905081810360008301526142ce81613f34565b9050919050565b600060208201905081810360008301526142ee81613f57565b9050919050565b6000602082019050818103600083015261430e81613f7a565b9050919050565b6000602082019050818103600083015261432e81613f9d565b9050919050565b6000602082019050818103600083015261434e81613fc0565b9050919050565b6000602082019050818103600083015261436e81613fe3565b9050919050565b6000602082019050818103600083015261438e81614006565b9050919050565b600060208201905081810360008301526143ae81614029565b9050919050565b600060208201905081810360008301526143ce8161404c565b9050919050565b600060208201905081810360008301526143ee8161406f565b9050919050565b6000602082019050818103600083015261440e816140b5565b9050919050565b6000602082019050818103600083015261442e816140d8565b9050919050565b6000602082019050818103600083015261444e816140fb565b9050919050565b6000602082019050818103600083015261446e8161411e565b9050919050565b600060608201905061448a6000830184614141565b92915050565b60006020820190506144a56000830184614183565b92915050565b60006020820190506144c06000830184614192565b92915050565b60006144d06144e1565b90506144dc8282614805565b919050565b6000604051905090565b600067ffffffffffffffff82111561450657614505614990565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561453257614531614990565b5b61453b826149dd565b9050602081019050919050565b600067ffffffffffffffff82111561456357614562614990565b5b61456c826149dd565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006145e782614773565b91506145f283614773565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614627576146266148d4565b5b828201905092915050565b600061463d82614773565b915061464883614773565b92508261465857614657614903565b5b828204905092915050565b600061466e82614773565b915061467983614773565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146b2576146b16148d4565b5b828202905092915050565b60006146c882614773565b91506146d383614773565b9250828210156146e6576146e56148d4565b5b828203905092915050565b60006146fc82614753565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b838110156147be5780820151818401526020810190506147a3565b838111156147cd576000848401525b50505050565b600060028204905060018216806147eb57607f821691505b602082108114156147ff576147fe614932565b5b50919050565b61480e826149dd565b810181811067ffffffffffffffff8211171561482d5761482c614990565b5b80604052505050565b600061484182614773565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614874576148736148d4565b5b600182019050919050565b600061488a82614891565b9050919050565b600061489c826149ee565b9050919050565b60006148ae82614773565b91506148b983614773565b9250826148c9576148c8614903565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f534f4c4420544845204655434b204f5554000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f544841545320544f4f204d414e59000000000000000000000000000000000000600082015250565b7f594f552043414e54204146464f524420465245453f0000000000000000000000600082015250565b7f43414e54204245205a45524f2044554d42415353000000000000000000000000600082015250565b7f4d494e54204f4e452e2053544f50204245494e47204655434b494e472047524560008201527f4544590000000000000000000000000000000000000000000000000000000000602082015250565b7f49545320465245452c2046494e4420534f4d45205350415245204348414e4745600082015250565b7f594f552053484f554c444e542042452048455245000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f444f4e5420424520475245454459000000000000000000000000000000000000600082015250565b7f4e4f5420414c4c4f574544000000000000000000000000000000000000000000600082015250565b7f496e76616c69642070726f6f6600000000000000000000000000000000000000600082015250565b7f594f5520414c524541445920474f54204f4e4520415353484f4c452e00000000600082015250565b614cb7816146f1565b8114614cc257600080fd5b50565b614cce81614703565b8114614cd957600080fd5b50565b614ce58161470f565b8114614cf057600080fd5b50565b614cfc81614719565b8114614d0757600080fd5b50565b614d1381614745565b8114614d1e57600080fd5b50565b614d2a81614773565b8114614d3557600080fd5b5056fea264697066735822122032db17e7054e5df62cd7885214a414abefd054d38018e3f5abbf2754e7f2690164736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d537869676e555436436d66666277716e547a6e4c6439643539564d3257586138386237514b523157435552642f00000000000000000000

Deployed Bytecode

0x60806040526004361061027d5760003560e01c8063a0712d681161014f578063d5abeb01116100c1578063e985e9c51161007a578063e985e9c514610935578063ea44462214610972578063ed8161791461099b578063ee891212146109b2578063f2fde38b146109db578063f4da184614610a045761027d565b8063d5abeb0114610825578063dc33e68114610850578063dfc33dd11461088d578063e5a88cdb146108b6578063e7b99ec7146108e1578063e97800cb1461090c5761027d565b8063bc951b9111610113578063bc951b9114610729578063c4ae316814610754578063c66828621461076b578063c87b56dd14610796578063cbce4c97146107d3578063cef11729146107fc5761027d565b8063a0712d6814610674578063a22cb46514610690578063a6d612f9146106b9578063b88d4fde146106d5578063bbb89744146106fe5761027d565b806344a0d68a116101f357806370a08231116101ac57806370a0823114610564578063715018a6146105a1578063729ad39e146105b85780638da5cb5b146105e15780639231ab2a1461060c57806395d89b41146106495761027d565b806344a0d68a1461045857806355f804b3146104815780635c975abb146104aa5780636352211e146104d557806368570bd6146105125780636f8b44b01461053b5761027d565b806318160ddd1161024557806318160ddd1461037b57806323b872dd146103a65780632cefffa7146103cf5780633ccfd60b146103fa57806341827f131461040457806342842e0e1461042f5761027d565b806301ffc9a71461028257806306fdde03146102bf578063081812fc146102ea578063095ea7b31461032757806313faede614610350575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a49190613cc2565b610a2d565b6040516102b69190614278565b60405180910390f35b3480156102cb57600080fd5b506102d4610b0f565b6040516102e19190614293565b60405180910390f35b3480156102f657600080fd5b50610311600480360381019061030c9190613d92565b610ba1565b60405161031e9190614211565b60405180910390f35b34801561033357600080fd5b5061034e60048036038101906103499190613bac565b610c1d565b005b34801561035c57600080fd5b50610365610d28565b60405161037291906144ab565b60405180910390f35b34801561038757600080fd5b50610390610d2e565b60405161039d91906144ab565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c89190613a96565b610d45565b005b3480156103db57600080fd5b506103e4610d55565b6040516103f19190614490565b60405180910390f35b610402610d69565b005b34801561041057600080fd5b50610419610e65565b6040516104269190614293565b60405180910390f35b34801561043b57600080fd5b5061045660048036038101906104519190613a96565b610ef3565b005b34801561046457600080fd5b5061047f600480360381019061047a9190613d92565b610f13565b005b34801561048d57600080fd5b506104a860048036038101906104a39190613d1c565b610f99565b005b3480156104b657600080fd5b506104bf61102f565b6040516104cc9190614278565b60405180910390f35b3480156104e157600080fd5b506104fc60048036038101906104f79190613d92565b611042565b6040516105099190614211565b60405180910390f35b34801561051e57600080fd5b5061053960048036038101906105349190613a29565b611058565b005b34801561054757600080fd5b50610562600480360381019061055d9190613d92565b611118565b005b34801561057057600080fd5b5061058b60048036038101906105869190613a29565b61119e565b60405161059891906144ab565b60405180910390f35b3480156105ad57600080fd5b506105b661126e565b005b3480156105c457600080fd5b506105df60048036038101906105da9190613bec565b6112f6565b005b3480156105ed57600080fd5b506105f66113c0565b6040516106039190614211565b60405180910390f35b34801561061857600080fd5b50610633600480360381019061062e9190613d92565b6113ea565b6040516106409190614475565b60405180910390f35b34801561065557600080fd5b5061065e611402565b60405161066b9190614293565b60405180910390f35b61068e60048036038101906106899190613d92565b611494565b005b34801561069c57600080fd5b506106b760048036038101906106b29190613b6c565b6116f7565b005b6106d360048036038101906106ce9190613c35565b61186f565b005b3480156106e157600080fd5b506106fc60048036038101906106f79190613ae9565b611ae6565b005b34801561070a57600080fd5b50610713611b62565b6040516107209190614490565b60405180910390f35b34801561073557600080fd5b5061073e611b76565b60405161074b9190614490565b60405180910390f35b34801561076057600080fd5b50610769611b8a565b005b34801561077757600080fd5b50610780611c32565b60405161078d9190614293565b60405180910390f35b3480156107a257600080fd5b506107bd60048036038101906107b89190613d92565b611cc0565b6040516107ca9190614293565b60405180910390f35b3480156107df57600080fd5b506107fa60048036038101906107f59190613bac565b611d6a565b005b34801561080857600080fd5b50610823600480360381019061081e9190613d65565b611df4565b005b34801561083157600080fd5b5061083a611e90565b60405161084791906144ab565b60405180910390f35b34801561085c57600080fd5b5061087760048036038101906108729190613a29565b611e96565b60405161088491906144ab565b60405180910390f35b34801561089957600080fd5b506108b460048036038101906108af9190613d92565b611ea8565b005b3480156108c257600080fd5b506108cb611f2e565b6040516108d89190614278565b60405180910390f35b3480156108ed57600080fd5b506108f6611f41565b60405161090391906144ab565b60405180910390f35b34801561091857600080fd5b50610933600480360381019061092e9190613d65565b611f47565b005b34801561094157600080fd5b5061095c60048036038101906109579190613a56565b611fe3565b6040516109699190614278565b60405180910390f35b34801561097e57600080fd5b5061099960048036038101906109949190613d65565b612077565b005b3480156109a757600080fd5b506109b0612113565b005b3480156109be57600080fd5b506109d960048036038101906109d49190613c95565b6121bb565b005b3480156109e757600080fd5b50610a0260048036038101906109fd9190613a29565b612241565b005b348015610a1057600080fd5b50610a2b6004803603810190610a269190613bac565b612339565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610af857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b085750610b07826123d7565b5b9050919050565b606060028054610b1e906147d3565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4a906147d3565b8015610b975780601f10610b6c57610100808354040283529160200191610b97565b820191906000526020600020905b815481529060010190602001808311610b7a57829003601f168201915b5050505050905090565b6000610bac82612441565b610be2576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c2882611042565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c90576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610caf61248f565b73ffffffffffffffffffffffffffffffffffffffff1614158015610ce15750610cdf81610cda61248f565b611fe3565b155b15610d18576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d23838383612497565b505050565b600f5481565b6000610d38612549565b6001546000540303905090565b610d5083838361254e565b505050565b600d60049054906101000a900461ffff1681565b610d7161248f565b73ffffffffffffffffffffffffffffffffffffffff16610d8f6113c0565b73ffffffffffffffffffffffffffffffffffffffff1614610de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddc906143b5565b60405180910390fd5b6000610def6113c0565b73ffffffffffffffffffffffffffffffffffffffff1647604051610e12906141fc565b60006040518083038185875af1925050503d8060008114610e4f576040519150601f19603f3d011682016040523d82523d6000602084013e610e54565b606091505b5050905080610e6257600080fd5b50565b600a8054610e72906147d3565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9e906147d3565b8015610eeb5780601f10610ec057610100808354040283529160200191610eeb565b820191906000526020600020905b815481529060010190602001808311610ece57829003601f168201915b505050505081565b610f0e83838360405180602001604052806000815250611ae6565b505050565b610f1b61248f565b73ffffffffffffffffffffffffffffffffffffffff16610f396113c0565b73ffffffffffffffffffffffffffffffffffffffff1614610f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f86906143b5565b60405180910390fd5b80600f8190555050565b610fa161248f565b73ffffffffffffffffffffffffffffffffffffffff16610fbf6113c0565b73ffffffffffffffffffffffffffffffffffffffff1614611015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100c906143b5565b60405180910390fd5b80600a908051906020019061102b9291906136dc565b5050565b601160009054906101000a900460ff1681565b600061104d82612a3f565b600001519050919050565b61106061248f565b73ffffffffffffffffffffffffffffffffffffffff1661107e6113c0565b73ffffffffffffffffffffffffffffffffffffffff16146110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cb906143b5565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61112061248f565b73ffffffffffffffffffffffffffffffffffffffff1661113e6113c0565b73ffffffffffffffffffffffffffffffffffffffff1614611194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118b906143b5565b60405180910390fd5b80600e8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611206576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b61127661248f565b73ffffffffffffffffffffffffffffffffffffffff166112946113c0565b73ffffffffffffffffffffffffffffffffffffffff16146112ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e1906143b5565b60405180910390fd5b6112f46000612cce565b565b6112fe61248f565b73ffffffffffffffffffffffffffffffffffffffff1661131c6113c0565b73ffffffffffffffffffffffffffffffffffffffff1614611372576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611369906143b5565b60405180910390fd5b60005b81518110156113bc57600082828151811061139357611392614961565b5b602002602001015190506113a8816001612d94565b5080806113b490614836565b915050611375565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113f2613762565b6113fb82612a3f565b9050919050565b606060038054611411906147d3565b80601f016020809104026020016040519081016040528092919081815260200182805461143d906147d3565b801561148a5780601f1061145f5761010080835404028352916020019161148a565b820191906000526020600020905b81548152906001019060200180831161146d57829003601f168201915b5050505050905090565b61149c6113c0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116ea5760006114d93361119e565b9050601160009054906101000a900460ff16156114f557600080fd5b601160019054906101000a900460ff1615611545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153c90614395565b60405180910390fd5b60008211611588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157f90614335565b60405180910390fd5b600d60009054906101000a900461ffff1661ffff168211156115df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d690614355565b60405180910390fd5b600e54826115eb610d2e565b6115f591906145dc565b1115611636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162d906142f5565b60405180910390fd5b600d60029054906101000a900461ffff1661ffff16828261165791906145dc565b1115611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90614455565b60405180910390fd5b81600f546116a69190614663565b3410156116e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116df90614375565b60405180910390fd5b505b6116f43382612d94565b50565b6116ff61248f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611764576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061177161248f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661181e61248f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118639190614278565b60405180910390a35050565b600e548161187b610d2e565b61188591906145dc565b11156118c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bd906142b5565b60405180910390fd5b6119196118d233612da2565b848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050612dd2565b611958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194f90614435565b60405180910390fd5b600d60049054906101000a900461ffff1661ffff1681601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119b891906145dc565b11156119f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f0906143f5565b60405180910390fd5b80601054611a079190614663565b341015611a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4090614315565b60405180910390fd5b611a533382612d94565b80601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a9e91906145dc565b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b611af184848461254e565b611b108373ffffffffffffffffffffffffffffffffffffffff16612de9565b8015611b255750611b2384848484612e0c565b155b15611b5c576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b600d60009054906101000a900461ffff1681565b600d60029054906101000a900461ffff1681565b611b9261248f565b73ffffffffffffffffffffffffffffffffffffffff16611bb06113c0565b73ffffffffffffffffffffffffffffffffffffffff1614611c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfd906143b5565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b600b8054611c3f906147d3565b80601f0160208091040260200160405190810160405280929190818152602001828054611c6b906147d3565b8015611cb85780601f10611c8d57610100808354040283529160200191611cb8565b820191906000526020600020905b815481529060010190602001808311611c9b57829003601f168201915b505050505081565b6060611ccb82612441565b611d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d01906143d5565b60405180910390fd5b6000611d14612f6c565b90506000815111611d345760405180602001604052806000815250611d62565b80611d3e84612ffe565b600b604051602001611d52939291906141cb565b6040516020818303038152906040525b915050919050565b611d7261248f565b73ffffffffffffffffffffffffffffffffffffffff16611d906113c0565b73ffffffffffffffffffffffffffffffffffffffff1614611de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddd906143b5565b60405180910390fd5b611df08282612d94565b5050565b611dfc61248f565b73ffffffffffffffffffffffffffffffffffffffff16611e1a6113c0565b73ffffffffffffffffffffffffffffffffffffffff1614611e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e67906143b5565b60405180910390fd5b80600d60026101000a81548161ffff021916908361ffff16021790555050565b600e5481565b6000611ea18261315f565b9050919050565b611eb061248f565b73ffffffffffffffffffffffffffffffffffffffff16611ece6113c0565b73ffffffffffffffffffffffffffffffffffffffff1614611f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1b906143b5565b60405180910390fd5b8060108190555050565b601160019054906101000a900460ff1681565b60105481565b611f4f61248f565b73ffffffffffffffffffffffffffffffffffffffff16611f6d6113c0565b73ffffffffffffffffffffffffffffffffffffffff1614611fc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fba906143b5565b60405180910390fd5b80600d60006101000a81548161ffff021916908361ffff16021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61207f61248f565b73ffffffffffffffffffffffffffffffffffffffff1661209d6113c0565b73ffffffffffffffffffffffffffffffffffffffff16146120f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ea906143b5565b60405180910390fd5b80600d60046101000a81548161ffff021916908361ffff16021790555050565b61211b61248f565b73ffffffffffffffffffffffffffffffffffffffff166121396113c0565b73ffffffffffffffffffffffffffffffffffffffff161461218f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612186906143b5565b60405180910390fd5b601160019054906101000a900460ff1615601160016101000a81548160ff021916908315150217905550565b6121c361248f565b73ffffffffffffffffffffffffffffffffffffffff166121e16113c0565b73ffffffffffffffffffffffffffffffffffffffff1614612237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222e906143b5565b60405180910390fd5b80600c8190555050565b61224961248f565b73ffffffffffffffffffffffffffffffffffffffff166122676113c0565b73ffffffffffffffffffffffffffffffffffffffff16146122bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b4906143b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561232d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612324906142d5565b60405180910390fd5b61233681612cce565b50565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146123c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c090614415565b60405180910390fd5b6123d3828261322f565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008161244c612549565b1115801561245b575060005482105b8015612488575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b600061255982612a3f565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661258061248f565b73ffffffffffffffffffffffffffffffffffffffff1614806125b357506125b282600001516125ad61248f565b611fe3565b5b806125f857506125c161248f565b73ffffffffffffffffffffffffffffffffffffffff166125e084610ba1565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612631576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461269a576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612701576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61270e858585600161324d565b61271e6000848460000151612497565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156129cf576000548110156129ce5782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a388585856001613253565b5050505050565b612a47613762565b600082905080612a55612549565b11158015612a64575060005481105b15612c97576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612c9557600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612b79578092505050612cc9565b5b600115612c9457818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612c8f578092505050612cc9565b612b7a565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612d9e828261322f565b5050565b600081604051602001612db591906141b0565b604051602081830303815290604052805190602001209050919050565b6000612de182600c5485613259565b905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e3261248f565b8786866040518563ffffffff1660e01b8152600401612e54949392919061422c565b602060405180830381600087803b158015612e6e57600080fd5b505af1925050508015612e9f57506040513d601f19601f82011682018060405250810190612e9c9190613cef565b60015b612f19573d8060008114612ecf576040519150601f19603f3d011682016040523d82523d6000602084013e612ed4565b606091505b50600081511415612f11576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600a8054612f7b906147d3565b80601f0160208091040260200160405190810160405280929190818152602001828054612fa7906147d3565b8015612ff45780601f10612fc957610100808354040283529160200191612ff4565b820191906000526020600020905b815481529060010190602001808311612fd757829003601f168201915b5050505050905090565b60606000821415613046576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061315a565b600082905060005b6000821461307857808061306190614836565b915050600a826130719190614632565b915061304e565b60008167ffffffffffffffff81111561309457613093614990565b5b6040519080825280601f01601f1916602001820160405280156130c65781602001600182028036833780820191505090505b5090505b60008514613153576001826130df91906146bd565b9150600a856130ee91906148a3565b60306130fa91906145dc565b60f81b8183815181106131105761310f614961565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561314c9190614632565b94506130ca565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131c7576040517f35ebb31900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b613249828260405180602001604052806000815250613270565b5050565b50505050565b50505050565b6000826132668584613282565b1490509392505050565b61327d83838360016132f7565b505050565b60008082905060005b84518110156132ec5760008582815181106132a9576132a8614961565b5b602002602001015190508083116132cb576132c483826136c5565b92506132d8565b6132d581846136c5565b92505b5080806132e490614836565b91505061328b565b508091505092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613364576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084141561339f576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6133ac600086838761324d565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000858201905083801561357657506135758773ffffffffffffffffffffffffffffffffffffffff16612de9565b5b1561363c575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46135eb6000888480600101955088612e0c565b613621576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082141561357c57826000541461363757600080fd5b6136a8565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082141561363d575b8160008190555050506136be6000868387613253565b5050505050565b600082600052816020526040600020905092915050565b8280546136e8906147d3565b90600052602060002090601f01602090048101928261370a5760008555613751565b82601f1061372357805160ff1916838001178555613751565b82800160010185558215613751579182015b82811115613750578251825591602001919060010190613735565b5b50905061375e91906137a5565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156137be5760008160009055506001016137a6565b5090565b60006137d56137d0846144eb565b6144c6565b905080838252602082019050828560208602820111156137f8576137f76149c9565b5b60005b85811015613828578161380e88826138b6565b8452602084019350602083019250506001810190506137fb565b5050509392505050565b600061384561384084614517565b6144c6565b905082815260208101848484011115613861576138606149ce565b5b61386c848285614791565b509392505050565b600061388761388284614548565b6144c6565b9050828152602081018484840111156138a3576138a26149ce565b5b6138ae848285614791565b509392505050565b6000813590506138c581614cae565b92915050565b600082601f8301126138e0576138df6149c4565b5b81356138f08482602086016137c2565b91505092915050565b60008083601f84011261390f5761390e6149c4565b5b8235905067ffffffffffffffff81111561392c5761392b6149bf565b5b602083019150836020820283011115613948576139476149c9565b5b9250929050565b60008135905061395e81614cc5565b92915050565b60008135905061397381614cdc565b92915050565b60008135905061398881614cf3565b92915050565b60008151905061399d81614cf3565b92915050565b600082601f8301126139b8576139b76149c4565b5b81356139c8848260208601613832565b91505092915050565b600082601f8301126139e6576139e56149c4565b5b81356139f6848260208601613874565b91505092915050565b600081359050613a0e81614d0a565b92915050565b600081359050613a2381614d21565b92915050565b600060208284031215613a3f57613a3e6149d8565b5b6000613a4d848285016138b6565b91505092915050565b60008060408385031215613a6d57613a6c6149d8565b5b6000613a7b858286016138b6565b9250506020613a8c858286016138b6565b9150509250929050565b600080600060608486031215613aaf57613aae6149d8565b5b6000613abd868287016138b6565b9350506020613ace868287016138b6565b9250506040613adf86828701613a14565b9150509250925092565b60008060008060808587031215613b0357613b026149d8565b5b6000613b11878288016138b6565b9450506020613b22878288016138b6565b9350506040613b3387828801613a14565b925050606085013567ffffffffffffffff811115613b5457613b536149d3565b5b613b60878288016139a3565b91505092959194509250565b60008060408385031215613b8357613b826149d8565b5b6000613b91858286016138b6565b9250506020613ba28582860161394f565b9150509250929050565b60008060408385031215613bc357613bc26149d8565b5b6000613bd1858286016138b6565b9250506020613be285828601613a14565b9150509250929050565b600060208284031215613c0257613c016149d8565b5b600082013567ffffffffffffffff811115613c2057613c1f6149d3565b5b613c2c848285016138cb565b91505092915050565b600080600060408486031215613c4e57613c4d6149d8565b5b600084013567ffffffffffffffff811115613c6c57613c6b6149d3565b5b613c78868287016138f9565b93509350506020613c8b86828701613a14565b9150509250925092565b600060208284031215613cab57613caa6149d8565b5b6000613cb984828501613964565b91505092915050565b600060208284031215613cd857613cd76149d8565b5b6000613ce684828501613979565b91505092915050565b600060208284031215613d0557613d046149d8565b5b6000613d138482850161398e565b91505092915050565b600060208284031215613d3257613d316149d8565b5b600082013567ffffffffffffffff811115613d5057613d4f6149d3565b5b613d5c848285016139d1565b91505092915050565b600060208284031215613d7b57613d7a6149d8565b5b6000613d89848285016139ff565b91505092915050565b600060208284031215613da857613da76149d8565b5b6000613db684828501613a14565b91505092915050565b613dc8816146f1565b82525050565b613dd7816146f1565b82525050565b613dee613de9826146f1565b61487f565b82525050565b613dfd81614703565b82525050565b613e0c81614703565b82525050565b6000613e1d8261458e565b613e2781856145a4565b9350613e378185602086016147a0565b613e40816149dd565b840191505092915050565b6000613e5682614599565b613e6081856145c0565b9350613e708185602086016147a0565b613e79816149dd565b840191505092915050565b6000613e8f82614599565b613e9981856145d1565b9350613ea98185602086016147a0565b80840191505092915050565b60008154613ec2816147d3565b613ecc81866145d1565b94506001821660008114613ee75760018114613ef857613f2b565b60ff19831686528186019350613f2b565b613f0185614579565b60005b83811015613f2357815481890152600182019150602081019050613f04565b838801955050505b50505092915050565b6000613f416011836145c0565b9150613f4c826149fb565b602082019050919050565b6000613f646026836145c0565b9150613f6f82614a24565b604082019050919050565b6000613f87600e836145c0565b9150613f9282614a73565b602082019050919050565b6000613faa6015836145c0565b9150613fb582614a9c565b602082019050919050565b6000613fcd6014836145c0565b9150613fd882614ac5565b602082019050919050565b6000613ff06023836145c0565b9150613ffb82614aee565b604082019050919050565b60006140136020836145c0565b915061401e82614b3d565b602082019050919050565b60006140366014836145c0565b915061404182614b66565b602082019050919050565b60006140596020836145c0565b915061406482614b8f565b602082019050919050565b600061407c602f836145c0565b915061408782614bb8565b604082019050919050565b600061409f6000836145b5565b91506140aa82614c07565b600082019050919050565b60006140c2600e836145c0565b91506140cd82614c0a565b602082019050919050565b60006140e5600b836145c0565b91506140f082614c33565b602082019050919050565b6000614108600d836145c0565b915061411382614c5c565b602082019050919050565b600061412b601c836145c0565b915061413682614c85565b602082019050919050565b6060820160008201516141576000850182613dbf565b50602082015161416a60208501826141a1565b50604082015161417d6040850182613df4565b50505050565b61418c81614745565b82525050565b61419b81614773565b82525050565b6141aa8161477d565b82525050565b60006141bc8284613ddd565b60148201915081905092915050565b60006141d78286613e84565b91506141e38285613e84565b91506141ef8284613eb5565b9150819050949350505050565b600061420782614092565b9150819050919050565b60006020820190506142266000830184613dce565b92915050565b60006080820190506142416000830187613dce565b61424e6020830186613dce565b61425b6040830185614192565b818103606083015261426d8184613e12565b905095945050505050565b600060208201905061428d6000830184613e03565b92915050565b600060208201905081810360008301526142ad8184613e4b565b905092915050565b600060208201905081810360008301526142ce81613f34565b9050919050565b600060208201905081810360008301526142ee81613f57565b9050919050565b6000602082019050818103600083015261430e81613f7a565b9050919050565b6000602082019050818103600083015261432e81613f9d565b9050919050565b6000602082019050818103600083015261434e81613fc0565b9050919050565b6000602082019050818103600083015261436e81613fe3565b9050919050565b6000602082019050818103600083015261438e81614006565b9050919050565b600060208201905081810360008301526143ae81614029565b9050919050565b600060208201905081810360008301526143ce8161404c565b9050919050565b600060208201905081810360008301526143ee8161406f565b9050919050565b6000602082019050818103600083015261440e816140b5565b9050919050565b6000602082019050818103600083015261442e816140d8565b9050919050565b6000602082019050818103600083015261444e816140fb565b9050919050565b6000602082019050818103600083015261446e8161411e565b9050919050565b600060608201905061448a6000830184614141565b92915050565b60006020820190506144a56000830184614183565b92915050565b60006020820190506144c06000830184614192565b92915050565b60006144d06144e1565b90506144dc8282614805565b919050565b6000604051905090565b600067ffffffffffffffff82111561450657614505614990565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561453257614531614990565b5b61453b826149dd565b9050602081019050919050565b600067ffffffffffffffff82111561456357614562614990565b5b61456c826149dd565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006145e782614773565b91506145f283614773565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614627576146266148d4565b5b828201905092915050565b600061463d82614773565b915061464883614773565b92508261465857614657614903565b5b828204905092915050565b600061466e82614773565b915061467983614773565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146b2576146b16148d4565b5b828202905092915050565b60006146c882614773565b91506146d383614773565b9250828210156146e6576146e56148d4565b5b828203905092915050565b60006146fc82614753565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b838110156147be5780820151818401526020810190506147a3565b838111156147cd576000848401525b50505050565b600060028204905060018216806147eb57607f821691505b602082108114156147ff576147fe614932565b5b50919050565b61480e826149dd565b810181811067ffffffffffffffff8211171561482d5761482c614990565b5b80604052505050565b600061484182614773565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614874576148736148d4565b5b600182019050919050565b600061488a82614891565b9050919050565b600061489c826149ee565b9050919050565b60006148ae82614773565b91506148b983614773565b9250826148c9576148c8614903565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f534f4c4420544845204655434b204f5554000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f544841545320544f4f204d414e59000000000000000000000000000000000000600082015250565b7f594f552043414e54204146464f524420465245453f0000000000000000000000600082015250565b7f43414e54204245205a45524f2044554d42415353000000000000000000000000600082015250565b7f4d494e54204f4e452e2053544f50204245494e47204655434b494e472047524560008201527f4544590000000000000000000000000000000000000000000000000000000000602082015250565b7f49545320465245452c2046494e4420534f4d45205350415245204348414e4745600082015250565b7f594f552053484f554c444e542042452048455245000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f444f4e5420424520475245454459000000000000000000000000000000000000600082015250565b7f4e4f5420414c4c4f574544000000000000000000000000000000000000000000600082015250565b7f496e76616c69642070726f6f6600000000000000000000000000000000000000600082015250565b7f594f5520414c524541445920474f54204f4e4520415353484f4c452e00000000600082015250565b614cb7816146f1565b8114614cc257600080fd5b50565b614cce81614703565b8114614cd957600080fd5b50565b614ce58161470f565b8114614cf057600080fd5b50565b614cfc81614719565b8114614d0757600080fd5b50565b614d1381614745565b8114614d1e57600080fd5b50565b614d2a81614773565b8114614d3557600080fd5b5056fea264697066735822122032db17e7054e5df62cd7885214a414abefd054d38018e3f5abbf2754e7f2690164736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d537869676e555436436d66666277716e547a6e4c6439643539564d3257586138386237514b523157435552642f00000000000000000000

-----Decoded View---------------
Arg [0] : _baseUrl (string): ipfs://QmSxignUT6CmffbwqnTznLd9d59VM2WXa88b7QKR1WCURd/

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d537869676e555436436d66666277716e547a6e4c643964
Arg [3] : 3539564d3257586138386237514b523157435552642f00000000000000000000


Deployed Bytecode Sourcemap

48407:6621:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30875:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34260:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35763:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35326:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48911:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30124:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36620:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48783:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54868:157;;;:::i;:::-;;48512:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36861:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53552:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54260:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49015:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34069:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49362:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54158:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31244:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7293:103;;;;;;;;;;;;;:::i;:::-;;52681:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6642:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54693:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34429:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51637:917;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36039:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50407:1086;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37117:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48653:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48705:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54375:75;;;;;;;;;;;;;:::i;:::-;;48543:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53042:502;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52562:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53898:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48857:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51501:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53646:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49047:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48950:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53761:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36389:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54025:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54458:99;;;;;;;;;;;;;:::i;:::-;;49788:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7551:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49557:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30875:305;30977:4;31029:25;31014:40;;;:11;:40;;;;:105;;;;31086:33;31071:48;;;:11;:48;;;;31014:105;:158;;;;31136:36;31160:11;31136:23;:36::i;:::-;31014:158;30994:178;;30875:305;;;:::o;34260:100::-;34314:13;34347:5;34340:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34260:100;:::o;35763:204::-;35831:7;35856:16;35864:7;35856;:16::i;:::-;35851:64;;35881:34;;;;;;;;;;;;;;35851:64;35935:15;:24;35951:7;35935:24;;;;;;;;;;;;;;;;;;;;;35928:31;;35763:204;;;:::o;35326:371::-;35399:13;35415:24;35431:7;35415:15;:24::i;:::-;35399:40;;35460:5;35454:11;;:2;:11;;;35450:48;;;35474:24;;;;;;;;;;;;;;35450:48;35531:5;35515:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;35541:37;35558:5;35565:12;:10;:12::i;:::-;35541:16;:37::i;:::-;35540:38;35515:63;35511:138;;;35602:35;;;;;;;;;;;;;;35511:138;35661:28;35670:2;35674:7;35683:5;35661:8;:28::i;:::-;35388:309;35326:371;;:::o;48911:32::-;;;;:::o;30124:303::-;30168:7;30393:15;:13;:15::i;:::-;30378:12;;30362:13;;:28;:46;30355:53;;30124:303;:::o;36620:170::-;36754:28;36764:4;36770:2;36774:7;36754:9;:28::i;:::-;36620:170;;;:::o;48783:43::-;;;;;;;;;;;;;:::o;54868:157::-;6873:12;:10;:12::i;:::-;6862:23;;:7;:5;:7::i;:::-;:23;;;6854:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54927:7:::1;54948;:5;:7::i;:::-;54940:21;;54969;54940:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54926:69;;;55014:2;55006:11;;;::::0;::::1;;54913:112;54868:157::o:0;48512:24::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;36861:185::-;36999:39;37016:4;37022:2;37026:7;36999:39;;;;;;;;;;;;:16;:39::i;:::-;36861:185;;;:::o;53552:86::-;6873:12;:10;:12::i;:::-;6862:23;;:7;:5;:7::i;:::-;:23;;;6854:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53622:8:::1;53615:4;:15;;;;53552:86:::0;:::o;54260:107::-;6873:12;:10;:12::i;:::-;6862:23;;:7;:5;:7::i;:::-;:23;;;6854:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54348:11:::1;54335:10;:24;;;;;;;;;;;;:::i;:::-;;54260:107:::0;:::o;49015:25::-;;;;;;;;;;;;;:::o;34069:124::-;34133:7;34160:20;34172:7;34160:11;:20::i;:::-;:25;;;34153:32;;34069:124;;;:::o;49362:119::-;6873:12;:10;:12::i;:::-;6862:23;;:7;:5;:7::i;:::-;:23;;;6854:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49464:9:::1;49445:16;;:28;;;;;;;;;;;;;;;;;;49362:119:::0;:::o;54158:94::-;6873:12;:10;:12::i;:::-;6862:23;;:7;:5;:7::i;:::-;:23;;;6854:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54237:7:::1;54225:9;:19;;;;54158:94:::0;:::o;31244:206::-;31308:7;31349:1;31332:19;;:5;:19;;;31328:60;;;31360:28;;;;;;;;;;;;;;31328:60;31414:12;:19;31427:5;31414:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;31406:36;;31399:43;;31244:206;;;:::o;7293:103::-;6873:12;:10;:12::i;:::-;6862:23;;:7;:5;:7::i;:::-;:23;;;6854:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7358:30:::1;7385:1;7358:18;:30::i;:::-;7293:103::o:0;52681:234::-;6873:12;:10;:12::i;:::-;6862:23;;:7;:5;:7::i;:::-;:23;;;6854:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52767:9:::1;52762:146;52786:17;:24;52782:1;:28;52762:146;;;52832:10;52845:17;52863:1;52845:20;;;;;;;;:::i;:::-;;;;;;;;52832:33;;52880:16;52890:2;52894:1;52880:9;:16::i;:::-;52817:91;52812:3;;;;;:::i;:::-;;;;52762:146;;;;52681:234:::0;:::o;6642:87::-;6688:7;6715:6;;;;;;;;;;;6708:13;;6642:87;:::o;54693:167::-;54786:21;;:::i;:::-;54832:20;54844:7;54832:11;:20::i;:::-;54825:27;;54693:167;;;:::o;34429:104::-;34485:13;34518:7;34511:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34429:104;:::o;51637:917::-;51716:7;:5;:7::i;:::-;51702:21;;:10;:21;;;51698:802;;51740:23;51766:21;51776:10;51766:9;:21::i;:::-;51740:47;;51813:6;;;;;;;;;;;51812:7;51804:16;;;;;;51844;;;;;;;;;;;51843:17;51835:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;51922:1;51908:11;:15;51900:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;52004:27;;;;;;;;;;;51989:42;;:11;:42;;51963:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;52174:9;;52159:11;52143:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;52117:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;52309:22;;;;;;;;;;;52274:57;;52293:11;52275:15;:29;;;;:::i;:::-;52274:57;;52248:147;;;;;;;;;;;;:::i;:::-;;;;;;;;;52440:11;52433:4;;:18;;;;:::i;:::-;52420:9;:31;;52412:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;51725:775;51698:802;52512:34;52522:10;52534:11;52512:9;:34::i;:::-;51637:917;:::o;36039:279::-;36142:12;:10;:12::i;:::-;36130:24;;:8;:24;;;36126:54;;;36163:17;;;;;;;;;;;;;;36126:54;36238:8;36193:18;:32;36212:12;:10;:12::i;:::-;36193:32;;;;;;;;;;;;;;;:42;36226:8;36193:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;36291:8;36262:48;;36277:12;:10;:12::i;:::-;36262:48;;;36301:8;36262:48;;;;;;:::i;:::-;;;;;;;;36039:279;;:::o;50407:1086::-;50664:9;;50649:11;50633:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;50607:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;50777:33;50785:17;50791:10;50785:5;:17::i;:::-;50804:5;;50777:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:7;:33::i;:::-;50747:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;50989:25;;;;;;;;;;;50916:98;;50948:11;50917:16;:28;50934:10;50917:28;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;50916:98;;50886:186;;;;;;;;;;;;:::i;:::-;;;;;;;;;51153:11;51137:13;;:27;;;;:::i;:::-;51123:9;:42;;51093:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;51317:34;51327:10;51339:11;51317:9;:34::i;:::-;51474:11;51422:16;:28;51439:10;51422:28;;;;;;;;;;;;;;;;:63;;;;:::i;:::-;51370:16;:28;51387:10;51370:28;;;;;;;;;;;;;;;:115;;;;50407:1086;;;:::o;37117:369::-;37284:28;37294:4;37300:2;37304:7;37284:9;:28::i;:::-;37327:15;:2;:13;;;:15::i;:::-;:76;;;;;37347:56;37378:4;37384:2;37388:7;37397:5;37347:30;:56::i;:::-;37346:57;37327:76;37323:156;;;37427:40;;;;;;;;;;;;;;37323:156;37117:369;;;;:::o;48653:45::-;;;;;;;;;;;;;:::o;48705:40::-;;;;;;;;;;;;;:::o;54375:75::-;6873:12;:10;:12::i;:::-;6862:23;;:7;:5;:7::i;:::-;:23;;;6854:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54436:6:::1;;;;;;;;;;;54435:7;54426:6;;:16;;;;;;;;;;;;;;;;;;54375:75::o:0;48543:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;53042:502::-;53160:13;53213:16;53221:7;53213;:16::i;:::-;53191:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;53315:28;53346:10;:8;:10::i;:::-;53315:41;;53418:1;53393:14;53387:28;:32;:149;;;;;;;;;;;;;;;;;53463:14;53479:18;:7;:16;:18::i;:::-;53499:13;53446:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;53387:149;53367:169;;;53042:502;;;:::o;52562:111::-;6873:12;:10;:12::i;:::-;6862:23;;:7;:5;:7::i;:::-;:23;;;6854:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52638:27:::1;52648:3;52653:11;52638:9;:27::i;:::-;52562:111:::0;;:::o;53898:119::-;6873:12;:10;:12::i;:::-;6862:23;;:7;:5;:7::i;:::-;:23;;;6854:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54002:7:::1;53977:22;;:32;;;;;;;;;;;;;;;;;;53898:119:::0;:::o;48857:31::-;;;;:::o;51501:113::-;51559:7;51586:20;51600:5;51586:13;:20::i;:::-;51579:27;;51501:113;;;:::o;53646:107::-;6873:12;:10;:12::i;:::-;6862:23;;:7;:5;:7::i;:::-;:23;;;6854:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53737:8:::1;53721:13;:24;;;;53646:107:::0;:::o;49047:36::-;;;;;;;;;;;;;:::o;48950:41::-;;;;:::o;53761:129::-;6873:12;:10;:12::i;:::-;6862:23;;:7;:5;:7::i;:::-;:23;;;6854:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53875:7:::1;53845:27;;:37;;;;;;;;;;;;;;;;;;53761:129:::0;:::o;36389:164::-;36486:4;36510:18;:25;36529:5;36510:25;;;;;;;;;;;;;;;:35;36536:8;36510:35;;;;;;;;;;;;;;;;;;;;;;;;;36503:42;;36389:164;;;;:::o;54025:125::-;6873:12;:10;:12::i;:::-;6862:23;;:7;:5;:7::i;:::-;:23;;;6854:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54135:7:::1;54107:25;;:35;;;;;;;;;;;;;;;;;;54025:125:::0;:::o;54458:99::-;6873:12;:10;:12::i;:::-;6862:23;;:7;:5;:7::i;:::-;:23;;;6854:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54533:16:::1;;;;;;;;;;;54532:17;54513:16;;:36;;;;;;;;;;;;;;;;;;54458:99::o:0;49788:101::-;6873:12;:10;:12::i;:::-;6862:23;;:7;:5;:7::i;:::-;:23;;;6854:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49876:5:::1;49860:13;:21;;;;49788:101:::0;:::o;7551:201::-;6873:12;:10;:12::i;:::-;6862:23;;:7;:5;:7::i;:::-;:23;;;6854:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7660:1:::1;7640:22;;:8;:22;;;;7632:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7716:28;7735:8;7716:18;:28::i;:::-;7551:201:::0;:::o;49557:223::-;49674:16;;;;;;;;;;;49660:30;;:10;:30;;;49638:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;49740:32;49750:8;49760:11;49740:9;:32::i;:::-;49557:223;;:::o;19426:157::-;19511:4;19550:25;19535:40;;;:11;:40;;;;19528:47;;19426:157;;;:::o;37741:187::-;37798:4;37841:7;37822:15;:13;:15::i;:::-;:26;;:53;;;;;37862:13;;37852:7;:23;37822:53;:98;;;;;37893:11;:20;37905:7;37893:20;;;;;;;;;;;:27;;;;;;;;;;;;37892:28;37822:98;37815:105;;37741:187;;;:::o;5366:98::-;5419:7;5446:10;5439:17;;5366:98;:::o;45352:196::-;45494:2;45467:15;:24;45483:7;45467:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;45532:7;45528:2;45512:28;;45521:5;45512:28;;;;;;;;;;;;45352:196;;;:::o;29848:92::-;29904:7;29848:92;:::o;40854:2112::-;40969:35;41007:20;41019:7;41007:11;:20::i;:::-;40969:58;;41040:22;41082:13;:18;;;41066:34;;:12;:10;:12::i;:::-;:34;;;:101;;;;41117:50;41134:13;:18;;;41154:12;:10;:12::i;:::-;41117:16;:50::i;:::-;41066:101;:154;;;;41208:12;:10;:12::i;:::-;41184:36;;:20;41196:7;41184:11;:20::i;:::-;:36;;;41066:154;41040:181;;41239:17;41234:66;;41265:35;;;;;;;;;;;;;;41234:66;41337:4;41315:26;;:13;:18;;;:26;;;41311:67;;41350:28;;;;;;;;;;;;;;41311:67;41407:1;41393:16;;:2;:16;;;41389:52;;;41418:23;;;;;;;;;;;;;;41389:52;41454:43;41476:4;41482:2;41486:7;41495:1;41454:21;:43::i;:::-;41562:49;41579:1;41583:7;41592:13;:18;;;41562:8;:49::i;:::-;41937:1;41907:12;:18;41920:4;41907:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41981:1;41953:12;:16;41966:2;41953:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42027:2;41999:11;:20;42011:7;41999:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;42089:15;42044:11;:20;42056:7;42044:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;42357:19;42389:1;42379:7;:11;42357:33;;42450:1;42409:43;;:11;:24;42421:11;42409:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;42405:445;;;42634:13;;42620:11;:27;42616:219;;;42704:13;:18;;;42672:11;:24;42684:11;42672:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;42787:13;:28;;;42745:11;:24;42757:11;42745:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;42616:219;42405:445;41882:979;42897:7;42893:2;42878:27;;42887:4;42878:27;;;;;;;;;;;;42916:42;42937:4;42943:2;42947:7;42956:1;42916:20;:42::i;:::-;40958:2008;;40854:2112;;;:::o;32899:1108::-;32960:21;;:::i;:::-;32994:12;33009:7;32994:22;;33077:4;33058:15;:13;:15::i;:::-;:23;;:47;;;;;33092:13;;33085:4;:20;33058:47;33054:886;;;33126:31;33160:11;:17;33172:4;33160:17;;;;;;;;;;;33126:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33201:9;:16;;;33196:729;;33272:1;33246:28;;:9;:14;;;:28;;;33242:101;;33310:9;33303:16;;;;;;33242:101;33645:261;33652:4;33645:261;;;33685:6;;;;;;;;33730:11;:17;33742:4;33730:17;;;;;;;;;;;33718:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33804:1;33778:28;;:9;:14;;;:28;;;33774:109;;33846:9;33839:16;;;;;;33774:109;33645:261;;;33196:729;33107:833;33054:886;33968:31;;;;;;;;;;;;;;32899:1108;;;;:::o;7912:191::-;7986:16;8005:6;;;;;;;;;;;7986:25;;8031:8;8022:6;;:17;;;;;;;;;;;;;;;;;;8086:8;8055:40;;8076:8;8055:40;;;;;;;;;;;;7975:128;7912:191;:::o;54565:120::-;54644:33;54654:9;54665:11;54644:9;:33::i;:::-;54565:120;;:::o;50251:126::-;50306:7;50360;50343:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;50333:36;;;;;;50326:43;;50251:126;;;:::o;49956:191::-;50064:4;50088:51;50107:5;50114:13;;50129:9;50088:18;:51::i;:::-;50081:58;;49956:191;;;;:::o;9343:326::-;9403:4;9660:1;9638:7;:19;;;:23;9631:30;;9343:326;;;:::o;46040:667::-;46203:4;46240:2;46224:36;;;46261:12;:10;:12::i;:::-;46275:4;46281:7;46290:5;46224:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;46220:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46475:1;46458:6;:13;:18;46454:235;;;46504:40;;;;;;;;;;;;;;46454:235;46647:6;46641:13;46632:6;46628:2;46624:15;46617:38;46220:480;46353:45;;;46343:55;;;:6;:55;;;;46336:62;;;46040:667;;;;;;:::o;52923:111::-;52983:13;53016:10;53009:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52923:111;:::o;2928:723::-;2984:13;3214:1;3205:5;:10;3201:53;;;3232:10;;;;;;;;;;;;;;;;;;;;;3201:53;3264:12;3279:5;3264:20;;3295:14;3320:78;3335:1;3327:4;:9;3320:78;;3353:8;;;;;:::i;:::-;;;;3384:2;3376:10;;;;;:::i;:::-;;;3320:78;;;3408:19;3440:6;3430:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3408:39;;3458:154;3474:1;3465:5;:10;3458:154;;3502:1;3492:11;;;;;:::i;:::-;;;3569:2;3561:5;:10;;;;:::i;:::-;3548:2;:24;;;;:::i;:::-;3535:39;;3518:6;3525;3518:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3598:2;3589:11;;;;;:::i;:::-;;;3458:154;;;3636:6;3622:21;;;;;2928:723;;;;:::o;31532:207::-;31593:7;31634:1;31617:19;;:5;:19;;;31613:59;;;31645:27;;;;;;;;;;;;;;31613:59;31698:12;:19;31711:5;31698:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;31690:41;;31683:48;;31532:207;;;:::o;37936:104::-;38005:27;38015:2;38019:8;38005:27;;;;;;;;;;;;:9;:27::i;:::-;37936:104;;:::o;47355:159::-;;;;;:::o;48173:158::-;;;;;:::o;1097:190::-;1222:4;1275;1246:25;1259:5;1266:4;1246:12;:25::i;:::-;:33;1239:40;;1097:190;;;;;:::o;38403:163::-;38526:32;38532:2;38536:8;38546:5;38553:4;38526:5;:32::i;:::-;38403:163;;;:::o;1649:675::-;1732:7;1752:20;1775:4;1752:27;;1795:9;1790:497;1814:5;:12;1810:1;:16;1790:497;;;1848:20;1871:5;1877:1;1871:8;;;;;;;;:::i;:::-;;;;;;;;1848:31;;1914:12;1898;:28;1894:382;;2041:42;2056:12;2070;2041:14;:42::i;:::-;2026:57;;1894:382;;;2218:42;2233:12;2247;2218:14;:42::i;:::-;2203:57;;1894:382;1833:454;1828:3;;;;;:::i;:::-;;;;1790:497;;;;2304:12;2297:19;;;1649:675;;;;:::o;38825:1775::-;38964:20;38987:13;;38964:36;;39029:1;39015:16;;:2;:16;;;39011:48;;;39040:19;;;;;;;;;;;;;;39011:48;39086:1;39074:8;:13;39070:44;;;39096:18;;;;;;;;;;;;;;39070:44;39127:61;39157:1;39161:2;39165:12;39179:8;39127:21;:61::i;:::-;39500:8;39465:12;:16;39478:2;39465:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39564:8;39524:12;:16;39537:2;39524:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39623:2;39590:11;:25;39602:12;39590:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;39690:15;39640:11;:25;39652:12;39640:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;39723:20;39746:12;39723:35;;39773:11;39802:8;39787:12;:23;39773:37;;39831:4;:23;;;;;39839:15;:2;:13;;;:15::i;:::-;39831:23;39827:641;;;39875:314;39931:12;39927:2;39906:38;;39923:1;39906:38;;;;;;;;;;;;39972:69;40011:1;40015:2;40019:14;;;;;;40035:5;39972:30;:69::i;:::-;39967:174;;40077:40;;;;;;;;;;;;;;39967:174;40184:3;40168:12;:19;;39875:314;;40270:12;40253:13;;:29;40249:43;;40284:8;;;40249:43;39827:641;;;40333:120;40389:14;;;;;;40385:2;40364:40;;40381:1;40364:40;;;;;;;;;;;;40448:3;40432:12;:19;;40333:120;;39827:641;40498:12;40482:13;:28;;;;39440:1082;;40532:60;40561:1;40565:2;40569:12;40583:8;40532:20;:60::i;:::-;38953:1647;38825:1775;;;;:::o;2332:224::-;2400:13;2463:1;2457:4;2450:15;2492:1;2486:4;2479:15;2533:4;2527;2517:21;2508:30;;2332:224;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::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;2141:568::-;2214:8;2224:6;2274:3;2267:4;2259:6;2255:17;2251:27;2241:122;;2282:79;;:::i;:::-;2241:122;2395:6;2382:20;2372:30;;2425:18;2417:6;2414:30;2411:117;;;2447:79;;:::i;:::-;2411:117;2561:4;2553:6;2549:17;2537:29;;2615:3;2607:4;2599:6;2595:17;2585:8;2581:32;2578:41;2575:128;;;2622:79;;:::i;:::-;2575:128;2141:568;;;;;:::o;2715:133::-;2758:5;2796:6;2783:20;2774:29;;2812:30;2836:5;2812:30;:::i;:::-;2715:133;;;;:::o;2854:139::-;2900:5;2938:6;2925:20;2916:29;;2954:33;2981:5;2954:33;:::i;:::-;2854:139;;;;:::o;2999:137::-;3044:5;3082:6;3069:20;3060:29;;3098:32;3124:5;3098:32;:::i;:::-;2999:137;;;;:::o;3142:141::-;3198:5;3229:6;3223:13;3214:22;;3245:32;3271:5;3245:32;:::i;:::-;3142:141;;;;:::o;3302:338::-;3357:5;3406:3;3399:4;3391:6;3387:17;3383:27;3373:122;;3414:79;;:::i;:::-;3373:122;3531:6;3518:20;3556:78;3630:3;3622:6;3615:4;3607:6;3603:17;3556:78;:::i;:::-;3547:87;;3363:277;3302:338;;;;:::o;3660:340::-;3716:5;3765:3;3758:4;3750:6;3746:17;3742:27;3732:122;;3773:79;;:::i;:::-;3732:122;3890:6;3877:20;3915:79;3990:3;3982:6;3975:4;3967:6;3963:17;3915:79;:::i;:::-;3906:88;;3722:278;3660:340;;;;:::o;4006:137::-;4051:5;4089:6;4076:20;4067:29;;4105:32;4131:5;4105:32;:::i;:::-;4006:137;;;;:::o;4149:139::-;4195:5;4233:6;4220:20;4211:29;;4249:33;4276:5;4249:33;:::i;:::-;4149:139;;;;:::o;4294:329::-;4353:6;4402:2;4390:9;4381:7;4377:23;4373:32;4370:119;;;4408:79;;:::i;:::-;4370:119;4528:1;4553:53;4598:7;4589:6;4578:9;4574:22;4553:53;:::i;:::-;4543:63;;4499:117;4294:329;;;;:::o;4629:474::-;4697:6;4705;4754:2;4742:9;4733:7;4729:23;4725:32;4722:119;;;4760:79;;:::i;:::-;4722:119;4880:1;4905:53;4950:7;4941:6;4930:9;4926:22;4905:53;:::i;:::-;4895:63;;4851:117;5007:2;5033:53;5078:7;5069:6;5058:9;5054:22;5033:53;:::i;:::-;5023:63;;4978:118;4629:474;;;;;:::o;5109:619::-;5186:6;5194;5202;5251:2;5239:9;5230:7;5226:23;5222:32;5219:119;;;5257:79;;:::i;:::-;5219:119;5377:1;5402:53;5447:7;5438:6;5427:9;5423:22;5402:53;:::i;:::-;5392:63;;5348:117;5504:2;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5475:118;5632:2;5658:53;5703:7;5694:6;5683:9;5679:22;5658:53;:::i;:::-;5648:63;;5603:118;5109:619;;;;;:::o;5734:943::-;5829:6;5837;5845;5853;5902:3;5890:9;5881:7;5877:23;5873:33;5870:120;;;5909:79;;:::i;:::-;5870:120;6029:1;6054:53;6099:7;6090:6;6079:9;6075:22;6054:53;:::i;:::-;6044:63;;6000:117;6156:2;6182:53;6227:7;6218:6;6207:9;6203:22;6182:53;:::i;:::-;6172:63;;6127:118;6284:2;6310:53;6355:7;6346:6;6335:9;6331:22;6310:53;:::i;:::-;6300:63;;6255:118;6440:2;6429:9;6425:18;6412:32;6471:18;6463:6;6460:30;6457:117;;;6493:79;;:::i;:::-;6457:117;6598:62;6652:7;6643:6;6632:9;6628:22;6598:62;:::i;:::-;6588:72;;6383:287;5734:943;;;;;;;:::o;6683:468::-;6748:6;6756;6805:2;6793:9;6784:7;6780:23;6776:32;6773:119;;;6811:79;;:::i;:::-;6773:119;6931:1;6956:53;7001:7;6992:6;6981:9;6977:22;6956:53;:::i;:::-;6946:63;;6902:117;7058:2;7084:50;7126:7;7117:6;7106:9;7102:22;7084:50;:::i;:::-;7074:60;;7029:115;6683:468;;;;;:::o;7157:474::-;7225:6;7233;7282:2;7270:9;7261:7;7257:23;7253:32;7250:119;;;7288:79;;:::i;:::-;7250:119;7408:1;7433:53;7478:7;7469:6;7458:9;7454:22;7433:53;:::i;:::-;7423:63;;7379:117;7535:2;7561:53;7606:7;7597:6;7586:9;7582:22;7561:53;:::i;:::-;7551:63;;7506:118;7157:474;;;;;:::o;7637:539::-;7721:6;7770:2;7758:9;7749:7;7745:23;7741:32;7738:119;;;7776:79;;:::i;:::-;7738:119;7924:1;7913:9;7909:17;7896:31;7954:18;7946:6;7943:30;7940:117;;;7976:79;;:::i;:::-;7940:117;8081:78;8151:7;8142:6;8131:9;8127:22;8081:78;:::i;:::-;8071:88;;7867:302;7637:539;;;;:::o;8182:704::-;8277:6;8285;8293;8342:2;8330:9;8321:7;8317:23;8313:32;8310:119;;;8348:79;;:::i;:::-;8310:119;8496:1;8485:9;8481:17;8468:31;8526:18;8518:6;8515:30;8512:117;;;8548:79;;:::i;:::-;8512:117;8661:80;8733:7;8724:6;8713:9;8709:22;8661:80;:::i;:::-;8643:98;;;;8439:312;8790:2;8816:53;8861:7;8852:6;8841:9;8837:22;8816:53;:::i;:::-;8806:63;;8761:118;8182:704;;;;;:::o;8892:329::-;8951:6;9000:2;8988:9;8979:7;8975:23;8971:32;8968:119;;;9006:79;;:::i;:::-;8968:119;9126:1;9151:53;9196:7;9187:6;9176:9;9172:22;9151:53;:::i;:::-;9141:63;;9097:117;8892:329;;;;:::o;9227:327::-;9285:6;9334:2;9322:9;9313:7;9309:23;9305:32;9302:119;;;9340:79;;:::i;:::-;9302:119;9460:1;9485:52;9529:7;9520:6;9509:9;9505:22;9485:52;:::i;:::-;9475:62;;9431:116;9227:327;;;;:::o;9560:349::-;9629:6;9678:2;9666:9;9657:7;9653:23;9649:32;9646:119;;;9684:79;;:::i;:::-;9646:119;9804:1;9829:63;9884:7;9875:6;9864:9;9860:22;9829:63;:::i;:::-;9819:73;;9775:127;9560:349;;;;:::o;9915:509::-;9984:6;10033:2;10021:9;10012:7;10008:23;10004:32;10001:119;;;10039:79;;:::i;:::-;10001:119;10187:1;10176:9;10172:17;10159:31;10217:18;10209:6;10206:30;10203:117;;;10239:79;;:::i;:::-;10203:117;10344:63;10399:7;10390:6;10379:9;10375:22;10344:63;:::i;:::-;10334:73;;10130:287;9915:509;;;;:::o;10430:327::-;10488:6;10537:2;10525:9;10516:7;10512:23;10508:32;10505:119;;;10543:79;;:::i;:::-;10505:119;10663:1;10688:52;10732:7;10723:6;10712:9;10708:22;10688:52;:::i;:::-;10678:62;;10634:116;10430:327;;;;:::o;10763:329::-;10822:6;10871:2;10859:9;10850:7;10846:23;10842:32;10839:119;;;10877:79;;:::i;:::-;10839:119;10997:1;11022:53;11067:7;11058:6;11047:9;11043:22;11022:53;:::i;:::-;11012:63;;10968:117;10763:329;;;;:::o;11098:108::-;11175:24;11193:5;11175:24;:::i;:::-;11170:3;11163:37;11098:108;;:::o;11212:118::-;11299:24;11317:5;11299:24;:::i;:::-;11294:3;11287:37;11212:118;;:::o;11336:157::-;11441:45;11461:24;11479:5;11461:24;:::i;:::-;11441:45;:::i;:::-;11436:3;11429:58;11336:157;;:::o;11499:99::-;11570:21;11585:5;11570:21;:::i;:::-;11565:3;11558:34;11499:99;;:::o;11604:109::-;11685:21;11700:5;11685:21;:::i;:::-;11680:3;11673:34;11604:109;;:::o;11719:360::-;11805:3;11833:38;11865:5;11833:38;:::i;:::-;11887:70;11950:6;11945:3;11887:70;:::i;:::-;11880:77;;11966:52;12011:6;12006:3;11999:4;11992:5;11988:16;11966:52;:::i;:::-;12043:29;12065:6;12043:29;:::i;:::-;12038:3;12034:39;12027:46;;11809:270;11719:360;;;;:::o;12085:364::-;12173:3;12201:39;12234:5;12201:39;:::i;:::-;12256:71;12320:6;12315:3;12256:71;:::i;:::-;12249:78;;12336:52;12381:6;12376:3;12369:4;12362:5;12358:16;12336:52;:::i;:::-;12413:29;12435:6;12413:29;:::i;:::-;12408:3;12404:39;12397:46;;12177:272;12085:364;;;;:::o;12455:377::-;12561:3;12589:39;12622:5;12589:39;:::i;:::-;12644:89;12726:6;12721:3;12644:89;:::i;:::-;12637:96;;12742:52;12787:6;12782:3;12775:4;12768:5;12764:16;12742:52;:::i;:::-;12819:6;12814:3;12810:16;12803:23;;12565:267;12455:377;;;;:::o;12862:845::-;12965:3;13002:5;12996:12;13031:36;13057:9;13031:36;:::i;:::-;13083:89;13165:6;13160:3;13083:89;:::i;:::-;13076:96;;13203:1;13192:9;13188:17;13219:1;13214:137;;;;13365:1;13360:341;;;;13181:520;;13214:137;13298:4;13294:9;13283;13279:25;13274:3;13267:38;13334:6;13329:3;13325:16;13318:23;;13214:137;;13360:341;13427:38;13459:5;13427:38;:::i;:::-;13487:1;13501:154;13515:6;13512:1;13509:13;13501:154;;;13589:7;13583:14;13579:1;13574:3;13570:11;13563:35;13639:1;13630:7;13626:15;13615:26;;13537:4;13534:1;13530:12;13525:17;;13501:154;;;13684:6;13679:3;13675:16;13668:23;;13367:334;;13181:520;;12969:738;;12862:845;;;;:::o;13713:366::-;13855:3;13876:67;13940:2;13935:3;13876:67;:::i;:::-;13869:74;;13952:93;14041:3;13952:93;:::i;:::-;14070:2;14065:3;14061:12;14054:19;;13713:366;;;:::o;14085:::-;14227:3;14248:67;14312:2;14307:3;14248:67;:::i;:::-;14241:74;;14324:93;14413:3;14324:93;:::i;:::-;14442:2;14437:3;14433:12;14426:19;;14085:366;;;:::o;14457:::-;14599:3;14620:67;14684:2;14679:3;14620:67;:::i;:::-;14613:74;;14696:93;14785:3;14696:93;:::i;:::-;14814:2;14809:3;14805:12;14798:19;;14457:366;;;:::o;14829:::-;14971:3;14992:67;15056:2;15051:3;14992:67;:::i;:::-;14985:74;;15068:93;15157:3;15068:93;:::i;:::-;15186:2;15181:3;15177:12;15170:19;;14829:366;;;:::o;15201:::-;15343:3;15364:67;15428:2;15423:3;15364:67;:::i;:::-;15357:74;;15440:93;15529:3;15440:93;:::i;:::-;15558:2;15553:3;15549:12;15542:19;;15201:366;;;:::o;15573:::-;15715:3;15736:67;15800:2;15795:3;15736:67;:::i;:::-;15729:74;;15812:93;15901:3;15812:93;:::i;:::-;15930:2;15925:3;15921:12;15914:19;;15573:366;;;:::o;15945:::-;16087:3;16108:67;16172:2;16167:3;16108:67;:::i;:::-;16101:74;;16184:93;16273:3;16184:93;:::i;:::-;16302:2;16297:3;16293:12;16286:19;;15945:366;;;:::o;16317:::-;16459:3;16480:67;16544:2;16539:3;16480:67;:::i;:::-;16473:74;;16556:93;16645:3;16556:93;:::i;:::-;16674:2;16669:3;16665:12;16658:19;;16317:366;;;:::o;16689:::-;16831:3;16852:67;16916:2;16911:3;16852:67;:::i;:::-;16845:74;;16928:93;17017:3;16928:93;:::i;:::-;17046:2;17041:3;17037:12;17030:19;;16689:366;;;:::o;17061:::-;17203:3;17224:67;17288:2;17283:3;17224:67;:::i;:::-;17217:74;;17300:93;17389:3;17300:93;:::i;:::-;17418:2;17413:3;17409:12;17402:19;;17061:366;;;:::o;17433:398::-;17592:3;17613:83;17694:1;17689:3;17613:83;:::i;:::-;17606:90;;17705:93;17794:3;17705:93;:::i;:::-;17823:1;17818:3;17814:11;17807:18;;17433:398;;;:::o;17837:366::-;17979:3;18000:67;18064:2;18059:3;18000:67;:::i;:::-;17993:74;;18076:93;18165:3;18076:93;:::i;:::-;18194:2;18189:3;18185:12;18178:19;;17837:366;;;:::o;18209:::-;18351:3;18372:67;18436:2;18431:3;18372:67;:::i;:::-;18365:74;;18448:93;18537:3;18448:93;:::i;:::-;18566:2;18561:3;18557:12;18550:19;;18209:366;;;:::o;18581:::-;18723:3;18744:67;18808:2;18803:3;18744:67;:::i;:::-;18737:74;;18820:93;18909:3;18820:93;:::i;:::-;18938:2;18933:3;18929:12;18922:19;;18581:366;;;:::o;18953:::-;19095:3;19116:67;19180:2;19175:3;19116:67;:::i;:::-;19109:74;;19192:93;19281:3;19192:93;:::i;:::-;19310:2;19305:3;19301:12;19294:19;;18953:366;;;:::o;19395:697::-;19554:4;19549:3;19545:14;19641:4;19634:5;19630:16;19624:23;19660:63;19717:4;19712:3;19708:14;19694:12;19660:63;:::i;:::-;19569:164;19825:4;19818:5;19814:16;19808:23;19844:61;19899:4;19894:3;19890:14;19876:12;19844:61;:::i;:::-;19743:172;19999:4;19992:5;19988:16;19982:23;20018:57;20069:4;20064:3;20060:14;20046:12;20018:57;:::i;:::-;19925:160;19523:569;19395:697;;:::o;20098:115::-;20183:23;20200:5;20183:23;:::i;:::-;20178:3;20171:36;20098:115;;:::o;20219:118::-;20306:24;20324:5;20306:24;:::i;:::-;20301:3;20294:37;20219:118;;:::o;20343:105::-;20418:23;20435:5;20418:23;:::i;:::-;20413:3;20406:36;20343:105;;:::o;20454:256::-;20566:3;20581:75;20652:3;20643:6;20581:75;:::i;:::-;20681:2;20676:3;20672:12;20665:19;;20701:3;20694:10;;20454:256;;;;:::o;20716:589::-;20941:3;20963:95;21054:3;21045:6;20963:95;:::i;:::-;20956:102;;21075:95;21166:3;21157:6;21075:95;:::i;:::-;21068:102;;21187:92;21275:3;21266:6;21187:92;:::i;:::-;21180:99;;21296:3;21289:10;;20716:589;;;;;;:::o;21311:379::-;21495:3;21517:147;21660:3;21517:147;:::i;:::-;21510:154;;21681:3;21674:10;;21311:379;;;:::o;21696:222::-;21789:4;21827:2;21816:9;21812:18;21804:26;;21840:71;21908:1;21897:9;21893:17;21884:6;21840:71;:::i;:::-;21696:222;;;;:::o;21924:640::-;22119:4;22157:3;22146:9;22142:19;22134:27;;22171:71;22239:1;22228:9;22224:17;22215:6;22171:71;:::i;:::-;22252:72;22320:2;22309:9;22305:18;22296:6;22252:72;:::i;:::-;22334;22402:2;22391:9;22387:18;22378:6;22334:72;:::i;:::-;22453:9;22447:4;22443:20;22438:2;22427:9;22423:18;22416:48;22481:76;22552:4;22543:6;22481:76;:::i;:::-;22473:84;;21924:640;;;;;;;:::o;22570:210::-;22657:4;22695:2;22684:9;22680:18;22672:26;;22708:65;22770:1;22759:9;22755:17;22746:6;22708:65;:::i;:::-;22570:210;;;;:::o;22786:313::-;22899:4;22937:2;22926:9;22922:18;22914:26;;22986:9;22980:4;22976:20;22972:1;22961:9;22957:17;22950:47;23014:78;23087:4;23078:6;23014:78;:::i;:::-;23006:86;;22786:313;;;;:::o;23105:419::-;23271:4;23309:2;23298:9;23294:18;23286:26;;23358:9;23352:4;23348:20;23344:1;23333:9;23329:17;23322:47;23386:131;23512:4;23386:131;:::i;:::-;23378:139;;23105:419;;;:::o;23530:::-;23696:4;23734:2;23723:9;23719:18;23711:26;;23783:9;23777:4;23773:20;23769:1;23758:9;23754:17;23747:47;23811:131;23937:4;23811:131;:::i;:::-;23803:139;;23530:419;;;:::o;23955:::-;24121:4;24159:2;24148:9;24144:18;24136:26;;24208:9;24202:4;24198:20;24194:1;24183:9;24179:17;24172:47;24236:131;24362:4;24236:131;:::i;:::-;24228:139;;23955:419;;;:::o;24380:::-;24546:4;24584:2;24573:9;24569:18;24561:26;;24633:9;24627:4;24623:20;24619:1;24608:9;24604:17;24597:47;24661:131;24787:4;24661:131;:::i;:::-;24653:139;;24380:419;;;:::o;24805:::-;24971:4;25009:2;24998:9;24994:18;24986:26;;25058:9;25052:4;25048:20;25044:1;25033:9;25029:17;25022:47;25086:131;25212:4;25086:131;:::i;:::-;25078:139;;24805:419;;;:::o;25230:::-;25396:4;25434:2;25423:9;25419:18;25411:26;;25483:9;25477:4;25473:20;25469:1;25458:9;25454:17;25447:47;25511:131;25637:4;25511:131;:::i;:::-;25503:139;;25230:419;;;:::o;25655:::-;25821:4;25859:2;25848:9;25844:18;25836:26;;25908:9;25902:4;25898:20;25894:1;25883:9;25879:17;25872:47;25936:131;26062:4;25936:131;:::i;:::-;25928:139;;25655:419;;;:::o;26080:::-;26246:4;26284:2;26273:9;26269:18;26261:26;;26333:9;26327:4;26323:20;26319:1;26308:9;26304:17;26297:47;26361:131;26487:4;26361:131;:::i;:::-;26353:139;;26080:419;;;:::o;26505:::-;26671:4;26709:2;26698:9;26694:18;26686:26;;26758:9;26752:4;26748:20;26744:1;26733:9;26729:17;26722:47;26786:131;26912:4;26786:131;:::i;:::-;26778:139;;26505:419;;;:::o;26930:::-;27096:4;27134:2;27123:9;27119:18;27111:26;;27183:9;27177:4;27173:20;27169:1;27158:9;27154:17;27147:47;27211:131;27337:4;27211:131;:::i;:::-;27203:139;;26930:419;;;:::o;27355:::-;27521:4;27559:2;27548:9;27544:18;27536:26;;27608:9;27602:4;27598:20;27594:1;27583:9;27579:17;27572:47;27636:131;27762:4;27636:131;:::i;:::-;27628:139;;27355:419;;;:::o;27780:::-;27946:4;27984:2;27973:9;27969:18;27961:26;;28033:9;28027:4;28023:20;28019:1;28008:9;28004:17;27997:47;28061:131;28187:4;28061:131;:::i;:::-;28053:139;;27780:419;;;:::o;28205:::-;28371:4;28409:2;28398:9;28394:18;28386:26;;28458:9;28452:4;28448:20;28444:1;28433:9;28429:17;28422:47;28486:131;28612:4;28486:131;:::i;:::-;28478:139;;28205:419;;;:::o;28630:::-;28796:4;28834:2;28823:9;28819:18;28811:26;;28883:9;28877:4;28873:20;28869:1;28858:9;28854:17;28847:47;28911:131;29037:4;28911:131;:::i;:::-;28903:139;;28630:419;;;:::o;29055:346::-;29210:4;29248:2;29237:9;29233:18;29225:26;;29261:133;29391:1;29380:9;29376:17;29367:6;29261:133;:::i;:::-;29055:346;;;;:::o;29407:218::-;29498:4;29536:2;29525:9;29521:18;29513:26;;29549:69;29615:1;29604:9;29600:17;29591:6;29549:69;:::i;:::-;29407:218;;;;:::o;29631:222::-;29724:4;29762:2;29751:9;29747:18;29739:26;;29775:71;29843:1;29832:9;29828:17;29819:6;29775:71;:::i;:::-;29631:222;;;;:::o;29859:129::-;29893:6;29920:20;;:::i;:::-;29910:30;;29949:33;29977:4;29969:6;29949:33;:::i;:::-;29859:129;;;:::o;29994:75::-;30027:6;30060:2;30054:9;30044:19;;29994:75;:::o;30075:311::-;30152:4;30242:18;30234:6;30231:30;30228:56;;;30264:18;;:::i;:::-;30228:56;30314:4;30306:6;30302:17;30294:25;;30374:4;30368;30364:15;30356:23;;30075:311;;;:::o;30392:307::-;30453:4;30543:18;30535:6;30532:30;30529:56;;;30565:18;;:::i;:::-;30529:56;30603:29;30625:6;30603:29;:::i;:::-;30595:37;;30687:4;30681;30677:15;30669:23;;30392:307;;;:::o;30705:308::-;30767:4;30857:18;30849:6;30846:30;30843:56;;;30879:18;;:::i;:::-;30843:56;30917:29;30939:6;30917:29;:::i;:::-;30909:37;;31001:4;30995;30991:15;30983:23;;30705:308;;;:::o;31019:141::-;31068:4;31091:3;31083:11;;31114:3;31111:1;31104:14;31148:4;31145:1;31135:18;31127:26;;31019:141;;;:::o;31166:98::-;31217:6;31251:5;31245:12;31235:22;;31166:98;;;:::o;31270:99::-;31322:6;31356:5;31350:12;31340:22;;31270:99;;;:::o;31375:168::-;31458:11;31492:6;31487:3;31480:19;31532:4;31527:3;31523:14;31508:29;;31375:168;;;;:::o;31549:147::-;31650:11;31687:3;31672:18;;31549:147;;;;:::o;31702:169::-;31786:11;31820:6;31815:3;31808:19;31860:4;31855:3;31851:14;31836:29;;31702:169;;;;:::o;31877:148::-;31979:11;32016:3;32001:18;;31877:148;;;;:::o;32031:305::-;32071:3;32090:20;32108:1;32090:20;:::i;:::-;32085:25;;32124:20;32142:1;32124:20;:::i;:::-;32119:25;;32278:1;32210:66;32206:74;32203:1;32200:81;32197:107;;;32284:18;;:::i;:::-;32197:107;32328:1;32325;32321:9;32314:16;;32031:305;;;;:::o;32342:185::-;32382:1;32399:20;32417:1;32399:20;:::i;:::-;32394:25;;32433:20;32451:1;32433:20;:::i;:::-;32428:25;;32472:1;32462:35;;32477:18;;:::i;:::-;32462:35;32519:1;32516;32512:9;32507:14;;32342:185;;;;:::o;32533:348::-;32573:7;32596:20;32614:1;32596:20;:::i;:::-;32591:25;;32630:20;32648:1;32630:20;:::i;:::-;32625:25;;32818:1;32750:66;32746:74;32743:1;32740:81;32735:1;32728:9;32721:17;32717:105;32714:131;;;32825:18;;:::i;:::-;32714:131;32873:1;32870;32866:9;32855:20;;32533:348;;;;:::o;32887:191::-;32927:4;32947:20;32965:1;32947:20;:::i;:::-;32942:25;;32981:20;32999:1;32981:20;:::i;:::-;32976:25;;33020:1;33017;33014:8;33011:34;;;33025:18;;:::i;:::-;33011:34;33070:1;33067;33063:9;33055:17;;32887:191;;;;:::o;33084:96::-;33121:7;33150:24;33168:5;33150:24;:::i;:::-;33139:35;;33084:96;;;:::o;33186:90::-;33220:7;33263:5;33256:13;33249:21;33238:32;;33186:90;;;:::o;33282:77::-;33319:7;33348:5;33337:16;;33282:77;;;:::o;33365:149::-;33401:7;33441:66;33434:5;33430:78;33419:89;;33365:149;;;:::o;33520:89::-;33556:7;33596:6;33589:5;33585:18;33574:29;;33520:89;;;:::o;33615:126::-;33652:7;33692:42;33685:5;33681:54;33670:65;;33615:126;;;:::o;33747:77::-;33784:7;33813:5;33802:16;;33747:77;;;:::o;33830:101::-;33866:7;33906:18;33899:5;33895:30;33884:41;;33830:101;;;:::o;33937:154::-;34021:6;34016:3;34011;33998:30;34083:1;34074:6;34069:3;34065:16;34058:27;33937:154;;;:::o;34097:307::-;34165:1;34175:113;34189:6;34186:1;34183:13;34175:113;;;34274:1;34269:3;34265:11;34259:18;34255:1;34250:3;34246:11;34239:39;34211:2;34208:1;34204:10;34199:15;;34175:113;;;34306:6;34303:1;34300:13;34297:101;;;34386:1;34377:6;34372:3;34368:16;34361:27;34297:101;34146:258;34097:307;;;:::o;34410:320::-;34454:6;34491:1;34485:4;34481:12;34471:22;;34538:1;34532:4;34528:12;34559:18;34549:81;;34615:4;34607:6;34603:17;34593:27;;34549:81;34677:2;34669:6;34666:14;34646:18;34643:38;34640:84;;;34696:18;;:::i;:::-;34640:84;34461:269;34410:320;;;:::o;34736:281::-;34819:27;34841:4;34819:27;:::i;:::-;34811:6;34807:40;34949:6;34937:10;34934:22;34913:18;34901:10;34898:34;34895:62;34892:88;;;34960:18;;:::i;:::-;34892:88;35000:10;34996:2;34989:22;34779:238;34736:281;;:::o;35023:233::-;35062:3;35085:24;35103:5;35085:24;:::i;:::-;35076:33;;35131:66;35124:5;35121:77;35118:103;;;35201:18;;:::i;:::-;35118:103;35248:1;35241:5;35237:13;35230:20;;35023:233;;;:::o;35262:100::-;35301:7;35330:26;35350:5;35330:26;:::i;:::-;35319:37;;35262:100;;;:::o;35368:94::-;35407:7;35436:20;35450:5;35436:20;:::i;:::-;35425:31;;35368:94;;;:::o;35468:176::-;35500:1;35517:20;35535:1;35517:20;:::i;:::-;35512:25;;35551:20;35569:1;35551:20;:::i;:::-;35546:25;;35590:1;35580:35;;35595:18;;:::i;:::-;35580:35;35636:1;35633;35629:9;35624:14;;35468:176;;;;:::o;35650:180::-;35698:77;35695:1;35688:88;35795:4;35792:1;35785:15;35819:4;35816:1;35809:15;35836:180;35884:77;35881:1;35874:88;35981:4;35978:1;35971:15;36005:4;36002:1;35995:15;36022:180;36070:77;36067:1;36060:88;36167:4;36164:1;36157:15;36191:4;36188:1;36181:15;36208:180;36256:77;36253:1;36246:88;36353:4;36350:1;36343:15;36377:4;36374:1;36367:15;36394:180;36442:77;36439:1;36432:88;36539:4;36536:1;36529:15;36563:4;36560:1;36553:15;36580:117;36689:1;36686;36679:12;36703:117;36812:1;36809;36802:12;36826:117;36935:1;36932;36925:12;36949:117;37058:1;37055;37048:12;37072:117;37181:1;37178;37171:12;37195:117;37304:1;37301;37294:12;37318:102;37359:6;37410:2;37406:7;37401:2;37394:5;37390:14;37386:28;37376:38;;37318:102;;;:::o;37426:94::-;37459:8;37507:5;37503:2;37499:14;37478:35;;37426:94;;;:::o;37526:167::-;37666:19;37662:1;37654:6;37650:14;37643:43;37526:167;:::o;37699:225::-;37839:34;37835:1;37827:6;37823:14;37816:58;37908:8;37903:2;37895:6;37891:15;37884:33;37699:225;:::o;37930:164::-;38070:16;38066:1;38058:6;38054:14;38047:40;37930:164;:::o;38100:171::-;38240:23;38236:1;38228:6;38224:14;38217:47;38100:171;:::o;38277:170::-;38417:22;38413:1;38405:6;38401:14;38394:46;38277:170;:::o;38453:222::-;38593:34;38589:1;38581:6;38577:14;38570:58;38662:5;38657:2;38649:6;38645:15;38638:30;38453:222;:::o;38681:182::-;38821:34;38817:1;38809:6;38805:14;38798:58;38681:182;:::o;38869:170::-;39009:22;39005:1;38997:6;38993:14;38986:46;38869:170;:::o;39045:182::-;39185:34;39181:1;39173:6;39169:14;39162:58;39045:182;:::o;39233:234::-;39373:34;39369:1;39361:6;39357:14;39350:58;39442:17;39437:2;39429:6;39425:15;39418:42;39233:234;:::o;39473:114::-;;:::o;39593:164::-;39733:16;39729:1;39721:6;39717:14;39710:40;39593:164;:::o;39763:161::-;39903:13;39899:1;39891:6;39887:14;39880:37;39763:161;:::o;39930:163::-;40070:15;40066:1;40058:6;40054:14;40047:39;39930:163;:::o;40099:178::-;40239:30;40235:1;40227:6;40223:14;40216:54;40099:178;:::o;40283:122::-;40356:24;40374:5;40356:24;:::i;:::-;40349:5;40346:35;40336:63;;40395:1;40392;40385:12;40336:63;40283:122;:::o;40411:116::-;40481:21;40496:5;40481:21;:::i;:::-;40474:5;40471:32;40461:60;;40517:1;40514;40507:12;40461:60;40411:116;:::o;40533:122::-;40606:24;40624:5;40606:24;:::i;:::-;40599:5;40596:35;40586:63;;40645:1;40642;40635:12;40586:63;40533:122;:::o;40661:120::-;40733:23;40750:5;40733:23;:::i;:::-;40726:5;40723:34;40713:62;;40771:1;40768;40761:12;40713:62;40661:120;:::o;40787:::-;40859:23;40876:5;40859:23;:::i;:::-;40852:5;40849:34;40839:62;;40897:1;40894;40887:12;40839:62;40787:120;:::o;40913:122::-;40986:24;41004:5;40986:24;:::i;:::-;40979:5;40976:35;40966:63;;41025:1;41022;41015:12;40966:63;40913:122;:::o

Swarm Source

ipfs://32db17e7054e5df62cd7885214a414abefd054d38018e3f5abbf2754e7f26901
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.