ETH Price: $3,470.10 (-1.32%)
Gas: 3 Gwei

Token

Grim Tales of a Wassie (GTW)
 

Overview

Max Total Supply

111 GTW

Holders

76

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
octralex.eth
Balance
1 GTW
0x8806D2eD87398BEE00Bb044c882406ba8ead0d5A
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

"Grim Tales of a Wassie" features 111 uniquely made abstract artworks coupled with 111 poems.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
PoetTXT

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-10-27
*/

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];
        }
    }
}

//SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.3;

contract PoetTXT is ERC721, ERC721Enumerable,ERC721URIStorage, Ownable {
   using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;
    
    uint16 public constant maxSupply = 111;
    string private _baseTokenURI;
    
    uint256 public _startDate = 1635357600;

    constructor() ERC721("Grim Tales of a Wassie", "GTW") {
        
    }
    
    function setStartDate(uint256 startDate) public onlyOwner {
        _startDate = 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 burn(uint256 tokenId) public onlyOwner {
        _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 3;
    }

    // Get ether price based on current token supply
    function getCurrentPrice() public pure returns (uint64) {
        return 111_000_000_000_000_000;
    }
    
    // Mint new token(s)
    function mint(uint8 _quantityToMint) public payable {
        require(_startDate <= 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 + balanceOf(msg.sender)) <= 3, "Max mint per account is 3");
        require(
            (_quantityToMint + totalSupply()) <= maxSupply,
            "Exceeds maximum supply"
        );
        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");
        (bool success, ) = msg.sender.call{value: address(this).balance}("");
        require(success == true, "Failed to withdraw ether");
    }
}

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":"_startDate","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":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"setStartDate","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"}]

608060405263617993a0600e553480156200001957600080fd5b506040518060400160405280601681526020017f4772696d2054616c6573206f66206120576173736965000000000000000000008152506040518060400160405280600381526020017f475457000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200009e929190620001ae565b508060019080519060200190620000b7929190620001ae565b505050620000da620000ce620000e060201b60201c565b620000e860201b60201c565b620002c3565b600033905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001bc906200025e565b90600052602060002090601f016020900481019282620001e057600085556200022c565b82601f10620001fb57805160ff19168380011785556200022c565b828001600101855582156200022c579182015b828111156200022b5782518255916020019190600101906200020e565b5b5090506200023b91906200023f565b5090565b5b808211156200025a57600081600090555060010162000240565b5090565b600060028204905060018216806200027757607f821691505b602082108114156200028e576200028d62000294565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6145e780620002d36000396000f3fe6080604052600436106101b75760003560e01c80636ecd2306116100ec578063ac8daba01161008a578063d5abeb0111610064578063d5abeb01146105fb578063e985e9c514610626578063eb91d37e14610663578063f2fde38b1461068e576101b7565b8063ac8daba01461056a578063b88d4fde14610595578063c87b56dd146105be576101b7565b806382d95df5116100c657806382d95df5146104c25780638da5cb5b146104eb57806395d89b4114610516578063a22cb46514610541576101b7565b80636ecd23061461045257806370a082311461046e578063715018a6146104ab576101b7565b8063339181d91161015957806342966c681161013357806342966c68146103865780634f6ccce7146103af57806355f804b3146103ec5780636352211e14610415576101b7565b8063339181d91461031b5780633ccfd60b1461034657806342842e0e1461035d576101b7565b8063095ea7b311610195578063095ea7b31461026157806318160ddd1461028a57806323b872dd146102b55780632f745c59146102de576101b7565b806301ffc9a7146101bc57806306fdde03146101f9578063081812fc14610224575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de9190612f78565b6106b7565b6040516101f091906135ce565b60405180910390f35b34801561020557600080fd5b5061020e6106c9565b60405161021b91906135e9565b60405180910390f35b34801561023057600080fd5b5061024b6004803603810190610246919061300b565b61075b565b6040516102589190613567565b60405180910390f35b34801561026d57600080fd5b5061028860048036038101906102839190612f3c565b6107e0565b005b34801561029657600080fd5b5061029f6108f8565b6040516102ac9190613986565b60405180910390f35b3480156102c157600080fd5b506102dc60048036038101906102d79190612e36565b610905565b005b3480156102ea57600080fd5b5061030560048036038101906103009190612f3c565b610965565b6040516103129190613986565b60405180910390f35b34801561032757600080fd5b50610330610a0a565b60405161033d91906139bc565b60405180910390f35b34801561035257600080fd5b5061035b610a13565b005b34801561036957600080fd5b50610384600480360381019061037f9190612e36565b610b88565b005b34801561039257600080fd5b506103ad60048036038101906103a8919061300b565b610ba8565b005b3480156103bb57600080fd5b506103d660048036038101906103d1919061300b565b610c30565b6040516103e39190613986565b60405180910390f35b3480156103f857600080fd5b50610413600480360381019061040e9190612fca565b610cc7565b005b34801561042157600080fd5b5061043c6004803603810190610437919061300b565b610d5d565b6040516104499190613567565b60405180910390f35b61046c60048036038101906104679190613034565b610e0f565b005b34801561047a57600080fd5b5061049560048036038101906104909190612dd1565b61104e565b6040516104a29190613986565b60405180910390f35b3480156104b757600080fd5b506104c0611106565b005b3480156104ce57600080fd5b506104e960048036038101906104e4919061300b565b61118e565b005b3480156104f757600080fd5b50610500611214565b60405161050d9190613567565b60405180910390f35b34801561052257600080fd5b5061052b61123e565b60405161053891906135e9565b60405180910390f35b34801561054d57600080fd5b5061056860048036038101906105639190612f00565b6112d0565b005b34801561057657600080fd5b5061057f611451565b60405161058c9190613986565b60405180910390f35b3480156105a157600080fd5b506105bc60048036038101906105b79190612e85565b611457565b005b3480156105ca57600080fd5b506105e560048036038101906105e0919061300b565b6114b9565b6040516105f291906135e9565b60405180910390f35b34801561060757600080fd5b506106106114cb565b60405161061d919061396b565b60405180910390f35b34801561063257600080fd5b5061064d60048036038101906106489190612dfa565b6114d0565b60405161065a91906135ce565b60405180910390f35b34801561066f57600080fd5b50610678611564565b60405161068591906139a1565b60405180910390f35b34801561069a57600080fd5b506106b560048036038101906106b09190612dd1565b611574565b005b60006106c28261166c565b9050919050565b6060600080546106d890613c8e565b80601f016020809104026020016040519081016040528092919081815260200182805461070490613c8e565b80156107515780601f1061072657610100808354040283529160200191610751565b820191906000526020600020905b81548152906001019060200180831161073457829003601f168201915b5050505050905090565b6000610766826116e6565b6107a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079c906137eb565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107eb82610d5d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561085c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610853906138ab565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661087b611752565b73ffffffffffffffffffffffffffffffffffffffff1614806108aa57506108a9816108a4611752565b6114d0565b5b6108e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e09061374b565b60405180910390fd5b6108f3838361175a565b505050565b6000600880549050905090565b610916610910611752565b82611813565b610955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094c9061392b565b60405180910390fd5b6109608383836118f1565b505050565b60006109708361104e565b82106109b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a89061360b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60006003905090565b610a1b611752565b73ffffffffffffffffffffffffffffffffffffffff16610a39611214565b73ffffffffffffffffffffffffffffffffffffffff1614610a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a869061380b565b60405180910390fd5b60004711610ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac9906136ab565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610af890613552565b60006040518083038185875af1925050503d8060008114610b35576040519150601f19603f3d011682016040523d82523d6000602084013e610b3a565b606091505b505090506001151581151514610b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7c9061386b565b60405180910390fd5b50565b610ba383838360405180602001604052806000815250611457565b505050565b610bb0611752565b73ffffffffffffffffffffffffffffffffffffffff16610bce611214565b73ffffffffffffffffffffffffffffffffffffffff1614610c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1b9061380b565b60405180910390fd5b610c2d81611b4d565b50565b6000610c3a6108f8565b8210610c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c729061394b565b60405180910390fd5b60088281548110610cb5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610ccf611752565b73ffffffffffffffffffffffffffffffffffffffff16610ced611214565b73ffffffffffffffffffffffffffffffffffffffff1614610d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3a9061380b565b60405180910390fd5b80600d9080519060200190610d59929190612ba0565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfd9061378b565b60405180910390fd5b80915050919050565b42600e541115610e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4b9061390b565b60405180910390fd5b60018160ff161015610e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e92906138eb565b60405180910390fd5b610ea3610a0a565b60ff168160ff161115610eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee2906136cb565b60405180910390fd5b6003610ef63361104e565b8260ff16610f049190613aac565b1115610f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3c9061388b565b60405180910390fd5b606f61ffff16610f536108f8565b8260ff16610f619190613aac565b1115610fa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f99906138cb565b60405180910390fd5b8060ff16610fae611564565b610fb89190613b33565b67ffffffffffffffff163414611003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffa9061362b565b60405180910390fd5b60005b8160ff168160ff16101561104a5761101e600c611b59565b600061102a600c611b6f565b90506110363382611b7d565b50808061104290613d3a565b915050611006565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b69061376b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61110e611752565b73ffffffffffffffffffffffffffffffffffffffff1661112c611214565b73ffffffffffffffffffffffffffffffffffffffff1614611182576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111799061380b565b60405180910390fd5b61118c6000611d4b565b565b611196611752565b73ffffffffffffffffffffffffffffffffffffffff166111b4611214565b73ffffffffffffffffffffffffffffffffffffffff161461120a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019061380b565b60405180910390fd5b80600e8190555050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461124d90613c8e565b80601f016020809104026020016040519081016040528092919081815260200182805461127990613c8e565b80156112c65780601f1061129b576101008083540402835291602001916112c6565b820191906000526020600020905b8154815290600101906020018083116112a957829003601f168201915b5050505050905090565b6112d8611752565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133d9061370b565b60405180910390fd5b8060056000611353611752565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611400611752565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161144591906135ce565b60405180910390a35050565b600e5481565b611468611462611752565b83611813565b6114a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149e9061392b565b60405180910390fd5b6114b384848484611e11565b50505050565b60606114c482611e6d565b9050919050565b606f81565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600067018a59e972118000905090565b61157c611752565b73ffffffffffffffffffffffffffffffffffffffff1661159a611214565b73ffffffffffffffffffffffffffffffffffffffff16146115f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e79061380b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611660576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116579061366b565b60405180910390fd5b61166981611d4b565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806116df57506116de82611fbf565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166117cd83610d5d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061181e826116e6565b61185d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118549061372b565b60405180910390fd5b600061186883610d5d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806118d757508373ffffffffffffffffffffffffffffffffffffffff166118bf8461075b565b73ffffffffffffffffffffffffffffffffffffffff16145b806118e857506118e781856114d0565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661191182610d5d565b73ffffffffffffffffffffffffffffffffffffffff1614611967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195e9061382b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ce906136eb565b60405180910390fd5b6119e28383836120a1565b6119ed60008261175a565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a3d9190613b75565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a949190613aac565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611b56816120b1565b50565b6001816000016000828254019250508190555050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be4906137ab565b60405180910390fd5b611bf6816116e6565b15611c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2d9061368b565b60405180910390fd5b611c42600083836120a1565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c929190613aac565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611e1c8484846118f1565b611e2884848484612104565b611e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5e9061364b565b60405180910390fd5b50505050565b6060611e78826116e6565b611eb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eae906137cb565b60405180910390fd5b6000600a60008481526020019081526020016000208054611ed790613c8e565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0390613c8e565b8015611f505780601f10611f2557610100808354040283529160200191611f50565b820191906000526020600020905b815481529060010190602001808311611f3357829003601f168201915b505050505090506000611f6161229b565b9050600081511415611f77578192505050611fba565b600082511115611fac578082604051602001611f9492919061352e565b60405160208183030381529060405292505050611fba565b611fb58461232d565b925050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061208a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061209a5750612099826123d4565b5b9050919050565b6120ac83838361243e565b505050565b6120ba81612552565b6000600a600083815260200190815260200160002080546120da90613c8e565b90501461210157600a600082815260200190815260200160002060006121009190612c26565b5b50565b60006121258473ffffffffffffffffffffffffffffffffffffffff16612663565b1561228e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261214e611752565b8786866040518563ffffffff1660e01b81526004016121709493929190613582565b602060405180830381600087803b15801561218a57600080fd5b505af19250505080156121bb57506040513d601f19601f820116820180604052508101906121b89190612fa1565b60015b61223e573d80600081146121eb576040519150601f19603f3d011682016040523d82523d6000602084013e6121f0565b606091505b50600081511415612236576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222d9061364b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612293565b600190505b949350505050565b6060600d80546122aa90613c8e565b80601f01602080910402602001604051908101604052809291908181526020018280546122d690613c8e565b80156123235780601f106122f857610100808354040283529160200191612323565b820191906000526020600020905b81548152906001019060200180831161230657829003601f168201915b5050505050905090565b6060612338826116e6565b612377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236e9061384b565b60405180910390fd5b600061238161229b565b905060008151116123a157604051806020016040528060008152506123cc565b806123ab84612676565b6040516020016123bc92919061352e565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612449838383612823565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561248c5761248781612828565b6124cb565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146124ca576124c98382612871565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561250e57612509816129de565b61254d565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461254c5761254b8282612b21565b5b5b505050565b600061255d82610d5d565b905061256b816000846120a1565b61257660008361175a565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125c69190613b75565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b606060008214156126be576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061281e565b600082905060005b600082146126f05780806126d990613cf1565b915050600a826126e99190613b02565b91506126c6565b60008167ffffffffffffffff811115612732577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156127645781602001600182028036833780820191505090505b5090505b600085146128175760018261277d9190613b75565b9150600a8561278c9190613d64565b60306127989190613aac565b60f81b8183815181106127d4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128109190613b02565b9450612768565b8093505050505b919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161287e8461104e565b6128889190613b75565b905060006007600084815260200190815260200160002054905081811461296d576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506129f29190613b75565b9050600060096000848152602001908152602001600020549050600060088381548110612a48577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612a90577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612b05577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612b2c8361104e565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b828054612bac90613c8e565b90600052602060002090601f016020900481019282612bce5760008555612c15565b82601f10612be757805160ff1916838001178555612c15565b82800160010185558215612c15579182015b82811115612c14578251825591602001919060010190612bf9565b5b509050612c229190612c66565b5090565b508054612c3290613c8e565b6000825580601f10612c445750612c63565b601f016020900490600052602060002090810190612c629190612c66565b5b50565b5b80821115612c7f576000816000905550600101612c67565b5090565b6000612c96612c91846139fc565b6139d7565b905082815260208101848484011115612cae57600080fd5b612cb9848285613c4c565b509392505050565b6000612cd4612ccf84613a2d565b6139d7565b905082815260208101848484011115612cec57600080fd5b612cf7848285613c4c565b509392505050565b600081359050612d0e8161453e565b92915050565b600081359050612d2381614555565b92915050565b600081359050612d388161456c565b92915050565b600081519050612d4d8161456c565b92915050565b600082601f830112612d6457600080fd5b8135612d74848260208601612c83565b91505092915050565b600082601f830112612d8e57600080fd5b8135612d9e848260208601612cc1565b91505092915050565b600081359050612db681614583565b92915050565b600081359050612dcb8161459a565b92915050565b600060208284031215612de357600080fd5b6000612df184828501612cff565b91505092915050565b60008060408385031215612e0d57600080fd5b6000612e1b85828601612cff565b9250506020612e2c85828601612cff565b9150509250929050565b600080600060608486031215612e4b57600080fd5b6000612e5986828701612cff565b9350506020612e6a86828701612cff565b9250506040612e7b86828701612da7565b9150509250925092565b60008060008060808587031215612e9b57600080fd5b6000612ea987828801612cff565b9450506020612eba87828801612cff565b9350506040612ecb87828801612da7565b925050606085013567ffffffffffffffff811115612ee857600080fd5b612ef487828801612d53565b91505092959194509250565b60008060408385031215612f1357600080fd5b6000612f2185828601612cff565b9250506020612f3285828601612d14565b9150509250929050565b60008060408385031215612f4f57600080fd5b6000612f5d85828601612cff565b9250506020612f6e85828601612da7565b9150509250929050565b600060208284031215612f8a57600080fd5b6000612f9884828501612d29565b91505092915050565b600060208284031215612fb357600080fd5b6000612fc184828501612d3e565b91505092915050565b600060208284031215612fdc57600080fd5b600082013567ffffffffffffffff811115612ff657600080fd5b61300284828501612d7d565b91505092915050565b60006020828403121561301d57600080fd5b600061302b84828501612da7565b91505092915050565b60006020828403121561304657600080fd5b600061305484828501612dbc565b91505092915050565b61306681613ba9565b82525050565b61307581613bbb565b82525050565b600061308682613a5e565b6130908185613a74565b93506130a0818560208601613c5b565b6130a981613e51565b840191505092915050565b60006130bf82613a69565b6130c98185613a90565b93506130d9818560208601613c5b565b6130e281613e51565b840191505092915050565b60006130f882613a69565b6131028185613aa1565b9350613112818560208601613c5b565b80840191505092915050565b600061312b602b83613a90565b915061313682613e62565b604082019050919050565b600061314e602c83613a90565b915061315982613eb1565b604082019050919050565b6000613171603283613a90565b915061317c82613f00565b604082019050919050565b6000613194602683613a90565b915061319f82613f4f565b604082019050919050565b60006131b7601c83613a90565b91506131c282613f9e565b602082019050919050565b60006131da601883613a90565b91506131e582613fc7565b602082019050919050565b60006131fd603d83613a90565b915061320882613ff0565b604082019050919050565b6000613220602483613a90565b915061322b8261403f565b604082019050919050565b6000613243601983613a90565b915061324e8261408e565b602082019050919050565b6000613266602c83613a90565b9150613271826140b7565b604082019050919050565b6000613289603883613a90565b915061329482614106565b604082019050919050565b60006132ac602a83613a90565b91506132b782614155565b604082019050919050565b60006132cf602983613a90565b91506132da826141a4565b604082019050919050565b60006132f2602083613a90565b91506132fd826141f3565b602082019050919050565b6000613315603183613a90565b91506133208261421c565b604082019050919050565b6000613338602c83613a90565b91506133438261426b565b604082019050919050565b600061335b602083613a90565b9150613366826142ba565b602082019050919050565b600061337e602983613a90565b9150613389826142e3565b604082019050919050565b60006133a1602f83613a90565b91506133ac82614332565b604082019050919050565b60006133c4601883613a90565b91506133cf82614381565b602082019050919050565b60006133e7601983613a90565b91506133f2826143aa565b602082019050919050565b600061340a602183613a90565b9150613415826143d3565b604082019050919050565b600061342d601683613a90565b915061343882614422565b602082019050919050565b6000613450601483613a90565b915061345b8261444b565b602082019050919050565b6000613473601083613a90565b915061347e82614474565b602082019050919050565b6000613496600083613a85565b91506134a18261449d565b600082019050919050565b60006134b9603183613a90565b91506134c4826144a0565b604082019050919050565b60006134dc602c83613a90565b91506134e7826144ef565b604082019050919050565b6134fb81613bf3565b82525050565b61350a81613c21565b82525050565b61351981613c2b565b82525050565b61352881613c3f565b82525050565b600061353a82856130ed565b915061354682846130ed565b91508190509392505050565b600061355d82613489565b9150819050919050565b600060208201905061357c600083018461305d565b92915050565b6000608082019050613597600083018761305d565b6135a4602083018661305d565b6135b16040830185613501565b81810360608301526135c3818461307b565b905095945050505050565b60006020820190506135e3600083018461306c565b92915050565b6000602082019050818103600083015261360381846130b4565b905092915050565b600060208201905081810360008301526136248161311e565b9050919050565b6000602082019050818103600083015261364481613141565b9050919050565b6000602082019050818103600083015261366481613164565b9050919050565b6000602082019050818103600083015261368481613187565b9050919050565b600060208201905081810360008301526136a4816131aa565b9050919050565b600060208201905081810360008301526136c4816131cd565b9050919050565b600060208201905081810360008301526136e4816131f0565b9050919050565b6000602082019050818103600083015261370481613213565b9050919050565b6000602082019050818103600083015261372481613236565b9050919050565b6000602082019050818103600083015261374481613259565b9050919050565b600060208201905081810360008301526137648161327c565b9050919050565b600060208201905081810360008301526137848161329f565b9050919050565b600060208201905081810360008301526137a4816132c2565b9050919050565b600060208201905081810360008301526137c4816132e5565b9050919050565b600060208201905081810360008301526137e481613308565b9050919050565b600060208201905081810360008301526138048161332b565b9050919050565b600060208201905081810360008301526138248161334e565b9050919050565b6000602082019050818103600083015261384481613371565b9050919050565b6000602082019050818103600083015261386481613394565b9050919050565b60006020820190508181036000830152613884816133b7565b9050919050565b600060208201905081810360008301526138a4816133da565b9050919050565b600060208201905081810360008301526138c4816133fd565b9050919050565b600060208201905081810360008301526138e481613420565b9050919050565b6000602082019050818103600083015261390481613443565b9050919050565b6000602082019050818103600083015261392481613466565b9050919050565b60006020820190508181036000830152613944816134ac565b9050919050565b60006020820190508181036000830152613964816134cf565b9050919050565b600060208201905061398060008301846134f2565b92915050565b600060208201905061399b6000830184613501565b92915050565b60006020820190506139b66000830184613510565b92915050565b60006020820190506139d1600083018461351f565b92915050565b60006139e16139f2565b90506139ed8282613cc0565b919050565b6000604051905090565b600067ffffffffffffffff821115613a1757613a16613e22565b5b613a2082613e51565b9050602081019050919050565b600067ffffffffffffffff821115613a4857613a47613e22565b5b613a5182613e51565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613ab782613c21565b9150613ac283613c21565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613af757613af6613d95565b5b828201905092915050565b6000613b0d82613c21565b9150613b1883613c21565b925082613b2857613b27613dc4565b5b828204905092915050565b6000613b3e82613c2b565b9150613b4983613c2b565b92508167ffffffffffffffff0483118215151615613b6a57613b69613d95565b5b828202905092915050565b6000613b8082613c21565b9150613b8b83613c21565b925082821015613b9e57613b9d613d95565b5b828203905092915050565b6000613bb482613c01565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015613c79578082015181840152602081019050613c5e565b83811115613c88576000848401525b50505050565b60006002820490506001821680613ca657607f821691505b60208210811415613cba57613cb9613df3565b5b50919050565b613cc982613e51565b810181811067ffffffffffffffff82111715613ce857613ce7613e22565b5b80604052505050565b6000613cfc82613c21565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d2f57613d2e613d95565b5b600182019050919050565b6000613d4582613c3f565b915060ff821415613d5957613d58613d95565b5b600182019050919050565b6000613d6f82613c21565b9150613d7a83613c21565b925082613d8a57613d89613dc4565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4574686572207375626d697474656420646f6573206e6f74206d61746368206360008201527f757272656e742070726963650000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f42616c616e6365206d75737420626520706f7369746976650000000000000000600082015250565b7f4d6178696d756d2063757272656e7420627579206c696d697420666f7220696e60008201527f646976696475616c207472616e73616374696f6e206578636565646564000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4661696c656420746f2077697468647261772065746865720000000000000000600082015250565b7f4d6178206d696e7420706572206163636f756e74206973203300000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c7900000000000000000000600082015250565b7f4d757374206d696e74206174206c656173742031000000000000000000000000600082015250565b7f53616c65206973206e6f74206f70656e00000000000000000000000000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61454781613ba9565b811461455257600080fd5b50565b61455e81613bbb565b811461456957600080fd5b50565b61457581613bc7565b811461458057600080fd5b50565b61458c81613c21565b811461459757600080fd5b50565b6145a381613c3f565b81146145ae57600080fd5b5056fea26469706673582212209c83b69f5d0ab85a8070b77a9159c1982fe804dbb3cebeda3584789ffd1101b664736f6c63430008030033

Deployed Bytecode

0x6080604052600436106101b75760003560e01c80636ecd2306116100ec578063ac8daba01161008a578063d5abeb0111610064578063d5abeb01146105fb578063e985e9c514610626578063eb91d37e14610663578063f2fde38b1461068e576101b7565b8063ac8daba01461056a578063b88d4fde14610595578063c87b56dd146105be576101b7565b806382d95df5116100c657806382d95df5146104c25780638da5cb5b146104eb57806395d89b4114610516578063a22cb46514610541576101b7565b80636ecd23061461045257806370a082311461046e578063715018a6146104ab576101b7565b8063339181d91161015957806342966c681161013357806342966c68146103865780634f6ccce7146103af57806355f804b3146103ec5780636352211e14610415576101b7565b8063339181d91461031b5780633ccfd60b1461034657806342842e0e1461035d576101b7565b8063095ea7b311610195578063095ea7b31461026157806318160ddd1461028a57806323b872dd146102b55780632f745c59146102de576101b7565b806301ffc9a7146101bc57806306fdde03146101f9578063081812fc14610224575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de9190612f78565b6106b7565b6040516101f091906135ce565b60405180910390f35b34801561020557600080fd5b5061020e6106c9565b60405161021b91906135e9565b60405180910390f35b34801561023057600080fd5b5061024b6004803603810190610246919061300b565b61075b565b6040516102589190613567565b60405180910390f35b34801561026d57600080fd5b5061028860048036038101906102839190612f3c565b6107e0565b005b34801561029657600080fd5b5061029f6108f8565b6040516102ac9190613986565b60405180910390f35b3480156102c157600080fd5b506102dc60048036038101906102d79190612e36565b610905565b005b3480156102ea57600080fd5b5061030560048036038101906103009190612f3c565b610965565b6040516103129190613986565b60405180910390f35b34801561032757600080fd5b50610330610a0a565b60405161033d91906139bc565b60405180910390f35b34801561035257600080fd5b5061035b610a13565b005b34801561036957600080fd5b50610384600480360381019061037f9190612e36565b610b88565b005b34801561039257600080fd5b506103ad60048036038101906103a8919061300b565b610ba8565b005b3480156103bb57600080fd5b506103d660048036038101906103d1919061300b565b610c30565b6040516103e39190613986565b60405180910390f35b3480156103f857600080fd5b50610413600480360381019061040e9190612fca565b610cc7565b005b34801561042157600080fd5b5061043c6004803603810190610437919061300b565b610d5d565b6040516104499190613567565b60405180910390f35b61046c60048036038101906104679190613034565b610e0f565b005b34801561047a57600080fd5b5061049560048036038101906104909190612dd1565b61104e565b6040516104a29190613986565b60405180910390f35b3480156104b757600080fd5b506104c0611106565b005b3480156104ce57600080fd5b506104e960048036038101906104e4919061300b565b61118e565b005b3480156104f757600080fd5b50610500611214565b60405161050d9190613567565b60405180910390f35b34801561052257600080fd5b5061052b61123e565b60405161053891906135e9565b60405180910390f35b34801561054d57600080fd5b5061056860048036038101906105639190612f00565b6112d0565b005b34801561057657600080fd5b5061057f611451565b60405161058c9190613986565b60405180910390f35b3480156105a157600080fd5b506105bc60048036038101906105b79190612e85565b611457565b005b3480156105ca57600080fd5b506105e560048036038101906105e0919061300b565b6114b9565b6040516105f291906135e9565b60405180910390f35b34801561060757600080fd5b506106106114cb565b60405161061d919061396b565b60405180910390f35b34801561063257600080fd5b5061064d60048036038101906106489190612dfa565b6114d0565b60405161065a91906135ce565b60405180910390f35b34801561066f57600080fd5b50610678611564565b60405161068591906139a1565b60405180910390f35b34801561069a57600080fd5b506106b560048036038101906106b09190612dd1565b611574565b005b60006106c28261166c565b9050919050565b6060600080546106d890613c8e565b80601f016020809104026020016040519081016040528092919081815260200182805461070490613c8e565b80156107515780601f1061072657610100808354040283529160200191610751565b820191906000526020600020905b81548152906001019060200180831161073457829003601f168201915b5050505050905090565b6000610766826116e6565b6107a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079c906137eb565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107eb82610d5d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561085c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610853906138ab565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661087b611752565b73ffffffffffffffffffffffffffffffffffffffff1614806108aa57506108a9816108a4611752565b6114d0565b5b6108e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e09061374b565b60405180910390fd5b6108f3838361175a565b505050565b6000600880549050905090565b610916610910611752565b82611813565b610955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094c9061392b565b60405180910390fd5b6109608383836118f1565b505050565b60006109708361104e565b82106109b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a89061360b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60006003905090565b610a1b611752565b73ffffffffffffffffffffffffffffffffffffffff16610a39611214565b73ffffffffffffffffffffffffffffffffffffffff1614610a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a869061380b565b60405180910390fd5b60004711610ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac9906136ab565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610af890613552565b60006040518083038185875af1925050503d8060008114610b35576040519150601f19603f3d011682016040523d82523d6000602084013e610b3a565b606091505b505090506001151581151514610b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7c9061386b565b60405180910390fd5b50565b610ba383838360405180602001604052806000815250611457565b505050565b610bb0611752565b73ffffffffffffffffffffffffffffffffffffffff16610bce611214565b73ffffffffffffffffffffffffffffffffffffffff1614610c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1b9061380b565b60405180910390fd5b610c2d81611b4d565b50565b6000610c3a6108f8565b8210610c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c729061394b565b60405180910390fd5b60088281548110610cb5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610ccf611752565b73ffffffffffffffffffffffffffffffffffffffff16610ced611214565b73ffffffffffffffffffffffffffffffffffffffff1614610d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3a9061380b565b60405180910390fd5b80600d9080519060200190610d59929190612ba0565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfd9061378b565b60405180910390fd5b80915050919050565b42600e541115610e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4b9061390b565b60405180910390fd5b60018160ff161015610e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e92906138eb565b60405180910390fd5b610ea3610a0a565b60ff168160ff161115610eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee2906136cb565b60405180910390fd5b6003610ef63361104e565b8260ff16610f049190613aac565b1115610f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3c9061388b565b60405180910390fd5b606f61ffff16610f536108f8565b8260ff16610f619190613aac565b1115610fa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f99906138cb565b60405180910390fd5b8060ff16610fae611564565b610fb89190613b33565b67ffffffffffffffff163414611003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffa9061362b565b60405180910390fd5b60005b8160ff168160ff16101561104a5761101e600c611b59565b600061102a600c611b6f565b90506110363382611b7d565b50808061104290613d3a565b915050611006565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b69061376b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61110e611752565b73ffffffffffffffffffffffffffffffffffffffff1661112c611214565b73ffffffffffffffffffffffffffffffffffffffff1614611182576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111799061380b565b60405180910390fd5b61118c6000611d4b565b565b611196611752565b73ffffffffffffffffffffffffffffffffffffffff166111b4611214565b73ffffffffffffffffffffffffffffffffffffffff161461120a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019061380b565b60405180910390fd5b80600e8190555050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461124d90613c8e565b80601f016020809104026020016040519081016040528092919081815260200182805461127990613c8e565b80156112c65780601f1061129b576101008083540402835291602001916112c6565b820191906000526020600020905b8154815290600101906020018083116112a957829003601f168201915b5050505050905090565b6112d8611752565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133d9061370b565b60405180910390fd5b8060056000611353611752565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611400611752565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161144591906135ce565b60405180910390a35050565b600e5481565b611468611462611752565b83611813565b6114a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149e9061392b565b60405180910390fd5b6114b384848484611e11565b50505050565b60606114c482611e6d565b9050919050565b606f81565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600067018a59e972118000905090565b61157c611752565b73ffffffffffffffffffffffffffffffffffffffff1661159a611214565b73ffffffffffffffffffffffffffffffffffffffff16146115f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e79061380b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611660576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116579061366b565b60405180910390fd5b61166981611d4b565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806116df57506116de82611fbf565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166117cd83610d5d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061181e826116e6565b61185d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118549061372b565b60405180910390fd5b600061186883610d5d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806118d757508373ffffffffffffffffffffffffffffffffffffffff166118bf8461075b565b73ffffffffffffffffffffffffffffffffffffffff16145b806118e857506118e781856114d0565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661191182610d5d565b73ffffffffffffffffffffffffffffffffffffffff1614611967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195e9061382b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ce906136eb565b60405180910390fd5b6119e28383836120a1565b6119ed60008261175a565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a3d9190613b75565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a949190613aac565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611b56816120b1565b50565b6001816000016000828254019250508190555050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be4906137ab565b60405180910390fd5b611bf6816116e6565b15611c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2d9061368b565b60405180910390fd5b611c42600083836120a1565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c929190613aac565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611e1c8484846118f1565b611e2884848484612104565b611e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5e9061364b565b60405180910390fd5b50505050565b6060611e78826116e6565b611eb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eae906137cb565b60405180910390fd5b6000600a60008481526020019081526020016000208054611ed790613c8e565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0390613c8e565b8015611f505780601f10611f2557610100808354040283529160200191611f50565b820191906000526020600020905b815481529060010190602001808311611f3357829003601f168201915b505050505090506000611f6161229b565b9050600081511415611f77578192505050611fba565b600082511115611fac578082604051602001611f9492919061352e565b60405160208183030381529060405292505050611fba565b611fb58461232d565b925050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061208a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061209a5750612099826123d4565b5b9050919050565b6120ac83838361243e565b505050565b6120ba81612552565b6000600a600083815260200190815260200160002080546120da90613c8e565b90501461210157600a600082815260200190815260200160002060006121009190612c26565b5b50565b60006121258473ffffffffffffffffffffffffffffffffffffffff16612663565b1561228e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261214e611752565b8786866040518563ffffffff1660e01b81526004016121709493929190613582565b602060405180830381600087803b15801561218a57600080fd5b505af19250505080156121bb57506040513d601f19601f820116820180604052508101906121b89190612fa1565b60015b61223e573d80600081146121eb576040519150601f19603f3d011682016040523d82523d6000602084013e6121f0565b606091505b50600081511415612236576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222d9061364b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612293565b600190505b949350505050565b6060600d80546122aa90613c8e565b80601f01602080910402602001604051908101604052809291908181526020018280546122d690613c8e565b80156123235780601f106122f857610100808354040283529160200191612323565b820191906000526020600020905b81548152906001019060200180831161230657829003601f168201915b5050505050905090565b6060612338826116e6565b612377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236e9061384b565b60405180910390fd5b600061238161229b565b905060008151116123a157604051806020016040528060008152506123cc565b806123ab84612676565b6040516020016123bc92919061352e565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612449838383612823565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561248c5761248781612828565b6124cb565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146124ca576124c98382612871565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561250e57612509816129de565b61254d565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461254c5761254b8282612b21565b5b5b505050565b600061255d82610d5d565b905061256b816000846120a1565b61257660008361175a565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125c69190613b75565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b606060008214156126be576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061281e565b600082905060005b600082146126f05780806126d990613cf1565b915050600a826126e99190613b02565b91506126c6565b60008167ffffffffffffffff811115612732577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156127645781602001600182028036833780820191505090505b5090505b600085146128175760018261277d9190613b75565b9150600a8561278c9190613d64565b60306127989190613aac565b60f81b8183815181106127d4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128109190613b02565b9450612768565b8093505050505b919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161287e8461104e565b6128889190613b75565b905060006007600084815260200190815260200160002054905081811461296d576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506129f29190613b75565b9050600060096000848152602001908152602001600020549050600060088381548110612a48577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612a90577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612b05577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612b2c8361104e565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b828054612bac90613c8e565b90600052602060002090601f016020900481019282612bce5760008555612c15565b82601f10612be757805160ff1916838001178555612c15565b82800160010185558215612c15579182015b82811115612c14578251825591602001919060010190612bf9565b5b509050612c229190612c66565b5090565b508054612c3290613c8e565b6000825580601f10612c445750612c63565b601f016020900490600052602060002090810190612c629190612c66565b5b50565b5b80821115612c7f576000816000905550600101612c67565b5090565b6000612c96612c91846139fc565b6139d7565b905082815260208101848484011115612cae57600080fd5b612cb9848285613c4c565b509392505050565b6000612cd4612ccf84613a2d565b6139d7565b905082815260208101848484011115612cec57600080fd5b612cf7848285613c4c565b509392505050565b600081359050612d0e8161453e565b92915050565b600081359050612d2381614555565b92915050565b600081359050612d388161456c565b92915050565b600081519050612d4d8161456c565b92915050565b600082601f830112612d6457600080fd5b8135612d74848260208601612c83565b91505092915050565b600082601f830112612d8e57600080fd5b8135612d9e848260208601612cc1565b91505092915050565b600081359050612db681614583565b92915050565b600081359050612dcb8161459a565b92915050565b600060208284031215612de357600080fd5b6000612df184828501612cff565b91505092915050565b60008060408385031215612e0d57600080fd5b6000612e1b85828601612cff565b9250506020612e2c85828601612cff565b9150509250929050565b600080600060608486031215612e4b57600080fd5b6000612e5986828701612cff565b9350506020612e6a86828701612cff565b9250506040612e7b86828701612da7565b9150509250925092565b60008060008060808587031215612e9b57600080fd5b6000612ea987828801612cff565b9450506020612eba87828801612cff565b9350506040612ecb87828801612da7565b925050606085013567ffffffffffffffff811115612ee857600080fd5b612ef487828801612d53565b91505092959194509250565b60008060408385031215612f1357600080fd5b6000612f2185828601612cff565b9250506020612f3285828601612d14565b9150509250929050565b60008060408385031215612f4f57600080fd5b6000612f5d85828601612cff565b9250506020612f6e85828601612da7565b9150509250929050565b600060208284031215612f8a57600080fd5b6000612f9884828501612d29565b91505092915050565b600060208284031215612fb357600080fd5b6000612fc184828501612d3e565b91505092915050565b600060208284031215612fdc57600080fd5b600082013567ffffffffffffffff811115612ff657600080fd5b61300284828501612d7d565b91505092915050565b60006020828403121561301d57600080fd5b600061302b84828501612da7565b91505092915050565b60006020828403121561304657600080fd5b600061305484828501612dbc565b91505092915050565b61306681613ba9565b82525050565b61307581613bbb565b82525050565b600061308682613a5e565b6130908185613a74565b93506130a0818560208601613c5b565b6130a981613e51565b840191505092915050565b60006130bf82613a69565b6130c98185613a90565b93506130d9818560208601613c5b565b6130e281613e51565b840191505092915050565b60006130f882613a69565b6131028185613aa1565b9350613112818560208601613c5b565b80840191505092915050565b600061312b602b83613a90565b915061313682613e62565b604082019050919050565b600061314e602c83613a90565b915061315982613eb1565b604082019050919050565b6000613171603283613a90565b915061317c82613f00565b604082019050919050565b6000613194602683613a90565b915061319f82613f4f565b604082019050919050565b60006131b7601c83613a90565b91506131c282613f9e565b602082019050919050565b60006131da601883613a90565b91506131e582613fc7565b602082019050919050565b60006131fd603d83613a90565b915061320882613ff0565b604082019050919050565b6000613220602483613a90565b915061322b8261403f565b604082019050919050565b6000613243601983613a90565b915061324e8261408e565b602082019050919050565b6000613266602c83613a90565b9150613271826140b7565b604082019050919050565b6000613289603883613a90565b915061329482614106565b604082019050919050565b60006132ac602a83613a90565b91506132b782614155565b604082019050919050565b60006132cf602983613a90565b91506132da826141a4565b604082019050919050565b60006132f2602083613a90565b91506132fd826141f3565b602082019050919050565b6000613315603183613a90565b91506133208261421c565b604082019050919050565b6000613338602c83613a90565b91506133438261426b565b604082019050919050565b600061335b602083613a90565b9150613366826142ba565b602082019050919050565b600061337e602983613a90565b9150613389826142e3565b604082019050919050565b60006133a1602f83613a90565b91506133ac82614332565b604082019050919050565b60006133c4601883613a90565b91506133cf82614381565b602082019050919050565b60006133e7601983613a90565b91506133f2826143aa565b602082019050919050565b600061340a602183613a90565b9150613415826143d3565b604082019050919050565b600061342d601683613a90565b915061343882614422565b602082019050919050565b6000613450601483613a90565b915061345b8261444b565b602082019050919050565b6000613473601083613a90565b915061347e82614474565b602082019050919050565b6000613496600083613a85565b91506134a18261449d565b600082019050919050565b60006134b9603183613a90565b91506134c4826144a0565b604082019050919050565b60006134dc602c83613a90565b91506134e7826144ef565b604082019050919050565b6134fb81613bf3565b82525050565b61350a81613c21565b82525050565b61351981613c2b565b82525050565b61352881613c3f565b82525050565b600061353a82856130ed565b915061354682846130ed565b91508190509392505050565b600061355d82613489565b9150819050919050565b600060208201905061357c600083018461305d565b92915050565b6000608082019050613597600083018761305d565b6135a4602083018661305d565b6135b16040830185613501565b81810360608301526135c3818461307b565b905095945050505050565b60006020820190506135e3600083018461306c565b92915050565b6000602082019050818103600083015261360381846130b4565b905092915050565b600060208201905081810360008301526136248161311e565b9050919050565b6000602082019050818103600083015261364481613141565b9050919050565b6000602082019050818103600083015261366481613164565b9050919050565b6000602082019050818103600083015261368481613187565b9050919050565b600060208201905081810360008301526136a4816131aa565b9050919050565b600060208201905081810360008301526136c4816131cd565b9050919050565b600060208201905081810360008301526136e4816131f0565b9050919050565b6000602082019050818103600083015261370481613213565b9050919050565b6000602082019050818103600083015261372481613236565b9050919050565b6000602082019050818103600083015261374481613259565b9050919050565b600060208201905081810360008301526137648161327c565b9050919050565b600060208201905081810360008301526137848161329f565b9050919050565b600060208201905081810360008301526137a4816132c2565b9050919050565b600060208201905081810360008301526137c4816132e5565b9050919050565b600060208201905081810360008301526137e481613308565b9050919050565b600060208201905081810360008301526138048161332b565b9050919050565b600060208201905081810360008301526138248161334e565b9050919050565b6000602082019050818103600083015261384481613371565b9050919050565b6000602082019050818103600083015261386481613394565b9050919050565b60006020820190508181036000830152613884816133b7565b9050919050565b600060208201905081810360008301526138a4816133da565b9050919050565b600060208201905081810360008301526138c4816133fd565b9050919050565b600060208201905081810360008301526138e481613420565b9050919050565b6000602082019050818103600083015261390481613443565b9050919050565b6000602082019050818103600083015261392481613466565b9050919050565b60006020820190508181036000830152613944816134ac565b9050919050565b60006020820190508181036000830152613964816134cf565b9050919050565b600060208201905061398060008301846134f2565b92915050565b600060208201905061399b6000830184613501565b92915050565b60006020820190506139b66000830184613510565b92915050565b60006020820190506139d1600083018461351f565b92915050565b60006139e16139f2565b90506139ed8282613cc0565b919050565b6000604051905090565b600067ffffffffffffffff821115613a1757613a16613e22565b5b613a2082613e51565b9050602081019050919050565b600067ffffffffffffffff821115613a4857613a47613e22565b5b613a5182613e51565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613ab782613c21565b9150613ac283613c21565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613af757613af6613d95565b5b828201905092915050565b6000613b0d82613c21565b9150613b1883613c21565b925082613b2857613b27613dc4565b5b828204905092915050565b6000613b3e82613c2b565b9150613b4983613c2b565b92508167ffffffffffffffff0483118215151615613b6a57613b69613d95565b5b828202905092915050565b6000613b8082613c21565b9150613b8b83613c21565b925082821015613b9e57613b9d613d95565b5b828203905092915050565b6000613bb482613c01565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015613c79578082015181840152602081019050613c5e565b83811115613c88576000848401525b50505050565b60006002820490506001821680613ca657607f821691505b60208210811415613cba57613cb9613df3565b5b50919050565b613cc982613e51565b810181811067ffffffffffffffff82111715613ce857613ce7613e22565b5b80604052505050565b6000613cfc82613c21565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d2f57613d2e613d95565b5b600182019050919050565b6000613d4582613c3f565b915060ff821415613d5957613d58613d95565b5b600182019050919050565b6000613d6f82613c21565b9150613d7a83613c21565b925082613d8a57613d89613dc4565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4574686572207375626d697474656420646f6573206e6f74206d61746368206360008201527f757272656e742070726963650000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f42616c616e6365206d75737420626520706f7369746976650000000000000000600082015250565b7f4d6178696d756d2063757272656e7420627579206c696d697420666f7220696e60008201527f646976696475616c207472616e73616374696f6e206578636565646564000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4661696c656420746f2077697468647261772065746865720000000000000000600082015250565b7f4d6178206d696e7420706572206163636f756e74206973203300000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c7900000000000000000000600082015250565b7f4d757374206d696e74206174206c656173742031000000000000000000000000600082015250565b7f53616c65206973206e6f74206f70656e00000000000000000000000000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61454781613ba9565b811461455257600080fd5b50565b61455e81613bbb565b811461456957600080fd5b50565b61457581613bc7565b811461458057600080fd5b50565b61458c81613c21565b811461459757600080fd5b50565b6145a381613c3f565b81146145ae57600080fd5b5056fea26469706673582212209c83b69f5d0ab85a8070b77a9159c1982fe804dbb3cebeda3584789ffd1101b664736f6c63430008030033

Deployed Bytecode Sourcemap

46201:3221:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47130:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26145:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27704:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27227:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38783:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28594:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38451:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47677:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49159:260;;;;;;;;;;;;;:::i;:::-;;29004:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47041:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38973:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47352:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25839:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47968:937;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25569:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3778:94;;;;;;;;;;;;;:::i;:::-;;46584:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3127:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26314:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27997:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46453:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29260:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48917:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46367:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28363:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47825:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4027:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47130:212;47269:4;47298:36;47322:11;47298:23;:36::i;:::-;47291:43;;47130:212;;;:::o;26145:100::-;26199:13;26232:5;26225:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26145:100;:::o;27704:221::-;27780:7;27808:16;27816:7;27808;:16::i;:::-;27800:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27893:15;:24;27909:7;27893:24;;;;;;;;;;;;;;;;;;;;;27886:31;;27704:221;;;:::o;27227:411::-;27308:13;27324:23;27339:7;27324:14;:23::i;:::-;27308:39;;27372:5;27366:11;;:2;:11;;;;27358:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27466:5;27450:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27475:37;27492:5;27499:12;:10;:12::i;:::-;27475:16;:37::i;:::-;27450:62;27428:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27609:21;27618:2;27622:7;27609:8;:21::i;:::-;27227:411;;;:::o;38783:113::-;38844:7;38871:10;:17;;;;38864:24;;38783:113;:::o;28594:339::-;28789:41;28808:12;:10;:12::i;:::-;28822:7;28789:18;:41::i;:::-;28781:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28897:28;28907:4;28913:2;28917:7;28897:9;:28::i;:::-;28594:339;;;:::o;38451:256::-;38548:7;38584:23;38601:5;38584:16;:23::i;:::-;38576:5;:31;38568:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38673:12;:19;38686:5;38673:19;;;;;;;;;;;;;;;:26;38693:5;38673:26;;;;;;;;;;;;38666:33;;38451:256;;;;:::o;47677:86::-;47729:5;47754:1;47747:8;;47677:86;:::o;49159:260::-;3358:12;:10;:12::i;:::-;3347:23;;:7;:5;:7::i;:::-;:23;;;3339:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49239:1:::1;49215:21;:25;49207:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;49281:12;49299:10;:15;;49322:21;49299:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49280:68;;;49378:4;49367:15;;:7;:15;;;49359:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;3418:1;49159:260::o:0;29004:185::-;29142:39;29159:4;29165:2;29169:7;29142:39;;;;;;;;;;;;:16;:39::i;:::-;29004:185;;;:::o;47041:81::-;3358:12;:10;:12::i;:::-;3347:23;;:7;:5;:7::i;:::-;:23;;;3339:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47100:14:::1;47106:7;47100:5;:14::i;:::-;47041:81:::0;:::o;38973:233::-;39048:7;39084:30;:28;:30::i;:::-;39076:5;:38;39068:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;39181:10;39192:5;39181:17;;;;;;;;;;;;;;;;;;;;;;;;39174:24;;38973:233;;;:::o;47352:120::-;3358:12;:10;:12::i;:::-;3347:23;;:7;:5;:7::i;:::-;:23;;;3339:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47448:16:::1;47432:13;:32;;;;;;;;;;;;:::i;:::-;;47352:120:::0;:::o;25839:239::-;25911:7;25931:13;25947:7;:16;25955:7;25947:16;;;;;;;;;;;;;;;;;;;;;25931:32;;25999:1;25982:19;;:5;:19;;;;25974:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26065:5;26058:12;;;25839:239;;;:::o;47968:937::-;48053:15;48039:10;;:29;;48031:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;48127:1;48108:15;:20;;;;48100:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;48205:21;:19;:21::i;:::-;48186:40;;:15;:40;;;;48164:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;48379:1;48353:21;48363:10;48353:9;:21::i;:::-;48335:15;:39;;;;;;:::i;:::-;48334:46;;48326:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;46402:3;48443:46;;48462:13;:11;:13::i;:::-;48444:15;:31;;;;;;:::i;:::-;48443:46;;48421:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;48606:15;48586:35;;:17;:15;:17::i;:::-;:35;;;;:::i;:::-;48572:50;;:9;:50;48550:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;48712:7;48707:191;48729:15;48725:19;;:1;:19;;;48707:191;;;48766:21;:9;:19;:21::i;:::-;48804:17;48824:19;:9;:17;:19::i;:::-;48804:39;;48858:28;48864:10;48876:9;48858:5;:28::i;:::-;48707:191;48746:3;;;;;:::i;:::-;;;;48707:191;;;;47968:937;:::o;25569:208::-;25641:7;25686:1;25669:19;;:5;:19;;;;25661:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25753:9;:16;25763:5;25753:16;;;;;;;;;;;;;;;;25746:23;;25569:208;;;:::o;3778:94::-;3358:12;:10;:12::i;:::-;3347:23;;:7;:5;:7::i;:::-;:23;;;3339:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3843:21:::1;3861:1;3843:9;:21::i;:::-;3778:94::o:0;46584:99::-;3358:12;:10;:12::i;:::-;3347:23;;:7;:5;:7::i;:::-;:23;;;3339:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46666:9:::1;46653:10;:22;;;;46584:99:::0;:::o;3127:87::-;3173:7;3200:6;;;;;;;;;;;3193:13;;3127:87;:::o;26314:104::-;26370:13;26403:7;26396:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26314:104;:::o;27997:295::-;28112:12;:10;:12::i;:::-;28100:24;;:8;:24;;;;28092:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;28212:8;28167:18;:32;28186:12;:10;:12::i;:::-;28167:32;;;;;;;;;;;;;;;:42;28200:8;28167:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;28265:8;28236:48;;28251:12;:10;:12::i;:::-;28236:48;;;28275:8;28236:48;;;;;;:::i;:::-;;;;;;;;27997:295;;:::o;46453:38::-;;;;:::o;29260:328::-;29435:41;29454:12;:10;:12::i;:::-;29468:7;29435:18;:41::i;:::-;29427:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29541:39;29555:4;29561:2;29565:7;29574:5;29541:13;:39::i;:::-;29260:328;;;;:::o;48917:197::-;49045:13;49083:23;49098:7;49083:14;:23::i;:::-;49076:30;;48917:197;;;:::o;46367:38::-;46402:3;46367:38;:::o;28363:164::-;28460:4;28484:18;:25;28503:5;28484:25;;;;;;;;;;;;;;;:35;28510:8;28484:35;;;;;;;;;;;;;;;;;;;;;;;;;28477:42;;28363:164;;;;:::o;47825:105::-;47873:6;47899:23;47892:30;;47825:105;:::o;4027:192::-;3358:12;:10;:12::i;:::-;3347:23;;:7;:5;:7::i;:::-;:23;;;3339:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4136:1:::1;4116:22;;:8;:22;;;;4108:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4192:19;4202:8;4192:9;:19::i;:::-;4027:192:::0;:::o;38143:224::-;38245:4;38284:35;38269:50;;;:11;:50;;;;:90;;;;38323:36;38347:11;38323:23;:36::i;:::-;38269:90;38262:97;;38143:224;;;:::o;31098:127::-;31163:4;31215:1;31187:30;;:7;:16;31195:7;31187:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31180:37;;31098:127;;;:::o;1972:98::-;2025:7;2052:10;2045:17;;1972:98;:::o;35080:174::-;35182:2;35155:15;:24;35171:7;35155:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35238:7;35234:2;35200:46;;35209:23;35224:7;35209:14;:23::i;:::-;35200:46;;;;;;;;;;;;35080:174;;:::o;31392:348::-;31485:4;31510:16;31518:7;31510;:16::i;:::-;31502:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31586:13;31602:23;31617:7;31602:14;:23::i;:::-;31586:39;;31655:5;31644:16;;:7;:16;;;:51;;;;31688:7;31664:31;;:20;31676:7;31664:11;:20::i;:::-;:31;;;31644:51;:87;;;;31699:32;31716:5;31723:7;31699:16;:32::i;:::-;31644:87;31636:96;;;31392:348;;;;:::o;34384:578::-;34543:4;34516:31;;:23;34531:7;34516:14;:23::i;:::-;:31;;;34508:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34626:1;34612:16;;:2;:16;;;;34604:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34682:39;34703:4;34709:2;34713:7;34682:20;:39::i;:::-;34786:29;34803:1;34807:7;34786:8;:29::i;:::-;34847:1;34828:9;:15;34838:4;34828:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34876:1;34859:9;:13;34869:2;34859:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34907:2;34888:7;:16;34896:7;34888:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34946:7;34942:2;34927:27;;34936:4;34927:27;;;;;;;;;;;;34384:578;;;:::o;46918:115::-;47005:20;47017:7;47005:11;:20::i;:::-;46918:115;:::o;880:127::-;987:1;969:7;:14;;;:19;;;;;;;;;;;880:127;:::o;758:114::-;823:7;850;:14;;;843:21;;758:114;;;:::o;33076:382::-;33170:1;33156:16;;:2;:16;;;;33148:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33229:16;33237:7;33229;:16::i;:::-;33228:17;33220:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33291:45;33320:1;33324:2;33328:7;33291:20;:45::i;:::-;33366:1;33349:9;:13;33359:2;33349:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33397:2;33378:7;:16;33386:7;33378:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33442:7;33438:2;33417:33;;33434:1;33417:33;;;;;;;;;;;;33076:382;;:::o;4227:173::-;4283:16;4302:6;;;;;;;;;;;4283:25;;4328:8;4319:6;;:17;;;;;;;;;;;;;;;;;;4383:8;4352:40;;4373:8;4352:40;;;;;;;;;;;;4227:173;;:::o;30470:315::-;30627:28;30637:4;30643:2;30647:7;30627:9;:28::i;:::-;30674:48;30697:4;30703:2;30707:7;30716:5;30674:22;:48::i;:::-;30666:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30470:315;;;;:::o;44636:679::-;44709:13;44743:16;44751:7;44743;:16::i;:::-;44735:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;44826:23;44852:10;:19;44863:7;44852:19;;;;;;;;;;;44826:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44882:18;44903:10;:8;:10::i;:::-;44882:31;;45011:1;44995:4;44989:18;:23;44985:72;;;45036:9;45029:16;;;;;;44985:72;45187:1;45167:9;45161:23;:27;45157:108;;;45236:4;45242:9;45219:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45205:48;;;;;;45157:108;45284:23;45299:7;45284:14;:23::i;:::-;45277:30;;;;44636:679;;;;:::o;25200:305::-;25302:4;25354:25;25339:40;;;:11;:40;;;;:105;;;;25411:33;25396:48;;;:11;:48;;;;25339:105;:158;;;;25461:36;25485:11;25461:23;:36::i;:::-;25339:158;25319:178;;25200:305;;;:::o;46691:215::-;46853:45;46880:4;46886:2;46890:7;46853:26;:45::i;:::-;46691:215;;;:::o;45917:206::-;45986:20;45998:7;45986:11;:20::i;:::-;46060:1;46029:10;:19;46040:7;46029:19;;;;;;;;;;;46023:33;;;;;:::i;:::-;;;:38;46019:97;;46085:10;:19;46096:7;46085:19;;;;;;;;;;;;46078:26;;;;:::i;:::-;46019:97;45917:206;:::o;35819:803::-;35974:4;35995:15;:2;:13;;;:15::i;:::-;35991:624;;;36047:2;36031:36;;;36068:12;:10;:12::i;:::-;36082:4;36088:7;36097:5;36031:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36027:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36294:1;36277:6;:13;:18;36273:272;;;36320:60;;;;;;;;;;:::i;:::-;;;;;;;;36273:272;36495:6;36489:13;36480:6;36476:2;36472:15;36465:38;36027:533;36164:45;;;36154:55;;;:6;:55;;;;36147:62;;;;;35991:624;36599:4;36592:11;;35819:803;;;;;;;:::o;47480:106::-;47532:13;47565;47558:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47480:106;:::o;26489:334::-;26562:13;26596:16;26604:7;26596;:16::i;:::-;26588:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26677:21;26701:10;:8;:10::i;:::-;26677:34;;26753:1;26735:7;26729:21;:25;:86;;;;;;;;;;;;;;;;;26781:7;26790:18;:7;:16;:18::i;:::-;26764:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26729:86;26722:93;;;26489:334;;;:::o;6238:157::-;6323:4;6362:25;6347:40;;;:11;:40;;;;6340:47;;6238:157;;;:::o;39819:589::-;39963:45;39990:4;39996:2;40000:7;39963:26;:45::i;:::-;40041:1;40025:18;;:4;:18;;;40021:187;;;40060:40;40092:7;40060:31;:40::i;:::-;40021:187;;;40130:2;40122:10;;:4;:10;;;40118:90;;40149:47;40182:4;40188:7;40149:32;:47::i;:::-;40118:90;40021:187;40236:1;40222:16;;:2;:16;;;40218:183;;;40255:45;40292:7;40255:36;:45::i;:::-;40218:183;;;40328:4;40322:10;;:2;:10;;;40318:83;;40349:40;40377:2;40381:7;40349:27;:40::i;:::-;40318:83;40218:183;39819:589;;;:::o;33687:360::-;33747:13;33763:23;33778:7;33763:14;:23::i;:::-;33747:39;;33799:48;33820:5;33835:1;33839:7;33799:20;:48::i;:::-;33888:29;33905:1;33909:7;33888:8;:29::i;:::-;33950:1;33930:9;:16;33940:5;33930:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;33969:7;:16;33977:7;33969:16;;;;;;;;;;;;33962:23;;;;;;;;;;;34031:7;34027:1;34003:36;;34012:5;34003:36;;;;;;;;;;;;33687:360;;:::o;9284:387::-;9344:4;9552:12;9619:7;9607:20;9599:28;;9662:1;9655:4;:8;9648:15;;;9284:387;;;:::o;6709:723::-;6765:13;6995:1;6986:5;:10;6982:53;;;7013:10;;;;;;;;;;;;;;;;;;;;;6982:53;7045:12;7060:5;7045:20;;7076:14;7101:78;7116:1;7108:4;:9;7101:78;;7134:8;;;;;:::i;:::-;;;;7165:2;7157:10;;;;;:::i;:::-;;;7101:78;;;7189:19;7221:6;7211:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7189:39;;7239:154;7255:1;7246:5;:10;7239:154;;7283:1;7273:11;;;;;:::i;:::-;;;7350:2;7342:5;:10;;;;:::i;:::-;7329:2;:24;;;;:::i;:::-;7316:39;;7299:6;7306;7299:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;7379:2;7370:11;;;;;:::i;:::-;;;7239:154;;;7417:6;7403:21;;;;;6709:723;;;;:::o;37194:126::-;;;;:::o;41131:164::-;41235:10;:17;;;;41208:15;:24;41224:7;41208:24;;;;;;;;;;;:44;;;;41263:10;41279:7;41263:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41131:164;:::o;41922:988::-;42188:22;42238:1;42213:22;42230:4;42213:16;:22::i;:::-;:26;;;;:::i;:::-;42188:51;;42250:18;42271:17;:26;42289:7;42271:26;;;;;;;;;;;;42250:47;;42418:14;42404:10;:28;42400:328;;42449:19;42471:12;:18;42484:4;42471:18;;;;;;;;;;;;;;;:34;42490:14;42471:34;;;;;;;;;;;;42449:56;;42555:11;42522:12;:18;42535:4;42522:18;;;;;;;;;;;;;;;:30;42541:10;42522:30;;;;;;;;;;;:44;;;;42672:10;42639:17;:30;42657:11;42639:30;;;;;;;;;;;:43;;;;42400:328;;42824:17;:26;42842:7;42824:26;;;;;;;;;;;42817:33;;;42868:12;:18;42881:4;42868:18;;;;;;;;;;;;;;;:34;42887:14;42868:34;;;;;;;;;;;42861:41;;;41922:988;;;;:::o;43205:1079::-;43458:22;43503:1;43483:10;:17;;;;:21;;;;:::i;:::-;43458:46;;43515:18;43536:15;:24;43552:7;43536:24;;;;;;;;;;;;43515:45;;43887:19;43909:10;43920:14;43909:26;;;;;;;;;;;;;;;;;;;;;;;;43887:48;;43973:11;43948:10;43959;43948:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;44084:10;44053:15;:28;44069:11;44053:28;;;;;;;;;;;:41;;;;44225:15;:24;44241:7;44225:24;;;;;;;;;;;44218:31;;;44260:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43205:1079;;;;:::o;40709:221::-;40794:14;40811:20;40828:2;40811:16;:20::i;:::-;40794:37;;40869:7;40842:12;:16;40855:2;40842:16;;;;;;;;;;;;;;;:24;40859:6;40842:24;;;;;;;;;;;:34;;;;40916:6;40887:17;:26;40905:7;40887:26;;;;;;;;;;;:35;;;;40709:221;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::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:398::-;;17329:83;17410:1;17405:3;17329:83;:::i;:::-;17322:90;;17421:93;17510:3;17421:93;:::i;:::-;17539:1;17534:3;17530:11;17523:18;;17312:235;;;:::o;17553:366::-;;17716:67;17780:2;17775:3;17716:67;:::i;:::-;17709:74;;17792:93;17881:3;17792:93;:::i;:::-;17910:2;17905:3;17901:12;17894:19;;17699:220;;;:::o;17925:366::-;;18088:67;18152:2;18147:3;18088:67;:::i;:::-;18081:74;;18164:93;18253:3;18164:93;:::i;:::-;18282:2;18277:3;18273:12;18266:19;;18071:220;;;:::o;18297:115::-;18382:23;18399:5;18382:23;:::i;:::-;18377:3;18370:36;18360:52;;:::o;18418:118::-;18505:24;18523:5;18505:24;:::i;:::-;18500:3;18493:37;18483:53;;:::o;18542:115::-;18627:23;18644:5;18627:23;:::i;:::-;18622:3;18615:36;18605:52;;:::o;18663:112::-;18746:22;18762:5;18746:22;:::i;:::-;18741:3;18734:35;18724:51;;:::o;18781:435::-;;18983:95;19074:3;19065:6;18983:95;:::i;:::-;18976:102;;19095:95;19186:3;19177:6;19095:95;:::i;:::-;19088:102;;19207:3;19200:10;;18965:251;;;;;:::o;19222:379::-;;19428:147;19571:3;19428:147;:::i;:::-;19421:154;;19592:3;19585:10;;19410:191;;;:::o;19607:222::-;;19738:2;19727:9;19723:18;19715:26;;19751:71;19819:1;19808:9;19804:17;19795:6;19751:71;:::i;:::-;19705:124;;;;:::o;19835:640::-;;20068:3;20057:9;20053:19;20045:27;;20082:71;20150:1;20139:9;20135:17;20126:6;20082:71;:::i;:::-;20163:72;20231:2;20220:9;20216:18;20207:6;20163:72;:::i;:::-;20245;20313:2;20302:9;20298:18;20289:6;20245:72;:::i;:::-;20364:9;20358:4;20354:20;20349:2;20338:9;20334:18;20327:48;20392:76;20463:4;20454:6;20392:76;:::i;:::-;20384:84;;20035:440;;;;;;;:::o;20481:210::-;;20606:2;20595:9;20591:18;20583:26;;20619:65;20681:1;20670:9;20666:17;20657:6;20619:65;:::i;:::-;20573:118;;;;:::o;20697:313::-;;20848:2;20837:9;20833:18;20825:26;;20897:9;20891:4;20887:20;20883:1;20872:9;20868:17;20861:47;20925:78;20998:4;20989:6;20925:78;:::i;:::-;20917:86;;20815:195;;;;:::o;21016:419::-;;21220:2;21209:9;21205:18;21197:26;;21269:9;21263:4;21259:20;21255:1;21244:9;21240:17;21233:47;21297:131;21423:4;21297:131;:::i;:::-;21289:139;;21187:248;;;:::o;21441:419::-;;21645:2;21634:9;21630:18;21622:26;;21694:9;21688:4;21684:20;21680:1;21669:9;21665:17;21658:47;21722:131;21848:4;21722:131;:::i;:::-;21714:139;;21612:248;;;:::o;21866:419::-;;22070:2;22059:9;22055:18;22047:26;;22119:9;22113:4;22109:20;22105:1;22094:9;22090:17;22083:47;22147:131;22273:4;22147:131;:::i;:::-;22139:139;;22037:248;;;:::o;22291:419::-;;22495:2;22484:9;22480:18;22472:26;;22544:9;22538:4;22534:20;22530:1;22519:9;22515:17;22508:47;22572:131;22698:4;22572:131;:::i;:::-;22564:139;;22462:248;;;:::o;22716:419::-;;22920:2;22909:9;22905:18;22897:26;;22969:9;22963:4;22959:20;22955:1;22944:9;22940:17;22933:47;22997:131;23123:4;22997:131;:::i;:::-;22989:139;;22887:248;;;:::o;23141:419::-;;23345:2;23334:9;23330:18;23322:26;;23394:9;23388:4;23384:20;23380:1;23369:9;23365:17;23358:47;23422:131;23548:4;23422:131;:::i;:::-;23414:139;;23312:248;;;:::o;23566:419::-;;23770:2;23759:9;23755:18;23747:26;;23819:9;23813:4;23809:20;23805:1;23794:9;23790:17;23783:47;23847:131;23973:4;23847:131;:::i;:::-;23839:139;;23737:248;;;:::o;23991:419::-;;24195:2;24184:9;24180:18;24172:26;;24244:9;24238:4;24234:20;24230:1;24219:9;24215:17;24208:47;24272:131;24398:4;24272:131;:::i;:::-;24264:139;;24162:248;;;:::o;24416:419::-;;24620:2;24609:9;24605:18;24597:26;;24669:9;24663:4;24659:20;24655:1;24644:9;24640:17;24633:47;24697:131;24823:4;24697:131;:::i;:::-;24689:139;;24587:248;;;:::o;24841:419::-;;25045:2;25034:9;25030:18;25022:26;;25094:9;25088:4;25084:20;25080:1;25069:9;25065:17;25058:47;25122:131;25248:4;25122:131;:::i;:::-;25114:139;;25012:248;;;:::o;25266:419::-;;25470:2;25459:9;25455:18;25447:26;;25519:9;25513:4;25509:20;25505:1;25494:9;25490:17;25483:47;25547:131;25673:4;25547:131;:::i;:::-;25539:139;;25437:248;;;:::o;25691:419::-;;25895:2;25884:9;25880:18;25872:26;;25944:9;25938:4;25934:20;25930:1;25919:9;25915:17;25908:47;25972:131;26098:4;25972:131;:::i;:::-;25964:139;;25862:248;;;:::o;26116:419::-;;26320:2;26309:9;26305:18;26297:26;;26369:9;26363:4;26359:20;26355:1;26344:9;26340:17;26333:47;26397:131;26523:4;26397:131;:::i;:::-;26389:139;;26287:248;;;:::o;26541:419::-;;26745:2;26734:9;26730:18;26722:26;;26794:9;26788:4;26784:20;26780:1;26769:9;26765:17;26758:47;26822:131;26948:4;26822:131;:::i;:::-;26814:139;;26712:248;;;:::o;26966:419::-;;27170:2;27159:9;27155:18;27147:26;;27219:9;27213:4;27209:20;27205:1;27194:9;27190:17;27183:47;27247:131;27373:4;27247:131;:::i;:::-;27239:139;;27137:248;;;:::o;27391:419::-;;27595:2;27584:9;27580:18;27572:26;;27644:9;27638:4;27634:20;27630:1;27619:9;27615:17;27608:47;27672:131;27798:4;27672:131;:::i;:::-;27664:139;;27562:248;;;:::o;27816:419::-;;28020:2;28009:9;28005:18;27997:26;;28069:9;28063:4;28059:20;28055:1;28044:9;28040:17;28033:47;28097:131;28223:4;28097:131;:::i;:::-;28089:139;;27987:248;;;:::o;28241:419::-;;28445:2;28434:9;28430:18;28422:26;;28494:9;28488:4;28484:20;28480:1;28469:9;28465:17;28458:47;28522:131;28648:4;28522:131;:::i;:::-;28514:139;;28412:248;;;:::o;28666:419::-;;28870:2;28859:9;28855:18;28847:26;;28919:9;28913:4;28909:20;28905:1;28894:9;28890:17;28883:47;28947:131;29073:4;28947:131;:::i;:::-;28939:139;;28837:248;;;:::o;29091:419::-;;29295:2;29284:9;29280:18;29272:26;;29344:9;29338:4;29334:20;29330:1;29319:9;29315:17;29308:47;29372:131;29498:4;29372:131;:::i;:::-;29364:139;;29262:248;;;:::o;29516:419::-;;29720:2;29709:9;29705:18;29697:26;;29769:9;29763:4;29759:20;29755:1;29744:9;29740:17;29733:47;29797:131;29923:4;29797:131;:::i;:::-;29789:139;;29687:248;;;:::o;29941:419::-;;30145:2;30134:9;30130:18;30122:26;;30194:9;30188:4;30184:20;30180:1;30169:9;30165:17;30158:47;30222:131;30348:4;30222:131;:::i;:::-;30214:139;;30112:248;;;:::o;30366:419::-;;30570:2;30559:9;30555:18;30547:26;;30619:9;30613:4;30609:20;30605:1;30594:9;30590:17;30583:47;30647:131;30773:4;30647:131;:::i;:::-;30639:139;;30537:248;;;:::o;30791:419::-;;30995:2;30984:9;30980:18;30972:26;;31044:9;31038:4;31034:20;31030:1;31019:9;31015:17;31008:47;31072:131;31198:4;31072:131;:::i;:::-;31064:139;;30962:248;;;:::o;31216:419::-;;31420:2;31409:9;31405:18;31397:26;;31469:9;31463:4;31459:20;31455:1;31444:9;31440:17;31433:47;31497:131;31623:4;31497:131;:::i;:::-;31489:139;;31387:248;;;:::o;31641:419::-;;31845:2;31834:9;31830:18;31822:26;;31894:9;31888:4;31884:20;31880:1;31869:9;31865:17;31858:47;31922:131;32048:4;31922:131;:::i;:::-;31914:139;;31812:248;;;:::o;32066:419::-;;32270:2;32259:9;32255:18;32247:26;;32319:9;32313:4;32309:20;32305:1;32294:9;32290:17;32283:47;32347:131;32473:4;32347:131;:::i;:::-;32339:139;;32237:248;;;:::o;32491:218::-;;32620:2;32609:9;32605:18;32597:26;;32633:69;32699:1;32688:9;32684:17;32675:6;32633:69;:::i;:::-;32587:122;;;;:::o;32715:222::-;;32846:2;32835:9;32831:18;32823:26;;32859:71;32927:1;32916:9;32912:17;32903:6;32859:71;:::i;:::-;32813:124;;;;:::o;32943:218::-;;33072:2;33061:9;33057:18;33049:26;;33085:69;33151:1;33140:9;33136:17;33127:6;33085:69;:::i;:::-;33039:122;;;;:::o;33167:214::-;;33294:2;33283:9;33279:18;33271:26;;33307:67;33371:1;33360:9;33356:17;33347:6;33307:67;:::i;:::-;33261:120;;;;:::o;33387:129::-;;33448:20;;:::i;:::-;33438:30;;33477:33;33505:4;33497:6;33477:33;:::i;:::-;33428:88;;;:::o;33522:75::-;;33588:2;33582:9;33572:19;;33562:35;:::o;33603:307::-;;33754:18;33746:6;33743:30;33740:2;;;33776:18;;:::i;:::-;33740:2;33814:29;33836:6;33814:29;:::i;:::-;33806:37;;33898:4;33892;33888:15;33880:23;;33669:241;;;:::o;33916:308::-;;34068:18;34060:6;34057:30;34054:2;;;34090:18;;:::i;:::-;34054:2;34128:29;34150:6;34128:29;:::i;:::-;34120:37;;34212:4;34206;34202:15;34194:23;;33983:241;;;:::o;34230:98::-;;34315:5;34309:12;34299:22;;34288:40;;;:::o;34334:99::-;;34420:5;34414:12;34404:22;;34393:40;;;:::o;34439:168::-;;34556:6;34551:3;34544:19;34596:4;34591:3;34587:14;34572:29;;34534:73;;;;:::o;34613:147::-;;34751:3;34736:18;;34726:34;;;;:::o;34766:169::-;;34884:6;34879:3;34872:19;34924:4;34919:3;34915:14;34900:29;;34862:73;;;;:::o;34941:148::-;;35080:3;35065:18;;35055:34;;;;:::o;35095:305::-;;35154:20;35172:1;35154:20;:::i;:::-;35149:25;;35188:20;35206:1;35188:20;:::i;:::-;35183:25;;35342:1;35274:66;35270:74;35267:1;35264:81;35261:2;;;35348:18;;:::i;:::-;35261:2;35392:1;35389;35385:9;35378:16;;35139:261;;;;:::o;35406:185::-;;35463:20;35481:1;35463:20;:::i;:::-;35458:25;;35497:20;35515:1;35497:20;:::i;:::-;35492:25;;35536:1;35526:2;;35541:18;;:::i;:::-;35526:2;35583:1;35580;35576:9;35571:14;;35448:143;;;;:::o;35597:297::-;;35659:19;35676:1;35659:19;:::i;:::-;35654:24;;35692:19;35709:1;35692:19;:::i;:::-;35687:24;;35831:1;35811:18;35807:26;35804:1;35801:33;35796:1;35789:9;35782:17;35778:57;35775:2;;;35838:18;;:::i;:::-;35775:2;35886:1;35883;35879:9;35868:20;;35644:250;;;;:::o;35900:191::-;;35960:20;35978:1;35960:20;:::i;:::-;35955:25;;35994:20;36012:1;35994:20;:::i;:::-;35989:25;;36033:1;36030;36027:8;36024:2;;;36038:18;;:::i;:::-;36024:2;36083:1;36080;36076:9;36068:17;;35945:146;;;;:::o;36097:96::-;;36163:24;36181:5;36163:24;:::i;:::-;36152:35;;36142:51;;;:::o;36199:90::-;;36276:5;36269:13;36262:21;36251:32;;36241:48;;;:::o;36295:149::-;;36371:66;36364:5;36360:78;36349:89;;36339:105;;;:::o;36450:89::-;;36526:6;36519:5;36515:18;36504:29;;36494:45;;;:::o;36545:126::-;;36622:42;36615:5;36611:54;36600:65;;36590:81;;;:::o;36677:77::-;;36743:5;36732:16;;36722:32;;;:::o;36760:101::-;;36836:18;36829:5;36825:30;36814:41;;36804:57;;;:::o;36867:86::-;;36942:4;36935:5;36931:16;36920:27;;36910:43;;;:::o;36959:154::-;37043:6;37038:3;37033;37020:30;37105:1;37096:6;37091:3;37087:16;37080:27;37010:103;;;:::o;37119:307::-;37187:1;37197:113;37211:6;37208:1;37205:13;37197:113;;;37296:1;37291:3;37287:11;37281:18;37277:1;37272:3;37268:11;37261:39;37233:2;37230:1;37226:10;37221:15;;37197:113;;;37328:6;37325:1;37322:13;37319:2;;;37408:1;37399:6;37394:3;37390:16;37383:27;37319:2;37168:258;;;;:::o;37432:320::-;;37513:1;37507:4;37503:12;37493:22;;37560:1;37554:4;37550:12;37581:18;37571:2;;37637:4;37629:6;37625:17;37615:27;;37571:2;37699;37691:6;37688:14;37668:18;37665:38;37662:2;;;37718:18;;:::i;:::-;37662:2;37483:269;;;;:::o;37758:281::-;37841:27;37863:4;37841:27;:::i;:::-;37833:6;37829:40;37971:6;37959:10;37956:22;37935:18;37923:10;37920:34;37917:62;37914:2;;;37982:18;;:::i;:::-;37914:2;38022:10;38018:2;38011:22;37801:238;;;:::o;38045:233::-;;38107:24;38125:5;38107:24;:::i;:::-;38098:33;;38153:66;38146:5;38143:77;38140:2;;;38223:18;;:::i;:::-;38140:2;38270:1;38263:5;38259:13;38252:20;;38088:190;;;:::o;38284:167::-;;38344:22;38360:5;38344:22;:::i;:::-;38335:31;;38388:4;38381:5;38378:15;38375:2;;;38396:18;;:::i;:::-;38375:2;38443:1;38436:5;38432:13;38425:20;;38325:126;;;:::o;38457:176::-;;38506:20;38524:1;38506:20;:::i;:::-;38501:25;;38540:20;38558:1;38540:20;:::i;:::-;38535:25;;38579:1;38569:2;;38584:18;;:::i;:::-;38569:2;38625:1;38622;38618:9;38613:14;;38491:142;;;;:::o;38639:180::-;38687:77;38684:1;38677:88;38784:4;38781:1;38774:15;38808:4;38805:1;38798:15;38825:180;38873:77;38870:1;38863:88;38970:4;38967:1;38960:15;38994:4;38991:1;38984:15;39011:180;39059:77;39056:1;39049:88;39156:4;39153:1;39146:15;39180:4;39177:1;39170:15;39197:180;39245:77;39242:1;39235:88;39342:4;39339:1;39332:15;39366:4;39363:1;39356:15;39383:102;;39475:2;39471:7;39466:2;39459:5;39455:14;39451:28;39441:38;;39431:54;;;:::o;39491:230::-;39631:34;39627:1;39619:6;39615:14;39608:58;39700:13;39695:2;39687:6;39683:15;39676:38;39597:124;:::o;39727:231::-;39867:34;39863:1;39855:6;39851:14;39844:58;39936:14;39931:2;39923:6;39919:15;39912:39;39833:125;:::o;39964:237::-;40104:34;40100:1;40092:6;40088:14;40081:58;40173:20;40168:2;40160:6;40156:15;40149:45;40070:131;:::o;40207:225::-;40347:34;40343:1;40335:6;40331:14;40324:58;40416:8;40411:2;40403:6;40399:15;40392:33;40313:119;:::o;40438:178::-;40578:30;40574:1;40566:6;40562:14;40555:54;40544:72;:::o;40622:174::-;40762:26;40758:1;40750:6;40746:14;40739:50;40728:68;:::o;40802:248::-;40942:34;40938:1;40930:6;40926:14;40919:58;41011:31;41006:2;40998:6;40994:15;40987:56;40908:142;:::o;41056:223::-;41196:34;41192:1;41184:6;41180:14;41173:58;41265:6;41260:2;41252:6;41248:15;41241:31;41162:117;:::o;41285:175::-;41425:27;41421:1;41413:6;41409:14;41402:51;41391:69;:::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:243::-;41843:34;41839:1;41831:6;41827:14;41820:58;41912:26;41907:2;41899:6;41895:15;41888:51;41809:137;:::o;41952:229::-;42092:34;42088:1;42080:6;42076:14;42069:58;42161:12;42156:2;42148:6;42144:15;42137:37;42058:123;:::o;42187:228::-;42327:34;42323:1;42315:6;42311:14;42304:58;42396:11;42391:2;42383:6;42379:15;42372:36;42293:122;:::o;42421:182::-;42561:34;42557:1;42549:6;42545:14;42538:58;42527:76;:::o;42609:236::-;42749:34;42745:1;42737:6;42733:14;42726:58;42818:19;42813:2;42805:6;42801:15;42794:44;42715:130;:::o;42851:231::-;42991:34;42987:1;42979:6;42975:14;42968:58;43060:14;43055:2;43047:6;43043:15;43036:39;42957:125;:::o;43088:182::-;43228:34;43224:1;43216:6;43212:14;43205:58;43194:76;:::o;43276:228::-;43416:34;43412:1;43404:6;43400:14;43393:58;43485:11;43480:2;43472:6;43468:15;43461:36;43382:122;:::o;43510:234::-;43650:34;43646:1;43638:6;43634:14;43627:58;43719:17;43714:2;43706:6;43702:15;43695:42;43616:128;:::o;43750:174::-;43890:26;43886:1;43878:6;43874:14;43867:50;43856:68;:::o;43930:175::-;44070:27;44066:1;44058:6;44054:14;44047:51;44036:69;:::o;44111:220::-;44251:34;44247:1;44239:6;44235:14;44228:58;44320:3;44315:2;44307:6;44303:15;44296:28;44217:114;:::o;44337:172::-;44477:24;44473:1;44465:6;44461:14;44454:48;44443:66;:::o;44515:170::-;44655:22;44651:1;44643:6;44639:14;44632:46;44621:64;:::o;44691:166::-;44831:18;44827:1;44819:6;44815:14;44808:42;44797:60;:::o;44863:114::-;44969:8;:::o;44983:236::-;45123:34;45119:1;45111:6;45107:14;45100:58;45192:19;45187:2;45179:6;45175:15;45168:44;45089:130;:::o;45225:231::-;45365:34;45361:1;45353:6;45349:14;45342:58;45434:14;45429:2;45421:6;45417:15;45410:39;45331:125;:::o;45462:122::-;45535:24;45553:5;45535:24;:::i;:::-;45528:5;45525:35;45515:2;;45574:1;45571;45564:12;45515:2;45505:79;:::o;45590:116::-;45660:21;45675:5;45660:21;:::i;:::-;45653:5;45650:32;45640:2;;45696:1;45693;45686:12;45640:2;45630:76;:::o;45712:120::-;45784:23;45801:5;45784:23;:::i;:::-;45777:5;45774:34;45764:2;;45822:1;45819;45812:12;45764:2;45754:78;:::o;45838:122::-;45911:24;45929:5;45911:24;:::i;:::-;45904:5;45901:35;45891:2;;45950:1;45947;45940:12;45891:2;45881:79;:::o;45966:118::-;46037:22;46053:5;46037:22;:::i;:::-;46030:5;46027:33;46017:2;;46074:1;46071;46064:12;46017:2;46007:77;:::o

Swarm Source

ipfs://9c83b69f5d0ab85a8070b77a9159c1982fe804dbb3cebeda3584789ffd1101b6
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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