ETH Price: $2,532.41 (+4.08%)

Wacky Wassies NFT (WWA)
 

Overview

TokenID

24

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
WackyWassiesNFT

Compiler Version
v0.8.3+commit.8d00100c

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-30
*/

/**
 *Submitted for verification at Etherscan.io on 2021-09-19
*/

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

// File: @openzeppelin/contracts/access/Ownable.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;
    }
}


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() {
        _setOwner(_msgSender());
    }

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

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

pragma solidity ^0.8.0;


// File: @openzeppelin/contracts/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

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/utils/Strings.sol

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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


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

pragma solidity ^0.8.0;

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

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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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


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

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

    /**
     * @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/ERC721Enumerable.sol

pragma solidity ^0.8.0;



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

pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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


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

pragma solidity ^0.8.0;


/**
 * @dev ERC721 token with storage based token URI management.
 */
abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;

    // Optional mapping for token URIs
    mapping(uint256 => string) private _tokenURIs;

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

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();

        // If there is no base URI, return the token URI.
        if (bytes(base).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(base, _tokenURI));
        }

        return super.tokenURI(tokenId);
    }

    /**
     * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
    }

    /**
     * @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 override {
        super._burn(tokenId);

        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}


pragma solidity 0.8.3;

contract WackyWassiesNFT is ERC721, ERC721Enumerable,ERC721URIStorage, Ownable {
   using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;
    
    uint16 public constant maxSupply = 3333;
    string private _baseTokenURI = 'https://ipfs.io/ipfs/QmYTgYVACEEyg35HDMnXSVAr6qqfvLjbEg1pKsZm8CePnr/';
    
    uint256 public _mintForAllStartDate = 1640878380;

    constructor() ERC721("Wacky Wassies NFT", "WWA") {
    }
    
    function setMintForAllStartDate(uint256 startDate) public onlyOwner {
        _mintForAllStartDate = startDate;
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal override(ERC721, ERC721Enumerable) {
        super._beforeTokenTransfer(from, to, tokenId);
    }
    
    function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) {
        super._burn(tokenId);
    }

    function supportsInterface(bytes4 interfaceId)
        public
        view
        override(ERC721, ERC721Enumerable)
        returns (bool)
    {
        return super.supportsInterface(interfaceId);
    }


    function setBaseURI(string memory _newbaseTokenURI) public onlyOwner {
        _baseTokenURI = _newbaseTokenURI;
    }

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

    // Get minting limit (for a single transaction) based on current token supply
    function getCurrentMintLimit() public pure returns (uint8) {
        return 10;
    }

    // Get ether price based on current token supply
    function getCurrentPrice() public pure returns (uint64) {
        return 30_000_000_000_000_000;
    }
    
    // Mint new token(s)
    function mint(uint8 _quantityToMint) public payable {
        require(_mintForAllStartDate <= block.timestamp, "Sale is not open");
        require(_quantityToMint >= 1, "Must mint at least 1");
        require(
            _quantityToMint <= getCurrentMintLimit(),
            "Maximum current buy limit for individual transaction exceeded"
        );
        require(
            (_quantityToMint + totalSupply()) <= maxSupply,
            "Exceeds maximum supply"
        );
        require((_quantityToMint + balanceOf(msg.sender)) <= 50, "Max mint per account is 50");
        require(
            msg.value == (getCurrentPrice() * _quantityToMint),
            "Ether submitted does not match current price"
        );

        for (uint8 i = 0; i < _quantityToMint; i++) {
            _tokenIds.increment();

            uint256 newItemId = _tokenIds.current();
            _mint(msg.sender, newItemId);
        }
    }
    
    function tokenURI(uint256 tokenId)
        public
        view
        override(ERC721, ERC721URIStorage)
        returns (string memory)
    {
        return super.tokenURI(tokenId);
    }

    // Withdraw ether from contract
    function withdraw() public onlyOwner {
        require(address(this).balance > 0, "Balance must be positive");
        
        uint256 _balance = address(this).balance;
        address _coldWallet = 0xB53D46e597E0Eb62b07017cd9073cb7d6ef8A4DC;
        payable(_coldWallet).transfer((_balance * 8)/10);
        
        address _devWallet = 0xb58957e9F5517215Ff15ca57eAc08398E19EE7B9;
        payable(_devWallet).transfer((_balance * 2)/10);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_mintForAllStartDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentMintLimit","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getCurrentPrice","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"pure","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":"maxSupply","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_quantityToMint","type":"uint8"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"_newbaseTokenURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"startDate","type":"uint256"}],"name":"setMintForAllStartDate","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":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060800160405280604481526020016200465d60449139600d908051906020019062000035929190620001e0565b506361cdd12c600e553480156200004b57600080fd5b506040518060400160405280601181526020017f5761636b792057617373696573204e46540000000000000000000000000000008152506040518060400160405280600381526020017f57574100000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000d0929190620001e0565b508060019080519060200190620000e9929190620001e0565b5050506200010c620001006200011260201b60201c565b6200011a60201b60201c565b620002f5565b600033905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001ee9062000290565b90600052602060002090601f0160209004810192826200021257600085556200025e565b82601f106200022d57805160ff19168380011785556200025e565b828001600101855582156200025e579182015b828111156200025d57825182559160200191906001019062000240565b5b5090506200026d919062000271565b5090565b5b808211156200028c57600081600090555060010162000272565b5090565b60006002820490506001821680620002a957607f821691505b60208210811415620002c057620002bf620002c6565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61435880620003056000396000f3fe60806040526004361061019c5760003560e01c80636352211e116100ec578063a22cb4651161008a578063d5abeb0111610064578063d5abeb01146105b7578063e985e9c5146105e2578063eb91d37e1461061f578063f2fde38b1461064a5761019c565b8063a22cb46514610528578063b88d4fde14610551578063c87b56dd1461057a5761019c565b8063715018a6116100c6578063715018a6146104925780638da5cb5b146104a957806395d89b41146104d45780639d12006a146104ff5761019c565b80636352211e146103fc5780636ecd23061461043957806370a08231146104555761019c565b80632f745c59116101595780633ccfd60b116101335780633ccfd60b1461035657806342842e0e1461036d5780634f6ccce71461039657806355f804b3146103d35761019c565b80632f745c59146102c3578063339181d9146103005780633cc420941461032b5761019c565b806301ffc9a7146101a157806306fdde03146101de578063081812fc14610209578063095ea7b31461024657806318160ddd1461026f57806323b872dd1461029a575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c39190612d41565b610673565b6040516101d5919061333c565b60405180910390f35b3480156101ea57600080fd5b506101f3610685565b6040516102009190613357565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b9190612dd4565b610717565b60405161023d91906132d5565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190612d05565b61079c565b005b34801561027b57600080fd5b506102846108b4565b60405161029191906136d4565b60405180910390f35b3480156102a657600080fd5b506102c160048036038101906102bc9190612bff565b6108c1565b005b3480156102cf57600080fd5b506102ea60048036038101906102e59190612d05565b610921565b6040516102f791906136d4565b60405180910390f35b34801561030c57600080fd5b506103156109c6565b604051610322919061370a565b60405180910390f35b34801561033757600080fd5b506103406109cf565b60405161034d91906136d4565b60405180910390f35b34801561036257600080fd5b5061036b6109d5565b005b34801561037957600080fd5b50610394600480360381019061038f9190612bff565b610b8e565b005b3480156103a257600080fd5b506103bd60048036038101906103b89190612dd4565b610bae565b6040516103ca91906136d4565b60405180910390f35b3480156103df57600080fd5b506103fa60048036038101906103f59190612d93565b610c45565b005b34801561040857600080fd5b50610423600480360381019061041e9190612dd4565b610cdb565b60405161043091906132d5565b60405180910390f35b610453600480360381019061044e9190612dfd565b610d8d565b005b34801561046157600080fd5b5061047c60048036038101906104779190612b9a565b610fcd565b60405161048991906136d4565b60405180910390f35b34801561049e57600080fd5b506104a7611085565b005b3480156104b557600080fd5b506104be61110d565b6040516104cb91906132d5565b60405180910390f35b3480156104e057600080fd5b506104e9611137565b6040516104f69190613357565b60405180910390f35b34801561050b57600080fd5b5061052660048036038101906105219190612dd4565b6111c9565b005b34801561053457600080fd5b5061054f600480360381019061054a9190612cc9565b61124f565b005b34801561055d57600080fd5b5061057860048036038101906105739190612c4e565b6113d0565b005b34801561058657600080fd5b506105a1600480360381019061059c9190612dd4565b611432565b6040516105ae9190613357565b60405180910390f35b3480156105c357600080fd5b506105cc611444565b6040516105d991906136b9565b60405180910390f35b3480156105ee57600080fd5b5061060960048036038101906106049190612bc3565b61144a565b604051610616919061333c565b60405180910390f35b34801561062b57600080fd5b506106346114de565b60405161064191906136ef565b60405180910390f35b34801561065657600080fd5b50610671600480360381019061066c9190612b9a565b6114ed565b005b600061067e826115e5565b9050919050565b60606000805461069490613a2b565b80601f01602080910402602001604051908101604052809291908181526020018280546106c090613a2b565b801561070d5780601f106106e25761010080835404028352916020019161070d565b820191906000526020600020905b8154815290600101906020018083116106f057829003601f168201915b5050505050905090565b60006107228261165f565b610761576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075890613559565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107a782610cdb565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080f906135d9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108376116cb565b73ffffffffffffffffffffffffffffffffffffffff1614806108665750610865816108606116cb565b61144a565b5b6108a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089c906134b9565b60405180910390fd5b6108af83836116d3565b505050565b6000600880549050905090565b6108d26108cc6116cb565b8261178c565b610911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090890613659565b60405180910390fd5b61091c83838361186a565b505050565b600061092c83610fcd565b821061096d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096490613379565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000600a905090565b600e5481565b6109dd6116cb565b73ffffffffffffffffffffffffffffffffffffffff166109fb61110d565b73ffffffffffffffffffffffffffffffffffffffff1614610a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4890613579565b60405180910390fd5b60004711610a94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8b90613419565b60405180910390fd5b6000479050600073b53d46e597e0eb62b07017cd9073cb7d6ef8a4dc90508073ffffffffffffffffffffffffffffffffffffffff166108fc600a600885610adb9190613876565b610ae59190613845565b9081150290604051600060405180830381858888f19350505050158015610b10573d6000803e3d6000fd5b50600073b58957e9f5517215ff15ca57eac08398e19ee7b990508073ffffffffffffffffffffffffffffffffffffffff166108fc600a600286610b539190613876565b610b5d9190613845565b9081150290604051600060405180830381858888f19350505050158015610b88573d6000803e3d6000fd5b50505050565b610ba9838383604051806020016040528060008152506113d0565b505050565b6000610bb86108b4565b8210610bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf090613699565b60405180910390fd5b60088281548110610c33577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610c4d6116cb565b73ffffffffffffffffffffffffffffffffffffffff16610c6b61110d565b73ffffffffffffffffffffffffffffffffffffffff1614610cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb890613579565b60405180910390fd5b80600d9080519060200190610cd79291906129a9565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7b906134f9565b60405180910390fd5b80915050919050565b42600e541115610dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc990613639565b60405180910390fd5b60018160ff161015610e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1090613619565b60405180910390fd5b610e216109c6565b60ff168160ff161115610e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6090613439565b60405180910390fd5b610d0561ffff16610e786108b4565b8260ff16610e8691906137ef565b1115610ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebe906135f9565b60405180910390fd5b6032610ed233610fcd565b8260ff16610ee091906137ef565b1115610f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1890613679565b60405180910390fd5b8060ff16610f2d6114de565b610f3791906138d0565b67ffffffffffffffff163414610f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7990613399565b60405180910390fd5b60005b8160ff168160ff161015610fc957610f9d600c611ac6565b6000610fa9600c611adc565b9050610fb53382611aea565b508080610fc190613ad7565b915050610f85565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561103e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611035906134d9565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61108d6116cb565b73ffffffffffffffffffffffffffffffffffffffff166110ab61110d565b73ffffffffffffffffffffffffffffffffffffffff1614611101576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f890613579565b60405180910390fd5b61110b6000611cb8565b565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461114690613a2b565b80601f016020809104026020016040519081016040528092919081815260200182805461117290613a2b565b80156111bf5780601f10611194576101008083540402835291602001916111bf565b820191906000526020600020905b8154815290600101906020018083116111a257829003601f168201915b5050505050905090565b6111d16116cb565b73ffffffffffffffffffffffffffffffffffffffff166111ef61110d565b73ffffffffffffffffffffffffffffffffffffffff1614611245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123c90613579565b60405180910390fd5b80600e8190555050565b6112576116cb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bc90613479565b60405180910390fd5b80600560006112d26116cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661137f6116cb565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113c4919061333c565b60405180910390a35050565b6113e16113db6116cb565b8361178c565b611420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141790613659565b60405180910390fd5b61142c84848484611d7e565b50505050565b606061143d82611dda565b9050919050565b610d0581565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000666a94d74f430000905090565b6114f56116cb565b73ffffffffffffffffffffffffffffffffffffffff1661151361110d565b73ffffffffffffffffffffffffffffffffffffffff1614611569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156090613579565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d0906133d9565b60405180910390fd5b6115e281611cb8565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611658575061165782611f2c565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661174683610cdb565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006117978261165f565b6117d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cd90613499565b60405180910390fd5b60006117e183610cdb565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061185057508373ffffffffffffffffffffffffffffffffffffffff1661183884610717565b73ffffffffffffffffffffffffffffffffffffffff16145b806118615750611860818561144a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661188a82610cdb565b73ffffffffffffffffffffffffffffffffffffffff16146118e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d790613599565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611950576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194790613459565b60405180910390fd5b61195b83838361200e565b6119666000826116d3565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119b69190613912565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a0d91906137ef565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6001816000016000828254019250508190555050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5190613519565b60405180910390fd5b611b638161165f565b15611ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9a906133f9565b60405180910390fd5b611baf6000838361200e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bff91906137ef565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611d8984848461186a565b611d958484848461201e565b611dd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcb906133b9565b60405180910390fd5b50505050565b6060611de58261165f565b611e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1b90613539565b60405180910390fd5b6000600a60008481526020019081526020016000208054611e4490613a2b565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7090613a2b565b8015611ebd5780601f10611e9257610100808354040283529160200191611ebd565b820191906000526020600020905b815481529060010190602001808311611ea057829003601f168201915b505050505090506000611ece6121b5565b9050600081511415611ee4578192505050611f27565b600082511115611f19578082604051602001611f019291906132b1565b60405160208183030381529060405292505050611f27565b611f2284612247565b925050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611ff757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806120075750612006826122ee565b5b9050919050565b612019838383612358565b505050565b600061203f8473ffffffffffffffffffffffffffffffffffffffff1661246c565b156121a8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026120686116cb565b8786866040518563ffffffff1660e01b815260040161208a94939291906132f0565b602060405180830381600087803b1580156120a457600080fd5b505af19250505080156120d557506040513d601f19601f820116820180604052508101906120d29190612d6a565b60015b612158573d8060008114612105576040519150601f19603f3d011682016040523d82523d6000602084013e61210a565b606091505b50600081511415612150576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612147906133b9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506121ad565b600190505b949350505050565b6060600d80546121c490613a2b565b80601f01602080910402602001604051908101604052809291908181526020018280546121f090613a2b565b801561223d5780601f106122125761010080835404028352916020019161223d565b820191906000526020600020905b81548152906001019060200180831161222057829003601f168201915b5050505050905090565b60606122528261165f565b612291576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612288906135b9565b60405180910390fd5b600061229b6121b5565b905060008151116122bb57604051806020016040528060008152506122e6565b806122c58461247f565b6040516020016122d69291906132b1565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61236383838361262c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123a6576123a181612631565b6123e5565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146123e4576123e3838261267a565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561242857612423816127e7565b612467565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461246657612465828261292a565b5b5b505050565b600080823b905060008111915050919050565b606060008214156124c7576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612627565b600082905060005b600082146124f95780806124e290613a8e565b915050600a826124f29190613845565b91506124cf565b60008167ffffffffffffffff81111561253b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561256d5781602001600182028036833780820191505090505b5090505b60008514612620576001826125869190613912565b9150600a856125959190613b01565b60306125a191906137ef565b60f81b8183815181106125dd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126199190613845565b9450612571565b8093505050505b919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161268784610fcd565b6126919190613912565b9050600060076000848152602001908152602001600020549050818114612776576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506127fb9190613912565b9050600060096000848152602001908152602001600020549050600060088381548110612851577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612899577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061290e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061293583610fcd565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b8280546129b590613a2b565b90600052602060002090601f0160209004810192826129d75760008555612a1e565b82601f106129f057805160ff1916838001178555612a1e565b82800160010185558215612a1e579182015b82811115612a1d578251825591602001919060010190612a02565b5b509050612a2b9190612a2f565b5090565b5b80821115612a48576000816000905550600101612a30565b5090565b6000612a5f612a5a8461374a565b613725565b905082815260208101848484011115612a7757600080fd5b612a828482856139e9565b509392505050565b6000612a9d612a988461377b565b613725565b905082815260208101848484011115612ab557600080fd5b612ac08482856139e9565b509392505050565b600081359050612ad7816142af565b92915050565b600081359050612aec816142c6565b92915050565b600081359050612b01816142dd565b92915050565b600081519050612b16816142dd565b92915050565b600082601f830112612b2d57600080fd5b8135612b3d848260208601612a4c565b91505092915050565b600082601f830112612b5757600080fd5b8135612b67848260208601612a8a565b91505092915050565b600081359050612b7f816142f4565b92915050565b600081359050612b948161430b565b92915050565b600060208284031215612bac57600080fd5b6000612bba84828501612ac8565b91505092915050565b60008060408385031215612bd657600080fd5b6000612be485828601612ac8565b9250506020612bf585828601612ac8565b9150509250929050565b600080600060608486031215612c1457600080fd5b6000612c2286828701612ac8565b9350506020612c3386828701612ac8565b9250506040612c4486828701612b70565b9150509250925092565b60008060008060808587031215612c6457600080fd5b6000612c7287828801612ac8565b9450506020612c8387828801612ac8565b9350506040612c9487828801612b70565b925050606085013567ffffffffffffffff811115612cb157600080fd5b612cbd87828801612b1c565b91505092959194509250565b60008060408385031215612cdc57600080fd5b6000612cea85828601612ac8565b9250506020612cfb85828601612add565b9150509250929050565b60008060408385031215612d1857600080fd5b6000612d2685828601612ac8565b9250506020612d3785828601612b70565b9150509250929050565b600060208284031215612d5357600080fd5b6000612d6184828501612af2565b91505092915050565b600060208284031215612d7c57600080fd5b6000612d8a84828501612b07565b91505092915050565b600060208284031215612da557600080fd5b600082013567ffffffffffffffff811115612dbf57600080fd5b612dcb84828501612b46565b91505092915050565b600060208284031215612de657600080fd5b6000612df484828501612b70565b91505092915050565b600060208284031215612e0f57600080fd5b6000612e1d84828501612b85565b91505092915050565b612e2f81613946565b82525050565b612e3e81613958565b82525050565b6000612e4f826137ac565b612e5981856137c2565b9350612e698185602086016139f8565b612e7281613bee565b840191505092915050565b6000612e88826137b7565b612e9281856137d3565b9350612ea28185602086016139f8565b612eab81613bee565b840191505092915050565b6000612ec1826137b7565b612ecb81856137e4565b9350612edb8185602086016139f8565b80840191505092915050565b6000612ef4602b836137d3565b9150612eff82613bff565b604082019050919050565b6000612f17602c836137d3565b9150612f2282613c4e565b604082019050919050565b6000612f3a6032836137d3565b9150612f4582613c9d565b604082019050919050565b6000612f5d6026836137d3565b9150612f6882613cec565b604082019050919050565b6000612f80601c836137d3565b9150612f8b82613d3b565b602082019050919050565b6000612fa36018836137d3565b9150612fae82613d64565b602082019050919050565b6000612fc6603d836137d3565b9150612fd182613d8d565b604082019050919050565b6000612fe96024836137d3565b9150612ff482613ddc565b604082019050919050565b600061300c6019836137d3565b915061301782613e2b565b602082019050919050565b600061302f602c836137d3565b915061303a82613e54565b604082019050919050565b60006130526038836137d3565b915061305d82613ea3565b604082019050919050565b6000613075602a836137d3565b915061308082613ef2565b604082019050919050565b60006130986029836137d3565b91506130a382613f41565b604082019050919050565b60006130bb6020836137d3565b91506130c682613f90565b602082019050919050565b60006130de6031836137d3565b91506130e982613fb9565b604082019050919050565b6000613101602c836137d3565b915061310c82614008565b604082019050919050565b60006131246020836137d3565b915061312f82614057565b602082019050919050565b60006131476029836137d3565b915061315282614080565b604082019050919050565b600061316a602f836137d3565b9150613175826140cf565b604082019050919050565b600061318d6021836137d3565b91506131988261411e565b604082019050919050565b60006131b06016836137d3565b91506131bb8261416d565b602082019050919050565b60006131d36014836137d3565b91506131de82614196565b602082019050919050565b60006131f66010836137d3565b9150613201826141bf565b602082019050919050565b60006132196031836137d3565b9150613224826141e8565b604082019050919050565b600061323c601a836137d3565b915061324782614237565b602082019050919050565b600061325f602c836137d3565b915061326a82614260565b604082019050919050565b61327e81613990565b82525050565b61328d816139be565b82525050565b61329c816139c8565b82525050565b6132ab816139dc565b82525050565b60006132bd8285612eb6565b91506132c98284612eb6565b91508190509392505050565b60006020820190506132ea6000830184612e26565b92915050565b60006080820190506133056000830187612e26565b6133126020830186612e26565b61331f6040830185613284565b81810360608301526133318184612e44565b905095945050505050565b60006020820190506133516000830184612e35565b92915050565b600060208201905081810360008301526133718184612e7d565b905092915050565b6000602082019050818103600083015261339281612ee7565b9050919050565b600060208201905081810360008301526133b281612f0a565b9050919050565b600060208201905081810360008301526133d281612f2d565b9050919050565b600060208201905081810360008301526133f281612f50565b9050919050565b6000602082019050818103600083015261341281612f73565b9050919050565b6000602082019050818103600083015261343281612f96565b9050919050565b6000602082019050818103600083015261345281612fb9565b9050919050565b6000602082019050818103600083015261347281612fdc565b9050919050565b6000602082019050818103600083015261349281612fff565b9050919050565b600060208201905081810360008301526134b281613022565b9050919050565b600060208201905081810360008301526134d281613045565b9050919050565b600060208201905081810360008301526134f281613068565b9050919050565b600060208201905081810360008301526135128161308b565b9050919050565b60006020820190508181036000830152613532816130ae565b9050919050565b60006020820190508181036000830152613552816130d1565b9050919050565b60006020820190508181036000830152613572816130f4565b9050919050565b6000602082019050818103600083015261359281613117565b9050919050565b600060208201905081810360008301526135b28161313a565b9050919050565b600060208201905081810360008301526135d28161315d565b9050919050565b600060208201905081810360008301526135f281613180565b9050919050565b60006020820190508181036000830152613612816131a3565b9050919050565b60006020820190508181036000830152613632816131c6565b9050919050565b60006020820190508181036000830152613652816131e9565b9050919050565b600060208201905081810360008301526136728161320c565b9050919050565b600060208201905081810360008301526136928161322f565b9050919050565b600060208201905081810360008301526136b281613252565b9050919050565b60006020820190506136ce6000830184613275565b92915050565b60006020820190506136e96000830184613284565b92915050565b60006020820190506137046000830184613293565b92915050565b600060208201905061371f60008301846132a2565b92915050565b600061372f613740565b905061373b8282613a5d565b919050565b6000604051905090565b600067ffffffffffffffff82111561376557613764613bbf565b5b61376e82613bee565b9050602081019050919050565b600067ffffffffffffffff82111561379657613795613bbf565b5b61379f82613bee565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006137fa826139be565b9150613805836139be565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561383a57613839613b32565b5b828201905092915050565b6000613850826139be565b915061385b836139be565b92508261386b5761386a613b61565b5b828204905092915050565b6000613881826139be565b915061388c836139be565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138c5576138c4613b32565b5b828202905092915050565b60006138db826139c8565b91506138e6836139c8565b92508167ffffffffffffffff048311821515161561390757613906613b32565b5b828202905092915050565b600061391d826139be565b9150613928836139be565b92508282101561393b5761393a613b32565b5b828203905092915050565b60006139518261399e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015613a165780820151818401526020810190506139fb565b83811115613a25576000848401525b50505050565b60006002820490506001821680613a4357607f821691505b60208210811415613a5757613a56613b90565b5b50919050565b613a6682613bee565b810181811067ffffffffffffffff82111715613a8557613a84613bbf565b5b80604052505050565b6000613a99826139be565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613acc57613acb613b32565b5b600182019050919050565b6000613ae2826139dc565b915060ff821415613af657613af5613b32565b5b600182019050919050565b6000613b0c826139be565b9150613b17836139be565b925082613b2757613b26613b61565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4574686572207375626d697474656420646f6573206e6f74206d61746368206360008201527f757272656e742070726963650000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f42616c616e6365206d75737420626520706f7369746976650000000000000000600082015250565b7f4d6178696d756d2063757272656e7420627579206c696d697420666f7220696e60008201527f646976696475616c207472616e73616374696f6e206578636565646564000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c7900000000000000000000600082015250565b7f4d757374206d696e74206174206c656173742031000000000000000000000000600082015250565b7f53616c65206973206e6f74206f70656e00000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d6178206d696e7420706572206163636f756e74206973203530000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6142b881613946565b81146142c357600080fd5b50565b6142cf81613958565b81146142da57600080fd5b50565b6142e681613964565b81146142f157600080fd5b50565b6142fd816139be565b811461430857600080fd5b50565b614314816139dc565b811461431f57600080fd5b5056fea264697066735822122022e7e2c10075ac63144c23b42402704cfdd31fb952731859e07e7546562cc9e264736f6c6343000803003368747470733a2f2f697066732e696f2f697066732f516d5954675956414345457967333548444d6e585356417236717166764c6a62456731704b735a6d384365506e722f

Deployed Bytecode

0x60806040526004361061019c5760003560e01c80636352211e116100ec578063a22cb4651161008a578063d5abeb0111610064578063d5abeb01146105b7578063e985e9c5146105e2578063eb91d37e1461061f578063f2fde38b1461064a5761019c565b8063a22cb46514610528578063b88d4fde14610551578063c87b56dd1461057a5761019c565b8063715018a6116100c6578063715018a6146104925780638da5cb5b146104a957806395d89b41146104d45780639d12006a146104ff5761019c565b80636352211e146103fc5780636ecd23061461043957806370a08231146104555761019c565b80632f745c59116101595780633ccfd60b116101335780633ccfd60b1461035657806342842e0e1461036d5780634f6ccce71461039657806355f804b3146103d35761019c565b80632f745c59146102c3578063339181d9146103005780633cc420941461032b5761019c565b806301ffc9a7146101a157806306fdde03146101de578063081812fc14610209578063095ea7b31461024657806318160ddd1461026f57806323b872dd1461029a575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c39190612d41565b610673565b6040516101d5919061333c565b60405180910390f35b3480156101ea57600080fd5b506101f3610685565b6040516102009190613357565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b9190612dd4565b610717565b60405161023d91906132d5565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190612d05565b61079c565b005b34801561027b57600080fd5b506102846108b4565b60405161029191906136d4565b60405180910390f35b3480156102a657600080fd5b506102c160048036038101906102bc9190612bff565b6108c1565b005b3480156102cf57600080fd5b506102ea60048036038101906102e59190612d05565b610921565b6040516102f791906136d4565b60405180910390f35b34801561030c57600080fd5b506103156109c6565b604051610322919061370a565b60405180910390f35b34801561033757600080fd5b506103406109cf565b60405161034d91906136d4565b60405180910390f35b34801561036257600080fd5b5061036b6109d5565b005b34801561037957600080fd5b50610394600480360381019061038f9190612bff565b610b8e565b005b3480156103a257600080fd5b506103bd60048036038101906103b89190612dd4565b610bae565b6040516103ca91906136d4565b60405180910390f35b3480156103df57600080fd5b506103fa60048036038101906103f59190612d93565b610c45565b005b34801561040857600080fd5b50610423600480360381019061041e9190612dd4565b610cdb565b60405161043091906132d5565b60405180910390f35b610453600480360381019061044e9190612dfd565b610d8d565b005b34801561046157600080fd5b5061047c60048036038101906104779190612b9a565b610fcd565b60405161048991906136d4565b60405180910390f35b34801561049e57600080fd5b506104a7611085565b005b3480156104b557600080fd5b506104be61110d565b6040516104cb91906132d5565b60405180910390f35b3480156104e057600080fd5b506104e9611137565b6040516104f69190613357565b60405180910390f35b34801561050b57600080fd5b5061052660048036038101906105219190612dd4565b6111c9565b005b34801561053457600080fd5b5061054f600480360381019061054a9190612cc9565b61124f565b005b34801561055d57600080fd5b5061057860048036038101906105739190612c4e565b6113d0565b005b34801561058657600080fd5b506105a1600480360381019061059c9190612dd4565b611432565b6040516105ae9190613357565b60405180910390f35b3480156105c357600080fd5b506105cc611444565b6040516105d991906136b9565b60405180910390f35b3480156105ee57600080fd5b5061060960048036038101906106049190612bc3565b61144a565b604051610616919061333c565b60405180910390f35b34801561062b57600080fd5b506106346114de565b60405161064191906136ef565b60405180910390f35b34801561065657600080fd5b50610671600480360381019061066c9190612b9a565b6114ed565b005b600061067e826115e5565b9050919050565b60606000805461069490613a2b565b80601f01602080910402602001604051908101604052809291908181526020018280546106c090613a2b565b801561070d5780601f106106e25761010080835404028352916020019161070d565b820191906000526020600020905b8154815290600101906020018083116106f057829003601f168201915b5050505050905090565b60006107228261165f565b610761576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075890613559565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107a782610cdb565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080f906135d9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108376116cb565b73ffffffffffffffffffffffffffffffffffffffff1614806108665750610865816108606116cb565b61144a565b5b6108a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089c906134b9565b60405180910390fd5b6108af83836116d3565b505050565b6000600880549050905090565b6108d26108cc6116cb565b8261178c565b610911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090890613659565b60405180910390fd5b61091c83838361186a565b505050565b600061092c83610fcd565b821061096d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096490613379565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000600a905090565b600e5481565b6109dd6116cb565b73ffffffffffffffffffffffffffffffffffffffff166109fb61110d565b73ffffffffffffffffffffffffffffffffffffffff1614610a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4890613579565b60405180910390fd5b60004711610a94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8b90613419565b60405180910390fd5b6000479050600073b53d46e597e0eb62b07017cd9073cb7d6ef8a4dc90508073ffffffffffffffffffffffffffffffffffffffff166108fc600a600885610adb9190613876565b610ae59190613845565b9081150290604051600060405180830381858888f19350505050158015610b10573d6000803e3d6000fd5b50600073b58957e9f5517215ff15ca57eac08398e19ee7b990508073ffffffffffffffffffffffffffffffffffffffff166108fc600a600286610b539190613876565b610b5d9190613845565b9081150290604051600060405180830381858888f19350505050158015610b88573d6000803e3d6000fd5b50505050565b610ba9838383604051806020016040528060008152506113d0565b505050565b6000610bb86108b4565b8210610bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf090613699565b60405180910390fd5b60088281548110610c33577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610c4d6116cb565b73ffffffffffffffffffffffffffffffffffffffff16610c6b61110d565b73ffffffffffffffffffffffffffffffffffffffff1614610cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb890613579565b60405180910390fd5b80600d9080519060200190610cd79291906129a9565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7b906134f9565b60405180910390fd5b80915050919050565b42600e541115610dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc990613639565b60405180910390fd5b60018160ff161015610e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1090613619565b60405180910390fd5b610e216109c6565b60ff168160ff161115610e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6090613439565b60405180910390fd5b610d0561ffff16610e786108b4565b8260ff16610e8691906137ef565b1115610ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebe906135f9565b60405180910390fd5b6032610ed233610fcd565b8260ff16610ee091906137ef565b1115610f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1890613679565b60405180910390fd5b8060ff16610f2d6114de565b610f3791906138d0565b67ffffffffffffffff163414610f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7990613399565b60405180910390fd5b60005b8160ff168160ff161015610fc957610f9d600c611ac6565b6000610fa9600c611adc565b9050610fb53382611aea565b508080610fc190613ad7565b915050610f85565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561103e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611035906134d9565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61108d6116cb565b73ffffffffffffffffffffffffffffffffffffffff166110ab61110d565b73ffffffffffffffffffffffffffffffffffffffff1614611101576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f890613579565b60405180910390fd5b61110b6000611cb8565b565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461114690613a2b565b80601f016020809104026020016040519081016040528092919081815260200182805461117290613a2b565b80156111bf5780601f10611194576101008083540402835291602001916111bf565b820191906000526020600020905b8154815290600101906020018083116111a257829003601f168201915b5050505050905090565b6111d16116cb565b73ffffffffffffffffffffffffffffffffffffffff166111ef61110d565b73ffffffffffffffffffffffffffffffffffffffff1614611245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123c90613579565b60405180910390fd5b80600e8190555050565b6112576116cb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bc90613479565b60405180910390fd5b80600560006112d26116cb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661137f6116cb565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113c4919061333c565b60405180910390a35050565b6113e16113db6116cb565b8361178c565b611420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141790613659565b60405180910390fd5b61142c84848484611d7e565b50505050565b606061143d82611dda565b9050919050565b610d0581565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000666a94d74f430000905090565b6114f56116cb565b73ffffffffffffffffffffffffffffffffffffffff1661151361110d565b73ffffffffffffffffffffffffffffffffffffffff1614611569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156090613579565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d0906133d9565b60405180910390fd5b6115e281611cb8565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611658575061165782611f2c565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661174683610cdb565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006117978261165f565b6117d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cd90613499565b60405180910390fd5b60006117e183610cdb565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061185057508373ffffffffffffffffffffffffffffffffffffffff1661183884610717565b73ffffffffffffffffffffffffffffffffffffffff16145b806118615750611860818561144a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661188a82610cdb565b73ffffffffffffffffffffffffffffffffffffffff16146118e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d790613599565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611950576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194790613459565b60405180910390fd5b61195b83838361200e565b6119666000826116d3565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119b69190613912565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a0d91906137ef565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6001816000016000828254019250508190555050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5190613519565b60405180910390fd5b611b638161165f565b15611ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9a906133f9565b60405180910390fd5b611baf6000838361200e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bff91906137ef565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611d8984848461186a565b611d958484848461201e565b611dd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcb906133b9565b60405180910390fd5b50505050565b6060611de58261165f565b611e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1b90613539565b60405180910390fd5b6000600a60008481526020019081526020016000208054611e4490613a2b565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7090613a2b565b8015611ebd5780601f10611e9257610100808354040283529160200191611ebd565b820191906000526020600020905b815481529060010190602001808311611ea057829003601f168201915b505050505090506000611ece6121b5565b9050600081511415611ee4578192505050611f27565b600082511115611f19578082604051602001611f019291906132b1565b60405160208183030381529060405292505050611f27565b611f2284612247565b925050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611ff757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806120075750612006826122ee565b5b9050919050565b612019838383612358565b505050565b600061203f8473ffffffffffffffffffffffffffffffffffffffff1661246c565b156121a8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026120686116cb565b8786866040518563ffffffff1660e01b815260040161208a94939291906132f0565b602060405180830381600087803b1580156120a457600080fd5b505af19250505080156120d557506040513d601f19601f820116820180604052508101906120d29190612d6a565b60015b612158573d8060008114612105576040519150601f19603f3d011682016040523d82523d6000602084013e61210a565b606091505b50600081511415612150576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612147906133b9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506121ad565b600190505b949350505050565b6060600d80546121c490613a2b565b80601f01602080910402602001604051908101604052809291908181526020018280546121f090613a2b565b801561223d5780601f106122125761010080835404028352916020019161223d565b820191906000526020600020905b81548152906001019060200180831161222057829003601f168201915b5050505050905090565b60606122528261165f565b612291576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612288906135b9565b60405180910390fd5b600061229b6121b5565b905060008151116122bb57604051806020016040528060008152506122e6565b806122c58461247f565b6040516020016122d69291906132b1565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61236383838361262c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123a6576123a181612631565b6123e5565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146123e4576123e3838261267a565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561242857612423816127e7565b612467565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461246657612465828261292a565b5b5b505050565b600080823b905060008111915050919050565b606060008214156124c7576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612627565b600082905060005b600082146124f95780806124e290613a8e565b915050600a826124f29190613845565b91506124cf565b60008167ffffffffffffffff81111561253b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561256d5781602001600182028036833780820191505090505b5090505b60008514612620576001826125869190613912565b9150600a856125959190613b01565b60306125a191906137ef565b60f81b8183815181106125dd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126199190613845565b9450612571565b8093505050505b919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161268784610fcd565b6126919190613912565b9050600060076000848152602001908152602001600020549050818114612776576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506127fb9190613912565b9050600060096000848152602001908152602001600020549050600060088381548110612851577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612899577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061290e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061293583610fcd565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b8280546129b590613a2b565b90600052602060002090601f0160209004810192826129d75760008555612a1e565b82601f106129f057805160ff1916838001178555612a1e565b82800160010185558215612a1e579182015b82811115612a1d578251825591602001919060010190612a02565b5b509050612a2b9190612a2f565b5090565b5b80821115612a48576000816000905550600101612a30565b5090565b6000612a5f612a5a8461374a565b613725565b905082815260208101848484011115612a7757600080fd5b612a828482856139e9565b509392505050565b6000612a9d612a988461377b565b613725565b905082815260208101848484011115612ab557600080fd5b612ac08482856139e9565b509392505050565b600081359050612ad7816142af565b92915050565b600081359050612aec816142c6565b92915050565b600081359050612b01816142dd565b92915050565b600081519050612b16816142dd565b92915050565b600082601f830112612b2d57600080fd5b8135612b3d848260208601612a4c565b91505092915050565b600082601f830112612b5757600080fd5b8135612b67848260208601612a8a565b91505092915050565b600081359050612b7f816142f4565b92915050565b600081359050612b948161430b565b92915050565b600060208284031215612bac57600080fd5b6000612bba84828501612ac8565b91505092915050565b60008060408385031215612bd657600080fd5b6000612be485828601612ac8565b9250506020612bf585828601612ac8565b9150509250929050565b600080600060608486031215612c1457600080fd5b6000612c2286828701612ac8565b9350506020612c3386828701612ac8565b9250506040612c4486828701612b70565b9150509250925092565b60008060008060808587031215612c6457600080fd5b6000612c7287828801612ac8565b9450506020612c8387828801612ac8565b9350506040612c9487828801612b70565b925050606085013567ffffffffffffffff811115612cb157600080fd5b612cbd87828801612b1c565b91505092959194509250565b60008060408385031215612cdc57600080fd5b6000612cea85828601612ac8565b9250506020612cfb85828601612add565b9150509250929050565b60008060408385031215612d1857600080fd5b6000612d2685828601612ac8565b9250506020612d3785828601612b70565b9150509250929050565b600060208284031215612d5357600080fd5b6000612d6184828501612af2565b91505092915050565b600060208284031215612d7c57600080fd5b6000612d8a84828501612b07565b91505092915050565b600060208284031215612da557600080fd5b600082013567ffffffffffffffff811115612dbf57600080fd5b612dcb84828501612b46565b91505092915050565b600060208284031215612de657600080fd5b6000612df484828501612b70565b91505092915050565b600060208284031215612e0f57600080fd5b6000612e1d84828501612b85565b91505092915050565b612e2f81613946565b82525050565b612e3e81613958565b82525050565b6000612e4f826137ac565b612e5981856137c2565b9350612e698185602086016139f8565b612e7281613bee565b840191505092915050565b6000612e88826137b7565b612e9281856137d3565b9350612ea28185602086016139f8565b612eab81613bee565b840191505092915050565b6000612ec1826137b7565b612ecb81856137e4565b9350612edb8185602086016139f8565b80840191505092915050565b6000612ef4602b836137d3565b9150612eff82613bff565b604082019050919050565b6000612f17602c836137d3565b9150612f2282613c4e565b604082019050919050565b6000612f3a6032836137d3565b9150612f4582613c9d565b604082019050919050565b6000612f5d6026836137d3565b9150612f6882613cec565b604082019050919050565b6000612f80601c836137d3565b9150612f8b82613d3b565b602082019050919050565b6000612fa36018836137d3565b9150612fae82613d64565b602082019050919050565b6000612fc6603d836137d3565b9150612fd182613d8d565b604082019050919050565b6000612fe96024836137d3565b9150612ff482613ddc565b604082019050919050565b600061300c6019836137d3565b915061301782613e2b565b602082019050919050565b600061302f602c836137d3565b915061303a82613e54565b604082019050919050565b60006130526038836137d3565b915061305d82613ea3565b604082019050919050565b6000613075602a836137d3565b915061308082613ef2565b604082019050919050565b60006130986029836137d3565b91506130a382613f41565b604082019050919050565b60006130bb6020836137d3565b91506130c682613f90565b602082019050919050565b60006130de6031836137d3565b91506130e982613fb9565b604082019050919050565b6000613101602c836137d3565b915061310c82614008565b604082019050919050565b60006131246020836137d3565b915061312f82614057565b602082019050919050565b60006131476029836137d3565b915061315282614080565b604082019050919050565b600061316a602f836137d3565b9150613175826140cf565b604082019050919050565b600061318d6021836137d3565b91506131988261411e565b604082019050919050565b60006131b06016836137d3565b91506131bb8261416d565b602082019050919050565b60006131d36014836137d3565b91506131de82614196565b602082019050919050565b60006131f66010836137d3565b9150613201826141bf565b602082019050919050565b60006132196031836137d3565b9150613224826141e8565b604082019050919050565b600061323c601a836137d3565b915061324782614237565b602082019050919050565b600061325f602c836137d3565b915061326a82614260565b604082019050919050565b61327e81613990565b82525050565b61328d816139be565b82525050565b61329c816139c8565b82525050565b6132ab816139dc565b82525050565b60006132bd8285612eb6565b91506132c98284612eb6565b91508190509392505050565b60006020820190506132ea6000830184612e26565b92915050565b60006080820190506133056000830187612e26565b6133126020830186612e26565b61331f6040830185613284565b81810360608301526133318184612e44565b905095945050505050565b60006020820190506133516000830184612e35565b92915050565b600060208201905081810360008301526133718184612e7d565b905092915050565b6000602082019050818103600083015261339281612ee7565b9050919050565b600060208201905081810360008301526133b281612f0a565b9050919050565b600060208201905081810360008301526133d281612f2d565b9050919050565b600060208201905081810360008301526133f281612f50565b9050919050565b6000602082019050818103600083015261341281612f73565b9050919050565b6000602082019050818103600083015261343281612f96565b9050919050565b6000602082019050818103600083015261345281612fb9565b9050919050565b6000602082019050818103600083015261347281612fdc565b9050919050565b6000602082019050818103600083015261349281612fff565b9050919050565b600060208201905081810360008301526134b281613022565b9050919050565b600060208201905081810360008301526134d281613045565b9050919050565b600060208201905081810360008301526134f281613068565b9050919050565b600060208201905081810360008301526135128161308b565b9050919050565b60006020820190508181036000830152613532816130ae565b9050919050565b60006020820190508181036000830152613552816130d1565b9050919050565b60006020820190508181036000830152613572816130f4565b9050919050565b6000602082019050818103600083015261359281613117565b9050919050565b600060208201905081810360008301526135b28161313a565b9050919050565b600060208201905081810360008301526135d28161315d565b9050919050565b600060208201905081810360008301526135f281613180565b9050919050565b60006020820190508181036000830152613612816131a3565b9050919050565b60006020820190508181036000830152613632816131c6565b9050919050565b60006020820190508181036000830152613652816131e9565b9050919050565b600060208201905081810360008301526136728161320c565b9050919050565b600060208201905081810360008301526136928161322f565b9050919050565b600060208201905081810360008301526136b281613252565b9050919050565b60006020820190506136ce6000830184613275565b92915050565b60006020820190506136e96000830184613284565b92915050565b60006020820190506137046000830184613293565b92915050565b600060208201905061371f60008301846132a2565b92915050565b600061372f613740565b905061373b8282613a5d565b919050565b6000604051905090565b600067ffffffffffffffff82111561376557613764613bbf565b5b61376e82613bee565b9050602081019050919050565b600067ffffffffffffffff82111561379657613795613bbf565b5b61379f82613bee565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006137fa826139be565b9150613805836139be565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561383a57613839613b32565b5b828201905092915050565b6000613850826139be565b915061385b836139be565b92508261386b5761386a613b61565b5b828204905092915050565b6000613881826139be565b915061388c836139be565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138c5576138c4613b32565b5b828202905092915050565b60006138db826139c8565b91506138e6836139c8565b92508167ffffffffffffffff048311821515161561390757613906613b32565b5b828202905092915050565b600061391d826139be565b9150613928836139be565b92508282101561393b5761393a613b32565b5b828203905092915050565b60006139518261399e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015613a165780820151818401526020810190506139fb565b83811115613a25576000848401525b50505050565b60006002820490506001821680613a4357607f821691505b60208210811415613a5757613a56613b90565b5b50919050565b613a6682613bee565b810181811067ffffffffffffffff82111715613a8557613a84613bbf565b5b80604052505050565b6000613a99826139be565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613acc57613acb613b32565b5b600182019050919050565b6000613ae2826139dc565b915060ff821415613af657613af5613b32565b5b600182019050919050565b6000613b0c826139be565b9150613b17836139be565b925082613b2757613b26613b61565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4574686572207375626d697474656420646f6573206e6f74206d61746368206360008201527f757272656e742070726963650000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f42616c616e6365206d75737420626520706f7369746976650000000000000000600082015250565b7f4d6178696d756d2063757272656e7420627579206c696d697420666f7220696e60008201527f646976696475616c207472616e73616374696f6e206578636565646564000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c7900000000000000000000600082015250565b7f4d757374206d696e74206174206c656173742031000000000000000000000000600082015250565b7f53616c65206973206e6f74206f70656e00000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d6178206d696e7420706572206163636f756e74206973203530000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6142b881613946565b81146142c357600080fd5b50565b6142cf81613958565b81146142da57600080fd5b50565b6142e681613964565b81146142f157600080fd5b50565b6142fd816139be565b811461430857600080fd5b50565b614314816139dc565b811461431f57600080fd5b5056fea264697066735822122022e7e2c10075ac63144c23b42402704cfdd31fb952731859e07e7546562cc9e264736f6c63430008030033

Deployed Bytecode Sourcemap

46319:3435:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47256:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26306:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27865:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27388:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38944:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28755:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38612:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47803:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46653:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49296:455;;;;;;;;;;;;;:::i;:::-;;29165:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39134:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47478:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26000:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48094:949;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25730:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3939:94;;;;;;;;;;;;;:::i;:::-;;3288:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26475:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46779:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28158:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29421:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49055:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46493:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28524:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47952:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4188:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47256:212;47395:4;47424:36;47448:11;47424:23;:36::i;:::-;47417:43;;47256:212;;;:::o;26306:100::-;26360:13;26393:5;26386:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26306:100;:::o;27865:221::-;27941:7;27969:16;27977:7;27969;:16::i;:::-;27961:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28054:15;:24;28070:7;28054:24;;;;;;;;;;;;;;;;;;;;;28047:31;;27865:221;;;:::o;27388:411::-;27469:13;27485:23;27500:7;27485:14;:23::i;:::-;27469:39;;27533:5;27527:11;;:2;:11;;;;27519:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27627:5;27611:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27636:37;27653:5;27660:12;:10;:12::i;:::-;27636:16;:37::i;:::-;27611:62;27589:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27770:21;27779:2;27783:7;27770:8;:21::i;:::-;27388:411;;;:::o;38944:113::-;39005:7;39032:10;:17;;;;39025:24;;38944:113;:::o;28755:339::-;28950:41;28969:12;:10;:12::i;:::-;28983:7;28950:18;:41::i;:::-;28942:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29058:28;29068:4;29074:2;29078:7;29058:9;:28::i;:::-;28755:339;;;:::o;38612:256::-;38709:7;38745:23;38762:5;38745:16;:23::i;:::-;38737:5;:31;38729:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38834:12;:19;38847:5;38834:19;;;;;;;;;;;;;;;:26;38854:5;38834:26;;;;;;;;;;;;38827:33;;38612:256;;;;:::o;47803:87::-;47855:5;47880:2;47873:9;;47803:87;:::o;46653:48::-;;;;:::o;49296:455::-;3519:12;:10;:12::i;:::-;3508:23;;:7;:5;:7::i;:::-;:23;;;3500:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49376:1:::1;49352:21;:25;49344:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;49427:16;49446:21;49427:40;;49478:19;49500:42;49478:64;;49561:11;49553:29;;:48;49598:2;49595:1;49584:8;:12;;;;:::i;:::-;49583:17;;;;:::i;:::-;49553:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;49622:18;49643:42;49622:63;;49704:10;49696:28;;:47;49740:2;49737:1;49726:8;:12;;;;:::i;:::-;49725:17;;;;:::i;:::-;49696:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;3579:1;;;49296:455::o:0;29165:185::-;29303:39;29320:4;29326:2;29330:7;29303:39;;;;;;;;;;;;:16;:39::i;:::-;29165:185;;;:::o;39134:233::-;39209:7;39245:30;:28;:30::i;:::-;39237:5;:38;39229:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;39342:10;39353:5;39342:17;;;;;;;;;;;;;;;;;;;;;;;;39335:24;;39134:233;;;:::o;47478:120::-;3519:12;:10;:12::i;:::-;3508:23;;:7;:5;:7::i;:::-;:23;;;3500:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47574:16:::1;47558:13;:32;;;;;;;;;;;;:::i;:::-;;47478:120:::0;:::o;26000:239::-;26072:7;26092:13;26108:7;:16;26116:7;26108:16;;;;;;;;;;;;;;;;;;;;;26092:32;;26160:1;26143:19;;:5;:19;;;;26135:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26226:5;26219:12;;;26000:239;;;:::o;48094:949::-;48189:15;48165:20;;:39;;48157:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48263:1;48244:15;:20;;;;48236:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;48341:21;:19;:21::i;:::-;48322:40;;:15;:40;;;;48300:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;46528:4;48484:46;;48503:13;:11;:13::i;:::-;48485:15;:31;;;;;;:::i;:::-;48484:46;;48462:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;48644:2;48618:21;48628:10;48618:9;:21::i;:::-;48600:15;:39;;;;;;:::i;:::-;48599:47;;48591:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;48744:15;48724:35;;:17;:15;:17::i;:::-;:35;;;;:::i;:::-;48710:50;;:9;:50;48688:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;48850:7;48845:191;48867:15;48863:19;;:1;:19;;;48845:191;;;48904:21;:9;:19;:21::i;:::-;48942:17;48962:19;:9;:17;:19::i;:::-;48942:39;;48996:28;49002:10;49014:9;48996:5;:28::i;:::-;48845:191;48884:3;;;;;:::i;:::-;;;;48845:191;;;;48094:949;:::o;25730:208::-;25802:7;25847:1;25830:19;;:5;:19;;;;25822:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25914:9;:16;25924:5;25914:16;;;;;;;;;;;;;;;;25907:23;;25730:208;;;:::o;3939:94::-;3519:12;:10;:12::i;:::-;3508:23;;:7;:5;:7::i;:::-;:23;;;3500:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4004:21:::1;4022:1;4004:9;:21::i;:::-;3939:94::o:0;3288:87::-;3334:7;3361:6;;;;;;;;;;;3354:13;;3288:87;:::o;26475:104::-;26531:13;26564:7;26557:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26475:104;:::o;46779:119::-;3519:12;:10;:12::i;:::-;3508:23;;:7;:5;:7::i;:::-;:23;;;3500:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46881:9:::1;46858:20;:32;;;;46779:119:::0;:::o;28158:295::-;28273:12;:10;:12::i;:::-;28261:24;;:8;:24;;;;28253:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;28373:8;28328:18;:32;28347:12;:10;:12::i;:::-;28328:32;;;;;;;;;;;;;;;:42;28361:8;28328:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;28426:8;28397:48;;28412:12;:10;:12::i;:::-;28397:48;;;28436:8;28397:48;;;;;;:::i;:::-;;;;;;;;28158:295;;:::o;29421:328::-;29596:41;29615:12;:10;:12::i;:::-;29629:7;29596:18;:41::i;:::-;29588:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29702:39;29716:4;29722:2;29726:7;29735:5;29702:13;:39::i;:::-;29421:328;;;;:::o;49055:196::-;49182:13;49220:23;49235:7;49220:14;:23::i;:::-;49213:30;;49055:196;;;:::o;46493:39::-;46528:4;46493:39;:::o;28524:164::-;28621:4;28645:18;:25;28664:5;28645:25;;;;;;;;;;;;;;;:35;28671:8;28645:35;;;;;;;;;;;;;;;;;;;;;;;;;28638:42;;28524:164;;;;:::o;47952:104::-;48000:6;48026:22;48019:29;;47952:104;:::o;4188:192::-;3519:12;:10;:12::i;:::-;3508:23;;:7;:5;:7::i;:::-;:23;;;3500:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4297:1:::1;4277:22;;:8;:22;;;;4269:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4353:19;4363:8;4353:9;:19::i;:::-;4188:192:::0;:::o;38304:224::-;38406:4;38445:35;38430:50;;;:11;:50;;;;:90;;;;38484:36;38508:11;38484:23;:36::i;:::-;38430:90;38423:97;;38304:224;;;:::o;31259:127::-;31324:4;31376:1;31348:30;;:7;:16;31356:7;31348:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31341:37;;31259:127;;;:::o;2133:98::-;2186:7;2213:10;2206:17;;2133:98;:::o;35241:174::-;35343:2;35316:15;:24;35332:7;35316:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35399:7;35395:2;35361:46;;35370:23;35385:7;35370:14;:23::i;:::-;35361:46;;;;;;;;;;;;35241:174;;:::o;31553:348::-;31646:4;31671:16;31679:7;31671;:16::i;:::-;31663:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31747:13;31763:23;31778:7;31763:14;:23::i;:::-;31747:39;;31816:5;31805:16;;:7;:16;;;:51;;;;31849:7;31825:31;;:20;31837:7;31825:11;:20::i;:::-;:31;;;31805:51;:87;;;;31860:32;31877:5;31884:7;31860:16;:32::i;:::-;31805:87;31797:96;;;31553:348;;;;:::o;34545:578::-;34704:4;34677:31;;:23;34692:7;34677:14;:23::i;:::-;:31;;;34669:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34787:1;34773:16;;:2;:16;;;;34765:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34843:39;34864:4;34870:2;34874:7;34843:20;:39::i;:::-;34947:29;34964:1;34968:7;34947:8;:29::i;:::-;35008:1;34989:9;:15;34999:4;34989:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35037:1;35020:9;:13;35030:2;35020:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35068:2;35049:7;:16;35057:7;35049:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35107:7;35103:2;35088:27;;35097:4;35088:27;;;;;;;;;;;;34545:578;;;:::o;1041:127::-;1148:1;1130:7;:14;;;:19;;;;;;;;;;;1041:127;:::o;919:114::-;984:7;1011;:14;;;1004:21;;919:114;;;:::o;33237:382::-;33331:1;33317:16;;:2;:16;;;;33309:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33390:16;33398:7;33390;:16::i;:::-;33389:17;33381:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33452:45;33481:1;33485:2;33489:7;33452:20;:45::i;:::-;33527:1;33510:9;:13;33520:2;33510:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33558:2;33539:7;:16;33547:7;33539:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33603:7;33599:2;33578:33;;33595:1;33578:33;;;;;;;;;;;;33237:382;;:::o;4388:173::-;4444:16;4463:6;;;;;;;;;;;4444:25;;4489:8;4480:6;;:17;;;;;;;;;;;;;;;;;;4544:8;4513:40;;4534:8;4513:40;;;;;;;;;;;;4388:173;;:::o;30631:315::-;30788:28;30798:4;30804:2;30808:7;30788:9;:28::i;:::-;30835:48;30858:4;30864:2;30868:7;30877:5;30835:22;:48::i;:::-;30827:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30631:315;;;;:::o;44797:679::-;44870:13;44904:16;44912:7;44904;:16::i;:::-;44896:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;44987:23;45013:10;:19;45024:7;45013:19;;;;;;;;;;;44987:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45043:18;45064:10;:8;:10::i;:::-;45043:31;;45172:1;45156:4;45150:18;:23;45146:72;;;45197:9;45190:16;;;;;;45146:72;45348:1;45328:9;45322:23;:27;45318:108;;;45397:4;45403:9;45380:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45366:48;;;;;;45318:108;45445:23;45460:7;45445:14;:23::i;:::-;45438:30;;;;44797:679;;;;:::o;25361:305::-;25463:4;25515:25;25500:40;;;:11;:40;;;;:105;;;;25572:33;25557:48;;;:11;:48;;;;25500:105;:158;;;;25622:36;25646:11;25622:23;:36::i;:::-;25500:158;25480:178;;25361:305;;;:::o;46906:215::-;47068:45;47095:4;47101:2;47105:7;47068:26;:45::i;:::-;46906:215;;;:::o;35980:803::-;36135:4;36156:15;:2;:13;;;:15::i;:::-;36152:624;;;36208:2;36192:36;;;36229:12;:10;:12::i;:::-;36243:4;36249:7;36258:5;36192:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36188:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36455:1;36438:6;:13;:18;36434:272;;;36481:60;;;;;;;;;;:::i;:::-;;;;;;;;36434:272;36656:6;36650:13;36641:6;36637:2;36633:15;36626:38;36188:533;36325:45;;;36315:55;;;:6;:55;;;;36308:62;;;;;36152:624;36760:4;36753:11;;35980:803;;;;;;;:::o;47606:106::-;47658:13;47691;47684:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47606:106;:::o;26650:334::-;26723:13;26757:16;26765:7;26757;:16::i;:::-;26749:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26838:21;26862:10;:8;:10::i;:::-;26838:34;;26914:1;26896:7;26890:21;:25;:86;;;;;;;;;;;;;;;;;26942:7;26951:18;:7;:16;:18::i;:::-;26925:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26890:86;26883:93;;;26650:334;;;:::o;6399:157::-;6484:4;6523:25;6508:40;;;:11;:40;;;;6501:47;;6399:157;;;:::o;39980:589::-;40124:45;40151:4;40157:2;40161:7;40124:26;:45::i;:::-;40202:1;40186:18;;:4;:18;;;40182:187;;;40221:40;40253:7;40221:31;:40::i;:::-;40182:187;;;40291:2;40283:10;;:4;:10;;;40279:90;;40310:47;40343:4;40349:7;40310:32;:47::i;:::-;40279:90;40182:187;40397:1;40383:16;;:2;:16;;;40379:183;;;40416:45;40453:7;40416:36;:45::i;:::-;40379:183;;;40489:4;40483:10;;:2;:10;;;40479:83;;40510:40;40538:2;40542:7;40510:27;:40::i;:::-;40479:83;40379:183;39980:589;;;:::o;9445:387::-;9505:4;9713:12;9780:7;9768:20;9760:28;;9823:1;9816:4;:8;9809:15;;;9445:387;;;:::o;6870:723::-;6926:13;7156:1;7147:5;:10;7143:53;;;7174:10;;;;;;;;;;;;;;;;;;;;;7143:53;7206:12;7221:5;7206:20;;7237:14;7262:78;7277:1;7269:4;:9;7262:78;;7295:8;;;;;:::i;:::-;;;;7326:2;7318:10;;;;;:::i;:::-;;;7262:78;;;7350:19;7382:6;7372:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7350:39;;7400:154;7416:1;7407:5;:10;7400:154;;7444:1;7434:11;;;;;:::i;:::-;;;7511:2;7503:5;:10;;;;:::i;:::-;7490:2;:24;;;;:::i;:::-;7477:39;;7460:6;7467;7460:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;7540:2;7531:11;;;;;:::i;:::-;;;7400:154;;;7578:6;7564:21;;;;;6870:723;;;;:::o;37355:126::-;;;;:::o;41292:164::-;41396:10;:17;;;;41369:15;:24;41385:7;41369:24;;;;;;;;;;;:44;;;;41424:10;41440:7;41424:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41292:164;:::o;42083:988::-;42349:22;42399:1;42374:22;42391:4;42374:16;:22::i;:::-;:26;;;;:::i;:::-;42349:51;;42411:18;42432:17;:26;42450:7;42432:26;;;;;;;;;;;;42411:47;;42579:14;42565:10;:28;42561:328;;42610:19;42632:12;:18;42645:4;42632:18;;;;;;;;;;;;;;;:34;42651:14;42632:34;;;;;;;;;;;;42610:56;;42716:11;42683:12;:18;42696:4;42683:18;;;;;;;;;;;;;;;:30;42702:10;42683:30;;;;;;;;;;;:44;;;;42833:10;42800:17;:30;42818:11;42800:30;;;;;;;;;;;:43;;;;42561:328;;42985:17;:26;43003:7;42985:26;;;;;;;;;;;42978:33;;;43029:12;:18;43042:4;43029:18;;;;;;;;;;;;;;;:34;43048:14;43029:34;;;;;;;;;;;43022:41;;;42083:988;;;;:::o;43366:1079::-;43619:22;43664:1;43644:10;:17;;;;:21;;;;:::i;:::-;43619:46;;43676:18;43697:15;:24;43713:7;43697:24;;;;;;;;;;;;43676:45;;44048:19;44070:10;44081:14;44070:26;;;;;;;;;;;;;;;;;;;;;;;;44048:48;;44134:11;44109:10;44120;44109:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;44245:10;44214:15;:28;44230:11;44214:28;;;;;;;;;;;:41;;;;44386:15;:24;44402:7;44386:24;;;;;;;;;;;44379:31;;;44421:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43366:1079;;;;:::o;40870:221::-;40955:14;40972:20;40989:2;40972:16;:20::i;:::-;40955:37;;41030:7;41003:12;:16;41016:2;41003:16;;;;;;;;;;;;;;;:24;41020:6;41003:24;;;;;;;;;;;:34;;;;41077:6;41048:17;:26;41066:7;41048:26;;;;;;;;;;;:35;;;;40870:221;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:133::-;;933:6;920:20;911:29;;949:30;973:5;949:30;:::i;:::-;901:84;;;;:::o;991:137::-;;1074:6;1061:20;1052:29;;1090:32;1116:5;1090:32;:::i;:::-;1042:86;;;;:::o;1134:141::-;;1221:6;1215:13;1206:22;;1237:32;1263:5;1237:32;:::i;:::-;1196:79;;;;:::o;1294:271::-;;1398:3;1391:4;1383:6;1379:17;1375:27;1365:2;;1416:1;1413;1406:12;1365:2;1456:6;1443:20;1481:78;1555:3;1547:6;1540:4;1532:6;1528:17;1481:78;:::i;:::-;1472:87;;1355:210;;;;;:::o;1585:273::-;;1690:3;1683:4;1675:6;1671:17;1667:27;1657:2;;1708:1;1705;1698:12;1657:2;1748:6;1735:20;1773:79;1848:3;1840:6;1833:4;1825:6;1821:17;1773:79;:::i;:::-;1764:88;;1647:211;;;;;:::o;1864:139::-;;1948:6;1935:20;1926:29;;1964:33;1991:5;1964:33;:::i;:::-;1916:87;;;;:::o;2009:135::-;;2091:6;2078:20;2069:29;;2107:31;2132:5;2107:31;:::i;:::-;2059:85;;;;:::o;2150:262::-;;2258:2;2246:9;2237:7;2233:23;2229:32;2226:2;;;2274:1;2271;2264:12;2226:2;2317:1;2342:53;2387:7;2378:6;2367:9;2363:22;2342:53;:::i;:::-;2332:63;;2288:117;2216:196;;;;:::o;2418:407::-;;;2543:2;2531:9;2522:7;2518:23;2514:32;2511:2;;;2559:1;2556;2549:12;2511:2;2602:1;2627:53;2672:7;2663:6;2652:9;2648:22;2627:53;:::i;:::-;2617:63;;2573:117;2729:2;2755:53;2800:7;2791:6;2780:9;2776:22;2755:53;:::i;:::-;2745:63;;2700:118;2501:324;;;;;:::o;2831:552::-;;;;2973:2;2961:9;2952:7;2948:23;2944:32;2941:2;;;2989:1;2986;2979:12;2941:2;3032:1;3057:53;3102:7;3093:6;3082:9;3078:22;3057:53;:::i;:::-;3047:63;;3003:117;3159:2;3185:53;3230:7;3221:6;3210:9;3206:22;3185:53;:::i;:::-;3175:63;;3130:118;3287:2;3313:53;3358:7;3349:6;3338:9;3334:22;3313:53;:::i;:::-;3303:63;;3258:118;2931:452;;;;;:::o;3389:809::-;;;;;3557:3;3545:9;3536:7;3532:23;3528:33;3525:2;;;3574:1;3571;3564:12;3525:2;3617:1;3642:53;3687:7;3678:6;3667:9;3663:22;3642:53;:::i;:::-;3632:63;;3588:117;3744:2;3770:53;3815:7;3806:6;3795:9;3791:22;3770:53;:::i;:::-;3760:63;;3715:118;3872:2;3898:53;3943:7;3934:6;3923:9;3919:22;3898:53;:::i;:::-;3888:63;;3843:118;4028:2;4017:9;4013:18;4000:32;4059:18;4051:6;4048:30;4045:2;;;4091:1;4088;4081:12;4045:2;4119:62;4173:7;4164:6;4153:9;4149:22;4119:62;:::i;:::-;4109:72;;3971:220;3515:683;;;;;;;:::o;4204:401::-;;;4326:2;4314:9;4305:7;4301:23;4297:32;4294:2;;;4342:1;4339;4332:12;4294:2;4385:1;4410:53;4455:7;4446:6;4435:9;4431:22;4410:53;:::i;:::-;4400:63;;4356:117;4512:2;4538:50;4580:7;4571:6;4560:9;4556:22;4538:50;:::i;:::-;4528:60;;4483:115;4284:321;;;;;:::o;4611:407::-;;;4736:2;4724:9;4715:7;4711:23;4707:32;4704:2;;;4752:1;4749;4742:12;4704:2;4795:1;4820:53;4865:7;4856:6;4845:9;4841:22;4820:53;:::i;:::-;4810:63;;4766:117;4922:2;4948:53;4993:7;4984:6;4973:9;4969:22;4948:53;:::i;:::-;4938:63;;4893:118;4694:324;;;;;:::o;5024:260::-;;5131:2;5119:9;5110:7;5106:23;5102:32;5099:2;;;5147:1;5144;5137:12;5099:2;5190:1;5215:52;5259:7;5250:6;5239:9;5235:22;5215:52;:::i;:::-;5205:62;;5161:116;5089:195;;;;:::o;5290:282::-;;5408:2;5396:9;5387:7;5383:23;5379:32;5376:2;;;5424:1;5421;5414:12;5376:2;5467:1;5492:63;5547:7;5538:6;5527:9;5523:22;5492:63;:::i;:::-;5482:73;;5438:127;5366:206;;;;:::o;5578:375::-;;5696:2;5684:9;5675:7;5671:23;5667:32;5664:2;;;5712:1;5709;5702:12;5664:2;5783:1;5772:9;5768:17;5755:31;5813:18;5805:6;5802:30;5799:2;;;5845:1;5842;5835:12;5799:2;5873:63;5928:7;5919:6;5908:9;5904:22;5873:63;:::i;:::-;5863:73;;5726:220;5654:299;;;;:::o;5959:262::-;;6067:2;6055:9;6046:7;6042:23;6038:32;6035:2;;;6083:1;6080;6073:12;6035:2;6126:1;6151:53;6196:7;6187:6;6176:9;6172:22;6151:53;:::i;:::-;6141:63;;6097:117;6025:196;;;;:::o;6227:258::-;;6333:2;6321:9;6312:7;6308:23;6304:32;6301:2;;;6349:1;6346;6339:12;6301:2;6392:1;6417:51;6460:7;6451:6;6440:9;6436:22;6417:51;:::i;:::-;6407:61;;6363:115;6291:194;;;;:::o;6491:118::-;6578:24;6596:5;6578:24;:::i;:::-;6573:3;6566:37;6556:53;;:::o;6615:109::-;6696:21;6711:5;6696:21;:::i;:::-;6691:3;6684:34;6674:50;;:::o;6730:360::-;;6844:38;6876:5;6844:38;:::i;:::-;6898:70;6961:6;6956:3;6898:70;:::i;:::-;6891:77;;6977:52;7022:6;7017:3;7010:4;7003:5;6999:16;6977:52;:::i;:::-;7054:29;7076:6;7054:29;:::i;:::-;7049:3;7045:39;7038:46;;6820:270;;;;;:::o;7096:364::-;;7212:39;7245:5;7212:39;:::i;:::-;7267:71;7331:6;7326:3;7267:71;:::i;:::-;7260:78;;7347:52;7392:6;7387:3;7380:4;7373:5;7369:16;7347:52;:::i;:::-;7424:29;7446:6;7424:29;:::i;:::-;7419:3;7415:39;7408:46;;7188:272;;;;;:::o;7466:377::-;;7600:39;7633:5;7600:39;:::i;:::-;7655:89;7737:6;7732:3;7655:89;:::i;:::-;7648:96;;7753:52;7798:6;7793:3;7786:4;7779:5;7775:16;7753:52;:::i;:::-;7830:6;7825:3;7821:16;7814:23;;7576:267;;;;;:::o;7849:366::-;;8012:67;8076:2;8071:3;8012:67;:::i;:::-;8005:74;;8088:93;8177:3;8088:93;:::i;:::-;8206:2;8201:3;8197:12;8190:19;;7995:220;;;:::o;8221:366::-;;8384:67;8448:2;8443:3;8384:67;:::i;:::-;8377:74;;8460:93;8549:3;8460:93;:::i;:::-;8578:2;8573:3;8569:12;8562:19;;8367:220;;;:::o;8593:366::-;;8756:67;8820:2;8815:3;8756:67;:::i;:::-;8749:74;;8832:93;8921:3;8832:93;:::i;:::-;8950:2;8945:3;8941:12;8934:19;;8739:220;;;:::o;8965:366::-;;9128:67;9192:2;9187:3;9128:67;:::i;:::-;9121:74;;9204:93;9293:3;9204:93;:::i;:::-;9322:2;9317:3;9313:12;9306:19;;9111:220;;;:::o;9337:366::-;;9500:67;9564:2;9559:3;9500:67;:::i;:::-;9493:74;;9576:93;9665:3;9576:93;:::i;:::-;9694:2;9689:3;9685:12;9678:19;;9483:220;;;:::o;9709:366::-;;9872:67;9936:2;9931:3;9872:67;:::i;:::-;9865:74;;9948:93;10037:3;9948:93;:::i;:::-;10066:2;10061:3;10057:12;10050:19;;9855:220;;;:::o;10081:366::-;;10244:67;10308:2;10303:3;10244:67;:::i;:::-;10237:74;;10320:93;10409:3;10320:93;:::i;:::-;10438:2;10433:3;10429:12;10422:19;;10227:220;;;:::o;10453:366::-;;10616:67;10680:2;10675:3;10616:67;:::i;:::-;10609:74;;10692:93;10781:3;10692:93;:::i;:::-;10810:2;10805:3;10801:12;10794:19;;10599:220;;;:::o;10825:366::-;;10988:67;11052:2;11047:3;10988:67;:::i;:::-;10981:74;;11064:93;11153:3;11064:93;:::i;:::-;11182:2;11177:3;11173:12;11166:19;;10971:220;;;:::o;11197:366::-;;11360:67;11424:2;11419:3;11360:67;:::i;:::-;11353:74;;11436:93;11525:3;11436:93;:::i;:::-;11554:2;11549:3;11545:12;11538:19;;11343:220;;;:::o;11569:366::-;;11732:67;11796:2;11791:3;11732:67;:::i;:::-;11725:74;;11808:93;11897:3;11808:93;:::i;:::-;11926:2;11921:3;11917:12;11910:19;;11715:220;;;:::o;11941:366::-;;12104:67;12168:2;12163:3;12104:67;:::i;:::-;12097:74;;12180:93;12269:3;12180:93;:::i;:::-;12298:2;12293:3;12289:12;12282:19;;12087:220;;;:::o;12313:366::-;;12476:67;12540:2;12535:3;12476:67;:::i;:::-;12469:74;;12552:93;12641:3;12552:93;:::i;:::-;12670:2;12665:3;12661:12;12654:19;;12459:220;;;:::o;12685:366::-;;12848:67;12912:2;12907:3;12848:67;:::i;:::-;12841:74;;12924:93;13013:3;12924:93;:::i;:::-;13042:2;13037:3;13033:12;13026:19;;12831:220;;;:::o;13057:366::-;;13220:67;13284:2;13279:3;13220:67;:::i;:::-;13213:74;;13296:93;13385:3;13296:93;:::i;:::-;13414:2;13409:3;13405:12;13398:19;;13203:220;;;:::o;13429:366::-;;13592:67;13656:2;13651:3;13592:67;:::i;:::-;13585:74;;13668:93;13757:3;13668:93;:::i;:::-;13786:2;13781:3;13777:12;13770:19;;13575:220;;;:::o;13801:366::-;;13964:67;14028:2;14023:3;13964:67;:::i;:::-;13957:74;;14040:93;14129:3;14040:93;:::i;:::-;14158:2;14153:3;14149:12;14142:19;;13947:220;;;:::o;14173:366::-;;14336:67;14400:2;14395:3;14336:67;:::i;:::-;14329:74;;14412:93;14501:3;14412:93;:::i;:::-;14530:2;14525:3;14521:12;14514:19;;14319:220;;;:::o;14545:366::-;;14708:67;14772:2;14767:3;14708:67;:::i;:::-;14701:74;;14784:93;14873:3;14784:93;:::i;:::-;14902:2;14897:3;14893:12;14886:19;;14691:220;;;:::o;14917:366::-;;15080:67;15144:2;15139:3;15080:67;:::i;:::-;15073:74;;15156:93;15245:3;15156:93;:::i;:::-;15274:2;15269:3;15265:12;15258:19;;15063:220;;;:::o;15289:366::-;;15452:67;15516:2;15511:3;15452:67;:::i;:::-;15445:74;;15528:93;15617:3;15528:93;:::i;:::-;15646:2;15641:3;15637:12;15630:19;;15435:220;;;:::o;15661:366::-;;15824:67;15888:2;15883:3;15824:67;:::i;:::-;15817:74;;15900:93;15989:3;15900:93;:::i;:::-;16018:2;16013:3;16009:12;16002:19;;15807:220;;;:::o;16033:366::-;;16196:67;16260:2;16255:3;16196:67;:::i;:::-;16189:74;;16272:93;16361:3;16272:93;:::i;:::-;16390:2;16385:3;16381:12;16374:19;;16179:220;;;:::o;16405:366::-;;16568:67;16632:2;16627:3;16568:67;:::i;:::-;16561:74;;16644:93;16733:3;16644:93;:::i;:::-;16762:2;16757:3;16753:12;16746:19;;16551:220;;;:::o;16777:366::-;;16940:67;17004:2;16999:3;16940:67;:::i;:::-;16933:74;;17016:93;17105:3;17016:93;:::i;:::-;17134:2;17129:3;17125:12;17118:19;;16923:220;;;:::o;17149:366::-;;17312:67;17376:2;17371:3;17312:67;:::i;:::-;17305:74;;17388:93;17477:3;17388:93;:::i;:::-;17506:2;17501:3;17497:12;17490:19;;17295:220;;;:::o;17521:115::-;17606:23;17623:5;17606:23;:::i;:::-;17601:3;17594:36;17584:52;;:::o;17642:118::-;17729:24;17747:5;17729:24;:::i;:::-;17724:3;17717:37;17707:53;;:::o;17766:115::-;17851:23;17868:5;17851:23;:::i;:::-;17846:3;17839:36;17829:52;;:::o;17887:112::-;17970:22;17986:5;17970:22;:::i;:::-;17965:3;17958:35;17948:51;;:::o;18005:435::-;;18207:95;18298:3;18289:6;18207:95;:::i;:::-;18200:102;;18319:95;18410:3;18401:6;18319:95;:::i;:::-;18312:102;;18431:3;18424:10;;18189:251;;;;;:::o;18446:222::-;;18577:2;18566:9;18562:18;18554:26;;18590:71;18658:1;18647:9;18643:17;18634:6;18590:71;:::i;:::-;18544:124;;;;:::o;18674:640::-;;18907:3;18896:9;18892:19;18884:27;;18921:71;18989:1;18978:9;18974:17;18965:6;18921:71;:::i;:::-;19002:72;19070:2;19059:9;19055:18;19046:6;19002:72;:::i;:::-;19084;19152:2;19141:9;19137:18;19128:6;19084:72;:::i;:::-;19203:9;19197:4;19193:20;19188:2;19177:9;19173:18;19166:48;19231:76;19302:4;19293:6;19231:76;:::i;:::-;19223:84;;18874:440;;;;;;;:::o;19320:210::-;;19445:2;19434:9;19430:18;19422:26;;19458:65;19520:1;19509:9;19505:17;19496:6;19458:65;:::i;:::-;19412:118;;;;:::o;19536:313::-;;19687:2;19676:9;19672:18;19664:26;;19736:9;19730:4;19726:20;19722:1;19711:9;19707:17;19700:47;19764:78;19837:4;19828:6;19764:78;:::i;:::-;19756:86;;19654:195;;;;:::o;19855:419::-;;20059:2;20048:9;20044:18;20036:26;;20108:9;20102:4;20098:20;20094:1;20083:9;20079:17;20072:47;20136:131;20262:4;20136:131;:::i;:::-;20128:139;;20026:248;;;:::o;20280:419::-;;20484:2;20473:9;20469:18;20461:26;;20533:9;20527:4;20523:20;20519:1;20508:9;20504:17;20497:47;20561:131;20687:4;20561:131;:::i;:::-;20553:139;;20451:248;;;:::o;20705:419::-;;20909:2;20898:9;20894:18;20886:26;;20958:9;20952:4;20948:20;20944:1;20933:9;20929:17;20922:47;20986:131;21112:4;20986:131;:::i;:::-;20978:139;;20876:248;;;:::o;21130:419::-;;21334:2;21323:9;21319:18;21311:26;;21383:9;21377:4;21373:20;21369:1;21358:9;21354:17;21347:47;21411:131;21537:4;21411:131;:::i;:::-;21403:139;;21301:248;;;:::o;21555:419::-;;21759:2;21748:9;21744:18;21736:26;;21808:9;21802:4;21798:20;21794:1;21783:9;21779:17;21772:47;21836:131;21962:4;21836:131;:::i;:::-;21828:139;;21726:248;;;:::o;21980:419::-;;22184:2;22173:9;22169:18;22161:26;;22233:9;22227:4;22223:20;22219:1;22208:9;22204:17;22197:47;22261:131;22387:4;22261:131;:::i;:::-;22253:139;;22151:248;;;:::o;22405:419::-;;22609:2;22598:9;22594:18;22586:26;;22658:9;22652:4;22648:20;22644:1;22633:9;22629:17;22622:47;22686:131;22812:4;22686:131;:::i;:::-;22678:139;;22576:248;;;:::o;22830:419::-;;23034:2;23023:9;23019:18;23011:26;;23083:9;23077:4;23073:20;23069:1;23058:9;23054:17;23047:47;23111:131;23237:4;23111:131;:::i;:::-;23103:139;;23001:248;;;:::o;23255:419::-;;23459:2;23448:9;23444:18;23436:26;;23508:9;23502:4;23498:20;23494:1;23483:9;23479:17;23472:47;23536:131;23662:4;23536:131;:::i;:::-;23528:139;;23426:248;;;:::o;23680:419::-;;23884:2;23873:9;23869:18;23861:26;;23933:9;23927:4;23923:20;23919:1;23908:9;23904:17;23897:47;23961:131;24087:4;23961:131;:::i;:::-;23953:139;;23851:248;;;:::o;24105:419::-;;24309:2;24298:9;24294:18;24286:26;;24358:9;24352:4;24348:20;24344:1;24333:9;24329:17;24322:47;24386:131;24512:4;24386:131;:::i;:::-;24378:139;;24276:248;;;:::o;24530:419::-;;24734:2;24723:9;24719:18;24711:26;;24783:9;24777:4;24773:20;24769:1;24758:9;24754:17;24747:47;24811:131;24937:4;24811:131;:::i;:::-;24803:139;;24701:248;;;:::o;24955:419::-;;25159:2;25148:9;25144:18;25136:26;;25208:9;25202:4;25198:20;25194:1;25183:9;25179:17;25172:47;25236:131;25362:4;25236:131;:::i;:::-;25228:139;;25126:248;;;:::o;25380:419::-;;25584:2;25573:9;25569:18;25561:26;;25633:9;25627:4;25623:20;25619:1;25608:9;25604:17;25597:47;25661:131;25787:4;25661:131;:::i;:::-;25653:139;;25551:248;;;:::o;25805:419::-;;26009:2;25998:9;25994:18;25986:26;;26058:9;26052:4;26048:20;26044:1;26033:9;26029:17;26022:47;26086:131;26212:4;26086:131;:::i;:::-;26078:139;;25976:248;;;:::o;26230:419::-;;26434:2;26423:9;26419:18;26411:26;;26483:9;26477:4;26473:20;26469:1;26458:9;26454:17;26447:47;26511:131;26637:4;26511:131;:::i;:::-;26503:139;;26401:248;;;:::o;26655:419::-;;26859:2;26848:9;26844:18;26836:26;;26908:9;26902:4;26898:20;26894:1;26883:9;26879:17;26872:47;26936:131;27062:4;26936:131;:::i;:::-;26928:139;;26826:248;;;:::o;27080:419::-;;27284:2;27273:9;27269:18;27261:26;;27333:9;27327:4;27323:20;27319:1;27308:9;27304:17;27297:47;27361:131;27487:4;27361:131;:::i;:::-;27353:139;;27251:248;;;:::o;27505:419::-;;27709:2;27698:9;27694:18;27686:26;;27758:9;27752:4;27748:20;27744:1;27733:9;27729:17;27722:47;27786:131;27912:4;27786:131;:::i;:::-;27778:139;;27676:248;;;:::o;27930:419::-;;28134:2;28123:9;28119:18;28111:26;;28183:9;28177:4;28173:20;28169:1;28158:9;28154:17;28147:47;28211:131;28337:4;28211:131;:::i;:::-;28203:139;;28101:248;;;:::o;28355:419::-;;28559:2;28548:9;28544:18;28536:26;;28608:9;28602:4;28598:20;28594:1;28583:9;28579:17;28572:47;28636:131;28762:4;28636:131;:::i;:::-;28628:139;;28526:248;;;:::o;28780:419::-;;28984:2;28973:9;28969:18;28961:26;;29033:9;29027:4;29023:20;29019:1;29008:9;29004:17;28997:47;29061:131;29187:4;29061:131;:::i;:::-;29053:139;;28951:248;;;:::o;29205:419::-;;29409:2;29398:9;29394:18;29386:26;;29458:9;29452:4;29448:20;29444:1;29433:9;29429:17;29422:47;29486:131;29612:4;29486:131;:::i;:::-;29478:139;;29376:248;;;:::o;29630:419::-;;29834:2;29823:9;29819:18;29811:26;;29883:9;29877:4;29873:20;29869:1;29858:9;29854:17;29847:47;29911:131;30037:4;29911:131;:::i;:::-;29903:139;;29801:248;;;:::o;30055:419::-;;30259:2;30248:9;30244:18;30236:26;;30308:9;30302:4;30298:20;30294:1;30283:9;30279:17;30272:47;30336:131;30462:4;30336:131;:::i;:::-;30328:139;;30226:248;;;:::o;30480:419::-;;30684:2;30673:9;30669:18;30661:26;;30733:9;30727:4;30723:20;30719:1;30708:9;30704:17;30697:47;30761:131;30887:4;30761:131;:::i;:::-;30753:139;;30651:248;;;:::o;30905:218::-;;31034:2;31023:9;31019:18;31011:26;;31047:69;31113:1;31102:9;31098:17;31089:6;31047:69;:::i;:::-;31001:122;;;;:::o;31129:222::-;;31260:2;31249:9;31245:18;31237:26;;31273:71;31341:1;31330:9;31326:17;31317:6;31273:71;:::i;:::-;31227:124;;;;:::o;31357:218::-;;31486:2;31475:9;31471:18;31463:26;;31499:69;31565:1;31554:9;31550:17;31541:6;31499:69;:::i;:::-;31453:122;;;;:::o;31581:214::-;;31708:2;31697:9;31693:18;31685:26;;31721:67;31785:1;31774:9;31770:17;31761:6;31721:67;:::i;:::-;31675:120;;;;:::o;31801:129::-;;31862:20;;:::i;:::-;31852:30;;31891:33;31919:4;31911:6;31891:33;:::i;:::-;31842:88;;;:::o;31936:75::-;;32002:2;31996:9;31986:19;;31976:35;:::o;32017:307::-;;32168:18;32160:6;32157:30;32154:2;;;32190:18;;:::i;:::-;32154:2;32228:29;32250:6;32228:29;:::i;:::-;32220:37;;32312:4;32306;32302:15;32294:23;;32083:241;;;:::o;32330:308::-;;32482:18;32474:6;32471:30;32468:2;;;32504:18;;:::i;:::-;32468:2;32542:29;32564:6;32542:29;:::i;:::-;32534:37;;32626:4;32620;32616:15;32608:23;;32397:241;;;:::o;32644:98::-;;32729:5;32723:12;32713:22;;32702:40;;;:::o;32748:99::-;;32834:5;32828:12;32818:22;;32807:40;;;:::o;32853:168::-;;32970:6;32965:3;32958:19;33010:4;33005:3;33001:14;32986:29;;32948:73;;;;:::o;33027:169::-;;33145:6;33140:3;33133:19;33185:4;33180:3;33176:14;33161:29;;33123:73;;;;:::o;33202:148::-;;33341:3;33326:18;;33316:34;;;;:::o;33356:305::-;;33415:20;33433:1;33415:20;:::i;:::-;33410:25;;33449:20;33467:1;33449:20;:::i;:::-;33444:25;;33603:1;33535:66;33531:74;33528:1;33525:81;33522:2;;;33609:18;;:::i;:::-;33522:2;33653:1;33650;33646:9;33639:16;;33400:261;;;;:::o;33667:185::-;;33724:20;33742:1;33724:20;:::i;:::-;33719:25;;33758:20;33776:1;33758:20;:::i;:::-;33753:25;;33797:1;33787:2;;33802:18;;:::i;:::-;33787:2;33844:1;33841;33837:9;33832:14;;33709:143;;;;:::o;33858:348::-;;33921:20;33939:1;33921:20;:::i;:::-;33916:25;;33955:20;33973:1;33955:20;:::i;:::-;33950:25;;34143:1;34075:66;34071:74;34068:1;34065:81;34060:1;34053:9;34046:17;34042:105;34039:2;;;34150:18;;:::i;:::-;34039:2;34198:1;34195;34191:9;34180:20;;33906:300;;;;:::o;34212:297::-;;34274:19;34291:1;34274:19;:::i;:::-;34269:24;;34307:19;34324:1;34307:19;:::i;:::-;34302:24;;34446:1;34426:18;34422:26;34419:1;34416:33;34411:1;34404:9;34397:17;34393:57;34390:2;;;34453:18;;:::i;:::-;34390:2;34501:1;34498;34494:9;34483:20;;34259:250;;;;:::o;34515:191::-;;34575:20;34593:1;34575:20;:::i;:::-;34570:25;;34609:20;34627:1;34609:20;:::i;:::-;34604:25;;34648:1;34645;34642:8;34639:2;;;34653:18;;:::i;:::-;34639:2;34698:1;34695;34691:9;34683:17;;34560:146;;;;:::o;34712:96::-;;34778:24;34796:5;34778:24;:::i;:::-;34767:35;;34757:51;;;:::o;34814:90::-;;34891:5;34884:13;34877:21;34866:32;;34856:48;;;:::o;34910:149::-;;34986:66;34979:5;34975:78;34964:89;;34954:105;;;:::o;35065:89::-;;35141:6;35134:5;35130:18;35119:29;;35109:45;;;:::o;35160:126::-;;35237:42;35230:5;35226:54;35215:65;;35205:81;;;:::o;35292:77::-;;35358:5;35347:16;;35337:32;;;:::o;35375:101::-;;35451:18;35444:5;35440:30;35429:41;;35419:57;;;:::o;35482:86::-;;35557:4;35550:5;35546:16;35535:27;;35525:43;;;:::o;35574:154::-;35658:6;35653:3;35648;35635:30;35720:1;35711:6;35706:3;35702:16;35695:27;35625:103;;;:::o;35734:307::-;35802:1;35812:113;35826:6;35823:1;35820:13;35812:113;;;35911:1;35906:3;35902:11;35896:18;35892:1;35887:3;35883:11;35876:39;35848:2;35845:1;35841:10;35836:15;;35812:113;;;35943:6;35940:1;35937:13;35934:2;;;36023:1;36014:6;36009:3;36005:16;35998:27;35934:2;35783:258;;;;:::o;36047:320::-;;36128:1;36122:4;36118:12;36108:22;;36175:1;36169:4;36165:12;36196:18;36186:2;;36252:4;36244:6;36240:17;36230:27;;36186:2;36314;36306:6;36303:14;36283:18;36280:38;36277:2;;;36333:18;;:::i;:::-;36277:2;36098:269;;;;:::o;36373:281::-;36456:27;36478:4;36456:27;:::i;:::-;36448:6;36444:40;36586:6;36574:10;36571:22;36550:18;36538:10;36535:34;36532:62;36529:2;;;36597:18;;:::i;:::-;36529:2;36637:10;36633:2;36626:22;36416:238;;;:::o;36660:233::-;;36722:24;36740:5;36722:24;:::i;:::-;36713:33;;36768:66;36761:5;36758:77;36755:2;;;36838:18;;:::i;:::-;36755:2;36885:1;36878:5;36874:13;36867:20;;36703:190;;;:::o;36899:167::-;;36959:22;36975:5;36959:22;:::i;:::-;36950:31;;37003:4;36996:5;36993:15;36990:2;;;37011:18;;:::i;:::-;36990:2;37058:1;37051:5;37047:13;37040:20;;36940:126;;;:::o;37072:176::-;;37121:20;37139:1;37121:20;:::i;:::-;37116:25;;37155:20;37173:1;37155:20;:::i;:::-;37150:25;;37194:1;37184:2;;37199:18;;:::i;:::-;37184:2;37240:1;37237;37233:9;37228:14;;37106:142;;;;:::o;37254:180::-;37302:77;37299:1;37292:88;37399:4;37396:1;37389:15;37423:4;37420:1;37413:15;37440:180;37488:77;37485:1;37478:88;37585:4;37582:1;37575:15;37609:4;37606:1;37599:15;37626:180;37674:77;37671:1;37664:88;37771:4;37768:1;37761:15;37795:4;37792:1;37785:15;37812:180;37860:77;37857:1;37850:88;37957:4;37954:1;37947:15;37981:4;37978:1;37971:15;37998:102;;38090:2;38086:7;38081:2;38074:5;38070:14;38066:28;38056:38;;38046:54;;;:::o;38106:230::-;38246:34;38242:1;38234:6;38230:14;38223:58;38315:13;38310:2;38302:6;38298:15;38291:38;38212:124;:::o;38342:231::-;38482:34;38478:1;38470:6;38466:14;38459:58;38551:14;38546:2;38538:6;38534:15;38527:39;38448:125;:::o;38579:237::-;38719:34;38715:1;38707:6;38703:14;38696:58;38788:20;38783:2;38775:6;38771:15;38764:45;38685:131;:::o;38822:225::-;38962:34;38958:1;38950:6;38946:14;38939:58;39031:8;39026:2;39018:6;39014:15;39007:33;38928:119;:::o;39053:178::-;39193:30;39189:1;39181:6;39177:14;39170:54;39159:72;:::o;39237:174::-;39377:26;39373:1;39365:6;39361:14;39354:50;39343:68;:::o;39417:248::-;39557:34;39553:1;39545:6;39541:14;39534:58;39626:31;39621:2;39613:6;39609:15;39602:56;39523:142;:::o;39671:223::-;39811:34;39807:1;39799:6;39795:14;39788:58;39880:6;39875:2;39867:6;39863:15;39856:31;39777:117;:::o;39900:175::-;40040:27;40036:1;40028:6;40024:14;40017:51;40006:69;:::o;40081:231::-;40221:34;40217:1;40209:6;40205:14;40198:58;40290:14;40285:2;40277:6;40273:15;40266:39;40187:125;:::o;40318:243::-;40458:34;40454:1;40446:6;40442:14;40435:58;40527:26;40522:2;40514:6;40510:15;40503:51;40424:137;:::o;40567:229::-;40707:34;40703:1;40695:6;40691:14;40684:58;40776:12;40771:2;40763:6;40759:15;40752:37;40673:123;:::o;40802:228::-;40942:34;40938:1;40930:6;40926:14;40919:58;41011:11;41006:2;40998:6;40994:15;40987:36;40908:122;:::o;41036:182::-;41176:34;41172:1;41164:6;41160:14;41153:58;41142:76;:::o;41224:236::-;41364:34;41360:1;41352:6;41348:14;41341:58;41433:19;41428:2;41420:6;41416:15;41409:44;41330:130;:::o;41466:231::-;41606:34;41602:1;41594:6;41590:14;41583:58;41675:14;41670:2;41662:6;41658:15;41651:39;41572:125;:::o;41703:182::-;41843:34;41839:1;41831:6;41827:14;41820:58;41809:76;:::o;41891:228::-;42031:34;42027:1;42019:6;42015:14;42008:58;42100:11;42095:2;42087:6;42083:15;42076:36;41997:122;:::o;42125:234::-;42265:34;42261:1;42253:6;42249:14;42242:58;42334:17;42329:2;42321:6;42317:15;42310:42;42231:128;:::o;42365:220::-;42505:34;42501:1;42493:6;42489:14;42482:58;42574:3;42569:2;42561:6;42557:15;42550:28;42471:114;:::o;42591:172::-;42731:24;42727:1;42719:6;42715:14;42708:48;42697:66;:::o;42769:170::-;42909:22;42905:1;42897:6;42893:14;42886:46;42875:64;:::o;42945:166::-;43085:18;43081:1;43073:6;43069:14;43062:42;43051:60;:::o;43117:236::-;43257:34;43253:1;43245:6;43241:14;43234:58;43326:19;43321:2;43313:6;43309:15;43302:44;43223:130;:::o;43359:176::-;43499:28;43495:1;43487:6;43483:14;43476:52;43465:70;:::o;43541:231::-;43681:34;43677:1;43669:6;43665:14;43658:58;43750:14;43745:2;43737:6;43733:15;43726:39;43647:125;:::o;43778:122::-;43851:24;43869:5;43851:24;:::i;:::-;43844:5;43841:35;43831:2;;43890:1;43887;43880:12;43831:2;43821:79;:::o;43906:116::-;43976:21;43991:5;43976:21;:::i;:::-;43969:5;43966:32;43956:2;;44012:1;44009;44002:12;43956:2;43946:76;:::o;44028:120::-;44100:23;44117:5;44100:23;:::i;:::-;44093:5;44090:34;44080:2;;44138:1;44135;44128:12;44080:2;44070:78;:::o;44154:122::-;44227:24;44245:5;44227:24;:::i;:::-;44220:5;44217:35;44207:2;;44266:1;44263;44256:12;44207:2;44197:79;:::o;44282:118::-;44353:22;44369:5;44353:22;:::i;:::-;44346:5;44343:33;44333:2;;44390:1;44387;44380:12;44333:2;44323:77;:::o

Swarm Source

ipfs://22e7e2c10075ac63144c23b42402704cfdd31fb952731859e07e7546562cc9e2
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.