ETH Price: $3,116.03 (+0.62%)

Token

MysteryShells (MysteryShells)
 

Overview

Max Total Supply

11,742 MysteryShells

Holders

2,889

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0xc84ade8bebeee58c09193b42a519a6a9019d35db
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:
MysteryShells

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-15
*/

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/Address.sol

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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/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/ERC1155/IERC1155Receiver.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;


/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
     * @dev Handles the receipt of a single ERC1155 token type. This function is
     * called at the end of a `safeTransferFrom` after the balance has been updated.
     *
     * NOTE: To accept the transfer, this must return
     * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * (i.e. 0xf23a6e61, or its own function selector).
     *
     * @param operator The address which initiated the transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param id The ID of the token being transferred
     * @param value The amount of tokens being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
     */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
     * @dev Handles the receipt of a multiple ERC1155 token types. This function
     * is called at the end of a `safeBatchTransferFrom` after the balances have
     * been updated.
     *
     * NOTE: To accept the transfer(s), this must return
     * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     * (i.e. 0xbc197c81, or its own function selector).
     *
     * @param operator The address which initiated the batch transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param ids An array containing ids of each token being transferred (order and length must match values array)
     * @param values An array containing amounts of each token being transferred (order and length must match ids array)
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
     */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

// File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

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


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

pragma solidity ^0.8.0;

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

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

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

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

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

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

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

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

        _;

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

// 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/ERC1155/ERC1155.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/ERC1155.sol)

pragma solidity ^0.8.0;







/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

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

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

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

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

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

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

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `from` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, address(0), id, amount);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

        emit TransferBatch(operator, from, address(0), ids, amounts);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @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, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    /**
     * @dev Hook that is called after any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

// File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/ERC1155Burnable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Extension of {ERC1155} that allows token holders to destroy both their
 * own tokens and those that they have been approved to use.
 *
 * _Available since v3.1._
 */
abstract contract ERC1155Burnable is ERC1155 {
    function burn(
        address account,
        uint256 id,
        uint256 value
    ) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        _burn(account, id, value);
    }

    function burnBatch(
        address account,
        uint256[] memory ids,
        uint256[] memory values
    ) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        _burnBatch(account, ids, values);
    }
}

// File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/extensions/ERC1155Supply.sol)

pragma solidity ^0.8.0;


/**
 * @dev Extension of ERC1155 that adds tracking of total supply per id.
 *
 * Useful for scenarios where Fungible and Non-fungible tokens have to be
 * clearly identified. Note: While a totalSupply of 1 might mean the
 * corresponding is an NFT, there is no guarantees that no other token with the
 * same id are not going to be minted.
 */
abstract contract ERC1155Supply is ERC1155 {
    mapping(uint256 => uint256) private _totalSupply;

    /**
     * @dev Total amount of tokens in with a given id.
     */
    function totalSupply(uint256 id) public view virtual returns (uint256) {
        return _totalSupply[id];
    }

    /**
     * @dev Indicates whether any token exist with a given id, or not.
     */
    function exists(uint256 id) public view virtual returns (bool) {
        return ERC1155Supply.totalSupply(id) > 0;
    }

    /**
     * @dev See {ERC1155-_beforeTokenTransfer}.
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual override {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);

        if (from == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                _totalSupply[ids[i]] += amounts[i];
            }
        }

        if (to == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                uint256 id = ids[i];
                uint256 amount = amounts[i];
                uint256 supply = _totalSupply[id];
                require(supply >= amount, "ERC1155: burn amount exceeds totalSupply");
                unchecked {
                    _totalSupply[id] = supply - amount;
                }
            }
        }
    }
}

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/utils/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: contracts/MysteryShells.sol



pragma solidity ^0.8.0;








//Mystery Shells by Cyber Turtles
//Developed by Rosie - @RosieX_eth

contract MysteryShells is ERC1155, ERC1155Supply, ERC1155Burnable, Ownable, ReentrancyGuard {
    string public name_;
    string public symbol_; 
    string public metadataURI_;

    constructor(string memory _name, string memory _symbol, string memory _uri) ERC1155(_uri) {
        name_ = _name;
        symbol_ = _symbol;
        metadataURI_ = _uri;
    } 

    uint256 public publicStartTime = 1652652000;
    uint256 public publicEndTime = 1652824800;
    uint256 public allowlistStartTime = 1652824800;
    uint256 public allowlistEndTime = 1652911200;
    uint256 public mShellPrice = 0.02 ether;
    uint256 public maxTxn = 25;

    bool public paused = true;
    bytes32 public allowlistMerkleRoot;
    mapping(address => bool) public allowlistClaimed;

    modifier isPublicOpen
    {
        require(block.timestamp > publicStartTime && block.timestamp < publicEndTime, "Mint window is closed!");
        _;
    }

    modifier isAllowlistOpen
    {
        require(block.timestamp > allowlistStartTime && block.timestamp < allowlistEndTime, "Mint window is closed!");
        _;
    }

    function mintShell(uint256 amount) external payable isPublicOpen {
        require(!paused, "Mint is paused");
        require(amount > 0 && amount < maxTxn + 1, "Mint amount incorrect");
        require(msg.value >= amount * mShellPrice, "Incorrect ETH amount");

        _mint(msg.sender, 0, amount, "");
    }

    function freeMint(bytes32[] calldata _merkleProof) external isAllowlistOpen {
        bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
        require(!paused, "Mint is paused");
        require(MerkleProof.verify(_merkleProof, allowlistMerkleRoot, leaf), "Proof not on allowlist");
        require(!allowlistClaimed[msg.sender], "Already claimed");

        allowlistClaimed[msg.sender] = true;
        _mint(msg.sender, 0, 1, "");
    }

    //VIEWS
    function uri(uint256 _id) public view override returns (string memory) {
            require(totalSupply(_id) > 0, "URI: nonexistent token");
            
            return string(abi.encodePacked(metadataURI_,Strings.toString(_id)));
    } 

    function name() public view returns (string memory) {
        return name_;
    }

    function symbol() public view returns (string memory) {
        return symbol_;
    }  

    //ADMIN FUNCTIONS
    function setBaseURI(string memory baseURI) external onlyOwner{
        metadataURI_ = baseURI;
    }

    function setPrice(uint256 price) external onlyOwner {
        mShellPrice = price * 1 ether;
    }

    function setPaused(bool paused_) external onlyOwner{
        paused = paused_;
    }

    function setPublicSaleTime(uint256 start, uint256 end) external onlyOwner{
        publicStartTime = start;
        publicEndTime = end;
    }

    function setAllowlistSaleTime(uint256 start, uint256 end) external onlyOwner{
        allowlistStartTime = start;
        allowlistEndTime = end;
    }

    function setMaxTxn(uint256 max) external onlyOwner{
        maxTxn = max;
    }
    
    function mint(address account, uint256 id, uint256 amount) external onlyOwner {
        _mint(account, id, amount, "");
    }   

    function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) external onlyOwner {
        _mintBatch(to,ids,amounts,data);
    }

    function withdrawMoney() external onlyOwner nonReentrant {
        (bool success, ) = msg.sender.call{value: address(this).balance}("");
        require(success, "Transfer failed.");
    }

    //OVERRIDES
    function _mint(
        address account,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual override{
        super._mint(account, id, amount, data);
    }

    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual override {
        super._mintBatch(to, ids, amounts, data);
    }

    function _burn(
        address account,
        uint256 id,
        uint256 amount
    ) internal virtual override{
        super._burn(account, id, amount);
    }

    function _burnBatch(
        address account,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual override {
        super._burnBatch(account, ids, amounts);
    }  

    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual override(ERC1155, ERC1155Supply) {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
    }  

    function supportsInterface(bytes4 interfaceId) 
        public 
        view 
        virtual 
        override
        (ERC1155) returns (bool) {
        return super.supportsInterface(interfaceId);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_uri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","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":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowlistClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowlistEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowlistMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowlistStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"freeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mShellPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metadataURI_","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintShell","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name_","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"setAllowlistSaleTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"max","type":"uint256"}],"name":"setMaxTxn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"paused_","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"setPublicSaleTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol_","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405263628177e06009556362841ae0600a819055600b556362856c60600c5566470de4df820000600d556019600e55600f805460ff191660011790553480156200004b57600080fd5b50604051620033d5380380620033d58339810160408190526200006e916200029e565b806200007a81620000d6565b506200008633620000ef565b60016005558251620000a090600690602086019062000141565b508151620000b690600790602085019062000141565b508051620000cc90600890602084019062000141565b5050505062000382565b8051620000eb90600290602084019062000141565b5050565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200014f906200032f565b90600052602060002090601f016020900481019282620001735760008555620001be565b82601f106200018e57805160ff1916838001178555620001be565b82800160010185558215620001be579182015b82811115620001be578251825591602001919060010190620001a1565b50620001cc929150620001d0565b5090565b5b80821115620001cc5760008155600101620001d1565b600082601f830112620001f957600080fd5b81516001600160401b03808211156200021657620002166200036c565b604051601f8301601f19908116603f011681019082821181831017156200024157620002416200036c565b816040528381526020925086838588010111156200025e57600080fd5b600091505b8382101562000282578582018301518183018401529082019062000263565b83821115620002945760008385830101525b9695505050505050565b600080600060608486031215620002b457600080fd5b83516001600160401b0380821115620002cc57600080fd5b620002da87838801620001e7565b94506020860151915080821115620002f157600080fd5b620002ff87838801620001e7565b935060408601519150808211156200031657600080fd5b506200032586828701620001e7565b9150509250925092565b600181811c908216806200034457607f821691505b602082108114156200036657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61304380620003926000396000f3fe60806040526004361061023a5760003560e01c80636b20c4541161012e578063b7a1de90116100ab578063e985e9c51161006f578063e985e9c51461066c578063f242432a146106b5578063f2fde38b146106d5578063f5298aca146106f5578063fc588c041461071557600080fd5b8063b7a1de90146105e9578063bd85b039146105fe578063db82856c1461062b578063e2b9e18614610641578063e8792c1a1461065657600080fd5b806395d89b41116100f257806395d89b4114610574578063a22cb46514610589578063ac446002146105a9578063af17dea6146105be578063b2e8a8fb146105d357600080fd5b80636b20c454146104d7578063715018a6146104f757806388d15d501461050c5780638da5cb5b1461052c57806391b7f5ed1461055457600080fd5b806330b42ec2116101bc57806355f804b31161018057806355f804b31461045157806359d7bc4d146104715780635c975abb146104875780635fd1bbc4146104a157806367559b62146104b757600080fd5b806330b42ec21461039257806337f0558e146103c25780634e1273f4146103d55780634f558e791461040257806354645d6a1461043157600080fd5b806316c38b3c1161020357806316c38b3c146103065780631f7fdffa14610326578063293108e0146103465780632c27e5811461035c5780632eb2c2d61461037257600080fd5b8062fdd58e1461023f57806301ffc9a71461027257806306fdde03146102a25780630e89341c146102c4578063156e29f6146102e4575b600080fd5b34801561024b57600080fd5b5061025f61025a3660046126bd565b610735565b6040519081526020015b60405180910390f35b34801561027e57600080fd5b5061029261028d366004612879565b6107cc565b6040519015158152602001610269565b3480156102ae57600080fd5b506102b76107dd565b6040516102699190612b3b565b3480156102d057600080fd5b506102b76102df3660046128fb565b61086f565b3480156102f057600080fd5b506103046102ff3660046126e7565b6108f9565b005b34801561031257600080fd5b5061030461032136600461285e565b610943565b34801561033257600080fd5b506103046103413660046125fb565b610980565b34801561035257600080fd5b5061025f60105481565b34801561036857600080fd5b5061025f600a5481565b34801561037e57600080fd5b5061030461038d36600461247b565b6109bc565b34801561039e57600080fd5b506102926103ad36600461242d565b60116020526000908152604090205460ff1681565b6103046103d03660046128fb565b610a53565b3480156103e157600080fd5b506103f56103f036600461271a565b610bc0565b6040516102699190612b03565b34801561040e57600080fd5b5061029261041d3660046128fb565b600090815260036020526040902054151590565b34801561043d57600080fd5b5061030461044c366004612914565b610ce9565b34801561045d57600080fd5b5061030461046c3660046128b3565b610d1e565b34801561047d57600080fd5b5061025f600b5481565b34801561049357600080fd5b50600f546102929060ff1681565b3480156104ad57600080fd5b5061025f60095481565b3480156104c357600080fd5b506103046104d2366004612914565b610d5f565b3480156104e357600080fd5b506103046104f2366004612588565b610d94565b34801561050357600080fd5b50610304610dd7565b34801561051857600080fd5b506103046105273660046127ea565b610e0d565b34801561053857600080fd5b506004546040516001600160a01b039091168152602001610269565b34801561056057600080fd5b5061030461056f3660046128fb565b610fed565b34801561058057600080fd5b506102b761102f565b34801561059557600080fd5b506103046105a4366004612693565b61103e565b3480156105b557600080fd5b50610304611049565b3480156105ca57600080fd5b506102b761115e565b3480156105df57600080fd5b5061025f600d5481565b3480156105f557600080fd5b506102b76111ec565b34801561060a57600080fd5b5061025f6106193660046128fb565b60009081526003602052604090205490565b34801561063757600080fd5b5061025f600c5481565b34801561064d57600080fd5b506102b76111f9565b34801561066257600080fd5b5061025f600e5481565b34801561067857600080fd5b50610292610687366004612448565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b3480156106c157600080fd5b506103046106d0366004612524565b611206565b3480156106e157600080fd5b506103046106f036600461242d565b61124b565b34801561070157600080fd5b506103046107103660046126e7565b6112e3565b34801561072157600080fd5b506103046107303660046128fb565b611326565b60006001600160a01b0383166107a65760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006107d782611355565b92915050565b6060600680546107ec90612e64565b80601f016020809104026020016040519081016040528092919081815260200182805461081890612e64565b80156108655780601f1061083a57610100808354040283529160200191610865565b820191906000526020600020905b81548152906001019060200180831161084857829003601f168201915b5050505050905090565b600081815260036020526040812054606091106108c75760405162461bcd60e51b81526020600482015260166024820152752aa9249d103737b732bc34b9ba32b73a103a37b5b2b760511b604482015260640161079d565b60086108d2836113a5565b6040516020016108e39291906129b9565b6040516020818303038152906040529050919050565b6004546001600160a01b031633146109235760405162461bcd60e51b815260040161079d90612cf5565b61093e838383604051806020016040528060008152506114aa565b505050565b6004546001600160a01b0316331461096d5760405162461bcd60e51b815260040161079d90612cf5565b600f805460ff1916911515919091179055565b6004546001600160a01b031633146109aa5760405162461bcd60e51b815260040161079d90612cf5565b6109b6848484846114b6565b50505050565b6001600160a01b0385163314806109d857506109d88533610687565b610a3f5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161079d565b610a4c85858585856114c2565b5050505050565b60095442118015610a655750600a5442105b610aaa5760405162461bcd60e51b81526020600482015260166024820152754d696e742077696e646f7720697320636c6f7365642160501b604482015260640161079d565b600f5460ff1615610aee5760405162461bcd60e51b815260206004820152600e60248201526d135a5b9d081a5cc81c185d5cd95960921b604482015260640161079d565b600081118015610b0a5750600e54610b07906001612dd6565b81105b610b4e5760405162461bcd60e51b8152602060048201526015602482015274135a5b9d08185b5bdd5b9d081a5b98dbdc9c9958dd605a1b604482015260640161079d565b600d54610b5b9082612e02565b341015610ba15760405162461bcd60e51b8152602060048201526014602482015273125b98dbdc9c9958dd0811551208185b5bdd5b9d60621b604482015260640161079d565b610bbd33600083604051806020016040528060008152506114aa565b50565b60608151835114610c255760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161079d565b600083516001600160401b03811115610c4057610c40612f3c565b604051908082528060200260200182016040528015610c69578160200160208202803683370190505b50905060005b8451811015610ce157610cb4858281518110610c8d57610c8d612f26565b6020026020010151858381518110610ca757610ca7612f26565b6020026020010151610735565b828281518110610cc657610cc6612f26565b6020908102919091010152610cda81612ecb565b9050610c6f565b509392505050565b6004546001600160a01b03163314610d135760405162461bcd60e51b815260040161079d90612cf5565b600991909155600a55565b6004546001600160a01b03163314610d485760405162461bcd60e51b815260040161079d90612cf5565b8051610d5b90600890602084019061226d565b5050565b6004546001600160a01b03163314610d895760405162461bcd60e51b815260040161079d90612cf5565b600b91909155600c55565b6001600160a01b038316331480610db05750610db08333610687565b610dcc5760405162461bcd60e51b815260040161079d90612bda565b61093e83838361166c565b6004546001600160a01b03163314610e015760405162461bcd60e51b815260040161079d90612cf5565b610e0b6000611677565b565b600b5442118015610e1f5750600c5442105b610e645760405162461bcd60e51b81526020600482015260166024820152754d696e742077696e646f7720697320636c6f7365642160501b604482015260640161079d565b604080513360601b6bffffffffffffffffffffffff19166020808301919091528251601481840301815260349092019092528051910120600f5460ff1615610edf5760405162461bcd60e51b815260206004820152600e60248201526d135a5b9d081a5cc81c185d5cd95960921b604482015260640161079d565b610f208383808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060105491508490506116c9565b610f655760405162461bcd60e51b8152602060048201526016602482015275141c9bdbd9881b9bdd081bdb88185b1b1bdddb1a5cdd60521b604482015260640161079d565b3360009081526011602052604090205460ff1615610fb75760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e4818db185a5b5959608a1b604482015260640161079d565b336000818152601160209081526040808320805460ff19166001908117909155815192830190915282825261093e9392916114aa565b6004546001600160a01b031633146110175760405162461bcd60e51b815260040161079d90612cf5565b61102981670de0b6b3a7640000612e02565b600d5550565b6060600780546107ec90612e64565b610d5b3383836116df565b6004546001600160a01b031633146110735760405162461bcd60e51b815260040161079d90612cf5565b600260055414156110c65760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161079d565b6002600555604051600090339047908381818185875af1925050503d806000811461110d576040519150601f19603f3d011682016040523d82523d6000602084013e611112565b606091505b50509050806111565760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b604482015260640161079d565b506001600555565b6007805461116b90612e64565b80601f016020809104026020016040519081016040528092919081815260200182805461119790612e64565b80156111e45780601f106111b9576101008083540402835291602001916111e4565b820191906000526020600020905b8154815290600101906020018083116111c757829003601f168201915b505050505081565b6008805461116b90612e64565b6006805461116b90612e64565b6001600160a01b03851633148061122257506112228533610687565b61123e5760405162461bcd60e51b815260040161079d90612bda565b610a4c85858585856117c0565b6004546001600160a01b031633146112755760405162461bcd60e51b815260040161079d90612cf5565b6001600160a01b0381166112da5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161079d565b610bbd81611677565b6001600160a01b0383163314806112ff57506112ff8333610687565b61131b5760405162461bcd60e51b815260040161079d90612bda565b61093e8383836118f8565b6004546001600160a01b031633146113505760405162461bcd60e51b815260040161079d90612cf5565b600e55565b60006001600160e01b03198216636cdb3d1360e11b148061138657506001600160e01b031982166303a24d0760e21b145b806107d757506301ffc9a760e01b6001600160e01b03198316146107d7565b6060816113c95750506040805180820190915260018152600360fc1b602082015290565b8160005b81156113f357806113dd81612ecb565b91506113ec9050600a83612dee565b91506113cd565b6000816001600160401b0381111561140d5761140d612f3c565b6040519080825280601f01601f191660200182016040528015611437576020820181803683370190505b5090505b84156114a25761144c600183612e21565b9150611459600a86612ee6565b611464906030612dd6565b60f81b81838151811061147957611479612f26565b60200101906001600160f81b031916908160001a90535061149b600a86612dee565b945061143b565b949350505050565b6109b684848484611903565b6109b6848484846119ec565b81518351146114e35760405162461bcd60e51b815260040161079d90612d2a565b6001600160a01b0384166115095760405162461bcd60e51b815260040161079d90612c23565b33611518818787878787611b46565b60005b84518110156115fe57600085828151811061153857611538612f26565b60200260200101519050600085838151811061155657611556612f26565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156115a65760405162461bcd60e51b815260040161079d90612cab565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906115e3908490612dd6565b92505081905550505050806115f790612ecb565b905061151b565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161164e929190612b16565b60405180910390a4611664818787878787611b54565b505050505050565b61093e838383611cbf565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000826116d68584611e5b565b14949350505050565b816001600160a01b0316836001600160a01b031614156117535760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161079d565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166117e65760405162461bcd60e51b815260040161079d90612c23565b3360006117f285611ec7565b905060006117ff85611ec7565b905061180f838989858589611b46565b6000868152602081815260408083206001600160a01b038c168452909152902054858110156118505760405162461bcd60e51b815260040161079d90612cab565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a1682528120805488929061188d908490612dd6565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46118ed848a8a8a8a8a611f12565b505050505050505050565b61093e838383611fdc565b6001600160a01b0384166119295760405162461bcd60e51b815260040161079d90612d72565b33600061193585611ec7565b9050600061194285611ec7565b905061195383600089858589611b46565b6000868152602081815260408083206001600160a01b038b16845290915281208054879290611983908490612dd6565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46119e383600089898989611f12565b50505050505050565b6001600160a01b038416611a125760405162461bcd60e51b815260040161079d90612d72565b8151835114611a335760405162461bcd60e51b815260040161079d90612d2a565b33611a4381600087878787611b46565b60005b8451811015611ade57838181518110611a6157611a61612f26565b6020026020010151600080878481518110611a7e57611a7e612f26565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254611ac69190612dd6565b90915550819050611ad681612ecb565b915050611a46565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611b2f929190612b16565b60405180910390a4610a4c81600087878787611b54565b6116648686868686866120f4565b6001600160a01b0384163b156116645760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611b989089908990889088908890600401612a60565b602060405180830381600087803b158015611bb257600080fd5b505af1925050508015611be2575060408051601f3d908101601f19168201909252611bdf91810190612896565b60015b611c8f57611bee612f52565b806308c379a01415611c285750611c03612f6e565b80611c0e5750611c2a565b8060405162461bcd60e51b815260040161079d9190612b3b565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161079d565b6001600160e01b0319811663bc197c8160e01b146119e35760405162461bcd60e51b815260040161079d90612b4e565b6001600160a01b038316611ce55760405162461bcd60e51b815260040161079d90612c68565b8051825114611d065760405162461bcd60e51b815260040161079d90612d2a565b6000339050611d2981856000868660405180602001604052806000815250611b46565b60005b8351811015611dee576000848281518110611d4957611d49612f26565b602002602001015190506000848381518110611d6757611d67612f26565b602090810291909101810151600084815280835260408082206001600160a01b038c168352909352919091205490915081811015611db75760405162461bcd60e51b815260040161079d90612b96565b6000928352602083815260408085206001600160a01b038b1686529091529092209103905580611de681612ecb565b915050611d2c565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611e3f929190612b16565b60405180910390a46040805160208101909152600090526109b6565b600081815b8451811015610ce1576000858281518110611e7d57611e7d612f26565b60200260200101519050808311611ea35760008381526020829052604090209250611eb4565b600081815260208490526040902092505b5080611ebf81612ecb565b915050611e60565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611f0157611f01612f26565b602090810291909101015292915050565b6001600160a01b0384163b156116645760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611f569089908990889088908890600401612abe565b602060405180830381600087803b158015611f7057600080fd5b505af1925050508015611fa0575060408051601f3d908101601f19168201909252611f9d91810190612896565b60015b611fac57611bee612f52565b6001600160e01b0319811663f23a6e6160e01b146119e35760405162461bcd60e51b815260040161079d90612b4e565b6001600160a01b0383166120025760405162461bcd60e51b815260040161079d90612c68565b33600061200e84611ec7565b9050600061201b84611ec7565b905061203b83876000858560405180602001604052806000815250611b46565b6000858152602081815260408083206001600160a01b038a1684529091529020548481101561207c5760405162461bcd60e51b815260040161079d90612b96565b6000868152602081815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46040805160208101909152600090526119e3565b6001600160a01b03851661217b5760005b83518110156121795782818151811061212057612120612f26565b60200260200101516003600086848151811061213e5761213e612f26565b6020026020010151815260200190815260200160002060008282546121639190612dd6565b90915550612172905081612ecb565b9050612105565b505b6001600160a01b0384166116645760005b83518110156119e35760008482815181106121a9576121a9612f26565b6020026020010151905060008483815181106121c7576121c7612f26565b602002602001015190506000600360008481526020019081526020016000205490508181101561224a5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a206275726e20616d6f756e74206578636565647320746f74604482015267616c537570706c7960c01b606482015260840161079d565b6000928352600360205260409092209103905561226681612ecb565b905061218c565b82805461227990612e64565b90600052602060002090601f01602090048101928261229b57600085556122e1565b82601f106122b457805160ff19168380011785556122e1565b828001600101855582156122e1579182015b828111156122e15782518255916020019190600101906122c6565b506122ed9291506122f1565b5090565b5b808211156122ed57600081556001016122f2565b60006001600160401b0383111561231f5761231f612f3c565b604051612336601f8501601f191660200182612e9f565b80915083815284848401111561234b57600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b038116811461237a57600080fd5b919050565b600082601f83011261239057600080fd5b8135602061239d82612db3565b6040516123aa8282612e9f565b8381528281019150858301600585901b870184018810156123ca57600080fd5b60005b858110156123e9578135845292840192908401906001016123cd565b5090979650505050505050565b8035801515811461237a57600080fd5b600082601f83011261241757600080fd5b61242683833560208501612306565b9392505050565b60006020828403121561243f57600080fd5b61242682612363565b6000806040838503121561245b57600080fd5b61246483612363565b915061247260208401612363565b90509250929050565b600080600080600060a0868803121561249357600080fd5b61249c86612363565b94506124aa60208701612363565b935060408601356001600160401b03808211156124c657600080fd5b6124d289838a0161237f565b945060608801359150808211156124e857600080fd5b6124f489838a0161237f565b9350608088013591508082111561250a57600080fd5b5061251788828901612406565b9150509295509295909350565b600080600080600060a0868803121561253c57600080fd5b61254586612363565b945061255360208701612363565b9350604086013592506060860135915060808601356001600160401b0381111561257c57600080fd5b61251788828901612406565b60008060006060848603121561259d57600080fd5b6125a684612363565b925060208401356001600160401b03808211156125c257600080fd5b6125ce8783880161237f565b935060408601359150808211156125e457600080fd5b506125f18682870161237f565b9150509250925092565b6000806000806080858703121561261157600080fd5b61261a85612363565b935060208501356001600160401b038082111561263657600080fd5b6126428883890161237f565b9450604087013591508082111561265857600080fd5b6126648883890161237f565b9350606087013591508082111561267a57600080fd5b5061268787828801612406565b91505092959194509250565b600080604083850312156126a657600080fd5b6126af83612363565b9150612472602084016123f6565b600080604083850312156126d057600080fd5b6126d983612363565b946020939093013593505050565b6000806000606084860312156126fc57600080fd5b61270584612363565b95602085013595506040909401359392505050565b6000806040838503121561272d57600080fd5b82356001600160401b038082111561274457600080fd5b818501915085601f83011261275857600080fd5b8135602061276582612db3565b6040516127728282612e9f565b8381528281019150858301600585901b870184018b101561279257600080fd5b600096505b848710156127bc576127a881612363565b835260019690960195918301918301612797565b50965050860135925050808211156127d357600080fd5b506127e08582860161237f565b9150509250929050565b600080602083850312156127fd57600080fd5b82356001600160401b038082111561281457600080fd5b818501915085601f83011261282857600080fd5b81358181111561283757600080fd5b8660208260051b850101111561284c57600080fd5b60209290920196919550909350505050565b60006020828403121561287057600080fd5b612426826123f6565b60006020828403121561288b57600080fd5b813561242681612ff7565b6000602082840312156128a857600080fd5b815161242681612ff7565b6000602082840312156128c557600080fd5b81356001600160401b038111156128db57600080fd5b8201601f810184136128ec57600080fd5b6114a284823560208401612306565b60006020828403121561290d57600080fd5b5035919050565b6000806040838503121561292757600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b838110156129665781518752958201959082019060010161294a565b509495945050505050565b60008151808452612989816020860160208601612e38565b601f01601f19169290920160200192915050565b600081516129af818560208601612e38565b9290920192915050565b600080845481600182811c9150808316806129d557607f831692505b60208084108214156129f557634e487b7160e01b86526022600452602486fd5b818015612a095760018114612a1a57612a47565b60ff19861689528489019650612a47565b60008b81526020902060005b86811015612a3f5781548b820152908501908301612a26565b505084890196505b505050505050612a57818561299d565b95945050505050565b6001600160a01b0386811682528516602082015260a060408201819052600090612a8c90830186612936565b8281036060840152612a9e8186612936565b90508281036080840152612ab28185612971565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090612af890830184612971565b979650505050505050565b6020815260006124266020830184612936565b604081526000612b296040830185612936565b8281036020840152612a578185612936565b6020815260006124266020830184612971565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b60208082526029908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260408201526808185c1c1c9bdd995960ba1b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60006001600160401b03821115612dcc57612dcc612f3c565b5060051b60200190565b60008219821115612de957612de9612efa565b500190565b600082612dfd57612dfd612f10565b500490565b6000816000190483118215151615612e1c57612e1c612efa565b500290565b600082821015612e3357612e33612efa565b500390565b60005b83811015612e53578181015183820152602001612e3b565b838111156109b65750506000910152565b600181811c90821680612e7857607f821691505b60208210811415612e9957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f191681016001600160401b0381118282101715612ec457612ec4612f3c565b6040525050565b6000600019821415612edf57612edf612efa565b5060010190565b600082612ef557612ef5612f10565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d1115612f6b5760046000803e5060005160e01c5b90565b600060443d1015612f7c5790565b6040516003193d81016004833e81513d6001600160401b038160248401118184111715612fab57505050505090565b8285019150815181811115612fc35750505050505090565b843d8701016020828501011115612fdd5750505050505090565b612fec60208286010187612e9f565b509095945050505050565b6001600160e01b031981168114610bbd57600080fdfea2646970667358221220cf16a7bfbd8592db846f9cc444d2d2bbdd3959c887118301728693fce936d18e64736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000d4d7973746572795368656c6c7300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d4d7973746572795368656c6c7300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003b697066733a2f2f697066732f516d504146484e3459734658746277397a4257315158744338596e4d58464a6d574e6a574859635553707476654a2f0000000000

Deployed Bytecode

0x60806040526004361061023a5760003560e01c80636b20c4541161012e578063b7a1de90116100ab578063e985e9c51161006f578063e985e9c51461066c578063f242432a146106b5578063f2fde38b146106d5578063f5298aca146106f5578063fc588c041461071557600080fd5b8063b7a1de90146105e9578063bd85b039146105fe578063db82856c1461062b578063e2b9e18614610641578063e8792c1a1461065657600080fd5b806395d89b41116100f257806395d89b4114610574578063a22cb46514610589578063ac446002146105a9578063af17dea6146105be578063b2e8a8fb146105d357600080fd5b80636b20c454146104d7578063715018a6146104f757806388d15d501461050c5780638da5cb5b1461052c57806391b7f5ed1461055457600080fd5b806330b42ec2116101bc57806355f804b31161018057806355f804b31461045157806359d7bc4d146104715780635c975abb146104875780635fd1bbc4146104a157806367559b62146104b757600080fd5b806330b42ec21461039257806337f0558e146103c25780634e1273f4146103d55780634f558e791461040257806354645d6a1461043157600080fd5b806316c38b3c1161020357806316c38b3c146103065780631f7fdffa14610326578063293108e0146103465780632c27e5811461035c5780632eb2c2d61461037257600080fd5b8062fdd58e1461023f57806301ffc9a71461027257806306fdde03146102a25780630e89341c146102c4578063156e29f6146102e4575b600080fd5b34801561024b57600080fd5b5061025f61025a3660046126bd565b610735565b6040519081526020015b60405180910390f35b34801561027e57600080fd5b5061029261028d366004612879565b6107cc565b6040519015158152602001610269565b3480156102ae57600080fd5b506102b76107dd565b6040516102699190612b3b565b3480156102d057600080fd5b506102b76102df3660046128fb565b61086f565b3480156102f057600080fd5b506103046102ff3660046126e7565b6108f9565b005b34801561031257600080fd5b5061030461032136600461285e565b610943565b34801561033257600080fd5b506103046103413660046125fb565b610980565b34801561035257600080fd5b5061025f60105481565b34801561036857600080fd5b5061025f600a5481565b34801561037e57600080fd5b5061030461038d36600461247b565b6109bc565b34801561039e57600080fd5b506102926103ad36600461242d565b60116020526000908152604090205460ff1681565b6103046103d03660046128fb565b610a53565b3480156103e157600080fd5b506103f56103f036600461271a565b610bc0565b6040516102699190612b03565b34801561040e57600080fd5b5061029261041d3660046128fb565b600090815260036020526040902054151590565b34801561043d57600080fd5b5061030461044c366004612914565b610ce9565b34801561045d57600080fd5b5061030461046c3660046128b3565b610d1e565b34801561047d57600080fd5b5061025f600b5481565b34801561049357600080fd5b50600f546102929060ff1681565b3480156104ad57600080fd5b5061025f60095481565b3480156104c357600080fd5b506103046104d2366004612914565b610d5f565b3480156104e357600080fd5b506103046104f2366004612588565b610d94565b34801561050357600080fd5b50610304610dd7565b34801561051857600080fd5b506103046105273660046127ea565b610e0d565b34801561053857600080fd5b506004546040516001600160a01b039091168152602001610269565b34801561056057600080fd5b5061030461056f3660046128fb565b610fed565b34801561058057600080fd5b506102b761102f565b34801561059557600080fd5b506103046105a4366004612693565b61103e565b3480156105b557600080fd5b50610304611049565b3480156105ca57600080fd5b506102b761115e565b3480156105df57600080fd5b5061025f600d5481565b3480156105f557600080fd5b506102b76111ec565b34801561060a57600080fd5b5061025f6106193660046128fb565b60009081526003602052604090205490565b34801561063757600080fd5b5061025f600c5481565b34801561064d57600080fd5b506102b76111f9565b34801561066257600080fd5b5061025f600e5481565b34801561067857600080fd5b50610292610687366004612448565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b3480156106c157600080fd5b506103046106d0366004612524565b611206565b3480156106e157600080fd5b506103046106f036600461242d565b61124b565b34801561070157600080fd5b506103046107103660046126e7565b6112e3565b34801561072157600080fd5b506103046107303660046128fb565b611326565b60006001600160a01b0383166107a65760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006107d782611355565b92915050565b6060600680546107ec90612e64565b80601f016020809104026020016040519081016040528092919081815260200182805461081890612e64565b80156108655780601f1061083a57610100808354040283529160200191610865565b820191906000526020600020905b81548152906001019060200180831161084857829003601f168201915b5050505050905090565b600081815260036020526040812054606091106108c75760405162461bcd60e51b81526020600482015260166024820152752aa9249d103737b732bc34b9ba32b73a103a37b5b2b760511b604482015260640161079d565b60086108d2836113a5565b6040516020016108e39291906129b9565b6040516020818303038152906040529050919050565b6004546001600160a01b031633146109235760405162461bcd60e51b815260040161079d90612cf5565b61093e838383604051806020016040528060008152506114aa565b505050565b6004546001600160a01b0316331461096d5760405162461bcd60e51b815260040161079d90612cf5565b600f805460ff1916911515919091179055565b6004546001600160a01b031633146109aa5760405162461bcd60e51b815260040161079d90612cf5565b6109b6848484846114b6565b50505050565b6001600160a01b0385163314806109d857506109d88533610687565b610a3f5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161079d565b610a4c85858585856114c2565b5050505050565b60095442118015610a655750600a5442105b610aaa5760405162461bcd60e51b81526020600482015260166024820152754d696e742077696e646f7720697320636c6f7365642160501b604482015260640161079d565b600f5460ff1615610aee5760405162461bcd60e51b815260206004820152600e60248201526d135a5b9d081a5cc81c185d5cd95960921b604482015260640161079d565b600081118015610b0a5750600e54610b07906001612dd6565b81105b610b4e5760405162461bcd60e51b8152602060048201526015602482015274135a5b9d08185b5bdd5b9d081a5b98dbdc9c9958dd605a1b604482015260640161079d565b600d54610b5b9082612e02565b341015610ba15760405162461bcd60e51b8152602060048201526014602482015273125b98dbdc9c9958dd0811551208185b5bdd5b9d60621b604482015260640161079d565b610bbd33600083604051806020016040528060008152506114aa565b50565b60608151835114610c255760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161079d565b600083516001600160401b03811115610c4057610c40612f3c565b604051908082528060200260200182016040528015610c69578160200160208202803683370190505b50905060005b8451811015610ce157610cb4858281518110610c8d57610c8d612f26565b6020026020010151858381518110610ca757610ca7612f26565b6020026020010151610735565b828281518110610cc657610cc6612f26565b6020908102919091010152610cda81612ecb565b9050610c6f565b509392505050565b6004546001600160a01b03163314610d135760405162461bcd60e51b815260040161079d90612cf5565b600991909155600a55565b6004546001600160a01b03163314610d485760405162461bcd60e51b815260040161079d90612cf5565b8051610d5b90600890602084019061226d565b5050565b6004546001600160a01b03163314610d895760405162461bcd60e51b815260040161079d90612cf5565b600b91909155600c55565b6001600160a01b038316331480610db05750610db08333610687565b610dcc5760405162461bcd60e51b815260040161079d90612bda565b61093e83838361166c565b6004546001600160a01b03163314610e015760405162461bcd60e51b815260040161079d90612cf5565b610e0b6000611677565b565b600b5442118015610e1f5750600c5442105b610e645760405162461bcd60e51b81526020600482015260166024820152754d696e742077696e646f7720697320636c6f7365642160501b604482015260640161079d565b604080513360601b6bffffffffffffffffffffffff19166020808301919091528251601481840301815260349092019092528051910120600f5460ff1615610edf5760405162461bcd60e51b815260206004820152600e60248201526d135a5b9d081a5cc81c185d5cd95960921b604482015260640161079d565b610f208383808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060105491508490506116c9565b610f655760405162461bcd60e51b8152602060048201526016602482015275141c9bdbd9881b9bdd081bdb88185b1b1bdddb1a5cdd60521b604482015260640161079d565b3360009081526011602052604090205460ff1615610fb75760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e4818db185a5b5959608a1b604482015260640161079d565b336000818152601160209081526040808320805460ff19166001908117909155815192830190915282825261093e9392916114aa565b6004546001600160a01b031633146110175760405162461bcd60e51b815260040161079d90612cf5565b61102981670de0b6b3a7640000612e02565b600d5550565b6060600780546107ec90612e64565b610d5b3383836116df565b6004546001600160a01b031633146110735760405162461bcd60e51b815260040161079d90612cf5565b600260055414156110c65760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161079d565b6002600555604051600090339047908381818185875af1925050503d806000811461110d576040519150601f19603f3d011682016040523d82523d6000602084013e611112565b606091505b50509050806111565760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b604482015260640161079d565b506001600555565b6007805461116b90612e64565b80601f016020809104026020016040519081016040528092919081815260200182805461119790612e64565b80156111e45780601f106111b9576101008083540402835291602001916111e4565b820191906000526020600020905b8154815290600101906020018083116111c757829003601f168201915b505050505081565b6008805461116b90612e64565b6006805461116b90612e64565b6001600160a01b03851633148061122257506112228533610687565b61123e5760405162461bcd60e51b815260040161079d90612bda565b610a4c85858585856117c0565b6004546001600160a01b031633146112755760405162461bcd60e51b815260040161079d90612cf5565b6001600160a01b0381166112da5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161079d565b610bbd81611677565b6001600160a01b0383163314806112ff57506112ff8333610687565b61131b5760405162461bcd60e51b815260040161079d90612bda565b61093e8383836118f8565b6004546001600160a01b031633146113505760405162461bcd60e51b815260040161079d90612cf5565b600e55565b60006001600160e01b03198216636cdb3d1360e11b148061138657506001600160e01b031982166303a24d0760e21b145b806107d757506301ffc9a760e01b6001600160e01b03198316146107d7565b6060816113c95750506040805180820190915260018152600360fc1b602082015290565b8160005b81156113f357806113dd81612ecb565b91506113ec9050600a83612dee565b91506113cd565b6000816001600160401b0381111561140d5761140d612f3c565b6040519080825280601f01601f191660200182016040528015611437576020820181803683370190505b5090505b84156114a25761144c600183612e21565b9150611459600a86612ee6565b611464906030612dd6565b60f81b81838151811061147957611479612f26565b60200101906001600160f81b031916908160001a90535061149b600a86612dee565b945061143b565b949350505050565b6109b684848484611903565b6109b6848484846119ec565b81518351146114e35760405162461bcd60e51b815260040161079d90612d2a565b6001600160a01b0384166115095760405162461bcd60e51b815260040161079d90612c23565b33611518818787878787611b46565b60005b84518110156115fe57600085828151811061153857611538612f26565b60200260200101519050600085838151811061155657611556612f26565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156115a65760405162461bcd60e51b815260040161079d90612cab565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906115e3908490612dd6565b92505081905550505050806115f790612ecb565b905061151b565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161164e929190612b16565b60405180910390a4611664818787878787611b54565b505050505050565b61093e838383611cbf565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000826116d68584611e5b565b14949350505050565b816001600160a01b0316836001600160a01b031614156117535760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161079d565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166117e65760405162461bcd60e51b815260040161079d90612c23565b3360006117f285611ec7565b905060006117ff85611ec7565b905061180f838989858589611b46565b6000868152602081815260408083206001600160a01b038c168452909152902054858110156118505760405162461bcd60e51b815260040161079d90612cab565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a1682528120805488929061188d908490612dd6565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46118ed848a8a8a8a8a611f12565b505050505050505050565b61093e838383611fdc565b6001600160a01b0384166119295760405162461bcd60e51b815260040161079d90612d72565b33600061193585611ec7565b9050600061194285611ec7565b905061195383600089858589611b46565b6000868152602081815260408083206001600160a01b038b16845290915281208054879290611983908490612dd6565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46119e383600089898989611f12565b50505050505050565b6001600160a01b038416611a125760405162461bcd60e51b815260040161079d90612d72565b8151835114611a335760405162461bcd60e51b815260040161079d90612d2a565b33611a4381600087878787611b46565b60005b8451811015611ade57838181518110611a6157611a61612f26565b6020026020010151600080878481518110611a7e57611a7e612f26565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254611ac69190612dd6565b90915550819050611ad681612ecb565b915050611a46565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611b2f929190612b16565b60405180910390a4610a4c81600087878787611b54565b6116648686868686866120f4565b6001600160a01b0384163b156116645760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611b989089908990889088908890600401612a60565b602060405180830381600087803b158015611bb257600080fd5b505af1925050508015611be2575060408051601f3d908101601f19168201909252611bdf91810190612896565b60015b611c8f57611bee612f52565b806308c379a01415611c285750611c03612f6e565b80611c0e5750611c2a565b8060405162461bcd60e51b815260040161079d9190612b3b565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161079d565b6001600160e01b0319811663bc197c8160e01b146119e35760405162461bcd60e51b815260040161079d90612b4e565b6001600160a01b038316611ce55760405162461bcd60e51b815260040161079d90612c68565b8051825114611d065760405162461bcd60e51b815260040161079d90612d2a565b6000339050611d2981856000868660405180602001604052806000815250611b46565b60005b8351811015611dee576000848281518110611d4957611d49612f26565b602002602001015190506000848381518110611d6757611d67612f26565b602090810291909101810151600084815280835260408082206001600160a01b038c168352909352919091205490915081811015611db75760405162461bcd60e51b815260040161079d90612b96565b6000928352602083815260408085206001600160a01b038b1686529091529092209103905580611de681612ecb565b915050611d2c565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611e3f929190612b16565b60405180910390a46040805160208101909152600090526109b6565b600081815b8451811015610ce1576000858281518110611e7d57611e7d612f26565b60200260200101519050808311611ea35760008381526020829052604090209250611eb4565b600081815260208490526040902092505b5080611ebf81612ecb565b915050611e60565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611f0157611f01612f26565b602090810291909101015292915050565b6001600160a01b0384163b156116645760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611f569089908990889088908890600401612abe565b602060405180830381600087803b158015611f7057600080fd5b505af1925050508015611fa0575060408051601f3d908101601f19168201909252611f9d91810190612896565b60015b611fac57611bee612f52565b6001600160e01b0319811663f23a6e6160e01b146119e35760405162461bcd60e51b815260040161079d90612b4e565b6001600160a01b0383166120025760405162461bcd60e51b815260040161079d90612c68565b33600061200e84611ec7565b9050600061201b84611ec7565b905061203b83876000858560405180602001604052806000815250611b46565b6000858152602081815260408083206001600160a01b038a1684529091529020548481101561207c5760405162461bcd60e51b815260040161079d90612b96565b6000868152602081815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46040805160208101909152600090526119e3565b6001600160a01b03851661217b5760005b83518110156121795782818151811061212057612120612f26565b60200260200101516003600086848151811061213e5761213e612f26565b6020026020010151815260200190815260200160002060008282546121639190612dd6565b90915550612172905081612ecb565b9050612105565b505b6001600160a01b0384166116645760005b83518110156119e35760008482815181106121a9576121a9612f26565b6020026020010151905060008483815181106121c7576121c7612f26565b602002602001015190506000600360008481526020019081526020016000205490508181101561224a5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a206275726e20616d6f756e74206578636565647320746f74604482015267616c537570706c7960c01b606482015260840161079d565b6000928352600360205260409092209103905561226681612ecb565b905061218c565b82805461227990612e64565b90600052602060002090601f01602090048101928261229b57600085556122e1565b82601f106122b457805160ff19168380011785556122e1565b828001600101855582156122e1579182015b828111156122e15782518255916020019190600101906122c6565b506122ed9291506122f1565b5090565b5b808211156122ed57600081556001016122f2565b60006001600160401b0383111561231f5761231f612f3c565b604051612336601f8501601f191660200182612e9f565b80915083815284848401111561234b57600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b038116811461237a57600080fd5b919050565b600082601f83011261239057600080fd5b8135602061239d82612db3565b6040516123aa8282612e9f565b8381528281019150858301600585901b870184018810156123ca57600080fd5b60005b858110156123e9578135845292840192908401906001016123cd565b5090979650505050505050565b8035801515811461237a57600080fd5b600082601f83011261241757600080fd5b61242683833560208501612306565b9392505050565b60006020828403121561243f57600080fd5b61242682612363565b6000806040838503121561245b57600080fd5b61246483612363565b915061247260208401612363565b90509250929050565b600080600080600060a0868803121561249357600080fd5b61249c86612363565b94506124aa60208701612363565b935060408601356001600160401b03808211156124c657600080fd5b6124d289838a0161237f565b945060608801359150808211156124e857600080fd5b6124f489838a0161237f565b9350608088013591508082111561250a57600080fd5b5061251788828901612406565b9150509295509295909350565b600080600080600060a0868803121561253c57600080fd5b61254586612363565b945061255360208701612363565b9350604086013592506060860135915060808601356001600160401b0381111561257c57600080fd5b61251788828901612406565b60008060006060848603121561259d57600080fd5b6125a684612363565b925060208401356001600160401b03808211156125c257600080fd5b6125ce8783880161237f565b935060408601359150808211156125e457600080fd5b506125f18682870161237f565b9150509250925092565b6000806000806080858703121561261157600080fd5b61261a85612363565b935060208501356001600160401b038082111561263657600080fd5b6126428883890161237f565b9450604087013591508082111561265857600080fd5b6126648883890161237f565b9350606087013591508082111561267a57600080fd5b5061268787828801612406565b91505092959194509250565b600080604083850312156126a657600080fd5b6126af83612363565b9150612472602084016123f6565b600080604083850312156126d057600080fd5b6126d983612363565b946020939093013593505050565b6000806000606084860312156126fc57600080fd5b61270584612363565b95602085013595506040909401359392505050565b6000806040838503121561272d57600080fd5b82356001600160401b038082111561274457600080fd5b818501915085601f83011261275857600080fd5b8135602061276582612db3565b6040516127728282612e9f565b8381528281019150858301600585901b870184018b101561279257600080fd5b600096505b848710156127bc576127a881612363565b835260019690960195918301918301612797565b50965050860135925050808211156127d357600080fd5b506127e08582860161237f565b9150509250929050565b600080602083850312156127fd57600080fd5b82356001600160401b038082111561281457600080fd5b818501915085601f83011261282857600080fd5b81358181111561283757600080fd5b8660208260051b850101111561284c57600080fd5b60209290920196919550909350505050565b60006020828403121561287057600080fd5b612426826123f6565b60006020828403121561288b57600080fd5b813561242681612ff7565b6000602082840312156128a857600080fd5b815161242681612ff7565b6000602082840312156128c557600080fd5b81356001600160401b038111156128db57600080fd5b8201601f810184136128ec57600080fd5b6114a284823560208401612306565b60006020828403121561290d57600080fd5b5035919050565b6000806040838503121561292757600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b838110156129665781518752958201959082019060010161294a565b509495945050505050565b60008151808452612989816020860160208601612e38565b601f01601f19169290920160200192915050565b600081516129af818560208601612e38565b9290920192915050565b600080845481600182811c9150808316806129d557607f831692505b60208084108214156129f557634e487b7160e01b86526022600452602486fd5b818015612a095760018114612a1a57612a47565b60ff19861689528489019650612a47565b60008b81526020902060005b86811015612a3f5781548b820152908501908301612a26565b505084890196505b505050505050612a57818561299d565b95945050505050565b6001600160a01b0386811682528516602082015260a060408201819052600090612a8c90830186612936565b8281036060840152612a9e8186612936565b90508281036080840152612ab28185612971565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090612af890830184612971565b979650505050505050565b6020815260006124266020830184612936565b604081526000612b296040830185612936565b8281036020840152612a578185612936565b6020815260006124266020830184612971565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b60208082526029908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260408201526808185c1c1c9bdd995960ba1b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60006001600160401b03821115612dcc57612dcc612f3c565b5060051b60200190565b60008219821115612de957612de9612efa565b500190565b600082612dfd57612dfd612f10565b500490565b6000816000190483118215151615612e1c57612e1c612efa565b500290565b600082821015612e3357612e33612efa565b500390565b60005b83811015612e53578181015183820152602001612e3b565b838111156109b65750506000910152565b600181811c90821680612e7857607f821691505b60208210811415612e9957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f191681016001600160401b0381118282101715612ec457612ec4612f3c565b6040525050565b6000600019821415612edf57612edf612efa565b5060010190565b600082612ef557612ef5612f10565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d1115612f6b5760046000803e5060005160e01c5b90565b600060443d1015612f7c5790565b6040516003193d81016004833e81513d6001600160401b038160248401118184111715612fab57505050505090565b8285019150815181811115612fc35750505050505090565b843d8701016020828501011115612fdd5750505050505090565b612fec60208286010187612e9f565b509095945050505050565b6001600160e01b031981168114610bbd57600080fdfea2646970667358221220cf16a7bfbd8592db846f9cc444d2d2bbdd3959c887118301728693fce936d18e64736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000d4d7973746572795368656c6c7300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d4d7973746572795368656c6c7300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003b697066733a2f2f697066732f516d504146484e3459734658746277397a4257315158744338596e4d58464a6d574e6a574859635553707476654a2f0000000000

-----Decoded View---------------
Arg [0] : _name (string): MysteryShells
Arg [1] : _symbol (string): MysteryShells
Arg [2] : _uri (string): ipfs://ipfs/QmPAFHN4YsFXtbw9zBW1QXtC8YnMXFJmWNjWHYcUSptveJ/

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [4] : 4d7973746572795368656c6c7300000000000000000000000000000000000000
Arg [5] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [6] : 4d7973746572795368656c6c7300000000000000000000000000000000000000
Arg [7] : 000000000000000000000000000000000000000000000000000000000000003b
Arg [8] : 697066733a2f2f697066732f516d504146484e3459734658746277397a425731
Arg [9] : 5158744338596e4d58464a6d574e6a574859635553707476654a2f0000000000


Deployed Bytecode Sourcemap

49439:5052:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26041:231;;;;;;;;;;-1:-1:-1;26041:231:0;;;;;:::i;:::-;;:::i;:::-;;;14821:25:1;;;14809:2;14794:18;26041:231:0;;;;;;;;54276:212;;;;;;;;;;-1:-1:-1;54276:212:0;;;;;:::i;:::-;;:::i;:::-;;;14648:14:1;;14641:22;14623:41;;14611:2;14596:18;54276:212:0;14483:187:1;51631:83:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;51377:245::-;;;;;;;;;;-1:-1:-1;51377:245:0;;;;;:::i;:::-;;:::i;52562:127::-;;;;;;;;;;-1:-1:-1;52562:127:0;;;;;:::i;:::-;;:::i;:::-;;52060:86;;;;;;;;;;-1:-1:-1;52060:86:0;;;;;:::i;:::-;;:::i;52700:167::-;;;;;;;;;;-1:-1:-1;52700:167:0;;;;;:::i;:::-;;:::i;50132:34::-;;;;;;;;;;;;;;;;49867:41;;;;;;;;;;;;;;;;27980:442;;;;;;;;;;-1:-1:-1;27980:442:0;;;;;:::i;:::-;;:::i;50173:48::-;;;;;;;;;;-1:-1:-1;50173:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;50577:318;;;;;;:::i;:::-;;:::i;26438:524::-;;;;;;;;;;-1:-1:-1;26438:524:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;43492:122::-;;;;;;;;;;-1:-1:-1;43492:122:0;;;;;:::i;:::-;43549:4;43370:16;;;:12;:16;;;;;;-1:-1:-1;;;43492:122:0;52154:145;;;;;;;;;;-1:-1:-1;52154:145:0;;;;;:::i;:::-;;:::i;51842:102::-;;;;;;;;;;-1:-1:-1;51842:102:0;;;;;:::i;:::-;;:::i;49915:46::-;;;;;;;;;;;;;;;;50100:25;;;;;;;;;;-1:-1:-1;50100:25:0;;;;;;;;49817:43;;;;;;;;;;;;;;;;52307:154;;;;;;;;;;-1:-1:-1;52307:154:0;;;;;:::i;:::-;;:::i;42181:353::-;;;;;;;;;;-1:-1:-1;42181:353:0;;;;;:::i;:::-;;:::i;46340:103::-;;;;;;;;;;;;;:::i;50903:453::-;;;;;;;;;;-1:-1:-1;50903:453:0;;;;;:::i;:::-;;:::i;45689:87::-;;;;;;;;;;-1:-1:-1;45762:6:0;;45689:87;;-1:-1:-1;;;;;45762:6:0;;;12289:51:1;;12277:2;12262:18;45689:87:0;12143:203:1;51952:100:0;;;;;;;;;;-1:-1:-1;51952:100:0;;;;;:::i;:::-;;:::i;51722:87::-;;;;;;;;;;;;;:::i;27035:155::-;;;;;;;;;;-1:-1:-1;27035:155:0;;;;;:::i;:::-;;:::i;52875:191::-;;;;;;;;;;;;;:::i;49564:21::-;;;;;;;;;;;;;:::i;50019:39::-;;;;;;;;;;;;;;;;49593:26;;;;;;;;;;;;;:::i;43281:113::-;;;;;;;;;;-1:-1:-1;43281:113:0;;;;;:::i;:::-;43343:7;43370:16;;;:12;:16;;;;;;;43281:113;49968:44;;;;;;;;;;;;;;;;49538:19;;;;;;;;;;;;;:::i;50065:26::-;;;;;;;;;;;;;;;;27262:168;;;;;;;;;;-1:-1:-1;27262:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;27385:27:0;;;27361:4;27385:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;27262:168;27502:401;;;;;;;;;;-1:-1:-1;27502:401:0;;;;;:::i;:::-;;:::i;46598:201::-;;;;;;;;;;-1:-1:-1;46598:201:0;;;;;:::i;:::-;;:::i;41852:321::-;;;;;;;;;;-1:-1:-1;41852:321:0;;;;;:::i;:::-;;:::i;52469:81::-;;;;;;;;;;-1:-1:-1;52469:81:0;;;;;:::i;:::-;;:::i;26041:231::-;26127:7;-1:-1:-1;;;;;26155:21:0;;26147:77;;;;-1:-1:-1;;;26147:77:0;;16463:2:1;26147:77:0;;;16445:21:1;16502:2;16482:18;;;16475:30;16541:34;16521:18;;;16514:62;-1:-1:-1;;;16592:18:1;;;16585:41;16643:19;;26147:77:0;;;;;;;;;-1:-1:-1;26242:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;26242:22:0;;;;;;;;;;;;26041:231::o;54276:212::-;54420:4;54444:36;54468:11;54444:23;:36::i;:::-;54437:43;54276:212;-1:-1:-1;;54276:212:0:o;51631:83::-;51668:13;51701:5;51694:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51631:83;:::o;51377:245::-;51490:1;43370:16;;;:12;:16;;;;;;51433:13;;-1:-1:-1;51463:55:0;;;;-1:-1:-1;;;51463:55:0;;21551:2:1;51463:55:0;;;21533:21:1;21590:2;21570:18;;;21563:30;-1:-1:-1;;;21609:18:1;;;21602:52;21671:18;;51463:55:0;21349:346:1;51463:55:0;51578:12;51591:21;51608:3;51591:16;:21::i;:::-;51561:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;51547:67;;51377:245;;;:::o;52562:127::-;45762:6;;-1:-1:-1;;;;;45762:6:0;23838:10;45909:23;45901:68;;;;-1:-1:-1;;;45901:68:0;;;;;;;:::i;:::-;52651:30:::1;52657:7;52666:2;52670:6;52651:30;;;;;;;;;;;::::0;:5:::1;:30::i;:::-;52562:127:::0;;;:::o;52060:86::-;45762:6;;-1:-1:-1;;;;;45762:6:0;23838:10;45909:23;45901:68;;;;-1:-1:-1;;;45901:68:0;;;;;;;:::i;:::-;52122:6:::1;:16:::0;;-1:-1:-1;;52122:16:0::1;::::0;::::1;;::::0;;;::::1;::::0;;52060:86::o;52700:167::-;45762:6;;-1:-1:-1;;;;;45762:6:0;23838:10;45909:23;45901:68;;;;-1:-1:-1;;;45901:68:0;;;;;;;:::i;:::-;52828:31:::1;52839:2;52842:3;52846:7;52854:4;52828:10;:31::i;:::-;52700:167:::0;;;;:::o;27980:442::-;-1:-1:-1;;;;;28213:20:0;;23838:10;28213:20;;:60;;-1:-1:-1;28237:36:0;28254:4;23838:10;27262:168;:::i;28237:36::-;28191:160;;;;-1:-1:-1;;;28191:160:0;;18854:2:1;28191:160:0;;;18836:21:1;18893:2;18873:18;;;18866:30;18932:34;18912:18;;;18905:62;-1:-1:-1;;;18983:18:1;;;18976:48;19041:19;;28191:160:0;18652:414:1;28191:160:0;28362:52;28385:4;28391:2;28395:3;28400:7;28409:4;28362:22;:52::i;:::-;27980:442;;;;;:::o;50577:318::-;50294:15;;50276;:33;:68;;;;;50331:13;;50313:15;:31;50276:68;50268:103;;;;-1:-1:-1;;;50268:103:0;;21902:2:1;50268:103:0;;;21884:21:1;21941:2;21921:18;;;21914:30;-1:-1:-1;;;21960:18:1;;;21953:52;22022:18;;50268:103:0;21700:346:1;50268:103:0;50662:6:::1;::::0;::::1;;50661:7;50653:34;;;::::0;-1:-1:-1;;;50653:34:0;;24589:2:1;50653:34:0::1;::::0;::::1;24571:21:1::0;24628:2;24608:18;;;24601:30;-1:-1:-1;;;24647:18:1;;;24640:44;24701:18;;50653:34:0::1;24387:338:1::0;50653:34:0::1;50715:1;50706:6;:10;:33;;;;-1:-1:-1::0;50729:6:0::1;::::0;:10:::1;::::0;50738:1:::1;50729:10;:::i;:::-;50720:6;:19;50706:33;50698:67;;;::::0;-1:-1:-1;;;50698:67:0;;16113:2:1;50698:67:0::1;::::0;::::1;16095:21:1::0;16152:2;16132:18;;;16125:30;-1:-1:-1;;;16171:18:1;;;16164:51;16232:18;;50698:67:0::1;15911:345:1::0;50698:67:0::1;50806:11;::::0;50797:20:::1;::::0;:6;:20:::1;:::i;:::-;50784:9;:33;;50776:66;;;::::0;-1:-1:-1;;;50776:66:0;;19273:2:1;50776:66:0::1;::::0;::::1;19255:21:1::0;19312:2;19292:18;;;19285:30;-1:-1:-1;;;19331:18:1;;;19324:50;19391:18;;50776:66:0::1;19071:344:1::0;50776:66:0::1;50855:32;50861:10;50873:1;50876:6;50855:32;;;;;;;;;;;::::0;:5:::1;:32::i;:::-;50577:318:::0;:::o;26438:524::-;26594:16;26655:3;:10;26636:8;:15;:29;26628:83;;;;-1:-1:-1;;;26628:83:0;;23008:2:1;26628:83:0;;;22990:21:1;23047:2;23027:18;;;23020:30;23086:34;23066:18;;;23059:62;-1:-1:-1;;;23137:18:1;;;23130:39;23186:19;;26628:83:0;22806:405:1;26628:83:0;26724:30;26771:8;:15;-1:-1:-1;;;;;26757:30:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26757:30:0;;26724:63;;26805:9;26800:122;26824:8;:15;26820:1;:19;26800:122;;;26880:30;26890:8;26899:1;26890:11;;;;;;;;:::i;:::-;;;;;;;26903:3;26907:1;26903:6;;;;;;;;:::i;:::-;;;;;;;26880:9;:30::i;:::-;26861:13;26875:1;26861:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;26841:3;;;:::i;:::-;;;26800:122;;;-1:-1:-1;26941:13:0;26438:524;-1:-1:-1;;;26438:524:0:o;52154:145::-;45762:6;;-1:-1:-1;;;;;45762:6:0;23838:10;45909:23;45901:68;;;;-1:-1:-1;;;45901:68:0;;;;;;;:::i;:::-;52238:15:::1;:23:::0;;;;52272:13:::1;:19:::0;52154:145::o;51842:102::-;45762:6;;-1:-1:-1;;;;;45762:6:0;23838:10;45909:23;45901:68;;;;-1:-1:-1;;;45901:68:0;;;;;;;:::i;:::-;51914:22;;::::1;::::0;:12:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;;51842:102:::0;:::o;52307:154::-;45762:6;;-1:-1:-1;;;;;45762:6:0;23838:10;45909:23;45901:68;;;;-1:-1:-1;;;45901:68:0;;;;;;;:::i;:::-;52394:18:::1;:26:::0;;;;52431:16:::1;:22:::0;52307:154::o;42181:353::-;-1:-1:-1;;;;;42346:23:0;;23838:10;42346:23;;:66;;-1:-1:-1;42373:39:0;42390:7;23838:10;27262:168;:::i;42373:39::-;42324:157;;;;-1:-1:-1;;;42324:157:0;;;;;;;:::i;:::-;42494:32;42505:7;42514:3;42519:6;42494:10;:32::i;46340:103::-;45762:6;;-1:-1:-1;;;;;45762:6:0;23838:10;45909:23;45901:68;;;;-1:-1:-1;;;45901:68:0;;;;;;;:::i;:::-;46405:30:::1;46432:1;46405:18;:30::i;:::-;46340:103::o:0;50903:453::-;50466:18;;50448:15;:36;:74;;;;;50506:16;;50488:15;:34;50448:74;50440:109;;;;-1:-1:-1;;;50440:109:0;;21902:2:1;50440:109:0;;;21884:21:1;21941:2;21921:18;;;21914:30;-1:-1:-1;;;21960:18:1;;;21953:52;22022:18;;50440:109:0;21700:346:1;50440:109:0;51015:28:::1;::::0;;51032:10:::1;10669:2:1::0;10665:15;-1:-1:-1;;10661:53:1;51015:28:0::1;::::0;;::::1;10649:66:1::0;;;;51015:28:0;;;;;;;;;10731:12:1;;;;51015:28:0;;;51005:39;;;::::1;::::0;51064:6:::1;::::0;::::1;;51063:7;51055:34;;;::::0;-1:-1:-1;;;51055:34:0;;24589:2:1;51055:34:0::1;::::0;::::1;24571:21:1::0;24628:2;24608:18;;;24601:30;-1:-1:-1;;;24647:18:1;;;24640:44;24701:18;;51055:34:0::1;24387:338:1::0;51055:34:0::1;51108:59;51127:12;;51108:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;51141:19:0::1;::::0;;-1:-1:-1;51162:4:0;;-1:-1:-1;51108:18:0::1;:59::i;:::-;51100:94;;;::::0;-1:-1:-1;;;51100:94:0;;18097:2:1;51100:94:0::1;::::0;::::1;18079:21:1::0;18136:2;18116:18;;;18109:30;-1:-1:-1;;;18155:18:1;;;18148:52;18217:18;;51100:94:0::1;17895:346:1::0;51100:94:0::1;51231:10;51214:28;::::0;;;:16:::1;:28;::::0;;;;;::::1;;51213:29;51205:57;;;::::0;-1:-1:-1;;;51205:57:0;;20437:2:1;51205:57:0::1;::::0;::::1;20419:21:1::0;20476:2;20456:18;;;20449:30;-1:-1:-1;;;20495:18:1;;;20488:45;20550:18;;51205:57:0::1;20235:339:1::0;51205:57:0::1;51292:10;51275:28;::::0;;;:16:::1;:28;::::0;;;;;;;:35;;-1:-1:-1;;51275:35:0::1;51306:4;51275:35:::0;;::::1;::::0;;;51321:27;;;;::::1;::::0;;;;;;::::1;::::0;51292:10;51275:28;51321:5:::1;:27::i;51952:100::-:0;45762:6;;-1:-1:-1;;;;;45762:6:0;23838:10;45909:23;45901:68;;;;-1:-1:-1;;;45901:68:0;;;;;;;:::i;:::-;52029:15:::1;:5:::0;52037:7:::1;52029:15;:::i;:::-;52015:11;:29:::0;-1:-1:-1;51952:100:0:o;51722:87::-;51761:13;51794:7;51787:14;;;;;:::i;27035:155::-;27130:52;23838:10;27163:8;27173;27130:18;:52::i;52875:191::-;45762:6;;-1:-1:-1;;;;;45762:6:0;23838:10;45909:23;45901:68;;;;-1:-1:-1;;;45901:68:0;;;;;;;:::i;:::-;22132:1:::1;22730:7;;:19;;22722:63;;;::::0;-1:-1:-1;;;22722:63:0;;24229:2:1;22722:63:0::1;::::0;::::1;24211:21:1::0;24268:2;24248:18;;;24241:30;24307:33;24287:18;;;24280:61;24358:18;;22722:63:0::1;24027:355:1::0;22722:63:0::1;22132:1;22863:7;:18:::0;52962:49:::2;::::0;52944:12:::2;::::0;52962:10:::2;::::0;52985:21:::2;::::0;52944:12;52962:49;52944:12;52962:49;52985:21;52962:10;:49:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52943:68;;;53030:7;53022:36;;;::::0;-1:-1:-1;;;53022:36:0;;22253:2:1;53022:36:0::2;::::0;::::2;22235:21:1::0;22292:2;22272:18;;;22265:30;-1:-1:-1;;;22311:18:1;;;22304:46;22367:18;;53022:36:0::2;22051:340:1::0;53022:36:0::2;-1:-1:-1::0;22088:1:0::1;23042:7;:22:::0;52875:191::o;49564:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49593:26::-;;;;;;;:::i;49538:19::-;;;;;;;:::i;27502:401::-;-1:-1:-1;;;;;27710:20:0;;23838:10;27710:20;;:60;;-1:-1:-1;27734:36:0;27751:4;23838:10;27262:168;:::i;27734:36::-;27688:151;;;;-1:-1:-1;;;27688:151:0;;;;;;;:::i;:::-;27850:45;27868:4;27874:2;27878;27882:6;27890:4;27850:17;:45::i;46598:201::-;45762:6;;-1:-1:-1;;;;;45762:6:0;23838:10;45909:23;45901:68;;;;-1:-1:-1;;;45901:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46687:22:0;::::1;46679:73;;;::::0;-1:-1:-1;;;46679:73:0;;16875:2:1;46679:73:0::1;::::0;::::1;16857:21:1::0;16914:2;16894:18;;;16887:30;16953:34;16933:18;;;16926:62;-1:-1:-1;;;17004:18:1;;;16997:36;17050:19;;46679:73:0::1;16673:402:1::0;46679:73:0::1;46763:28;46782:8;46763:18;:28::i;41852:321::-:0;-1:-1:-1;;;;;41992:23:0;;23838:10;41992:23;;:66;;-1:-1:-1;42019:39:0;42036:7;23838:10;27262:168;:::i;42019:39::-;41970:157;;;;-1:-1:-1;;;41970:157:0;;;;;;;:::i;:::-;42140:25;42146:7;42155:2;42159:5;42140;:25::i;52469:81::-;45762:6;;-1:-1:-1;;;;;45762:6:0;23838:10;45909:23;45901:68;;;;-1:-1:-1;;;45901:68:0;;;;;;;:::i;:::-;52530:6:::1;:12:::0;52469:81::o;25064:310::-;25166:4;-1:-1:-1;;;;;;25203:41:0;;-1:-1:-1;;;25203:41:0;;:110;;-1:-1:-1;;;;;;;25261:52:0;;-1:-1:-1;;;25261:52:0;25203:110;:163;;;-1:-1:-1;;;;;;;;;;10425:40:0;;;25330:36;10316:157;47522:723;47578:13;47799:10;47795:53;;-1:-1:-1;;47826:10:0;;;;;;;;;;;;-1:-1:-1;;;47826:10:0;;;;;47522:723::o;47795:53::-;47873:5;47858:12;47914:78;47921:9;;47914:78;;47947:8;;;;:::i;:::-;;-1:-1:-1;47970:10:0;;-1:-1:-1;47978:2:0;47970:10;;:::i;:::-;;;47914:78;;;48002:19;48034:6;-1:-1:-1;;;;;48024:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48024:17:0;;48002:39;;48052:154;48059:10;;48052:154;;48086:11;48096:1;48086:11;;:::i;:::-;;-1:-1:-1;48155:10:0;48163:2;48155:5;:10;:::i;:::-;48142:24;;:2;:24;:::i;:::-;48129:39;;48112:6;48119;48112:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;48112:56:0;;;;;;;;-1:-1:-1;48183:11:0;48192:2;48183:11;;:::i;:::-;;;48052:154;;;48230:6;47522:723;-1:-1:-1;;;;47522:723:0:o;53091:204::-;53249:38;53261:7;53270:2;53274:6;53282:4;53249:11;:38::i;53303:227::-;53482:40;53499:2;53503:3;53508:7;53517:4;53482:16;:40::i;30218:1146::-;30445:7;:14;30431:3;:10;:28;30423:81;;;;-1:-1:-1;;;30423:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30523:16:0;;30515:66;;;;-1:-1:-1;;;30515:66:0;;;;;;;:::i;:::-;23838:10;30638:60;23838:10;30669:4;30675:2;30679:3;30684:7;30693:4;30638:20;:60::i;:::-;30716:9;30711:421;30735:3;:10;30731:1;:14;30711:421;;;30767:10;30780:3;30784:1;30780:6;;;;;;;;:::i;:::-;;;;;;;30767:19;;30801:14;30818:7;30826:1;30818:10;;;;;;;;:::i;:::-;;;;;;;;;;;;30845:19;30867:13;;;;;;;;;;-1:-1:-1;;;;;30867:19:0;;;;;;;;;;;;30818:10;;-1:-1:-1;30909:21:0;;;;30901:76;;;;-1:-1:-1;;;30901:76:0;;;;;;;:::i;:::-;31021:9;:13;;;;;;;;;;;-1:-1:-1;;;;;31021:19:0;;;;;;;;;;31043:20;;;31021:42;;31093:17;;;;;;;:27;;31043:20;;31021:9;31093:27;;31043:20;;31093:27;:::i;:::-;;;;;;;;30752:380;;;30747:3;;;;:::i;:::-;;;30711:421;;;;31179:2;-1:-1:-1;;;;;31149:47:0;31173:4;-1:-1:-1;;;;;31149:47:0;31163:8;-1:-1:-1;;;;;31149:47:0;;31183:3;31188:7;31149:47;;;;;;;:::i;:::-;;;;;;;;31281:75;31317:8;31327:4;31333:2;31337:3;31342:7;31351:4;31281:35;:75::i;:::-;30412:952;30218:1146;;;;;:::o;53716:203::-;53872:39;53889:7;53898:3;53903:7;53872:16;:39::i;46959:191::-;47052:6;;;-1:-1:-1;;;;;47069:17:0;;;-1:-1:-1;;;;;;47069:17:0;;;;;;;47102:40;;47052:6;;;47069:17;47052:6;;47102:40;;47033:16;;47102:40;47022:128;46959:191;:::o;18854:190::-;18979:4;19032;19003:25;19016:5;19023:4;19003:12;:25::i;:::-;:33;;18854:190;-1:-1:-1;;;;18854:190:0:o;36952:331::-;37107:8;-1:-1:-1;;;;;37098:17:0;:5;-1:-1:-1;;;;;37098:17:0;;;37090:71;;;;-1:-1:-1;;;37090:71:0;;22598:2:1;37090:71:0;;;22580:21:1;22637:2;22617:18;;;22610:30;22676:34;22656:18;;;22649:62;-1:-1:-1;;;22727:18:1;;;22720:39;22776:19;;37090:71:0;22396:405:1;37090:71:0;-1:-1:-1;;;;;37172:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;37172:46:0;;;;;;;;;;37234:41;;14623::1;;;37234::0;;14596:18:1;37234:41:0;;;;;;;36952:331;;;:::o;28886:974::-;-1:-1:-1;;;;;29074:16:0;;29066:66;;;;-1:-1:-1;;;29066:66:0;;;;;;;:::i;:::-;23838:10;29145:16;29210:21;29228:2;29210:17;:21::i;:::-;29187:44;;29242:24;29269:25;29287:6;29269:17;:25::i;:::-;29242:52;;29307:60;29328:8;29338:4;29344:2;29348:3;29353:7;29362:4;29307:20;:60::i;:::-;29380:19;29402:13;;;;;;;;;;;-1:-1:-1;;;;;29402:19:0;;;;;;;;;;29440:21;;;;29432:76;;;;-1:-1:-1;;;29432:76:0;;;;;;;:::i;:::-;29544:9;:13;;;;;;;;;;;-1:-1:-1;;;;;29544:19:0;;;;;;;;;;29566:20;;;29544:42;;29608:17;;;;;;;:27;;29566:20;;29544:9;29608:27;;29566:20;;29608:27;:::i;:::-;;;;-1:-1:-1;;29653:46:0;;;25086:25:1;;;25142:2;25127:18;;25120:34;;;-1:-1:-1;;;;;29653:46:0;;;;;;;;;;;;;;25059:18:1;29653:46:0;;;;;;;29784:68;29815:8;29825:4;29831:2;29835;29839:6;29847:4;29784:30;:68::i;:::-;29055:805;;;;28886:974;;;;;:::o;53538:170::-;53668:32;53680:7;53689:2;53693:6;53668:11;:32::i;32682:729::-;-1:-1:-1;;;;;32835:16:0;;32827:62;;;;-1:-1:-1;;;32827:62:0;;;;;;;:::i;:::-;23838:10;32902:16;32967:21;32985:2;32967:17;:21::i;:::-;32944:44;;32999:24;33026:25;33044:6;33026:17;:25::i;:::-;32999:52;;33064:66;33085:8;33103:1;33107:2;33111:3;33116:7;33125:4;33064:20;:66::i;:::-;33143:9;:13;;;;;;;;;;;-1:-1:-1;;;;;33143:17:0;;;;;;;;;:27;;33164:6;;33143:9;:27;;33164:6;;33143:27;:::i;:::-;;;;-1:-1:-1;;33186:52:0;;;25086:25:1;;;25142:2;25127:18;;25120:34;;;-1:-1:-1;;;;;33186:52:0;;;;33219:1;;33186:52;;;;;;25059:18:1;33186:52:0;;;;;;;33329:74;33360:8;33378:1;33382:2;33386;33390:6;33398:4;33329:30;:74::i;:::-;32816:595;;;32682:729;;;;:::o;33767:813::-;-1:-1:-1;;;;;33945:16:0;;33937:62;;;;-1:-1:-1;;;33937:62:0;;;;;;;:::i;:::-;34032:7;:14;34018:3;:10;:28;34010:81;;;;-1:-1:-1;;;34010:81:0;;;;;;;:::i;:::-;23838:10;34148:66;23838:10;34104:16;34191:2;34195:3;34200:7;34209:4;34148:20;:66::i;:::-;34232:9;34227:103;34251:3;:10;34247:1;:14;34227:103;;;34308:7;34316:1;34308:10;;;;;;;;:::i;:::-;;;;;;;34283:9;:17;34293:3;34297:1;34293:6;;;;;;;;:::i;:::-;;;;;;;34283:17;;;;;;;;;;;:21;34301:2;-1:-1:-1;;;;;34283:21:0;-1:-1:-1;;;;;34283:21:0;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;34263:3:0;;-1:-1:-1;34263:3:0;;;:::i;:::-;;;;34227:103;;;;34383:2;-1:-1:-1;;;;;34347:53:0;34379:1;-1:-1:-1;;;;;34347:53:0;34361:8;-1:-1:-1;;;;;34347:53:0;;34387:3;34392:7;34347:53;;;;;;;:::i;:::-;;;;;;;;34491:81;34527:8;34545:1;34549:2;34553:3;34558:7;34567:4;34491:35;:81::i;53929:337::-;54192:66;54219:8;54229:4;54235:2;54239:3;54244:7;54253:4;54192:26;:66::i;40395:813::-;-1:-1:-1;;;;;40635:13:0;;1559:19;:23;40631:570;;40671:79;;-1:-1:-1;;;40671:79:0;;-1:-1:-1;;;;;40671:43:0;;;;;:79;;40715:8;;40725:4;;40731:3;;40736:7;;40745:4;;40671:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40671:79:0;;;;;;;;-1:-1:-1;;40671:79:0;;;;;;;;;;;;:::i;:::-;;;40667:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;41063:6;41056:14;;-1:-1:-1;;;41056:14:0;;;;;;;;:::i;40667:523::-;;;41112:62;;-1:-1:-1;;;41112:62:0;;15283:2:1;41112:62:0;;;15265:21:1;15322:2;15302:18;;;15295:30;15361:34;15341:18;;;15334:62;-1:-1:-1;;;15412:18:1;;;15405:50;15472:19;;41112:62:0;15081:416:1;40667:523:0;-1:-1:-1;;;;;;40832:60:0;;-1:-1:-1;;;40832:60:0;40828:159;;40917:50;;-1:-1:-1;;;40917:50:0;;;;;;;:::i;35841:969::-;-1:-1:-1;;;;;35993:18:0;;35985:66;;;;-1:-1:-1;;;35985:66:0;;;;;;;:::i;:::-;36084:7;:14;36070:3;:10;:28;36062:81;;;;-1:-1:-1;;;36062:81:0;;;;;;;:::i;:::-;36156:16;23838:10;36156:31;;36200:66;36221:8;36231:4;36245:1;36249:3;36254:7;36200:66;;;;;;;;;;;;:20;:66::i;:::-;36284:9;36279:373;36303:3;:10;36299:1;:14;36279:373;;;36335:10;36348:3;36352:1;36348:6;;;;;;;;:::i;:::-;;;;;;;36335:19;;36369:14;36386:7;36394:1;36386:10;;;;;;;;:::i;:::-;;;;;;;;;;;;36413:19;36435:13;;;;;;;;;;-1:-1:-1;;;;;36435:19:0;;;;;;;;;;;;36386:10;;-1:-1:-1;36477:21:0;;;;36469:70;;;;-1:-1:-1;;;36469:70:0;;;;;;;:::i;:::-;36583:9;:13;;;;;;;;;;;-1:-1:-1;;;;;36583:19:0;;;;;;;;;;36605:20;;36583:42;;36315:3;;;;:::i;:::-;;;;36279:373;;;;36707:1;-1:-1:-1;;;;;36669:55:0;36693:4;-1:-1:-1;;;;;36669:55:0;36683:8;-1:-1:-1;;;;;36669:55:0;;36711:3;36716:7;36669:55;;;;;;;:::i;:::-;;;;;;;;36737:65;;;;;;;;;36781:1;36737:65;;;30218:1146;19406:675;19489:7;19532:4;19489:7;19547:497;19571:5;:12;19567:1;:16;19547:497;;;19605:20;19628:5;19634:1;19628:8;;;;;;;;:::i;:::-;;;;;;;19605:31;;19671:12;19655;:28;19651:382;;20157:13;20207:15;;;20243:4;20236:15;;;20290:4;20274:21;;19783:57;;19651:382;;;20157:13;20207:15;;;20243:4;20236:15;;;20290:4;20274:21;;19960:57;;19651:382;-1:-1:-1;19585:3:0;;;;:::i;:::-;;;;19547:497;;41216:198;41336:16;;;41350:1;41336:16;;;;;;;;;41282;;41311:22;;41336:16;;;;;;;;;;;;-1:-1:-1;41336:16:0;41311:41;;41374:7;41363:5;41369:1;41363:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;41401:5;41216:198;-1:-1:-1;;41216:198:0:o;39643:744::-;-1:-1:-1;;;;;39858:13:0;;1559:19;:23;39854:526;;39894:72;;-1:-1:-1;;;39894:72:0;;-1:-1:-1;;;;;39894:38:0;;;;;:72;;39933:8;;39943:4;;39949:2;;39953:6;;39961:4;;39894:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39894:72:0;;;;;;;;-1:-1:-1;;39894:72:0;;;;;;;;;;;;:::i;:::-;;;39890:479;;;;:::i;:::-;-1:-1:-1;;;;;;40016:55:0;;-1:-1:-1;;;40016:55:0;40012:154;;40096:50;;-1:-1:-1;;;40096:50:0;;;;;;;:::i;34830:808::-;-1:-1:-1;;;;;34957:18:0;;34949:66;;;;-1:-1:-1;;;34949:66:0;;;;;;;:::i;:::-;23838:10;35028:16;35093:21;35111:2;35093:17;:21::i;:::-;35070:44;;35125:24;35152:25;35170:6;35152:17;:25::i;:::-;35125:52;;35190:66;35211:8;35221:4;35235:1;35239:3;35244:7;35190:66;;;;;;;;;;;;:20;:66::i;:::-;35269:19;35291:13;;;;;;;;;;;-1:-1:-1;;;;;35291:19:0;;;;;;;;;;35329:21;;;;35321:70;;;;-1:-1:-1;;;35321:70:0;;;;;;;:::i;:::-;35427:9;:13;;;;;;;;;;;-1:-1:-1;;;;;35427:19:0;;;;;;;;;;;;35449:20;;;35427:42;;35498:54;;25086:25:1;;;25127:18;;;25120:34;;;35427:19:0;;35498:54;;;;;;25059:18:1;35498:54:0;;;;;;;35565:65;;;;;;;;;35609:1;35565:65;;;30218:1146;43689:931;-1:-1:-1;;;;;44011:18:0;;44007:160;;44051:9;44046:110;44070:3;:10;44066:1;:14;44046:110;;;44130:7;44138:1;44130:10;;;;;;;;:::i;:::-;;;;;;;44106:12;:20;44119:3;44123:1;44119:6;;;;;;;;:::i;:::-;;;;;;;44106:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;44082:3:0;;-1:-1:-1;44082:3:0;;:::i;:::-;;;44046:110;;;;44007:160;-1:-1:-1;;;;;44183:16:0;;44179:434;;44221:9;44216:386;44240:3;:10;44236:1;:14;44216:386;;;44276:10;44289:3;44293:1;44289:6;;;;;;;;:::i;:::-;;;;;;;44276:19;;44314:14;44331:7;44339:1;44331:10;;;;;;;;:::i;:::-;;;;;;;44314:27;;44360:14;44377:12;:16;44390:2;44377:16;;;;;;;;;;;;44360:33;;44430:6;44420;:16;;44412:69;;;;-1:-1:-1;;;44412:69:0;;21142:2:1;44412:69:0;;;21124:21:1;21181:2;21161:18;;;21154:30;21220:34;21200:18;;;21193:62;-1:-1:-1;;;21271:18:1;;;21264:38;21319:19;;44412:69:0;20940:404:1;44412:69:0;44533:16;;;;:12;:16;;;;;;44552:15;;44533:34;;44252:3;;;:::i;:::-;;;44216:386;;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:468:1;78:5;-1:-1:-1;;;;;104:6:1;101:30;98:56;;;134:18;;:::i;:::-;183:2;177:9;195:69;252:2;231:15;;-1:-1:-1;;227:29:1;258:4;223:40;177:9;195:69;:::i;:::-;282:6;273:15;;312:6;304;297:22;352:3;343:6;338:3;334:16;331:25;328:45;;;369:1;366;359:12;328:45;419:6;414:3;407:4;399:6;395:17;382:44;474:1;467:4;458:6;450;446:19;442:30;435:41;;14:468;;;;;:::o;487:173::-;555:20;;-1:-1:-1;;;;;604:31:1;;594:42;;584:70;;650:1;647;640:12;584:70;487:173;;;:::o;665:735::-;719:5;772:3;765:4;757:6;753:17;749:27;739:55;;790:1;787;780:12;739:55;826:6;813:20;852:4;875:43;915:2;875:43;:::i;:::-;947:2;941:9;959:31;987:2;979:6;959:31;:::i;:::-;1025:18;;;1059:15;;;;-1:-1:-1;1094:15:1;;;1144:1;1140:10;;;1128:23;;1124:32;;1121:41;-1:-1:-1;1118:61:1;;;1175:1;1172;1165:12;1118:61;1197:1;1207:163;1221:2;1218:1;1215:9;1207:163;;;1278:17;;1266:30;;1316:12;;;;1348;;;;1239:1;1232:9;1207:163;;;-1:-1:-1;1388:6:1;;665:735;-1:-1:-1;;;;;;;665:735:1:o;1405:160::-;1470:20;;1526:13;;1519:21;1509:32;;1499:60;;1555:1;1552;1545:12;1570:220;1612:5;1665:3;1658:4;1650:6;1646:17;1642:27;1632:55;;1683:1;1680;1673:12;1632:55;1705:79;1780:3;1771:6;1758:20;1751:4;1743:6;1739:17;1705:79;:::i;:::-;1696:88;1570:220;-1:-1:-1;;;1570:220:1:o;1795:186::-;1854:6;1907:2;1895:9;1886:7;1882:23;1878:32;1875:52;;;1923:1;1920;1913:12;1875:52;1946:29;1965:9;1946:29;:::i;1986:260::-;2054:6;2062;2115:2;2103:9;2094:7;2090:23;2086:32;2083:52;;;2131:1;2128;2121:12;2083:52;2154:29;2173:9;2154:29;:::i;:::-;2144:39;;2202:38;2236:2;2225:9;2221:18;2202:38;:::i;:::-;2192:48;;1986:260;;;;;:::o;2251:943::-;2405:6;2413;2421;2429;2437;2490:3;2478:9;2469:7;2465:23;2461:33;2458:53;;;2507:1;2504;2497:12;2458:53;2530:29;2549:9;2530:29;:::i;:::-;2520:39;;2578:38;2612:2;2601:9;2597:18;2578:38;:::i;:::-;2568:48;;2667:2;2656:9;2652:18;2639:32;-1:-1:-1;;;;;2731:2:1;2723:6;2720:14;2717:34;;;2747:1;2744;2737:12;2717:34;2770:61;2823:7;2814:6;2803:9;2799:22;2770:61;:::i;:::-;2760:71;;2884:2;2873:9;2869:18;2856:32;2840:48;;2913:2;2903:8;2900:16;2897:36;;;2929:1;2926;2919:12;2897:36;2952:63;3007:7;2996:8;2985:9;2981:24;2952:63;:::i;:::-;2942:73;;3068:3;3057:9;3053:19;3040:33;3024:49;;3098:2;3088:8;3085:16;3082:36;;;3114:1;3111;3104:12;3082:36;;3137:51;3180:7;3169:8;3158:9;3154:24;3137:51;:::i;:::-;3127:61;;;2251:943;;;;;;;;:::o;3199:606::-;3303:6;3311;3319;3327;3335;3388:3;3376:9;3367:7;3363:23;3359:33;3356:53;;;3405:1;3402;3395:12;3356:53;3428:29;3447:9;3428:29;:::i;:::-;3418:39;;3476:38;3510:2;3499:9;3495:18;3476:38;:::i;:::-;3466:48;;3561:2;3550:9;3546:18;3533:32;3523:42;;3612:2;3601:9;3597:18;3584:32;3574:42;;3667:3;3656:9;3652:19;3639:33;-1:-1:-1;;;;;3687:6:1;3684:30;3681:50;;;3727:1;3724;3717:12;3681:50;3750:49;3791:7;3782:6;3771:9;3767:22;3750:49;:::i;3810:669::-;3937:6;3945;3953;4006:2;3994:9;3985:7;3981:23;3977:32;3974:52;;;4022:1;4019;4012:12;3974:52;4045:29;4064:9;4045:29;:::i;:::-;4035:39;;4125:2;4114:9;4110:18;4097:32;-1:-1:-1;;;;;4189:2:1;4181:6;4178:14;4175:34;;;4205:1;4202;4195:12;4175:34;4228:61;4281:7;4272:6;4261:9;4257:22;4228:61;:::i;:::-;4218:71;;4342:2;4331:9;4327:18;4314:32;4298:48;;4371:2;4361:8;4358:16;4355:36;;;4387:1;4384;4377:12;4355:36;;4410:63;4465:7;4454:8;4443:9;4439:24;4410:63;:::i;:::-;4400:73;;;3810:669;;;;;:::o;4484:868::-;4629:6;4637;4645;4653;4706:3;4694:9;4685:7;4681:23;4677:33;4674:53;;;4723:1;4720;4713:12;4674:53;4746:29;4765:9;4746:29;:::i;:::-;4736:39;;4826:2;4815:9;4811:18;4798:32;-1:-1:-1;;;;;4890:2:1;4882:6;4879:14;4876:34;;;4906:1;4903;4896:12;4876:34;4929:61;4982:7;4973:6;4962:9;4958:22;4929:61;:::i;:::-;4919:71;;5043:2;5032:9;5028:18;5015:32;4999:48;;5072:2;5062:8;5059:16;5056:36;;;5088:1;5085;5078:12;5056:36;5111:63;5166:7;5155:8;5144:9;5140:24;5111:63;:::i;:::-;5101:73;;5227:2;5216:9;5212:18;5199:32;5183:48;;5256:2;5246:8;5243:16;5240:36;;;5272:1;5269;5262:12;5240:36;;5295:51;5338:7;5327:8;5316:9;5312:24;5295:51;:::i;:::-;5285:61;;;4484:868;;;;;;;:::o;5357:254::-;5422:6;5430;5483:2;5471:9;5462:7;5458:23;5454:32;5451:52;;;5499:1;5496;5489:12;5451:52;5522:29;5541:9;5522:29;:::i;:::-;5512:39;;5570:35;5601:2;5590:9;5586:18;5570:35;:::i;5616:254::-;5684:6;5692;5745:2;5733:9;5724:7;5720:23;5716:32;5713:52;;;5761:1;5758;5751:12;5713:52;5784:29;5803:9;5784:29;:::i;:::-;5774:39;5860:2;5845:18;;;;5832:32;;-1:-1:-1;;;5616:254:1:o;5875:322::-;5952:6;5960;5968;6021:2;6009:9;6000:7;5996:23;5992:32;5989:52;;;6037:1;6034;6027:12;5989:52;6060:29;6079:9;6060:29;:::i;:::-;6050:39;6136:2;6121:18;;6108:32;;-1:-1:-1;6187:2:1;6172:18;;;6159:32;;5875:322;-1:-1:-1;;;5875:322:1:o;6202:1219::-;6320:6;6328;6381:2;6369:9;6360:7;6356:23;6352:32;6349:52;;;6397:1;6394;6387:12;6349:52;6437:9;6424:23;-1:-1:-1;;;;;6507:2:1;6499:6;6496:14;6493:34;;;6523:1;6520;6513:12;6493:34;6561:6;6550:9;6546:22;6536:32;;6606:7;6599:4;6595:2;6591:13;6587:27;6577:55;;6628:1;6625;6618:12;6577:55;6664:2;6651:16;6686:4;6709:43;6749:2;6709:43;:::i;:::-;6781:2;6775:9;6793:31;6821:2;6813:6;6793:31;:::i;:::-;6859:18;;;6893:15;;;;-1:-1:-1;6928:11:1;;;6970:1;6966:10;;;6958:19;;6954:28;;6951:41;-1:-1:-1;6948:61:1;;;7005:1;7002;6995:12;6948:61;7027:1;7018:10;;7037:169;7051:2;7048:1;7045:9;7037:169;;;7108:23;7127:3;7108:23;:::i;:::-;7096:36;;7069:1;7062:9;;;;;7152:12;;;;7184;;7037:169;;;-1:-1:-1;7225:6:1;-1:-1:-1;;7269:18:1;;7256:32;;-1:-1:-1;;7300:16:1;;;7297:36;;;7329:1;7326;7319:12;7297:36;;7352:63;7407:7;7396:8;7385:9;7381:24;7352:63;:::i;:::-;7342:73;;;6202:1219;;;;;:::o;7426:615::-;7512:6;7520;7573:2;7561:9;7552:7;7548:23;7544:32;7541:52;;;7589:1;7586;7579:12;7541:52;7629:9;7616:23;-1:-1:-1;;;;;7699:2:1;7691:6;7688:14;7685:34;;;7715:1;7712;7705:12;7685:34;7753:6;7742:9;7738:22;7728:32;;7798:7;7791:4;7787:2;7783:13;7779:27;7769:55;;7820:1;7817;7810:12;7769:55;7860:2;7847:16;7886:2;7878:6;7875:14;7872:34;;;7902:1;7899;7892:12;7872:34;7955:7;7950:2;7940:6;7937:1;7933:14;7929:2;7925:23;7921:32;7918:45;7915:65;;;7976:1;7973;7966:12;7915:65;8007:2;7999:11;;;;;8029:6;;-1:-1:-1;7426:615:1;;-1:-1:-1;;;;7426:615:1:o;8046:180::-;8102:6;8155:2;8143:9;8134:7;8130:23;8126:32;8123:52;;;8171:1;8168;8161:12;8123:52;8194:26;8210:9;8194:26;:::i;8231:245::-;8289:6;8342:2;8330:9;8321:7;8317:23;8313:32;8310:52;;;8358:1;8355;8348:12;8310:52;8397:9;8384:23;8416:30;8440:5;8416:30;:::i;8481:249::-;8550:6;8603:2;8591:9;8582:7;8578:23;8574:32;8571:52;;;8619:1;8616;8609:12;8571:52;8651:9;8645:16;8670:30;8694:5;8670:30;:::i;8735:450::-;8804:6;8857:2;8845:9;8836:7;8832:23;8828:32;8825:52;;;8873:1;8870;8863:12;8825:52;8913:9;8900:23;-1:-1:-1;;;;;8938:6:1;8935:30;8932:50;;;8978:1;8975;8968:12;8932:50;9001:22;;9054:4;9046:13;;9042:27;-1:-1:-1;9032:55:1;;9083:1;9080;9073:12;9032:55;9106:73;9171:7;9166:2;9153:16;9148:2;9144;9140:11;9106:73;:::i;9190:180::-;9249:6;9302:2;9290:9;9281:7;9277:23;9273:32;9270:52;;;9318:1;9315;9308:12;9270:52;-1:-1:-1;9341:23:1;;9190:180;-1:-1:-1;9190:180:1:o;9375:248::-;9443:6;9451;9504:2;9492:9;9483:7;9479:23;9475:32;9472:52;;;9520:1;9517;9510:12;9472:52;-1:-1:-1;;9543:23:1;;;9613:2;9598:18;;;9585:32;;-1:-1:-1;9375:248:1:o;9628:435::-;9681:3;9719:5;9713:12;9746:6;9741:3;9734:19;9772:4;9801:2;9796:3;9792:12;9785:19;;9838:2;9831:5;9827:14;9859:1;9869:169;9883:6;9880:1;9877:13;9869:169;;;9944:13;;9932:26;;9978:12;;;;10013:15;;;;9905:1;9898:9;9869:169;;;-1:-1:-1;10054:3:1;;9628:435;-1:-1:-1;;;;;9628:435:1:o;10068:257::-;10109:3;10147:5;10141:12;10174:6;10169:3;10162:19;10190:63;10246:6;10239:4;10234:3;10230:14;10223:4;10216:5;10212:16;10190:63;:::i;:::-;10307:2;10286:15;-1:-1:-1;;10282:29:1;10273:39;;;;10314:4;10269:50;;10068:257;-1:-1:-1;;10068:257:1:o;10330:185::-;10372:3;10410:5;10404:12;10425:52;10470:6;10465:3;10458:4;10451:5;10447:16;10425:52;:::i;:::-;10493:16;;;;;10330:185;-1:-1:-1;;10330:185:1:o;10754:1174::-;10930:3;10959:1;10992:6;10986:13;11022:3;11044:1;11072:9;11068:2;11064:18;11054:28;;11132:2;11121:9;11117:18;11154;11144:61;;11198:4;11190:6;11186:17;11176:27;;11144:61;11224:2;11272;11264:6;11261:14;11241:18;11238:38;11235:165;;;-1:-1:-1;;;11299:33:1;;11355:4;11352:1;11345:15;11385:4;11306:3;11373:17;11235:165;11416:18;11443:104;;;;11561:1;11556:320;;;;11409:467;;11443:104;-1:-1:-1;;11476:24:1;;11464:37;;11521:16;;;;-1:-1:-1;11443:104:1;;11556:320;25426:1;25419:14;;;25463:4;25450:18;;11651:1;11665:165;11679:6;11676:1;11673:13;11665:165;;;11757:14;;11744:11;;;11737:35;11800:16;;;;11694:10;;11665:165;;;11669:3;;11859:6;11854:3;11850:16;11843:23;;11409:467;;;;;;;11892:30;11918:3;11910:6;11892:30;:::i;:::-;11885:37;10754:1174;-1:-1:-1;;;;;10754:1174:1:o;12351:826::-;-1:-1:-1;;;;;12748:15:1;;;12730:34;;12800:15;;12795:2;12780:18;;12773:43;12710:3;12847:2;12832:18;;12825:31;;;12673:4;;12879:57;;12916:19;;12908:6;12879:57;:::i;:::-;12984:9;12976:6;12972:22;12967:2;12956:9;12952:18;12945:50;13018:44;13055:6;13047;13018:44;:::i;:::-;13004:58;;13111:9;13103:6;13099:22;13093:3;13082:9;13078:19;13071:51;13139:32;13164:6;13156;13139:32;:::i;:::-;13131:40;12351:826;-1:-1:-1;;;;;;;;12351:826:1:o;13182:560::-;-1:-1:-1;;;;;13479:15:1;;;13461:34;;13531:15;;13526:2;13511:18;;13504:43;13578:2;13563:18;;13556:34;;;13621:2;13606:18;;13599:34;;;13441:3;13664;13649:19;;13642:32;;;13404:4;;13691:45;;13716:19;;13708:6;13691:45;:::i;:::-;13683:53;13182:560;-1:-1:-1;;;;;;;13182:560:1:o;13747:261::-;13926:2;13915:9;13908:21;13889:4;13946:56;13998:2;13987:9;13983:18;13975:6;13946:56;:::i;14013:465::-;14270:2;14259:9;14252:21;14233:4;14296:56;14348:2;14337:9;14333:18;14325:6;14296:56;:::i;:::-;14400:9;14392:6;14388:22;14383:2;14372:9;14368:18;14361:50;14428:44;14465:6;14457;14428:44;:::i;14857:219::-;15006:2;14995:9;14988:21;14969:4;15026:44;15066:2;15055:9;15051:18;15043:6;15026:44;:::i;15502:404::-;15704:2;15686:21;;;15743:2;15723:18;;;15716:30;15782:34;15777:2;15762:18;;15755:62;-1:-1:-1;;;15848:2:1;15833:18;;15826:38;15896:3;15881:19;;15502:404::o;17080:400::-;17282:2;17264:21;;;17321:2;17301:18;;;17294:30;17360:34;17355:2;17340:18;;17333:62;-1:-1:-1;;;17426:2:1;17411:18;;17404:34;17470:3;17455:19;;17080:400::o;17485:405::-;17687:2;17669:21;;;17726:2;17706:18;;;17699:30;17765:34;17760:2;17745:18;;17738:62;-1:-1:-1;;;17831:2:1;17816:18;;17809:39;17880:3;17865:19;;17485:405::o;18246:401::-;18448:2;18430:21;;;18487:2;18467:18;;;18460:30;18526:34;18521:2;18506:18;;18499:62;-1:-1:-1;;;18592:2:1;18577:18;;18570:35;18637:3;18622:19;;18246:401::o;19420:399::-;19622:2;19604:21;;;19661:2;19641:18;;;19634:30;19700:34;19695:2;19680:18;;19673:62;-1:-1:-1;;;19766:2:1;19751:18;;19744:33;19809:3;19794:19;;19420:399::o;19824:406::-;20026:2;20008:21;;;20065:2;20045:18;;;20038:30;20104:34;20099:2;20084:18;;20077:62;-1:-1:-1;;;20170:2:1;20155:18;;20148:40;20220:3;20205:19;;19824:406::o;20579:356::-;20781:2;20763:21;;;20800:18;;;20793:30;20859:34;20854:2;20839:18;;20832:62;20926:2;20911:18;;20579:356::o;23216:404::-;23418:2;23400:21;;;23457:2;23437:18;;;23430:30;23496:34;23491:2;23476:18;;23469:62;-1:-1:-1;;;23562:2:1;23547:18;;23540:38;23610:3;23595:19;;23216:404::o;23625:397::-;23827:2;23809:21;;;23866:2;23846:18;;;23839:30;23905:34;23900:2;23885:18;;23878:62;-1:-1:-1;;;23971:2:1;23956:18;;23949:31;24012:3;23997:19;;23625:397::o;25165:183::-;25225:4;-1:-1:-1;;;;;25250:6:1;25247:30;25244:56;;;25280:18;;:::i;:::-;-1:-1:-1;25325:1:1;25321:14;25337:4;25317:25;;25165:183::o;25479:128::-;25519:3;25550:1;25546:6;25543:1;25540:13;25537:39;;;25556:18;;:::i;:::-;-1:-1:-1;25592:9:1;;25479:128::o;25612:120::-;25652:1;25678;25668:35;;25683:18;;:::i;:::-;-1:-1:-1;25717:9:1;;25612:120::o;25737:168::-;25777:7;25843:1;25839;25835:6;25831:14;25828:1;25825:21;25820:1;25813:9;25806:17;25802:45;25799:71;;;25850:18;;:::i;:::-;-1:-1:-1;25890:9:1;;25737:168::o;25910:125::-;25950:4;25978:1;25975;25972:8;25969:34;;;25983:18;;:::i;:::-;-1:-1:-1;26020:9:1;;25910:125::o;26040:258::-;26112:1;26122:113;26136:6;26133:1;26130:13;26122:113;;;26212:11;;;26206:18;26193:11;;;26186:39;26158:2;26151:10;26122:113;;;26253:6;26250:1;26247:13;26244:48;;;-1:-1:-1;;26288:1:1;26270:16;;26263:27;26040:258::o;26303:380::-;26382:1;26378:12;;;;26425;;;26446:61;;26500:4;26492:6;26488:17;26478:27;;26446:61;26553:2;26545:6;26542:14;26522:18;26519:38;26516:161;;;26599:10;26594:3;26590:20;26587:1;26580:31;26634:4;26631:1;26624:15;26662:4;26659:1;26652:15;26516:161;;26303:380;;;:::o;26688:249::-;26798:2;26779:13;;-1:-1:-1;;26775:27:1;26763:40;;-1:-1:-1;;;;;26818:34:1;;26854:22;;;26815:62;26812:88;;;26880:18;;:::i;:::-;26916:2;26909:22;-1:-1:-1;;26688:249:1:o;26942:135::-;26981:3;-1:-1:-1;;27002:17:1;;26999:43;;;27022:18;;:::i;:::-;-1:-1:-1;27069:1:1;27058:13;;26942:135::o;27082:112::-;27114:1;27140;27130:35;;27145:18;;:::i;:::-;-1:-1:-1;27179:9:1;;27082:112::o;27199:127::-;27260:10;27255:3;27251:20;27248:1;27241:31;27291:4;27288:1;27281:15;27315:4;27312:1;27305:15;27331:127;27392:10;27387:3;27383:20;27380:1;27373:31;27423:4;27420:1;27413:15;27447:4;27444:1;27437:15;27463:127;27524:10;27519:3;27515:20;27512:1;27505:31;27555:4;27552:1;27545:15;27579:4;27576:1;27569:15;27595:127;27656:10;27651:3;27647:20;27644:1;27637:31;27687:4;27684:1;27677:15;27711:4;27708:1;27701:15;27727:179;27762:3;27804:1;27786:16;27783:23;27780:120;;;27850:1;27847;27844;27829:23;-1:-1:-1;27887:1:1;27881:8;27876:3;27872:18;27780:120;27727:179;:::o;27911:671::-;27950:3;27992:4;27974:16;27971:26;27968:39;;;27911:671;:::o;27968:39::-;28034:2;28028:9;-1:-1:-1;;28099:16:1;28095:25;;28092:1;28028:9;28071:50;28150:4;28144:11;28174:16;-1:-1:-1;;;;;28280:2:1;28273:4;28265:6;28261:17;28258:25;28253:2;28245:6;28242:14;28239:45;28236:58;;;28287:5;;;;;27911:671;:::o;28236:58::-;28324:6;28318:4;28314:17;28303:28;;28360:3;28354:10;28387:2;28379:6;28376:14;28373:27;;;28393:5;;;;;;27911:671;:::o;28373:27::-;28477:2;28458:16;28452:4;28448:27;28444:36;28437:4;28428:6;28423:3;28419:16;28415:27;28412:69;28409:82;;;28484:5;;;;;;27911:671;:::o;28409:82::-;28500:57;28551:4;28542:6;28534;28530:19;28526:30;28520:4;28500:57;:::i;:::-;-1:-1:-1;28573:3:1;;27911:671;-1:-1:-1;;;;;27911:671:1:o;28587:131::-;-1:-1:-1;;;;;;28661:32:1;;28651:43;;28641:71;;28708:1;28705;28698:12

Swarm Source

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