ETH Price: $2,323.03 (+2.21%)

Token

Meta Maniacs (MEMA)
 

Overview

Max Total Supply

704 MEMA

Holders

313

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
3 MEMA
0x7a24ca684ca996ae924b5707eb389c851dc19143
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:
MetaManiacs

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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


// OpenZeppelin Contracts v4.4.1 (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 = keccak256(abi.encodePacked(computedHash, proofElement));
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
            }
        }
        return computedHash;
    }
}

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

// File: @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/Address.sol


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

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

// 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: MetaManiacs.sol

// SPDX-License-Identifier: MIT

// File: contracts/MetaManiacs.sol

pragma solidity >=0.8.4;

/**

    $$\      $$\            $$\                     $$\      $$\                     $$\                               
    $$$\    $$$ |           $$ |                    $$$\    $$$ |                    \__|                              
    $$$$\  $$$$ | $$$$$$\ $$$$$$\    $$$$$$\        $$$$\  $$$$ | $$$$$$\  $$$$$$$\  $$\  $$$$$$\   $$$$$$$\  $$$$$$$\ 
    $$\$$\$$ $$ |$$  __$$\\_$$  _|   \____$$\       $$\$$\$$ $$ | \____$$\ $$  __$$\ $$ | \____$$\ $$  _____|$$  _____|
    $$ \$$$  $$ |$$$$$$$$ | $$ |     $$$$$$$ |      $$ \$$$  $$ | $$$$$$$ |$$ |  $$ |$$ | $$$$$$$ |$$ /      \$$$$$$\  
    $$ |\$  /$$ |$$   ____| $$ |$$\ $$  __$$ |      $$ |\$  /$$ |$$  __$$ |$$ |  $$ |$$ |$$  __$$ |$$ |       \____$$\ 
    $$ | \_/ $$ |\$$$$$$$\  \$$$$  |\$$$$$$$ |      $$ | \_/ $$ |\$$$$$$$ |$$ |  $$ |$$ |\$$$$$$$ |\$$$$$$$\ $$$$$$$  |
    \__|     \__| \_______|  \____/  \_______|      \__|     \__| \_______|\__|  \__|\__| \_______| \_______|\_______/ 
                                                                                                                    
    by HLT                                                                                                    
                                                                                                                   
*/





contract MetaManiacs is ERC721, Ownable {
    using Strings for uint256;
    using Counters for Counters.Counter;

    Counters.Counter private supply;

    bytes32 public merkleRoot;

    address private _proxyRegistryAddress; // For OpenSea WhiteListing
    address public withdrawAddress = 0xa0b3A364084A106b25a8b5132F0c00657F81bc82;

    uint256 public immutable maxSupply = 10000;
    uint256 public cost = 0.16 ether; // 160000000000000000 Wei
    uint256 public preCost = 0.12 ether; // 120000000000000000 Wei
    uint256 public maxMintAmountPerTx = 10;
    uint256 public maxPerPresaleAddress = 3;
    uint256 public reserveCount;
    uint256 public reserveLimit = 100;

    bool public paused;
    bool public revealed;
    bool public presale;

    string private _uriPrefix;
    string public uriSuffix;
    string public uriHidden;

    mapping(address => uint256) private _presaleClaimed;

    constructor(
        bytes32 _merkleRoot,
        address proxyRegistryAddress,
        string memory _uriHidden
    ) ERC721("Meta Maniacs", "MEMA") {
        merkleRoot = _merkleRoot;
        _proxyRegistryAddress = proxyRegistryAddress;
        _uriPrefix = "UNREVEALED";
        uriSuffix = ".json";
        uriHidden = _uriHidden;
        maxMintAmountPerTx = 10;
        reserveCount = 0;
        paused = true;
        revealed = false;
        presale = true;
    }

    /**
     * MINT FUNCTIONS
     */

    // PRESALE
    function mintPresale(
        address account,
        uint256 _mintAmount,
        bytes32[] calldata merkleProof
    ) public payable mintCompliance(_mintAmount) {
        // Verify the merkle proof.
        bytes32 node = keccak256(
            abi.encodePacked(account, maxPerPresaleAddress)
        );
        require(
            MerkleProof.verify(merkleProof, merkleRoot, node),
            "Invalid whitelist proof."
        );
        require(presale, "No presale minting currently.");
        require(msg.value >= preCost * _mintAmount, "Insufficient funds.");
        require(
            _presaleClaimed[account] + _mintAmount <= maxPerPresaleAddress,
            "Exceeds max mints for presale."
        );

        _mintLoop(account, _mintAmount);

        _presaleClaimed[account] += _mintAmount;
    }

    // PUBLIC SALE
    function mint(uint256 _mintAmount)
        public
        payable
        mintCompliance(_mintAmount)
    {
        require(!presale, "Only presale minting currently.");
        require(msg.value >= cost * _mintAmount, "Insufficient funds.");

        _mintLoop(msg.sender, _mintAmount);
    }

    // MINT COMPLIANCE
    modifier mintCompliance(uint256 _mintAmount) {
        require(!paused, "The sale is paused.");
        require(_mintAmount > 0, "Must be greater than 0.");
        // require(_mintAmount < 11, "Invalid mint amount.");
        require(_mintAmount <= maxMintAmountPerTx, "Invalid mint amount.");
        require(
            supply.current() + _mintAmount <= maxSupply,
            "Max supply exceeded."
        );
        _;
    }

    // MINT LOOP
    function _mintLoop(address _receiver, uint256 _mintAmount) internal {
        for (uint256 i = 0; i < _mintAmount; i++) {
            supply.increment();
            _safeMint(_receiver, supply.current());
        }
    }

    // OWNER MINT
    function mintForAddress(uint256 _mintAmount, address _receiver)
        public
        mintCompliance(_mintAmount)
        onlyOwner
    {
        // Reserve limited implemented here. Set @ 50.
        require(
            reserveCount + _mintAmount <= reserveLimit,
            "Exceeds max of 50 reserved."
        );
        _mintLoop(_receiver, _mintAmount);
        reserveCount += _mintAmount;
    }

    /**
     * GETTERS
     */

    // GET TOKEN URI
    function tokenURI(uint256 _tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(
            _exists(_tokenId),
            "ERC721Metadata: URI query for nonexistent token."
        );
        if (revealed == false) {
            return uriHidden;
        }
        string memory currentBaseURI = _baseURI();
        return
            bytes(currentBaseURI).length > 0
                ? string(
                    abi.encodePacked(
                        currentBaseURI,
                        _tokenId.toString(),
                        uriSuffix
                    )
                )
                : "";
    }

    // GET BASE URI (INTERNAL)
    function _baseURI() internal view virtual override returns (string memory) {
        return _uriPrefix;
    }

    // GET URI PREFIX
    function getUriPrefix() public view onlyOwner returns (string memory) {
        return _uriPrefix;
    }

    // GET OS PROXY ADDY
    function getProxyRegistryAddress() public view onlyOwner returns (address) {
        return _proxyRegistryAddress;
    }

    // GET SUPPLY
    function totalSupply() public view returns (uint256) {
        return supply.current();
    }

    // RETURNS TOKEN IDS OF A WALLET ADDRESS
    function walletOfOwner(address _owner)
        public
        view
        returns (uint256[] memory)
    {
        uint256 ownerTokenCount = balanceOf(_owner);
        uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
        uint256 currentTokenId = 1;
        uint256 ownedTokenIndex = 0;

        while (
            ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply
        ) {
            address currentTokenOwner = ownerOf(currentTokenId);

            if (currentTokenOwner == _owner) {
                ownedTokenIds[ownedTokenIndex] = currentTokenId;

                ownedTokenIndex++;
            }

            currentTokenId++;
        }

        return ownedTokenIds;
    }

    /**
     * SETTERS
     */

    // WL
    // SET WL ROOT
    function setMerkleRoot(bytes32 newRoot) public onlyOwner {
        merkleRoot = newRoot;
    }

    // URIs
    // SET UNREVEALED URI
    function setUriHidden(string memory _uriHidden) public onlyOwner {
        uriHidden = _uriHidden;
    }

    // SET URI PREFIX
    function setUriPrefix(string memory uriPrefixNew) public onlyOwner {
        _uriPrefix = uriPrefixNew;
    }

    // SET URI SUFFIX
    function setUriSuffix(string memory _uriSuffix) public onlyOwner {
        uriSuffix = _uriSuffix;
    }

    // SET COST
    function setCost(uint256 _cost) public onlyOwner {
        cost = _cost;
    }

    // SET PRESALE COST
    function setPreCost(uint256 _cost) public onlyOwner {
        preCost = _cost;
    }

    // SET RESERVE LIMIT
    function setReserveLimit(uint256 _newLimit) public onlyOwner {
        reserveLimit = _newLimit;
    }

    // SET MAX TOKENS PER ADDRESS FOR PRESALE
    function setMaxPerPresaleAddress(uint256 _maxPerPresaleAddress)
        public
        onlyOwner
    {
        maxPerPresaleAddress = _maxPerPresaleAddress;
    }

    // SET TOKENS PER MINT TX
    function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx)
        public
        onlyOwner
    {
        maxMintAmountPerTx = _maxMintAmountPerTx;
    }

    // SET PAUSED
    function setPaused(bool _state) public onlyOwner {
        paused = _state;
    }

    // SET PRESALE
    function setPresale(bool _state) public onlyOwner {
        presale = _state;
    }

    // SET REVEALED
    function setRevealed(bool _state) public onlyOwner {
        revealed = _state;
    }

    // SET WITHDRAW ADDRESS
    function setWithdrawAddress(address _withdrawAddress) public onlyOwner {
        withdrawAddress = _withdrawAddress;
    }

    /**
     * OPENSEA TRADING WHITELISTING
     * Override isApprovedForAll to whitelist user's OpenSea proxy accounts to enable gas-less listings.
     */

    // SET OS WL ADDY
    function setProxyRegistryAddress(address proxyRegistryAddress)
        external
        onlyOwner
    {
        _proxyRegistryAddress = proxyRegistryAddress;
    }

    // OVERRIDE
    function isApprovedForAll(address owner, address operator)
        public
        view
        override
        returns (bool)
    {
        // Whitelist OpenSea proxy contract for easy trading.
        ProxyRegistry proxyRegistry = ProxyRegistry(_proxyRegistryAddress);
        if (address(proxyRegistry.proxies(owner)) == operator) {
            return true;
        }

        return super.isApprovedForAll(owner, operator);
    }

    // WITHDRAW
    function withdraw() public onlyOwner {
        (bool os, ) = payable(withdrawAddress).call{
            value: address(this).balance
        }("");
        require(os);
    }
}

// For OpenSea WhiteListing
contract OwnableDelegateProxy {

}

contract ProxyRegistry {
    mapping(address => OwnableDelegateProxy) public proxies;
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"},{"internalType":"address","name":"proxyRegistryAddress","type":"address"},{"internalType":"string","name":"_uriHidden","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"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":"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":[],"name":"getProxyRegistryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerPresaleAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"mintPresale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserveCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reserveLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPerPresaleAddress","type":"uint256"}],"name":"setMaxPerPresaleAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"newRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setPreCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"proxyRegistryAddress","type":"address"}],"name":"setProxyRegistryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLimit","type":"uint256"}],"name":"setReserveLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriHidden","type":"string"}],"name":"setUriHidden","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uriPrefixNew","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_withdrawAddress","type":"address"}],"name":"setWithdrawAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"uriHidden","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60a060405273a0b3a364084a106b25a8b5132f0c00657f81bc82600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506127106080908152506702386f26fc100000600b556701aa535d3d0c0000600c55600a600d556003600e5560646010553480156200009657600080fd5b5060405162005f6638038062005f668339818101604052810190620000bc91906200050d565b6040518060400160405280600c81526020017f4d657461204d616e6961637300000000000000000000000000000000000000008152506040518060400160405280600481526020017f4d454d4100000000000000000000000000000000000000000000000000000000815250816000908051906020019062000140929190620003b1565b50806001908051906020019062000159929190620003b1565b5050506200017c62000170620002e360201b60201c565b620002eb60201b60201c565b8260088190555081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600a81526020017f554e52455645414c4544000000000000000000000000000000000000000000008152506012908051906020019062000211929190620003b1565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250601390805190602001906200025f929190620003b1565b50806014908051906020019062000278929190620003b1565b50600a600d819055506000600f819055506001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff0219169083151502179055505050506200077e565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620003bf906200065b565b90600052602060002090601f016020900481019282620003e357600085556200042f565b82601f10620003fe57805160ff19168380011785556200042f565b828001600101855582156200042f579182015b828111156200042e57825182559160200191906001019062000411565b5b5090506200043e919062000442565b5090565b5b808211156200045d57600081600090555060010162000443565b5090565b6000620004786200047284620005b1565b62000588565b9050828152602081018484840111156200049757620004966200072a565b5b620004a484828562000625565b509392505050565b600081519050620004bd816200074a565b92915050565b600081519050620004d48162000764565b92915050565b600082601f830112620004f257620004f162000725565b5b81516200050484826020860162000461565b91505092915050565b60008060006060848603121562000529576200052862000734565b5b60006200053986828701620004c3565b93505060206200054c86828701620004ac565b925050604084015167ffffffffffffffff81111562000570576200056f6200072f565b5b6200057e86828701620004da565b9150509250925092565b600062000594620005a7565b9050620005a2828262000691565b919050565b6000604051905090565b600067ffffffffffffffff821115620005cf57620005ce620006f6565b5b620005da8262000739565b9050602081019050919050565b6000620005f48262000605565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b838110156200064557808201518184015260208101905062000628565b8381111562000655576000848401525b50505050565b600060028204905060018216806200067457607f821691505b602082108114156200068b576200068a620006c7565b5b50919050565b6200069c8262000739565b810181811067ffffffffffffffff82111715620006be57620006bd620006f6565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6200075581620005e7565b81146200076157600080fd5b50565b6200076f81620005fb565b81146200077b57600080fd5b50565b6080516157b0620007b660003960008181611451015281816117d00152818161203a0152818161262301526128c101526157b06000f3fe6080604052600436106102ff5760003560e01c80637032d87d11610190578063b6374e35116100dc578063d79fa1d311610095578063efbd73f41161006f578063efbd73f414610b28578063f2fde38b14610b51578063fd2e908d14610b7a578063fdea8e0b14610ba3576102ff565b8063d79fa1d314610a97578063e0a8085314610ac2578063e985e9c514610aeb576102ff565b8063b6374e3514610989578063b88d4fde146109b4578063c54e73e3146109dd578063c87b56dd14610a06578063d26ea6c014610a43578063d5abeb0114610a6c576102ff565b80638da5cb5b11610149578063a0712d6811610123578063a0712d68146108f0578063a22cb4651461090c578063ae7c5f7614610935578063b071401b14610960576102ff565b80638da5cb5b1461086f57806394354fd01461089a57806395d89b41146108c5576102ff565b80637032d87d1461077557806370a082311461079e578063715018a6146107db5780637cb64759146107f25780637ec4a6591461081b57806382a55e1014610844576102ff565b80632eb4a7ab1161024f57806344a0d68a116102085780635c975abb116101e25780635c975abb146106c85780636352211e146106f3578063688279891461073057806368e00d771461074c576102ff565b806344a0d68a1461064957806351830227146106725780635503a0e81461069d576102ff565b80632eb4a7ab1461054f5780633018f54f1461057a5780633ab1a494146105a35780633ccfd60b146105cc57806342842e0e146105e3578063438b63001461060c576102ff565b806316317c21116102bc57806318160ddd1161029657806318160ddd146104a55780631fe5b457146104d057806321e7345e146104fb57806323b872dd14610526576102ff565b806316317c211461042857806316ba10e01461045357806316c38b3c1461047c576102ff565b806301ffc9a71461030457806306fdde0314610341578063081812fc1461036c578063095ea7b3146103a957806313faede6146103d25780631581b600146103fd575b600080fd5b34801561031057600080fd5b5061032b60048036038101906103269190613fc5565b610bce565b6040516103389190614802565b60405180910390f35b34801561034d57600080fd5b50610356610cb0565b6040516103639190614838565b60405180910390f35b34801561037857600080fd5b50610393600480360381019061038e9190614095565b610d42565b6040516103a09190614779565b60405180910390f35b3480156103b557600080fd5b506103d060048036038101906103cb9190613eb7565b610dc7565b005b3480156103de57600080fd5b506103e7610edf565b6040516103f49190614b9a565b60405180910390f35b34801561040957600080fd5b50610412610ee5565b60405161041f9190614779565b60405180910390f35b34801561043457600080fd5b5061043d610f0b565b60405161044a9190614b9a565b60405180910390f35b34801561045f57600080fd5b5061047a6004803603810190610475919061404c565b610f11565b005b34801561048857600080fd5b506104a3600480360381019061049e9190613f6b565b610fa7565b005b3480156104b157600080fd5b506104ba611040565b6040516104c79190614b9a565b60405180910390f35b3480156104dc57600080fd5b506104e5611051565b6040516104f29190614779565b60405180910390f35b34801561050757600080fd5b506105106110f7565b60405161051d9190614b9a565b60405180910390f35b34801561053257600080fd5b5061054d60048036038101906105489190613da1565b6110fd565b005b34801561055b57600080fd5b5061056461115d565b604051610571919061481d565b60405180910390f35b34801561058657600080fd5b506105a1600480360381019061059c9190614095565b611163565b005b3480156105af57600080fd5b506105ca60048036038101906105c59190613d34565b6111e9565b005b3480156105d857600080fd5b506105e16112a9565b005b3480156105ef57600080fd5b5061060a60048036038101906106059190613da1565b6113c0565b005b34801561061857600080fd5b50610633600480360381019061062e9190613d34565b6113e0565b60405161064091906147e0565b60405180910390f35b34801561065557600080fd5b50610670600480360381019061066b9190614095565b611509565b005b34801561067e57600080fd5b5061068761158f565b6040516106949190614802565b60405180910390f35b3480156106a957600080fd5b506106b26115a2565b6040516106bf9190614838565b60405180910390f35b3480156106d457600080fd5b506106dd611630565b6040516106ea9190614802565b60405180910390f35b3480156106ff57600080fd5b5061071a60048036038101906107159190614095565b611643565b6040516107279190614779565b60405180910390f35b61074a60048036038101906107459190613ef7565b6116f5565b005b34801561075857600080fd5b50610773600480360381019061076e919061404c565b611a97565b005b34801561078157600080fd5b5061079c60048036038101906107979190614095565b611b2d565b005b3480156107aa57600080fd5b506107c560048036038101906107c09190613d34565b611bb3565b6040516107d29190614b9a565b60405180910390f35b3480156107e757600080fd5b506107f0611c6b565b005b3480156107fe57600080fd5b5061081960048036038101906108149190613f98565b611cf3565b005b34801561082757600080fd5b50610842600480360381019061083d919061404c565b611d79565b005b34801561085057600080fd5b50610859611e0f565b6040516108669190614838565b60405180910390f35b34801561087b57600080fd5b50610884611e9d565b6040516108919190614779565b60405180910390f35b3480156108a657600080fd5b506108af611ec7565b6040516108bc9190614b9a565b60405180910390f35b3480156108d157600080fd5b506108da611ecd565b6040516108e79190614838565b60405180910390f35b61090a60048036038101906109059190614095565b611f5f565b005b34801561091857600080fd5b50610933600480360381019061092e9190613e77565b61215d565b005b34801561094157600080fd5b5061094a612173565b6040516109579190614838565b60405180910390f35b34801561096c57600080fd5b5061098760048036038101906109829190614095565b612281565b005b34801561099557600080fd5b5061099e612307565b6040516109ab9190614b9a565b60405180910390f35b3480156109c057600080fd5b506109db60048036038101906109d69190613df4565b61230d565b005b3480156109e957600080fd5b50610a0460048036038101906109ff9190613f6b565b61236f565b005b348015610a1257600080fd5b50610a2d6004803603810190610a289190614095565b612408565b604051610a3a9190614838565b60405180910390f35b348015610a4f57600080fd5b50610a6a6004803603810190610a659190613d34565b612561565b005b348015610a7857600080fd5b50610a81612621565b604051610a8e9190614b9a565b60405180910390f35b348015610aa357600080fd5b50610aac612645565b604051610ab99190614b9a565b60405180910390f35b348015610ace57600080fd5b50610ae96004803603810190610ae49190613f6b565b61264b565b005b348015610af757600080fd5b50610b126004803603810190610b0d9190613d61565b6126e4565b604051610b1f9190614802565b60405180910390f35b348015610b3457600080fd5b50610b4f6004803603810190610b4a91906140c2565b6127e6565b005b348015610b5d57600080fd5b50610b786004803603810190610b739190613d34565b612a2c565b005b348015610b8657600080fd5b50610ba16004803603810190610b9c9190614095565b612b24565b005b348015610baf57600080fd5b50610bb8612baa565b604051610bc59190614802565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c9957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ca95750610ca882612bbd565b5b9050919050565b606060008054610cbf90614ebf565b80601f0160208091040260200160405190810160405280929190818152602001828054610ceb90614ebf565b8015610d385780601f10610d0d57610100808354040283529160200191610d38565b820191906000526020600020905b815481529060010190602001808311610d1b57829003601f168201915b5050505050905090565b6000610d4d82612c27565b610d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d83906149fa565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610dd282611643565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3a90614a9a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e62612c93565b73ffffffffffffffffffffffffffffffffffffffff161480610e915750610e9081610e8b612c93565b6126e4565b5b610ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec79061495a565b60405180910390fd5b610eda8383612c9b565b505050565b600b5481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b610f19612c93565b73ffffffffffffffffffffffffffffffffffffffff16610f37611e9d565b73ffffffffffffffffffffffffffffffffffffffff1614610f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8490614a5a565b60405180910390fd5b8060139080519060200190610fa3929190613ac8565b5050565b610faf612c93565b73ffffffffffffffffffffffffffffffffffffffff16610fcd611e9d565b73ffffffffffffffffffffffffffffffffffffffff1614611023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101a90614a5a565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b600061104c6007612d54565b905090565b600061105b612c93565b73ffffffffffffffffffffffffffffffffffffffff16611079611e9d565b73ffffffffffffffffffffffffffffffffffffffff16146110cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c690614a5a565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b61110e611108612c93565b82612d62565b61114d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114490614b1a565b60405180910390fd5b611158838383612e40565b505050565b60085481565b61116b612c93565b73ffffffffffffffffffffffffffffffffffffffff16611189611e9d565b73ffffffffffffffffffffffffffffffffffffffff16146111df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d690614a5a565b60405180910390fd5b80600c8190555050565b6111f1612c93565b73ffffffffffffffffffffffffffffffffffffffff1661120f611e9d565b73ffffffffffffffffffffffffffffffffffffffff1614611265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125c90614a5a565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6112b1612c93565b73ffffffffffffffffffffffffffffffffffffffff166112cf611e9d565b73ffffffffffffffffffffffffffffffffffffffff1614611325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131c90614a5a565b60405180910390fd5b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161136d90614764565b60006040518083038185875af1925050503d80600081146113aa576040519150601f19603f3d011682016040523d82523d6000602084013e6113af565b606091505b50509050806113bd57600080fd5b50565b6113db8383836040518060200160405280600081525061230d565b505050565b606060006113ed83611bb3565b905060008167ffffffffffffffff81111561140b5761140a615090565b5b6040519080825280602002602001820160405280156114395781602001602082028036833780820191505090505b50905060006001905060005b838110801561147457507f00000000000000000000000000000000000000000000000000000000000000008211155b156114fd57600061148483611643565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114e957828483815181106114ce576114cd615061565b5b60200260200101818152505081806114e590614f22565b9250505b82806114f490614f22565b93505050611445565b82945050505050919050565b611511612c93565b73ffffffffffffffffffffffffffffffffffffffff1661152f611e9d565b73ffffffffffffffffffffffffffffffffffffffff1614611585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157c90614a5a565b60405180910390fd5b80600b8190555050565b601160019054906101000a900460ff1681565b601380546115af90614ebf565b80601f01602080910402602001604051908101604052809291908181526020018280546115db90614ebf565b80156116285780601f106115fd57610100808354040283529160200191611628565b820191906000526020600020905b81548152906001019060200180831161160b57829003601f168201915b505050505081565b601160009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e39061499a565b60405180910390fd5b80915050919050565b82601160009054906101000a900460ff1615611746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173d90614aba565b60405180910390fd5b60008111611789576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178090614afa565b60405180910390fd5b600d548111156117ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c590614a3a565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000816117fa6007612d54565b6118049190614cd8565b1115611845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183c90614b5a565b60405180910390fd5b600085600e5460405160200161185c9291906146db565b6040516020818303038152906040528051906020012090506118c2848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506008548361309c565b611901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f890614ada565b60405180910390fd5b601160029054906101000a900460ff16611950576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194790614a1a565b60405180910390fd5b84600c5461195e9190614d5f565b3410156119a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199790614b7a565b60405180910390fd5b600e5485601560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119ee9190614cd8565b1115611a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a26906148da565b60405180910390fd5b611a3986866130b3565b84601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a889190614cd8565b92505081905550505050505050565b611a9f612c93565b73ffffffffffffffffffffffffffffffffffffffff16611abd611e9d565b73ffffffffffffffffffffffffffffffffffffffff1614611b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0a90614a5a565b60405180910390fd5b8060149080519060200190611b29929190613ac8565b5050565b611b35612c93565b73ffffffffffffffffffffffffffffffffffffffff16611b53611e9d565b73ffffffffffffffffffffffffffffffffffffffff1614611ba9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba090614a5a565b60405180910390fd5b8060108190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1b9061497a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611c73612c93565b73ffffffffffffffffffffffffffffffffffffffff16611c91611e9d565b73ffffffffffffffffffffffffffffffffffffffff1614611ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cde90614a5a565b60405180910390fd5b611cf160006130f3565b565b611cfb612c93565b73ffffffffffffffffffffffffffffffffffffffff16611d19611e9d565b73ffffffffffffffffffffffffffffffffffffffff1614611d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6690614a5a565b60405180910390fd5b8060088190555050565b611d81612c93565b73ffffffffffffffffffffffffffffffffffffffff16611d9f611e9d565b73ffffffffffffffffffffffffffffffffffffffff1614611df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dec90614a5a565b60405180910390fd5b8060129080519060200190611e0b929190613ac8565b5050565b60148054611e1c90614ebf565b80601f0160208091040260200160405190810160405280929190818152602001828054611e4890614ebf565b8015611e955780601f10611e6a57610100808354040283529160200191611e95565b820191906000526020600020905b815481529060010190602001808311611e7857829003601f168201915b505050505081565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d5481565b606060018054611edc90614ebf565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0890614ebf565b8015611f555780601f10611f2a57610100808354040283529160200191611f55565b820191906000526020600020905b815481529060010190602001808311611f3857829003601f168201915b5050505050905090565b80601160009054906101000a900460ff1615611fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa790614aba565b60405180910390fd5b60008111611ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fea90614afa565b60405180910390fd5b600d54811115612038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202f90614a3a565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000816120646007612d54565b61206e9190614cd8565b11156120af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a690614b5a565b60405180910390fd5b601160029054906101000a900460ff16156120ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f69061489a565b60405180910390fd5b81600b5461210d9190614d5f565b34101561214f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214690614b7a565b60405180910390fd5b61215933836130b3565b5050565b61216f612168612c93565b83836131b9565b5050565b606061217d612c93565b73ffffffffffffffffffffffffffffffffffffffff1661219b611e9d565b73ffffffffffffffffffffffffffffffffffffffff16146121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e890614a5a565b60405180910390fd5b601280546121fe90614ebf565b80601f016020809104026020016040519081016040528092919081815260200182805461222a90614ebf565b80156122775780601f1061224c57610100808354040283529160200191612277565b820191906000526020600020905b81548152906001019060200180831161225a57829003601f168201915b5050505050905090565b612289612c93565b73ffffffffffffffffffffffffffffffffffffffff166122a7611e9d565b73ffffffffffffffffffffffffffffffffffffffff16146122fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f490614a5a565b60405180910390fd5b80600d8190555050565b600c5481565b61231e612318612c93565b83612d62565b61235d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235490614b1a565b60405180910390fd5b61236984848484613326565b50505050565b612377612c93565b73ffffffffffffffffffffffffffffffffffffffff16612395611e9d565b73ffffffffffffffffffffffffffffffffffffffff16146123eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e290614a5a565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606061241382612c27565b612452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244990614b3a565b60405180910390fd5b60001515601160019054906101000a900460ff1615151415612500576014805461247b90614ebf565b80601f01602080910402602001604051908101604052809291908181526020018280546124a790614ebf565b80156124f45780601f106124c9576101008083540402835291602001916124f4565b820191906000526020600020905b8154815290600101906020018083116124d757829003601f168201915b5050505050905061255c565b600061250a613382565b9050600081511161252a5760405180602001604052806000815250612558565b8061253484613414565b601360405160200161254893929190614733565b6040516020818303038152906040525b9150505b919050565b612569612c93565b73ffffffffffffffffffffffffffffffffffffffff16612587611e9d565b73ffffffffffffffffffffffffffffffffffffffff16146125dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d490614a5a565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600e5481565b612653612c93565b73ffffffffffffffffffffffffffffffffffffffff16612671611e9d565b73ffffffffffffffffffffffffffffffffffffffff16146126c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126be90614a5a565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b815260040161275c9190614779565b60206040518083038186803b15801561277457600080fd5b505afa158015612788573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127ac919061401f565b73ffffffffffffffffffffffffffffffffffffffff1614156127d25760019150506127e0565b6127dc8484613575565b9150505b92915050565b81601160009054906101000a900460ff1615612837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282e90614aba565b60405180910390fd5b6000811161287a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287190614afa565b60405180910390fd5b600d548111156128bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b690614a3a565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000816128eb6007612d54565b6128f59190614cd8565b1115612936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292d90614b5a565b60405180910390fd5b61293e612c93565b73ffffffffffffffffffffffffffffffffffffffff1661295c611e9d565b73ffffffffffffffffffffffffffffffffffffffff16146129b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a990614a5a565b60405180910390fd5b60105483600f546129c39190614cd8565b1115612a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fb906149ba565b60405180910390fd5b612a0e82846130b3565b82600f6000828254612a209190614cd8565b92505081905550505050565b612a34612c93565b73ffffffffffffffffffffffffffffffffffffffff16612a52611e9d565b73ffffffffffffffffffffffffffffffffffffffff1614612aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9f90614a5a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0f9061487a565b60405180910390fd5b612b21816130f3565b50565b612b2c612c93565b73ffffffffffffffffffffffffffffffffffffffff16612b4a611e9d565b73ffffffffffffffffffffffffffffffffffffffff1614612ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9790614a5a565b60405180910390fd5b80600e8190555050565b601160029054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612d0e83611643565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000612d6d82612c27565b612dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da39061493a565b60405180910390fd5b6000612db783611643565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612e2657508373ffffffffffffffffffffffffffffffffffffffff16612e0e84610d42565b73ffffffffffffffffffffffffffffffffffffffff16145b80612e375750612e3681856126e4565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612e6082611643565b73ffffffffffffffffffffffffffffffffffffffff1614612eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ead90614a7a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1d906148fa565b60405180910390fd5b612f31838383613609565b612f3c600082612c9b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f8c9190614db9565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fe39190614cd8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000826130a9858461360e565b1490509392505050565b60005b818110156130ee576130c860076136c1565b6130db836130d66007612d54565b6136d7565b80806130e690614f22565b9150506130b6565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161321f9061491a565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516133199190614802565b60405180910390a3505050565b613331848484612e40565b61333d848484846136f5565b61337c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133739061485a565b60405180910390fd5b50505050565b60606012805461339190614ebf565b80601f01602080910402602001604051908101604052809291908181526020018280546133bd90614ebf565b801561340a5780601f106133df5761010080835404028352916020019161340a565b820191906000526020600020905b8154815290600101906020018083116133ed57829003601f168201915b5050505050905090565b6060600082141561345c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613570565b600082905060005b6000821461348e57808061347790614f22565b915050600a826134879190614d2e565b9150613464565b60008167ffffffffffffffff8111156134aa576134a9615090565b5b6040519080825280601f01601f1916602001820160405280156134dc5781602001600182028036833780820191505090505b5090505b60008514613569576001826134f59190614db9565b9150600a856135049190614fa3565b60306135109190614cd8565b60f81b81838151811061352657613525615061565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856135629190614d2e565b94506134e0565b8093505050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b505050565b60008082905060005b84518110156136b657600085828151811061363557613634615061565b5b60200260200101519050808311613676578281604051602001613659929190614707565b6040516020818303038152906040528051906020012092506136a2565b8083604051602001613689929190614707565b6040516020818303038152906040528051906020012092505b5080806136ae90614f22565b915050613617565b508091505092915050565b6001816000016000828254019250508190555050565b6136f182826040518060200160405280600081525061388c565b5050565b60006137168473ffffffffffffffffffffffffffffffffffffffff166138e7565b1561387f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261373f612c93565b8786866040518563ffffffff1660e01b81526004016137619493929190614794565b602060405180830381600087803b15801561377b57600080fd5b505af19250505080156137ac57506040513d601f19601f820116820180604052508101906137a99190613ff2565b60015b61382f573d80600081146137dc576040519150601f19603f3d011682016040523d82523d6000602084013e6137e1565b606091505b50600081511415613827576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161381e9061485a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613884565b600190505b949350505050565b61389683836138fa565b6138a360008484846136f5565b6138e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138d99061485a565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561396a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613961906149da565b60405180910390fd5b61397381612c27565b156139b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139aa906148ba565b60405180910390fd5b6139bf60008383613609565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a0f9190614cd8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613ad490614ebf565b90600052602060002090601f016020900481019282613af65760008555613b3d565b82601f10613b0f57805160ff1916838001178555613b3d565b82800160010185558215613b3d579182015b82811115613b3c578251825591602001919060010190613b21565b5b509050613b4a9190613b4e565b5090565b5b80821115613b67576000816000905550600101613b4f565b5090565b6000613b7e613b7984614bda565b614bb5565b905082815260208101848484011115613b9a57613b996150ce565b5b613ba5848285614e7d565b509392505050565b6000613bc0613bbb84614c0b565b614bb5565b905082815260208101848484011115613bdc57613bdb6150ce565b5b613be7848285614e7d565b509392505050565b600081359050613bfe816156f0565b92915050565b60008083601f840112613c1a57613c196150c4565b5b8235905067ffffffffffffffff811115613c3757613c366150bf565b5b602083019150836020820283011115613c5357613c526150c9565b5b9250929050565b600081359050613c6981615707565b92915050565b600081359050613c7e8161571e565b92915050565b600081359050613c9381615735565b92915050565b600081519050613ca881615735565b92915050565b600082601f830112613cc357613cc26150c4565b5b8135613cd3848260208601613b6b565b91505092915050565b600081519050613ceb8161574c565b92915050565b600082601f830112613d0657613d056150c4565b5b8135613d16848260208601613bad565b91505092915050565b600081359050613d2e81615763565b92915050565b600060208284031215613d4a57613d496150d8565b5b6000613d5884828501613bef565b91505092915050565b60008060408385031215613d7857613d776150d8565b5b6000613d8685828601613bef565b9250506020613d9785828601613bef565b9150509250929050565b600080600060608486031215613dba57613db96150d8565b5b6000613dc886828701613bef565b9350506020613dd986828701613bef565b9250506040613dea86828701613d1f565b9150509250925092565b60008060008060808587031215613e0e57613e0d6150d8565b5b6000613e1c87828801613bef565b9450506020613e2d87828801613bef565b9350506040613e3e87828801613d1f565b925050606085013567ffffffffffffffff811115613e5f57613e5e6150d3565b5b613e6b87828801613cae565b91505092959194509250565b60008060408385031215613e8e57613e8d6150d8565b5b6000613e9c85828601613bef565b9250506020613ead85828601613c5a565b9150509250929050565b60008060408385031215613ece57613ecd6150d8565b5b6000613edc85828601613bef565b9250506020613eed85828601613d1f565b9150509250929050565b60008060008060608587031215613f1157613f106150d8565b5b6000613f1f87828801613bef565b9450506020613f3087828801613d1f565b935050604085013567ffffffffffffffff811115613f5157613f506150d3565b5b613f5d87828801613c04565b925092505092959194509250565b600060208284031215613f8157613f806150d8565b5b6000613f8f84828501613c5a565b91505092915050565b600060208284031215613fae57613fad6150d8565b5b6000613fbc84828501613c6f565b91505092915050565b600060208284031215613fdb57613fda6150d8565b5b6000613fe984828501613c84565b91505092915050565b600060208284031215614008576140076150d8565b5b600061401684828501613c99565b91505092915050565b600060208284031215614035576140346150d8565b5b600061404384828501613cdc565b91505092915050565b600060208284031215614062576140616150d8565b5b600082013567ffffffffffffffff8111156140805761407f6150d3565b5b61408c84828501613cf1565b91505092915050565b6000602082840312156140ab576140aa6150d8565b5b60006140b984828501613d1f565b91505092915050565b600080604083850312156140d9576140d86150d8565b5b60006140e785828601613d1f565b92505060206140f885828601613bef565b9150509250929050565b600061410e83836146a6565b60208301905092915050565b61412381614ded565b82525050565b61413a61413582614ded565b614f6b565b82525050565b600061414b82614c61565b6141558185614c8f565b935061416083614c3c565b8060005b838110156141915781516141788882614102565b975061418383614c82565b925050600181019050614164565b5085935050505092915050565b6141a781614dff565b82525050565b6141b681614e0b565b82525050565b6141cd6141c882614e0b565b614f7d565b82525050565b60006141de82614c6c565b6141e88185614ca0565b93506141f8818560208601614e8c565b614201816150dd565b840191505092915050565b600061421782614c77565b6142218185614cbc565b9350614231818560208601614e8c565b61423a816150dd565b840191505092915050565b600061425082614c77565b61425a8185614ccd565b935061426a818560208601614e8c565b80840191505092915050565b6000815461428381614ebf565b61428d8186614ccd565b945060018216600081146142a857600181146142b9576142ec565b60ff198316865281860193506142ec565b6142c285614c4c565b60005b838110156142e4578154818901526001820191506020810190506142c5565b838801955050505b50505092915050565b6000614302603283614cbc565b915061430d826150fb565b604082019050919050565b6000614325602683614cbc565b91506143308261514a565b604082019050919050565b6000614348601f83614cbc565b915061435382615199565b602082019050919050565b600061436b601c83614cbc565b9150614376826151c2565b602082019050919050565b600061438e601e83614cbc565b9150614399826151eb565b602082019050919050565b60006143b1602483614cbc565b91506143bc82615214565b604082019050919050565b60006143d4601983614cbc565b91506143df82615263565b602082019050919050565b60006143f7602c83614cbc565b91506144028261528c565b604082019050919050565b600061441a603883614cbc565b9150614425826152db565b604082019050919050565b600061443d602a83614cbc565b91506144488261532a565b604082019050919050565b6000614460602983614cbc565b915061446b82615379565b604082019050919050565b6000614483601b83614cbc565b915061448e826153c8565b602082019050919050565b60006144a6602083614cbc565b91506144b1826153f1565b602082019050919050565b60006144c9602c83614cbc565b91506144d48261541a565b604082019050919050565b60006144ec601d83614cbc565b91506144f782615469565b602082019050919050565b600061450f601483614cbc565b915061451a82615492565b602082019050919050565b6000614532602083614cbc565b915061453d826154bb565b602082019050919050565b6000614555602983614cbc565b9150614560826154e4565b604082019050919050565b6000614578602183614cbc565b915061458382615533565b604082019050919050565b600061459b601383614cbc565b91506145a682615582565b602082019050919050565b60006145be601883614cbc565b91506145c9826155ab565b602082019050919050565b60006145e1600083614cb1565b91506145ec826155d4565b600082019050919050565b6000614604601783614cbc565b915061460f826155d7565b602082019050919050565b6000614627603183614cbc565b915061463282615600565b604082019050919050565b600061464a603083614cbc565b91506146558261564f565b604082019050919050565b600061466d601483614cbc565b91506146788261569e565b602082019050919050565b6000614690601383614cbc565b915061469b826156c7565b602082019050919050565b6146af81614e73565b82525050565b6146be81614e73565b82525050565b6146d56146d082614e73565b614f99565b82525050565b60006146e78285614129565b6014820191506146f782846146c4565b6020820191508190509392505050565b600061471382856141bc565b60208201915061472382846141bc565b6020820191508190509392505050565b600061473f8286614245565b915061474b8285614245565b91506147578284614276565b9150819050949350505050565b600061476f826145d4565b9150819050919050565b600060208201905061478e600083018461411a565b92915050565b60006080820190506147a9600083018761411a565b6147b6602083018661411a565b6147c360408301856146b5565b81810360608301526147d581846141d3565b905095945050505050565b600060208201905081810360008301526147fa8184614140565b905092915050565b6000602082019050614817600083018461419e565b92915050565b600060208201905061483260008301846141ad565b92915050565b60006020820190508181036000830152614852818461420c565b905092915050565b60006020820190508181036000830152614873816142f5565b9050919050565b6000602082019050818103600083015261489381614318565b9050919050565b600060208201905081810360008301526148b38161433b565b9050919050565b600060208201905081810360008301526148d38161435e565b9050919050565b600060208201905081810360008301526148f381614381565b9050919050565b60006020820190508181036000830152614913816143a4565b9050919050565b60006020820190508181036000830152614933816143c7565b9050919050565b60006020820190508181036000830152614953816143ea565b9050919050565b600060208201905081810360008301526149738161440d565b9050919050565b6000602082019050818103600083015261499381614430565b9050919050565b600060208201905081810360008301526149b381614453565b9050919050565b600060208201905081810360008301526149d381614476565b9050919050565b600060208201905081810360008301526149f381614499565b9050919050565b60006020820190508181036000830152614a13816144bc565b9050919050565b60006020820190508181036000830152614a33816144df565b9050919050565b60006020820190508181036000830152614a5381614502565b9050919050565b60006020820190508181036000830152614a7381614525565b9050919050565b60006020820190508181036000830152614a9381614548565b9050919050565b60006020820190508181036000830152614ab38161456b565b9050919050565b60006020820190508181036000830152614ad38161458e565b9050919050565b60006020820190508181036000830152614af3816145b1565b9050919050565b60006020820190508181036000830152614b13816145f7565b9050919050565b60006020820190508181036000830152614b338161461a565b9050919050565b60006020820190508181036000830152614b538161463d565b9050919050565b60006020820190508181036000830152614b7381614660565b9050919050565b60006020820190508181036000830152614b9381614683565b9050919050565b6000602082019050614baf60008301846146b5565b92915050565b6000614bbf614bd0565b9050614bcb8282614ef1565b919050565b6000604051905090565b600067ffffffffffffffff821115614bf557614bf4615090565b5b614bfe826150dd565b9050602081019050919050565b600067ffffffffffffffff821115614c2657614c25615090565b5b614c2f826150dd565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614ce382614e73565b9150614cee83614e73565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d2357614d22614fd4565b5b828201905092915050565b6000614d3982614e73565b9150614d4483614e73565b925082614d5457614d53615003565b5b828204905092915050565b6000614d6a82614e73565b9150614d7583614e73565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614dae57614dad614fd4565b5b828202905092915050565b6000614dc482614e73565b9150614dcf83614e73565b925082821015614de257614de1614fd4565b5b828203905092915050565b6000614df882614e53565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000614e4c82614ded565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614eaa578082015181840152602081019050614e8f565b83811115614eb9576000848401525b50505050565b60006002820490506001821680614ed757607f821691505b60208210811415614eeb57614eea615032565b5b50919050565b614efa826150dd565b810181811067ffffffffffffffff82111715614f1957614f18615090565b5b80604052505050565b6000614f2d82614e73565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614f6057614f5f614fd4565b5b600182019050919050565b6000614f7682614f87565b9050919050565b6000819050919050565b6000614f92826150ee565b9050919050565b6000819050919050565b6000614fae82614e73565b9150614fb983614e73565b925082614fc957614fc8615003565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c792070726573616c65206d696e74696e672063757272656e746c792e00600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f45786365656473206d6178206d696e747320666f722070726573616c652e0000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178206f662035302072657365727665642e0000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e6f2070726573616c65206d696e74696e672063757272656e746c792e000000600082015250565b7f496e76616c6964206d696e7420616d6f756e742e000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f5468652073616c65206973207061757365642e00000000000000000000000000600082015250565b7f496e76616c69642077686974656c6973742070726f6f662e0000000000000000600082015250565b50565b7f4d7573742062652067726561746572207468616e20302e000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e2e00000000000000000000000000000000602082015250565b7f4d617820737570706c792065786365656465642e000000000000000000000000600082015250565b7f496e73756666696369656e742066756e64732e00000000000000000000000000600082015250565b6156f981614ded565b811461570457600080fd5b50565b61571081614dff565b811461571b57600080fd5b50565b61572781614e0b565b811461573257600080fd5b50565b61573e81614e15565b811461574957600080fd5b50565b61575581614e41565b811461576057600080fd5b50565b61576c81614e73565b811461577757600080fd5b5056fea26469706673582212201c3ea3d8e15d78b7df0032b25c86932afcbdc4db77c3f93de435fc0354becd9364736f6c634300080700333bb70d75f3517f2e7cbda66ce03f3775b71a136d006053725b8626987471a941000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000045697066733a2f2f516d584c6b3978794431343276553773785a594371514763635269386434394e637065454d66596a6835536a64462f756e72657665616c65642e6a736f6e000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102ff5760003560e01c80637032d87d11610190578063b6374e35116100dc578063d79fa1d311610095578063efbd73f41161006f578063efbd73f414610b28578063f2fde38b14610b51578063fd2e908d14610b7a578063fdea8e0b14610ba3576102ff565b8063d79fa1d314610a97578063e0a8085314610ac2578063e985e9c514610aeb576102ff565b8063b6374e3514610989578063b88d4fde146109b4578063c54e73e3146109dd578063c87b56dd14610a06578063d26ea6c014610a43578063d5abeb0114610a6c576102ff565b80638da5cb5b11610149578063a0712d6811610123578063a0712d68146108f0578063a22cb4651461090c578063ae7c5f7614610935578063b071401b14610960576102ff565b80638da5cb5b1461086f57806394354fd01461089a57806395d89b41146108c5576102ff565b80637032d87d1461077557806370a082311461079e578063715018a6146107db5780637cb64759146107f25780637ec4a6591461081b57806382a55e1014610844576102ff565b80632eb4a7ab1161024f57806344a0d68a116102085780635c975abb116101e25780635c975abb146106c85780636352211e146106f3578063688279891461073057806368e00d771461074c576102ff565b806344a0d68a1461064957806351830227146106725780635503a0e81461069d576102ff565b80632eb4a7ab1461054f5780633018f54f1461057a5780633ab1a494146105a35780633ccfd60b146105cc57806342842e0e146105e3578063438b63001461060c576102ff565b806316317c21116102bc57806318160ddd1161029657806318160ddd146104a55780631fe5b457146104d057806321e7345e146104fb57806323b872dd14610526576102ff565b806316317c211461042857806316ba10e01461045357806316c38b3c1461047c576102ff565b806301ffc9a71461030457806306fdde0314610341578063081812fc1461036c578063095ea7b3146103a957806313faede6146103d25780631581b600146103fd575b600080fd5b34801561031057600080fd5b5061032b60048036038101906103269190613fc5565b610bce565b6040516103389190614802565b60405180910390f35b34801561034d57600080fd5b50610356610cb0565b6040516103639190614838565b60405180910390f35b34801561037857600080fd5b50610393600480360381019061038e9190614095565b610d42565b6040516103a09190614779565b60405180910390f35b3480156103b557600080fd5b506103d060048036038101906103cb9190613eb7565b610dc7565b005b3480156103de57600080fd5b506103e7610edf565b6040516103f49190614b9a565b60405180910390f35b34801561040957600080fd5b50610412610ee5565b60405161041f9190614779565b60405180910390f35b34801561043457600080fd5b5061043d610f0b565b60405161044a9190614b9a565b60405180910390f35b34801561045f57600080fd5b5061047a6004803603810190610475919061404c565b610f11565b005b34801561048857600080fd5b506104a3600480360381019061049e9190613f6b565b610fa7565b005b3480156104b157600080fd5b506104ba611040565b6040516104c79190614b9a565b60405180910390f35b3480156104dc57600080fd5b506104e5611051565b6040516104f29190614779565b60405180910390f35b34801561050757600080fd5b506105106110f7565b60405161051d9190614b9a565b60405180910390f35b34801561053257600080fd5b5061054d60048036038101906105489190613da1565b6110fd565b005b34801561055b57600080fd5b5061056461115d565b604051610571919061481d565b60405180910390f35b34801561058657600080fd5b506105a1600480360381019061059c9190614095565b611163565b005b3480156105af57600080fd5b506105ca60048036038101906105c59190613d34565b6111e9565b005b3480156105d857600080fd5b506105e16112a9565b005b3480156105ef57600080fd5b5061060a60048036038101906106059190613da1565b6113c0565b005b34801561061857600080fd5b50610633600480360381019061062e9190613d34565b6113e0565b60405161064091906147e0565b60405180910390f35b34801561065557600080fd5b50610670600480360381019061066b9190614095565b611509565b005b34801561067e57600080fd5b5061068761158f565b6040516106949190614802565b60405180910390f35b3480156106a957600080fd5b506106b26115a2565b6040516106bf9190614838565b60405180910390f35b3480156106d457600080fd5b506106dd611630565b6040516106ea9190614802565b60405180910390f35b3480156106ff57600080fd5b5061071a60048036038101906107159190614095565b611643565b6040516107279190614779565b60405180910390f35b61074a60048036038101906107459190613ef7565b6116f5565b005b34801561075857600080fd5b50610773600480360381019061076e919061404c565b611a97565b005b34801561078157600080fd5b5061079c60048036038101906107979190614095565b611b2d565b005b3480156107aa57600080fd5b506107c560048036038101906107c09190613d34565b611bb3565b6040516107d29190614b9a565b60405180910390f35b3480156107e757600080fd5b506107f0611c6b565b005b3480156107fe57600080fd5b5061081960048036038101906108149190613f98565b611cf3565b005b34801561082757600080fd5b50610842600480360381019061083d919061404c565b611d79565b005b34801561085057600080fd5b50610859611e0f565b6040516108669190614838565b60405180910390f35b34801561087b57600080fd5b50610884611e9d565b6040516108919190614779565b60405180910390f35b3480156108a657600080fd5b506108af611ec7565b6040516108bc9190614b9a565b60405180910390f35b3480156108d157600080fd5b506108da611ecd565b6040516108e79190614838565b60405180910390f35b61090a60048036038101906109059190614095565b611f5f565b005b34801561091857600080fd5b50610933600480360381019061092e9190613e77565b61215d565b005b34801561094157600080fd5b5061094a612173565b6040516109579190614838565b60405180910390f35b34801561096c57600080fd5b5061098760048036038101906109829190614095565b612281565b005b34801561099557600080fd5b5061099e612307565b6040516109ab9190614b9a565b60405180910390f35b3480156109c057600080fd5b506109db60048036038101906109d69190613df4565b61230d565b005b3480156109e957600080fd5b50610a0460048036038101906109ff9190613f6b565b61236f565b005b348015610a1257600080fd5b50610a2d6004803603810190610a289190614095565b612408565b604051610a3a9190614838565b60405180910390f35b348015610a4f57600080fd5b50610a6a6004803603810190610a659190613d34565b612561565b005b348015610a7857600080fd5b50610a81612621565b604051610a8e9190614b9a565b60405180910390f35b348015610aa357600080fd5b50610aac612645565b604051610ab99190614b9a565b60405180910390f35b348015610ace57600080fd5b50610ae96004803603810190610ae49190613f6b565b61264b565b005b348015610af757600080fd5b50610b126004803603810190610b0d9190613d61565b6126e4565b604051610b1f9190614802565b60405180910390f35b348015610b3457600080fd5b50610b4f6004803603810190610b4a91906140c2565b6127e6565b005b348015610b5d57600080fd5b50610b786004803603810190610b739190613d34565b612a2c565b005b348015610b8657600080fd5b50610ba16004803603810190610b9c9190614095565b612b24565b005b348015610baf57600080fd5b50610bb8612baa565b604051610bc59190614802565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c9957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ca95750610ca882612bbd565b5b9050919050565b606060008054610cbf90614ebf565b80601f0160208091040260200160405190810160405280929190818152602001828054610ceb90614ebf565b8015610d385780601f10610d0d57610100808354040283529160200191610d38565b820191906000526020600020905b815481529060010190602001808311610d1b57829003601f168201915b5050505050905090565b6000610d4d82612c27565b610d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d83906149fa565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610dd282611643565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3a90614a9a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e62612c93565b73ffffffffffffffffffffffffffffffffffffffff161480610e915750610e9081610e8b612c93565b6126e4565b5b610ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec79061495a565b60405180910390fd5b610eda8383612c9b565b505050565b600b5481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b610f19612c93565b73ffffffffffffffffffffffffffffffffffffffff16610f37611e9d565b73ffffffffffffffffffffffffffffffffffffffff1614610f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8490614a5a565b60405180910390fd5b8060139080519060200190610fa3929190613ac8565b5050565b610faf612c93565b73ffffffffffffffffffffffffffffffffffffffff16610fcd611e9d565b73ffffffffffffffffffffffffffffffffffffffff1614611023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101a90614a5a565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b600061104c6007612d54565b905090565b600061105b612c93565b73ffffffffffffffffffffffffffffffffffffffff16611079611e9d565b73ffffffffffffffffffffffffffffffffffffffff16146110cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c690614a5a565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b61110e611108612c93565b82612d62565b61114d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114490614b1a565b60405180910390fd5b611158838383612e40565b505050565b60085481565b61116b612c93565b73ffffffffffffffffffffffffffffffffffffffff16611189611e9d565b73ffffffffffffffffffffffffffffffffffffffff16146111df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d690614a5a565b60405180910390fd5b80600c8190555050565b6111f1612c93565b73ffffffffffffffffffffffffffffffffffffffff1661120f611e9d565b73ffffffffffffffffffffffffffffffffffffffff1614611265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125c90614a5a565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6112b1612c93565b73ffffffffffffffffffffffffffffffffffffffff166112cf611e9d565b73ffffffffffffffffffffffffffffffffffffffff1614611325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131c90614a5a565b60405180910390fd5b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161136d90614764565b60006040518083038185875af1925050503d80600081146113aa576040519150601f19603f3d011682016040523d82523d6000602084013e6113af565b606091505b50509050806113bd57600080fd5b50565b6113db8383836040518060200160405280600081525061230d565b505050565b606060006113ed83611bb3565b905060008167ffffffffffffffff81111561140b5761140a615090565b5b6040519080825280602002602001820160405280156114395781602001602082028036833780820191505090505b50905060006001905060005b838110801561147457507f00000000000000000000000000000000000000000000000000000000000027108211155b156114fd57600061148483611643565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114e957828483815181106114ce576114cd615061565b5b60200260200101818152505081806114e590614f22565b9250505b82806114f490614f22565b93505050611445565b82945050505050919050565b611511612c93565b73ffffffffffffffffffffffffffffffffffffffff1661152f611e9d565b73ffffffffffffffffffffffffffffffffffffffff1614611585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157c90614a5a565b60405180910390fd5b80600b8190555050565b601160019054906101000a900460ff1681565b601380546115af90614ebf565b80601f01602080910402602001604051908101604052809291908181526020018280546115db90614ebf565b80156116285780601f106115fd57610100808354040283529160200191611628565b820191906000526020600020905b81548152906001019060200180831161160b57829003601f168201915b505050505081565b601160009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e39061499a565b60405180910390fd5b80915050919050565b82601160009054906101000a900460ff1615611746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173d90614aba565b60405180910390fd5b60008111611789576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178090614afa565b60405180910390fd5b600d548111156117ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c590614a3a565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000002710816117fa6007612d54565b6118049190614cd8565b1115611845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183c90614b5a565b60405180910390fd5b600085600e5460405160200161185c9291906146db565b6040516020818303038152906040528051906020012090506118c2848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506008548361309c565b611901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f890614ada565b60405180910390fd5b601160029054906101000a900460ff16611950576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194790614a1a565b60405180910390fd5b84600c5461195e9190614d5f565b3410156119a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199790614b7a565b60405180910390fd5b600e5485601560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119ee9190614cd8565b1115611a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a26906148da565b60405180910390fd5b611a3986866130b3565b84601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a889190614cd8565b92505081905550505050505050565b611a9f612c93565b73ffffffffffffffffffffffffffffffffffffffff16611abd611e9d565b73ffffffffffffffffffffffffffffffffffffffff1614611b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0a90614a5a565b60405180910390fd5b8060149080519060200190611b29929190613ac8565b5050565b611b35612c93565b73ffffffffffffffffffffffffffffffffffffffff16611b53611e9d565b73ffffffffffffffffffffffffffffffffffffffff1614611ba9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba090614a5a565b60405180910390fd5b8060108190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1b9061497a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611c73612c93565b73ffffffffffffffffffffffffffffffffffffffff16611c91611e9d565b73ffffffffffffffffffffffffffffffffffffffff1614611ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cde90614a5a565b60405180910390fd5b611cf160006130f3565b565b611cfb612c93565b73ffffffffffffffffffffffffffffffffffffffff16611d19611e9d565b73ffffffffffffffffffffffffffffffffffffffff1614611d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6690614a5a565b60405180910390fd5b8060088190555050565b611d81612c93565b73ffffffffffffffffffffffffffffffffffffffff16611d9f611e9d565b73ffffffffffffffffffffffffffffffffffffffff1614611df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dec90614a5a565b60405180910390fd5b8060129080519060200190611e0b929190613ac8565b5050565b60148054611e1c90614ebf565b80601f0160208091040260200160405190810160405280929190818152602001828054611e4890614ebf565b8015611e955780601f10611e6a57610100808354040283529160200191611e95565b820191906000526020600020905b815481529060010190602001808311611e7857829003601f168201915b505050505081565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d5481565b606060018054611edc90614ebf565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0890614ebf565b8015611f555780601f10611f2a57610100808354040283529160200191611f55565b820191906000526020600020905b815481529060010190602001808311611f3857829003601f168201915b5050505050905090565b80601160009054906101000a900460ff1615611fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa790614aba565b60405180910390fd5b60008111611ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fea90614afa565b60405180910390fd5b600d54811115612038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202f90614a3a565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000002710816120646007612d54565b61206e9190614cd8565b11156120af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a690614b5a565b60405180910390fd5b601160029054906101000a900460ff16156120ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f69061489a565b60405180910390fd5b81600b5461210d9190614d5f565b34101561214f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214690614b7a565b60405180910390fd5b61215933836130b3565b5050565b61216f612168612c93565b83836131b9565b5050565b606061217d612c93565b73ffffffffffffffffffffffffffffffffffffffff1661219b611e9d565b73ffffffffffffffffffffffffffffffffffffffff16146121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e890614a5a565b60405180910390fd5b601280546121fe90614ebf565b80601f016020809104026020016040519081016040528092919081815260200182805461222a90614ebf565b80156122775780601f1061224c57610100808354040283529160200191612277565b820191906000526020600020905b81548152906001019060200180831161225a57829003601f168201915b5050505050905090565b612289612c93565b73ffffffffffffffffffffffffffffffffffffffff166122a7611e9d565b73ffffffffffffffffffffffffffffffffffffffff16146122fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f490614a5a565b60405180910390fd5b80600d8190555050565b600c5481565b61231e612318612c93565b83612d62565b61235d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235490614b1a565b60405180910390fd5b61236984848484613326565b50505050565b612377612c93565b73ffffffffffffffffffffffffffffffffffffffff16612395611e9d565b73ffffffffffffffffffffffffffffffffffffffff16146123eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e290614a5a565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606061241382612c27565b612452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244990614b3a565b60405180910390fd5b60001515601160019054906101000a900460ff1615151415612500576014805461247b90614ebf565b80601f01602080910402602001604051908101604052809291908181526020018280546124a790614ebf565b80156124f45780601f106124c9576101008083540402835291602001916124f4565b820191906000526020600020905b8154815290600101906020018083116124d757829003601f168201915b5050505050905061255c565b600061250a613382565b9050600081511161252a5760405180602001604052806000815250612558565b8061253484613414565b601360405160200161254893929190614733565b6040516020818303038152906040525b9150505b919050565b612569612c93565b73ffffffffffffffffffffffffffffffffffffffff16612587611e9d565b73ffffffffffffffffffffffffffffffffffffffff16146125dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d490614a5a565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000000000000000000000000000000000000000271081565b600e5481565b612653612c93565b73ffffffffffffffffffffffffffffffffffffffff16612671611e9d565b73ffffffffffffffffffffffffffffffffffffffff16146126c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126be90614a5a565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b815260040161275c9190614779565b60206040518083038186803b15801561277457600080fd5b505afa158015612788573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127ac919061401f565b73ffffffffffffffffffffffffffffffffffffffff1614156127d25760019150506127e0565b6127dc8484613575565b9150505b92915050565b81601160009054906101000a900460ff1615612837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282e90614aba565b60405180910390fd5b6000811161287a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287190614afa565b60405180910390fd5b600d548111156128bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b690614a3a565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000002710816128eb6007612d54565b6128f59190614cd8565b1115612936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292d90614b5a565b60405180910390fd5b61293e612c93565b73ffffffffffffffffffffffffffffffffffffffff1661295c611e9d565b73ffffffffffffffffffffffffffffffffffffffff16146129b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a990614a5a565b60405180910390fd5b60105483600f546129c39190614cd8565b1115612a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fb906149ba565b60405180910390fd5b612a0e82846130b3565b82600f6000828254612a209190614cd8565b92505081905550505050565b612a34612c93565b73ffffffffffffffffffffffffffffffffffffffff16612a52611e9d565b73ffffffffffffffffffffffffffffffffffffffff1614612aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9f90614a5a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0f9061487a565b60405180910390fd5b612b21816130f3565b50565b612b2c612c93565b73ffffffffffffffffffffffffffffffffffffffff16612b4a611e9d565b73ffffffffffffffffffffffffffffffffffffffff1614612ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9790614a5a565b60405180910390fd5b80600e8190555050565b601160029054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612d0e83611643565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000612d6d82612c27565b612dac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da39061493a565b60405180910390fd5b6000612db783611643565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612e2657508373ffffffffffffffffffffffffffffffffffffffff16612e0e84610d42565b73ffffffffffffffffffffffffffffffffffffffff16145b80612e375750612e3681856126e4565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612e6082611643565b73ffffffffffffffffffffffffffffffffffffffff1614612eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ead90614a7a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1d906148fa565b60405180910390fd5b612f31838383613609565b612f3c600082612c9b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f8c9190614db9565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fe39190614cd8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000826130a9858461360e565b1490509392505050565b60005b818110156130ee576130c860076136c1565b6130db836130d66007612d54565b6136d7565b80806130e690614f22565b9150506130b6565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161321f9061491a565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516133199190614802565b60405180910390a3505050565b613331848484612e40565b61333d848484846136f5565b61337c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133739061485a565b60405180910390fd5b50505050565b60606012805461339190614ebf565b80601f01602080910402602001604051908101604052809291908181526020018280546133bd90614ebf565b801561340a5780601f106133df5761010080835404028352916020019161340a565b820191906000526020600020905b8154815290600101906020018083116133ed57829003601f168201915b5050505050905090565b6060600082141561345c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613570565b600082905060005b6000821461348e57808061347790614f22565b915050600a826134879190614d2e565b9150613464565b60008167ffffffffffffffff8111156134aa576134a9615090565b5b6040519080825280601f01601f1916602001820160405280156134dc5781602001600182028036833780820191505090505b5090505b60008514613569576001826134f59190614db9565b9150600a856135049190614fa3565b60306135109190614cd8565b60f81b81838151811061352657613525615061565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856135629190614d2e565b94506134e0565b8093505050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b505050565b60008082905060005b84518110156136b657600085828151811061363557613634615061565b5b60200260200101519050808311613676578281604051602001613659929190614707565b6040516020818303038152906040528051906020012092506136a2565b8083604051602001613689929190614707565b6040516020818303038152906040528051906020012092505b5080806136ae90614f22565b915050613617565b508091505092915050565b6001816000016000828254019250508190555050565b6136f182826040518060200160405280600081525061388c565b5050565b60006137168473ffffffffffffffffffffffffffffffffffffffff166138e7565b1561387f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261373f612c93565b8786866040518563ffffffff1660e01b81526004016137619493929190614794565b602060405180830381600087803b15801561377b57600080fd5b505af19250505080156137ac57506040513d601f19601f820116820180604052508101906137a99190613ff2565b60015b61382f573d80600081146137dc576040519150601f19603f3d011682016040523d82523d6000602084013e6137e1565b606091505b50600081511415613827576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161381e9061485a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613884565b600190505b949350505050565b61389683836138fa565b6138a360008484846136f5565b6138e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138d99061485a565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561396a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613961906149da565b60405180910390fd5b61397381612c27565b156139b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139aa906148ba565b60405180910390fd5b6139bf60008383613609565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a0f9190614cd8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613ad490614ebf565b90600052602060002090601f016020900481019282613af65760008555613b3d565b82601f10613b0f57805160ff1916838001178555613b3d565b82800160010185558215613b3d579182015b82811115613b3c578251825591602001919060010190613b21565b5b509050613b4a9190613b4e565b5090565b5b80821115613b67576000816000905550600101613b4f565b5090565b6000613b7e613b7984614bda565b614bb5565b905082815260208101848484011115613b9a57613b996150ce565b5b613ba5848285614e7d565b509392505050565b6000613bc0613bbb84614c0b565b614bb5565b905082815260208101848484011115613bdc57613bdb6150ce565b5b613be7848285614e7d565b509392505050565b600081359050613bfe816156f0565b92915050565b60008083601f840112613c1a57613c196150c4565b5b8235905067ffffffffffffffff811115613c3757613c366150bf565b5b602083019150836020820283011115613c5357613c526150c9565b5b9250929050565b600081359050613c6981615707565b92915050565b600081359050613c7e8161571e565b92915050565b600081359050613c9381615735565b92915050565b600081519050613ca881615735565b92915050565b600082601f830112613cc357613cc26150c4565b5b8135613cd3848260208601613b6b565b91505092915050565b600081519050613ceb8161574c565b92915050565b600082601f830112613d0657613d056150c4565b5b8135613d16848260208601613bad565b91505092915050565b600081359050613d2e81615763565b92915050565b600060208284031215613d4a57613d496150d8565b5b6000613d5884828501613bef565b91505092915050565b60008060408385031215613d7857613d776150d8565b5b6000613d8685828601613bef565b9250506020613d9785828601613bef565b9150509250929050565b600080600060608486031215613dba57613db96150d8565b5b6000613dc886828701613bef565b9350506020613dd986828701613bef565b9250506040613dea86828701613d1f565b9150509250925092565b60008060008060808587031215613e0e57613e0d6150d8565b5b6000613e1c87828801613bef565b9450506020613e2d87828801613bef565b9350506040613e3e87828801613d1f565b925050606085013567ffffffffffffffff811115613e5f57613e5e6150d3565b5b613e6b87828801613cae565b91505092959194509250565b60008060408385031215613e8e57613e8d6150d8565b5b6000613e9c85828601613bef565b9250506020613ead85828601613c5a565b9150509250929050565b60008060408385031215613ece57613ecd6150d8565b5b6000613edc85828601613bef565b9250506020613eed85828601613d1f565b9150509250929050565b60008060008060608587031215613f1157613f106150d8565b5b6000613f1f87828801613bef565b9450506020613f3087828801613d1f565b935050604085013567ffffffffffffffff811115613f5157613f506150d3565b5b613f5d87828801613c04565b925092505092959194509250565b600060208284031215613f8157613f806150d8565b5b6000613f8f84828501613c5a565b91505092915050565b600060208284031215613fae57613fad6150d8565b5b6000613fbc84828501613c6f565b91505092915050565b600060208284031215613fdb57613fda6150d8565b5b6000613fe984828501613c84565b91505092915050565b600060208284031215614008576140076150d8565b5b600061401684828501613c99565b91505092915050565b600060208284031215614035576140346150d8565b5b600061404384828501613cdc565b91505092915050565b600060208284031215614062576140616150d8565b5b600082013567ffffffffffffffff8111156140805761407f6150d3565b5b61408c84828501613cf1565b91505092915050565b6000602082840312156140ab576140aa6150d8565b5b60006140b984828501613d1f565b91505092915050565b600080604083850312156140d9576140d86150d8565b5b60006140e785828601613d1f565b92505060206140f885828601613bef565b9150509250929050565b600061410e83836146a6565b60208301905092915050565b61412381614ded565b82525050565b61413a61413582614ded565b614f6b565b82525050565b600061414b82614c61565b6141558185614c8f565b935061416083614c3c565b8060005b838110156141915781516141788882614102565b975061418383614c82565b925050600181019050614164565b5085935050505092915050565b6141a781614dff565b82525050565b6141b681614e0b565b82525050565b6141cd6141c882614e0b565b614f7d565b82525050565b60006141de82614c6c565b6141e88185614ca0565b93506141f8818560208601614e8c565b614201816150dd565b840191505092915050565b600061421782614c77565b6142218185614cbc565b9350614231818560208601614e8c565b61423a816150dd565b840191505092915050565b600061425082614c77565b61425a8185614ccd565b935061426a818560208601614e8c565b80840191505092915050565b6000815461428381614ebf565b61428d8186614ccd565b945060018216600081146142a857600181146142b9576142ec565b60ff198316865281860193506142ec565b6142c285614c4c565b60005b838110156142e4578154818901526001820191506020810190506142c5565b838801955050505b50505092915050565b6000614302603283614cbc565b915061430d826150fb565b604082019050919050565b6000614325602683614cbc565b91506143308261514a565b604082019050919050565b6000614348601f83614cbc565b915061435382615199565b602082019050919050565b600061436b601c83614cbc565b9150614376826151c2565b602082019050919050565b600061438e601e83614cbc565b9150614399826151eb565b602082019050919050565b60006143b1602483614cbc565b91506143bc82615214565b604082019050919050565b60006143d4601983614cbc565b91506143df82615263565b602082019050919050565b60006143f7602c83614cbc565b91506144028261528c565b604082019050919050565b600061441a603883614cbc565b9150614425826152db565b604082019050919050565b600061443d602a83614cbc565b91506144488261532a565b604082019050919050565b6000614460602983614cbc565b915061446b82615379565b604082019050919050565b6000614483601b83614cbc565b915061448e826153c8565b602082019050919050565b60006144a6602083614cbc565b91506144b1826153f1565b602082019050919050565b60006144c9602c83614cbc565b91506144d48261541a565b604082019050919050565b60006144ec601d83614cbc565b91506144f782615469565b602082019050919050565b600061450f601483614cbc565b915061451a82615492565b602082019050919050565b6000614532602083614cbc565b915061453d826154bb565b602082019050919050565b6000614555602983614cbc565b9150614560826154e4565b604082019050919050565b6000614578602183614cbc565b915061458382615533565b604082019050919050565b600061459b601383614cbc565b91506145a682615582565b602082019050919050565b60006145be601883614cbc565b91506145c9826155ab565b602082019050919050565b60006145e1600083614cb1565b91506145ec826155d4565b600082019050919050565b6000614604601783614cbc565b915061460f826155d7565b602082019050919050565b6000614627603183614cbc565b915061463282615600565b604082019050919050565b600061464a603083614cbc565b91506146558261564f565b604082019050919050565b600061466d601483614cbc565b91506146788261569e565b602082019050919050565b6000614690601383614cbc565b915061469b826156c7565b602082019050919050565b6146af81614e73565b82525050565b6146be81614e73565b82525050565b6146d56146d082614e73565b614f99565b82525050565b60006146e78285614129565b6014820191506146f782846146c4565b6020820191508190509392505050565b600061471382856141bc565b60208201915061472382846141bc565b6020820191508190509392505050565b600061473f8286614245565b915061474b8285614245565b91506147578284614276565b9150819050949350505050565b600061476f826145d4565b9150819050919050565b600060208201905061478e600083018461411a565b92915050565b60006080820190506147a9600083018761411a565b6147b6602083018661411a565b6147c360408301856146b5565b81810360608301526147d581846141d3565b905095945050505050565b600060208201905081810360008301526147fa8184614140565b905092915050565b6000602082019050614817600083018461419e565b92915050565b600060208201905061483260008301846141ad565b92915050565b60006020820190508181036000830152614852818461420c565b905092915050565b60006020820190508181036000830152614873816142f5565b9050919050565b6000602082019050818103600083015261489381614318565b9050919050565b600060208201905081810360008301526148b38161433b565b9050919050565b600060208201905081810360008301526148d38161435e565b9050919050565b600060208201905081810360008301526148f381614381565b9050919050565b60006020820190508181036000830152614913816143a4565b9050919050565b60006020820190508181036000830152614933816143c7565b9050919050565b60006020820190508181036000830152614953816143ea565b9050919050565b600060208201905081810360008301526149738161440d565b9050919050565b6000602082019050818103600083015261499381614430565b9050919050565b600060208201905081810360008301526149b381614453565b9050919050565b600060208201905081810360008301526149d381614476565b9050919050565b600060208201905081810360008301526149f381614499565b9050919050565b60006020820190508181036000830152614a13816144bc565b9050919050565b60006020820190508181036000830152614a33816144df565b9050919050565b60006020820190508181036000830152614a5381614502565b9050919050565b60006020820190508181036000830152614a7381614525565b9050919050565b60006020820190508181036000830152614a9381614548565b9050919050565b60006020820190508181036000830152614ab38161456b565b9050919050565b60006020820190508181036000830152614ad38161458e565b9050919050565b60006020820190508181036000830152614af3816145b1565b9050919050565b60006020820190508181036000830152614b13816145f7565b9050919050565b60006020820190508181036000830152614b338161461a565b9050919050565b60006020820190508181036000830152614b538161463d565b9050919050565b60006020820190508181036000830152614b7381614660565b9050919050565b60006020820190508181036000830152614b9381614683565b9050919050565b6000602082019050614baf60008301846146b5565b92915050565b6000614bbf614bd0565b9050614bcb8282614ef1565b919050565b6000604051905090565b600067ffffffffffffffff821115614bf557614bf4615090565b5b614bfe826150dd565b9050602081019050919050565b600067ffffffffffffffff821115614c2657614c25615090565b5b614c2f826150dd565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614ce382614e73565b9150614cee83614e73565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d2357614d22614fd4565b5b828201905092915050565b6000614d3982614e73565b9150614d4483614e73565b925082614d5457614d53615003565b5b828204905092915050565b6000614d6a82614e73565b9150614d7583614e73565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614dae57614dad614fd4565b5b828202905092915050565b6000614dc482614e73565b9150614dcf83614e73565b925082821015614de257614de1614fd4565b5b828203905092915050565b6000614df882614e53565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000614e4c82614ded565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614eaa578082015181840152602081019050614e8f565b83811115614eb9576000848401525b50505050565b60006002820490506001821680614ed757607f821691505b60208210811415614eeb57614eea615032565b5b50919050565b614efa826150dd565b810181811067ffffffffffffffff82111715614f1957614f18615090565b5b80604052505050565b6000614f2d82614e73565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614f6057614f5f614fd4565b5b600182019050919050565b6000614f7682614f87565b9050919050565b6000819050919050565b6000614f92826150ee565b9050919050565b6000819050919050565b6000614fae82614e73565b9150614fb983614e73565b925082614fc957614fc8615003565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c792070726573616c65206d696e74696e672063757272656e746c792e00600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f45786365656473206d6178206d696e747320666f722070726573616c652e0000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178206f662035302072657365727665642e0000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e6f2070726573616c65206d696e74696e672063757272656e746c792e000000600082015250565b7f496e76616c6964206d696e7420616d6f756e742e000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f5468652073616c65206973207061757365642e00000000000000000000000000600082015250565b7f496e76616c69642077686974656c6973742070726f6f662e0000000000000000600082015250565b50565b7f4d7573742062652067726561746572207468616e20302e000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e2e00000000000000000000000000000000602082015250565b7f4d617820737570706c792065786365656465642e000000000000000000000000600082015250565b7f496e73756666696369656e742066756e64732e00000000000000000000000000600082015250565b6156f981614ded565b811461570457600080fd5b50565b61571081614dff565b811461571b57600080fd5b50565b61572781614e0b565b811461573257600080fd5b50565b61573e81614e15565b811461574957600080fd5b50565b61575581614e41565b811461576057600080fd5b50565b61576c81614e73565b811461577757600080fd5b5056fea26469706673582212201c3ea3d8e15d78b7df0032b25c86932afcbdc4db77c3f93de435fc0354becd9364736f6c63430008070033

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

3bb70d75f3517f2e7cbda66ce03f3775b71a136d006053725b8626987471a941000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000045697066733a2f2f516d584c6b3978794431343276553773785a594371514763635269386434394e637065454d66596a6835536a64462f756e72657665616c65642e6a736f6e000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _merkleRoot (bytes32): 0x3bb70d75f3517f2e7cbda66ce03f3775b71a136d006053725b8626987471a941
Arg [1] : proxyRegistryAddress (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1
Arg [2] : _uriHidden (string): ipfs://QmXLk9xyD142vU7sxZYCqQGccRi8d49NcpeEMfYjh5SjdF/unrevealed.json

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 3bb70d75f3517f2e7cbda66ce03f3775b71a136d006053725b8626987471a941
Arg [1] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000045
Arg [4] : 697066733a2f2f516d584c6b3978794431343276553773785a59437151476363
Arg [5] : 5269386434394e637065454d66596a6835536a64462f756e72657665616c6564
Arg [6] : 2e6a736f6e000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

41280:8902:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24845:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25790:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27349:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26872:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41682:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41549:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41906:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47754:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48669:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46364:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46215:122;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41940:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28099:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41443:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47998:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49018:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50000:179;;;;;;;;;;;;;:::i;:::-;;28509:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46513:743;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47885:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42007:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42094:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41982:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25484:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42771:841;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47475:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48118:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25214:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38998:103;;;;;;;;;;;;;:::i;:::-;;47331:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47612:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42124:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38347:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41815:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25959:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43640:302;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27642:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46075:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48483:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41747:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28765:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48780:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45177:716;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49336:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41633:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41860:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48894:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49529:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44694:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39256:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48277:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42034:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24845:305;24947:4;24999:25;24984:40;;;:11;:40;;;;:105;;;;25056:33;25041:48;;;:11;:48;;;;24984:105;:158;;;;25106:36;25130:11;25106:23;:36::i;:::-;24984:158;24964:178;;24845:305;;;:::o;25790:100::-;25844:13;25877:5;25870:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25790:100;:::o;27349:221::-;27425:7;27453:16;27461:7;27453;:16::i;:::-;27445:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27538:15;:24;27554:7;27538:24;;;;;;;;;;;;;;;;;;;;;27531:31;;27349:221;;;:::o;26872:411::-;26953:13;26969:23;26984:7;26969:14;:23::i;:::-;26953:39;;27017:5;27011:11;;:2;:11;;;;27003:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27111:5;27095:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27120:37;27137:5;27144:12;:10;:12::i;:::-;27120:16;:37::i;:::-;27095:62;27073:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27254:21;27263:2;27267:7;27254:8;:21::i;:::-;26942:341;26872:411;;:::o;41682:32::-;;;;:::o;41549:75::-;;;;;;;;;;;;;:::o;41906:27::-;;;;:::o;47754:106::-;38578:12;:10;:12::i;:::-;38567:23;;:7;:5;:7::i;:::-;:23;;;38559:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47842:10:::1;47830:9;:22;;;;;;;;;;;;:::i;:::-;;47754:106:::0;:::o;48669:83::-;38578:12;:10;:12::i;:::-;38567:23;;:7;:5;:7::i;:::-;:23;;;38559:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48738:6:::1;48729;;:15;;;;;;;;;;;;;;;;;;48669:83:::0;:::o;46364:95::-;46408:7;46435:16;:6;:14;:16::i;:::-;46428:23;;46364:95;:::o;46215:122::-;46281:7;38578:12;:10;:12::i;:::-;38567:23;;:7;:5;:7::i;:::-;:23;;;38559:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46308:21:::1;;;;;;;;;;;46301:28;;46215:122:::0;:::o;41940:33::-;;;;:::o;28099:339::-;28294:41;28313:12;:10;:12::i;:::-;28327:7;28294:18;:41::i;:::-;28286:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28402:28;28412:4;28418:2;28422:7;28402:9;:28::i;:::-;28099:339;;;:::o;41443:25::-;;;;:::o;47998:86::-;38578:12;:10;:12::i;:::-;38567:23;;:7;:5;:7::i;:::-;:23;;;38559:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48071:5:::1;48061:7;:15;;;;47998:86:::0;:::o;49018:124::-;38578:12;:10;:12::i;:::-;38567:23;;:7;:5;:7::i;:::-;:23;;;38559:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49118:16:::1;49100:15;;:34;;;;;;;;;;;;;;;;;;49018:124:::0;:::o;50000:179::-;38578:12;:10;:12::i;:::-;38567:23;;:7;:5;:7::i;:::-;:23;;;38559:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50049:7:::1;50070:15;;;;;;;;;;;50062:29;;50113:21;50062:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50048:101;;;50168:2;50160:11;;;::::0;::::1;;50037:142;50000:179::o:0;28509:185::-;28647:39;28664:4;28670:2;28674:7;28647:39;;;;;;;;;;;;:16;:39::i;:::-;28509:185;;;:::o;46513:743::-;46600:16;46634:23;46660:17;46670:6;46660:9;:17::i;:::-;46634:43;;46688:30;46735:15;46721:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46688:63;;46762:22;46787:1;46762:26;;46799:23;46839:377;46878:15;46860;:33;:64;;;;;46915:9;46897:14;:27;;46860:64;46839:377;;;46951:25;46979:23;46987:14;46979:7;:23::i;:::-;46951:51;;47044:6;47023:27;;:17;:27;;;47019:153;;;47104:14;47071:13;47085:15;47071:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;47139:17;;;;;:::i;:::-;;;;47019:153;47188:16;;;;;:::i;:::-;;;;46936:280;46839:377;;;47235:13;47228:20;;;;;;46513:743;;;:::o;47885:80::-;38578:12;:10;:12::i;:::-;38567:23;;:7;:5;:7::i;:::-;:23;;;38559:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47952:5:::1;47945:4;:12;;;;47885:80:::0;:::o;42007:20::-;;;;;;;;;;;;;:::o;42094:23::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41982:18::-;;;;;;;;;;;;;:::o;25484:239::-;25556:7;25576:13;25592:7;:16;25600:7;25592:16;;;;;;;;;;;;;;;;;;;;;25576:32;;25644:1;25627:19;;:5;:19;;;;25619:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25710:5;25703:12;;;25484:239;;;:::o;42771:841::-;42926:11;44039:6;;;;;;;;;;;44038:7;44030:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;44102:1;44088:11;:15;44080:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;44228:18;;44213:11;:33;;44205:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;44338:9;44323:11;44304:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;44282:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;42987:12:::1;43043:7;43052:20;;43026:47;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43002:82;;;;;;42987:97;;43117:49;43136:11;;43117:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43149:10;;43161:4;43117:18;:49::i;:::-;43095:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;43237:7;;;;;;;;;;;43229:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;43320:11;43310:7;;:21;;;;:::i;:::-;43297:9;:34;;43289:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;43430:20;;43415:11;43388:15;:24;43404:7;43388:24;;;;;;;;;;;;;;;;:38;;;;:::i;:::-;:62;;43366:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;43521:31;43531:7;43540:11;43521:9;:31::i;:::-;43593:11;43565:15;:24;43581:7;43565:24;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;42939:673;42771:841:::0;;;;;:::o;47475:106::-;38578:12;:10;:12::i;:::-;38567:23;;:7;:5;:7::i;:::-;:23;;;38559:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47563:10:::1;47551:9;:22;;;;;;;;;;;;:::i;:::-;;47475:106:::0;:::o;48118:104::-;38578:12;:10;:12::i;:::-;38567:23;;:7;:5;:7::i;:::-;:23;;;38559:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48205:9:::1;48190:12;:24;;;;48118:104:::0;:::o;25214:208::-;25286:7;25331:1;25314:19;;:5;:19;;;;25306:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25398:9;:16;25408:5;25398:16;;;;;;;;;;;;;;;;25391:23;;25214:208;;;:::o;38998:103::-;38578:12;:10;:12::i;:::-;38567:23;;:7;:5;:7::i;:::-;:23;;;38559:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39063:30:::1;39090:1;39063:18;:30::i;:::-;38998:103::o:0;47331:96::-;38578:12;:10;:12::i;:::-;38567:23;;:7;:5;:7::i;:::-;:23;;;38559:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47412:7:::1;47399:10;:20;;;;47331:96:::0;:::o;47612:111::-;38578:12;:10;:12::i;:::-;38567:23;;:7;:5;:7::i;:::-;:23;;;38559:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47703:12:::1;47690:10;:25;;;;;;;;;;;;:::i;:::-;;47612:111:::0;:::o;42124:23::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38347:87::-;38393:7;38420:6;;;;;;;;;;;38413:13;;38347:87;:::o;41815:38::-;;;;:::o;25959:104::-;26015:13;26048:7;26041:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25959:104;:::o;43640:302::-;43732:11;44039:6;;;;;;;;;;;44038:7;44030:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;44102:1;44088:11;:15;44080:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;44228:18;;44213:11;:33;;44205:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;44338:9;44323:11;44304:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;44282:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;43770:7:::1;;;;;;;;;;;43769:8;43761:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;43852:11;43845:4;;:18;;;;:::i;:::-;43832:9;:31;;43824:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;43900:34;43910:10;43922:11;43900:9;:34::i;:::-;43640:302:::0;;:::o;27642:155::-;27737:52;27756:12;:10;:12::i;:::-;27770:8;27780;27737:18;:52::i;:::-;27642:155;;:::o;46075:106::-;46130:13;38578:12;:10;:12::i;:::-;38567:23;;:7;:5;:7::i;:::-;:23;;;38559:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46163:10:::1;46156:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46075:106:::0;:::o;48483:159::-;38578:12;:10;:12::i;:::-;38567:23;;:7;:5;:7::i;:::-;:23;;;38559:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48615:19:::1;48594:18;:40;;;;48483:159:::0;:::o;41747:35::-;;;;:::o;28765:328::-;28940:41;28959:12;:10;:12::i;:::-;28973:7;28940:18;:41::i;:::-;28932:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29046:39;29060:4;29066:2;29070:7;29079:5;29046:13;:39::i;:::-;28765:328;;;;:::o;48780:85::-;38578:12;:10;:12::i;:::-;38567:23;;:7;:5;:7::i;:::-;:23;;;38559:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48851:6:::1;48841:7;;:16;;;;;;;;;;;;;;;;;;48780:85:::0;:::o;45177:716::-;45296:13;45349:17;45357:8;45349:7;:17::i;:::-;45327:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;45469:5;45457:17;;:8;;;;;;;;;;;:17;;;45453:66;;;45498:9;45491:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45453:66;45529:28;45560:10;:8;:10::i;:::-;45529:41;;45632:1;45607:14;45601:28;:32;:284;;;;;;;;;;;;;;;;;45725:14;45766:19;:8;:17;:19::i;:::-;45812:9;45682:162;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45601:284;45581:304;;;45177:716;;;;:::o;49336:168::-;38578:12;:10;:12::i;:::-;38567:23;;:7;:5;:7::i;:::-;:23;;;38559:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49476:20:::1;49452:21;;:44;;;;;;;;;;;;;;;;;;49336:168:::0;:::o;41633:42::-;;;:::o;41860:39::-;;;;:::o;48894:87::-;38578:12;:10;:12::i;:::-;38567:23;;:7;:5;:7::i;:::-;:23;;;38559:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48967:6:::1;48956:8;;:17;;;;;;;;;;;;;;;;;;48894:87:::0;:::o;49529:446::-;49654:4;49739:27;49783:21;;;;;;;;;;;49739:66;;49861:8;49820:49;;49828:13;:21;;;49850:5;49828:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49820:49;;;49816:93;;;49893:4;49886:11;;;;;49816:93;49928:39;49951:5;49958:8;49928:22;:39::i;:::-;49921:46;;;49529:446;;;;;:::o;44694:417::-;44798:11;44039:6;;;;;;;;;;;44038:7;44030:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;44102:1;44088:11;:15;44080:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;44228:18;;44213:11;:33;;44205:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;44338:9;44323:11;44304:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;44282:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;38578:12:::1;:10;:12::i;:::-;38567:23;;:7;:5;:7::i;:::-;:23;;;38559:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44954:12:::2;;44939:11;44924:12;;:26;;;;:::i;:::-;:42;;44902:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;45032:33;45042:9;45053:11;45032:9;:33::i;:::-;45092:11;45076:12;;:27;;;;;;;:::i;:::-;;;;;;;;44694:417:::0;;;:::o;39256:201::-;38578:12;:10;:12::i;:::-;38567:23;;:7;:5;:7::i;:::-;:23;;;38559:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39365:1:::1;39345:22;;:8;:22;;;;39337:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;39421:28;39440:8;39421:18;:28::i;:::-;39256:201:::0;:::o;48277:167::-;38578:12;:10;:12::i;:::-;38567:23;;:7;:5;:7::i;:::-;:23;;;38559:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48415:21:::1;48392:20;:44;;;;48277:167:::0;:::o;42034:19::-;;;;;;;;;;;;;:::o;16721:157::-;16806:4;16845:25;16830:40;;;:11;:40;;;;16823:47;;16721:157;;;:::o;30603:127::-;30668:4;30720:1;30692:30;;:7;:16;30700:7;30692:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30685:37;;30603:127;;;:::o;23239:98::-;23292:7;23319:10;23312:17;;23239:98;:::o;34585:174::-;34687:2;34660:15;:24;34676:7;34660:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34743:7;34739:2;34705:46;;34714:23;34729:7;34714:14;:23::i;:::-;34705:46;;;;;;;;;;;;34585:174;;:::o;3040:114::-;3105:7;3132;:14;;;3125:21;;3040:114;;;:::o;30897:348::-;30990:4;31015:16;31023:7;31015;:16::i;:::-;31007:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31091:13;31107:23;31122:7;31107:14;:23::i;:::-;31091:39;;31160:5;31149:16;;:7;:16;;;:51;;;;31193:7;31169:31;;:20;31181:7;31169:11;:20::i;:::-;:31;;;31149:51;:87;;;;31204:32;31221:5;31228:7;31204:16;:32::i;:::-;31149:87;31141:96;;;30897:348;;;;:::o;33889:578::-;34048:4;34021:31;;:23;34036:7;34021:14;:23::i;:::-;:31;;;34013:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34131:1;34117:16;;:2;:16;;;;34109:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34187:39;34208:4;34214:2;34218:7;34187:20;:39::i;:::-;34291:29;34308:1;34312:7;34291:8;:29::i;:::-;34352:1;34333:9;:15;34343:4;34333:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34381:1;34364:9;:13;34374:2;34364:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34412:2;34393:7;:16;34401:7;34393:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34451:7;34447:2;34432:27;;34441:4;34432:27;;;;;;;;;;;;33889:578;;;:::o;908:190::-;1033:4;1086;1057:25;1070:5;1077:4;1057:12;:25::i;:::-;:33;1050:40;;908:190;;;;;:::o;44441:226::-;44525:9;44520:140;44544:11;44540:1;:15;44520:140;;;44577:18;:6;:16;:18::i;:::-;44610:38;44620:9;44631:16;:6;:14;:16::i;:::-;44610:9;:38::i;:::-;44557:3;;;;;:::i;:::-;;;;44520:140;;;;44441:226;;:::o;39617:191::-;39691:16;39710:6;;;;;;;;;;;39691:25;;39736:8;39727:6;;:17;;;;;;;;;;;;;;;;;;39791:8;39760:40;;39781:8;39760:40;;;;;;;;;;;;39680:128;39617:191;:::o;34901:315::-;35056:8;35047:17;;:5;:17;;;;35039:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35143:8;35105:18;:25;35124:5;35105:25;;;;;;;;;;;;;;;:35;35131:8;35105:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35189:8;35167:41;;35182:5;35167:41;;;35199:8;35167:41;;;;;;:::i;:::-;;;;;;;;34901:315;;;:::o;29975:::-;30132:28;30142:4;30148:2;30152:7;30132:9;:28::i;:::-;30179:48;30202:4;30208:2;30212:7;30221:5;30179:22;:48::i;:::-;30171:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29975:315;;;;:::o;45933:111::-;45993:13;46026:10;46019:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45933:111;:::o;3998:723::-;4054:13;4284:1;4275:5;:10;4271:53;;;4302:10;;;;;;;;;;;;;;;;;;;;;4271:53;4334:12;4349:5;4334:20;;4365:14;4390:78;4405:1;4397:4;:9;4390:78;;4423:8;;;;;:::i;:::-;;;;4454:2;4446:10;;;;;:::i;:::-;;;4390:78;;;4478:19;4510:6;4500:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4478:39;;4528:154;4544:1;4535:5;:10;4528:154;;4572:1;4562:11;;;;;:::i;:::-;;;4639:2;4631:5;:10;;;;:::i;:::-;4618:2;:24;;;;:::i;:::-;4605:39;;4588:6;4595;4588:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;4668:2;4659:11;;;;;:::i;:::-;;;4528:154;;;4706:6;4692:21;;;;;3998:723;;;;:::o;27868:164::-;27965:4;27989:18;:25;28008:5;27989:25;;;;;;;;;;;;;;;:35;28015:8;27989:35;;;;;;;;;;;;;;;;;;;;;;;;;27982:42;;27868:164;;;;:::o;37152:126::-;;;;:::o;1460:701::-;1543:7;1563:20;1586:4;1563:27;;1606:9;1601:523;1625:5;:12;1621:1;:16;1601:523;;;1659:20;1682:5;1688:1;1682:8;;;;;;;;:::i;:::-;;;;;;;;1659:31;;1725:12;1709;:28;1705:408;;1879:12;1893;1862:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1852:55;;;;;;1837:70;;1705:408;;;2069:12;2083;2052:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2042:55;;;;;;2027:70;;1705:408;1644:480;1639:3;;;;;:::i;:::-;;;;1601:523;;;;2141:12;2134:19;;;1460:701;;;;:::o;3162:127::-;3269:1;3251:7;:14;;;:19;;;;;;;;;;;3162:127;:::o;31587:110::-;31663:26;31673:2;31677:7;31663:26;;;;;;;;;;;;:9;:26::i;:::-;31587:110;;:::o;35781:799::-;35936:4;35957:15;:2;:13;;;:15::i;:::-;35953:620;;;36009:2;35993:36;;;36030:12;:10;:12::i;:::-;36044:4;36050:7;36059:5;35993:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35989:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36252:1;36235:6;:13;:18;36231:272;;;36278:60;;;;;;;;;;:::i;:::-;;;;;;;;36231:272;36453:6;36447:13;36438:6;36434:2;36430:15;36423:38;35989:529;36126:41;;;36116:51;;;:6;:51;;;;36109:58;;;;;35953:620;36557:4;36550:11;;35781:799;;;;;;;:::o;31924:321::-;32054:18;32060:2;32064:7;32054:5;:18::i;:::-;32105:54;32136:1;32140:2;32144:7;32153:5;32105:22;:54::i;:::-;32083:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31924:321;;;:::o;6577:387::-;6637:4;6845:12;6912:7;6900:20;6892:28;;6955:1;6948:4;:8;6941:15;;;6577:387;;;:::o;32581:382::-;32675:1;32661:16;;:2;:16;;;;32653:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32734:16;32742:7;32734;:16::i;:::-;32733:17;32725:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32796:45;32825:1;32829:2;32833:7;32796:20;:45::i;:::-;32871:1;32854:9;:13;32864:2;32854:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32902:2;32883:7;:16;32891:7;32883:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32947:7;32943:2;32922:33;;32939:1;32922:33;;;;;;;;;;;;32581:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:139::-;1762:5;1800:6;1787:20;1778:29;;1816:33;1843:5;1816:33;:::i;:::-;1716:139;;;;:::o;1861:137::-;1906:5;1944:6;1931:20;1922:29;;1960:32;1986:5;1960:32;:::i;:::-;1861:137;;;;:::o;2004:141::-;2060:5;2091:6;2085:13;2076:22;;2107:32;2133:5;2107:32;:::i;:::-;2004:141;;;;:::o;2164:338::-;2219:5;2268:3;2261:4;2253:6;2249:17;2245:27;2235:122;;2276:79;;:::i;:::-;2235:122;2393:6;2380:20;2418:78;2492:3;2484:6;2477:4;2469:6;2465:17;2418:78;:::i;:::-;2409:87;;2225:277;2164:338;;;;:::o;2508:201::-;2594:5;2625:6;2619:13;2610:22;;2641:62;2697:5;2641:62;:::i;:::-;2508:201;;;;:::o;2729:340::-;2785:5;2834:3;2827:4;2819:6;2815:17;2811:27;2801:122;;2842:79;;:::i;:::-;2801:122;2959:6;2946:20;2984:79;3059:3;3051:6;3044:4;3036:6;3032:17;2984:79;:::i;:::-;2975:88;;2791:278;2729:340;;;;:::o;3075:139::-;3121:5;3159:6;3146:20;3137:29;;3175:33;3202:5;3175:33;:::i;:::-;3075:139;;;;:::o;3220:329::-;3279:6;3328:2;3316:9;3307:7;3303:23;3299:32;3296:119;;;3334:79;;:::i;:::-;3296:119;3454:1;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3425:117;3220:329;;;;:::o;3555:474::-;3623:6;3631;3680:2;3668:9;3659:7;3655:23;3651:32;3648:119;;;3686:79;;:::i;:::-;3648:119;3806:1;3831:53;3876:7;3867:6;3856:9;3852:22;3831:53;:::i;:::-;3821:63;;3777:117;3933:2;3959:53;4004:7;3995:6;3984:9;3980:22;3959:53;:::i;:::-;3949:63;;3904:118;3555:474;;;;;:::o;4035:619::-;4112:6;4120;4128;4177:2;4165:9;4156:7;4152:23;4148:32;4145:119;;;4183:79;;:::i;:::-;4145:119;4303:1;4328:53;4373:7;4364:6;4353:9;4349:22;4328:53;:::i;:::-;4318:63;;4274:117;4430:2;4456:53;4501:7;4492:6;4481:9;4477:22;4456:53;:::i;:::-;4446:63;;4401:118;4558:2;4584:53;4629:7;4620:6;4609:9;4605:22;4584:53;:::i;:::-;4574:63;;4529:118;4035:619;;;;;:::o;4660:943::-;4755:6;4763;4771;4779;4828:3;4816:9;4807:7;4803:23;4799:33;4796:120;;;4835:79;;:::i;:::-;4796:120;4955:1;4980:53;5025:7;5016:6;5005:9;5001:22;4980:53;:::i;:::-;4970:63;;4926:117;5082:2;5108:53;5153:7;5144:6;5133:9;5129:22;5108:53;:::i;:::-;5098:63;;5053:118;5210:2;5236:53;5281:7;5272:6;5261:9;5257:22;5236:53;:::i;:::-;5226:63;;5181:118;5366:2;5355:9;5351:18;5338:32;5397:18;5389:6;5386:30;5383:117;;;5419:79;;:::i;:::-;5383:117;5524:62;5578:7;5569:6;5558:9;5554:22;5524:62;:::i;:::-;5514:72;;5309:287;4660:943;;;;;;;:::o;5609:468::-;5674:6;5682;5731:2;5719:9;5710:7;5706:23;5702:32;5699:119;;;5737:79;;:::i;:::-;5699:119;5857:1;5882:53;5927:7;5918:6;5907:9;5903:22;5882:53;:::i;:::-;5872:63;;5828:117;5984:2;6010:50;6052:7;6043:6;6032:9;6028:22;6010:50;:::i;:::-;6000:60;;5955:115;5609:468;;;;;:::o;6083:474::-;6151:6;6159;6208:2;6196:9;6187:7;6183:23;6179:32;6176:119;;;6214:79;;:::i;:::-;6176:119;6334:1;6359:53;6404:7;6395:6;6384:9;6380:22;6359:53;:::i;:::-;6349:63;;6305:117;6461:2;6487:53;6532:7;6523:6;6512:9;6508:22;6487:53;:::i;:::-;6477:63;;6432:118;6083:474;;;;;:::o;6563:849::-;6667:6;6675;6683;6691;6740:2;6728:9;6719:7;6715:23;6711:32;6708:119;;;6746:79;;:::i;:::-;6708:119;6866:1;6891:53;6936:7;6927:6;6916:9;6912:22;6891:53;:::i;:::-;6881:63;;6837:117;6993:2;7019:53;7064:7;7055:6;7044:9;7040:22;7019:53;:::i;:::-;7009:63;;6964:118;7149:2;7138:9;7134:18;7121:32;7180:18;7172:6;7169:30;7166:117;;;7202:79;;:::i;:::-;7166:117;7315:80;7387:7;7378:6;7367:9;7363:22;7315:80;:::i;:::-;7297:98;;;;7092:313;6563:849;;;;;;;:::o;7418:323::-;7474:6;7523:2;7511:9;7502:7;7498:23;7494:32;7491:119;;;7529:79;;:::i;:::-;7491:119;7649:1;7674:50;7716:7;7707:6;7696:9;7692:22;7674:50;:::i;:::-;7664:60;;7620:114;7418:323;;;;:::o;7747:329::-;7806:6;7855:2;7843:9;7834:7;7830:23;7826:32;7823:119;;;7861:79;;:::i;:::-;7823:119;7981:1;8006:53;8051:7;8042:6;8031:9;8027:22;8006:53;:::i;:::-;7996:63;;7952:117;7747:329;;;;:::o;8082:327::-;8140:6;8189:2;8177:9;8168:7;8164:23;8160:32;8157:119;;;8195:79;;:::i;:::-;8157:119;8315:1;8340:52;8384:7;8375:6;8364:9;8360:22;8340:52;:::i;:::-;8330:62;;8286:116;8082:327;;;;:::o;8415:349::-;8484:6;8533:2;8521:9;8512:7;8508:23;8504:32;8501:119;;;8539:79;;:::i;:::-;8501:119;8659:1;8684:63;8739:7;8730:6;8719:9;8715:22;8684:63;:::i;:::-;8674:73;;8630:127;8415:349;;;;:::o;8770:409::-;8869:6;8918:2;8906:9;8897:7;8893:23;8889:32;8886:119;;;8924:79;;:::i;:::-;8886:119;9044:1;9069:93;9154:7;9145:6;9134:9;9130:22;9069:93;:::i;:::-;9059:103;;9015:157;8770:409;;;;:::o;9185:509::-;9254:6;9303:2;9291:9;9282:7;9278:23;9274:32;9271:119;;;9309:79;;:::i;:::-;9271:119;9457:1;9446:9;9442:17;9429:31;9487:18;9479:6;9476:30;9473:117;;;9509:79;;:::i;:::-;9473:117;9614:63;9669:7;9660:6;9649:9;9645:22;9614:63;:::i;:::-;9604:73;;9400:287;9185:509;;;;:::o;9700:329::-;9759:6;9808:2;9796:9;9787:7;9783:23;9779:32;9776:119;;;9814:79;;:::i;:::-;9776:119;9934:1;9959:53;10004:7;9995:6;9984:9;9980:22;9959:53;:::i;:::-;9949:63;;9905:117;9700:329;;;;:::o;10035:474::-;10103:6;10111;10160:2;10148:9;10139:7;10135:23;10131:32;10128:119;;;10166:79;;:::i;:::-;10128:119;10286:1;10311:53;10356:7;10347:6;10336:9;10332:22;10311:53;:::i;:::-;10301:63;;10257:117;10413:2;10439:53;10484:7;10475:6;10464:9;10460:22;10439:53;:::i;:::-;10429:63;;10384:118;10035:474;;;;;:::o;10515:179::-;10584:10;10605:46;10647:3;10639:6;10605:46;:::i;:::-;10683:4;10678:3;10674:14;10660:28;;10515:179;;;;:::o;10700:118::-;10787:24;10805:5;10787:24;:::i;:::-;10782:3;10775:37;10700:118;;:::o;10824:157::-;10929:45;10949:24;10967:5;10949:24;:::i;:::-;10929:45;:::i;:::-;10924:3;10917:58;10824:157;;:::o;11017:732::-;11136:3;11165:54;11213:5;11165:54;:::i;:::-;11235:86;11314:6;11309:3;11235:86;:::i;:::-;11228:93;;11345:56;11395:5;11345:56;:::i;:::-;11424:7;11455:1;11440:284;11465:6;11462:1;11459:13;11440:284;;;11541:6;11535:13;11568:63;11627:3;11612:13;11568:63;:::i;:::-;11561:70;;11654:60;11707:6;11654:60;:::i;:::-;11644:70;;11500:224;11487:1;11484;11480:9;11475:14;;11440:284;;;11444:14;11740:3;11733:10;;11141:608;;;11017:732;;;;:::o;11755:109::-;11836:21;11851:5;11836:21;:::i;:::-;11831:3;11824:34;11755:109;;:::o;11870:118::-;11957:24;11975:5;11957:24;:::i;:::-;11952:3;11945:37;11870:118;;:::o;11994:157::-;12099:45;12119:24;12137:5;12119:24;:::i;:::-;12099:45;:::i;:::-;12094:3;12087:58;11994:157;;:::o;12157:360::-;12243:3;12271:38;12303:5;12271:38;:::i;:::-;12325:70;12388:6;12383:3;12325:70;:::i;:::-;12318:77;;12404:52;12449:6;12444:3;12437:4;12430:5;12426:16;12404:52;:::i;:::-;12481:29;12503:6;12481:29;:::i;:::-;12476:3;12472:39;12465:46;;12247:270;12157:360;;;;:::o;12523:364::-;12611:3;12639:39;12672:5;12639:39;:::i;:::-;12694:71;12758:6;12753:3;12694:71;:::i;:::-;12687:78;;12774:52;12819:6;12814:3;12807:4;12800:5;12796:16;12774:52;:::i;:::-;12851:29;12873:6;12851:29;:::i;:::-;12846:3;12842:39;12835:46;;12615:272;12523:364;;;;:::o;12893:377::-;12999:3;13027:39;13060:5;13027:39;:::i;:::-;13082:89;13164:6;13159:3;13082:89;:::i;:::-;13075:96;;13180:52;13225:6;13220:3;13213:4;13206:5;13202:16;13180:52;:::i;:::-;13257:6;13252:3;13248:16;13241:23;;13003:267;12893:377;;;;:::o;13300:845::-;13403:3;13440:5;13434:12;13469:36;13495:9;13469:36;:::i;:::-;13521:89;13603:6;13598:3;13521:89;:::i;:::-;13514:96;;13641:1;13630:9;13626:17;13657:1;13652:137;;;;13803:1;13798:341;;;;13619:520;;13652:137;13736:4;13732:9;13721;13717:25;13712:3;13705:38;13772:6;13767:3;13763:16;13756:23;;13652:137;;13798:341;13865:38;13897:5;13865:38;:::i;:::-;13925:1;13939:154;13953:6;13950:1;13947:13;13939:154;;;14027:7;14021:14;14017:1;14012:3;14008:11;14001:35;14077:1;14068:7;14064:15;14053:26;;13975:4;13972:1;13968:12;13963:17;;13939:154;;;14122:6;14117:3;14113:16;14106:23;;13805:334;;13619:520;;13407:738;;13300:845;;;;:::o;14151:366::-;14293:3;14314:67;14378:2;14373:3;14314:67;:::i;:::-;14307:74;;14390:93;14479:3;14390:93;:::i;:::-;14508:2;14503:3;14499:12;14492:19;;14151:366;;;:::o;14523:::-;14665:3;14686:67;14750:2;14745:3;14686:67;:::i;:::-;14679:74;;14762:93;14851:3;14762:93;:::i;:::-;14880:2;14875:3;14871:12;14864:19;;14523:366;;;:::o;14895:::-;15037:3;15058:67;15122:2;15117:3;15058:67;:::i;:::-;15051:74;;15134:93;15223:3;15134:93;:::i;:::-;15252:2;15247:3;15243:12;15236:19;;14895:366;;;:::o;15267:::-;15409:3;15430:67;15494:2;15489:3;15430:67;:::i;:::-;15423:74;;15506:93;15595:3;15506:93;:::i;:::-;15624:2;15619:3;15615:12;15608:19;;15267:366;;;:::o;15639:::-;15781:3;15802:67;15866:2;15861:3;15802:67;:::i;:::-;15795:74;;15878:93;15967:3;15878:93;:::i;:::-;15996:2;15991:3;15987:12;15980:19;;15639:366;;;:::o;16011:::-;16153:3;16174:67;16238:2;16233:3;16174:67;:::i;:::-;16167:74;;16250:93;16339:3;16250:93;:::i;:::-;16368:2;16363:3;16359:12;16352:19;;16011:366;;;:::o;16383:::-;16525:3;16546:67;16610:2;16605:3;16546:67;:::i;:::-;16539:74;;16622:93;16711:3;16622:93;:::i;:::-;16740:2;16735:3;16731:12;16724:19;;16383:366;;;:::o;16755:::-;16897:3;16918:67;16982:2;16977:3;16918:67;:::i;:::-;16911:74;;16994:93;17083:3;16994:93;:::i;:::-;17112:2;17107:3;17103:12;17096:19;;16755:366;;;:::o;17127:::-;17269:3;17290:67;17354:2;17349:3;17290:67;:::i;:::-;17283:74;;17366:93;17455:3;17366:93;:::i;:::-;17484:2;17479:3;17475:12;17468:19;;17127:366;;;:::o;17499:::-;17641:3;17662:67;17726:2;17721:3;17662:67;:::i;:::-;17655:74;;17738:93;17827:3;17738:93;:::i;:::-;17856:2;17851:3;17847:12;17840:19;;17499:366;;;:::o;17871:::-;18013:3;18034:67;18098:2;18093:3;18034:67;:::i;:::-;18027:74;;18110:93;18199:3;18110:93;:::i;:::-;18228:2;18223:3;18219:12;18212:19;;17871:366;;;:::o;18243:::-;18385:3;18406:67;18470:2;18465:3;18406:67;:::i;:::-;18399:74;;18482:93;18571:3;18482:93;:::i;:::-;18600:2;18595:3;18591:12;18584:19;;18243:366;;;:::o;18615:::-;18757:3;18778:67;18842:2;18837:3;18778:67;:::i;:::-;18771:74;;18854:93;18943:3;18854:93;:::i;:::-;18972:2;18967:3;18963:12;18956:19;;18615:366;;;:::o;18987:::-;19129:3;19150:67;19214:2;19209:3;19150:67;:::i;:::-;19143:74;;19226:93;19315:3;19226:93;:::i;:::-;19344:2;19339:3;19335:12;19328:19;;18987:366;;;:::o;19359:::-;19501:3;19522:67;19586:2;19581:3;19522:67;:::i;:::-;19515:74;;19598:93;19687:3;19598:93;:::i;:::-;19716:2;19711:3;19707:12;19700:19;;19359:366;;;:::o;19731:::-;19873:3;19894:67;19958:2;19953:3;19894:67;:::i;:::-;19887:74;;19970:93;20059:3;19970:93;:::i;:::-;20088:2;20083:3;20079:12;20072:19;;19731:366;;;:::o;20103:::-;20245:3;20266:67;20330:2;20325:3;20266:67;:::i;:::-;20259:74;;20342:93;20431:3;20342:93;:::i;:::-;20460:2;20455:3;20451:12;20444:19;;20103:366;;;:::o;20475:::-;20617:3;20638:67;20702:2;20697:3;20638:67;:::i;:::-;20631:74;;20714:93;20803:3;20714:93;:::i;:::-;20832:2;20827:3;20823:12;20816:19;;20475:366;;;:::o;20847:::-;20989:3;21010:67;21074:2;21069:3;21010:67;:::i;:::-;21003:74;;21086:93;21175:3;21086:93;:::i;:::-;21204:2;21199:3;21195:12;21188:19;;20847:366;;;:::o;21219:::-;21361:3;21382:67;21446:2;21441:3;21382:67;:::i;:::-;21375:74;;21458:93;21547:3;21458:93;:::i;:::-;21576:2;21571:3;21567:12;21560:19;;21219:366;;;:::o;21591:::-;21733:3;21754:67;21818:2;21813:3;21754:67;:::i;:::-;21747:74;;21830:93;21919:3;21830:93;:::i;:::-;21948:2;21943:3;21939:12;21932:19;;21591:366;;;:::o;21963:398::-;22122:3;22143:83;22224:1;22219:3;22143:83;:::i;:::-;22136:90;;22235:93;22324:3;22235:93;:::i;:::-;22353:1;22348:3;22344:11;22337:18;;21963:398;;;:::o;22367:366::-;22509:3;22530:67;22594:2;22589:3;22530:67;:::i;:::-;22523:74;;22606:93;22695:3;22606:93;:::i;:::-;22724:2;22719:3;22715:12;22708:19;;22367:366;;;:::o;22739:::-;22881:3;22902:67;22966:2;22961:3;22902:67;:::i;:::-;22895:74;;22978:93;23067:3;22978:93;:::i;:::-;23096:2;23091:3;23087:12;23080:19;;22739:366;;;:::o;23111:::-;23253:3;23274:67;23338:2;23333:3;23274:67;:::i;:::-;23267:74;;23350:93;23439:3;23350:93;:::i;:::-;23468:2;23463:3;23459:12;23452:19;;23111:366;;;:::o;23483:::-;23625:3;23646:67;23710:2;23705:3;23646:67;:::i;:::-;23639:74;;23722:93;23811:3;23722:93;:::i;:::-;23840:2;23835:3;23831:12;23824:19;;23483:366;;;:::o;23855:::-;23997:3;24018:67;24082:2;24077:3;24018:67;:::i;:::-;24011:74;;24094:93;24183:3;24094:93;:::i;:::-;24212:2;24207:3;24203:12;24196:19;;23855:366;;;:::o;24227:108::-;24304:24;24322:5;24304:24;:::i;:::-;24299:3;24292:37;24227:108;;:::o;24341:118::-;24428:24;24446:5;24428:24;:::i;:::-;24423:3;24416:37;24341:118;;:::o;24465:157::-;24570:45;24590:24;24608:5;24590:24;:::i;:::-;24570:45;:::i;:::-;24565:3;24558:58;24465:157;;:::o;24628:397::-;24768:3;24783:75;24854:3;24845:6;24783:75;:::i;:::-;24883:2;24878:3;24874:12;24867:19;;24896:75;24967:3;24958:6;24896:75;:::i;:::-;24996:2;24991:3;24987:12;24980:19;;25016:3;25009:10;;24628:397;;;;;:::o;25031:::-;25171:3;25186:75;25257:3;25248:6;25186:75;:::i;:::-;25286:2;25281:3;25277:12;25270:19;;25299:75;25370:3;25361:6;25299:75;:::i;:::-;25399:2;25394:3;25390:12;25383:19;;25419:3;25412:10;;25031:397;;;;;:::o;25434:589::-;25659:3;25681:95;25772:3;25763:6;25681:95;:::i;:::-;25674:102;;25793:95;25884:3;25875:6;25793:95;:::i;:::-;25786:102;;25905:92;25993:3;25984:6;25905:92;:::i;:::-;25898:99;;26014:3;26007:10;;25434:589;;;;;;:::o;26029:379::-;26213:3;26235:147;26378:3;26235:147;:::i;:::-;26228:154;;26399:3;26392:10;;26029:379;;;:::o;26414:222::-;26507:4;26545:2;26534:9;26530:18;26522:26;;26558:71;26626:1;26615:9;26611:17;26602:6;26558:71;:::i;:::-;26414:222;;;;:::o;26642:640::-;26837:4;26875:3;26864:9;26860:19;26852:27;;26889:71;26957:1;26946:9;26942:17;26933:6;26889:71;:::i;:::-;26970:72;27038:2;27027:9;27023:18;27014:6;26970:72;:::i;:::-;27052;27120:2;27109:9;27105:18;27096:6;27052:72;:::i;:::-;27171:9;27165:4;27161:20;27156:2;27145:9;27141:18;27134:48;27199:76;27270:4;27261:6;27199:76;:::i;:::-;27191:84;;26642:640;;;;;;;:::o;27288:373::-;27431:4;27469:2;27458:9;27454:18;27446:26;;27518:9;27512:4;27508:20;27504:1;27493:9;27489:17;27482:47;27546:108;27649:4;27640:6;27546:108;:::i;:::-;27538:116;;27288:373;;;;:::o;27667:210::-;27754:4;27792:2;27781:9;27777:18;27769:26;;27805:65;27867:1;27856:9;27852:17;27843:6;27805:65;:::i;:::-;27667:210;;;;:::o;27883:222::-;27976:4;28014:2;28003:9;27999:18;27991:26;;28027:71;28095:1;28084:9;28080:17;28071:6;28027:71;:::i;:::-;27883:222;;;;:::o;28111:313::-;28224:4;28262:2;28251:9;28247:18;28239:26;;28311:9;28305:4;28301:20;28297:1;28286:9;28282:17;28275:47;28339:78;28412:4;28403:6;28339:78;:::i;:::-;28331:86;;28111:313;;;;:::o;28430:419::-;28596:4;28634:2;28623:9;28619:18;28611:26;;28683:9;28677:4;28673:20;28669:1;28658:9;28654:17;28647:47;28711:131;28837:4;28711:131;:::i;:::-;28703:139;;28430:419;;;:::o;28855:::-;29021:4;29059:2;29048:9;29044:18;29036:26;;29108:9;29102:4;29098:20;29094:1;29083:9;29079:17;29072:47;29136:131;29262:4;29136:131;:::i;:::-;29128:139;;28855:419;;;:::o;29280:::-;29446:4;29484:2;29473:9;29469:18;29461:26;;29533:9;29527:4;29523:20;29519:1;29508:9;29504:17;29497:47;29561:131;29687:4;29561:131;:::i;:::-;29553:139;;29280:419;;;:::o;29705:::-;29871:4;29909:2;29898:9;29894:18;29886:26;;29958:9;29952:4;29948:20;29944:1;29933:9;29929:17;29922:47;29986:131;30112:4;29986:131;:::i;:::-;29978:139;;29705:419;;;:::o;30130:::-;30296:4;30334:2;30323:9;30319:18;30311:26;;30383:9;30377:4;30373:20;30369:1;30358:9;30354:17;30347:47;30411:131;30537:4;30411:131;:::i;:::-;30403:139;;30130:419;;;:::o;30555:::-;30721:4;30759:2;30748:9;30744:18;30736:26;;30808:9;30802:4;30798:20;30794:1;30783:9;30779:17;30772:47;30836:131;30962:4;30836:131;:::i;:::-;30828:139;;30555:419;;;:::o;30980:::-;31146:4;31184:2;31173:9;31169:18;31161:26;;31233:9;31227:4;31223:20;31219:1;31208:9;31204:17;31197:47;31261:131;31387:4;31261:131;:::i;:::-;31253:139;;30980:419;;;:::o;31405:::-;31571:4;31609:2;31598:9;31594:18;31586:26;;31658:9;31652:4;31648:20;31644:1;31633:9;31629:17;31622:47;31686:131;31812:4;31686:131;:::i;:::-;31678:139;;31405:419;;;:::o;31830:::-;31996:4;32034:2;32023:9;32019:18;32011:26;;32083:9;32077:4;32073:20;32069:1;32058:9;32054:17;32047:47;32111:131;32237:4;32111:131;:::i;:::-;32103:139;;31830:419;;;:::o;32255:::-;32421:4;32459:2;32448:9;32444:18;32436:26;;32508:9;32502:4;32498:20;32494:1;32483:9;32479:17;32472:47;32536:131;32662:4;32536:131;:::i;:::-;32528:139;;32255:419;;;:::o;32680:::-;32846:4;32884:2;32873:9;32869:18;32861:26;;32933:9;32927:4;32923:20;32919:1;32908:9;32904:17;32897:47;32961:131;33087:4;32961:131;:::i;:::-;32953:139;;32680:419;;;:::o;33105:::-;33271:4;33309:2;33298:9;33294:18;33286:26;;33358:9;33352:4;33348:20;33344:1;33333:9;33329:17;33322:47;33386:131;33512:4;33386:131;:::i;:::-;33378:139;;33105:419;;;:::o;33530:::-;33696:4;33734:2;33723:9;33719:18;33711:26;;33783:9;33777:4;33773:20;33769:1;33758:9;33754:17;33747:47;33811:131;33937:4;33811:131;:::i;:::-;33803:139;;33530:419;;;:::o;33955:::-;34121:4;34159:2;34148:9;34144:18;34136:26;;34208:9;34202:4;34198:20;34194:1;34183:9;34179:17;34172:47;34236:131;34362:4;34236:131;:::i;:::-;34228:139;;33955:419;;;:::o;34380:::-;34546:4;34584:2;34573:9;34569:18;34561:26;;34633:9;34627:4;34623:20;34619:1;34608:9;34604:17;34597:47;34661:131;34787:4;34661:131;:::i;:::-;34653:139;;34380:419;;;:::o;34805:::-;34971:4;35009:2;34998:9;34994:18;34986:26;;35058:9;35052:4;35048:20;35044:1;35033:9;35029:17;35022:47;35086:131;35212:4;35086:131;:::i;:::-;35078:139;;34805:419;;;:::o;35230:::-;35396:4;35434:2;35423:9;35419:18;35411:26;;35483:9;35477:4;35473:20;35469:1;35458:9;35454:17;35447:47;35511:131;35637:4;35511:131;:::i;:::-;35503:139;;35230:419;;;:::o;35655:::-;35821:4;35859:2;35848:9;35844:18;35836:26;;35908:9;35902:4;35898:20;35894:1;35883:9;35879:17;35872:47;35936:131;36062:4;35936:131;:::i;:::-;35928:139;;35655:419;;;:::o;36080:::-;36246:4;36284:2;36273:9;36269:18;36261:26;;36333:9;36327:4;36323:20;36319:1;36308:9;36304:17;36297:47;36361:131;36487:4;36361:131;:::i;:::-;36353:139;;36080:419;;;:::o;36505:::-;36671:4;36709:2;36698:9;36694:18;36686:26;;36758:9;36752:4;36748:20;36744:1;36733:9;36729:17;36722:47;36786:131;36912:4;36786:131;:::i;:::-;36778:139;;36505:419;;;:::o;36930:::-;37096:4;37134:2;37123:9;37119:18;37111:26;;37183:9;37177:4;37173:20;37169:1;37158:9;37154:17;37147:47;37211:131;37337:4;37211:131;:::i;:::-;37203:139;;36930:419;;;:::o;37355:::-;37521:4;37559:2;37548:9;37544:18;37536:26;;37608:9;37602:4;37598:20;37594:1;37583:9;37579:17;37572:47;37636:131;37762:4;37636:131;:::i;:::-;37628:139;;37355:419;;;:::o;37780:::-;37946:4;37984:2;37973:9;37969:18;37961:26;;38033:9;38027:4;38023:20;38019:1;38008:9;38004:17;37997:47;38061:131;38187:4;38061:131;:::i;:::-;38053:139;;37780:419;;;:::o;38205:::-;38371:4;38409:2;38398:9;38394:18;38386:26;;38458:9;38452:4;38448:20;38444:1;38433:9;38429:17;38422:47;38486:131;38612:4;38486:131;:::i;:::-;38478:139;;38205:419;;;:::o;38630:::-;38796:4;38834:2;38823:9;38819:18;38811:26;;38883:9;38877:4;38873:20;38869:1;38858:9;38854:17;38847:47;38911:131;39037:4;38911:131;:::i;:::-;38903:139;;38630:419;;;:::o;39055:::-;39221:4;39259:2;39248:9;39244:18;39236:26;;39308:9;39302:4;39298:20;39294:1;39283:9;39279:17;39272:47;39336:131;39462:4;39336:131;:::i;:::-;39328:139;;39055:419;;;:::o;39480:222::-;39573:4;39611:2;39600:9;39596:18;39588:26;;39624:71;39692:1;39681:9;39677:17;39668:6;39624:71;:::i;:::-;39480:222;;;;:::o;39708:129::-;39742:6;39769:20;;:::i;:::-;39759:30;;39798:33;39826:4;39818:6;39798:33;:::i;:::-;39708:129;;;:::o;39843:75::-;39876:6;39909:2;39903:9;39893:19;;39843:75;:::o;39924:307::-;39985:4;40075:18;40067:6;40064:30;40061:56;;;40097:18;;:::i;:::-;40061:56;40135:29;40157:6;40135:29;:::i;:::-;40127:37;;40219:4;40213;40209:15;40201:23;;39924:307;;;:::o;40237:308::-;40299:4;40389:18;40381:6;40378:30;40375:56;;;40411:18;;:::i;:::-;40375:56;40449:29;40471:6;40449:29;:::i;:::-;40441:37;;40533:4;40527;40523:15;40515:23;;40237:308;;;:::o;40551:132::-;40618:4;40641:3;40633:11;;40671:4;40666:3;40662:14;40654:22;;40551:132;;;:::o;40689:141::-;40738:4;40761:3;40753:11;;40784:3;40781:1;40774:14;40818:4;40815:1;40805:18;40797:26;;40689:141;;;:::o;40836:114::-;40903:6;40937:5;40931:12;40921:22;;40836:114;;;:::o;40956:98::-;41007:6;41041:5;41035:12;41025:22;;40956:98;;;:::o;41060:99::-;41112:6;41146:5;41140:12;41130:22;;41060:99;;;:::o;41165:113::-;41235:4;41267;41262:3;41258:14;41250:22;;41165:113;;;:::o;41284:184::-;41383:11;41417:6;41412:3;41405:19;41457:4;41452:3;41448:14;41433:29;;41284:184;;;;:::o;41474:168::-;41557:11;41591:6;41586:3;41579:19;41631:4;41626:3;41622:14;41607:29;;41474:168;;;;:::o;41648:147::-;41749:11;41786:3;41771:18;;41648:147;;;;:::o;41801:169::-;41885:11;41919:6;41914:3;41907:19;41959:4;41954:3;41950:14;41935:29;;41801:169;;;;:::o;41976:148::-;42078:11;42115:3;42100:18;;41976:148;;;;:::o;42130:305::-;42170:3;42189:20;42207:1;42189:20;:::i;:::-;42184:25;;42223:20;42241:1;42223:20;:::i;:::-;42218:25;;42377:1;42309:66;42305:74;42302:1;42299:81;42296:107;;;42383:18;;:::i;:::-;42296:107;42427:1;42424;42420:9;42413:16;;42130:305;;;;:::o;42441:185::-;42481:1;42498:20;42516:1;42498:20;:::i;:::-;42493:25;;42532:20;42550:1;42532:20;:::i;:::-;42527:25;;42571:1;42561:35;;42576:18;;:::i;:::-;42561:35;42618:1;42615;42611:9;42606:14;;42441:185;;;;:::o;42632:348::-;42672:7;42695:20;42713:1;42695:20;:::i;:::-;42690:25;;42729:20;42747:1;42729:20;:::i;:::-;42724:25;;42917:1;42849:66;42845:74;42842:1;42839:81;42834:1;42827:9;42820:17;42816:105;42813:131;;;42924:18;;:::i;:::-;42813:131;42972:1;42969;42965:9;42954:20;;42632:348;;;;:::o;42986:191::-;43026:4;43046:20;43064:1;43046:20;:::i;:::-;43041:25;;43080:20;43098:1;43080:20;:::i;:::-;43075:25;;43119:1;43116;43113:8;43110:34;;;43124:18;;:::i;:::-;43110:34;43169:1;43166;43162:9;43154:17;;42986:191;;;;:::o;43183:96::-;43220:7;43249:24;43267:5;43249:24;:::i;:::-;43238:35;;43183:96;;;:::o;43285:90::-;43319:7;43362:5;43355:13;43348:21;43337:32;;43285:90;;;:::o;43381:77::-;43418:7;43447:5;43436:16;;43381:77;;;:::o;43464:149::-;43500:7;43540:66;43533:5;43529:78;43518:89;;43464:149;;;:::o;43619:125::-;43685:7;43714:24;43732:5;43714:24;:::i;:::-;43703:35;;43619:125;;;:::o;43750:126::-;43787:7;43827:42;43820:5;43816:54;43805:65;;43750:126;;;:::o;43882:77::-;43919:7;43948:5;43937:16;;43882:77;;;:::o;43965:154::-;44049:6;44044:3;44039;44026:30;44111:1;44102:6;44097:3;44093:16;44086:27;43965:154;;;:::o;44125:307::-;44193:1;44203:113;44217:6;44214:1;44211:13;44203:113;;;44302:1;44297:3;44293:11;44287:18;44283:1;44278:3;44274:11;44267:39;44239:2;44236:1;44232:10;44227:15;;44203:113;;;44334:6;44331:1;44328:13;44325:101;;;44414:1;44405:6;44400:3;44396:16;44389:27;44325:101;44174:258;44125:307;;;:::o;44438:320::-;44482:6;44519:1;44513:4;44509:12;44499:22;;44566:1;44560:4;44556:12;44587:18;44577:81;;44643:4;44635:6;44631:17;44621:27;;44577:81;44705:2;44697:6;44694:14;44674:18;44671:38;44668:84;;;44724:18;;:::i;:::-;44668:84;44489:269;44438:320;;;:::o;44764:281::-;44847:27;44869:4;44847:27;:::i;:::-;44839:6;44835:40;44977:6;44965:10;44962:22;44941:18;44929:10;44926:34;44923:62;44920:88;;;44988:18;;:::i;:::-;44920:88;45028:10;45024:2;45017:22;44807:238;44764:281;;:::o;45051:233::-;45090:3;45113:24;45131:5;45113:24;:::i;:::-;45104:33;;45159:66;45152:5;45149:77;45146:103;;;45229:18;;:::i;:::-;45146:103;45276:1;45269:5;45265:13;45258:20;;45051:233;;;:::o;45290:100::-;45329:7;45358:26;45378:5;45358:26;:::i;:::-;45347:37;;45290:100;;;:::o;45396:79::-;45435:7;45464:5;45453:16;;45396:79;;;:::o;45481:94::-;45520:7;45549:20;45563:5;45549:20;:::i;:::-;45538:31;;45481:94;;;:::o;45581:79::-;45620:7;45649:5;45638:16;;45581:79;;;:::o;45666:176::-;45698:1;45715:20;45733:1;45715:20;:::i;:::-;45710:25;;45749:20;45767:1;45749:20;:::i;:::-;45744:25;;45788:1;45778:35;;45793:18;;:::i;:::-;45778:35;45834:1;45831;45827:9;45822:14;;45666:176;;;;:::o;45848:180::-;45896:77;45893:1;45886:88;45993:4;45990:1;45983:15;46017:4;46014:1;46007:15;46034:180;46082:77;46079:1;46072:88;46179:4;46176:1;46169:15;46203:4;46200:1;46193:15;46220:180;46268:77;46265:1;46258:88;46365:4;46362:1;46355:15;46389:4;46386:1;46379:15;46406:180;46454:77;46451:1;46444:88;46551:4;46548:1;46541:15;46575:4;46572:1;46565:15;46592:180;46640:77;46637:1;46630:88;46737:4;46734:1;46727:15;46761:4;46758:1;46751:15;46778:117;46887:1;46884;46877:12;46901:117;47010:1;47007;47000:12;47024:117;47133:1;47130;47123:12;47147:117;47256:1;47253;47246:12;47270:117;47379:1;47376;47369:12;47393:117;47502:1;47499;47492:12;47516:102;47557:6;47608:2;47604:7;47599:2;47592:5;47588:14;47584:28;47574:38;;47516:102;;;:::o;47624:94::-;47657:8;47705:5;47701:2;47697:14;47676:35;;47624:94;;;:::o;47724:237::-;47864:34;47860:1;47852:6;47848:14;47841:58;47933:20;47928:2;47920:6;47916:15;47909:45;47724:237;:::o;47967:225::-;48107:34;48103:1;48095:6;48091:14;48084:58;48176:8;48171:2;48163:6;48159:15;48152:33;47967:225;:::o;48198:181::-;48338:33;48334:1;48326:6;48322:14;48315:57;48198:181;:::o;48385:178::-;48525:30;48521:1;48513:6;48509:14;48502:54;48385:178;:::o;48569:180::-;48709:32;48705:1;48697:6;48693:14;48686:56;48569:180;:::o;48755:223::-;48895:34;48891:1;48883:6;48879:14;48872:58;48964:6;48959:2;48951:6;48947:15;48940:31;48755:223;:::o;48984:175::-;49124:27;49120:1;49112:6;49108:14;49101:51;48984:175;:::o;49165:231::-;49305:34;49301:1;49293:6;49289:14;49282:58;49374:14;49369:2;49361:6;49357:15;49350:39;49165:231;:::o;49402:243::-;49542:34;49538:1;49530:6;49526:14;49519:58;49611:26;49606:2;49598:6;49594:15;49587:51;49402:243;:::o;49651:229::-;49791:34;49787:1;49779:6;49775:14;49768:58;49860:12;49855:2;49847:6;49843:15;49836:37;49651:229;:::o;49886:228::-;50026:34;50022:1;50014:6;50010:14;50003:58;50095:11;50090:2;50082:6;50078:15;50071:36;49886:228;:::o;50120:177::-;50260:29;50256:1;50248:6;50244:14;50237:53;50120:177;:::o;50303:182::-;50443:34;50439:1;50431:6;50427:14;50420:58;50303:182;:::o;50491:231::-;50631:34;50627:1;50619:6;50615:14;50608:58;50700:14;50695:2;50687:6;50683:15;50676:39;50491:231;:::o;50728:179::-;50868:31;50864:1;50856:6;50852:14;50845:55;50728:179;:::o;50913:170::-;51053:22;51049:1;51041:6;51037:14;51030:46;50913:170;:::o;51089:182::-;51229:34;51225:1;51217:6;51213:14;51206:58;51089:182;:::o;51277:228::-;51417:34;51413:1;51405:6;51401:14;51394:58;51486:11;51481:2;51473:6;51469:15;51462:36;51277:228;:::o;51511:220::-;51651:34;51647:1;51639:6;51635:14;51628:58;51720:3;51715:2;51707:6;51703:15;51696:28;51511:220;:::o;51737:169::-;51877:21;51873:1;51865:6;51861:14;51854:45;51737:169;:::o;51912:174::-;52052:26;52048:1;52040:6;52036:14;52029:50;51912:174;:::o;52092:114::-;;:::o;52212:173::-;52352:25;52348:1;52340:6;52336:14;52329:49;52212:173;:::o;52391:236::-;52531:34;52527:1;52519:6;52515:14;52508:58;52600:19;52595:2;52587:6;52583:15;52576:44;52391:236;:::o;52633:235::-;52773:34;52769:1;52761:6;52757:14;52750:58;52842:18;52837:2;52829:6;52825:15;52818:43;52633:235;:::o;52874:170::-;53014:22;53010:1;53002:6;52998:14;52991:46;52874:170;:::o;53050:169::-;53190:21;53186:1;53178:6;53174:14;53167:45;53050:169;:::o;53225:122::-;53298:24;53316:5;53298:24;:::i;:::-;53291:5;53288:35;53278:63;;53337:1;53334;53327:12;53278:63;53225:122;:::o;53353:116::-;53423:21;53438:5;53423:21;:::i;:::-;53416:5;53413:32;53403:60;;53459:1;53456;53449:12;53403:60;53353:116;:::o;53475:122::-;53548:24;53566:5;53548:24;:::i;:::-;53541:5;53538:35;53528:63;;53587:1;53584;53577:12;53528:63;53475:122;:::o;53603:120::-;53675:23;53692:5;53675:23;:::i;:::-;53668:5;53665:34;53655:62;;53713:1;53710;53703:12;53655:62;53603:120;:::o;53729:180::-;53831:53;53878:5;53831:53;:::i;:::-;53824:5;53821:64;53811:92;;53899:1;53896;53889:12;53811:92;53729:180;:::o;53915:122::-;53988:24;54006:5;53988:24;:::i;:::-;53981:5;53978:35;53968:63;;54027:1;54024;54017:12;53968:63;53915:122;:::o

Swarm Source

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