Token What

 

Overview ERC-721

Total Supply:
150 What

Holders:
42 addresses

Transfers:
-

Loading
[ Download CSV Export  ] 
Loading
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
What

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-10
*/

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


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)

pragma solidity ^0.8.0;

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

    /**
     * @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);
    }

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

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


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

pragma solidity ^0.8.0;

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

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

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


// OpenZeppelin Contracts (last updated v4.7.0) (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 Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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

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


// OpenZeppelin Contracts (last updated v4.7.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
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


// OpenZeppelin Contracts (last updated v4.7.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 have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        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 overridden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

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

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

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        _requireMinted(tokenId);

        return _tokenApprovals[tokenId];
    }

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

        _afterTokenTransfer(address(0), to, tokenId);
    }

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

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

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

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

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

        _afterTokenTransfer(owner, address(0), tokenId);
    }

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

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

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

    /**
     * @dev Reverts if the `tokenId` has not been minted yet.
     */
    function _requireMinted(uint256 tokenId) internal view virtual {
        require(_exists(tokenId), "ERC721: invalid token ID");
    }

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

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

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

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


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

pragma solidity ^0.8.0;



/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

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

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

// File: contracts/BitFishes.sol



pragma solidity >=0.7.0 <0.9.0;



contract What is ERC721Enumerable, Ownable {
  using Strings for uint256;

  struct UserData {
    uint256 minted;
  }

  string baseURI;
  string public baseExtension = ".json";
  uint256 public cost = 125 ether;
  uint256 public maxSupply = 150;
  uint256 public maxPerTx = 2;
  bool public paused = true;
  uint256 private _scopeIndex = 0;               // Clamping cache for random TokenID generation in the anti-sniping algo
  uint256 private immutable _scopeCap;           // Size of initial randomized number pool & max generated value (zero indexed)
  mapping(uint256 => uint256) _swappedIDs;       // TokenID cache for random TokenID generation in the anti-sniping algo
  uint256 private _preMinted = 50;               // Numbers of tokens that need to be preminted
  mapping(address => UserData) private userData; // Mapping to save how many tokens each address mints
  uint256 public maxPerWallet = 20;              // Max amount of tokenIDs allowed to be minted by single wallet
  bool public whitelistedOnly = true;
  mapping(address => uint256) public whiteListed;
  mapping (uint256 => string) private _tokenURIs;
  constructor(
    string memory _name,
    string memory _symbol,
    string memory _initBaseURI
  ) ERC721(_name, _symbol) {
    setBaseURI(_initBaseURI);
    _scopeCap = maxSupply - _preMinted;
  }

  // internal
  function _baseURI() internal view virtual override returns (string memory) {
    return baseURI;
  }
  
  function _genClampedNonce() internal virtual returns (uint256) {
    uint256 scope = _scopeCap - _scopeIndex;
    uint256 swap;
    uint256 result;

    uint256 i = randomNumber() % scope;

    //Setup the value to swap in for the selected number
    if (_swappedIDs[scope - 1] == 0) {
        swap = scope - 1;
    } else {
        swap = _swappedIDs[scope - 1];
    }

    //Select a random number, swap it out with an unselected one then shorten the selection range by 1
      if (_swappedIDs[i] == 0) {
          result = i;
          _swappedIDs[i] = swap;
      } else {
          result = _swappedIDs[i];
          _swappedIDs[i] = swap;
      }
      _scopeIndex++;
      return result + _preMinted;
  }

  function randomNumber() internal view returns (uint256) {
      return uint256(keccak256(abi.encodePacked(block.difficulty, block.timestamp)));
  }
 
  // public
  function mint(uint256 _mintAmount) public payable {
    uint256 supply = totalSupply();
    require(!paused);
    require(_mintAmount > 0);
    require(_mintAmount <= maxPerTx);
    require(supply + _mintAmount <= maxSupply);
    require(userData[msg.sender].minted + _mintAmount <= maxPerWallet,  "You are trying to mint more NFTs than allowed for your wallet");
    if(whitelistedOnly)
    require(whiteListed[msg.sender] >= 1,"Error: you are not whitelisted or amount is higher than limit");

    if (msg.sender != owner()) {
      require(msg.value >= cost * _mintAmount);
    }

    for (uint256 i = 1; i <= _mintAmount; i++) {
      uint tokenId = _genClampedNonce() + 1;
      _safeMint(msg.sender, tokenId);
      userData[msg.sender].minted += 1;
      if(whitelistedOnly)
      whiteListed[msg.sender] -= 1;
    }
  }

  function walletOfOwner(address _owner)
    public
    view
    returns (uint256[] memory)
  {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory tokenIds = new uint256[](ownerTokenCount);
    for (uint256 i; i < ownerTokenCount; i++) {
      tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
    }
    return tokenIds;
  }

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

            string memory _tokenURI = _tokenURIs[tokenId];
            string memory currentBaseURI = _baseURI();
            
            // If there is no base URI, return the token URI.
            if (bytes(currentBaseURI).length == 0) {
                return _tokenURI;
            }
            // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
            if (bytes(_tokenURI).length > 0) {
                return string(abi.encodePacked(_tokenURI));
            }
            // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.
            return string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension));
        }
        

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

  function setMaxPerTx(uint256 value) public onlyOwner {
    maxPerTx = value;
  }
  
  function setBaseURI(string memory _newBaseURI) public onlyOwner {
    baseURI = _newBaseURI;
  }

  function setBaseExtension(string memory _newBaseExtension) public onlyOwner {
    baseExtension = _newBaseExtension;
  }

        function postSetTokenURI(uint256 tokenId, string memory _tokenURI) external onlyOwner {
            require(_exists(tokenId), "ERC721Metadata: URI set of nonexistent token");
            _tokenURIs[tokenId] = _tokenURI;
        }

  function pause(bool _state) public onlyOwner {
    paused = _state;
  }
    
  function preMint(uint256 _mintAmount) public onlyOwner {
    uint256 supply = totalSupply();
    require(_mintAmount > 0);
    require(_mintAmount <= _preMinted);
    require(supply + _mintAmount <= maxSupply);

    for (uint256 i = 1; i <= _mintAmount ; i++) {
      _safeMint(msg.sender, supply + i);
    }
  }

  function setMaxPerWallet(uint256 value) public onlyOwner {
    maxPerWallet = value;
  }

function whiteList(address[] memory _addressList, uint256 count) external onlyOwner {
        require(_addressList.length > 0,"Error: list is empty");

        for(uint256 i = 0;i < _addressList.length; i++) {
             require(_addressList[i] != address(0), "Address cannot be 0.");
             whiteListed[_addressList[i]] = count;
        }
        
    }

    function removeWhiteList(address[] memory addressList) external onlyOwner {
        require(addressList.length > 0,"Error: list is empty");
        for(uint256 i = 0;i<addressList.length;i++)
        whiteListed[addressList[i]] = 0;
    }

    function updateWhitelistStatus() external onlyOwner {
        whitelistedOnly = !whitelistedOnly;
    }

  function withdraw() public payable onlyOwner {
    (bool success, ) = payable(msg.sender).call{value: address(this).balance}("");
    require(success);
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"maxPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"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":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"postSetTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"preMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addressList","type":"address[]"}],"name":"removeWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMaxPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMaxPerWallet","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"updateWhitelistStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addressList","type":"address[]"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"whiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiteListed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistedOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60a06040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c9080519060200190620000519291906200031f565b506806c6b935b8bbd40000600d556096600e556002600f556001601060006101000a81548160ff0219169083151502179055506000601155603260135560146015556001601660006101000a81548160ff021916908315150217905550348015620000bb57600080fd5b506040516200522c3803806200522c8339818101604052810190620000e191906200056c565b82828160009080519060200190620000fb9291906200031f565b508060019080519060200190620001149291906200031f565b505050620001376200012b6200016a60201b60201c565b6200017260201b60201c565b62000148816200023860201b60201c565b601354600e546200015a91906200065e565b6080818152505050505062000781565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002486200026460201b60201c565b80600b9080519060200190620002609291906200031f565b5050565b620002746200016a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200029a620002f560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002f3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002ea90620006fa565b60405180910390fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200032d906200074b565b90600052602060002090601f0160209004810192826200035157600085556200039d565b82601f106200036c57805160ff19168380011785556200039d565b828001600101855582156200039d579182015b828111156200039c5782518255916020019190600101906200037f565b5b509050620003ac9190620003b0565b5090565b5b80821115620003cb576000816000905550600101620003b1565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200043882620003ed565b810181811067ffffffffffffffff821117156200045a5762000459620003fe565b5b80604052505050565b60006200046f620003cf565b90506200047d82826200042d565b919050565b600067ffffffffffffffff821115620004a0576200049f620003fe565b5b620004ab82620003ed565b9050602081019050919050565b60005b83811015620004d8578082015181840152602081019050620004bb565b83811115620004e8576000848401525b50505050565b600062000505620004ff8462000482565b62000463565b905082815260208101848484011115620005245762000523620003e8565b5b62000531848285620004b8565b509392505050565b600082601f830112620005515762000550620003e3565b5b815162000563848260208601620004ee565b91505092915050565b600080600060608486031215620005885762000587620003d9565b5b600084015167ffffffffffffffff811115620005a957620005a8620003de565b5b620005b78682870162000539565b935050602084015167ffffffffffffffff811115620005db57620005da620003de565b5b620005e98682870162000539565b925050604084015167ffffffffffffffff8111156200060d576200060c620003de565b5b6200061b8682870162000539565b9150509250925092565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200066b8262000625565b9150620006788362000625565b9250828210156200068e576200068d6200062f565b5b828203905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620006e260208362000699565b9150620006ef82620006aa565b602082019050919050565b600060208201905081810360008301526200071581620006d3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200076457607f821691505b602082108114156200077b576200077a6200071c565b5b50919050565b608051614a8f6200079d600039600061226e0152614a8f6000f3fe6080604052600436106102465760003560e01c806370a0823111610139578063b9bfa0bc116100b6578063da3ef23f1161007a578063da3ef23f1461084a578063e268e4d314610873578063e985e9c51461089c578063f2fde38b146108d9578063f968adbe14610902578063fa0fca841461092d57610246565b8063b9bfa0bc14610777578063c66828621461078e578063c6f6f216146107b9578063c87b56dd146107e2578063d5abeb011461081f57610246565b80639186b425116100fd5780639186b425146106b357806395d89b41146106de578063a0712d6814610709578063a22cb46514610725578063b88d4fde1461074e57610246565b806370a08231146105e2578063715018a61461061f5780637e0586f1146106365780638ad433ac1461065f5780638da5cb5b1461068857610246565b80633ccfd60b116101c75780634f6ccce71161018b5780634f6ccce7146104eb57806355f804b31461052857806357997081146105515780635c975abb1461057a5780636352211e146105a557610246565b80633ccfd60b1461042757806342842e0e14610431578063438b63001461045a57806344a0d68a14610497578063453c2310146104c057610246565b806313faede61161020e57806313faede61461034257806318160ddd1461036d57806323b872dd146103985780632f745c59146103c157806339745791146103fe57610246565b806301ffc9a71461024b57806302329a291461028857806306fdde03146102b1578063081812fc146102dc578063095ea7b314610319575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d9190613118565b61096a565b60405161027f9190613160565b60405180910390f35b34801561029457600080fd5b506102af60048036038101906102aa91906131a7565b6109e4565b005b3480156102bd57600080fd5b506102c6610a09565b6040516102d3919061326d565b60405180910390f35b3480156102e857600080fd5b5061030360048036038101906102fe91906132c5565b610a9b565b6040516103109190613333565b60405180910390f35b34801561032557600080fd5b50610340600480360381019061033b919061337a565b610ae1565b005b34801561034e57600080fd5b50610357610bf9565b60405161036491906133c9565b60405180910390f35b34801561037957600080fd5b50610382610bff565b60405161038f91906133c9565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba91906133e4565b610c0c565b005b3480156103cd57600080fd5b506103e860048036038101906103e3919061337a565b610c6c565b6040516103f591906133c9565b60405180910390f35b34801561040a57600080fd5b506104256004803603810190610420919061357f565b610d11565b005b61042f610ddf565b005b34801561043d57600080fd5b50610458600480360381019061045391906133e4565b610e60565b005b34801561046657600080fd5b50610481600480360381019061047c91906135c8565b610e80565b60405161048e91906136b3565b60405180910390f35b3480156104a357600080fd5b506104be60048036038101906104b991906132c5565b610f2e565b005b3480156104cc57600080fd5b506104d5610f40565b6040516104e291906133c9565b60405180910390f35b3480156104f757600080fd5b50610512600480360381019061050d91906132c5565b610f46565b60405161051f91906133c9565b60405180910390f35b34801561053457600080fd5b5061054f600480360381019061054a919061378a565b610fb7565b005b34801561055d57600080fd5b50610578600480360381019061057391906137d3565b610fd9565b005b34801561058657600080fd5b5061058f611055565b60405161059c9190613160565b60405180910390f35b3480156105b157600080fd5b506105cc60048036038101906105c791906132c5565b611068565b6040516105d99190613333565b60405180910390f35b3480156105ee57600080fd5b50610609600480360381019061060491906135c8565b61111a565b60405161061691906133c9565b60405180910390f35b34801561062b57600080fd5b506106346111d2565b005b34801561064257600080fd5b5061065d6004803603810190610658919061382f565b6111e6565b005b34801561066b57600080fd5b50610686600480360381019061068191906132c5565b61133e565b005b34801561069457600080fd5b5061069d6113c3565b6040516106aa9190613333565b60405180910390f35b3480156106bf57600080fd5b506106c86113ed565b6040516106d59190613160565b60405180910390f35b3480156106ea57600080fd5b506106f3611400565b604051610700919061326d565b60405180910390f35b610723600480360381019061071e91906132c5565b611492565b005b34801561073157600080fd5b5061074c6004803603810190610747919061388b565b61177e565b005b34801561075a57600080fd5b506107756004803603810190610770919061396c565b611794565b005b34801561078357600080fd5b5061078c6117f6565b005b34801561079a57600080fd5b506107a361182a565b6040516107b0919061326d565b60405180910390f35b3480156107c557600080fd5b506107e060048036038101906107db91906132c5565b6118b8565b005b3480156107ee57600080fd5b50610809600480360381019061080491906132c5565b6118ca565b604051610816919061326d565b60405180910390f35b34801561082b57600080fd5b50610834611a3e565b60405161084191906133c9565b60405180910390f35b34801561085657600080fd5b50610871600480360381019061086c919061378a565b611a44565b005b34801561087f57600080fd5b5061089a600480360381019061089591906132c5565b611a66565b005b3480156108a857600080fd5b506108c360048036038101906108be91906139ef565b611a78565b6040516108d09190613160565b60405180910390f35b3480156108e557600080fd5b5061090060048036038101906108fb91906135c8565b611b0c565b005b34801561090e57600080fd5b50610917611b90565b60405161092491906133c9565b60405180910390f35b34801561093957600080fd5b50610954600480360381019061094f91906135c8565b611b96565b60405161096191906133c9565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109dd57506109dc82611bae565b5b9050919050565b6109ec611c90565b80601060006101000a81548160ff02191690831515021790555050565b606060008054610a1890613a5e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4490613a5e565b8015610a915780601f10610a6657610100808354040283529160200191610a91565b820191906000526020600020905b815481529060010190602001808311610a7457829003601f168201915b5050505050905090565b6000610aa682611d0e565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aec82611068565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5490613b02565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b7c611d59565b73ffffffffffffffffffffffffffffffffffffffff161480610bab5750610baa81610ba5611d59565b611a78565b5b610bea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be190613b94565b60405180910390fd5b610bf48383611d61565b505050565b600d5481565b6000600880549050905090565b610c1d610c17611d59565b82611e1a565b610c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5390613c26565b60405180910390fd5b610c67838383611eaf565b505050565b6000610c778361111a565b8210610cb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caf90613cb8565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610d19611c90565b6000815111610d5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5490613d24565b60405180910390fd5b60005b8151811015610ddb57600060176000848481518110610d8257610d81613d44565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080610dd390613da2565b915050610d60565b5050565b610de7611c90565b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610e0d90613e1c565b60006040518083038185875af1925050503d8060008114610e4a576040519150601f19603f3d011682016040523d82523d6000602084013e610e4f565b606091505b5050905080610e5d57600080fd5b50565b610e7b83838360405180602001604052806000815250611794565b505050565b60606000610e8d8361111a565b905060008167ffffffffffffffff811115610eab57610eaa61343c565b5b604051908082528060200260200182016040528015610ed95781602001602082028036833780820191505090505b50905060005b82811015610f2357610ef18582610c6c565b828281518110610f0457610f03613d44565b5b6020026020010181815250508080610f1b90613da2565b915050610edf565b508092505050919050565b610f36611c90565b80600d8190555050565b60155481565b6000610f50610bff565b8210610f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8890613ea3565b60405180910390fd5b60088281548110610fa557610fa4613d44565b5b90600052602060002001549050919050565b610fbf611c90565b80600b9080519060200190610fd5929190613009565b5050565b610fe1611c90565b610fea82612116565b611029576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102090613f35565b60405180910390fd5b80601860008481526020019081526020016000209080519060200190611050929190613009565b505050565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110890613fa1565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561118b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118290614033565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111da611c90565b6111e46000612182565b565b6111ee611c90565b6000825111611232576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122990613d24565b60405180910390fd5b60005b825181101561133957600073ffffffffffffffffffffffffffffffffffffffff1683828151811061126957611268613d44565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156112c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bf9061409f565b60405180910390fd5b81601760008584815181106112e0576112df613d44565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061133190613da2565b915050611235565b505050565b611346611c90565b6000611350610bff565b90506000821161135f57600080fd5b60135482111561136e57600080fd5b600e54828261137d91906140bf565b111561138857600080fd5b6000600190505b8281116113be576113ab3382846113a691906140bf565b612248565b80806113b690613da2565b91505061138f565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601660009054906101000a900460ff1681565b60606001805461140f90613a5e565b80601f016020809104026020016040519081016040528092919081815260200182805461143b90613a5e565b80156114885780601f1061145d57610100808354040283529160200191611488565b820191906000526020600020905b81548152906001019060200180831161146b57829003601f168201915b5050505050905090565b600061149c610bff565b9050601060009054906101000a900460ff16156114b857600080fd5b600082116114c557600080fd5b600f548211156114d457600080fd5b600e5482826114e391906140bf565b11156114ee57600080fd5b60155482601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461153f91906140bf565b1115611580576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157790614187565b60405180910390fd5b601660009054906101000a900460ff1615611619576001601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160f90614219565b60405180910390fd5b5b6116216113c3565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461166e5781600d546116619190614239565b34101561166d57600080fd5b5b6000600190505b8281116117795760006001611688612266565b61169291906140bf565b905061169e3382612248565b6001601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282546116f191906140bf565b92505081905550601660009054906101000a900460ff1615611765576001601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461175d9190614293565b925050819055505b50808061177190613da2565b915050611675565b505050565b611790611789611d59565b83836123ac565b5050565b6117a561179f611d59565b83611e1a565b6117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db90613c26565b60405180910390fd5b6117f084848484612519565b50505050565b6117fe611c90565b601660009054906101000a900460ff1615601660006101000a81548160ff021916908315150217905550565b600c805461183790613a5e565b80601f016020809104026020016040519081016040528092919081815260200182805461186390613a5e565b80156118b05780601f10611885576101008083540402835291602001916118b0565b820191906000526020600020905b81548152906001019060200180831161189357829003601f168201915b505050505081565b6118c0611c90565b80600f8190555050565b60606118d582612116565b611914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190b90614339565b60405180910390fd5b600060186000848152602001908152602001600020805461193490613a5e565b80601f016020809104026020016040519081016040528092919081815260200182805461196090613a5e565b80156119ad5780601f10611982576101008083540402835291602001916119ad565b820191906000526020600020905b81548152906001019060200180831161199057829003601f168201915b5050505050905060006119be612575565b90506000815114156119d4578192505050611a39565b600082511115611a0757816040516020016119ef9190614395565b60405160208183030381529060405292505050611a39565b80611a1185612607565b600c604051602001611a2593929190614440565b604051602081830303815290604052925050505b919050565b600e5481565b611a4c611c90565b80600c9080519060200190611a62929190613009565b5050565b611a6e611c90565b8060158190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b14611c90565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7b906144e3565b60405180910390fd5b611b8d81612182565b50565b600f5481565b60176020528060005260406000206000915090505481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611c7957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611c895750611c8882612768565b5b9050919050565b611c98611d59565b73ffffffffffffffffffffffffffffffffffffffff16611cb66113c3565b73ffffffffffffffffffffffffffffffffffffffff1614611d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d039061454f565b60405180910390fd5b565b611d1781612116565b611d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4d90613fa1565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611dd483611068565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611e2683611068565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e685750611e678185611a78565b5b80611ea657508373ffffffffffffffffffffffffffffffffffffffff16611e8e84610a9b565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ecf82611068565b73ffffffffffffffffffffffffffffffffffffffff1614611f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1c906145e1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8c90614673565b60405180910390fd5b611fa08383836127d2565b611fab600082611d61565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ffb9190614293565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461205291906140bf565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121118383836128e6565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6122628282604051806020016040528060008152506128eb565b5050565b6000806011547f00000000000000000000000000000000000000000000000000000000000000006122979190614293565b90506000806000836122a7612946565b6122b191906146c2565b90506000601260006001876122c69190614293565b81526020019081526020016000205414156122ef576001846122e89190614293565b9250612312565b601260006001866123009190614293565b81526020019081526020016000205492505b60006012600083815260200190815260200160002054141561234e5780915082601260008381526020019081526020016000208190555061237d565b601260008281526020019081526020016000205491508260126000838152602001908152602001600020819055505b6011600081548092919061239090613da2565b9190505550601354826123a391906140bf565b94505050505090565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561241b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124129061473f565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161250c9190613160565b60405180910390a3505050565b612524848484611eaf565b61253084848484612979565b61256f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612566906147d1565b60405180910390fd5b50505050565b6060600b805461258490613a5e565b80601f01602080910402602001604051908101604052809291908181526020018280546125b090613a5e565b80156125fd5780601f106125d2576101008083540402835291602001916125fd565b820191906000526020600020905b8154815290600101906020018083116125e057829003601f168201915b5050505050905090565b6060600082141561264f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612763565b600082905060005b6000821461268157808061266a90613da2565b915050600a8261267a91906147f1565b9150612657565b60008167ffffffffffffffff81111561269d5761269c61343c565b5b6040519080825280601f01601f1916602001820160405280156126cf5781602001600182028036833780820191505090505b5090505b6000851461275c576001826126e89190614293565b9150600a856126f791906146c2565b603061270391906140bf565b60f81b81838151811061271957612718613d44565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561275591906147f1565b94506126d3565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6127dd838383612b01565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128205761281b81612b06565b61285f565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461285e5761285d8382612b4f565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128a25761289d81612cbc565b6128e1565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146128e0576128df8282612d8d565b5b5b505050565b505050565b6128f58383612e0c565b6129026000848484612979565b612941576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612938906147d1565b60405180910390fd5b505050565b6000444260405160200161295b929190614843565b6040516020818303038152906040528051906020012060001c905090565b600061299a8473ffffffffffffffffffffffffffffffffffffffff16612fe6565b15612af4578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129c3611d59565b8786866040518563ffffffff1660e01b81526004016129e594939291906148c4565b6020604051808303816000875af1925050508015612a2157506040513d601f19601f82011682018060405250810190612a1e9190614925565b60015b612aa4573d8060008114612a51576040519150601f19603f3d011682016040523d82523d6000602084013e612a56565b606091505b50600081511415612a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a93906147d1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612af9565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612b5c8461111a565b612b669190614293565b9050600060076000848152602001908152602001600020549050818114612c4b576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612cd09190614293565b9050600060096000848152602001908152602001600020549050600060088381548110612d0057612cff613d44565b5b906000526020600020015490508060088381548110612d2257612d21613d44565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612d7157612d70614952565b5b6001900381819060005260206000200160009055905550505050565b6000612d988361111a565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e73906149cd565b60405180910390fd5b612e8581612116565b15612ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ebc90614a39565b60405180910390fd5b612ed1600083836127d2565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f2191906140bf565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612fe2600083836128e6565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461301590613a5e565b90600052602060002090601f016020900481019282613037576000855561307e565b82601f1061305057805160ff191683800117855561307e565b8280016001018555821561307e579182015b8281111561307d578251825591602001919060010190613062565b5b50905061308b919061308f565b5090565b5b808211156130a8576000816000905550600101613090565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6130f5816130c0565b811461310057600080fd5b50565b600081359050613112816130ec565b92915050565b60006020828403121561312e5761312d6130b6565b5b600061313c84828501613103565b91505092915050565b60008115159050919050565b61315a81613145565b82525050565b60006020820190506131756000830184613151565b92915050565b61318481613145565b811461318f57600080fd5b50565b6000813590506131a18161317b565b92915050565b6000602082840312156131bd576131bc6130b6565b5b60006131cb84828501613192565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561320e5780820151818401526020810190506131f3565b8381111561321d576000848401525b50505050565b6000601f19601f8301169050919050565b600061323f826131d4565b61324981856131df565b93506132598185602086016131f0565b61326281613223565b840191505092915050565b600060208201905081810360008301526132878184613234565b905092915050565b6000819050919050565b6132a28161328f565b81146132ad57600080fd5b50565b6000813590506132bf81613299565b92915050565b6000602082840312156132db576132da6130b6565b5b60006132e9848285016132b0565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061331d826132f2565b9050919050565b61332d81613312565b82525050565b60006020820190506133486000830184613324565b92915050565b61335781613312565b811461336257600080fd5b50565b6000813590506133748161334e565b92915050565b60008060408385031215613391576133906130b6565b5b600061339f85828601613365565b92505060206133b0858286016132b0565b9150509250929050565b6133c38161328f565b82525050565b60006020820190506133de60008301846133ba565b92915050565b6000806000606084860312156133fd576133fc6130b6565b5b600061340b86828701613365565b935050602061341c86828701613365565b925050604061342d868287016132b0565b9150509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61347482613223565b810181811067ffffffffffffffff821117156134935761349261343c565b5b80604052505050565b60006134a66130ac565b90506134b2828261346b565b919050565b600067ffffffffffffffff8211156134d2576134d161343c565b5b602082029050602081019050919050565b600080fd5b60006134fb6134f6846134b7565b61349c565b9050808382526020820190506020840283018581111561351e5761351d6134e3565b5b835b8181101561354757806135338882613365565b845260208401935050602081019050613520565b5050509392505050565b600082601f83011261356657613565613437565b5b81356135768482602086016134e8565b91505092915050565b600060208284031215613595576135946130b6565b5b600082013567ffffffffffffffff8111156135b3576135b26130bb565b5b6135bf84828501613551565b91505092915050565b6000602082840312156135de576135dd6130b6565b5b60006135ec84828501613365565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61362a8161328f565b82525050565b600061363c8383613621565b60208301905092915050565b6000602082019050919050565b6000613660826135f5565b61366a8185613600565b935061367583613611565b8060005b838110156136a657815161368d8882613630565b975061369883613648565b925050600181019050613679565b5085935050505092915050565b600060208201905081810360008301526136cd8184613655565b905092915050565b600080fd5b600067ffffffffffffffff8211156136f5576136f461343c565b5b6136fe82613223565b9050602081019050919050565b82818337600083830152505050565b600061372d613728846136da565b61349c565b905082815260208101848484011115613749576137486136d5565b5b61375484828561370b565b509392505050565b600082601f83011261377157613770613437565b5b813561378184826020860161371a565b91505092915050565b6000602082840312156137a05761379f6130b6565b5b600082013567ffffffffffffffff8111156137be576137bd6130bb565b5b6137ca8482850161375c565b91505092915050565b600080604083850312156137ea576137e96130b6565b5b60006137f8858286016132b0565b925050602083013567ffffffffffffffff811115613819576138186130bb565b5b6138258582860161375c565b9150509250929050565b60008060408385031215613846576138456130b6565b5b600083013567ffffffffffffffff811115613864576138636130bb565b5b61387085828601613551565b9250506020613881858286016132b0565b9150509250929050565b600080604083850312156138a2576138a16130b6565b5b60006138b085828601613365565b92505060206138c185828601613192565b9150509250929050565b600067ffffffffffffffff8211156138e6576138e561343c565b5b6138ef82613223565b9050602081019050919050565b600061390f61390a846138cb565b61349c565b90508281526020810184848401111561392b5761392a6136d5565b5b61393684828561370b565b509392505050565b600082601f83011261395357613952613437565b5b81356139638482602086016138fc565b91505092915050565b60008060008060808587031215613986576139856130b6565b5b600061399487828801613365565b94505060206139a587828801613365565b93505060406139b6878288016132b0565b925050606085013567ffffffffffffffff8111156139d7576139d66130bb565b5b6139e38782880161393e565b91505092959194509250565b60008060408385031215613a0657613a056130b6565b5b6000613a1485828601613365565b9250506020613a2585828601613365565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613a7657607f821691505b60208210811415613a8a57613a89613a2f565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613aec6021836131df565b9150613af782613a90565b604082019050919050565b60006020820190508181036000830152613b1b81613adf565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b6000613b7e603e836131df565b9150613b8982613b22565b604082019050919050565b60006020820190508181036000830152613bad81613b71565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000613c10602e836131df565b9150613c1b82613bb4565b604082019050919050565b60006020820190508181036000830152613c3f81613c03565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613ca2602b836131df565b9150613cad82613c46565b604082019050919050565b60006020820190508181036000830152613cd181613c95565b9050919050565b7f4572726f723a206c69737420697320656d707479000000000000000000000000600082015250565b6000613d0e6014836131df565b9150613d1982613cd8565b602082019050919050565b60006020820190508181036000830152613d3d81613d01565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613dad8261328f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613de057613ddf613d73565b5b600182019050919050565b600081905092915050565b50565b6000613e06600083613deb565b9150613e1182613df6565b600082019050919050565b6000613e2782613df9565b9150819050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613e8d602c836131df565b9150613e9882613e31565b604082019050919050565b60006020820190508181036000830152613ebc81613e80565b9050919050565b7f4552433732314d657461646174613a2055524920736574206f66206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613f1f602c836131df565b9150613f2a82613ec3565b604082019050919050565b60006020820190508181036000830152613f4e81613f12565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000613f8b6018836131df565b9150613f9682613f55565b602082019050919050565b60006020820190508181036000830152613fba81613f7e565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b600061401d6029836131df565b915061402882613fc1565b604082019050919050565b6000602082019050818103600083015261404c81614010565b9050919050565b7f416464726573732063616e6e6f7420626520302e000000000000000000000000600082015250565b60006140896014836131df565b915061409482614053565b602082019050919050565b600060208201905081810360008301526140b88161407c565b9050919050565b60006140ca8261328f565b91506140d58361328f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561410a57614109613d73565b5b828201905092915050565b7f596f752061726520747279696e6720746f206d696e74206d6f7265204e46547360008201527f207468616e20616c6c6f77656420666f7220796f75722077616c6c6574000000602082015250565b6000614171603d836131df565b915061417c82614115565b604082019050919050565b600060208201905081810360008301526141a081614164565b9050919050565b7f4572726f723a20796f7520617265206e6f742077686974656c6973746564206f60008201527f7220616d6f756e7420697320686967686572207468616e206c696d6974000000602082015250565b6000614203603d836131df565b915061420e826141a7565b604082019050919050565b60006020820190508181036000830152614232816141f6565b9050919050565b60006142448261328f565b915061424f8361328f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561428857614287613d73565b5b828202905092915050565b600061429e8261328f565b91506142a98361328f565b9250828210156142bc576142bb613d73565b5b828203905092915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614323602f836131df565b915061432e826142c7565b604082019050919050565b6000602082019050818103600083015261435281614316565b9050919050565b600081905092915050565b600061436f826131d4565b6143798185614359565b93506143898185602086016131f0565b80840191505092915050565b60006143a18284614364565b915081905092915050565b60008190508160005260206000209050919050565b600081546143ce81613a5e565b6143d88186614359565b945060018216600081146143f3576001811461440457614437565b60ff19831686528186019350614437565b61440d856143ac565b60005b8381101561442f57815481890152600182019150602081019050614410565b838801955050505b50505092915050565b600061444c8286614364565b91506144588285614364565b915061446482846143c1565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006144cd6026836131df565b91506144d882614471565b604082019050919050565b600060208201905081810360008301526144fc816144c0565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006145396020836131df565b915061454482614503565b602082019050919050565b600060208201905081810360008301526145688161452c565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006145cb6025836131df565b91506145d68261456f565b604082019050919050565b600060208201905081810360008301526145fa816145be565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061465d6024836131df565b915061466882614601565b604082019050919050565b6000602082019050818103600083015261468c81614650565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006146cd8261328f565b91506146d88361328f565b9250826146e8576146e7614693565b5b828206905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006147296019836131df565b9150614734826146f3565b602082019050919050565b600060208201905081810360008301526147588161471c565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006147bb6032836131df565b91506147c68261475f565b604082019050919050565b600060208201905081810360008301526147ea816147ae565b9050919050565b60006147fc8261328f565b91506148078361328f565b92508261481757614816614693565b5b828204905092915050565b6000819050919050565b61483d6148388261328f565b614822565b82525050565b600061484f828561482c565b60208201915061485f828461482c565b6020820191508190509392505050565b600081519050919050565b600082825260208201905092915050565b60006148968261486f565b6148a0818561487a565b93506148b08185602086016131f0565b6148b981613223565b840191505092915050565b60006080820190506148d96000830187613324565b6148e66020830186613324565b6148f360408301856133ba565b8181036060830152614905818461488b565b905095945050505050565b60008151905061491f816130ec565b92915050565b60006020828403121561493b5761493a6130b6565b5b600061494984828501614910565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006149b76020836131df565b91506149c282614981565b602082019050919050565b600060208201905081810360008301526149e6816149aa565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614a23601c836131df565b9150614a2e826149ed565b602082019050919050565b60006020820190508181036000830152614a5281614a16565b905091905056fea2646970667358221220c6de69f746566cc31e08af8bfd873b26b7e1a95922331b0d60155fe9d0a82f7f64736f6c634300080b0033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000045768617400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000457686174000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d636f506750733469656568423234516141674670477052446d5141484b6838756436423877504d55437045662f00000000000000000000

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000045768617400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000457686174000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d636f506750733469656568423234516141674670477052446d5141484b6838756436423877504d55437045662f00000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): What
Arg [1] : _symbol (string): What
Arg [2] : _initBaseURI (string): ipfs://QmcoPgPs4ieehB24QaAgFpGpRDmQAHKh8ud6B8wPMUCpEf/

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [4] : 5768617400000000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 5768617400000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [8] : 697066733a2f2f516d636f506750733469656568423234516141674670477052
Arg [9] : 446d5141484b6838756436423877504d55437045662f00000000000000000000


Deployed ByteCode Sourcemap

46237:6601:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40010:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51434:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26744:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28257:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27774:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46427:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40650:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28957:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40318:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52316:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52677:158;;;:::i;:::-;;29364:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49490:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50782:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47135:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40840:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50958:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51196:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46530:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26455:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26186:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5273:103;;;;;;;;;;;;;:::i;:::-;;51938:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51517:321;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4625:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47249:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26913:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48636:848;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28500:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29620:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52566:105;;;;;;;;;;;;;:::i;:::-;;46385:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50868:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49850:900;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46463:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51062:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51844:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28726:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5531:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46498:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47288:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40010:224;40112:4;40151:35;40136:50;;;:11;:50;;;;:90;;;;40190:36;40214:11;40190:23;:36::i;:::-;40136:90;40129:97;;40010:224;;;:::o;51434:73::-;4511:13;:11;:13::i;:::-;51495:6:::1;51486;;:15;;;;;;;;;;;;;;;;;;51434:73:::0;:::o;26744:100::-;26798:13;26831:5;26824:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26744:100;:::o;28257:171::-;28333:7;28353:23;28368:7;28353:14;:23::i;:::-;28396:15;:24;28412:7;28396:24;;;;;;;;;;;;;;;;;;;;;28389:31;;28257:171;;;:::o;27774:417::-;27855:13;27871:23;27886:7;27871:14;:23::i;:::-;27855:39;;27919:5;27913:11;;:2;:11;;;;27905:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28013:5;27997:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28022:37;28039:5;28046:12;:10;:12::i;:::-;28022:16;:37::i;:::-;27997:62;27975:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;28162:21;28171:2;28175:7;28162:8;:21::i;:::-;27844:347;27774:417;;:::o;46427:31::-;;;;:::o;40650:113::-;40711:7;40738:10;:17;;;;40731:24;;40650:113;:::o;28957:336::-;29152:41;29171:12;:10;:12::i;:::-;29185:7;29152:18;:41::i;:::-;29144:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;29257:28;29267:4;29273:2;29277:7;29257:9;:28::i;:::-;28957:336;;;:::o;40318:256::-;40415:7;40451:23;40468:5;40451:16;:23::i;:::-;40443:5;:31;40435:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;40540:12;:19;40553:5;40540:19;;;;;;;;;;;;;;;:26;40560:5;40540:26;;;;;;;;;;;;40533:33;;40318:256;;;;:::o;52316:242::-;4511:13;:11;:13::i;:::-;52430:1:::1;52409:11;:18;:22;52401:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;52470:9;52466:84;52486:11;:18;52484:1;:20;52466:84;;;52549:1;52519:11;:27;52531:11;52543:1;52531:14;;;;;;;;:::i;:::-;;;;;;;;52519:27;;;;;;;;;;;;;;;:31;;;;52505:3;;;;;:::i;:::-;;;;52466:84;;;;52316:242:::0;:::o;52677:158::-;4511:13;:11;:13::i;:::-;52730:12:::1;52756:10;52748:24;;52780:21;52748:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52729:77;;;52821:7;52813:16;;;::::0;::::1;;52722:113;52677:158::o:0;29364:185::-;29502:39;29519:4;29525:2;29529:7;29502:39;;;;;;;;;;;;:16;:39::i;:::-;29364:185;;;:::o;49490:348::-;49565:16;49593:23;49619:17;49629:6;49619:9;:17::i;:::-;49593:43;;49643:25;49685:15;49671:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49643:58;;49713:9;49708:103;49728:15;49724:1;:19;49708:103;;;49773:30;49793:6;49801:1;49773:19;:30::i;:::-;49759:8;49768:1;49759:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;49745:3;;;;;:::i;:::-;;;;49708:103;;;;49824:8;49817:15;;;;49490:348;;;:::o;50782:80::-;4511:13;:11;:13::i;:::-;50848:8:::1;50841:4;:15;;;;50782:80:::0;:::o;47135:32::-;;;;:::o;40840:233::-;40915:7;40951:30;:28;:30::i;:::-;40943:5;:38;40935:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;41048:10;41059:5;41048:17;;;;;;;;:::i;:::-;;;;;;;;;;41041:24;;40840:233;;;:::o;50958:98::-;4511:13;:11;:13::i;:::-;51039:11:::1;51029:7;:21;;;;;;;;;;;;:::i;:::-;;50958:98:::0;:::o;51196:232::-;4511:13;:11;:13::i;:::-;51305:16:::1;51313:7;51305;:16::i;:::-;51297:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;51407:9;51385:10;:19;51396:7;51385:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;51196:232:::0;;:::o;46530:25::-;;;;;;;;;;;;;:::o;26455:222::-;26527:7;26547:13;26563:7;:16;26571:7;26563:16;;;;;;;;;;;;;;;;;;;;;26547:32;;26615:1;26598:19;;:5;:19;;;;26590:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;26664:5;26657:12;;;26455:222;;;:::o;26186:207::-;26258:7;26303:1;26286:19;;:5;:19;;;;26278:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26369:9;:16;26379:5;26369:16;;;;;;;;;;;;;;;;26362:23;;26186:207;;;:::o;5273:103::-;4511:13;:11;:13::i;:::-;5338:30:::1;5365:1;5338:18;:30::i;:::-;5273:103::o:0;51938:370::-;4511:13;:11;:13::i;:::-;52063:1:::1;52041:12;:19;:23;52033:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;52105:9;52101:190;52123:12;:19;52119:1;:23;52101:190;;;52200:1;52173:29;;:12;52186:1;52173:15;;;;;;;;:::i;:::-;;;;;;;;:29;;;;52165:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;52274:5;52243:11;:28;52255:12;52268:1;52255:15;;;;;;;;:::i;:::-;;;;;;;;52243:28;;;;;;;;;;;;;;;:36;;;;52144:3;;;;;:::i;:::-;;;;52101:190;;;;51938:370:::0;;:::o;51517:321::-;4511:13;:11;:13::i;:::-;51579:14:::1;51596:13;:11;:13::i;:::-;51579:30;;51638:1;51624:11;:15;51616:24;;;::::0;::::1;;51670:10;;51655:11;:25;;51647:34;;;::::0;::::1;;51720:9;;51705:11;51696:6;:20;;;;:::i;:::-;:33;;51688:42;;;::::0;::::1;;51744:9;51756:1;51744:13;;51739:94;51764:11;51759:1;:16;51739:94;;51792:33;51802:10;51823:1;51814:6;:10;;;;:::i;:::-;51792:9;:33::i;:::-;51778:3;;;;;:::i;:::-;;;;51739:94;;;;51572:266;51517:321:::0;:::o;4625:87::-;4671:7;4698:6;;;;;;;;;;;4691:13;;4625:87;:::o;47249:34::-;;;;;;;;;;;;;:::o;26913:104::-;26969:13;27002:7;26995:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26913:104;:::o;48636:848::-;48693:14;48710:13;:11;:13::i;:::-;48693:30;;48739:6;;;;;;;;;;;48738:7;48730:16;;;;;;48775:1;48761:11;:15;48753:24;;;;;;48807:8;;48792:11;:23;;48784:32;;;;;;48855:9;;48840:11;48831:6;:20;;;;:::i;:::-;:33;;48823:42;;;;;;48925:12;;48910:11;48880:8;:20;48889:10;48880:20;;;;;;;;;;;;;;;:27;;;:41;;;;:::i;:::-;:57;;48872:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;49014:15;;;;;;;;;;;49011:126;;;49071:1;49044:11;:23;49056:10;49044:23;;;;;;;;;;;;;;;;:28;;49036:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;49011:126;49164:7;:5;:7::i;:::-;49150:21;;:10;:21;;;49146:84;;49210:11;49203:4;;:18;;;;:::i;:::-;49190:9;:31;;49182:40;;;;;;49146:84;49243:9;49255:1;49243:13;;49238:241;49263:11;49258:1;:16;49238:241;;49290:12;49326:1;49305:18;:16;:18::i;:::-;:22;;;;:::i;:::-;49290:37;;49336:30;49346:10;49358:7;49336:9;:30::i;:::-;49406:1;49375:8;:20;49384:10;49375:20;;;;;;;;;;;;;;;:27;;;:32;;;;;;;:::i;:::-;;;;;;;;49419:15;;;;;;;;;;;49416:55;;;49470:1;49443:11;:23;49455:10;49443:23;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;49416:55;49281:198;49276:3;;;;;:::i;:::-;;;;49238:241;;;;48686:798;48636:848;:::o;28500:155::-;28595:52;28614:12;:10;:12::i;:::-;28628:8;28638;28595:18;:52::i;:::-;28500:155;;:::o;29620:323::-;29794:41;29813:12;:10;:12::i;:::-;29827:7;29794:18;:41::i;:::-;29786:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;29897:38;29911:4;29917:2;29921:7;29930:4;29897:13;:38::i;:::-;29620:323;;;;:::o;52566:105::-;4511:13;:11;:13::i;:::-;52648:15:::1;;;;;;;;;;;52647:16;52629:15;;:34;;;;;;;;;;;;;;;;;;52566:105::o:0;46385:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50868:82::-;4511:13;:11;:13::i;:::-;50939:5:::1;50928:8;:16;;;;50868:82:::0;:::o;49850:900::-;49923:13;49961:16;49969:7;49961;:16::i;:::-;49953:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;50046:23;50072:10;:19;50083:7;50072:19;;;;;;;;;;;50046:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50106:28;50137:10;:8;:10::i;:::-;50106:41;;50275:1;50249:14;50243:28;:33;50239:90;;;50304:9;50297:16;;;;;;50239:90;50467:1;50447:9;50441:23;:27;50437:110;;;50520:9;50503:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;50489:42;;;;;;50437:110;50687:14;50703:18;:7;:16;:18::i;:::-;50723:13;50670:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50656:82;;;;49850:900;;;;:::o;46463:30::-;;;;:::o;51062:122::-;4511:13;:11;:13::i;:::-;51161:17:::1;51145:13;:33;;;;;;;;;;;;:::i;:::-;;51062:122:::0;:::o;51844:90::-;4511:13;:11;:13::i;:::-;51923:5:::1;51908:12;:20;;;;51844:90:::0;:::o;28726:164::-;28823:4;28847:18;:25;28866:5;28847:25;;;;;;;;;;;;;;;:35;28873:8;28847:35;;;;;;;;;;;;;;;;;;;;;;;;;28840:42;;28726:164;;;;:::o;5531:201::-;4511:13;:11;:13::i;:::-;5640:1:::1;5620:22;;:8;:22;;;;5612:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5696:28;5715:8;5696:18;:28::i;:::-;5531:201:::0;:::o;46498:27::-;;;;:::o;47288:46::-;;;;;;;;;;;;;;;;;:::o;25817:305::-;25919:4;25971:25;25956:40;;;:11;:40;;;;:105;;;;26028:33;26013:48;;;:11;:48;;;;25956:105;:158;;;;26078:36;26102:11;26078:23;:36::i;:::-;25956:158;25936:178;;25817:305;;;:::o;4790:132::-;4865:12;:10;:12::i;:::-;4854:23;;:7;:5;:7::i;:::-;:23;;;4846:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4790:132::o;36232:135::-;36314:16;36322:7;36314;:16::i;:::-;36306:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;36232:135;:::o;3176:98::-;3229:7;3256:10;3249:17;;3176:98;:::o;35511:174::-;35613:2;35586:15;:24;35602:7;35586:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35669:7;35665:2;35631:46;;35640:23;35655:7;35640:14;:23::i;:::-;35631:46;;;;;;;;;;;;35511:174;;:::o;31744:264::-;31837:4;31854:13;31870:23;31885:7;31870:14;:23::i;:::-;31854:39;;31923:5;31912:16;;:7;:16;;;:52;;;;31932:32;31949:5;31956:7;31932:16;:32::i;:::-;31912:52;:87;;;;31992:7;31968:31;;:20;31980:7;31968:11;:20::i;:::-;:31;;;31912:87;31904:96;;;31744:264;;;;:::o;34767:625::-;34926:4;34899:31;;:23;34914:7;34899:14;:23::i;:::-;:31;;;34891:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35005:1;34991:16;;:2;:16;;;;34983:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35061:39;35082:4;35088:2;35092:7;35061:20;:39::i;:::-;35165:29;35182:1;35186:7;35165:8;:29::i;:::-;35226:1;35207:9;:15;35217:4;35207:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35255:1;35238:9;:13;35248:2;35238:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35286:2;35267:7;:16;35275:7;35267:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35325:7;35321:2;35306:27;;35315:4;35306:27;;;;;;;;;;;;35346:38;35366:4;35372:2;35376:7;35346:19;:38::i;:::-;34767:625;;;:::o;31450:127::-;31515:4;31567:1;31539:30;;:7;:16;31547:7;31539:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31532:37;;31450:127;;;:::o;5892:191::-;5966:16;5985:6;;;;;;;;;;;5966:25;;6011:8;6002:6;;:17;;;;;;;;;;;;;;;;;;6066:8;6035:40;;6056:8;6035:40;;;;;;;;;;;;5955:128;5892:191;:::o;32350:110::-;32426:26;32436:2;32440:7;32426:26;;;;;;;;;;;;:9;:26::i;:::-;32350:110;;:::o;47726:735::-;47780:7;47796:13;47824:11;;47812:9;:23;;;;:::i;:::-;47796:39;;47842:12;47861:14;47884:9;47913:5;47896:14;:12;:14::i;:::-;:22;;;;:::i;:::-;47884:34;;48015:1;47989:11;:22;48009:1;48001:5;:9;;;;:::i;:::-;47989:22;;;;;;;;;;;;:27;47985:122;;;48044:1;48036:5;:9;;;;:::i;:::-;48029:16;;47985:122;;;48077:11;:22;48097:1;48089:5;:9;;;;:::i;:::-;48077:22;;;;;;;;;;;;48070:29;;47985:122;48243:1;48225:11;:14;48237:1;48225:14;;;;;;;;;;;;:19;48221:178;;;48268:1;48259:10;;48299:4;48282:11;:14;48294:1;48282:14;;;;;;;;;;;:21;;;;48221:178;;;48341:11;:14;48353:1;48341:14;;;;;;;;;;;;48332:23;;48385:4;48368:11;:14;48380:1;48368:14;;;;;;;;;;;:21;;;;48221:178;48407:11;;:13;;;;;;;;;:::i;:::-;;;;;;48445:10;;48436:6;:19;;;;:::i;:::-;48429:26;;;;;;47726:735;:::o;35828:315::-;35983:8;35974:17;;:5;:17;;;;35966:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36070:8;36032:18;:25;36051:5;36032:25;;;;;;;;;;;;;;;:35;36058:8;36032:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36116:8;36094:41;;36109:5;36094:41;;;36126:8;36094:41;;;;;;:::i;:::-;;;;;;;;35828:315;;;:::o;30824:313::-;30980:28;30990:4;30996:2;31000:7;30980:9;:28::i;:::-;31027:47;31050:4;31056:2;31060:7;31069:4;31027:22;:47::i;:::-;31019:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;30824:313;;;;:::o;47616:102::-;47676:13;47705:7;47698:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47616:102;:::o;430:723::-;486:13;716:1;707:5;:10;703:53;;;734:10;;;;;;;;;;;;;;;;;;;;;703:53;766:12;781:5;766:20;;797:14;822:78;837:1;829:4;:9;822:78;;855:8;;;;;:::i;:::-;;;;886:2;878:10;;;;;:::i;:::-;;;822:78;;;910:19;942:6;932:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;910:39;;960:154;976:1;967:5;:10;960:154;;1004:1;994:11;;;;;:::i;:::-;;;1071:2;1063:5;:10;;;;:::i;:::-;1050:2;:24;;;;:::i;:::-;1037:39;;1020:6;1027;1020:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1100:2;1091:11;;;;;:::i;:::-;;;960:154;;;1138:6;1124:21;;;;;430:723;;;;:::o;17479:157::-;17564:4;17603:25;17588:40;;;:11;:40;;;;17581:47;;17479:157;;;:::o;41686:589::-;41830:45;41857:4;41863:2;41867:7;41830:26;:45::i;:::-;41908:1;41892:18;;:4;:18;;;41888:187;;;41927:40;41959:7;41927:31;:40::i;:::-;41888:187;;;41997:2;41989:10;;:4;:10;;;41985:90;;42016:47;42049:4;42055:7;42016:32;:47::i;:::-;41985:90;41888:187;42103:1;42089:16;;:2;:16;;;42085:183;;;42122:45;42159:7;42122:36;:45::i;:::-;42085:183;;;42195:4;42189:10;;:2;:10;;;42185:83;;42216:40;42244:2;42248:7;42216:27;:40::i;:::-;42185:83;42085:183;41686:589;;;:::o;38867:125::-;;;;:::o;32687:319::-;32816:18;32822:2;32826:7;32816:5;:18::i;:::-;32867:53;32898:1;32902:2;32906:7;32915:4;32867:22;:53::i;:::-;32845:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;32687:319;;;:::o;48467:149::-;48514:7;48574:16;48592:15;48557:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48547:62;;;;;;48539:71;;48532:78;;48467:149;:::o;36931:853::-;37085:4;37106:15;:2;:13;;;:15::i;:::-;37102:675;;;37158:2;37142:36;;;37179:12;:10;:12::i;:::-;37193:4;37199:7;37208:4;37142:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37138:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37400:1;37383:6;:13;:18;37379:328;;;37426:60;;;;;;;;;;:::i;:::-;;;;;;;;37379:328;37657:6;37651:13;37642:6;37638:2;37634:15;37627:38;37138:584;37274:41;;;37264:51;;;:6;:51;;;;37257:58;;;;;37102:675;37761:4;37754:11;;36931:853;;;;;;;:::o;38356:126::-;;;;:::o;42998:164::-;43102:10;:17;;;;43075:15;:24;43091:7;43075:24;;;;;;;;;;;:44;;;;43130:10;43146:7;43130:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42998:164;:::o;43789:988::-;44055:22;44105:1;44080:22;44097:4;44080:16;:22::i;:::-;:26;;;;:::i;:::-;44055:51;;44117:18;44138:17;:26;44156:7;44138:26;;;;;;;;;;;;44117:47;;44285:14;44271:10;:28;44267:328;;44316:19;44338:12;:18;44351:4;44338:18;;;;;;;;;;;;;;;:34;44357:14;44338:34;;;;;;;;;;;;44316:56;;44422:11;44389:12;:18;44402:4;44389:18;;;;;;;;;;;;;;;:30;44408:10;44389:30;;;;;;;;;;;:44;;;;44539:10;44506:17;:30;44524:11;44506:30;;;;;;;;;;;:43;;;;44301:294;44267:328;44691:17;:26;44709:7;44691:26;;;;;;;;;;;44684:33;;;44735:12;:18;44748:4;44735:18;;;;;;;;;;;;;;;:34;44754:14;44735:34;;;;;;;;;;;44728:41;;;43870:907;;43789:988;;:::o;45072:1079::-;45325:22;45370:1;45350:10;:17;;;;:21;;;;:::i;:::-;45325:46;;45382:18;45403:15;:24;45419:7;45403:24;;;;;;;;;;;;45382:45;;45754:19;45776:10;45787:14;45776:26;;;;;;;;:::i;:::-;;;;;;;;;;45754:48;;45840:11;45815:10;45826;45815:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;45951:10;45920:15;:28;45936:11;45920:28;;;;;;;;;;;:41;;;;46092:15;:24;46108:7;46092:24;;;;;;;;;;;46085:31;;;46127:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45143:1008;;;45072:1079;:::o;42576:221::-;42661:14;42678:20;42695:2;42678:16;:20::i;:::-;42661:37;;42736:7;42709:12;:16;42722:2;42709:16;;;;;;;;;;;;;;;:24;42726:6;42709:24;;;;;;;;;;;:34;;;;42783:6;42754:17;:26;42772:7;42754:26;;;;;;;;;;;:35;;;;42650:147;42576:221;;:::o;33342:439::-;33436:1;33422:16;;:2;:16;;;;33414:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33495:16;33503:7;33495;:16::i;:::-;33494:17;33486:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33557:45;33586:1;33590:2;33594:7;33557:20;:45::i;:::-;33632:1;33615:9;:13;33625:2;33615:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33663:2;33644:7;:16;33652:7;33644:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33708:7;33704:2;33683:33;;33700:1;33683:33;;;;;;;;;;;;33729:44;33757:1;33761:2;33765:7;33729:19;:44::i;:::-;33342:439;;:::o;7323:326::-;7383:4;7640:1;7618:7;:19;;;:23;7611:30;;7323:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:116::-;1588:21;1603:5;1588:21;:::i;:::-;1581:5;1578:32;1568:60;;1624:1;1621;1614:12;1568:60;1518:116;:::o;1640:133::-;1683:5;1721:6;1708:20;1699:29;;1737:30;1761:5;1737:30;:::i;:::-;1640:133;;;;:::o;1779:323::-;1835:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:119;;;1890:79;;:::i;:::-;1852:119;2010:1;2035:50;2077:7;2068:6;2057:9;2053:22;2035:50;:::i;:::-;2025:60;;1981:114;1779:323;;;;:::o;2108:99::-;2160:6;2194:5;2188:12;2178:22;;2108:99;;;:::o;2213:169::-;2297:11;2331:6;2326:3;2319:19;2371:4;2366:3;2362:14;2347:29;;2213:169;;;;:::o;2388:307::-;2456:1;2466:113;2480:6;2477:1;2474:13;2466:113;;;2565:1;2560:3;2556:11;2550:18;2546:1;2541:3;2537:11;2530:39;2502:2;2499:1;2495:10;2490:15;;2466:113;;;2597:6;2594:1;2591:13;2588:101;;;2677:1;2668:6;2663:3;2659:16;2652:27;2588:101;2437:258;2388:307;;;:::o;2701:102::-;2742:6;2793:2;2789:7;2784:2;2777:5;2773:14;2769:28;2759:38;;2701:102;;;:::o;2809:364::-;2897:3;2925:39;2958:5;2925:39;:::i;:::-;2980:71;3044:6;3039:3;2980:71;:::i;:::-;2973:78;;3060:52;3105:6;3100:3;3093:4;3086:5;3082:16;3060:52;:::i;:::-;3137:29;3159:6;3137:29;:::i;:::-;3132:3;3128:39;3121:46;;2901:272;2809:364;;;;:::o;3179:313::-;3292:4;3330:2;3319:9;3315:18;3307:26;;3379:9;3373:4;3369:20;3365:1;3354:9;3350:17;3343:47;3407:78;3480:4;3471:6;3407:78;:::i;:::-;3399:86;;3179:313;;;;:::o;3498:77::-;3535:7;3564:5;3553:16;;3498:77;;;:::o;3581:122::-;3654:24;3672:5;3654:24;:::i;:::-;3647:5;3644:35;3634:63;;3693:1;3690;3683:12;3634:63;3581:122;:::o;3709:139::-;3755:5;3793:6;3780:20;3771:29;;3809:33;3836:5;3809:33;:::i;:::-;3709:139;;;;:::o;3854:329::-;3913:6;3962:2;3950:9;3941:7;3937:23;3933:32;3930:119;;;3968:79;;:::i;:::-;3930:119;4088:1;4113:53;4158:7;4149:6;4138:9;4134:22;4113:53;:::i;:::-;4103:63;;4059:117;3854:329;;;;:::o;4189:126::-;4226:7;4266:42;4259:5;4255:54;4244:65;;4189:126;;;:::o;4321:96::-;4358:7;4387:24;4405:5;4387:24;:::i;:::-;4376:35;;4321:96;;;:::o;4423:118::-;4510:24;4528:5;4510:24;:::i;:::-;4505:3;4498:37;4423:118;;:::o;4547:222::-;4640:4;4678:2;4667:9;4663:18;4655:26;;4691:71;4759:1;4748:9;4744:17;4735:6;4691:71;:::i;:::-;4547:222;;;;:::o;4775:122::-;4848:24;4866:5;4848:24;:::i;:::-;4841:5;4838:35;4828:63;;4887:1;4884;4877:12;4828:63;4775:122;:::o;4903:139::-;4949:5;4987:6;4974:20;4965:29;;5003:33;5030:5;5003:33;:::i;:::-;4903:139;;;;:::o;5048:474::-;5116:6;5124;5173:2;5161:9;5152:7;5148:23;5144:32;5141:119;;;5179:79;;:::i;:::-;5141:119;5299:1;5324:53;5369:7;5360:6;5349:9;5345:22;5324:53;:::i;:::-;5314:63;;5270:117;5426:2;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5397:118;5048:474;;;;;:::o;5528:118::-;5615:24;5633:5;5615:24;:::i;:::-;5610:3;5603:37;5528:118;;:::o;5652:222::-;5745:4;5783:2;5772:9;5768:18;5760:26;;5796:71;5864:1;5853:9;5849:17;5840:6;5796:71;:::i;:::-;5652:222;;;;:::o;5880:619::-;5957:6;5965;5973;6022:2;6010:9;6001:7;5997:23;5993:32;5990:119;;;6028:79;;:::i;:::-;5990:119;6148:1;6173:53;6218:7;6209:6;6198:9;6194:22;6173:53;:::i;:::-;6163:63;;6119:117;6275:2;6301:53;6346:7;6337:6;6326:9;6322:22;6301:53;:::i;:::-;6291:63;;6246:118;6403:2;6429:53;6474:7;6465:6;6454:9;6450:22;6429:53;:::i;:::-;6419:63;;6374:118;5880:619;;;;;:::o;6505:117::-;6614:1;6611;6604:12;6628:180;6676:77;6673:1;6666:88;6773:4;6770:1;6763:15;6797:4;6794:1;6787:15;6814:281;6897:27;6919:4;6897:27;:::i;:::-;6889:6;6885:40;7027:6;7015:10;7012:22;6991:18;6979:10;6976:34;6973:62;6970:88;;;7038:18;;:::i;:::-;6970:88;7078:10;7074:2;7067:22;6857:238;6814:281;;:::o;7101:129::-;7135:6;7162:20;;:::i;:::-;7152:30;;7191:33;7219:4;7211:6;7191:33;:::i;:::-;7101:129;;;:::o;7236:311::-;7313:4;7403:18;7395:6;7392:30;7389:56;;;7425:18;;:::i;:::-;7389:56;7475:4;7467:6;7463:17;7455:25;;7535:4;7529;7525:15;7517:23;;7236:311;;;:::o;7553:117::-;7662:1;7659;7652:12;7693:710;7789:5;7814:81;7830:64;7887:6;7830:64;:::i;:::-;7814:81;:::i;:::-;7805:90;;7915:5;7944:6;7937:5;7930:21;7978:4;7971:5;7967:16;7960:23;;8031:4;8023:6;8019:17;8011:6;8007:30;8060:3;8052:6;8049:15;8046:122;;;8079:79;;:::i;:::-;8046:122;8194:6;8177:220;8211:6;8206:3;8203:15;8177:220;;;8286:3;8315:37;8348:3;8336:10;8315:37;:::i;:::-;8310:3;8303:50;8382:4;8377:3;8373:14;8366:21;;8253:144;8237:4;8232:3;8228:14;8221:21;;8177:220;;;8181:21;7795:608;;7693:710;;;;;:::o;8426:370::-;8497:5;8546:3;8539:4;8531:6;8527:17;8523:27;8513:122;;8554:79;;:::i;:::-;8513:122;8671:6;8658:20;8696:94;8786:3;8778:6;8771:4;8763:6;8759:17;8696:94;:::i;:::-;8687:103;;8503:293;8426:370;;;;:::o;8802:539::-;8886:6;8935:2;8923:9;8914:7;8910:23;8906:32;8903:119;;;8941:79;;:::i;:::-;8903:119;9089:1;9078:9;9074:17;9061:31;9119:18;9111:6;9108:30;9105:117;;;9141:79;;:::i;:::-;9105:117;9246:78;9316:7;9307:6;9296:9;9292:22;9246:78;:::i;:::-;9236:88;;9032:302;8802:539;;;;:::o;9347:329::-;9406:6;9455:2;9443:9;9434:7;9430:23;9426:32;9423:119;;;9461:79;;:::i;:::-;9423:119;9581:1;9606:53;9651:7;9642:6;9631:9;9627:22;9606:53;:::i;:::-;9596:63;;9552:117;9347:329;;;;:::o;9682:114::-;9749:6;9783:5;9777:12;9767:22;;9682:114;;;:::o;9802:184::-;9901:11;9935:6;9930:3;9923:19;9975:4;9970:3;9966:14;9951:29;;9802:184;;;;:::o;9992:132::-;10059:4;10082:3;10074:11;;10112:4;10107:3;10103:14;10095:22;;9992:132;;;:::o;10130:108::-;10207:24;10225:5;10207:24;:::i;:::-;10202:3;10195:37;10130:108;;:::o;10244:179::-;10313:10;10334:46;10376:3;10368:6;10334:46;:::i;:::-;10412:4;10407:3;10403:14;10389:28;;10244:179;;;;:::o;10429:113::-;10499:4;10531;10526:3;10522:14;10514:22;;10429:113;;;:::o;10578:732::-;10697:3;10726:54;10774:5;10726:54;:::i;:::-;10796:86;10875:6;10870:3;10796:86;:::i;:::-;10789:93;;10906:56;10956:5;10906:56;:::i;:::-;10985:7;11016:1;11001:284;11026:6;11023:1;11020:13;11001:284;;;11102:6;11096:13;11129:63;11188:3;11173:13;11129:63;:::i;:::-;11122:70;;11215:60;11268:6;11215:60;:::i;:::-;11205:70;;11061:224;11048:1;11045;11041:9;11036:14;;11001:284;;;11005:14;11301:3;11294:10;;10702:608;;;10578:732;;;;:::o;11316:373::-;11459:4;11497:2;11486:9;11482:18;11474:26;;11546:9;11540:4;11536:20;11532:1;11521:9;11517:17;11510:47;11574:108;11677:4;11668:6;11574:108;:::i;:::-;11566:116;;11316:373;;;;:::o;11695:117::-;11804:1;11801;11794:12;11818:308;11880:4;11970:18;11962:6;11959:30;11956:56;;;11992:18;;:::i;:::-;11956:56;12030:29;12052:6;12030:29;:::i;:::-;12022:37;;12114:4;12108;12104:15;12096:23;;11818:308;;;:::o;12132:154::-;12216:6;12211:3;12206;12193:30;12278:1;12269:6;12264:3;12260:16;12253:27;12132:154;;;:::o;12292:412::-;12370:5;12395:66;12411:49;12453:6;12411:49;:::i;:::-;12395:66;:::i;:::-;12386:75;;12484:6;12477:5;12470:21;12522:4;12515:5;12511:16;12560:3;12551:6;12546:3;12542:16;12539:25;12536:112;;;12567:79;;:::i;:::-;12536:112;12657:41;12691:6;12686:3;12681;12657:41;:::i;:::-;12376:328;12292:412;;;;;:::o;12724:340::-;12780:5;12829:3;12822:4;12814:6;12810:17;12806:27;12796:122;;12837:79;;:::i;:::-;12796:122;12954:6;12941:20;12979:79;13054:3;13046:6;13039:4;13031:6;13027:17;12979:79;:::i;:::-;12970:88;;12786:278;12724:340;;;;:::o;13070:509::-;13139:6;13188:2;13176:9;13167:7;13163:23;13159:32;13156:119;;;13194:79;;:::i;:::-;13156:119;13342:1;13331:9;13327:17;13314:31;13372:18;13364:6;13361:30;13358:117;;;13394:79;;:::i;:::-;13358:117;13499:63;13554:7;13545:6;13534:9;13530:22;13499:63;:::i;:::-;13489:73;;13285:287;13070:509;;;;:::o;13585:654::-;13663:6;13671;13720:2;13708:9;13699:7;13695:23;13691:32;13688:119;;;13726:79;;:::i;:::-;13688:119;13846:1;13871:53;13916:7;13907:6;13896:9;13892:22;13871:53;:::i;:::-;13861:63;;13817:117;14001:2;13990:9;13986:18;13973:32;14032:18;14024:6;14021:30;14018:117;;;14054:79;;:::i;:::-;14018:117;14159:63;14214:7;14205:6;14194:9;14190:22;14159:63;:::i;:::-;14149:73;;13944:288;13585:654;;;;;:::o;14245:684::-;14338:6;14346;14395:2;14383:9;14374:7;14370:23;14366:32;14363:119;;;14401:79;;:::i;:::-;14363:119;14549:1;14538:9;14534:17;14521:31;14579:18;14571:6;14568:30;14565:117;;;14601:79;;:::i;:::-;14565:117;14706:78;14776:7;14767:6;14756:9;14752:22;14706:78;:::i;:::-;14696:88;;14492:302;14833:2;14859:53;14904:7;14895:6;14884:9;14880:22;14859:53;:::i;:::-;14849:63;;14804:118;14245:684;;;;;:::o;14935:468::-;15000:6;15008;15057:2;15045:9;15036:7;15032:23;15028:32;15025:119;;;15063:79;;:::i;:::-;15025:119;15183:1;15208:53;15253:7;15244:6;15233:9;15229:22;15208:53;:::i;:::-;15198:63;;15154:117;15310:2;15336:50;15378:7;15369:6;15358:9;15354:22;15336:50;:::i;:::-;15326:60;;15281:115;14935:468;;;;;:::o;15409:307::-;15470:4;15560:18;15552:6;15549:30;15546:56;;;15582:18;;:::i;:::-;15546:56;15620:29;15642:6;15620:29;:::i;:::-;15612:37;;15704:4;15698;15694:15;15686:23;;15409:307;;;:::o;15722:410::-;15799:5;15824:65;15840:48;15881:6;15840:48;:::i;:::-;15824:65;:::i;:::-;15815:74;;15912:6;15905:5;15898:21;15950:4;15943:5;15939:16;15988:3;15979:6;15974:3;15970:16;15967:25;15964:112;;;15995:79;;:::i;:::-;15964:112;16085:41;16119:6;16114:3;16109;16085:41;:::i;:::-;15805:327;15722:410;;;;;:::o;16151:338::-;16206:5;16255:3;16248:4;16240:6;16236:17;16232:27;16222:122;;16263:79;;:::i;:::-;16222:122;16380:6;16367:20;16405:78;16479:3;16471:6;16464:4;16456:6;16452:17;16405:78;:::i;:::-;16396:87;;16212:277;16151:338;;;;:::o;16495:943::-;16590:6;16598;16606;16614;16663:3;16651:9;16642:7;16638:23;16634:33;16631:120;;;16670:79;;:::i;:::-;16631:120;16790:1;16815:53;16860:7;16851:6;16840:9;16836:22;16815:53;:::i;:::-;16805:63;;16761:117;16917:2;16943:53;16988:7;16979:6;16968:9;16964:22;16943:53;:::i;:::-;16933:63;;16888:118;17045:2;17071:53;17116:7;17107:6;17096:9;17092:22;17071:53;:::i;:::-;17061:63;;17016:118;17201:2;17190:9;17186:18;17173:32;17232:18;17224:6;17221:30;17218:117;;;17254:79;;:::i;:::-;17218:117;17359:62;17413:7;17404:6;17393:9;17389:22;17359:62;:::i;:::-;17349:72;;17144:287;16495:943;;;;;;;:::o;17444:474::-;17512:6;17520;17569:2;17557:9;17548:7;17544:23;17540:32;17537:119;;;17575:79;;:::i;:::-;17537:119;17695:1;17720:53;17765:7;17756:6;17745:9;17741:22;17720:53;:::i;:::-;17710:63;;17666:117;17822:2;17848:53;17893:7;17884:6;17873:9;17869:22;17848:53;:::i;:::-;17838:63;;17793:118;17444:474;;;;;:::o;17924:180::-;17972:77;17969:1;17962:88;18069:4;18066:1;18059:15;18093:4;18090:1;18083:15;18110:320;18154:6;18191:1;18185:4;18181:12;18171:22;;18238:1;18232:4;18228:12;18259:18;18249:81;;18315:4;18307:6;18303:17;18293:27;;18249:81;18377:2;18369:6;18366:14;18346:18;18343:38;18340:84;;;18396:18;;:::i;:::-;18340:84;18161:269;18110:320;;;:::o;18436:220::-;18576:34;18572:1;18564:6;18560:14;18553:58;18645:3;18640:2;18632:6;18628:15;18621:28;18436:220;:::o;18662:366::-;18804:3;18825:67;18889:2;18884:3;18825:67;:::i;:::-;18818:74;;18901:93;18990:3;18901:93;:::i;:::-;19019:2;19014:3;19010:12;19003:19;;18662:366;;;:::o;19034:419::-;19200:4;19238:2;19227:9;19223:18;19215:26;;19287:9;19281:4;19277:20;19273:1;19262:9;19258:17;19251:47;19315:131;19441:4;19315:131;:::i;:::-;19307:139;;19034:419;;;:::o;19459:249::-;19599:34;19595:1;19587:6;19583:14;19576:58;19668:32;19663:2;19655:6;19651:15;19644:57;19459:249;:::o;19714:366::-;19856:3;19877:67;19941:2;19936:3;19877:67;:::i;:::-;19870:74;;19953:93;20042:3;19953:93;:::i;:::-;20071:2;20066:3;20062:12;20055:19;;19714:366;;;:::o;20086:419::-;20252:4;20290:2;20279:9;20275:18;20267:26;;20339:9;20333:4;20329:20;20325:1;20314:9;20310:17;20303:47;20367:131;20493:4;20367:131;:::i;:::-;20359:139;;20086:419;;;:::o;20511:233::-;20651:34;20647:1;20639:6;20635:14;20628:58;20720:16;20715:2;20707:6;20703:15;20696:41;20511:233;:::o;20750:366::-;20892:3;20913:67;20977:2;20972:3;20913:67;:::i;:::-;20906:74;;20989:93;21078:3;20989:93;:::i;:::-;21107:2;21102:3;21098:12;21091:19;;20750:366;;;:::o;21122:419::-;21288:4;21326:2;21315:9;21311:18;21303:26;;21375:9;21369:4;21365:20;21361:1;21350:9;21346:17;21339:47;21403:131;21529:4;21403:131;:::i;:::-;21395:139;;21122:419;;;:::o;21547:230::-;21687:34;21683:1;21675:6;21671:14;21664:58;21756:13;21751:2;21743:6;21739:15;21732:38;21547:230;:::o;21783:366::-;21925:3;21946:67;22010:2;22005:3;21946:67;:::i;:::-;21939:74;;22022:93;22111:3;22022:93;:::i;:::-;22140:2;22135:3;22131:12;22124:19;;21783:366;;;:::o;22155:419::-;22321:4;22359:2;22348:9;22344:18;22336:26;;22408:9;22402:4;22398:20;22394:1;22383:9;22379:17;22372:47;22436:131;22562:4;22436:131;:::i;:::-;22428:139;;22155:419;;;:::o;22580:170::-;22720:22;22716:1;22708:6;22704:14;22697:46;22580:170;:::o;22756:366::-;22898:3;22919:67;22983:2;22978:3;22919:67;:::i;:::-;22912:74;;22995:93;23084:3;22995:93;:::i;:::-;23113:2;23108:3;23104:12;23097:19;;22756:366;;;:::o;23128:419::-;23294:4;23332:2;23321:9;23317:18;23309:26;;23381:9;23375:4;23371:20;23367:1;23356:9;23352:17;23345:47;23409:131;23535:4;23409:131;:::i;:::-;23401:139;;23128:419;;;:::o;23553:180::-;23601:77;23598:1;23591:88;23698:4;23695:1;23688:15;23722:4;23719:1;23712:15;23739:180;23787:77;23784:1;23777:88;23884:4;23881:1;23874:15;23908:4;23905:1;23898:15;23925:233;23964:3;23987:24;24005:5;23987:24;:::i;:::-;23978:33;;24033:66;24026:5;24023:77;24020:103;;;24103:18;;:::i;:::-;24020:103;24150:1;24143:5;24139:13;24132:20;;23925:233;;;:::o;24164:147::-;24265:11;24302:3;24287:18;;24164:147;;;;:::o;24317:114::-;;:::o;24437:398::-;24596:3;24617:83;24698:1;24693:3;24617:83;:::i;:::-;24610:90;;24709:93;24798:3;24709:93;:::i;:::-;24827:1;24822:3;24818:11;24811:18;;24437:398;;;:::o;24841:379::-;25025:3;25047:147;25190:3;25047:147;:::i;:::-;25040:154;;25211:3;25204:10;;24841:379;;;:::o;25226:231::-;25366:34;25362:1;25354:6;25350:14;25343:58;25435:14;25430:2;25422:6;25418:15;25411:39;25226:231;:::o;25463:366::-;25605:3;25626:67;25690:2;25685:3;25626:67;:::i;:::-;25619:74;;25702:93;25791:3;25702:93;:::i;:::-;25820:2;25815:3;25811:12;25804:19;;25463:366;;;:::o;25835:419::-;26001:4;26039:2;26028:9;26024:18;26016:26;;26088:9;26082:4;26078:20;26074:1;26063:9;26059:17;26052:47;26116:131;26242:4;26116:131;:::i;:::-;26108:139;;25835:419;;;:::o;26260:231::-;26400:34;26396:1;26388:6;26384:14;26377:58;26469:14;26464:2;26456:6;26452:15;26445:39;26260:231;:::o;26497:366::-;26639:3;26660:67;26724:2;26719:3;26660:67;:::i;:::-;26653:74;;26736:93;26825:3;26736:93;:::i;:::-;26854:2;26849:3;26845:12;26838:19;;26497:366;;;:::o;26869:419::-;27035:4;27073:2;27062:9;27058:18;27050:26;;27122:9;27116:4;27112:20;27108:1;27097:9;27093:17;27086:47;27150:131;27276:4;27150:131;:::i;:::-;27142:139;;26869:419;;;:::o;27294:174::-;27434:26;27430:1;27422:6;27418:14;27411:50;27294:174;:::o;27474:366::-;27616:3;27637:67;27701:2;27696:3;27637:67;:::i;:::-;27630:74;;27713:93;27802:3;27713:93;:::i;:::-;27831:2;27826:3;27822:12;27815:19;;27474:366;;;:::o;27846:419::-;28012:4;28050:2;28039:9;28035:18;28027:26;;28099:9;28093:4;28089:20;28085:1;28074:9;28070:17;28063:47;28127:131;28253:4;28127:131;:::i;:::-;28119:139;;27846:419;;;:::o;28271:228::-;28411:34;28407:1;28399:6;28395:14;28388:58;28480:11;28475:2;28467:6;28463:15;28456:36;28271:228;:::o;28505:366::-;28647:3;28668:67;28732:2;28727:3;28668:67;:::i;:::-;28661:74;;28744:93;28833:3;28744:93;:::i;:::-;28862:2;28857:3;28853:12;28846:19;;28505:366;;;:::o;28877:419::-;29043:4;29081:2;29070:9;29066:18;29058:26;;29130:9;29124:4;29120:20;29116:1;29105:9;29101:17;29094:47;29158:131;29284:4;29158:131;:::i;:::-;29150:139;;28877:419;;;:::o;29302:170::-;29442:22;29438:1;29430:6;29426:14;29419:46;29302:170;:::o;29478:366::-;29620:3;29641:67;29705:2;29700:3;29641:67;:::i;:::-;29634:74;;29717:93;29806:3;29717:93;:::i;:::-;29835:2;29830:3;29826:12;29819:19;;29478:366;;;:::o;29850:419::-;30016:4;30054:2;30043:9;30039:18;30031:26;;30103:9;30097:4;30093:20;30089:1;30078:9;30074:17;30067:47;30131:131;30257:4;30131:131;:::i;:::-;30123:139;;29850:419;;;:::o;30275:305::-;30315:3;30334:20;30352:1;30334:20;:::i;:::-;30329:25;;30368:20;30386:1;30368:20;:::i;:::-;30363:25;;30522:1;30454:66;30450:74;30447:1;30444:81;30441:107;;;30528:18;;:::i;:::-;30441:107;30572:1;30569;30565:9;30558:16;;30275:305;;;;:::o;30586:248::-;30726:34;30722:1;30714:6;30710:14;30703:58;30795:31;30790:2;30782:6;30778:15;30771:56;30586:248;:::o;30840:366::-;30982:3;31003:67;31067:2;31062:3;31003:67;:::i;:::-;30996:74;;31079:93;31168:3;31079:93;:::i;:::-;31197:2;31192:3;31188:12;31181:19;;30840:366;;;:::o;31212:419::-;31378:4;31416:2;31405:9;31401:18;31393:26;;31465:9;31459:4;31455:20;31451:1;31440:9;31436:17;31429:47;31493:131;31619:4;31493:131;:::i;:::-;31485:139;;31212:419;;;:::o;31637:248::-;31777:34;31773:1;31765:6;31761:14;31754:58;31846:31;31841:2;31833:6;31829:15;31822:56;31637:248;:::o;31891:366::-;32033:3;32054:67;32118:2;32113:3;32054:67;:::i;:::-;32047:74;;32130:93;32219:3;32130:93;:::i;:::-;32248:2;32243:3;32239:12;32232:19;;31891:366;;;:::o;32263:419::-;32429:4;32467:2;32456:9;32452:18;32444:26;;32516:9;32510:4;32506:20;32502:1;32491:9;32487:17;32480:47;32544:131;32670:4;32544:131;:::i;:::-;32536:139;;32263:419;;;:::o;32688:348::-;32728:7;32751:20;32769:1;32751:20;:::i;:::-;32746:25;;32785:20;32803:1;32785:20;:::i;:::-;32780:25;;32973:1;32905:66;32901:74;32898:1;32895:81;32890:1;32883:9;32876:17;32872:105;32869:131;;;32980:18;;:::i;:::-;32869:131;33028:1;33025;33021:9;33010:20;;32688:348;;;;:::o;33042:191::-;33082:4;33102:20;33120:1;33102:20;:::i;:::-;33097:25;;33136:20;33154:1;33136:20;:::i;:::-;33131:25;;33175:1;33172;33169:8;33166:34;;;33180:18;;:::i;:::-;33166:34;33225:1;33222;33218:9;33210:17;;33042:191;;;;:::o;33239:234::-;33379:34;33375:1;33367:6;33363:14;33356:58;33448:17;33443:2;33435:6;33431:15;33424:42;33239:234;:::o;33479:366::-;33621:3;33642:67;33706:2;33701:3;33642:67;:::i;:::-;33635:74;;33718:93;33807:3;33718:93;:::i;:::-;33836:2;33831:3;33827:12;33820:19;;33479:366;;;:::o;33851:419::-;34017:4;34055:2;34044:9;34040:18;34032:26;;34104:9;34098:4;34094:20;34090:1;34079:9;34075:17;34068:47;34132:131;34258:4;34132:131;:::i;:::-;34124:139;;33851:419;;;:::o;34276:148::-;34378:11;34415:3;34400:18;;34276:148;;;;:::o;34430:377::-;34536:3;34564:39;34597:5;34564:39;:::i;:::-;34619:89;34701:6;34696:3;34619:89;:::i;:::-;34612:96;;34717:52;34762:6;34757:3;34750:4;34743:5;34739:16;34717:52;:::i;:::-;34794:6;34789:3;34785:16;34778:23;;34540:267;34430:377;;;;:::o;34813:275::-;34945:3;34967:95;35058:3;35049:6;34967:95;:::i;:::-;34960:102;;35079:3;35072:10;;34813:275;;;;:::o;35094:141::-;35143:4;35166:3;35158:11;;35189:3;35186:1;35179:14;35223:4;35220:1;35210:18;35202:26;;35094:141;;;:::o;35265:845::-;35368:3;35405:5;35399:12;35434:36;35460:9;35434:36;:::i;:::-;35486:89;35568:6;35563:3;35486:89;:::i;:::-;35479:96;;35606:1;35595:9;35591:17;35622:1;35617:137;;;;35768:1;35763:341;;;;35584:520;;35617:137;35701:4;35697:9;35686;35682:25;35677:3;35670:38;35737:6;35732:3;35728:16;35721:23;;35617:137;;35763:341;35830:38;35862:5;35830:38;:::i;:::-;35890:1;35904:154;35918:6;35915:1;35912:13;35904:154;;;35992:7;35986:14;35982:1;35977:3;35973:11;35966:35;36042:1;36033:7;36029:15;36018:26;;35940:4;35937:1;35933:12;35928:17;;35904:154;;;36087:6;36082:3;36078:16;36071:23;;35770:334;;35584:520;;35372:738;;35265:845;;;;:::o;36116:589::-;36341:3;36363:95;36454:3;36445:6;36363:95;:::i;:::-;36356:102;;36475:95;36566:3;36557:6;36475:95;:::i;:::-;36468:102;;36587:92;36675:3;36666:6;36587:92;:::i;:::-;36580:99;;36696:3;36689:10;;36116:589;;;;;;:::o;36711:225::-;36851:34;36847:1;36839:6;36835:14;36828:58;36920:8;36915:2;36907:6;36903:15;36896:33;36711:225;:::o;36942:366::-;37084:3;37105:67;37169:2;37164:3;37105:67;:::i;:::-;37098:74;;37181:93;37270:3;37181:93;:::i;:::-;37299:2;37294:3;37290:12;37283:19;;36942:366;;;:::o;37314:419::-;37480:4;37518:2;37507:9;37503:18;37495:26;;37567:9;37561:4;37557:20;37553:1;37542:9;37538:17;37531:47;37595:131;37721:4;37595:131;:::i;:::-;37587:139;;37314:419;;;:::o;37739:182::-;37879:34;37875:1;37867:6;37863:14;37856:58;37739:182;:::o;37927:366::-;38069:3;38090:67;38154:2;38149:3;38090:67;:::i;:::-;38083:74;;38166:93;38255:3;38166:93;:::i;:::-;38284:2;38279:3;38275:12;38268:19;;37927:366;;;:::o;38299:419::-;38465:4;38503:2;38492:9;38488:18;38480:26;;38552:9;38546:4;38542:20;38538:1;38527:9;38523:17;38516:47;38580:131;38706:4;38580:131;:::i;:::-;38572:139;;38299:419;;;:::o;38724:224::-;38864:34;38860:1;38852:6;38848:14;38841:58;38933:7;38928:2;38920:6;38916:15;38909:32;38724:224;:::o;38954:366::-;39096:3;39117:67;39181:2;39176:3;39117:67;:::i;:::-;39110:74;;39193:93;39282:3;39193:93;:::i;:::-;39311:2;39306:3;39302:12;39295:19;;38954:366;;;:::o;39326:419::-;39492:4;39530:2;39519:9;39515:18;39507:26;;39579:9;39573:4;39569:20;39565:1;39554:9;39550:17;39543:47;39607:131;39733:4;39607:131;:::i;:::-;39599:139;;39326:419;;;:::o;39751:223::-;39891:34;39887:1;39879:6;39875:14;39868:58;39960:6;39955:2;39947:6;39943:15;39936:31;39751:223;:::o;39980:366::-;40122:3;40143:67;40207:2;40202:3;40143:67;:::i;:::-;40136:74;;40219:93;40308:3;40219:93;:::i;:::-;40337:2;40332:3;40328:12;40321:19;;39980:366;;;:::o;40352:419::-;40518:4;40556:2;40545:9;40541:18;40533:26;;40605:9;40599:4;40595:20;40591:1;40580:9;40576:17;40569:47;40633:131;40759:4;40633:131;:::i;:::-;40625:139;;40352:419;;;:::o;40777:180::-;40825:77;40822:1;40815:88;40922:4;40919:1;40912:15;40946:4;40943:1;40936:15;40963:176;40995:1;41012:20;41030:1;41012:20;:::i;:::-;41007:25;;41046:20;41064:1;41046:20;:::i;:::-;41041:25;;41085:1;41075:35;;41090:18;;:::i;:::-;41075:35;41131:1;41128;41124:9;41119:14;;40963:176;;;;:::o;41145:175::-;41285:27;41281:1;41273:6;41269:14;41262:51;41145:175;:::o;41326:366::-;41468:3;41489:67;41553:2;41548:3;41489:67;:::i;:::-;41482:74;;41565:93;41654:3;41565:93;:::i;:::-;41683:2;41678:3;41674:12;41667:19;;41326:366;;;:::o;41698:419::-;41864:4;41902:2;41891:9;41887:18;41879:26;;41951:9;41945:4;41941:20;41937:1;41926:9;41922:17;41915:47;41979:131;42105:4;41979:131;:::i;:::-;41971:139;;41698:419;;;:::o;42123:237::-;42263:34;42259:1;42251:6;42247:14;42240:58;42332:20;42327:2;42319:6;42315:15;42308:45;42123:237;:::o;42366:366::-;42508:3;42529:67;42593:2;42588:3;42529:67;:::i;:::-;42522:74;;42605:93;42694:3;42605:93;:::i;:::-;42723:2;42718:3;42714:12;42707:19;;42366:366;;;:::o;42738:419::-;42904:4;42942:2;42931:9;42927:18;42919:26;;42991:9;42985:4;42981:20;42977:1;42966:9;42962:17;42955:47;43019:131;43145:4;43019:131;:::i;:::-;43011:139;;42738:419;;;:::o;43163:185::-;43203:1;43220:20;43238:1;43220:20;:::i;:::-;43215:25;;43254:20;43272:1;43254:20;:::i;:::-;43249:25;;43293:1;43283:35;;43298:18;;:::i;:::-;43283:35;43340:1;43337;43333:9;43328:14;;43163:185;;;;:::o;43354:79::-;43393:7;43422:5;43411:16;;43354:79;;;:::o;43439:157::-;43544:45;43564:24;43582:5;43564:24;:::i;:::-;43544:45;:::i;:::-;43539:3;43532:58;43439:157;;:::o;43602:397::-;43742:3;43757:75;43828:3;43819:6;43757:75;:::i;:::-;43857:2;43852:3;43848:12;43841:19;;43870:75;43941:3;43932:6;43870:75;:::i;:::-;43970:2;43965:3;43961:12;43954:19;;43990:3;43983:10;;43602:397;;;;;:::o;44005:98::-;44056:6;44090:5;44084:12;44074:22;;44005:98;;;:::o;44109:168::-;44192:11;44226:6;44221:3;44214:19;44266:4;44261:3;44257:14;44242:29;;44109:168;;;;:::o;44283:360::-;44369:3;44397:38;44429:5;44397:38;:::i;:::-;44451:70;44514:6;44509:3;44451:70;:::i;:::-;44444:77;;44530:52;44575:6;44570:3;44563:4;44556:5;44552:16;44530:52;:::i;:::-;44607:29;44629:6;44607:29;:::i;:::-;44602:3;44598:39;44591:46;;44373:270;44283:360;;;;:::o;44649:640::-;44844:4;44882:3;44871:9;44867:19;44859:27;;44896:71;44964:1;44953:9;44949:17;44940:6;44896:71;:::i;:::-;44977:72;45045:2;45034:9;45030:18;45021:6;44977:72;:::i;:::-;45059;45127:2;45116:9;45112:18;45103:6;45059:72;:::i;:::-;45178:9;45172:4;45168:20;45163:2;45152:9;45148:18;45141:48;45206:76;45277:4;45268:6;45206:76;:::i;:::-;45198:84;;44649:640;;;;;;;:::o;45295:141::-;45351:5;45382:6;45376:13;45367:22;;45398:32;45424:5;45398:32;:::i;:::-;45295:141;;;;:::o;45442:349::-;45511:6;45560:2;45548:9;45539:7;45535:23;45531:32;45528:119;;;45566:79;;:::i;:::-;45528:119;45686:1;45711:63;45766:7;45757:6;45746:9;45742:22;45711:63;:::i;:::-;45701:73;;45657:127;45442:349;;;;:::o;45797:180::-;45845:77;45842:1;45835:88;45942:4;45939:1;45932:15;45966:4;45963:1;45956:15;45983:182;46123:34;46119:1;46111:6;46107:14;46100:58;45983:182;:::o;46171:366::-;46313:3;46334:67;46398:2;46393:3;46334:67;:::i;:::-;46327:74;;46410:93;46499:3;46410:93;:::i;:::-;46528:2;46523:3;46519:12;46512:19;;46171:366;;;:::o;46543:419::-;46709:4;46747:2;46736:9;46732:18;46724:26;;46796:9;46790:4;46786:20;46782:1;46771:9;46767:17;46760:47;46824:131;46950:4;46824:131;:::i;:::-;46816:139;;46543:419;;;:::o;46968:178::-;47108:30;47104:1;47096:6;47092:14;47085:54;46968:178;:::o;47152:366::-;47294:3;47315:67;47379:2;47374:3;47315:67;:::i;:::-;47308:74;;47391:93;47480:3;47391:93;:::i;:::-;47509:2;47504:3;47500:12;47493:19;;47152:366;;;:::o;47524:419::-;47690:4;47728:2;47717:9;47713:18;47705:26;;47777:9;47771:4;47767:20;47763:1;47752:9;47748:17;47741:47;47805:131;47931:4;47805:131;:::i;:::-;47797:139;;47524:419;;;:::o

Swarm Source

ipfs://c6de69f746566cc31e08af8bfd873b26b7e1a95922331b0d60155fe9d0a82f7f
Loading