ETH Price: $2,915.11 (-3.80%)
Gas: 1 Gwei

Token

Surf The Kali Yuga (GM42)
 

Overview

Max Total Supply

10,000 GM42

Holders

3,593

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 GM42
0x706055a615620c2000caf2f1ca926c6ff36efd2b
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

U have to touch my art to understand, pass the quest as many times as u can, let the magic begin.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
GM42

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-07-29
*/

// SPDX-License-Identifier: MIT
// 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/[email protected]


// 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/math/[email protected]


// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}


// File @openzeppelin/contracts/utils/introspection/[email protected]


// 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/token/ERC721/[email protected]


// 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/security/[email protected]


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

pragma solidity ^0.8.0;

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

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

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

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

        _;

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


// File @openzeppelin/contracts/token/ERC721/[email protected]


// 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/token/ERC721/extensions/[email protected]


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

pragma solidity ^0.8.0;

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

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

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


// File @openzeppelin/contracts/utils/[email protected]


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/utils/[email protected]


// 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/introspection/[email protected]


// 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 contracts/ERC721A.sol


// Creator: Chiru Labs

pragma solidity ^0.8.0;
/**
 * @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 0 (e.g. 0, 1, 2, 3..).
 *
 * Does not support burning tokens to address(0).
 *
 * Assumes that an owner cannot have more than the 2**128 - 1 (max value of uint128) of supply
 */
contract ERC721A is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    struct TokenOwnership {
        address addr;
        uint64 startTimestamp;
    }

    struct AddressData {
        uint128 balance;
        uint128 numberMinted;
    }

    uint256 internal currentIndex;

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

    function totalSupply() public view returns (uint256) {
        return currentIndex;
    }

    /**
     * @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) {
        require(owner != address(0), 'ERC721A: balance query for the zero address');
        return uint256(_addressData[owner].balance);
    }

    function _numberMinted(address owner) internal view returns (uint256) {
        require(owner != address(0), 'ERC721A: number minted query for the zero address');
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * 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) {
        require(_exists(tokenId), 'ERC721A: owner query for nonexistent token');

    unchecked {
        for (uint256 curr = tokenId; curr >= 0; curr--) {
            TokenOwnership memory ownership = _ownerships[curr];
            if (ownership.addr != address(0)) {
                return ownership;
            }
        }
    }

        revert('ERC721A: unable to determine the owner of token');
    }

    /**
     * @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) {
        require(_exists(tokenId), 'ERC721Metadata: URI query for nonexistent token');

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

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

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

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

        _approve(to, tokenId, owner);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public override {
        require(operator != _msgSender(), 'ERC721A: approve to caller');

        _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 override {
        _transfer(from, to, tokenId);
    }

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public override {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, _data),
            'ERC721A: transfer to non ERC721Receiver implementer'
        );
    }

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

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

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

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

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

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 3.4e38 (2**128) - 1
        // updatedIndex overflows if currentIndex + quantity > 1.56e77 (2**256) - 1
    unchecked {
        _addressData[to].balance += uint128(quantity);
        _addressData[to].numberMinted += uint128(quantity);

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

        uint256 updatedIndex = startTokenId;

        for (uint256 i; i < quantity; i++) {
            emit Transfer(address(0), to, updatedIndex);
            if (safe) {
                require(
                    _checkOnERC721Received(address(0), to, updatedIndex, _data),
                    'ERC721A: transfer to non ERC721Receiver implementer'
                );
            }

            updatedIndex++;
        }

        currentIndex = updatedIndex;
    }

        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

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

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

        require(isApprovedOrOwner, 'ERC721A: transfer caller is not owner nor approved');

        require(prevOwnership.addr == from, 'ERC721A: transfer from incorrect owner');
        require(to != address(0), 'ERC721A: transfer to the zero address');

        _beforeTokenTransfers(from, to, tokenId, 1);

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

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

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

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

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

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

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     *
     * 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`.
     */
    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.
     *
     * 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` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}

pragma solidity ^0.8.0;
contract GM42 is Ownable, ERC721A, ReentrancyGuard {
    using SafeMath for uint256;
   
    bool private _isActive = false;
   
    bool public revealed = false;

    uint256 public constant MAX_SUPPLY = 10000;

    uint256 public maxCountPerAccount = 2; 
    
    uint256 public price = 0 ether;

    string public hiddenMetadataUri;

    string private _tokenBaseURI = "";

    mapping(address => uint256) public minted;

    modifier onlyActive() {
        require(_isActive && totalSupply() < MAX_SUPPLY, 'not active');
        _;
    }

    constructor() ERC721A("Surf The Kali Yuga", "GM42") {
    }

    function mint(uint256 numberOfTokens) external payable onlyActive nonReentrant() {
        require(numberOfTokens > 0, "zero count");
        require(numberOfTokens <= MAX_SUPPLY.sub(totalSupply()), "not enough nfts");
        require(numberOfTokens.add(minted[msg.sender]) <= maxCountPerAccount, "already minted");
        
        minted[msg.sender] = minted[msg.sender].add(numberOfTokens);

        _safeMint(msg.sender, numberOfTokens);
    }

    function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner {
        hiddenMetadataUri = _hiddenMetadataUri;
    }

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

    function tokenURI(uint256 tokenId) public view override(ERC721A) returns (string memory)
    {
        if (revealed == false) {
             return hiddenMetadataUri;
        }
        return super.tokenURI(tokenId);
    }

    
    /////////////////////////////////////////////////////////////
    //////////////////   Admin Functions ////////////////////////
    /////////////////////////////////////////////////////////////
    function startSale() external onlyOwner {
        _isActive = true;
    }

    function endSale() external onlyOwner {
        _isActive = false;
    }


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

    function setPrice(uint256 _price) external onlyOwner {
        price = _price;
    }

    function setMaxMintPerAddr(uint256 _count) external onlyOwner {
        maxCountPerAccount = _count;
    }

    function setTokenBaseURI(string memory URI) external onlyOwner {
        _tokenBaseURI = URI;
    }

    function withdraw() external onlyOwner nonReentrant {
        uint256 balance = address(this).balance;
        Address.sendValue(payable(owner()), balance);
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endSale","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":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxCountPerAccount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"setMaxMintPerAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setTokenBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600960006101000a81548160ff0219169083151502179055506000600960016101000a81548160ff0219169083151502179055506002600a556000600b5560405180602001604052806000815250600d90805190602001906200006b92919062000214565b503480156200007957600080fd5b506040518060400160405280601281526020017f5375726620546865204b616c69205975676100000000000000000000000000008152506040518060400160405280600481526020017f474d34320000000000000000000000000000000000000000000000000000000081525062000106620000fa6200014860201b60201c565b6200015060201b60201c565b81600290805190602001906200011e92919062000214565b5080600390805190602001906200013792919062000214565b505050600160088190555062000329565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200022290620002c4565b90600052602060002090601f01602090048101928262000246576000855562000292565b82601f106200026157805160ff191683800117855562000292565b8280016001018555821562000292579182015b828111156200029157825182559160200191906001019062000274565b5b509050620002a19190620002a5565b5090565b5b80821115620002c0576000816000905550600101620002a6565b5090565b60006002820490506001821680620002dd57607f821691505b60208210811415620002f457620002f3620002fa565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6142e680620003396000396000f3fe6080604052600436106101e75760003560e01c8063715018a611610102578063a45ba8e711610095578063c87b56dd11610064578063c87b56dd14610690578063e0a80853146106cd578063e985e9c5146106f6578063f2fde38b14610733576101ee565b8063a45ba8e7146105fa578063b0d1643d14610625578063b66a0e5d14610650578063b88d4fde14610667576101ee565b806395d89b41116100d157806395d89b411461055f578063a035b1fe1461058a578063a0712d68146105b5578063a22cb465146105d1576101ee565b8063715018a6146104cb5780638da5cb5b146104e25780638ef79e911461050d57806391b7f5ed14610536576101ee565b806332cb6b0c1161017a5780634fdd43cb116101495780634fdd43cb146103fd57806351830227146104265780636352211e1461045157806370a082311461048e576101ee565b806332cb6b0c1461037b578063380d831b146103a65780633ccfd60b146103bd57806342842e0e146103d4576101ee565b80631300c014116101b65780631300c014146102c157806318160ddd146102ea5780631e7269c51461031557806323b872dd14610352576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298576101ee565b366101ee57005b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190612f75565b61075c565b60405161022791906134fd565b60405180910390f35b34801561023c57600080fd5b5061024561083e565b6040516102529190613518565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190613018565b6108d0565b60405161028f9190613496565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba9190612f08565b610955565b005b3480156102cd57600080fd5b506102e860048036038101906102e39190613018565b610a6e565b005b3480156102f657600080fd5b506102ff610af4565b60405161030c919061381a565b60405180910390f35b34801561032157600080fd5b5061033c60048036038101906103379190612d85565b610afe565b604051610349919061381a565b60405180910390f35b34801561035e57600080fd5b5061037960048036038101906103749190612df2565b610b16565b005b34801561038757600080fd5b50610390610b26565b60405161039d919061381a565b60405180910390f35b3480156103b257600080fd5b506103bb610b2c565b005b3480156103c957600080fd5b506103d2610bc5565b005b3480156103e057600080fd5b506103fb60048036038101906103f69190612df2565b610cb0565b005b34801561040957600080fd5b50610424600480360381019061041f9190612fcf565b610cd0565b005b34801561043257600080fd5b5061043b610d66565b60405161044891906134fd565b60405180910390f35b34801561045d57600080fd5b5061047860048036038101906104739190613018565b610d79565b6040516104859190613496565b60405180910390f35b34801561049a57600080fd5b506104b560048036038101906104b09190612d85565b610d8f565b6040516104c2919061381a565b60405180910390f35b3480156104d757600080fd5b506104e0610e78565b005b3480156104ee57600080fd5b506104f7610f00565b6040516105049190613496565b60405180910390f35b34801561051957600080fd5b50610534600480360381019061052f9190612fcf565b610f29565b005b34801561054257600080fd5b5061055d60048036038101906105589190613018565b610fbf565b005b34801561056b57600080fd5b50610574611045565b6040516105819190613518565b60405180910390f35b34801561059657600080fd5b5061059f6110d7565b6040516105ac919061381a565b60405180910390f35b6105cf60048036038101906105ca9190613018565b6110dd565b005b3480156105dd57600080fd5b506105f860048036038101906105f39190612ec8565b61136f565b005b34801561060657600080fd5b5061060f6114f0565b60405161061c9190613518565b60405180910390f35b34801561063157600080fd5b5061063a61157e565b604051610647919061381a565b60405180910390f35b34801561065c57600080fd5b50610665611584565b005b34801561067357600080fd5b5061068e60048036038101906106899190612e45565b61161d565b005b34801561069c57600080fd5b506106b760048036038101906106b29190613018565b611679565b6040516106c49190613518565b60405180910390f35b3480156106d957600080fd5b506106f460048036038101906106ef9190612f48565b61173a565b005b34801561070257600080fd5b5061071d60048036038101906107189190612db2565b6117d3565b60405161072a91906134fd565b60405180910390f35b34801561073f57600080fd5b5061075a60048036038101906107559190612d85565b611867565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061082757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061083757506108368261195f565b5b9050919050565b60606002805461084d90613a7b565b80601f016020809104026020016040519081016040528092919081815260200182805461087990613a7b565b80156108c65780601f1061089b576101008083540402835291602001916108c6565b820191906000526020600020905b8154815290600101906020018083116108a957829003601f168201915b5050505050905090565b60006108db826119c9565b61091a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610911906137da565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061096082610d79565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c8906136fa565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109f06119d7565b73ffffffffffffffffffffffffffffffffffffffff161480610a1f5750610a1e81610a196119d7565b6117d3565b5b610a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a559061361a565b60405180910390fd5b610a698383836119df565b505050565b610a766119d7565b73ffffffffffffffffffffffffffffffffffffffff16610a94610f00565b73ffffffffffffffffffffffffffffffffffffffff1614610aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae19061367a565b60405180910390fd5b80600a8190555050565b6000600154905090565b600e6020528060005260406000206000915090505481565b610b21838383611a91565b505050565b61271081565b610b346119d7565b73ffffffffffffffffffffffffffffffffffffffff16610b52610f00565b73ffffffffffffffffffffffffffffffffffffffff1614610ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9f9061367a565b60405180910390fd5b6000600960006101000a81548160ff021916908315150217905550565b610bcd6119d7565b73ffffffffffffffffffffffffffffffffffffffff16610beb610f00565b73ffffffffffffffffffffffffffffffffffffffff1614610c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c389061367a565b60405180910390fd5b60026008541415610c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7e9061379a565b60405180910390fd5b60026008819055506000479050610ca5610c9f610f00565b82611fd1565b506001600881905550565b610ccb8383836040518060200160405280600081525061161d565b505050565b610cd86119d7565b73ffffffffffffffffffffffffffffffffffffffff16610cf6610f00565b73ffffffffffffffffffffffffffffffffffffffff1614610d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d439061367a565b60405180910390fd5b80600c9080519060200190610d62929190612b5f565b5050565b600960019054906101000a900460ff1681565b6000610d84826120c5565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df79061363a565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b610e806119d7565b73ffffffffffffffffffffffffffffffffffffffff16610e9e610f00565b73ffffffffffffffffffffffffffffffffffffffff1614610ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eeb9061367a565b60405180910390fd5b610efe600061225f565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610f316119d7565b73ffffffffffffffffffffffffffffffffffffffff16610f4f610f00565b73ffffffffffffffffffffffffffffffffffffffff1614610fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9c9061367a565b60405180910390fd5b80600d9080519060200190610fbb929190612b5f565b5050565b610fc76119d7565b73ffffffffffffffffffffffffffffffffffffffff16610fe5610f00565b73ffffffffffffffffffffffffffffffffffffffff161461103b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110329061367a565b60405180910390fd5b80600b8190555050565b60606003805461105490613a7b565b80601f016020809104026020016040519081016040528092919081815260200182805461108090613a7b565b80156110cd5780601f106110a2576101008083540402835291602001916110cd565b820191906000526020600020905b8154815290600101906020018083116110b057829003601f168201915b5050505050905090565b600b5481565b600960009054906101000a900460ff16801561110157506127106110ff610af4565b105b611140576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111379061357a565b60405180910390fd5b60026008541415611186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117d9061379a565b60405180910390fd5b6002600881905550600081116111d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c89061373a565b60405180910390fd5b6111ed6111dc610af4565b61271061232390919063ffffffff16565b81111561122f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611226906135fa565b60405180910390fd5b600a54611284600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361233990919063ffffffff16565b11156112c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bc906137fa565b60405180910390fd5b61131781600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461233990919063ffffffff16565b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611364338261234f565b600160088190555050565b6113776119d7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113dc906136ba565b60405180910390fd5b80600760006113f26119d7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661149f6119d7565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114e491906134fd565b60405180910390a35050565b600c80546114fd90613a7b565b80601f016020809104026020016040519081016040528092919081815260200182805461152990613a7b565b80156115765780601f1061154b57610100808354040283529160200191611576565b820191906000526020600020905b81548152906001019060200180831161155957829003601f168201915b505050505081565b600a5481565b61158c6119d7565b73ffffffffffffffffffffffffffffffffffffffff166115aa610f00565b73ffffffffffffffffffffffffffffffffffffffff1614611600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f79061367a565b60405180910390fd5b6001600960006101000a81548160ff021916908315150217905550565b611628848484611a91565b6116348484848461236d565b611673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166a9061371a565b60405180910390fd5b50505050565b606060001515600960019054906101000a900460ff161515141561172957600c80546116a490613a7b565b80601f01602080910402602001604051908101604052809291908181526020018280546116d090613a7b565b801561171d5780601f106116f25761010080835404028352916020019161171d565b820191906000526020600020905b81548152906001019060200180831161170057829003601f168201915b50505050509050611735565b61173282612504565b90505b919050565b6117426119d7565b73ffffffffffffffffffffffffffffffffffffffff16611760610f00565b73ffffffffffffffffffffffffffffffffffffffff16146117b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ad9061367a565b60405180910390fd5b80600960016101000a81548160ff02191690831515021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61186f6119d7565b73ffffffffffffffffffffffffffffffffffffffff1661188d610f00565b73ffffffffffffffffffffffffffffffffffffffff16146118e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118da9061367a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194a9061353a565b60405180910390fd5b61195c8161225f565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611a9c826120c5565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611ac36119d7565b73ffffffffffffffffffffffffffffffffffffffff161480611b1f5750611ae86119d7565b73ffffffffffffffffffffffffffffffffffffffff16611b07846108d0565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b3b5750611b3a8260000151611b356119d7565b6117d3565b5b905080611b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b74906136da565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be69061365a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c569061359a565b60405180910390fd5b611c6c85858560016125ac565b611c7c60008484600001516119df565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611f6157611ec0816119c9565b15611f605782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611fca85858560016125b2565b5050505050565b80471015612014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200b906135da565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161203a90613481565b60006040518083038185875af1925050503d8060008114612077576040519150601f19603f3d011682016040523d82523d6000602084013e61207c565b606091505b50509050806120c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b7906135ba565b60405180910390fd5b505050565b6120cd612be5565b6120d6826119c9565b612115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210c9061355a565b60405180910390fd5b60008290505b6000811061221e576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461220f57809250505061225a565b5080806001900391505061211b565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612251906137ba565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836123319190613991565b905092915050565b60008183612347919061390a565b905092915050565b6123698282604051806020016040528060008152506125b8565b5050565b600061238e8473ffffffffffffffffffffffffffffffffffffffff166125ca565b156124f7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026123b76119d7565b8786866040518563ffffffff1660e01b81526004016123d994939291906134b1565b602060405180830381600087803b1580156123f357600080fd5b505af192505050801561242457506040513d601f19601f820116820180604052508101906124219190612fa2565b60015b6124a7573d8060008114612454576040519150601f19603f3d011682016040523d82523d6000602084013e612459565b606091505b5060008151141561249f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124969061371a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506124fc565b600190505b949350505050565b606061250f826119c9565b61254e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125459061369a565b60405180910390fd5b60006125586125ed565b905060008151141561257957604051806020016040528060008152506125a4565b806125838461267f565b60405160200161259492919061345d565b6040516020818303038152906040525b915050919050565b50505050565b50505050565b6125c583838360016127e0565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6060600d80546125fc90613a7b565b80601f016020809104026020016040519081016040528092919081815260200182805461262890613a7b565b80156126755780601f1061264a57610100808354040283529160200191612675565b820191906000526020600020905b81548152906001019060200180831161265857829003601f168201915b5050505050905090565b606060008214156126c7576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127db565b600082905060005b600082146126f95780806126e290613ade565b915050600a826126f29190613960565b91506126cf565b60008167ffffffffffffffff81111561271557612714613c14565b5b6040519080825280601f01601f1916602001820160405280156127475781602001600182028036833780820191505090505b5090505b600085146127d4576001826127609190613991565b9150600a8561276f9190613b27565b603061277b919061390a565b60f81b81838151811061279157612790613be5565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127cd9190613960565b945061274b565b8093505050505b919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284e9061375a565b60405180910390fd5b600084141561289b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128929061377a565b60405180910390fd5b6128a860008683876125ac565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015612b4257818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315612b2d57612aed600088848861236d565b612b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b239061371a565b60405180910390fd5b5b81806001019250508080600101915050612a76565b508060018190555050612b5860008683876125b2565b5050505050565b828054612b6b90613a7b565b90600052602060002090601f016020900481019282612b8d5760008555612bd4565b82601f10612ba657805160ff1916838001178555612bd4565b82800160010185558215612bd4579182015b82811115612bd3578251825591602001919060010190612bb8565b5b509050612be19190612c1f565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612c38576000816000905550600101612c20565b5090565b6000612c4f612c4a8461385a565b613835565b905082815260208101848484011115612c6b57612c6a613c48565b5b612c76848285613a39565b509392505050565b6000612c91612c8c8461388b565b613835565b905082815260208101848484011115612cad57612cac613c48565b5b612cb8848285613a39565b509392505050565b600081359050612ccf81614254565b92915050565b600081359050612ce48161426b565b92915050565b600081359050612cf981614282565b92915050565b600081519050612d0e81614282565b92915050565b600082601f830112612d2957612d28613c43565b5b8135612d39848260208601612c3c565b91505092915050565b600082601f830112612d5757612d56613c43565b5b8135612d67848260208601612c7e565b91505092915050565b600081359050612d7f81614299565b92915050565b600060208284031215612d9b57612d9a613c52565b5b6000612da984828501612cc0565b91505092915050565b60008060408385031215612dc957612dc8613c52565b5b6000612dd785828601612cc0565b9250506020612de885828601612cc0565b9150509250929050565b600080600060608486031215612e0b57612e0a613c52565b5b6000612e1986828701612cc0565b9350506020612e2a86828701612cc0565b9250506040612e3b86828701612d70565b9150509250925092565b60008060008060808587031215612e5f57612e5e613c52565b5b6000612e6d87828801612cc0565b9450506020612e7e87828801612cc0565b9350506040612e8f87828801612d70565b925050606085013567ffffffffffffffff811115612eb057612eaf613c4d565b5b612ebc87828801612d14565b91505092959194509250565b60008060408385031215612edf57612ede613c52565b5b6000612eed85828601612cc0565b9250506020612efe85828601612cd5565b9150509250929050565b60008060408385031215612f1f57612f1e613c52565b5b6000612f2d85828601612cc0565b9250506020612f3e85828601612d70565b9150509250929050565b600060208284031215612f5e57612f5d613c52565b5b6000612f6c84828501612cd5565b91505092915050565b600060208284031215612f8b57612f8a613c52565b5b6000612f9984828501612cea565b91505092915050565b600060208284031215612fb857612fb7613c52565b5b6000612fc684828501612cff565b91505092915050565b600060208284031215612fe557612fe4613c52565b5b600082013567ffffffffffffffff81111561300357613002613c4d565b5b61300f84828501612d42565b91505092915050565b60006020828403121561302e5761302d613c52565b5b600061303c84828501612d70565b91505092915050565b61304e816139c5565b82525050565b61305d816139d7565b82525050565b600061306e826138bc565b61307881856138d2565b9350613088818560208601613a48565b61309181613c57565b840191505092915050565b60006130a7826138c7565b6130b181856138ee565b93506130c1818560208601613a48565b6130ca81613c57565b840191505092915050565b60006130e0826138c7565b6130ea81856138ff565b93506130fa818560208601613a48565b80840191505092915050565b60006131136026836138ee565b915061311e82613c68565b604082019050919050565b6000613136602a836138ee565b915061314182613cb7565b604082019050919050565b6000613159600a836138ee565b915061316482613d06565b602082019050919050565b600061317c6025836138ee565b915061318782613d2f565b604082019050919050565b600061319f603a836138ee565b91506131aa82613d7e565b604082019050919050565b60006131c2601d836138ee565b91506131cd82613dcd565b602082019050919050565b60006131e5600f836138ee565b91506131f082613df6565b602082019050919050565b60006132086039836138ee565b915061321382613e1f565b604082019050919050565b600061322b602b836138ee565b915061323682613e6e565b604082019050919050565b600061324e6026836138ee565b915061325982613ebd565b604082019050919050565b60006132716020836138ee565b915061327c82613f0c565b602082019050919050565b6000613294602f836138ee565b915061329f82613f35565b604082019050919050565b60006132b7601a836138ee565b91506132c282613f84565b602082019050919050565b60006132da6032836138ee565b91506132e582613fad565b604082019050919050565b60006132fd6022836138ee565b915061330882613ffc565b604082019050919050565b60006133206000836138e3565b915061332b8261404b565b600082019050919050565b60006133436033836138ee565b915061334e8261404e565b604082019050919050565b6000613366600a836138ee565b91506133718261409d565b602082019050919050565b60006133896021836138ee565b9150613394826140c6565b604082019050919050565b60006133ac6028836138ee565b91506133b782614115565b604082019050919050565b60006133cf601f836138ee565b91506133da82614164565b602082019050919050565b60006133f2602f836138ee565b91506133fd8261418d565b604082019050919050565b6000613415602d836138ee565b9150613420826141dc565b604082019050919050565b6000613438600e836138ee565b91506134438261422b565b602082019050919050565b61345781613a2f565b82525050565b600061346982856130d5565b915061347582846130d5565b91508190509392505050565b600061348c82613313565b9150819050919050565b60006020820190506134ab6000830184613045565b92915050565b60006080820190506134c66000830187613045565b6134d36020830186613045565b6134e0604083018561344e565b81810360608301526134f28184613063565b905095945050505050565b60006020820190506135126000830184613054565b92915050565b60006020820190508181036000830152613532818461309c565b905092915050565b6000602082019050818103600083015261355381613106565b9050919050565b6000602082019050818103600083015261357381613129565b9050919050565b600060208201905081810360008301526135938161314c565b9050919050565b600060208201905081810360008301526135b38161316f565b9050919050565b600060208201905081810360008301526135d381613192565b9050919050565b600060208201905081810360008301526135f3816131b5565b9050919050565b60006020820190508181036000830152613613816131d8565b9050919050565b60006020820190508181036000830152613633816131fb565b9050919050565b600060208201905081810360008301526136538161321e565b9050919050565b6000602082019050818103600083015261367381613241565b9050919050565b6000602082019050818103600083015261369381613264565b9050919050565b600060208201905081810360008301526136b381613287565b9050919050565b600060208201905081810360008301526136d3816132aa565b9050919050565b600060208201905081810360008301526136f3816132cd565b9050919050565b60006020820190508181036000830152613713816132f0565b9050919050565b6000602082019050818103600083015261373381613336565b9050919050565b6000602082019050818103600083015261375381613359565b9050919050565b600060208201905081810360008301526137738161337c565b9050919050565b600060208201905081810360008301526137938161339f565b9050919050565b600060208201905081810360008301526137b3816133c2565b9050919050565b600060208201905081810360008301526137d3816133e5565b9050919050565b600060208201905081810360008301526137f381613408565b9050919050565b600060208201905081810360008301526138138161342b565b9050919050565b600060208201905061382f600083018461344e565b92915050565b600061383f613850565b905061384b8282613aad565b919050565b6000604051905090565b600067ffffffffffffffff82111561387557613874613c14565b5b61387e82613c57565b9050602081019050919050565b600067ffffffffffffffff8211156138a6576138a5613c14565b5b6138af82613c57565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061391582613a2f565b915061392083613a2f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561395557613954613b58565b5b828201905092915050565b600061396b82613a2f565b915061397683613a2f565b92508261398657613985613b87565b5b828204905092915050565b600061399c82613a2f565b91506139a783613a2f565b9250828210156139ba576139b9613b58565b5b828203905092915050565b60006139d082613a0f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613a66578082015181840152602081019050613a4b565b83811115613a75576000848401525b50505050565b60006002820490506001821680613a9357607f821691505b60208210811415613aa757613aa6613bb6565b5b50919050565b613ab682613c57565b810181811067ffffffffffffffff82111715613ad557613ad4613c14565b5b80604052505050565b6000613ae982613a2f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b1c57613b1b613b58565b5b600182019050919050565b6000613b3282613a2f565b9150613b3d83613a2f565b925082613b4d57613b4c613b87565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f6e6f742061637469766500000000000000000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f6e6f7420656e6f756768206e6674730000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f7a65726f20636f756e7400000000000000000000000000000000000000000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f616c7265616479206d696e746564000000000000000000000000000000000000600082015250565b61425d816139c5565b811461426857600080fd5b50565b614274816139d7565b811461427f57600080fd5b50565b61428b816139e3565b811461429657600080fd5b50565b6142a281613a2f565b81146142ad57600080fd5b5056fea2646970667358221220883329861c8e0046a32d2d3a9b035d4ebd73c1e1d1428658133f003dd7542fc464736f6c63430008070033

Deployed Bytecode

0x6080604052600436106101e75760003560e01c8063715018a611610102578063a45ba8e711610095578063c87b56dd11610064578063c87b56dd14610690578063e0a80853146106cd578063e985e9c5146106f6578063f2fde38b14610733576101ee565b8063a45ba8e7146105fa578063b0d1643d14610625578063b66a0e5d14610650578063b88d4fde14610667576101ee565b806395d89b41116100d157806395d89b411461055f578063a035b1fe1461058a578063a0712d68146105b5578063a22cb465146105d1576101ee565b8063715018a6146104cb5780638da5cb5b146104e25780638ef79e911461050d57806391b7f5ed14610536576101ee565b806332cb6b0c1161017a5780634fdd43cb116101495780634fdd43cb146103fd57806351830227146104265780636352211e1461045157806370a082311461048e576101ee565b806332cb6b0c1461037b578063380d831b146103a65780633ccfd60b146103bd57806342842e0e146103d4576101ee565b80631300c014116101b65780631300c014146102c157806318160ddd146102ea5780631e7269c51461031557806323b872dd14610352576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298576101ee565b366101ee57005b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190612f75565b61075c565b60405161022791906134fd565b60405180910390f35b34801561023c57600080fd5b5061024561083e565b6040516102529190613518565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190613018565b6108d0565b60405161028f9190613496565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba9190612f08565b610955565b005b3480156102cd57600080fd5b506102e860048036038101906102e39190613018565b610a6e565b005b3480156102f657600080fd5b506102ff610af4565b60405161030c919061381a565b60405180910390f35b34801561032157600080fd5b5061033c60048036038101906103379190612d85565b610afe565b604051610349919061381a565b60405180910390f35b34801561035e57600080fd5b5061037960048036038101906103749190612df2565b610b16565b005b34801561038757600080fd5b50610390610b26565b60405161039d919061381a565b60405180910390f35b3480156103b257600080fd5b506103bb610b2c565b005b3480156103c957600080fd5b506103d2610bc5565b005b3480156103e057600080fd5b506103fb60048036038101906103f69190612df2565b610cb0565b005b34801561040957600080fd5b50610424600480360381019061041f9190612fcf565b610cd0565b005b34801561043257600080fd5b5061043b610d66565b60405161044891906134fd565b60405180910390f35b34801561045d57600080fd5b5061047860048036038101906104739190613018565b610d79565b6040516104859190613496565b60405180910390f35b34801561049a57600080fd5b506104b560048036038101906104b09190612d85565b610d8f565b6040516104c2919061381a565b60405180910390f35b3480156104d757600080fd5b506104e0610e78565b005b3480156104ee57600080fd5b506104f7610f00565b6040516105049190613496565b60405180910390f35b34801561051957600080fd5b50610534600480360381019061052f9190612fcf565b610f29565b005b34801561054257600080fd5b5061055d60048036038101906105589190613018565b610fbf565b005b34801561056b57600080fd5b50610574611045565b6040516105819190613518565b60405180910390f35b34801561059657600080fd5b5061059f6110d7565b6040516105ac919061381a565b60405180910390f35b6105cf60048036038101906105ca9190613018565b6110dd565b005b3480156105dd57600080fd5b506105f860048036038101906105f39190612ec8565b61136f565b005b34801561060657600080fd5b5061060f6114f0565b60405161061c9190613518565b60405180910390f35b34801561063157600080fd5b5061063a61157e565b604051610647919061381a565b60405180910390f35b34801561065c57600080fd5b50610665611584565b005b34801561067357600080fd5b5061068e60048036038101906106899190612e45565b61161d565b005b34801561069c57600080fd5b506106b760048036038101906106b29190613018565b611679565b6040516106c49190613518565b60405180910390f35b3480156106d957600080fd5b506106f460048036038101906106ef9190612f48565b61173a565b005b34801561070257600080fd5b5061071d60048036038101906107189190612db2565b6117d3565b60405161072a91906134fd565b60405180910390f35b34801561073f57600080fd5b5061075a60048036038101906107559190612d85565b611867565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061082757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061083757506108368261195f565b5b9050919050565b60606002805461084d90613a7b565b80601f016020809104026020016040519081016040528092919081815260200182805461087990613a7b565b80156108c65780601f1061089b576101008083540402835291602001916108c6565b820191906000526020600020905b8154815290600101906020018083116108a957829003601f168201915b5050505050905090565b60006108db826119c9565b61091a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610911906137da565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061096082610d79565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c8906136fa565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109f06119d7565b73ffffffffffffffffffffffffffffffffffffffff161480610a1f5750610a1e81610a196119d7565b6117d3565b5b610a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a559061361a565b60405180910390fd5b610a698383836119df565b505050565b610a766119d7565b73ffffffffffffffffffffffffffffffffffffffff16610a94610f00565b73ffffffffffffffffffffffffffffffffffffffff1614610aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae19061367a565b60405180910390fd5b80600a8190555050565b6000600154905090565b600e6020528060005260406000206000915090505481565b610b21838383611a91565b505050565b61271081565b610b346119d7565b73ffffffffffffffffffffffffffffffffffffffff16610b52610f00565b73ffffffffffffffffffffffffffffffffffffffff1614610ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9f9061367a565b60405180910390fd5b6000600960006101000a81548160ff021916908315150217905550565b610bcd6119d7565b73ffffffffffffffffffffffffffffffffffffffff16610beb610f00565b73ffffffffffffffffffffffffffffffffffffffff1614610c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c389061367a565b60405180910390fd5b60026008541415610c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7e9061379a565b60405180910390fd5b60026008819055506000479050610ca5610c9f610f00565b82611fd1565b506001600881905550565b610ccb8383836040518060200160405280600081525061161d565b505050565b610cd86119d7565b73ffffffffffffffffffffffffffffffffffffffff16610cf6610f00565b73ffffffffffffffffffffffffffffffffffffffff1614610d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d439061367a565b60405180910390fd5b80600c9080519060200190610d62929190612b5f565b5050565b600960019054906101000a900460ff1681565b6000610d84826120c5565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df79061363a565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b610e806119d7565b73ffffffffffffffffffffffffffffffffffffffff16610e9e610f00565b73ffffffffffffffffffffffffffffffffffffffff1614610ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eeb9061367a565b60405180910390fd5b610efe600061225f565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610f316119d7565b73ffffffffffffffffffffffffffffffffffffffff16610f4f610f00565b73ffffffffffffffffffffffffffffffffffffffff1614610fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9c9061367a565b60405180910390fd5b80600d9080519060200190610fbb929190612b5f565b5050565b610fc76119d7565b73ffffffffffffffffffffffffffffffffffffffff16610fe5610f00565b73ffffffffffffffffffffffffffffffffffffffff161461103b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110329061367a565b60405180910390fd5b80600b8190555050565b60606003805461105490613a7b565b80601f016020809104026020016040519081016040528092919081815260200182805461108090613a7b565b80156110cd5780601f106110a2576101008083540402835291602001916110cd565b820191906000526020600020905b8154815290600101906020018083116110b057829003601f168201915b5050505050905090565b600b5481565b600960009054906101000a900460ff16801561110157506127106110ff610af4565b105b611140576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111379061357a565b60405180910390fd5b60026008541415611186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117d9061379a565b60405180910390fd5b6002600881905550600081116111d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c89061373a565b60405180910390fd5b6111ed6111dc610af4565b61271061232390919063ffffffff16565b81111561122f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611226906135fa565b60405180910390fd5b600a54611284600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361233990919063ffffffff16565b11156112c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bc906137fa565b60405180910390fd5b61131781600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461233990919063ffffffff16565b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611364338261234f565b600160088190555050565b6113776119d7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113dc906136ba565b60405180910390fd5b80600760006113f26119d7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661149f6119d7565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114e491906134fd565b60405180910390a35050565b600c80546114fd90613a7b565b80601f016020809104026020016040519081016040528092919081815260200182805461152990613a7b565b80156115765780601f1061154b57610100808354040283529160200191611576565b820191906000526020600020905b81548152906001019060200180831161155957829003601f168201915b505050505081565b600a5481565b61158c6119d7565b73ffffffffffffffffffffffffffffffffffffffff166115aa610f00565b73ffffffffffffffffffffffffffffffffffffffff1614611600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f79061367a565b60405180910390fd5b6001600960006101000a81548160ff021916908315150217905550565b611628848484611a91565b6116348484848461236d565b611673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166a9061371a565b60405180910390fd5b50505050565b606060001515600960019054906101000a900460ff161515141561172957600c80546116a490613a7b565b80601f01602080910402602001604051908101604052809291908181526020018280546116d090613a7b565b801561171d5780601f106116f25761010080835404028352916020019161171d565b820191906000526020600020905b81548152906001019060200180831161170057829003601f168201915b50505050509050611735565b61173282612504565b90505b919050565b6117426119d7565b73ffffffffffffffffffffffffffffffffffffffff16611760610f00565b73ffffffffffffffffffffffffffffffffffffffff16146117b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ad9061367a565b60405180910390fd5b80600960016101000a81548160ff02191690831515021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61186f6119d7565b73ffffffffffffffffffffffffffffffffffffffff1661188d610f00565b73ffffffffffffffffffffffffffffffffffffffff16146118e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118da9061367a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194a9061353a565b60405180910390fd5b61195c8161225f565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611a9c826120c5565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611ac36119d7565b73ffffffffffffffffffffffffffffffffffffffff161480611b1f5750611ae86119d7565b73ffffffffffffffffffffffffffffffffffffffff16611b07846108d0565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b3b5750611b3a8260000151611b356119d7565b6117d3565b5b905080611b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b74906136da565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be69061365a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c569061359a565b60405180910390fd5b611c6c85858560016125ac565b611c7c60008484600001516119df565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611f6157611ec0816119c9565b15611f605782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611fca85858560016125b2565b5050505050565b80471015612014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200b906135da565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161203a90613481565b60006040518083038185875af1925050503d8060008114612077576040519150601f19603f3d011682016040523d82523d6000602084013e61207c565b606091505b50509050806120c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b7906135ba565b60405180910390fd5b505050565b6120cd612be5565b6120d6826119c9565b612115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210c9061355a565b60405180910390fd5b60008290505b6000811061221e576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461220f57809250505061225a565b5080806001900391505061211b565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612251906137ba565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836123319190613991565b905092915050565b60008183612347919061390a565b905092915050565b6123698282604051806020016040528060008152506125b8565b5050565b600061238e8473ffffffffffffffffffffffffffffffffffffffff166125ca565b156124f7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026123b76119d7565b8786866040518563ffffffff1660e01b81526004016123d994939291906134b1565b602060405180830381600087803b1580156123f357600080fd5b505af192505050801561242457506040513d601f19601f820116820180604052508101906124219190612fa2565b60015b6124a7573d8060008114612454576040519150601f19603f3d011682016040523d82523d6000602084013e612459565b606091505b5060008151141561249f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124969061371a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506124fc565b600190505b949350505050565b606061250f826119c9565b61254e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125459061369a565b60405180910390fd5b60006125586125ed565b905060008151141561257957604051806020016040528060008152506125a4565b806125838461267f565b60405160200161259492919061345d565b6040516020818303038152906040525b915050919050565b50505050565b50505050565b6125c583838360016127e0565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6060600d80546125fc90613a7b565b80601f016020809104026020016040519081016040528092919081815260200182805461262890613a7b565b80156126755780601f1061264a57610100808354040283529160200191612675565b820191906000526020600020905b81548152906001019060200180831161265857829003601f168201915b5050505050905090565b606060008214156126c7576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127db565b600082905060005b600082146126f95780806126e290613ade565b915050600a826126f29190613960565b91506126cf565b60008167ffffffffffffffff81111561271557612714613c14565b5b6040519080825280601f01601f1916602001820160405280156127475781602001600182028036833780820191505090505b5090505b600085146127d4576001826127609190613991565b9150600a8561276f9190613b27565b603061277b919061390a565b60f81b81838151811061279157612790613be5565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127cd9190613960565b945061274b565b8093505050505b919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284e9061375a565b60405180910390fd5b600084141561289b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128929061377a565b60405180910390fd5b6128a860008683876125ac565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015612b4257818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315612b2d57612aed600088848861236d565b612b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b239061371a565b60405180910390fd5b5b81806001019250508080600101915050612a76565b508060018190555050612b5860008683876125b2565b5050505050565b828054612b6b90613a7b565b90600052602060002090601f016020900481019282612b8d5760008555612bd4565b82601f10612ba657805160ff1916838001178555612bd4565b82800160010185558215612bd4579182015b82811115612bd3578251825591602001919060010190612bb8565b5b509050612be19190612c1f565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612c38576000816000905550600101612c20565b5090565b6000612c4f612c4a8461385a565b613835565b905082815260208101848484011115612c6b57612c6a613c48565b5b612c76848285613a39565b509392505050565b6000612c91612c8c8461388b565b613835565b905082815260208101848484011115612cad57612cac613c48565b5b612cb8848285613a39565b509392505050565b600081359050612ccf81614254565b92915050565b600081359050612ce48161426b565b92915050565b600081359050612cf981614282565b92915050565b600081519050612d0e81614282565b92915050565b600082601f830112612d2957612d28613c43565b5b8135612d39848260208601612c3c565b91505092915050565b600082601f830112612d5757612d56613c43565b5b8135612d67848260208601612c7e565b91505092915050565b600081359050612d7f81614299565b92915050565b600060208284031215612d9b57612d9a613c52565b5b6000612da984828501612cc0565b91505092915050565b60008060408385031215612dc957612dc8613c52565b5b6000612dd785828601612cc0565b9250506020612de885828601612cc0565b9150509250929050565b600080600060608486031215612e0b57612e0a613c52565b5b6000612e1986828701612cc0565b9350506020612e2a86828701612cc0565b9250506040612e3b86828701612d70565b9150509250925092565b60008060008060808587031215612e5f57612e5e613c52565b5b6000612e6d87828801612cc0565b9450506020612e7e87828801612cc0565b9350506040612e8f87828801612d70565b925050606085013567ffffffffffffffff811115612eb057612eaf613c4d565b5b612ebc87828801612d14565b91505092959194509250565b60008060408385031215612edf57612ede613c52565b5b6000612eed85828601612cc0565b9250506020612efe85828601612cd5565b9150509250929050565b60008060408385031215612f1f57612f1e613c52565b5b6000612f2d85828601612cc0565b9250506020612f3e85828601612d70565b9150509250929050565b600060208284031215612f5e57612f5d613c52565b5b6000612f6c84828501612cd5565b91505092915050565b600060208284031215612f8b57612f8a613c52565b5b6000612f9984828501612cea565b91505092915050565b600060208284031215612fb857612fb7613c52565b5b6000612fc684828501612cff565b91505092915050565b600060208284031215612fe557612fe4613c52565b5b600082013567ffffffffffffffff81111561300357613002613c4d565b5b61300f84828501612d42565b91505092915050565b60006020828403121561302e5761302d613c52565b5b600061303c84828501612d70565b91505092915050565b61304e816139c5565b82525050565b61305d816139d7565b82525050565b600061306e826138bc565b61307881856138d2565b9350613088818560208601613a48565b61309181613c57565b840191505092915050565b60006130a7826138c7565b6130b181856138ee565b93506130c1818560208601613a48565b6130ca81613c57565b840191505092915050565b60006130e0826138c7565b6130ea81856138ff565b93506130fa818560208601613a48565b80840191505092915050565b60006131136026836138ee565b915061311e82613c68565b604082019050919050565b6000613136602a836138ee565b915061314182613cb7565b604082019050919050565b6000613159600a836138ee565b915061316482613d06565b602082019050919050565b600061317c6025836138ee565b915061318782613d2f565b604082019050919050565b600061319f603a836138ee565b91506131aa82613d7e565b604082019050919050565b60006131c2601d836138ee565b91506131cd82613dcd565b602082019050919050565b60006131e5600f836138ee565b91506131f082613df6565b602082019050919050565b60006132086039836138ee565b915061321382613e1f565b604082019050919050565b600061322b602b836138ee565b915061323682613e6e565b604082019050919050565b600061324e6026836138ee565b915061325982613ebd565b604082019050919050565b60006132716020836138ee565b915061327c82613f0c565b602082019050919050565b6000613294602f836138ee565b915061329f82613f35565b604082019050919050565b60006132b7601a836138ee565b91506132c282613f84565b602082019050919050565b60006132da6032836138ee565b91506132e582613fad565b604082019050919050565b60006132fd6022836138ee565b915061330882613ffc565b604082019050919050565b60006133206000836138e3565b915061332b8261404b565b600082019050919050565b60006133436033836138ee565b915061334e8261404e565b604082019050919050565b6000613366600a836138ee565b91506133718261409d565b602082019050919050565b60006133896021836138ee565b9150613394826140c6565b604082019050919050565b60006133ac6028836138ee565b91506133b782614115565b604082019050919050565b60006133cf601f836138ee565b91506133da82614164565b602082019050919050565b60006133f2602f836138ee565b91506133fd8261418d565b604082019050919050565b6000613415602d836138ee565b9150613420826141dc565b604082019050919050565b6000613438600e836138ee565b91506134438261422b565b602082019050919050565b61345781613a2f565b82525050565b600061346982856130d5565b915061347582846130d5565b91508190509392505050565b600061348c82613313565b9150819050919050565b60006020820190506134ab6000830184613045565b92915050565b60006080820190506134c66000830187613045565b6134d36020830186613045565b6134e0604083018561344e565b81810360608301526134f28184613063565b905095945050505050565b60006020820190506135126000830184613054565b92915050565b60006020820190508181036000830152613532818461309c565b905092915050565b6000602082019050818103600083015261355381613106565b9050919050565b6000602082019050818103600083015261357381613129565b9050919050565b600060208201905081810360008301526135938161314c565b9050919050565b600060208201905081810360008301526135b38161316f565b9050919050565b600060208201905081810360008301526135d381613192565b9050919050565b600060208201905081810360008301526135f3816131b5565b9050919050565b60006020820190508181036000830152613613816131d8565b9050919050565b60006020820190508181036000830152613633816131fb565b9050919050565b600060208201905081810360008301526136538161321e565b9050919050565b6000602082019050818103600083015261367381613241565b9050919050565b6000602082019050818103600083015261369381613264565b9050919050565b600060208201905081810360008301526136b381613287565b9050919050565b600060208201905081810360008301526136d3816132aa565b9050919050565b600060208201905081810360008301526136f3816132cd565b9050919050565b60006020820190508181036000830152613713816132f0565b9050919050565b6000602082019050818103600083015261373381613336565b9050919050565b6000602082019050818103600083015261375381613359565b9050919050565b600060208201905081810360008301526137738161337c565b9050919050565b600060208201905081810360008301526137938161339f565b9050919050565b600060208201905081810360008301526137b3816133c2565b9050919050565b600060208201905081810360008301526137d3816133e5565b9050919050565b600060208201905081810360008301526137f381613408565b9050919050565b600060208201905081810360008301526138138161342b565b9050919050565b600060208201905061382f600083018461344e565b92915050565b600061383f613850565b905061384b8282613aad565b919050565b6000604051905090565b600067ffffffffffffffff82111561387557613874613c14565b5b61387e82613c57565b9050602081019050919050565b600067ffffffffffffffff8211156138a6576138a5613c14565b5b6138af82613c57565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061391582613a2f565b915061392083613a2f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561395557613954613b58565b5b828201905092915050565b600061396b82613a2f565b915061397683613a2f565b92508261398657613985613b87565b5b828204905092915050565b600061399c82613a2f565b91506139a783613a2f565b9250828210156139ba576139b9613b58565b5b828203905092915050565b60006139d082613a0f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613a66578082015181840152602081019050613a4b565b83811115613a75576000848401525b50505050565b60006002820490506001821680613a9357607f821691505b60208210811415613aa757613aa6613bb6565b5b50919050565b613ab682613c57565b810181811067ffffffffffffffff82111715613ad557613ad4613c14565b5b80604052505050565b6000613ae982613a2f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b1c57613b1b613b58565b5b600182019050919050565b6000613b3282613a2f565b9150613b3d83613a2f565b925082613b4d57613b4c613b87565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f6e6f742061637469766500000000000000000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f6e6f7420656e6f756768206e6674730000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f7a65726f20636f756e7400000000000000000000000000000000000000000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f616c7265616479206d696e746564000000000000000000000000000000000000600082015250565b61425d816139c5565b811461426857600080fd5b50565b614274816139d7565b811461427f57600080fd5b50565b61428b816139e3565b811461429657600080fd5b50565b6142a281613a2f565b81146142ad57600080fd5b5056fea2646970667358221220883329861c8e0046a32d2d3a9b035d4ebd73c1e1d1428658133f003dd7542fc464736f6c63430008070033

Deployed Bytecode Sourcemap

47344:2592:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34446:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36221:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37783:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37304:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49506:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34283:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47742:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38659:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47519:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49232:74;;;;;;;;;;;;;:::i;:::-;;49731:165;;;;;;;;;;;;;:::i;:::-;;38892:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48446:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47482:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36030:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34803:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2589:103;;;;;;;;;;;;;:::i;:::-;;1938:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49622:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49412:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36390:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47621:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47983:455;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38069:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47660:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47570:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49149:75;;;;;;;;;;;;;:::i;:::-;;39140:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48706:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49316:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38428:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2847:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34446:293;34548:4;34596:25;34581:40;;;:11;:40;;;;:101;;;;34649:33;34634:48;;;:11;:48;;;;34581:101;:150;;;;34695:36;34719:11;34695:23;:36::i;:::-;34581:150;34565:166;;34446:293;;;:::o;36221:100::-;36275:13;36308:5;36301:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36221:100;:::o;37783:214::-;37851:7;37879:16;37887:7;37879;:16::i;:::-;37871:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;37965:15;:24;37981:7;37965:24;;;;;;;;;;;;;;;;;;;;;37958:31;;37783:214;;;:::o;37304:413::-;37377:13;37393:24;37409:7;37393:15;:24::i;:::-;37377:40;;37442:5;37436:11;;:2;:11;;;;37428:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;37537:5;37521:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;37546:37;37563:5;37570:12;:10;:12::i;:::-;37546:16;:37::i;:::-;37521:62;37499:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;37681:28;37690:2;37694:7;37703:5;37681:8;:28::i;:::-;37366:351;37304:413;;:::o;49506:108::-;2169:12;:10;:12::i;:::-;2158:23;;:7;:5;:7::i;:::-;:23;;;2150:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49600:6:::1;49579:18;:27;;;;49506:108:::0;:::o;34283:91::-;34327:7;34354:12;;34347:19;;34283:91;:::o;47742:41::-;;;;;;;;;;;;;;;;;:::o;38659:162::-;38785:28;38795:4;38801:2;38805:7;38785:9;:28::i;:::-;38659:162;;;:::o;47519:42::-;47556:5;47519:42;:::o;49232:74::-;2169:12;:10;:12::i;:::-;2158:23;;:7;:5;:7::i;:::-;:23;;;2150:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49293:5:::1;49281:9;;:17;;;;;;;;;;;;;;;;;;49232:74::o:0;49731:165::-;2169:12;:10;:12::i;:::-;2158:23;;:7;:5;:7::i;:::-;:23;;;2150:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18083:1:::1;18681:7;;:19;;18673:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;18083:1;18814:7;:18;;;;49794:15:::2;49812:21;49794:39;;49844:44;49870:7;:5;:7::i;:::-;49880;49844:17;:44::i;:::-;49783:113;18039:1:::1;18993:7;:22;;;;49731:165::o:0;38892:177::-;39022:39;39039:4;39045:2;39049:7;39022:39;;;;;;;;;;;;:16;:39::i;:::-;38892:177;;;:::o;48446:138::-;2169:12;:10;:12::i;:::-;2158:23;;:7;:5;:7::i;:::-;:23;;;2150:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48558:18:::1;48538:17;:38;;;;;;;;;;;;:::i;:::-;;48446:138:::0;:::o;47482:28::-;;;;;;;;;;;;;:::o;36030:124::-;36094:7;36121:20;36133:7;36121:11;:20::i;:::-;:25;;;36114:32;;36030:124;;;:::o;34803:221::-;34867:7;34912:1;34895:19;;:5;:19;;;;34887:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;34988:12;:19;35001:5;34988:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;34980:36;;34973:43;;34803:221;;;:::o;2589:103::-;2169:12;:10;:12::i;:::-;2158:23;;:7;:5;:7::i;:::-;:23;;;2150:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2654:30:::1;2681:1;2654:18;:30::i;:::-;2589:103::o:0;1938:87::-;1984:7;2011:6;;;;;;;;;;;2004:13;;1938:87;:::o;49622:101::-;2169:12;:10;:12::i;:::-;2158:23;;:7;:5;:7::i;:::-;:23;;;2150:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49712:3:::1;49696:13;:19;;;;;;;;;;;;:::i;:::-;;49622:101:::0;:::o;49412:86::-;2169:12;:10;:12::i;:::-;2158:23;;:7;:5;:7::i;:::-;:23;;;2150:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49484:6:::1;49476:5;:14;;;;49412:86:::0;:::o;36390:104::-;36446:13;36479:7;36472:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36390:104;:::o;47621:30::-;;;;:::o;47983:455::-;47833:9;;;;;;;;;;;:39;;;;;47556:5;47846:13;:11;:13::i;:::-;:26;47833:39;47825:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;18083:1:::1;18681:7;;:19;;18673:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;18083:1;18814:7;:18;;;;48100:1:::2;48083:14;:18;48075:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;48153:29;48168:13;:11;:13::i;:::-;47556:5;48153:14;;:29;;;;:::i;:::-;48135:14;:47;;48127:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;48263:18;;48221:38;48240:6;:18;48247:10;48240:18;;;;;;;;;;;;;;;;48221:14;:18;;:38;;;;:::i;:::-;:60;;48213:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;48342:38;48365:14;48342:6;:18;48349:10;48342:18;;;;;;;;;;;;;;;;:22;;:38;;;;:::i;:::-;48321:6;:18;48328:10;48321:18;;;;;;;;;;;;;;;:59;;;;48393:37;48403:10;48415:14;48393:9;:37::i;:::-;18039:1:::1;18993:7;:22;;;;47983:455:::0;:::o;38069:288::-;38176:12;:10;:12::i;:::-;38164:24;;:8;:24;;;;38156:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;38277:8;38232:18;:32;38251:12;:10;:12::i;:::-;38232:32;;;;;;;;;;;;;;;:42;38265:8;38232:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;38330:8;38301:48;;38316:12;:10;:12::i;:::-;38301:48;;;38340:8;38301:48;;;;;;:::i;:::-;;;;;;;;38069:288;;:::o;47660:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47570:37::-;;;;:::o;49149:75::-;2169:12;:10;:12::i;:::-;2158:23;;:7;:5;:7::i;:::-;:23;;;2150:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49212:4:::1;49200:9;;:16;;;;;;;;;;;;;;;;;;49149:75::o:0;39140:355::-;39299:28;39309:4;39315:2;39319:7;39299:9;:28::i;:::-;39360:48;39383:4;39389:2;39393:7;39402:5;39360:22;:48::i;:::-;39338:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;39140:355;;;;:::o;48706:228::-;48780:13;48827:5;48815:17;;:8;;;;;;;;;;;:17;;;48811:75;;;48857:17;48850:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48811:75;48903:23;48918:7;48903:14;:23::i;:::-;48896:30;;48706:228;;;;:::o;49316:88::-;2169:12;:10;:12::i;:::-;2158:23;;:7;:5;:7::i;:::-;:23;;;2150:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49390:6:::1;49379:8;;:17;;;;;;;;;;;;;;;;;;49316:88:::0;:::o;38428:164::-;38525:4;38549:18;:25;38568:5;38549:25;;;;;;;;;;;;;;;:35;38575:8;38549:35;;;;;;;;;;;;;;;;;;;;;;;;;38542:42;;38428:164;;;;:::o;2847:201::-;2169:12;:10;:12::i;:::-;2158:23;;:7;:5;:7::i;:::-;:23;;;2150:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2956:1:::1;2936:22;;:8;:22;;;;2928:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3012:28;3031:8;3012:18;:28::i;:::-;2847:201:::0;:::o;32425:157::-;32510:4;32549:25;32534:40;;;:11;:40;;;;32527:47;;32425:157;;;:::o;39750:111::-;39807:4;39841:12;;39831:7;:22;39824:29;;39750:111;;;:::o;656:98::-;709:7;736:10;729:17;;656:98;:::o;44530:196::-;44672:2;44645:15;:24;44661:7;44645:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;44710:7;44706:2;44690:28;;44699:5;44690:28;;;;;;;;;;;;44530:196;;;:::o;42478:1934::-;42593:35;42631:20;42643:7;42631:11;:20::i;:::-;42593:58;;42664:22;42706:13;:18;;;42690:34;;:12;:10;:12::i;:::-;:34;;;:83;;;;42761:12;:10;:12::i;:::-;42737:36;;:20;42749:7;42737:11;:20::i;:::-;:36;;;42690:83;:146;;;;42786:50;42803:13;:18;;;42823:12;:10;:12::i;:::-;42786:16;:50::i;:::-;42690:146;42664:173;;42858:17;42850:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;42973:4;42951:26;;:13;:18;;;:26;;;42943:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;43053:1;43039:16;;:2;:16;;;;43031:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;43110:43;43132:4;43138:2;43142:7;43151:1;43110:21;:43::i;:::-;43218:49;43235:1;43239:7;43248:13;:18;;;43218:8;:49::i;:::-;43585:1;43555:12;:18;43568:4;43555:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43625:1;43597:12;:16;43610:2;43597:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43667:2;43639:11;:20;43651:7;43639:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;43725:15;43680:11;:20;43692:7;43680:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;43981:19;44013:1;44003:7;:11;43981:33;;44070:1;44029:43;;:11;:24;44041:11;44029:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;44025:275;;;44093:20;44101:11;44093:7;:20::i;:::-;44089:200;;;44166:13;:18;;;44134:11;:24;44146:11;44134:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;44245:13;:28;;;44203:11;:24;44215:11;44203:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;44089:200;44025:275;43534:773;44343:7;44339:2;44324:27;;44333:4;44324:27;;;;;;;;;;;;44362:42;44383:4;44389:2;44393:7;44402:1;44362:20;:42::i;:::-;42582:1830;;42478:1934;;;:::o;23413:317::-;23528:6;23503:21;:31;;23495:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23582:12;23600:9;:14;;23622:6;23600:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23581:52;;;23652:7;23644:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;23484:246;23413:317;;:::o;35463:505::-;35524:21;;:::i;:::-;35566:16;35574:7;35566;:16::i;:::-;35558:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;35664:12;35679:7;35664:22;;35659:225;35696:1;35688:4;:9;35659:225;;35722:31;35756:11;:17;35768:4;35756:17;;;;;;;;;;;35722:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35818:1;35792:28;;:9;:14;;;:28;;;35788:85;;35848:9;35841:16;;;;;;35788:85;35707:177;35699:6;;;;;;;;35659:225;;;;35903:57;;;;;;;;;;:::i;:::-;;;;;;;;35463:505;;;;:::o;3208:191::-;3282:16;3301:6;;;;;;;;;;;3282:25;;3327:8;3318:6;;:17;;;;;;;;;;;;;;;;;;3382:8;3351:40;;3372:8;3351:40;;;;;;;;;;;;3271:128;3208:191;:::o;6671:98::-;6729:7;6760:1;6756;:5;;;;:::i;:::-;6749:12;;6671:98;;;;:::o;6290:::-;6348:7;6379:1;6375;:5;;;;:::i;:::-;6368:12;;6290:98;;;;:::o;39869:104::-;39938:27;39948:2;39952:8;39938:27;;;;;;;;;;;;:9;:27::i;:::-;39869:104;;:::o;45291:804::-;45446:4;45467:15;:2;:13;;;:15::i;:::-;45463:625;;;45519:2;45503:36;;;45540:12;:10;:12::i;:::-;45554:4;45560:7;45569:5;45503:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;45499:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45766:1;45749:6;:13;:18;45745:273;;;45792:61;;;;;;;;;;:::i;:::-;;;;;;;;45745:273;45968:6;45962:13;45953:6;45949:2;45945:15;45938:38;45499:534;45636:45;;;45626:55;;;:6;:55;;;;45619:62;;;;;45463:625;46072:4;46065:11;;45291:804;;;;;;;:::o;36565:335::-;36638:13;36672:16;36680:7;36672;:16::i;:::-;36664:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;36753:21;36777:10;:8;:10::i;:::-;36753:34;;36830:1;36811:7;36805:21;:26;;:87;;;;;;;;;;;;;;;;;36858:7;36867:18;:7;:16;:18::i;:::-;36841:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;36805:87;36798:94;;;36565:335;;;:::o;46583:159::-;;;;;:::o;47154:158::-;;;;;:::o;40336:163::-;40459:32;40465:2;40469:8;40479:5;40486:4;40459:5;:32::i;:::-;40336:163;;;:::o;22152:326::-;22212:4;22469:1;22447:7;:19;;;:23;22440:30;;22152:326;;;:::o;48592:106::-;48644:13;48677;48670:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48592:106;:::o;29795:723::-;29851:13;30081:1;30072:5;:10;30068:53;;;30099:10;;;;;;;;;;;;;;;;;;;;;30068:53;30131:12;30146:5;30131:20;;30162:14;30187:78;30202:1;30194:4;:9;30187:78;;30220:8;;;;;:::i;:::-;;;;30251:2;30243:10;;;;;:::i;:::-;;;30187:78;;;30275:19;30307:6;30297:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30275:39;;30325:154;30341:1;30332:5;:10;30325:154;;30369:1;30359:11;;;;;:::i;:::-;;;30436:2;30428:5;:10;;;;:::i;:::-;30415:2;:24;;;;:::i;:::-;30402:39;;30385:6;30392;30385:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;30465:2;30456:11;;;;;:::i;:::-;;;30325:154;;;30503:6;30489:21;;;;;29795:723;;;;:::o;40758:1466::-;40897:20;40920:12;;40897:35;;40965:1;40951:16;;:2;:16;;;;40943:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;41036:1;41024:8;:13;;41016:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;41095:61;41125:1;41129:2;41133:12;41147:8;41095:21;:61::i;:::-;41462:8;41426:12;:16;41439:2;41426:16;;;;;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41523:8;41482:12;:16;41495:2;41482:16;;;;;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41578:2;41545:11;:25;41557:12;41545:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;41641:15;41591:11;:25;41603:12;41591:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;41670:20;41693:12;41670:35;;41723:9;41718:379;41738:8;41734:1;:12;41718:379;;;41798:12;41794:2;41773:38;;41790:1;41773:38;;;;;;;;;;;;41830:4;41826:229;;;41885:59;41916:1;41920:2;41924:12;41938:5;41885:22;:59::i;:::-;41855:184;;;;;;;;;;;;:::i;:::-;;;;;;;;;41826:229;42071:14;;;;;;;41748:3;;;;;;;41718:379;;;;42124:12;42109;:27;;;;41405:739;42156:60;42185:1;42189:2;42193:12;42207:8;42156:20;:60::i;:::-;40886:1338;40758:1466;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:118::-;7574:24;7592:5;7574:24;:::i;:::-;7569:3;7562:37;7487:118;;:::o;7611:109::-;7692:21;7707:5;7692:21;:::i;:::-;7687:3;7680:34;7611:109;;:::o;7726:360::-;7812:3;7840:38;7872:5;7840:38;:::i;:::-;7894:70;7957:6;7952:3;7894:70;:::i;:::-;7887:77;;7973:52;8018:6;8013:3;8006:4;7999:5;7995:16;7973:52;:::i;:::-;8050:29;8072:6;8050:29;:::i;:::-;8045:3;8041:39;8034:46;;7816:270;7726:360;;;;:::o;8092:364::-;8180:3;8208:39;8241:5;8208:39;:::i;:::-;8263:71;8327:6;8322:3;8263:71;:::i;:::-;8256:78;;8343:52;8388:6;8383:3;8376:4;8369:5;8365:16;8343:52;:::i;:::-;8420:29;8442:6;8420:29;:::i;:::-;8415:3;8411:39;8404:46;;8184:272;8092:364;;;;:::o;8462:377::-;8568:3;8596:39;8629:5;8596:39;:::i;:::-;8651:89;8733:6;8728:3;8651:89;:::i;:::-;8644:96;;8749:52;8794:6;8789:3;8782:4;8775:5;8771:16;8749:52;:::i;:::-;8826:6;8821:3;8817:16;8810:23;;8572:267;8462:377;;;;:::o;8845:366::-;8987:3;9008:67;9072:2;9067:3;9008:67;:::i;:::-;9001:74;;9084:93;9173:3;9084:93;:::i;:::-;9202:2;9197:3;9193:12;9186:19;;8845:366;;;:::o;9217:::-;9359:3;9380:67;9444:2;9439:3;9380:67;:::i;:::-;9373:74;;9456:93;9545:3;9456:93;:::i;:::-;9574:2;9569:3;9565:12;9558:19;;9217:366;;;:::o;9589:::-;9731:3;9752:67;9816:2;9811:3;9752:67;:::i;:::-;9745:74;;9828:93;9917:3;9828:93;:::i;:::-;9946:2;9941:3;9937:12;9930:19;;9589:366;;;:::o;9961:::-;10103:3;10124:67;10188:2;10183:3;10124:67;:::i;:::-;10117:74;;10200:93;10289:3;10200:93;:::i;:::-;10318:2;10313:3;10309:12;10302:19;;9961:366;;;:::o;10333:::-;10475:3;10496:67;10560:2;10555:3;10496:67;:::i;:::-;10489:74;;10572:93;10661:3;10572:93;:::i;:::-;10690:2;10685:3;10681:12;10674:19;;10333:366;;;:::o;10705:::-;10847:3;10868:67;10932:2;10927:3;10868:67;:::i;:::-;10861:74;;10944:93;11033:3;10944:93;:::i;:::-;11062:2;11057:3;11053:12;11046:19;;10705:366;;;:::o;11077:::-;11219:3;11240:67;11304:2;11299:3;11240:67;:::i;:::-;11233:74;;11316:93;11405:3;11316:93;:::i;:::-;11434:2;11429:3;11425:12;11418:19;;11077:366;;;:::o;11449:::-;11591:3;11612:67;11676:2;11671:3;11612:67;:::i;:::-;11605:74;;11688:93;11777:3;11688:93;:::i;:::-;11806:2;11801:3;11797:12;11790:19;;11449:366;;;:::o;11821:::-;11963:3;11984:67;12048:2;12043:3;11984:67;:::i;:::-;11977:74;;12060:93;12149:3;12060:93;:::i;:::-;12178:2;12173:3;12169:12;12162:19;;11821:366;;;:::o;12193:::-;12335:3;12356:67;12420:2;12415:3;12356:67;:::i;:::-;12349:74;;12432:93;12521:3;12432:93;:::i;:::-;12550:2;12545:3;12541:12;12534:19;;12193:366;;;:::o;12565:::-;12707:3;12728:67;12792:2;12787:3;12728:67;:::i;:::-;12721:74;;12804:93;12893:3;12804:93;:::i;:::-;12922:2;12917:3;12913:12;12906:19;;12565:366;;;:::o;12937:::-;13079:3;13100:67;13164:2;13159:3;13100:67;:::i;:::-;13093:74;;13176:93;13265:3;13176:93;:::i;:::-;13294:2;13289:3;13285:12;13278:19;;12937:366;;;:::o;13309:::-;13451:3;13472:67;13536:2;13531:3;13472:67;:::i;:::-;13465:74;;13548:93;13637:3;13548:93;:::i;:::-;13666:2;13661:3;13657:12;13650:19;;13309:366;;;:::o;13681:::-;13823:3;13844:67;13908:2;13903:3;13844:67;:::i;:::-;13837:74;;13920:93;14009:3;13920:93;:::i;:::-;14038:2;14033:3;14029:12;14022:19;;13681:366;;;:::o;14053:::-;14195:3;14216:67;14280:2;14275:3;14216:67;:::i;:::-;14209:74;;14292:93;14381:3;14292:93;:::i;:::-;14410:2;14405:3;14401:12;14394:19;;14053:366;;;:::o;14425:398::-;14584:3;14605:83;14686:1;14681:3;14605:83;:::i;:::-;14598:90;;14697:93;14786:3;14697:93;:::i;:::-;14815:1;14810:3;14806:11;14799:18;;14425:398;;;:::o;14829:366::-;14971:3;14992:67;15056:2;15051:3;14992:67;:::i;:::-;14985:74;;15068:93;15157:3;15068:93;:::i;:::-;15186:2;15181:3;15177:12;15170:19;;14829:366;;;:::o;15201:::-;15343:3;15364:67;15428:2;15423:3;15364:67;:::i;:::-;15357:74;;15440:93;15529:3;15440:93;:::i;:::-;15558:2;15553:3;15549:12;15542:19;;15201:366;;;:::o;15573:::-;15715:3;15736:67;15800:2;15795:3;15736:67;:::i;:::-;15729:74;;15812:93;15901:3;15812:93;:::i;:::-;15930:2;15925:3;15921:12;15914:19;;15573:366;;;:::o;15945:::-;16087:3;16108:67;16172:2;16167:3;16108:67;:::i;:::-;16101:74;;16184:93;16273:3;16184:93;:::i;:::-;16302:2;16297:3;16293:12;16286:19;;15945:366;;;:::o;16317:::-;16459:3;16480:67;16544:2;16539:3;16480:67;:::i;:::-;16473:74;;16556:93;16645:3;16556:93;:::i;:::-;16674:2;16669:3;16665:12;16658:19;;16317:366;;;:::o;16689:::-;16831:3;16852:67;16916:2;16911:3;16852:67;:::i;:::-;16845:74;;16928:93;17017:3;16928:93;:::i;:::-;17046:2;17041:3;17037:12;17030:19;;16689:366;;;:::o;17061:::-;17203:3;17224:67;17288:2;17283:3;17224:67;:::i;:::-;17217:74;;17300:93;17389:3;17300:93;:::i;:::-;17418:2;17413:3;17409:12;17402:19;;17061:366;;;:::o;17433:::-;17575:3;17596:67;17660:2;17655:3;17596:67;:::i;:::-;17589:74;;17672:93;17761:3;17672:93;:::i;:::-;17790:2;17785:3;17781:12;17774:19;;17433:366;;;:::o;17805:118::-;17892:24;17910:5;17892:24;:::i;:::-;17887:3;17880:37;17805:118;;:::o;17929:435::-;18109:3;18131:95;18222:3;18213:6;18131:95;:::i;:::-;18124:102;;18243:95;18334:3;18325:6;18243:95;:::i;:::-;18236:102;;18355:3;18348:10;;17929:435;;;;;:::o;18370:379::-;18554:3;18576:147;18719:3;18576:147;:::i;:::-;18569:154;;18740:3;18733:10;;18370:379;;;:::o;18755:222::-;18848:4;18886:2;18875:9;18871:18;18863:26;;18899:71;18967:1;18956:9;18952:17;18943:6;18899:71;:::i;:::-;18755:222;;;;:::o;18983:640::-;19178:4;19216:3;19205:9;19201:19;19193:27;;19230:71;19298:1;19287:9;19283:17;19274:6;19230:71;:::i;:::-;19311:72;19379:2;19368:9;19364:18;19355:6;19311:72;:::i;:::-;19393;19461:2;19450:9;19446:18;19437:6;19393:72;:::i;:::-;19512:9;19506:4;19502:20;19497:2;19486:9;19482:18;19475:48;19540:76;19611:4;19602:6;19540:76;:::i;:::-;19532:84;;18983:640;;;;;;;:::o;19629:210::-;19716:4;19754:2;19743:9;19739:18;19731:26;;19767:65;19829:1;19818:9;19814:17;19805:6;19767:65;:::i;:::-;19629:210;;;;:::o;19845:313::-;19958:4;19996:2;19985:9;19981:18;19973:26;;20045:9;20039:4;20035:20;20031:1;20020:9;20016:17;20009:47;20073:78;20146:4;20137:6;20073:78;:::i;:::-;20065:86;;19845:313;;;;:::o;20164:419::-;20330:4;20368:2;20357:9;20353:18;20345:26;;20417:9;20411:4;20407:20;20403:1;20392:9;20388:17;20381:47;20445:131;20571:4;20445:131;:::i;:::-;20437:139;;20164:419;;;:::o;20589:::-;20755:4;20793:2;20782:9;20778:18;20770:26;;20842:9;20836:4;20832:20;20828:1;20817:9;20813:17;20806:47;20870:131;20996:4;20870:131;:::i;:::-;20862:139;;20589:419;;;:::o;21014:::-;21180:4;21218:2;21207:9;21203:18;21195:26;;21267:9;21261:4;21257:20;21253:1;21242:9;21238:17;21231:47;21295:131;21421:4;21295:131;:::i;:::-;21287:139;;21014:419;;;:::o;21439:::-;21605:4;21643:2;21632:9;21628:18;21620:26;;21692:9;21686:4;21682:20;21678:1;21667:9;21663:17;21656:47;21720:131;21846:4;21720:131;:::i;:::-;21712:139;;21439:419;;;:::o;21864:::-;22030:4;22068:2;22057:9;22053:18;22045:26;;22117:9;22111:4;22107:20;22103:1;22092:9;22088:17;22081:47;22145:131;22271:4;22145:131;:::i;:::-;22137:139;;21864:419;;;:::o;22289:::-;22455:4;22493:2;22482:9;22478:18;22470:26;;22542:9;22536:4;22532:20;22528:1;22517:9;22513:17;22506:47;22570:131;22696:4;22570:131;:::i;:::-;22562:139;;22289:419;;;:::o;22714:::-;22880:4;22918:2;22907:9;22903:18;22895:26;;22967:9;22961:4;22957:20;22953:1;22942:9;22938:17;22931:47;22995:131;23121:4;22995:131;:::i;:::-;22987:139;;22714:419;;;:::o;23139:::-;23305:4;23343:2;23332:9;23328:18;23320:26;;23392:9;23386:4;23382:20;23378:1;23367:9;23363:17;23356:47;23420:131;23546:4;23420:131;:::i;:::-;23412:139;;23139:419;;;:::o;23564:::-;23730:4;23768:2;23757:9;23753:18;23745:26;;23817:9;23811:4;23807:20;23803:1;23792:9;23788:17;23781:47;23845:131;23971:4;23845:131;:::i;:::-;23837:139;;23564:419;;;:::o;23989:::-;24155:4;24193:2;24182:9;24178:18;24170:26;;24242:9;24236:4;24232:20;24228:1;24217:9;24213:17;24206:47;24270:131;24396:4;24270:131;:::i;:::-;24262:139;;23989:419;;;:::o;24414:::-;24580:4;24618:2;24607:9;24603:18;24595:26;;24667:9;24661:4;24657:20;24653:1;24642:9;24638:17;24631:47;24695:131;24821:4;24695:131;:::i;:::-;24687:139;;24414:419;;;:::o;24839:::-;25005:4;25043:2;25032:9;25028:18;25020:26;;25092:9;25086:4;25082:20;25078:1;25067:9;25063:17;25056:47;25120:131;25246:4;25120:131;:::i;:::-;25112:139;;24839:419;;;:::o;25264:::-;25430:4;25468:2;25457:9;25453:18;25445:26;;25517:9;25511:4;25507:20;25503:1;25492:9;25488:17;25481:47;25545:131;25671:4;25545:131;:::i;:::-;25537:139;;25264:419;;;:::o;25689:::-;25855:4;25893:2;25882:9;25878:18;25870:26;;25942:9;25936:4;25932:20;25928:1;25917:9;25913:17;25906:47;25970:131;26096:4;25970:131;:::i;:::-;25962:139;;25689:419;;;:::o;26114:::-;26280:4;26318:2;26307:9;26303:18;26295:26;;26367:9;26361:4;26357:20;26353:1;26342:9;26338:17;26331:47;26395:131;26521:4;26395:131;:::i;:::-;26387:139;;26114:419;;;:::o;26539:::-;26705:4;26743:2;26732:9;26728:18;26720:26;;26792:9;26786:4;26782:20;26778:1;26767:9;26763:17;26756:47;26820:131;26946:4;26820:131;:::i;:::-;26812:139;;26539:419;;;:::o;26964:::-;27130:4;27168:2;27157:9;27153:18;27145:26;;27217:9;27211:4;27207:20;27203:1;27192:9;27188:17;27181:47;27245:131;27371:4;27245:131;:::i;:::-;27237:139;;26964:419;;;:::o;27389:::-;27555:4;27593:2;27582:9;27578:18;27570:26;;27642:9;27636:4;27632:20;27628:1;27617:9;27613:17;27606:47;27670:131;27796:4;27670:131;:::i;:::-;27662:139;;27389:419;;;:::o;27814:::-;27980:4;28018:2;28007:9;28003:18;27995:26;;28067:9;28061:4;28057:20;28053:1;28042:9;28038:17;28031:47;28095:131;28221:4;28095:131;:::i;:::-;28087:139;;27814:419;;;:::o;28239:::-;28405:4;28443:2;28432:9;28428:18;28420:26;;28492:9;28486:4;28482:20;28478:1;28467:9;28463:17;28456:47;28520:131;28646:4;28520:131;:::i;:::-;28512:139;;28239:419;;;:::o;28664:::-;28830:4;28868:2;28857:9;28853:18;28845:26;;28917:9;28911:4;28907:20;28903:1;28892:9;28888:17;28881:47;28945:131;29071:4;28945:131;:::i;:::-;28937:139;;28664:419;;;:::o;29089:::-;29255:4;29293:2;29282:9;29278:18;29270:26;;29342:9;29336:4;29332:20;29328:1;29317:9;29313:17;29306:47;29370:131;29496:4;29370:131;:::i;:::-;29362:139;;29089:419;;;:::o;29514:::-;29680:4;29718:2;29707:9;29703:18;29695:26;;29767:9;29761:4;29757:20;29753:1;29742:9;29738:17;29731:47;29795:131;29921:4;29795:131;:::i;:::-;29787:139;;29514:419;;;:::o;29939:222::-;30032:4;30070:2;30059:9;30055:18;30047:26;;30083:71;30151:1;30140:9;30136:17;30127:6;30083:71;:::i;:::-;29939:222;;;;:::o;30167:129::-;30201:6;30228:20;;:::i;:::-;30218:30;;30257:33;30285:4;30277:6;30257:33;:::i;:::-;30167:129;;;:::o;30302:75::-;30335:6;30368:2;30362:9;30352:19;;30302:75;:::o;30383:307::-;30444:4;30534:18;30526:6;30523:30;30520:56;;;30556:18;;:::i;:::-;30520:56;30594:29;30616:6;30594:29;:::i;:::-;30586:37;;30678:4;30672;30668:15;30660:23;;30383:307;;;:::o;30696:308::-;30758:4;30848:18;30840:6;30837:30;30834:56;;;30870:18;;:::i;:::-;30834:56;30908:29;30930:6;30908:29;:::i;:::-;30900:37;;30992:4;30986;30982:15;30974:23;;30696:308;;;:::o;31010:98::-;31061:6;31095:5;31089:12;31079:22;;31010:98;;;:::o;31114:99::-;31166:6;31200:5;31194:12;31184:22;;31114:99;;;:::o;31219:168::-;31302:11;31336:6;31331:3;31324:19;31376:4;31371:3;31367:14;31352:29;;31219:168;;;;:::o;31393:147::-;31494:11;31531:3;31516:18;;31393:147;;;;:::o;31546:169::-;31630:11;31664:6;31659:3;31652:19;31704:4;31699:3;31695:14;31680:29;;31546:169;;;;:::o;31721:148::-;31823:11;31860:3;31845:18;;31721:148;;;;:::o;31875:305::-;31915:3;31934:20;31952:1;31934:20;:::i;:::-;31929:25;;31968:20;31986:1;31968:20;:::i;:::-;31963:25;;32122:1;32054:66;32050:74;32047:1;32044:81;32041:107;;;32128:18;;:::i;:::-;32041:107;32172:1;32169;32165:9;32158:16;;31875:305;;;;:::o;32186:185::-;32226:1;32243:20;32261:1;32243:20;:::i;:::-;32238:25;;32277:20;32295:1;32277:20;:::i;:::-;32272:25;;32316:1;32306:35;;32321:18;;:::i;:::-;32306:35;32363:1;32360;32356:9;32351:14;;32186:185;;;;:::o;32377:191::-;32417:4;32437:20;32455:1;32437:20;:::i;:::-;32432:25;;32471:20;32489:1;32471:20;:::i;:::-;32466:25;;32510:1;32507;32504:8;32501:34;;;32515:18;;:::i;:::-;32501:34;32560:1;32557;32553:9;32545:17;;32377:191;;;;:::o;32574:96::-;32611:7;32640:24;32658:5;32640:24;:::i;:::-;32629:35;;32574:96;;;:::o;32676:90::-;32710:7;32753:5;32746:13;32739:21;32728:32;;32676:90;;;:::o;32772:149::-;32808:7;32848:66;32841:5;32837:78;32826:89;;32772:149;;;:::o;32927:126::-;32964:7;33004:42;32997:5;32993:54;32982:65;;32927:126;;;:::o;33059:77::-;33096:7;33125:5;33114:16;;33059:77;;;:::o;33142:154::-;33226:6;33221:3;33216;33203:30;33288:1;33279:6;33274:3;33270:16;33263:27;33142:154;;;:::o;33302:307::-;33370:1;33380:113;33394:6;33391:1;33388:13;33380:113;;;33479:1;33474:3;33470:11;33464:18;33460:1;33455:3;33451:11;33444:39;33416:2;33413:1;33409:10;33404:15;;33380:113;;;33511:6;33508:1;33505:13;33502:101;;;33591:1;33582:6;33577:3;33573:16;33566:27;33502:101;33351:258;33302:307;;;:::o;33615:320::-;33659:6;33696:1;33690:4;33686:12;33676:22;;33743:1;33737:4;33733:12;33764:18;33754:81;;33820:4;33812:6;33808:17;33798:27;;33754:81;33882:2;33874:6;33871:14;33851:18;33848:38;33845:84;;;33901:18;;:::i;:::-;33845:84;33666:269;33615:320;;;:::o;33941:281::-;34024:27;34046:4;34024:27;:::i;:::-;34016:6;34012:40;34154:6;34142:10;34139:22;34118:18;34106:10;34103:34;34100:62;34097:88;;;34165:18;;:::i;:::-;34097:88;34205:10;34201:2;34194:22;33984:238;33941:281;;:::o;34228:233::-;34267:3;34290:24;34308:5;34290:24;:::i;:::-;34281:33;;34336:66;34329:5;34326:77;34323:103;;;34406:18;;:::i;:::-;34323:103;34453:1;34446:5;34442:13;34435:20;;34228:233;;;:::o;34467:176::-;34499:1;34516:20;34534:1;34516:20;:::i;:::-;34511:25;;34550:20;34568:1;34550:20;:::i;:::-;34545:25;;34589:1;34579:35;;34594:18;;:::i;:::-;34579:35;34635:1;34632;34628:9;34623:14;;34467:176;;;;:::o;34649:180::-;34697:77;34694:1;34687:88;34794:4;34791:1;34784:15;34818:4;34815:1;34808:15;34835:180;34883:77;34880:1;34873:88;34980:4;34977:1;34970:15;35004:4;35001:1;34994:15;35021:180;35069:77;35066:1;35059:88;35166:4;35163:1;35156:15;35190:4;35187:1;35180:15;35207:180;35255:77;35252:1;35245:88;35352:4;35349:1;35342:15;35376:4;35373:1;35366:15;35393:180;35441:77;35438:1;35431:88;35538:4;35535:1;35528:15;35562:4;35559:1;35552:15;35579:117;35688:1;35685;35678:12;35702:117;35811:1;35808;35801:12;35825:117;35934:1;35931;35924:12;35948:117;36057:1;36054;36047:12;36071:102;36112:6;36163:2;36159:7;36154:2;36147:5;36143:14;36139:28;36129:38;;36071:102;;;:::o;36179:225::-;36319:34;36315:1;36307:6;36303:14;36296:58;36388:8;36383:2;36375:6;36371:15;36364:33;36179:225;:::o;36410:229::-;36550:34;36546:1;36538:6;36534:14;36527:58;36619:12;36614:2;36606:6;36602:15;36595:37;36410:229;:::o;36645:160::-;36785:12;36781:1;36773:6;36769:14;36762:36;36645:160;:::o;36811:224::-;36951:34;36947:1;36939:6;36935:14;36928:58;37020:7;37015:2;37007:6;37003:15;36996:32;36811:224;:::o;37041:245::-;37181:34;37177:1;37169:6;37165:14;37158:58;37250:28;37245:2;37237:6;37233:15;37226:53;37041:245;:::o;37292:179::-;37432:31;37428:1;37420:6;37416:14;37409:55;37292:179;:::o;37477:165::-;37617:17;37613:1;37605:6;37601:14;37594:41;37477:165;:::o;37648:244::-;37788:34;37784:1;37776:6;37772:14;37765:58;37857:27;37852:2;37844:6;37840:15;37833:52;37648:244;:::o;37898:230::-;38038:34;38034:1;38026:6;38022:14;38015:58;38107:13;38102:2;38094:6;38090:15;38083:38;37898:230;:::o;38134:225::-;38274:34;38270:1;38262:6;38258:14;38251:58;38343:8;38338:2;38330:6;38326:15;38319:33;38134:225;:::o;38365:182::-;38505:34;38501:1;38493:6;38489:14;38482:58;38365:182;:::o;38553:234::-;38693:34;38689:1;38681:6;38677:14;38670:58;38762:17;38757:2;38749:6;38745:15;38738:42;38553:234;:::o;38793:176::-;38933:28;38929:1;38921:6;38917:14;38910:52;38793:176;:::o;38975:237::-;39115:34;39111:1;39103:6;39099:14;39092:58;39184:20;39179:2;39171:6;39167:15;39160:45;38975:237;:::o;39218:221::-;39358:34;39354:1;39346:6;39342:14;39335:58;39427:4;39422:2;39414:6;39410:15;39403:29;39218:221;:::o;39445:114::-;;:::o;39565:238::-;39705:34;39701:1;39693:6;39689:14;39682:58;39774:21;39769:2;39761:6;39757:15;39750:46;39565:238;:::o;39809:160::-;39949:12;39945:1;39937:6;39933:14;39926:36;39809:160;:::o;39975:220::-;40115:34;40111:1;40103:6;40099:14;40092:58;40184:3;40179:2;40171:6;40167:15;40160:28;39975:220;:::o;40201:227::-;40341:34;40337:1;40329:6;40325:14;40318:58;40410:10;40405:2;40397:6;40393:15;40386:35;40201:227;:::o;40434:181::-;40574:33;40570:1;40562:6;40558:14;40551:57;40434:181;:::o;40621:234::-;40761:34;40757:1;40749:6;40745:14;40738:58;40830:17;40825:2;40817:6;40813:15;40806:42;40621:234;:::o;40861:232::-;41001:34;40997:1;40989:6;40985:14;40978:58;41070:15;41065:2;41057:6;41053:15;41046:40;40861:232;:::o;41099:164::-;41239:16;41235:1;41227:6;41223:14;41216:40;41099:164;:::o;41269:122::-;41342:24;41360:5;41342:24;:::i;:::-;41335:5;41332:35;41322:63;;41381:1;41378;41371:12;41322:63;41269:122;:::o;41397:116::-;41467:21;41482:5;41467:21;:::i;:::-;41460:5;41457:32;41447:60;;41503:1;41500;41493:12;41447:60;41397:116;:::o;41519:120::-;41591:23;41608:5;41591:23;:::i;:::-;41584:5;41581:34;41571:62;;41629:1;41626;41619:12;41571:62;41519:120;:::o;41645:122::-;41718:24;41736:5;41718:24;:::i;:::-;41711:5;41708:35;41698:63;;41757:1;41754;41747:12;41698:63;41645:122;:::o

Swarm Source

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