ETH Price: $2,274.52 (+0.15%)

Token

Worlds Beyond (WBS)
 

Overview

Max Total Supply

200 WBS

Holders

34

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
cometolife.eth
Balance
1 WBS
0xcdd23d1929014dC497aca026a6317781A1ABf7ac
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:
WorldsBeyond

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

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

// OpenZeppelin Contracts (last updated v4.6.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.
 *
 * WARNING: You should avoid using leaf values that are 64 bytes long prior to
 * hashing, or use a hash function other than keccak256 for hashing leaves.
 * This is because the concatenation of a sorted pair of internal nodes in
 * the merkle tree could be reinterpreted as a leaf value.
 */
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 Merkle tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf)
        internal
        pure
        returns (bytes32)
    {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

pragma solidity ^0.8.0;

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

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

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

pragma solidity ^0.8.0;

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

// File: IERC721A.sol

// Creator: Chiru Labs

pragma solidity ^0.8.4;

/**
 * @dev Interface of an ERC721A compliant contract.
 */
interface IERC721A is IERC721, IERC721Metadata {
    /**
     * The caller must own the token or be an approved operator.
     */
    error ApprovalCallerNotOwnerNorApproved();

    /**
     * The token does not exist.
     */
    error ApprovalQueryForNonexistentToken();

    /**
     * The caller cannot approve to their own address.
     */
    error ApproveToCaller();

    /**
     * The caller cannot approve to the current owner.
     */
    error ApprovalToCurrentOwner();

    /**
     * Cannot query the balance for the zero address.
     */
    error BalanceQueryForZeroAddress();

    /**
     * Cannot mint to the zero address.
     */
    error MintToZeroAddress();

    /**
     * The quantity of tokens minted must be more than zero.
     */
    error MintZeroQuantity();

    /**
     * The token does not exist.
     */
    error OwnerQueryForNonexistentToken();

    /**
     * The caller must own the token or be an approved operator.
     */
    error TransferCallerNotOwnerNorApproved();

    /**
     * The token must be owned by `from`.
     */
    error TransferFromIncorrectOwner();

    /**
     * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface.
     */
    error TransferToNonERC721ReceiverImplementer();

    /**
     * Cannot transfer to the zero address.
     */
    error TransferToZeroAddress();

    /**
     * The token does not exist.
     */
    error URIQueryForNonexistentToken();

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

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

    /**
     * @dev Returns the total amount of tokens stored by the contract.
     * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.
     */
    function totalSupply() external view returns (uint256);
}
// File: eERC721A.sol

// Creator: Chiru Labs

pragma solidity ^0.8.4;

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

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

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId, owner);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        _transfer(from, to, tokenId);
        if (
            to.isContract() &&
            !_checkContractOnERC721Received(from, to, tokenId, _data)
        ) {
            revert TransferToNonERC721ReceiverImplementer();
        }
    }

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

    /**
     * @dev Equivalent to `_safeMint(to, quantity, '')`.
     */
    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, "");
    }

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

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

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

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

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

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

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

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

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

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

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

            do {
                emit Transfer(address(0), to, updatedIndex++);
            } while (updatedIndex < end);

            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();

        bool isApprovedOrOwner = (_msgSender() == from ||
            isApprovedForAll(from, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

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

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

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

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

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

    /**
     * @dev Equivalent to `_burn(tokenId, false)`.
     */
    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        address from = prevOwnership.addr;

        if (approvalCheck) {
            bool isApprovedOrOwner = (_msgSender() == from ||
                isApprovedForAll(from, _msgSender()) ||
                getApproved(tokenId) == _msgSender());

            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        }

        _beforeTokenTransfers(from, address(0), tokenId, 1);

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

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

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

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

        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);

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

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

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

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

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

pragma solidity ^0.8.0;

contract WorldsBeyond is ERC721A, Ownable {
    using Strings for uint256;

    uint256 public maxSupply;
    uint256 public maxPublicMint;
    uint256 public maxWhitelistMint;
    uint256 public publicMintPrice;
    uint256 public whitelistMintPrice;
    uint256 public ticketClaims;

    string private baseTokenUri;
    string public placeholderTokenUri;

    bool public isRevealed;
    bool public publicSale;
    bool public whiteListSale;
    bool public pause;
    bool public ticketMinted;

    bytes32 private merkleRoot;

    mapping(address => uint256) public totalPublicMint;
    mapping(address => uint256) public totalWhitelistMint;

    constructor(
        uint256 _maxSupply,
        uint256 _maxPublicMint,
        uint256 _maxWhitelistMint,
        uint256 _publicMintPrice,
        uint256 _whitelistMintPrice,
        uint256 _ticketClaims
    ) ERC721A("Worlds Beyond", "WBS") {
        maxSupply = _maxSupply;
        maxPublicMint = _maxPublicMint;
        maxWhitelistMint = _maxWhitelistMint;
        publicMintPrice = _publicMintPrice;
        whitelistMintPrice = _whitelistMintPrice;
        ticketClaims = _ticketClaims;
    }

    modifier callerIsUser() {
        require(
            tx.origin == msg.sender,
            "Cannot be called by a contract address."
        );
        _;
    }

    function mint(uint256 _quantity) external payable callerIsUser {
        require(publicSale, "Public sale is not live, yet.");
        require(
            (totalSupply() + _quantity) <= maxSupply,
            "Cannot mint beyond max supply."
        );
        require(
            (totalPublicMint[msg.sender] + _quantity) <= maxPublicMint,
            "Cannot mint beyond max mint amount."
        );
        require(
            msg.value >= (publicMintPrice * _quantity),
            "Incorrect payment amount."
        );

        totalPublicMint[msg.sender] += _quantity;
        _safeMint(msg.sender, _quantity);
    }

    function whitelistMint(bytes32[] memory _merkleProof, uint256 _quantity)
        external
        payable
        callerIsUser
    {
        require(whiteListSale, "Minting is paused");
        require(
            (totalSupply() + _quantity) <= maxSupply,
            "Cannot mint beyond max supply."
        );
        require(
            (totalWhitelistMint[msg.sender] + _quantity) <= maxWhitelistMint,
            "Cannot mint beyond whitelist max mint."
        );
        require(
            msg.value >= (whitelistMintPrice * _quantity),
            "Incorrect payment amount."
        );
        //create leaf node
        bytes32 sender = keccak256(abi.encodePacked(msg.sender));
        require(
            MerkleProof.verify(_merkleProof, merkleRoot, sender),
            "Your address is not whitelisted."
        );

        totalWhitelistMint[msg.sender] += _quantity;
        _safeMint(msg.sender, _quantity);
    }

    function ticketMint() external onlyOwner {
        require(!ticketMinted, "Ticket holders already minted");
        ticketMinted = true;
        _safeMint(msg.sender, ticketClaims);
    }

    /**
     * @dev Free mints for deployer, capped to devSupply amount
     * Tokens will be used for marketing, and partnerships.
     */
    function devMint(uint256 quantity) external onlyOwner {
        require(
            totalSupply() + quantity <= ticketClaims,
            "Quantity exceeds max dev supply"
        );
        require(
            totalSupply() + quantity <= maxSupply,
            "Quantity exceeds max supply"
        );
        _safeMint(msg.sender, quantity);
    }

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

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

        uint256 trueId = tokenId + 1;

        if (!isRevealed) {
            return placeholderTokenUri;
        }
        //string memory baseURI = _baseURI();
        return
            bytes(baseTokenUri).length > 0
                ? string(
                    abi.encodePacked(baseTokenUri, trueId.toString(), ".json")
                )
                : "";
    }

    function setMaxSupply(uint256 _maxSupply) external onlyOwner {
        maxSupply = _maxSupply;
    }

    function setMaxPublicMint(uint256 _maxPublicMint) external onlyOwner {
        maxPublicMint = _maxPublicMint;
    }

    function setMaxWhitelistMint(uint256 _maxWhitelistMint) external onlyOwner {
        maxWhitelistMint = _maxWhitelistMint;
    }

    function setPublicMintPrice(uint256 _publicMintPrice) external onlyOwner {
        publicMintPrice = _publicMintPrice;
    }

    function setWhitelistMintPrice(uint256 _whitelistMintPrice)
        external
        onlyOwner
    {
        whitelistMintPrice = _whitelistMintPrice;
    }

    function setTicketClaims(uint256 _ticketClaims) external onlyOwner {
        ticketClaims = _ticketClaims;
    }

    function setTokenUri(string memory _baseTokenUri) external onlyOwner {
        baseTokenUri = _baseTokenUri;
    }

    function setPlaceHolderUri(string memory _placeholderTokenUri)
        external
        onlyOwner
    {
        placeholderTokenUri = _placeholderTokenUri;
    }

    function setMerkleRoot(bytes32 _merkleRoot) external onlyOwner {
        merkleRoot = _merkleRoot;
    }

    function getMerkleRoot() external view returns (bytes32) {
        return merkleRoot;
    }

    function togglePause() external onlyOwner {
        pause = !pause;
    }

    function toggleWhiteListSale() external onlyOwner {
        whiteListSale = !whiteListSale;
    }

    function togglePublicSale() external onlyOwner {
        publicSale = !publicSale;
    }

    function toggleReveal() external onlyOwner {
        isRevealed = !isRevealed;
    }

    function withdraw() external onlyOwner {
        payable(msg.sender).transfer(address(this).balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"_maxSupply","type":"uint256"},{"internalType":"uint256","name":"_maxPublicMint","type":"uint256"},{"internalType":"uint256","name":"_maxWhitelistMint","type":"uint256"},{"internalType":"uint256","name":"_publicMintPrice","type":"uint256"},{"internalType":"uint256","name":"_whitelistMintPrice","type":"uint256"},{"internalType":"uint256","name":"_ticketClaims","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRevealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPublicMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWhitelistMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"placeholderTokenUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPublicMint","type":"uint256"}],"name":"setMaxPublicMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWhitelistMint","type":"uint256"}],"name":"setMaxWhitelistMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_placeholderTokenUri","type":"string"}],"name":"setPlaceHolderUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_publicMintPrice","type":"uint256"}],"name":"setPublicMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ticketClaims","type":"uint256"}],"name":"setTicketClaims","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseTokenUri","type":"string"}],"name":"setTokenUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_whitelistMintPrice","type":"uint256"}],"name":"setWhitelistMintPrice","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":"ticketClaims","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ticketMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ticketMinted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"togglePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleReveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleWhiteListSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalPublicMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalWhitelistMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whiteListSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"},{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"whitelistMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162005060380380620050608339818101604052810190620000379190620002dd565b6040518060400160405280600d81526020017f576f726c6473204265796f6e64000000000000000000000000000000000000008152506040518060400160405280600381526020017f57425300000000000000000000000000000000000000000000000000000000008152508160029080519060200190620000bb92919062000216565b508060039080519060200190620000d492919062000216565b50620000e56200014360201b60201c565b60008190555050506200010d620001016200014860201b60201c565b6200015060201b60201c565b8560098190555084600a8190555083600b8190555082600c8190555081600d8190555080600e8190555050505050505062000407565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002249062000383565b90600052602060002090601f01602090048101928262000248576000855562000294565b82601f106200026357805160ff191683800117855562000294565b8280016001018555821562000294579182015b828111156200029357825182559160200191906001019062000276565b5b509050620002a39190620002a7565b5090565b5b80821115620002c2576000816000905550600101620002a8565b5090565b600081519050620002d781620003ed565b92915050565b60008060008060008060c08789031215620002fd57620002fc620003e8565b5b60006200030d89828a01620002c6565b96505060206200032089828a01620002c6565b95505060406200033389828a01620002c6565b94505060606200034689828a01620002c6565b93505060806200035989828a01620002c6565b92505060a06200036c89828a01620002c6565b9150509295509295509295565b6000819050919050565b600060028204905060018216806200039c57607f821691505b60208210811415620003b357620003b2620003b9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b620003f88162000379565b81146200040457600080fd5b50565b614c4980620004176000396000f3fe6080604052600436106102c95760003560e01c80636f8b44b011610175578063a0712d68116100dc578063c87b56dd11610095578063dc53fd921161006f578063dc53fd9214610a52578063e222c7f914610a7d578063e985e9c514610a94578063f2fde38b14610ad1576102c9565b8063c87b56dd146109bf578063cabadaa0146109fc578063d5abeb0114610a27576102c9565b8063a0712d68146108e8578063a22cb46514610904578063a611708e1461092d578063b0962c5314610956578063b88d4fde1461097f578063c4ae3168146109a8576102c9565b80638456cb591161012e5780638456cb59146107fc57806386a173ee146108275780638bb64a8c146108525780638da5cb5b1461086957806390e0960a1461089457806395d89b41146108bd576102c9565b80636f8b44b01461070257806370a082311461072b578063715018a614610768578063719780111461077f57806376f7c4fe146107a85780637cb64759146107d3576102c9565b80632904e6d91161023457806342842e0e116101ed57806354214f69116101c757806354214f691461065a5780635b8ad429146106855780635d82cf6e1461069c5780636352211e146106c5576102c9565b806342842e0e146105db57806349590657146106045780634cf5f7a41461062f576102c9565b80632904e6d9146104fe578063309a36861461051a57806333bc1c5c1461054557806335c6aaf814610570578063375a069a1461059b5780633ccfd60b146105c4576102c9565b806309e831c21161028657806309e831c2146104025780631698e2261461042d57806318160ddd146104445780631c16521c1461046f57806323b872dd146104ac578063270ab52c146104d5576102c9565b806301ffc9a7146102ce5780630345e3cb1461030b5780630675b7c61461034857806306fdde0314610371578063081812fc1461039c578063095ea7b3146103d9575b600080fd5b3480156102da57600080fd5b506102f560048036038101906102f09190613c42565b610afa565b6040516103029190614145565b60405180910390f35b34801561031757600080fd5b50610332600480360381019061032d91906139f6565b610bdc565b60405161033f919061435d565b60405180910390f35b34801561035457600080fd5b5061036f600480360381019061036a9190613c9c565b610bf4565b005b34801561037d57600080fd5b50610386610c8a565b604051610393919061417b565b60405180910390f35b3480156103a857600080fd5b506103c360048036038101906103be9190613ce5565b610d1c565b6040516103d091906140de565b60405180910390f35b3480156103e557600080fd5b5061040060048036038101906103fb9190613b79565b610d98565b005b34801561040e57600080fd5b50610417610ea3565b604051610424919061435d565b60405180910390f35b34801561043957600080fd5b50610442610ea9565b005b34801561045057600080fd5b50610459610f9e565b604051610466919061435d565b60405180910390f35b34801561047b57600080fd5b50610496600480360381019061049191906139f6565b610fb5565b6040516104a3919061435d565b60405180910390f35b3480156104b857600080fd5b506104d360048036038101906104ce9190613a63565b610fcd565b005b3480156104e157600080fd5b506104fc60048036038101906104f79190613ce5565b610fdd565b005b61051860048036038101906105139190613bb9565b611063565b005b34801561052657600080fd5b5061052f611332565b60405161053c919061435d565b60405180910390f35b34801561055157600080fd5b5061055a611338565b6040516105679190614145565b60405180910390f35b34801561057c57600080fd5b5061058561134b565b604051610592919061435d565b60405180910390f35b3480156105a757600080fd5b506105c260048036038101906105bd9190613ce5565b611351565b005b3480156105d057600080fd5b506105d9611488565b005b3480156105e757600080fd5b5061060260048036038101906105fd9190613a63565b61154d565b005b34801561061057600080fd5b5061061961156d565b6040516106269190614160565b60405180910390f35b34801561063b57600080fd5b50610644611577565b604051610651919061417b565b60405180910390f35b34801561066657600080fd5b5061066f611605565b60405161067c9190614145565b60405180910390f35b34801561069157600080fd5b5061069a611618565b005b3480156106a857600080fd5b506106c360048036038101906106be9190613ce5565b6116c0565b005b3480156106d157600080fd5b506106ec60048036038101906106e79190613ce5565b611746565b6040516106f991906140de565b60405180910390f35b34801561070e57600080fd5b5061072960048036038101906107249190613ce5565b61175c565b005b34801561073757600080fd5b50610752600480360381019061074d91906139f6565b6117e2565b60405161075f919061435d565b60405180910390f35b34801561077457600080fd5b5061077d6118b2565b005b34801561078b57600080fd5b506107a660048036038101906107a19190613ce5565b61193a565b005b3480156107b457600080fd5b506107bd6119c0565b6040516107ca9190614145565b60405180910390f35b3480156107df57600080fd5b506107fa60048036038101906107f59190613c15565b6119d3565b005b34801561080857600080fd5b50610811611a59565b60405161081e9190614145565b60405180910390f35b34801561083357600080fd5b5061083c611a6c565b6040516108499190614145565b60405180910390f35b34801561085e57600080fd5b50610867611a7f565b005b34801561087557600080fd5b5061087e611b27565b60405161088b91906140de565b60405180910390f35b3480156108a057600080fd5b506108bb60048036038101906108b69190613ce5565b611b51565b005b3480156108c957600080fd5b506108d2611bd7565b6040516108df919061417b565b60405180910390f35b61090260048036038101906108fd9190613ce5565b611c69565b005b34801561091057600080fd5b5061092b60048036038101906109269190613b39565b611ebf565b005b34801561093957600080fd5b50610954600480360381019061094f9190613ce5565b612037565b005b34801561096257600080fd5b5061097d60048036038101906109789190613c9c565b6120bd565b005b34801561098b57600080fd5b506109a660048036038101906109a19190613ab6565b612153565b005b3480156109b457600080fd5b506109bd6121cf565b005b3480156109cb57600080fd5b506109e660048036038101906109e19190613ce5565b612277565b6040516109f3919061417b565b60405180910390f35b348015610a0857600080fd5b50610a116123d9565b604051610a1e919061435d565b60405180910390f35b348015610a3357600080fd5b50610a3c6123df565b604051610a49919061435d565b60405180910390f35b348015610a5e57600080fd5b50610a676123e5565b604051610a74919061435d565b60405180910390f35b348015610a8957600080fd5b50610a926123eb565b005b348015610aa057600080fd5b50610abb6004803603810190610ab69190613a23565b612493565b604051610ac89190614145565b60405180910390f35b348015610add57600080fd5b50610af86004803603810190610af391906139f6565b612527565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bc557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bd55750610bd48261261f565b5b9050919050565b60146020528060005260406000206000915090505481565b610bfc612689565b73ffffffffffffffffffffffffffffffffffffffff16610c1a611b27565b73ffffffffffffffffffffffffffffffffffffffff1614610c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c679061429d565b60405180910390fd5b80600f9080519060200190610c86929190613714565b5050565b606060028054610c9990614658565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc590614658565b8015610d125780601f10610ce757610100808354040283529160200191610d12565b820191906000526020600020905b815481529060010190602001808311610cf557829003601f168201915b5050505050905090565b6000610d2782612691565b610d5d576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610da382611746565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e0b576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e2a612689565b73ffffffffffffffffffffffffffffffffffffffff1614158015610e5c5750610e5a81610e55612689565b612493565b155b15610e93576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e9e8383836126df565b505050565b600e5481565b610eb1612689565b73ffffffffffffffffffffffffffffffffffffffff16610ecf611b27565b73ffffffffffffffffffffffffffffffffffffffff1614610f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1c9061429d565b60405180910390fd5b601160049054906101000a900460ff1615610f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6c906141dd565b60405180910390fd5b6001601160046101000a81548160ff021916908315150217905550610f9c33600e54612791565b565b6000610fa86127af565b6001546000540303905090565b60136020528060005260406000206000915090505481565b610fd88383836127b4565b505050565b610fe5612689565b73ffffffffffffffffffffffffffffffffffffffff16611003611b27565b73ffffffffffffffffffffffffffffffffffffffff1614611059576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110509061429d565b60405180910390fd5b80600a8190555050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146110d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c8906142fd565b60405180910390fd5b601160029054906101000a900460ff16611120576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611117906142dd565b60405180910390fd5b6009548161112c610f9e565b6111369190614483565b1115611177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116e9061419d565b60405180910390fd5b600b5481601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111c59190614483565b1115611206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fd9061431d565b60405180910390fd5b80600d54611214919061450a565b341015611256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124d9061425d565b60405180910390fd5b6000336040516020016112699190614094565b60405160208183030381529060405280519060200120905061128e8360125483612c6a565b6112cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c4906141fd565b60405180910390fd5b81601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461131c9190614483565b9250508190555061132d3383612791565b505050565b600b5481565b601160019054906101000a900460ff1681565b600d5481565b611359612689565b73ffffffffffffffffffffffffffffffffffffffff16611377611b27565b73ffffffffffffffffffffffffffffffffffffffff16146113cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c49061429d565b60405180910390fd5b600e54816113d9610f9e565b6113e39190614483565b1115611424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141b9061433d565b60405180910390fd5b60095481611430610f9e565b61143a9190614483565b111561147b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114729061423d565b60405180910390fd5b6114853382612791565b50565b611490612689565b73ffffffffffffffffffffffffffffffffffffffff166114ae611b27565b73ffffffffffffffffffffffffffffffffffffffff1614611504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fb9061429d565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561154a573d6000803e3d6000fd5b50565b61156883838360405180602001604052806000815250612153565b505050565b6000601254905090565b6010805461158490614658565b80601f01602080910402602001604051908101604052809291908181526020018280546115b090614658565b80156115fd5780601f106115d2576101008083540402835291602001916115fd565b820191906000526020600020905b8154815290600101906020018083116115e057829003601f168201915b505050505081565b601160009054906101000a900460ff1681565b611620612689565b73ffffffffffffffffffffffffffffffffffffffff1661163e611b27565b73ffffffffffffffffffffffffffffffffffffffff1614611694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168b9061429d565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b6116c8612689565b73ffffffffffffffffffffffffffffffffffffffff166116e6611b27565b73ffffffffffffffffffffffffffffffffffffffff161461173c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117339061429d565b60405180910390fd5b80600c8190555050565b600061175182612c81565b600001519050919050565b611764612689565b73ffffffffffffffffffffffffffffffffffffffff16611782611b27565b73ffffffffffffffffffffffffffffffffffffffff16146117d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cf9061429d565b60405180910390fd5b8060098190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561184a576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6118ba612689565b73ffffffffffffffffffffffffffffffffffffffff166118d8611b27565b73ffffffffffffffffffffffffffffffffffffffff161461192e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119259061429d565b60405180910390fd5b6119386000612f10565b565b611942612689565b73ffffffffffffffffffffffffffffffffffffffff16611960611b27565b73ffffffffffffffffffffffffffffffffffffffff16146119b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ad9061429d565b60405180910390fd5b80600b8190555050565b601160049054906101000a900460ff1681565b6119db612689565b73ffffffffffffffffffffffffffffffffffffffff166119f9611b27565b73ffffffffffffffffffffffffffffffffffffffff1614611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a469061429d565b60405180910390fd5b8060128190555050565b601160039054906101000a900460ff1681565b601160029054906101000a900460ff1681565b611a87612689565b73ffffffffffffffffffffffffffffffffffffffff16611aa5611b27565b73ffffffffffffffffffffffffffffffffffffffff1614611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af29061429d565b60405180910390fd5b601160029054906101000a900460ff1615601160026101000a81548160ff021916908315150217905550565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b59612689565b73ffffffffffffffffffffffffffffffffffffffff16611b77611b27565b73ffffffffffffffffffffffffffffffffffffffff1614611bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc49061429d565b60405180910390fd5b80600e8190555050565b606060038054611be690614658565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1290614658565b8015611c5f5780601f10611c3457610100808354040283529160200191611c5f565b820191906000526020600020905b815481529060010190602001808311611c4257829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cce906142fd565b60405180910390fd5b601160019054906101000a900460ff16611d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1d9061427d565b60405180910390fd5b60095481611d32610f9e565b611d3c9190614483565b1115611d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d749061419d565b60405180910390fd5b600a5481601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611dcb9190614483565b1115611e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e039061421d565b60405180910390fd5b80600c54611e1a919061450a565b341015611e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e539061425d565b60405180910390fd5b80601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611eab9190614483565b92505081905550611ebc3382612791565b50565b611ec7612689565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f2c576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611f39612689565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611fe6612689565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161202b9190614145565b60405180910390a35050565b61203f612689565b73ffffffffffffffffffffffffffffffffffffffff1661205d611b27565b73ffffffffffffffffffffffffffffffffffffffff16146120b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120aa9061429d565b60405180910390fd5b80600d8190555050565b6120c5612689565b73ffffffffffffffffffffffffffffffffffffffff166120e3611b27565b73ffffffffffffffffffffffffffffffffffffffff1614612139576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121309061429d565b60405180910390fd5b806010908051906020019061214f929190613714565b5050565b61215e8484846127b4565b61217d8373ffffffffffffffffffffffffffffffffffffffff16612fd6565b8015612192575061219084848484612ff9565b155b156121c9576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6121d7612689565b73ffffffffffffffffffffffffffffffffffffffff166121f5611b27565b73ffffffffffffffffffffffffffffffffffffffff161461224b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122429061429d565b60405180910390fd5b601160039054906101000a900460ff1615601160036101000a81548160ff021916908315150217905550565b606061228282612691565b6122c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b8906142bd565b60405180910390fd5b60006001836122d09190614483565b9050601160009054906101000a900460ff1661237957601080546122f390614658565b80601f016020809104026020016040519081016040528092919081815260200182805461231f90614658565b801561236c5780601f106123415761010080835404028352916020019161236c565b820191906000526020600020905b81548152906001019060200180831161234f57829003601f168201915b50505050509150506123d4565b6000600f805461238890614658565b9050116123a457604051806020016040528060008152506123d0565b600f6123af82613159565b6040516020016123c09291906140af565b6040516020818303038152906040525b9150505b919050565b600a5481565b60095481565b600c5481565b6123f3612689565b73ffffffffffffffffffffffffffffffffffffffff16612411611b27565b73ffffffffffffffffffffffffffffffffffffffff1614612467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245e9061429d565b60405180910390fd5b601160019054906101000a900460ff1615601160016101000a81548160ff021916908315150217905550565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61252f612689565b73ffffffffffffffffffffffffffffffffffffffff1661254d611b27565b73ffffffffffffffffffffffffffffffffffffffff16146125a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259a9061429d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260a906141bd565b60405180910390fd5b61261c81612f10565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008161269c6127af565b111580156126ab575060005482105b80156126d8575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6127ab8282604051806020016040528060008152506132ba565b5050565b600090565b60006127bf82612c81565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461282a576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff1661284b612689565b73ffffffffffffffffffffffffffffffffffffffff16148061287a575061287985612874612689565b612493565b5b806128bf5750612888612689565b73ffffffffffffffffffffffffffffffffffffffff166128a784610d1c565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806128f8576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561295f576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61296c858585600161367c565b612978600084876126df565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612bf8576000548214612bf757878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c638585856001613682565b5050505050565b600082612c778584613688565b1490509392505050565b612c8961379a565b600082905080612c976127af565b11158015612ca6575060005481105b15612ed9576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612ed757600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612dbb578092505050612f0b565b5b600115612ed657818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612ed1578092505050612f0b565b612dbc565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261301f612689565b8786866040518563ffffffff1660e01b815260040161304194939291906140f9565b602060405180830381600087803b15801561305b57600080fd5b505af192505050801561308c57506040513d601f19601f820116820180604052508101906130899190613c6f565b60015b613106573d80600081146130bc576040519150601f19603f3d011682016040523d82523d6000602084013e6130c1565b606091505b506000815114156130fe576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060008214156131a1576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506132b5565b600082905060005b600082146131d35780806131bc906146bb565b915050600a826131cc91906144d9565b91506131a9565b60008167ffffffffffffffff8111156131ef576131ee614815565b5b6040519080825280601f01601f1916602001820160405280156132215781602001600182028036833780820191505090505b5090505b600085146132ae5760018261323a9190614564565b9150600a856132499190614728565b60306132559190614483565b60f81b81838151811061326b5761326a6147e6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132a791906144d9565b9450613225565b8093505050505b919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613327576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831415613362576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61336f600085838661367c565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600084820190506135308673ffffffffffffffffffffffffffffffffffffffff16612fd6565b156135f5575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46135a56000878480600101955087612ff9565b6135db576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082106135365782600054146135f057600080fd5b613660565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082106135f6575b8160008190555050506136766000858386613682565b50505050565b50505050565b50505050565b60008082905060005b84518110156136f25760008582815181106136af576136ae6147e6565b5b602002602001015190508083116136d1576136ca83826136fd565b92506136de565b6136db81846136fd565b92505b5080806136ea906146bb565b915050613691565b508091505092915050565b600082600052816020526040600020905092915050565b82805461372090614658565b90600052602060002090601f0160209004810192826137425760008555613789565b82601f1061375b57805160ff1916838001178555613789565b82800160010185558215613789579182015b8281111561378857825182559160200191906001019061376d565b5b50905061379691906137dd565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156137f65760008160009055506001016137de565b5090565b600061380d6138088461439d565b614378565b905080838252602082019050828560208602820111156138305761382f614849565b5b60005b8581101561386057816138468882613946565b845260208401935060208301925050600181019050613833565b5050509392505050565b600061387d613878846143c9565b614378565b9050828152602081018484840111156138995761389861484e565b5b6138a4848285614616565b509392505050565b60006138bf6138ba846143fa565b614378565b9050828152602081018484840111156138db576138da61484e565b5b6138e6848285614616565b509392505050565b6000813590506138fd81614ba0565b92915050565b600082601f83011261391857613917614844565b5b81356139288482602086016137fa565b91505092915050565b60008135905061394081614bb7565b92915050565b60008135905061395581614bce565b92915050565b60008135905061396a81614be5565b92915050565b60008151905061397f81614be5565b92915050565b600082601f83011261399a57613999614844565b5b81356139aa84826020860161386a565b91505092915050565b600082601f8301126139c8576139c7614844565b5b81356139d88482602086016138ac565b91505092915050565b6000813590506139f081614bfc565b92915050565b600060208284031215613a0c57613a0b614858565b5b6000613a1a848285016138ee565b91505092915050565b60008060408385031215613a3a57613a39614858565b5b6000613a48858286016138ee565b9250506020613a59858286016138ee565b9150509250929050565b600080600060608486031215613a7c57613a7b614858565b5b6000613a8a868287016138ee565b9350506020613a9b868287016138ee565b9250506040613aac868287016139e1565b9150509250925092565b60008060008060808587031215613ad057613acf614858565b5b6000613ade878288016138ee565b9450506020613aef878288016138ee565b9350506040613b00878288016139e1565b925050606085013567ffffffffffffffff811115613b2157613b20614853565b5b613b2d87828801613985565b91505092959194509250565b60008060408385031215613b5057613b4f614858565b5b6000613b5e858286016138ee565b9250506020613b6f85828601613931565b9150509250929050565b60008060408385031215613b9057613b8f614858565b5b6000613b9e858286016138ee565b9250506020613baf858286016139e1565b9150509250929050565b60008060408385031215613bd057613bcf614858565b5b600083013567ffffffffffffffff811115613bee57613bed614853565b5b613bfa85828601613903565b9250506020613c0b858286016139e1565b9150509250929050565b600060208284031215613c2b57613c2a614858565b5b6000613c3984828501613946565b91505092915050565b600060208284031215613c5857613c57614858565b5b6000613c668482850161395b565b91505092915050565b600060208284031215613c8557613c84614858565b5b6000613c9384828501613970565b91505092915050565b600060208284031215613cb257613cb1614858565b5b600082013567ffffffffffffffff811115613cd057613ccf614853565b5b613cdc848285016139b3565b91505092915050565b600060208284031215613cfb57613cfa614858565b5b6000613d09848285016139e1565b91505092915050565b613d1b81614598565b82525050565b613d32613d2d82614598565b614704565b82525050565b613d41816145aa565b82525050565b613d50816145b6565b82525050565b6000613d6182614440565b613d6b8185614456565b9350613d7b818560208601614625565b613d848161485d565b840191505092915050565b6000613d9a8261444b565b613da48185614467565b9350613db4818560208601614625565b613dbd8161485d565b840191505092915050565b6000613dd38261444b565b613ddd8185614478565b9350613ded818560208601614625565b80840191505092915050565b60008154613e0681614658565b613e108186614478565b94506001821660008114613e2b5760018114613e3c57613e6f565b60ff19831686528186019350613e6f565b613e458561442b565b60005b83811015613e6757815481890152600182019150602081019050613e48565b838801955050505b50505092915050565b6000613e85601e83614467565b9150613e908261487b565b602082019050919050565b6000613ea8602683614467565b9150613eb3826148a4565b604082019050919050565b6000613ecb601d83614467565b9150613ed6826148f3565b602082019050919050565b6000613eee602083614467565b9150613ef98261491c565b602082019050919050565b6000613f11602383614467565b9150613f1c82614945565b604082019050919050565b6000613f34601b83614467565b9150613f3f82614994565b602082019050919050565b6000613f57601983614467565b9150613f62826149bd565b602082019050919050565b6000613f7a600583614478565b9150613f85826149e6565b600582019050919050565b6000613f9d601d83614467565b9150613fa882614a0f565b602082019050919050565b6000613fc0602083614467565b9150613fcb82614a38565b602082019050919050565b6000613fe3602f83614467565b9150613fee82614a61565b604082019050919050565b6000614006601183614467565b915061401182614ab0565b602082019050919050565b6000614029602783614467565b915061403482614ad9565b604082019050919050565b600061404c602683614467565b915061405782614b28565b604082019050919050565b600061406f601f83614467565b915061407a82614b77565b602082019050919050565b61408e8161460c565b82525050565b60006140a08284613d21565b60148201915081905092915050565b60006140bb8285613df9565b91506140c78284613dc8565b91506140d282613f6d565b91508190509392505050565b60006020820190506140f36000830184613d12565b92915050565b600060808201905061410e6000830187613d12565b61411b6020830186613d12565b6141286040830185614085565b818103606083015261413a8184613d56565b905095945050505050565b600060208201905061415a6000830184613d38565b92915050565b60006020820190506141756000830184613d47565b92915050565b600060208201905081810360008301526141958184613d8f565b905092915050565b600060208201905081810360008301526141b681613e78565b9050919050565b600060208201905081810360008301526141d681613e9b565b9050919050565b600060208201905081810360008301526141f681613ebe565b9050919050565b6000602082019050818103600083015261421681613ee1565b9050919050565b6000602082019050818103600083015261423681613f04565b9050919050565b6000602082019050818103600083015261425681613f27565b9050919050565b6000602082019050818103600083015261427681613f4a565b9050919050565b6000602082019050818103600083015261429681613f90565b9050919050565b600060208201905081810360008301526142b681613fb3565b9050919050565b600060208201905081810360008301526142d681613fd6565b9050919050565b600060208201905081810360008301526142f681613ff9565b9050919050565b600060208201905081810360008301526143168161401c565b9050919050565b600060208201905081810360008301526143368161403f565b9050919050565b6000602082019050818103600083015261435681614062565b9050919050565b60006020820190506143726000830184614085565b92915050565b6000614382614393565b905061438e828261468a565b919050565b6000604051905090565b600067ffffffffffffffff8211156143b8576143b7614815565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156143e4576143e3614815565b5b6143ed8261485d565b9050602081019050919050565b600067ffffffffffffffff82111561441557614414614815565b5b61441e8261485d565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061448e8261460c565b91506144998361460c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144ce576144cd614759565b5b828201905092915050565b60006144e48261460c565b91506144ef8361460c565b9250826144ff576144fe614788565b5b828204905092915050565b60006145158261460c565b91506145208361460c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561455957614558614759565b5b828202905092915050565b600061456f8261460c565b915061457a8361460c565b92508282101561458d5761458c614759565b5b828203905092915050565b60006145a3826145ec565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614643578082015181840152602081019050614628565b83811115614652576000848401525b50505050565b6000600282049050600182168061467057607f821691505b60208210811415614684576146836147b7565b5b50919050565b6146938261485d565b810181811067ffffffffffffffff821117156146b2576146b1614815565b5b80604052505050565b60006146c68261460c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146f9576146f8614759565b5b600182019050919050565b600061470f82614716565b9050919050565b60006147218261486e565b9050919050565b60006147338261460c565b915061473e8361460c565b92508261474e5761474d614788565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f43616e6e6f74206d696e74206265796f6e64206d617820737570706c792e0000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5469636b657420686f6c6465727320616c7265616479206d696e746564000000600082015250565b7f596f75722061646472657373206973206e6f742077686974656c69737465642e600082015250565b7f43616e6e6f74206d696e74206265796f6e64206d6178206d696e7420616d6f7560008201527f6e742e0000000000000000000000000000000000000000000000000000000000602082015250565b7f5175616e746974792065786365656473206d617820737570706c790000000000600082015250565b7f496e636f7272656374207061796d656e7420616d6f756e742e00000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f5075626c69632073616c65206973206e6f74206c6976652c207965742e000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4d696e74696e6720697320706175736564000000000000000000000000000000600082015250565b7f43616e6e6f742062652063616c6c6564206279206120636f6e7472616374206160008201527f6464726573732e00000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f74206d696e74206265796f6e642077686974656c697374206d617860008201527f206d696e742e0000000000000000000000000000000000000000000000000000602082015250565b7f5175616e746974792065786365656473206d61782064657620737570706c7900600082015250565b614ba981614598565b8114614bb457600080fd5b50565b614bc0816145aa565b8114614bcb57600080fd5b50565b614bd7816145b6565b8114614be257600080fd5b50565b614bee816145c0565b8114614bf957600080fd5b50565b614c058161460c565b8114614c1057600080fd5b5056fea2646970667358221220edbc5de5f7a7bba37c8d5bb782aec2a305f8350c7a724394df8eb65f8251dae964736f6c6343000807003300000000000000000000000000000000000000000000000000000000000005dc000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000003782dace9d9000000000000000000000000000000000000000000000000000002c68af0bb1400000000000000000000000000000000000000000000000000000000000000000094

Deployed Bytecode

0x6080604052600436106102c95760003560e01c80636f8b44b011610175578063a0712d68116100dc578063c87b56dd11610095578063dc53fd921161006f578063dc53fd9214610a52578063e222c7f914610a7d578063e985e9c514610a94578063f2fde38b14610ad1576102c9565b8063c87b56dd146109bf578063cabadaa0146109fc578063d5abeb0114610a27576102c9565b8063a0712d68146108e8578063a22cb46514610904578063a611708e1461092d578063b0962c5314610956578063b88d4fde1461097f578063c4ae3168146109a8576102c9565b80638456cb591161012e5780638456cb59146107fc57806386a173ee146108275780638bb64a8c146108525780638da5cb5b1461086957806390e0960a1461089457806395d89b41146108bd576102c9565b80636f8b44b01461070257806370a082311461072b578063715018a614610768578063719780111461077f57806376f7c4fe146107a85780637cb64759146107d3576102c9565b80632904e6d91161023457806342842e0e116101ed57806354214f69116101c757806354214f691461065a5780635b8ad429146106855780635d82cf6e1461069c5780636352211e146106c5576102c9565b806342842e0e146105db57806349590657146106045780634cf5f7a41461062f576102c9565b80632904e6d9146104fe578063309a36861461051a57806333bc1c5c1461054557806335c6aaf814610570578063375a069a1461059b5780633ccfd60b146105c4576102c9565b806309e831c21161028657806309e831c2146104025780631698e2261461042d57806318160ddd146104445780631c16521c1461046f57806323b872dd146104ac578063270ab52c146104d5576102c9565b806301ffc9a7146102ce5780630345e3cb1461030b5780630675b7c61461034857806306fdde0314610371578063081812fc1461039c578063095ea7b3146103d9575b600080fd5b3480156102da57600080fd5b506102f560048036038101906102f09190613c42565b610afa565b6040516103029190614145565b60405180910390f35b34801561031757600080fd5b50610332600480360381019061032d91906139f6565b610bdc565b60405161033f919061435d565b60405180910390f35b34801561035457600080fd5b5061036f600480360381019061036a9190613c9c565b610bf4565b005b34801561037d57600080fd5b50610386610c8a565b604051610393919061417b565b60405180910390f35b3480156103a857600080fd5b506103c360048036038101906103be9190613ce5565b610d1c565b6040516103d091906140de565b60405180910390f35b3480156103e557600080fd5b5061040060048036038101906103fb9190613b79565b610d98565b005b34801561040e57600080fd5b50610417610ea3565b604051610424919061435d565b60405180910390f35b34801561043957600080fd5b50610442610ea9565b005b34801561045057600080fd5b50610459610f9e565b604051610466919061435d565b60405180910390f35b34801561047b57600080fd5b50610496600480360381019061049191906139f6565b610fb5565b6040516104a3919061435d565b60405180910390f35b3480156104b857600080fd5b506104d360048036038101906104ce9190613a63565b610fcd565b005b3480156104e157600080fd5b506104fc60048036038101906104f79190613ce5565b610fdd565b005b61051860048036038101906105139190613bb9565b611063565b005b34801561052657600080fd5b5061052f611332565b60405161053c919061435d565b60405180910390f35b34801561055157600080fd5b5061055a611338565b6040516105679190614145565b60405180910390f35b34801561057c57600080fd5b5061058561134b565b604051610592919061435d565b60405180910390f35b3480156105a757600080fd5b506105c260048036038101906105bd9190613ce5565b611351565b005b3480156105d057600080fd5b506105d9611488565b005b3480156105e757600080fd5b5061060260048036038101906105fd9190613a63565b61154d565b005b34801561061057600080fd5b5061061961156d565b6040516106269190614160565b60405180910390f35b34801561063b57600080fd5b50610644611577565b604051610651919061417b565b60405180910390f35b34801561066657600080fd5b5061066f611605565b60405161067c9190614145565b60405180910390f35b34801561069157600080fd5b5061069a611618565b005b3480156106a857600080fd5b506106c360048036038101906106be9190613ce5565b6116c0565b005b3480156106d157600080fd5b506106ec60048036038101906106e79190613ce5565b611746565b6040516106f991906140de565b60405180910390f35b34801561070e57600080fd5b5061072960048036038101906107249190613ce5565b61175c565b005b34801561073757600080fd5b50610752600480360381019061074d91906139f6565b6117e2565b60405161075f919061435d565b60405180910390f35b34801561077457600080fd5b5061077d6118b2565b005b34801561078b57600080fd5b506107a660048036038101906107a19190613ce5565b61193a565b005b3480156107b457600080fd5b506107bd6119c0565b6040516107ca9190614145565b60405180910390f35b3480156107df57600080fd5b506107fa60048036038101906107f59190613c15565b6119d3565b005b34801561080857600080fd5b50610811611a59565b60405161081e9190614145565b60405180910390f35b34801561083357600080fd5b5061083c611a6c565b6040516108499190614145565b60405180910390f35b34801561085e57600080fd5b50610867611a7f565b005b34801561087557600080fd5b5061087e611b27565b60405161088b91906140de565b60405180910390f35b3480156108a057600080fd5b506108bb60048036038101906108b69190613ce5565b611b51565b005b3480156108c957600080fd5b506108d2611bd7565b6040516108df919061417b565b60405180910390f35b61090260048036038101906108fd9190613ce5565b611c69565b005b34801561091057600080fd5b5061092b60048036038101906109269190613b39565b611ebf565b005b34801561093957600080fd5b50610954600480360381019061094f9190613ce5565b612037565b005b34801561096257600080fd5b5061097d60048036038101906109789190613c9c565b6120bd565b005b34801561098b57600080fd5b506109a660048036038101906109a19190613ab6565b612153565b005b3480156109b457600080fd5b506109bd6121cf565b005b3480156109cb57600080fd5b506109e660048036038101906109e19190613ce5565b612277565b6040516109f3919061417b565b60405180910390f35b348015610a0857600080fd5b50610a116123d9565b604051610a1e919061435d565b60405180910390f35b348015610a3357600080fd5b50610a3c6123df565b604051610a49919061435d565b60405180910390f35b348015610a5e57600080fd5b50610a676123e5565b604051610a74919061435d565b60405180910390f35b348015610a8957600080fd5b50610a926123eb565b005b348015610aa057600080fd5b50610abb6004803603810190610ab69190613a23565b612493565b604051610ac89190614145565b60405180910390f35b348015610add57600080fd5b50610af86004803603810190610af391906139f6565b612527565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bc557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bd55750610bd48261261f565b5b9050919050565b60146020528060005260406000206000915090505481565b610bfc612689565b73ffffffffffffffffffffffffffffffffffffffff16610c1a611b27565b73ffffffffffffffffffffffffffffffffffffffff1614610c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c679061429d565b60405180910390fd5b80600f9080519060200190610c86929190613714565b5050565b606060028054610c9990614658565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc590614658565b8015610d125780601f10610ce757610100808354040283529160200191610d12565b820191906000526020600020905b815481529060010190602001808311610cf557829003601f168201915b5050505050905090565b6000610d2782612691565b610d5d576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610da382611746565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e0b576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e2a612689565b73ffffffffffffffffffffffffffffffffffffffff1614158015610e5c5750610e5a81610e55612689565b612493565b155b15610e93576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e9e8383836126df565b505050565b600e5481565b610eb1612689565b73ffffffffffffffffffffffffffffffffffffffff16610ecf611b27565b73ffffffffffffffffffffffffffffffffffffffff1614610f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1c9061429d565b60405180910390fd5b601160049054906101000a900460ff1615610f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6c906141dd565b60405180910390fd5b6001601160046101000a81548160ff021916908315150217905550610f9c33600e54612791565b565b6000610fa86127af565b6001546000540303905090565b60136020528060005260406000206000915090505481565b610fd88383836127b4565b505050565b610fe5612689565b73ffffffffffffffffffffffffffffffffffffffff16611003611b27565b73ffffffffffffffffffffffffffffffffffffffff1614611059576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110509061429d565b60405180910390fd5b80600a8190555050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146110d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c8906142fd565b60405180910390fd5b601160029054906101000a900460ff16611120576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611117906142dd565b60405180910390fd5b6009548161112c610f9e565b6111369190614483565b1115611177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116e9061419d565b60405180910390fd5b600b5481601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111c59190614483565b1115611206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fd9061431d565b60405180910390fd5b80600d54611214919061450a565b341015611256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124d9061425d565b60405180910390fd5b6000336040516020016112699190614094565b60405160208183030381529060405280519060200120905061128e8360125483612c6a565b6112cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c4906141fd565b60405180910390fd5b81601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461131c9190614483565b9250508190555061132d3383612791565b505050565b600b5481565b601160019054906101000a900460ff1681565b600d5481565b611359612689565b73ffffffffffffffffffffffffffffffffffffffff16611377611b27565b73ffffffffffffffffffffffffffffffffffffffff16146113cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c49061429d565b60405180910390fd5b600e54816113d9610f9e565b6113e39190614483565b1115611424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141b9061433d565b60405180910390fd5b60095481611430610f9e565b61143a9190614483565b111561147b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114729061423d565b60405180910390fd5b6114853382612791565b50565b611490612689565b73ffffffffffffffffffffffffffffffffffffffff166114ae611b27565b73ffffffffffffffffffffffffffffffffffffffff1614611504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fb9061429d565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561154a573d6000803e3d6000fd5b50565b61156883838360405180602001604052806000815250612153565b505050565b6000601254905090565b6010805461158490614658565b80601f01602080910402602001604051908101604052809291908181526020018280546115b090614658565b80156115fd5780601f106115d2576101008083540402835291602001916115fd565b820191906000526020600020905b8154815290600101906020018083116115e057829003601f168201915b505050505081565b601160009054906101000a900460ff1681565b611620612689565b73ffffffffffffffffffffffffffffffffffffffff1661163e611b27565b73ffffffffffffffffffffffffffffffffffffffff1614611694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168b9061429d565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b6116c8612689565b73ffffffffffffffffffffffffffffffffffffffff166116e6611b27565b73ffffffffffffffffffffffffffffffffffffffff161461173c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117339061429d565b60405180910390fd5b80600c8190555050565b600061175182612c81565b600001519050919050565b611764612689565b73ffffffffffffffffffffffffffffffffffffffff16611782611b27565b73ffffffffffffffffffffffffffffffffffffffff16146117d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cf9061429d565b60405180910390fd5b8060098190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561184a576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6118ba612689565b73ffffffffffffffffffffffffffffffffffffffff166118d8611b27565b73ffffffffffffffffffffffffffffffffffffffff161461192e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119259061429d565b60405180910390fd5b6119386000612f10565b565b611942612689565b73ffffffffffffffffffffffffffffffffffffffff16611960611b27565b73ffffffffffffffffffffffffffffffffffffffff16146119b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ad9061429d565b60405180910390fd5b80600b8190555050565b601160049054906101000a900460ff1681565b6119db612689565b73ffffffffffffffffffffffffffffffffffffffff166119f9611b27565b73ffffffffffffffffffffffffffffffffffffffff1614611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a469061429d565b60405180910390fd5b8060128190555050565b601160039054906101000a900460ff1681565b601160029054906101000a900460ff1681565b611a87612689565b73ffffffffffffffffffffffffffffffffffffffff16611aa5611b27565b73ffffffffffffffffffffffffffffffffffffffff1614611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af29061429d565b60405180910390fd5b601160029054906101000a900460ff1615601160026101000a81548160ff021916908315150217905550565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b59612689565b73ffffffffffffffffffffffffffffffffffffffff16611b77611b27565b73ffffffffffffffffffffffffffffffffffffffff1614611bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc49061429d565b60405180910390fd5b80600e8190555050565b606060038054611be690614658565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1290614658565b8015611c5f5780601f10611c3457610100808354040283529160200191611c5f565b820191906000526020600020905b815481529060010190602001808311611c4257829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cce906142fd565b60405180910390fd5b601160019054906101000a900460ff16611d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1d9061427d565b60405180910390fd5b60095481611d32610f9e565b611d3c9190614483565b1115611d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d749061419d565b60405180910390fd5b600a5481601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611dcb9190614483565b1115611e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e039061421d565b60405180910390fd5b80600c54611e1a919061450a565b341015611e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e539061425d565b60405180910390fd5b80601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611eab9190614483565b92505081905550611ebc3382612791565b50565b611ec7612689565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f2c576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611f39612689565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611fe6612689565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161202b9190614145565b60405180910390a35050565b61203f612689565b73ffffffffffffffffffffffffffffffffffffffff1661205d611b27565b73ffffffffffffffffffffffffffffffffffffffff16146120b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120aa9061429d565b60405180910390fd5b80600d8190555050565b6120c5612689565b73ffffffffffffffffffffffffffffffffffffffff166120e3611b27565b73ffffffffffffffffffffffffffffffffffffffff1614612139576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121309061429d565b60405180910390fd5b806010908051906020019061214f929190613714565b5050565b61215e8484846127b4565b61217d8373ffffffffffffffffffffffffffffffffffffffff16612fd6565b8015612192575061219084848484612ff9565b155b156121c9576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6121d7612689565b73ffffffffffffffffffffffffffffffffffffffff166121f5611b27565b73ffffffffffffffffffffffffffffffffffffffff161461224b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122429061429d565b60405180910390fd5b601160039054906101000a900460ff1615601160036101000a81548160ff021916908315150217905550565b606061228282612691565b6122c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b8906142bd565b60405180910390fd5b60006001836122d09190614483565b9050601160009054906101000a900460ff1661237957601080546122f390614658565b80601f016020809104026020016040519081016040528092919081815260200182805461231f90614658565b801561236c5780601f106123415761010080835404028352916020019161236c565b820191906000526020600020905b81548152906001019060200180831161234f57829003601f168201915b50505050509150506123d4565b6000600f805461238890614658565b9050116123a457604051806020016040528060008152506123d0565b600f6123af82613159565b6040516020016123c09291906140af565b6040516020818303038152906040525b9150505b919050565b600a5481565b60095481565b600c5481565b6123f3612689565b73ffffffffffffffffffffffffffffffffffffffff16612411611b27565b73ffffffffffffffffffffffffffffffffffffffff1614612467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245e9061429d565b60405180910390fd5b601160019054906101000a900460ff1615601160016101000a81548160ff021916908315150217905550565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61252f612689565b73ffffffffffffffffffffffffffffffffffffffff1661254d611b27565b73ffffffffffffffffffffffffffffffffffffffff16146125a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259a9061429d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260a906141bd565b60405180910390fd5b61261c81612f10565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008161269c6127af565b111580156126ab575060005482105b80156126d8575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6127ab8282604051806020016040528060008152506132ba565b5050565b600090565b60006127bf82612c81565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461282a576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff1661284b612689565b73ffffffffffffffffffffffffffffffffffffffff16148061287a575061287985612874612689565b612493565b5b806128bf5750612888612689565b73ffffffffffffffffffffffffffffffffffffffff166128a784610d1c565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806128f8576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561295f576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61296c858585600161367c565b612978600084876126df565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612bf8576000548214612bf757878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c638585856001613682565b5050505050565b600082612c778584613688565b1490509392505050565b612c8961379a565b600082905080612c976127af565b11158015612ca6575060005481105b15612ed9576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612ed757600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612dbb578092505050612f0b565b5b600115612ed657818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612ed1578092505050612f0b565b612dbc565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261301f612689565b8786866040518563ffffffff1660e01b815260040161304194939291906140f9565b602060405180830381600087803b15801561305b57600080fd5b505af192505050801561308c57506040513d601f19601f820116820180604052508101906130899190613c6f565b60015b613106573d80600081146130bc576040519150601f19603f3d011682016040523d82523d6000602084013e6130c1565b606091505b506000815114156130fe576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060008214156131a1576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506132b5565b600082905060005b600082146131d35780806131bc906146bb565b915050600a826131cc91906144d9565b91506131a9565b60008167ffffffffffffffff8111156131ef576131ee614815565b5b6040519080825280601f01601f1916602001820160405280156132215781602001600182028036833780820191505090505b5090505b600085146132ae5760018261323a9190614564565b9150600a856132499190614728565b60306132559190614483565b60f81b81838151811061326b5761326a6147e6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132a791906144d9565b9450613225565b8093505050505b919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613327576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831415613362576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61336f600085838661367c565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600084820190506135308673ffffffffffffffffffffffffffffffffffffffff16612fd6565b156135f5575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46135a56000878480600101955087612ff9565b6135db576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082106135365782600054146135f057600080fd5b613660565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082106135f6575b8160008190555050506136766000858386613682565b50505050565b50505050565b50505050565b60008082905060005b84518110156136f25760008582815181106136af576136ae6147e6565b5b602002602001015190508083116136d1576136ca83826136fd565b92506136de565b6136db81846136fd565b92505b5080806136ea906146bb565b915050613691565b508091505092915050565b600082600052816020526040600020905092915050565b82805461372090614658565b90600052602060002090601f0160209004810192826137425760008555613789565b82601f1061375b57805160ff1916838001178555613789565b82800160010185558215613789579182015b8281111561378857825182559160200191906001019061376d565b5b50905061379691906137dd565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156137f65760008160009055506001016137de565b5090565b600061380d6138088461439d565b614378565b905080838252602082019050828560208602820111156138305761382f614849565b5b60005b8581101561386057816138468882613946565b845260208401935060208301925050600181019050613833565b5050509392505050565b600061387d613878846143c9565b614378565b9050828152602081018484840111156138995761389861484e565b5b6138a4848285614616565b509392505050565b60006138bf6138ba846143fa565b614378565b9050828152602081018484840111156138db576138da61484e565b5b6138e6848285614616565b509392505050565b6000813590506138fd81614ba0565b92915050565b600082601f83011261391857613917614844565b5b81356139288482602086016137fa565b91505092915050565b60008135905061394081614bb7565b92915050565b60008135905061395581614bce565b92915050565b60008135905061396a81614be5565b92915050565b60008151905061397f81614be5565b92915050565b600082601f83011261399a57613999614844565b5b81356139aa84826020860161386a565b91505092915050565b600082601f8301126139c8576139c7614844565b5b81356139d88482602086016138ac565b91505092915050565b6000813590506139f081614bfc565b92915050565b600060208284031215613a0c57613a0b614858565b5b6000613a1a848285016138ee565b91505092915050565b60008060408385031215613a3a57613a39614858565b5b6000613a48858286016138ee565b9250506020613a59858286016138ee565b9150509250929050565b600080600060608486031215613a7c57613a7b614858565b5b6000613a8a868287016138ee565b9350506020613a9b868287016138ee565b9250506040613aac868287016139e1565b9150509250925092565b60008060008060808587031215613ad057613acf614858565b5b6000613ade878288016138ee565b9450506020613aef878288016138ee565b9350506040613b00878288016139e1565b925050606085013567ffffffffffffffff811115613b2157613b20614853565b5b613b2d87828801613985565b91505092959194509250565b60008060408385031215613b5057613b4f614858565b5b6000613b5e858286016138ee565b9250506020613b6f85828601613931565b9150509250929050565b60008060408385031215613b9057613b8f614858565b5b6000613b9e858286016138ee565b9250506020613baf858286016139e1565b9150509250929050565b60008060408385031215613bd057613bcf614858565b5b600083013567ffffffffffffffff811115613bee57613bed614853565b5b613bfa85828601613903565b9250506020613c0b858286016139e1565b9150509250929050565b600060208284031215613c2b57613c2a614858565b5b6000613c3984828501613946565b91505092915050565b600060208284031215613c5857613c57614858565b5b6000613c668482850161395b565b91505092915050565b600060208284031215613c8557613c84614858565b5b6000613c9384828501613970565b91505092915050565b600060208284031215613cb257613cb1614858565b5b600082013567ffffffffffffffff811115613cd057613ccf614853565b5b613cdc848285016139b3565b91505092915050565b600060208284031215613cfb57613cfa614858565b5b6000613d09848285016139e1565b91505092915050565b613d1b81614598565b82525050565b613d32613d2d82614598565b614704565b82525050565b613d41816145aa565b82525050565b613d50816145b6565b82525050565b6000613d6182614440565b613d6b8185614456565b9350613d7b818560208601614625565b613d848161485d565b840191505092915050565b6000613d9a8261444b565b613da48185614467565b9350613db4818560208601614625565b613dbd8161485d565b840191505092915050565b6000613dd38261444b565b613ddd8185614478565b9350613ded818560208601614625565b80840191505092915050565b60008154613e0681614658565b613e108186614478565b94506001821660008114613e2b5760018114613e3c57613e6f565b60ff19831686528186019350613e6f565b613e458561442b565b60005b83811015613e6757815481890152600182019150602081019050613e48565b838801955050505b50505092915050565b6000613e85601e83614467565b9150613e908261487b565b602082019050919050565b6000613ea8602683614467565b9150613eb3826148a4565b604082019050919050565b6000613ecb601d83614467565b9150613ed6826148f3565b602082019050919050565b6000613eee602083614467565b9150613ef98261491c565b602082019050919050565b6000613f11602383614467565b9150613f1c82614945565b604082019050919050565b6000613f34601b83614467565b9150613f3f82614994565b602082019050919050565b6000613f57601983614467565b9150613f62826149bd565b602082019050919050565b6000613f7a600583614478565b9150613f85826149e6565b600582019050919050565b6000613f9d601d83614467565b9150613fa882614a0f565b602082019050919050565b6000613fc0602083614467565b9150613fcb82614a38565b602082019050919050565b6000613fe3602f83614467565b9150613fee82614a61565b604082019050919050565b6000614006601183614467565b915061401182614ab0565b602082019050919050565b6000614029602783614467565b915061403482614ad9565b604082019050919050565b600061404c602683614467565b915061405782614b28565b604082019050919050565b600061406f601f83614467565b915061407a82614b77565b602082019050919050565b61408e8161460c565b82525050565b60006140a08284613d21565b60148201915081905092915050565b60006140bb8285613df9565b91506140c78284613dc8565b91506140d282613f6d565b91508190509392505050565b60006020820190506140f36000830184613d12565b92915050565b600060808201905061410e6000830187613d12565b61411b6020830186613d12565b6141286040830185614085565b818103606083015261413a8184613d56565b905095945050505050565b600060208201905061415a6000830184613d38565b92915050565b60006020820190506141756000830184613d47565b92915050565b600060208201905081810360008301526141958184613d8f565b905092915050565b600060208201905081810360008301526141b681613e78565b9050919050565b600060208201905081810360008301526141d681613e9b565b9050919050565b600060208201905081810360008301526141f681613ebe565b9050919050565b6000602082019050818103600083015261421681613ee1565b9050919050565b6000602082019050818103600083015261423681613f04565b9050919050565b6000602082019050818103600083015261425681613f27565b9050919050565b6000602082019050818103600083015261427681613f4a565b9050919050565b6000602082019050818103600083015261429681613f90565b9050919050565b600060208201905081810360008301526142b681613fb3565b9050919050565b600060208201905081810360008301526142d681613fd6565b9050919050565b600060208201905081810360008301526142f681613ff9565b9050919050565b600060208201905081810360008301526143168161401c565b9050919050565b600060208201905081810360008301526143368161403f565b9050919050565b6000602082019050818103600083015261435681614062565b9050919050565b60006020820190506143726000830184614085565b92915050565b6000614382614393565b905061438e828261468a565b919050565b6000604051905090565b600067ffffffffffffffff8211156143b8576143b7614815565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156143e4576143e3614815565b5b6143ed8261485d565b9050602081019050919050565b600067ffffffffffffffff82111561441557614414614815565b5b61441e8261485d565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061448e8261460c565b91506144998361460c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144ce576144cd614759565b5b828201905092915050565b60006144e48261460c565b91506144ef8361460c565b9250826144ff576144fe614788565b5b828204905092915050565b60006145158261460c565b91506145208361460c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561455957614558614759565b5b828202905092915050565b600061456f8261460c565b915061457a8361460c565b92508282101561458d5761458c614759565b5b828203905092915050565b60006145a3826145ec565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614643578082015181840152602081019050614628565b83811115614652576000848401525b50505050565b6000600282049050600182168061467057607f821691505b60208210811415614684576146836147b7565b5b50919050565b6146938261485d565b810181811067ffffffffffffffff821117156146b2576146b1614815565b5b80604052505050565b60006146c68261460c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146f9576146f8614759565b5b600182019050919050565b600061470f82614716565b9050919050565b60006147218261486e565b9050919050565b60006147338261460c565b915061473e8361460c565b92508261474e5761474d614788565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f43616e6e6f74206d696e74206265796f6e64206d617820737570706c792e0000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5469636b657420686f6c6465727320616c7265616479206d696e746564000000600082015250565b7f596f75722061646472657373206973206e6f742077686974656c69737465642e600082015250565b7f43616e6e6f74206d696e74206265796f6e64206d6178206d696e7420616d6f7560008201527f6e742e0000000000000000000000000000000000000000000000000000000000602082015250565b7f5175616e746974792065786365656473206d617820737570706c790000000000600082015250565b7f496e636f7272656374207061796d656e7420616d6f756e742e00000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f5075626c69632073616c65206973206e6f74206c6976652c207965742e000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4d696e74696e6720697320706175736564000000000000000000000000000000600082015250565b7f43616e6e6f742062652063616c6c6564206279206120636f6e7472616374206160008201527f6464726573732e00000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f74206d696e74206265796f6e642077686974656c697374206d617860008201527f206d696e742e0000000000000000000000000000000000000000000000000000602082015250565b7f5175616e746974792065786365656473206d61782064657620737570706c7900600082015250565b614ba981614598565b8114614bb457600080fd5b50565b614bc0816145aa565b8114614bcb57600080fd5b50565b614bd7816145b6565b8114614be257600080fd5b50565b614bee816145c0565b8114614bf957600080fd5b50565b614c058161460c565b8114614c1057600080fd5b5056fea2646970667358221220edbc5de5f7a7bba37c8d5bb782aec2a305f8350c7a724394df8eb65f8251dae964736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000005dc000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000003782dace9d9000000000000000000000000000000000000000000000000000002c68af0bb1400000000000000000000000000000000000000000000000000000000000000000094

-----Decoded View---------------
Arg [0] : _maxSupply (uint256): 1500
Arg [1] : _maxPublicMint (uint256): 30
Arg [2] : _maxWhitelistMint (uint256): 3
Arg [3] : _publicMintPrice (uint256): 250000000000000000
Arg [4] : _whitelistMintPrice (uint256): 200000000000000000
Arg [5] : _ticketClaims (uint256): 148

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000005dc
Arg [1] : 000000000000000000000000000000000000000000000000000000000000001e
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [3] : 00000000000000000000000000000000000000000000000003782dace9d90000
Arg [4] : 00000000000000000000000000000000000000000000000002c68af0bb140000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000094


Deployed Bytecode Sourcemap

51486:6330:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31947:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52101:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56809:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35142:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36742:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36305:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51750:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54484:191;;;;;;;;;;;;;:::i;:::-;;31187:312;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52044:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37730:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56120:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53515:961;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51635:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51891:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51710:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54827:361;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57704:109;;;;;;;;;;;;;:::i;:::-;;37971:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57221:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51820:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51862:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57610:86;;;;;;;;;;;;;:::i;:::-;;56384:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34950:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56010:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32366:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7561:103;;;;;;;;;;;;;:::i;:::-;;56246:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51976:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57107:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51952:17;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51920:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57405:99;;;;;;;;;;;;;:::i;:::-;;6910:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56687:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35311:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52864:643;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37059:319;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56518:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56933:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38227:406;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57322:75;;;;;;;;;;;;;:::i;:::-;;55353:649;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51600:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51569:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51673:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57512:90;;;;;;;;;;;;;:::i;:::-;;37449:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7819:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31947:355;32094:4;32151:25;32136:40;;;:11;:40;;;;:105;;;;32208:33;32193:48;;;:11;:48;;;;32136:105;:158;;;;32258:36;32282:11;32258:23;:36::i;:::-;32136:158;32116:178;;31947:355;;;:::o;52101:53::-;;;;;;;;;;;;;;;;;:::o;56809:116::-;7141:12;:10;:12::i;:::-;7130:23;;:7;:5;:7::i;:::-;:23;;;7122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56904:13:::1;56889:12;:28;;;;;;;;;;;;:::i;:::-;;56809:116:::0;:::o;35142:100::-;35196:13;35229:5;35222:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35142:100;:::o;36742:245::-;36846:7;36876:16;36884:7;36876;:16::i;:::-;36871:64;;36901:34;;;;;;;;;;;;;;36871:64;36955:15;:24;36971:7;36955:24;;;;;;;;;;;;;;;;;;;;;36948:31;;36742:245;;;:::o;36305:371::-;36378:13;36394:24;36410:7;36394:15;:24::i;:::-;36378:40;;36439:5;36433:11;;:2;:11;;;36429:48;;;36453:24;;;;;;;;;;;;;;36429:48;36510:5;36494:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;36520:37;36537:5;36544:12;:10;:12::i;:::-;36520:16;:37::i;:::-;36519:38;36494:63;36490:138;;;36581:35;;;;;;;;;;;;;;36490:138;36640:28;36649:2;36653:7;36662:5;36640:8;:28::i;:::-;36367:309;36305:371;;:::o;51750:27::-;;;;:::o;54484:191::-;7141:12;:10;:12::i;:::-;7130:23;;:7;:5;:7::i;:::-;:23;;;7122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54545:12:::1;;;;;;;;;;;54544:13;54536:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;54617:4;54602:12;;:19;;;;;;;;;;;;;;;;;;54632:35;54642:10;54654:12;;54632:9;:35::i;:::-;54484:191::o:0;31187:312::-;31240:7;31465:15;:13;:15::i;:::-;31450:12;;31434:13;;:28;:46;31427:53;;31187:312;:::o;52044:50::-;;;;;;;;;;;;;;;;;:::o;37730:170::-;37864:28;37874:4;37880:2;37884:7;37864:9;:28::i;:::-;37730:170;;;:::o;56120:118::-;7141:12;:10;:12::i;:::-;7130:23;;:7;:5;:7::i;:::-;:23;;;7122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56216:14:::1;56200:13;:30;;;;56120:118:::0;:::o;53515:961::-;52759:10;52746:23;;:9;:23;;;52724:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;53669:13:::1;;;;;;;;;;;53661:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;53768:9;;53754;53738:13;:11;:13::i;:::-;:25;;;;:::i;:::-;53737:40;;53715:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;53916:16;;53902:9;53869:18;:30;53888:10;53869:30;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;53868:64;;53846:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;54066:9;54045:18;;:30;;;;:::i;:::-;54031:9;:45;;54009:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;54168:14;54212:10;54195:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;54185:39;;;;;;54168:56;;54257:52;54276:12;54290:10;;54302:6;54257:18;:52::i;:::-;54235:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;54416:9;54382:18;:30;54401:10;54382:30;;;;;;;;;;;;;;;;:43;;;;;;;:::i;:::-;;;;;;;;54436:32;54446:10;54458:9;54436;:32::i;:::-;53650:826;53515:961:::0;;:::o;51635:31::-;;;;:::o;51891:22::-;;;;;;;;;;;;;:::o;51710:33::-;;;;:::o;54827:361::-;7141:12;:10;:12::i;:::-;7130:23;;:7;:5;:7::i;:::-;:23;;;7122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54942:12:::1;;54930:8;54914:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:40;;54892:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;55074:9;;55062:8;55046:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:37;;55024:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;55149:31;55159:10;55171:8;55149:9;:31::i;:::-;54827:361:::0;:::o;57704:109::-;7141:12;:10;:12::i;:::-;7130:23;;:7;:5;:7::i;:::-;:23;;;7122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57762:10:::1;57754:28;;:51;57783:21;57754:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;57704:109::o:0;37971:185::-;38109:39;38126:4;38132:2;38136:7;38109:39;;;;;;;;;;;;:16;:39::i;:::-;37971:185;;;:::o;57221:93::-;57269:7;57296:10;;57289:17;;57221:93;:::o;51820:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51862:22::-;;;;;;;;;;;;;:::o;57610:86::-;7141:12;:10;:12::i;:::-;7130:23;;:7;:5;:7::i;:::-;:23;;;7122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57678:10:::1;;;;;;;;;;;57677:11;57664:10;;:24;;;;;;;;;;;;;;;;;;57610:86::o:0;56384:126::-;7141:12;:10;:12::i;:::-;7130:23;;:7;:5;:7::i;:::-;:23;;;7122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56486:16:::1;56468:15;:34;;;;56384:126:::0;:::o;34950:125::-;35014:7;35041:21;35054:7;35041:12;:21::i;:::-;:26;;;35034:33;;34950:125;;;:::o;56010:102::-;7141:12;:10;:12::i;:::-;7130:23;;:7;:5;:7::i;:::-;:23;;;7122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56094:10:::1;56082:9;:22;;;;56010:102:::0;:::o;32366:206::-;32430:7;32471:1;32454:19;;:5;:19;;;32450:60;;;32482:28;;;;;;;;;;;;;;32450:60;32536:12;:19;32549:5;32536:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;32528:36;;32521:43;;32366:206;;;:::o;7561:103::-;7141:12;:10;:12::i;:::-;7130:23;;:7;:5;:7::i;:::-;:23;;;7122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7626:30:::1;7653:1;7626:18;:30::i;:::-;7561:103::o:0;56246:130::-;7141:12;:10;:12::i;:::-;7130:23;;:7;:5;:7::i;:::-;:23;;;7122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56351:17:::1;56332:16;:36;;;;56246:130:::0;:::o;51976:24::-;;;;;;;;;;;;;:::o;57107:106::-;7141:12;:10;:12::i;:::-;7130:23;;:7;:5;:7::i;:::-;:23;;;7122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57194:11:::1;57181:10;:24;;;;57107:106:::0;:::o;51952:17::-;;;;;;;;;;;;;:::o;51920:25::-;;;;;;;;;;;;;:::o;57405:99::-;7141:12;:10;:12::i;:::-;7130:23;;:7;:5;:7::i;:::-;:23;;;7122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57483:13:::1;;;;;;;;;;;57482:14;57466:13;;:30;;;;;;;;;;;;;;;;;;57405:99::o:0;6910:87::-;6956:7;6983:6;;;;;;;;;;;6976:13;;6910:87;:::o;56687:114::-;7141:12;:10;:12::i;:::-;7130:23;;:7;:5;:7::i;:::-;:23;;;7122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56780:13:::1;56765:12;:28;;;;56687:114:::0;:::o;35311:104::-;35367:13;35400:7;35393:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35311:104;:::o;52864:643::-;52759:10;52746:23;;:9;:23;;;52724:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;52946:10:::1;;;;;;;;;;;52938:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;53054:9;;53040;53024:13;:11;:13::i;:::-;:25;;;;:::i;:::-;53023:40;;53001:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;53199:13;;53185:9;53155:15;:27;53171:10;53155:27;;;;;;;;;;;;;;;;:39;;;;:::i;:::-;53154:58;;53132:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;53340:9;53322:15;;:27;;;;:::i;:::-;53308:9;:42;;53286:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;53447:9;53416:15;:27;53432:10;53416:27;;;;;;;;;;;;;;;;:40;;;;;;;:::i;:::-;;;;;;;;53467:32;53477:10;53489:9;53467;:32::i;:::-;52864:643:::0;:::o;37059:319::-;37202:12;:10;:12::i;:::-;37190:24;;:8;:24;;;37186:54;;;37223:17;;;;;;;;;;;;;;37186:54;37298:8;37253:18;:32;37272:12;:10;:12::i;:::-;37253:32;;;;;;;;;;;;;;;:42;37286:8;37253:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;37351:8;37322:48;;37337:12;:10;:12::i;:::-;37322:48;;;37361:8;37322:48;;;;;;:::i;:::-;;;;;;;;37059:319;;:::o;56518:161::-;7141:12;:10;:12::i;:::-;7130:23;;:7;:5;:7::i;:::-;:23;;;7122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56652:19:::1;56631:18;:40;;;;56518:161:::0;:::o;56933:166::-;7141:12;:10;:12::i;:::-;7130:23;;:7;:5;:7::i;:::-;:23;;;7122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57071:20:::1;57049:19;:42;;;;;;;;;;;;:::i;:::-;;56933:166:::0;:::o;38227:406::-;38394:28;38404:4;38410:2;38414:7;38394:9;:28::i;:::-;38451:15;:2;:13;;;:15::i;:::-;:89;;;;;38484:56;38515:4;38521:2;38525:7;38534:5;38484:30;:56::i;:::-;38483:57;38451:89;38433:193;;;38574:40;;;;;;;;;;;;;;38433:193;38227:406;;;;:::o;57322:75::-;7141:12;:10;:12::i;:::-;7130:23;;:7;:5;:7::i;:::-;:23;;;7122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57384:5:::1;;;;;;;;;;;57383:6;57375:5;;:14;;;;;;;;;;;;;;;;;;57322:75::o:0;55353:649::-;55471:13;55524:16;55532:7;55524;:16::i;:::-;55502:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;55628:14;55655:1;55645:7;:11;;;;:::i;:::-;55628:28;;55674:10;;;;;;;;;;;55669:70;;55708:19;55701:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55669:70;55845:1;55822:12;55816:26;;;;;:::i;:::-;;;:30;:178;;;;;;;;;;;;;;;;;55912:12;55926:17;:6;:15;:17::i;:::-;55895:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;55816:178;55796:198;;;55353:649;;;;:::o;51600:28::-;;;;:::o;51569:24::-;;;;:::o;51673:30::-;;;;:::o;57512:90::-;7141:12;:10;:12::i;:::-;7130:23;;:7;:5;:7::i;:::-;:23;;;7122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57584:10:::1;;;;;;;;;;;57583:11;57570:10;;:24;;;;;;;;;;;;;;;;;;57512:90::o:0;37449:214::-;37591:4;37620:18;:25;37639:5;37620:25;;;;;;;;;;;;;;;:35;37646:8;37620:35;;;;;;;;;;;;;;;;;;;;;;;;;37613:42;;37449:214;;;;:::o;7819:238::-;7141:12;:10;:12::i;:::-;7130:23;;:7;:5;:7::i;:::-;:23;;;7122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7942:1:::1;7922:22;;:8;:22;;;;7900:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;8021:28;8040:8;8021:18;:28::i;:::-;7819:238:::0;:::o;20211:207::-;20341:4;20385:25;20370:40;;;:11;:40;;;;20363:47;;20211:207;;;:::o;5613:98::-;5666:7;5693:10;5686:17;;5613:98;:::o;38888:213::-;38945:4;39001:7;38982:15;:13;:15::i;:::-;:26;;:66;;;;;39035:13;;39025:7;:23;38982:66;:111;;;;;39066:11;:20;39078:7;39066:20;;;;;;;;;;;:27;;;;;;;;;;;;39065:28;38982:111;38962:131;;38888:213;;;:::o;48340:196::-;48482:2;48455:15;:24;48471:7;48455:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;48520:7;48516:2;48500:28;;48509:5;48500:28;;;;;;;;;;;;48340:196;;;:::o;39185:104::-;39254:27;39264:2;39268:8;39254:27;;;;;;;;;;;;:9;:27::i;:::-;39185:104;;:::o;30961:92::-;31017:7;30961:92;:::o;43288:2130::-;43403:35;43441:21;43454:7;43441:12;:21::i;:::-;43403:59;;43501:4;43479:26;;:13;:18;;;:26;;;43475:67;;43514:28;;;;;;;;;;;;;;43475:67;43555:22;43597:4;43581:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;43618:36;43635:4;43641:12;:10;:12::i;:::-;43618:16;:36::i;:::-;43581:73;:126;;;;43695:12;:10;:12::i;:::-;43671:36;;:20;43683:7;43671:11;:20::i;:::-;:36;;;43581:126;43555:153;;43726:17;43721:66;;43752:35;;;;;;;;;;;;;;43721:66;43816:1;43802:16;;:2;:16;;;43798:52;;;43827:23;;;;;;;;;;;;;;43798:52;43863:43;43885:4;43891:2;43895:7;43904:1;43863:21;:43::i;:::-;43971:35;43988:1;43992:7;44001:4;43971:8;:35::i;:::-;44332:1;44302:12;:18;44315:4;44302:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44376:1;44348:12;:16;44361:2;44348:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44394:31;44428:11;:20;44440:7;44428:20;;;;;;;;;;;44394:54;;44479:2;44463:8;:13;;;:18;;;;;;;;;;;;;;;;;;44529:15;44496:8;:23;;;:49;;;;;;;;;;;;;;;;;;44797:19;44829:1;44819:7;:11;44797:33;;44845:31;44879:11;:24;44891:11;44879:24;;;;;;;;;;;44845:58;;44947:1;44922:27;;:8;:13;;;;;;;;;;;;:27;;;44918:384;;;45132:13;;45117:11;:28;45113:174;;45186:4;45170:8;:13;;;:20;;;;;;;;;;;;;;;;;;45239:13;:28;;;45213:8;:23;;;:54;;;;;;;;;;;;;;;;;;45113:174;44918:384;44277:1036;;;45349:7;45345:2;45330:27;;45339:4;45330:27;;;;;;;;;;;;45368:42;45389:4;45395:2;45399:7;45408:1;45368:20;:42::i;:::-;43392:2026;;43288:2130;;;:::o;1253:190::-;1378:4;1431;1402:25;1415:5;1422:4;1402:12;:25::i;:::-;:33;1395:40;;1253:190;;;;;:::o;33747:1141::-;33836:21;;:::i;:::-;33875:12;33890:7;33875:22;;33958:4;33939:15;:13;:15::i;:::-;:23;;:47;;;;;33973:13;;33966:4;:20;33939:47;33935:886;;;34007:31;34041:11;:17;34053:4;34041:17;;;;;;;;;;;34007:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34082:9;:16;;;34077:729;;34153:1;34127:28;;:9;:14;;;:28;;;34123:101;;34191:9;34184:16;;;;;;34123:101;34526:261;34533:4;34526:261;;;34566:6;;;;;;;;34611:11;:17;34623:4;34611:17;;;;;;;;;;;34599:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34685:1;34659:28;;:9;:14;;;:28;;;34655:109;;34727:9;34720:16;;;;;;34655:109;34526:261;;;34077:729;33988:833;33935:886;34849:31;;;;;;;;;;;;;;33747:1141;;;;:::o;8217:191::-;8291:16;8310:6;;;;;;;;;;;8291:25;;8336:8;8327:6;;:17;;;;;;;;;;;;;;;;;;8391:8;8360:40;;8381:8;8360:40;;;;;;;;;;;;8280:128;8217:191;:::o;9646:326::-;9706:4;9963:1;9941:7;:19;;;:23;9934:30;;9646:326;;;:::o;49028:772::-;49191:4;49241:2;49225:36;;;49280:12;:10;:12::i;:::-;49311:4;49334:7;49360:5;49225:155;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;49208:585;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49568:1;49551:6;:13;:18;49547:235;;;49597:40;;;;;;;;;;;;;;49547:235;49740:6;49734:13;49725:6;49721:2;49717:15;49710:38;49208:585;49446:45;;;49436:55;;;:6;:55;;;;49429:62;;;49028:772;;;;;;:::o;3145:723::-;3201:13;3431:1;3422:5;:10;3418:53;;;3449:10;;;;;;;;;;;;;;;;;;;;;3418:53;3481:12;3496:5;3481:20;;3512:14;3537:78;3552:1;3544:4;:9;3537:78;;3570:8;;;;;:::i;:::-;;;;3601:2;3593:10;;;;;:::i;:::-;;;3537:78;;;3625:19;3657:6;3647:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3625:39;;3675:154;3691:1;3682:5;:10;3675:154;;3719:1;3709:11;;;;;:::i;:::-;;;3786:2;3778:5;:10;;;;:::i;:::-;3765:2;:24;;;;:::i;:::-;3752:39;;3735:6;3742;3735:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3815:2;3806:11;;;;;:::i;:::-;;;3675:154;;;3853:6;3839:21;;;;;3145:723;;;;:::o;39662:1940::-;39785:20;39808:13;;39785:36;;39850:1;39836:16;;:2;:16;;;39832:48;;;39861:19;;;;;;;;;;;;;;39832:48;39907:1;39895:8;:13;39891:44;;;39917:18;;;;;;;;;;;;;;39891:44;39948:61;39978:1;39982:2;39986:12;40000:8;39948:21;:61::i;:::-;40321:8;40286:12;:16;40299:2;40286:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40385:8;40345:12;:16;40358:2;40345:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40444:2;40411:11;:25;40423:12;40411:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;40511:15;40461:11;:25;40473:12;40461:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;40544:20;40567:12;40544:35;;40594:11;40623:8;40608:12;:23;40594:37;;40652:15;:2;:13;;;:15::i;:::-;40648:822;;;40688:504;40744:12;40740:2;40719:38;;40736:1;40719:38;;;;;;;;;;;;40811:212;40880:1;40913:2;40946:14;;;;;;40991:5;40811:30;:212::i;:::-;40780:365;;41081:40;;;;;;;;;;;;;;40780:365;41187:3;41172:12;:18;40688:504;;41273:12;41256:13;;:29;41252:43;;41287:8;;;41252:43;40648:822;;;41336:119;41392:14;;;;;;41388:2;41367:40;;41384:1;41367:40;;;;;;;;;;;;41450:3;41435:12;:18;41336:119;;40648:822;41500:12;41484:13;:28;;;;40261:1263;;41534:60;41563:1;41567:2;41571:12;41585:8;41534:20;:60::i;:::-;39774:1828;39662:1940;;;:::o;50448:159::-;;;;;:::o;51266:158::-;;;;;:::o;1804:707::-;1914:7;1939:20;1962:4;1939:27;;1982:9;1977:497;2001:5;:12;1997:1;:16;1977:497;;;2035:20;2058:5;2064:1;2058:8;;;;;;;;:::i;:::-;;;;;;;;2035:31;;2101:12;2085;:28;2081:382;;2228:42;2243:12;2257;2228:14;:42::i;:::-;2213:57;;2081:382;;;2405:42;2420:12;2434;2405:14;:42::i;:::-;2390:57;;2081:382;2020:454;2015:3;;;;;:::i;:::-;;;;1977:497;;;;2491:12;2484:19;;;1804:707;;;;:::o;2519:256::-;2614:13;2682:1;2676:4;2669:15;2711:1;2705:4;2698:15;2752:4;2746;2736:21;2727:30;;2519:256;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:139::-;2309:5;2347:6;2334:20;2325:29;;2363:33;2390:5;2363:33;:::i;:::-;2263:139;;;;:::o;2408:137::-;2453:5;2491:6;2478:20;2469:29;;2507:32;2533:5;2507:32;:::i;:::-;2408:137;;;;:::o;2551:141::-;2607:5;2638:6;2632:13;2623:22;;2654:32;2680:5;2654:32;:::i;:::-;2551:141;;;;:::o;2711:338::-;2766:5;2815:3;2808:4;2800:6;2796:17;2792:27;2782:122;;2823:79;;:::i;:::-;2782:122;2940:6;2927:20;2965:78;3039:3;3031:6;3024:4;3016:6;3012:17;2965:78;:::i;:::-;2956:87;;2772:277;2711:338;;;;:::o;3069:340::-;3125:5;3174:3;3167:4;3159:6;3155:17;3151:27;3141:122;;3182:79;;:::i;:::-;3141:122;3299:6;3286:20;3324:79;3399:3;3391:6;3384:4;3376:6;3372:17;3324:79;:::i;:::-;3315:88;;3131:278;3069:340;;;;:::o;3415:139::-;3461:5;3499:6;3486:20;3477:29;;3515:33;3542:5;3515:33;:::i;:::-;3415:139;;;;:::o;3560:329::-;3619:6;3668:2;3656:9;3647:7;3643:23;3639:32;3636:119;;;3674:79;;:::i;:::-;3636:119;3794:1;3819:53;3864:7;3855:6;3844:9;3840:22;3819:53;:::i;:::-;3809:63;;3765:117;3560:329;;;;:::o;3895:474::-;3963:6;3971;4020:2;4008:9;3999:7;3995:23;3991:32;3988:119;;;4026:79;;:::i;:::-;3988:119;4146:1;4171:53;4216:7;4207:6;4196:9;4192:22;4171:53;:::i;:::-;4161:63;;4117:117;4273:2;4299:53;4344:7;4335:6;4324:9;4320:22;4299:53;:::i;:::-;4289:63;;4244:118;3895:474;;;;;:::o;4375:619::-;4452:6;4460;4468;4517:2;4505:9;4496:7;4492:23;4488:32;4485:119;;;4523:79;;:::i;:::-;4485:119;4643:1;4668:53;4713:7;4704:6;4693:9;4689:22;4668:53;:::i;:::-;4658:63;;4614:117;4770:2;4796:53;4841:7;4832:6;4821:9;4817:22;4796:53;:::i;:::-;4786:63;;4741:118;4898:2;4924:53;4969:7;4960:6;4949:9;4945:22;4924:53;:::i;:::-;4914:63;;4869:118;4375:619;;;;;:::o;5000:943::-;5095:6;5103;5111;5119;5168:3;5156:9;5147:7;5143:23;5139:33;5136:120;;;5175:79;;:::i;:::-;5136:120;5295:1;5320:53;5365:7;5356:6;5345:9;5341:22;5320:53;:::i;:::-;5310:63;;5266:117;5422:2;5448:53;5493:7;5484:6;5473:9;5469:22;5448:53;:::i;:::-;5438:63;;5393:118;5550:2;5576:53;5621:7;5612:6;5601:9;5597:22;5576:53;:::i;:::-;5566:63;;5521:118;5706:2;5695:9;5691:18;5678:32;5737:18;5729:6;5726:30;5723:117;;;5759:79;;:::i;:::-;5723:117;5864:62;5918:7;5909:6;5898:9;5894:22;5864:62;:::i;:::-;5854:72;;5649:287;5000:943;;;;;;;:::o;5949:468::-;6014:6;6022;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:53;6267:7;6258:6;6247:9;6243:22;6222:53;:::i;:::-;6212:63;;6168:117;6324:2;6350:50;6392:7;6383:6;6372:9;6368:22;6350:50;:::i;:::-;6340:60;;6295:115;5949:468;;;;;:::o;6423:474::-;6491:6;6499;6548:2;6536:9;6527:7;6523:23;6519:32;6516:119;;;6554:79;;:::i;:::-;6516:119;6674:1;6699:53;6744:7;6735:6;6724:9;6720:22;6699:53;:::i;:::-;6689:63;;6645:117;6801:2;6827:53;6872:7;6863:6;6852:9;6848:22;6827:53;:::i;:::-;6817:63;;6772:118;6423:474;;;;;:::o;6903:684::-;6996:6;7004;7053:2;7041:9;7032:7;7028:23;7024:32;7021:119;;;7059:79;;:::i;:::-;7021:119;7207:1;7196:9;7192:17;7179:31;7237:18;7229:6;7226:30;7223:117;;;7259:79;;:::i;:::-;7223:117;7364:78;7434:7;7425:6;7414:9;7410:22;7364:78;:::i;:::-;7354:88;;7150:302;7491:2;7517:53;7562:7;7553:6;7542:9;7538:22;7517:53;:::i;:::-;7507:63;;7462:118;6903:684;;;;;:::o;7593:329::-;7652:6;7701:2;7689:9;7680:7;7676:23;7672:32;7669:119;;;7707:79;;:::i;:::-;7669:119;7827:1;7852:53;7897:7;7888:6;7877:9;7873:22;7852:53;:::i;:::-;7842:63;;7798:117;7593:329;;;;:::o;7928:327::-;7986:6;8035:2;8023:9;8014:7;8010:23;8006:32;8003:119;;;8041:79;;:::i;:::-;8003:119;8161:1;8186:52;8230:7;8221:6;8210:9;8206:22;8186:52;:::i;:::-;8176:62;;8132:116;7928:327;;;;:::o;8261:349::-;8330:6;8379:2;8367:9;8358:7;8354:23;8350:32;8347:119;;;8385:79;;:::i;:::-;8347:119;8505:1;8530:63;8585:7;8576:6;8565:9;8561:22;8530:63;:::i;:::-;8520:73;;8476:127;8261:349;;;;:::o;8616:509::-;8685:6;8734:2;8722:9;8713:7;8709:23;8705:32;8702:119;;;8740:79;;:::i;:::-;8702:119;8888:1;8877:9;8873:17;8860:31;8918:18;8910:6;8907:30;8904:117;;;8940:79;;:::i;:::-;8904:117;9045:63;9100:7;9091:6;9080:9;9076:22;9045:63;:::i;:::-;9035:73;;8831:287;8616:509;;;;:::o;9131:329::-;9190:6;9239:2;9227:9;9218:7;9214:23;9210:32;9207:119;;;9245:79;;:::i;:::-;9207:119;9365:1;9390:53;9435:7;9426:6;9415:9;9411:22;9390:53;:::i;:::-;9380:63;;9336:117;9131:329;;;;:::o;9466:118::-;9553:24;9571:5;9553:24;:::i;:::-;9548:3;9541:37;9466:118;;:::o;9590:157::-;9695:45;9715:24;9733:5;9715:24;:::i;:::-;9695:45;:::i;:::-;9690:3;9683:58;9590:157;;:::o;9753:109::-;9834:21;9849:5;9834:21;:::i;:::-;9829:3;9822:34;9753:109;;:::o;9868:118::-;9955:24;9973:5;9955:24;:::i;:::-;9950:3;9943:37;9868:118;;:::o;9992:360::-;10078:3;10106:38;10138:5;10106:38;:::i;:::-;10160:70;10223:6;10218:3;10160:70;:::i;:::-;10153:77;;10239:52;10284:6;10279:3;10272:4;10265:5;10261:16;10239:52;:::i;:::-;10316:29;10338:6;10316:29;:::i;:::-;10311:3;10307:39;10300:46;;10082:270;9992:360;;;;:::o;10358:364::-;10446:3;10474:39;10507:5;10474:39;:::i;:::-;10529:71;10593:6;10588:3;10529:71;:::i;:::-;10522:78;;10609:52;10654:6;10649:3;10642:4;10635:5;10631:16;10609:52;:::i;:::-;10686:29;10708:6;10686:29;:::i;:::-;10681:3;10677:39;10670:46;;10450:272;10358:364;;;;:::o;10728:377::-;10834:3;10862:39;10895:5;10862:39;:::i;:::-;10917:89;10999:6;10994:3;10917:89;:::i;:::-;10910:96;;11015:52;11060:6;11055:3;11048:4;11041:5;11037:16;11015:52;:::i;:::-;11092:6;11087:3;11083:16;11076:23;;10838:267;10728:377;;;;:::o;11135:845::-;11238:3;11275:5;11269:12;11304:36;11330:9;11304:36;:::i;:::-;11356:89;11438:6;11433:3;11356:89;:::i;:::-;11349:96;;11476:1;11465:9;11461:17;11492:1;11487:137;;;;11638:1;11633:341;;;;11454:520;;11487:137;11571:4;11567:9;11556;11552:25;11547:3;11540:38;11607:6;11602:3;11598:16;11591:23;;11487:137;;11633:341;11700:38;11732:5;11700:38;:::i;:::-;11760:1;11774:154;11788:6;11785:1;11782:13;11774:154;;;11862:7;11856:14;11852:1;11847:3;11843:11;11836:35;11912:1;11903:7;11899:15;11888:26;;11810:4;11807:1;11803:12;11798:17;;11774:154;;;11957:6;11952:3;11948:16;11941:23;;11640:334;;11454:520;;11242:738;;11135:845;;;;:::o;11986:366::-;12128:3;12149:67;12213:2;12208:3;12149:67;:::i;:::-;12142:74;;12225:93;12314:3;12225:93;:::i;:::-;12343:2;12338:3;12334:12;12327:19;;11986:366;;;:::o;12358:::-;12500:3;12521:67;12585:2;12580:3;12521:67;:::i;:::-;12514:74;;12597:93;12686:3;12597:93;:::i;:::-;12715:2;12710:3;12706:12;12699:19;;12358:366;;;:::o;12730:::-;12872:3;12893:67;12957:2;12952:3;12893:67;:::i;:::-;12886:74;;12969:93;13058:3;12969:93;:::i;:::-;13087:2;13082:3;13078:12;13071:19;;12730:366;;;:::o;13102:::-;13244:3;13265:67;13329:2;13324:3;13265:67;:::i;:::-;13258:74;;13341:93;13430:3;13341:93;:::i;:::-;13459:2;13454:3;13450:12;13443:19;;13102:366;;;:::o;13474:::-;13616:3;13637:67;13701:2;13696:3;13637:67;:::i;:::-;13630:74;;13713:93;13802:3;13713:93;:::i;:::-;13831:2;13826:3;13822:12;13815:19;;13474:366;;;:::o;13846:::-;13988:3;14009:67;14073:2;14068:3;14009:67;:::i;:::-;14002:74;;14085:93;14174:3;14085:93;:::i;:::-;14203:2;14198:3;14194:12;14187:19;;13846:366;;;:::o;14218:::-;14360:3;14381:67;14445:2;14440:3;14381:67;:::i;:::-;14374:74;;14457:93;14546:3;14457:93;:::i;:::-;14575:2;14570:3;14566:12;14559:19;;14218:366;;;:::o;14590:400::-;14750:3;14771:84;14853:1;14848:3;14771:84;:::i;:::-;14764:91;;14864:93;14953:3;14864:93;:::i;:::-;14982:1;14977:3;14973:11;14966:18;;14590:400;;;:::o;14996:366::-;15138:3;15159:67;15223:2;15218:3;15159:67;:::i;:::-;15152:74;;15235:93;15324:3;15235:93;:::i;:::-;15353:2;15348:3;15344:12;15337:19;;14996:366;;;:::o;15368:::-;15510:3;15531:67;15595:2;15590:3;15531:67;:::i;:::-;15524:74;;15607:93;15696:3;15607:93;:::i;:::-;15725:2;15720:3;15716:12;15709:19;;15368:366;;;:::o;15740:::-;15882:3;15903:67;15967:2;15962:3;15903:67;:::i;:::-;15896:74;;15979:93;16068:3;15979:93;:::i;:::-;16097:2;16092:3;16088:12;16081:19;;15740:366;;;:::o;16112:::-;16254:3;16275:67;16339:2;16334:3;16275:67;:::i;:::-;16268:74;;16351:93;16440:3;16351:93;:::i;:::-;16469:2;16464:3;16460:12;16453:19;;16112:366;;;:::o;16484:::-;16626:3;16647:67;16711:2;16706:3;16647:67;:::i;:::-;16640:74;;16723:93;16812:3;16723:93;:::i;:::-;16841:2;16836:3;16832:12;16825:19;;16484:366;;;:::o;16856:::-;16998:3;17019:67;17083:2;17078:3;17019:67;:::i;:::-;17012:74;;17095:93;17184:3;17095:93;:::i;:::-;17213:2;17208:3;17204:12;17197:19;;16856:366;;;:::o;17228:::-;17370:3;17391:67;17455:2;17450:3;17391:67;:::i;:::-;17384:74;;17467:93;17556:3;17467:93;:::i;:::-;17585:2;17580:3;17576:12;17569:19;;17228:366;;;:::o;17600:118::-;17687:24;17705:5;17687:24;:::i;:::-;17682:3;17675:37;17600:118;;:::o;17724:256::-;17836:3;17851:75;17922:3;17913:6;17851:75;:::i;:::-;17951:2;17946:3;17942:12;17935:19;;17971:3;17964:10;;17724:256;;;;:::o;17986:695::-;18264:3;18286:92;18374:3;18365:6;18286:92;:::i;:::-;18279:99;;18395:95;18486:3;18477:6;18395:95;:::i;:::-;18388:102;;18507:148;18651:3;18507:148;:::i;:::-;18500:155;;18672:3;18665:10;;17986:695;;;;;:::o;18687:222::-;18780:4;18818:2;18807:9;18803:18;18795:26;;18831:71;18899:1;18888:9;18884:17;18875:6;18831:71;:::i;:::-;18687:222;;;;:::o;18915:640::-;19110:4;19148:3;19137:9;19133:19;19125:27;;19162:71;19230:1;19219:9;19215:17;19206:6;19162:71;:::i;:::-;19243:72;19311:2;19300:9;19296:18;19287:6;19243:72;:::i;:::-;19325;19393:2;19382:9;19378:18;19369:6;19325:72;:::i;:::-;19444:9;19438:4;19434:20;19429:2;19418:9;19414:18;19407:48;19472:76;19543:4;19534:6;19472:76;:::i;:::-;19464:84;;18915:640;;;;;;;:::o;19561:210::-;19648:4;19686:2;19675:9;19671:18;19663:26;;19699:65;19761:1;19750:9;19746:17;19737:6;19699:65;:::i;:::-;19561:210;;;;:::o;19777:222::-;19870:4;19908:2;19897:9;19893:18;19885:26;;19921:71;19989:1;19978:9;19974:17;19965:6;19921:71;:::i;:::-;19777:222;;;;:::o;20005:313::-;20118:4;20156:2;20145:9;20141:18;20133:26;;20205:9;20199:4;20195:20;20191:1;20180:9;20176:17;20169:47;20233:78;20306:4;20297:6;20233:78;:::i;:::-;20225:86;;20005:313;;;;:::o;20324:419::-;20490:4;20528:2;20517:9;20513:18;20505:26;;20577:9;20571:4;20567:20;20563:1;20552:9;20548:17;20541:47;20605:131;20731:4;20605:131;:::i;:::-;20597:139;;20324:419;;;:::o;20749:::-;20915:4;20953:2;20942:9;20938:18;20930:26;;21002:9;20996:4;20992:20;20988:1;20977:9;20973:17;20966:47;21030:131;21156:4;21030:131;:::i;:::-;21022:139;;20749:419;;;:::o;21174:::-;21340:4;21378:2;21367:9;21363:18;21355:26;;21427:9;21421:4;21417:20;21413:1;21402:9;21398:17;21391:47;21455:131;21581:4;21455:131;:::i;:::-;21447:139;;21174:419;;;:::o;21599:::-;21765:4;21803:2;21792:9;21788:18;21780:26;;21852:9;21846:4;21842:20;21838:1;21827:9;21823:17;21816:47;21880:131;22006:4;21880:131;:::i;:::-;21872:139;;21599:419;;;:::o;22024:::-;22190:4;22228:2;22217:9;22213:18;22205:26;;22277:9;22271:4;22267:20;22263:1;22252:9;22248:17;22241:47;22305:131;22431:4;22305:131;:::i;:::-;22297:139;;22024:419;;;:::o;22449:::-;22615:4;22653:2;22642:9;22638:18;22630:26;;22702:9;22696:4;22692:20;22688:1;22677:9;22673:17;22666:47;22730:131;22856:4;22730:131;:::i;:::-;22722:139;;22449:419;;;:::o;22874:::-;23040:4;23078:2;23067:9;23063:18;23055:26;;23127:9;23121:4;23117:20;23113:1;23102:9;23098:17;23091:47;23155:131;23281:4;23155:131;:::i;:::-;23147:139;;22874:419;;;:::o;23299:::-;23465:4;23503:2;23492:9;23488:18;23480:26;;23552:9;23546:4;23542:20;23538:1;23527:9;23523:17;23516:47;23580:131;23706:4;23580:131;:::i;:::-;23572:139;;23299:419;;;:::o;23724:::-;23890:4;23928:2;23917:9;23913:18;23905:26;;23977:9;23971:4;23967:20;23963:1;23952:9;23948:17;23941:47;24005:131;24131:4;24005:131;:::i;:::-;23997:139;;23724:419;;;:::o;24149:::-;24315:4;24353:2;24342:9;24338:18;24330:26;;24402:9;24396:4;24392:20;24388:1;24377:9;24373:17;24366:47;24430:131;24556:4;24430:131;:::i;:::-;24422:139;;24149:419;;;:::o;24574:::-;24740:4;24778:2;24767:9;24763:18;24755:26;;24827:9;24821:4;24817:20;24813:1;24802:9;24798:17;24791:47;24855:131;24981:4;24855:131;:::i;:::-;24847:139;;24574:419;;;:::o;24999:::-;25165:4;25203:2;25192:9;25188:18;25180:26;;25252:9;25246:4;25242:20;25238:1;25227:9;25223:17;25216:47;25280:131;25406:4;25280:131;:::i;:::-;25272:139;;24999:419;;;:::o;25424:::-;25590:4;25628:2;25617:9;25613:18;25605:26;;25677:9;25671:4;25667:20;25663:1;25652:9;25648:17;25641:47;25705:131;25831:4;25705:131;:::i;:::-;25697:139;;25424:419;;;:::o;25849:::-;26015:4;26053:2;26042:9;26038:18;26030:26;;26102:9;26096:4;26092:20;26088:1;26077:9;26073:17;26066:47;26130:131;26256:4;26130:131;:::i;:::-;26122:139;;25849:419;;;:::o;26274:222::-;26367:4;26405:2;26394:9;26390:18;26382:26;;26418:71;26486:1;26475:9;26471:17;26462:6;26418:71;:::i;:::-;26274:222;;;;:::o;26502:129::-;26536:6;26563:20;;:::i;:::-;26553:30;;26592:33;26620:4;26612:6;26592:33;:::i;:::-;26502:129;;;:::o;26637:75::-;26670:6;26703:2;26697:9;26687:19;;26637:75;:::o;26718:311::-;26795:4;26885:18;26877:6;26874:30;26871:56;;;26907:18;;:::i;:::-;26871:56;26957:4;26949:6;26945:17;26937:25;;27017:4;27011;27007:15;26999:23;;26718:311;;;:::o;27035:307::-;27096:4;27186:18;27178:6;27175:30;27172:56;;;27208:18;;:::i;:::-;27172:56;27246:29;27268:6;27246:29;:::i;:::-;27238:37;;27330:4;27324;27320:15;27312:23;;27035:307;;;:::o;27348:308::-;27410:4;27500:18;27492:6;27489:30;27486:56;;;27522:18;;:::i;:::-;27486:56;27560:29;27582:6;27560:29;:::i;:::-;27552:37;;27644:4;27638;27634:15;27626:23;;27348:308;;;:::o;27662:141::-;27711:4;27734:3;27726:11;;27757:3;27754:1;27747:14;27791:4;27788:1;27778:18;27770:26;;27662:141;;;:::o;27809:98::-;27860:6;27894:5;27888:12;27878:22;;27809:98;;;:::o;27913:99::-;27965:6;27999:5;27993:12;27983:22;;27913:99;;;:::o;28018:168::-;28101:11;28135:6;28130:3;28123:19;28175:4;28170:3;28166:14;28151:29;;28018:168;;;;:::o;28192:169::-;28276:11;28310:6;28305:3;28298:19;28350:4;28345:3;28341:14;28326:29;;28192:169;;;;:::o;28367:148::-;28469:11;28506:3;28491:18;;28367:148;;;;:::o;28521:305::-;28561:3;28580:20;28598:1;28580:20;:::i;:::-;28575:25;;28614:20;28632:1;28614:20;:::i;:::-;28609:25;;28768:1;28700:66;28696:74;28693:1;28690:81;28687:107;;;28774:18;;:::i;:::-;28687:107;28818:1;28815;28811:9;28804:16;;28521:305;;;;:::o;28832:185::-;28872:1;28889:20;28907:1;28889:20;:::i;:::-;28884:25;;28923:20;28941:1;28923:20;:::i;:::-;28918:25;;28962:1;28952:35;;28967:18;;:::i;:::-;28952:35;29009:1;29006;29002:9;28997:14;;28832:185;;;;:::o;29023:348::-;29063:7;29086:20;29104:1;29086:20;:::i;:::-;29081:25;;29120:20;29138:1;29120:20;:::i;:::-;29115:25;;29308:1;29240:66;29236:74;29233:1;29230:81;29225:1;29218:9;29211:17;29207:105;29204:131;;;29315:18;;:::i;:::-;29204:131;29363:1;29360;29356:9;29345:20;;29023:348;;;;:::o;29377:191::-;29417:4;29437:20;29455:1;29437:20;:::i;:::-;29432:25;;29471:20;29489:1;29471:20;:::i;:::-;29466:25;;29510:1;29507;29504:8;29501:34;;;29515:18;;:::i;:::-;29501:34;29560:1;29557;29553:9;29545:17;;29377:191;;;;:::o;29574:96::-;29611:7;29640:24;29658:5;29640:24;:::i;:::-;29629:35;;29574:96;;;:::o;29676:90::-;29710:7;29753:5;29746:13;29739:21;29728:32;;29676:90;;;:::o;29772:77::-;29809:7;29838:5;29827:16;;29772:77;;;:::o;29855:149::-;29891:7;29931:66;29924:5;29920:78;29909:89;;29855:149;;;:::o;30010:126::-;30047:7;30087:42;30080:5;30076:54;30065:65;;30010:126;;;:::o;30142:77::-;30179:7;30208:5;30197:16;;30142:77;;;:::o;30225:154::-;30309:6;30304:3;30299;30286:30;30371:1;30362:6;30357:3;30353:16;30346:27;30225:154;;;:::o;30385:307::-;30453:1;30463:113;30477:6;30474:1;30471:13;30463:113;;;30562:1;30557:3;30553:11;30547:18;30543:1;30538:3;30534:11;30527:39;30499:2;30496:1;30492:10;30487:15;;30463:113;;;30594:6;30591:1;30588:13;30585:101;;;30674:1;30665:6;30660:3;30656:16;30649:27;30585:101;30434:258;30385:307;;;:::o;30698:320::-;30742:6;30779:1;30773:4;30769:12;30759:22;;30826:1;30820:4;30816:12;30847:18;30837:81;;30903:4;30895:6;30891:17;30881:27;;30837:81;30965:2;30957:6;30954:14;30934:18;30931:38;30928:84;;;30984:18;;:::i;:::-;30928:84;30749:269;30698:320;;;:::o;31024:281::-;31107:27;31129:4;31107:27;:::i;:::-;31099:6;31095:40;31237:6;31225:10;31222:22;31201:18;31189:10;31186:34;31183:62;31180:88;;;31248:18;;:::i;:::-;31180:88;31288:10;31284:2;31277:22;31067:238;31024:281;;:::o;31311:233::-;31350:3;31373:24;31391:5;31373:24;:::i;:::-;31364:33;;31419:66;31412:5;31409:77;31406:103;;;31489:18;;:::i;:::-;31406:103;31536:1;31529:5;31525:13;31518:20;;31311:233;;;:::o;31550:100::-;31589:7;31618:26;31638:5;31618:26;:::i;:::-;31607:37;;31550:100;;;:::o;31656:94::-;31695:7;31724:20;31738:5;31724:20;:::i;:::-;31713:31;;31656:94;;;:::o;31756:176::-;31788:1;31805:20;31823:1;31805:20;:::i;:::-;31800:25;;31839:20;31857:1;31839:20;:::i;:::-;31834:25;;31878:1;31868:35;;31883:18;;:::i;:::-;31868:35;31924:1;31921;31917:9;31912:14;;31756:176;;;;:::o;31938:180::-;31986:77;31983:1;31976:88;32083:4;32080:1;32073:15;32107:4;32104:1;32097:15;32124:180;32172:77;32169:1;32162:88;32269:4;32266:1;32259:15;32293:4;32290:1;32283:15;32310:180;32358:77;32355:1;32348:88;32455:4;32452:1;32445:15;32479:4;32476:1;32469:15;32496:180;32544:77;32541:1;32534:88;32641:4;32638:1;32631:15;32665:4;32662:1;32655:15;32682:180;32730:77;32727:1;32720:88;32827:4;32824:1;32817:15;32851:4;32848:1;32841:15;32868:117;32977:1;32974;32967:12;32991:117;33100:1;33097;33090:12;33114:117;33223:1;33220;33213:12;33237:117;33346:1;33343;33336:12;33360:117;33469:1;33466;33459:12;33483:102;33524:6;33575:2;33571:7;33566:2;33559:5;33555:14;33551:28;33541:38;;33483:102;;;:::o;33591:94::-;33624:8;33672:5;33668:2;33664:14;33643:35;;33591:94;;;:::o;33691:180::-;33831:32;33827:1;33819:6;33815:14;33808:56;33691:180;:::o;33877:225::-;34017:34;34013:1;34005:6;34001:14;33994:58;34086:8;34081:2;34073:6;34069:15;34062:33;33877:225;:::o;34108:179::-;34248:31;34244:1;34236:6;34232:14;34225:55;34108:179;:::o;34293:182::-;34433:34;34429:1;34421:6;34417:14;34410:58;34293:182;:::o;34481:222::-;34621:34;34617:1;34609:6;34605:14;34598:58;34690:5;34685:2;34677:6;34673:15;34666:30;34481:222;:::o;34709:177::-;34849:29;34845:1;34837:6;34833:14;34826:53;34709:177;:::o;34892:175::-;35032:27;35028:1;35020:6;35016:14;35009:51;34892:175;:::o;35073:155::-;35213:7;35209:1;35201:6;35197:14;35190:31;35073:155;:::o;35234:179::-;35374:31;35370:1;35362:6;35358:14;35351:55;35234:179;:::o;35419:182::-;35559:34;35555:1;35547:6;35543:14;35536:58;35419:182;:::o;35607:234::-;35747:34;35743:1;35735:6;35731:14;35724:58;35816:17;35811:2;35803:6;35799:15;35792:42;35607:234;:::o;35847:167::-;35987:19;35983:1;35975:6;35971:14;35964:43;35847:167;:::o;36020:226::-;36160:34;36156:1;36148:6;36144:14;36137:58;36229:9;36224:2;36216:6;36212:15;36205:34;36020:226;:::o;36252:225::-;36392:34;36388:1;36380:6;36376:14;36369:58;36461:8;36456:2;36448:6;36444:15;36437:33;36252:225;:::o;36483:181::-;36623:33;36619:1;36611:6;36607:14;36600:57;36483:181;:::o;36670:122::-;36743:24;36761:5;36743:24;:::i;:::-;36736:5;36733:35;36723:63;;36782:1;36779;36772:12;36723:63;36670:122;:::o;36798:116::-;36868:21;36883:5;36868:21;:::i;:::-;36861:5;36858:32;36848:60;;36904:1;36901;36894:12;36848:60;36798:116;:::o;36920:122::-;36993:24;37011:5;36993:24;:::i;:::-;36986:5;36983:35;36973:63;;37032:1;37029;37022:12;36973:63;36920:122;:::o;37048:120::-;37120:23;37137:5;37120:23;:::i;:::-;37113:5;37110:34;37100:62;;37158:1;37155;37148:12;37100:62;37048:120;:::o;37174:122::-;37247:24;37265:5;37247:24;:::i;:::-;37240:5;37237:35;37227:63;;37286:1;37283;37276:12;37227:63;37174:122;:::o

Swarm Source

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