ETH Price: $2,972.79 (-4.22%)
Gas: 2 Gwei

Token

FroyoCat (FroyoCat)
 

Overview

Max Total Supply

151 FroyoCat

Holders

127

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
0xMaki
Balance
1 FroyoCat
0x285b7eea81a5b66b62e7276a24c1e0f83f7409c1
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
FroyoCat

Compiler Version
v0.8.3+commit.8d00100c

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;


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

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

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

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

abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

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.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 {}
}

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

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

interface IFroyoCat {
    function adminMint(address[] calldata _toAddresses) external;
}

abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

abstract contract ERC721Pausable is ERC721, Ownable, Pausable {
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);
        if (_msgSender() != owner()) {
            require(!paused(), "ERC721Pausable: token transfer while paused");
        }
    }
}

interface IFroyoCatMachine {
    function claim(uint256 _nftId) external;

    function adminClaim(uint256 _nftId) external;
}

contract FroyoCat is ERC721, ERC721Enumerable, Ownable, ERC721Pausable {
    using SafeMath for uint256;
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIdTracker;

    string public baseTokenURI;

    struct Cat {
        address owner;
        bool claimed;
        uint256 time;
    }

    mapping(uint256 => Cat) froyoCats;

    event Mint(
        address indexed caller,
        address indexed to,
        uint256 indexed nftId,
        uint256 time
    );

    IFroyoCatMachine froyoCatMachine;

    constructor(string memory baseURI) ERC721("FroyoCat", "FroyoCat") {
        setBaseURI(baseURI);
        pause(true);
    }

    function updateFroyoCatMachine(IFroyoCatMachine _froyoCatMachine)
        external
        onlyOwner
    {
        froyoCatMachine = _froyoCatMachine;
    }

    function adminMint(address[] calldata _toAddresses)
        external
        onlyOwner
        whenNotPaused
    {
        for (uint256 i = 0; i < _toAddresses.length; i++) {
            require(_toAddresses[i] != address(0), "Address invalid");

            _tokenIdTracker.increment();
            uint256 _nftId = _totalSupply();

            _mint(address(froyoCatMachine), _nftId);

            froyoCats[_nftId] = Cat(_toAddresses[i], false, block.timestamp);

            emit Mint(_msgSender(), _toAddresses[i], _nftId, block.timestamp);
        }
    }

    function update(
        uint256 _nftId,
        address _owner,
        bool _claimed
    ) external {
        require(
            _msgSender() == address(froyoCatMachine),
            "Error: Not have rule to update"
        );

        require(froyoCats[_nftId].owner != address(0), "Error: NFT invalid");

        froyoCats[_nftId].owner = _owner;
        froyoCats[_nftId].claimed = _claimed;
    }

    function get(uint256 _nftId)
        external
        view
        returns (
            address,
            bool,
            uint256
        )
    {
        require(froyoCats[_nftId].owner != address(0), "Error: NFT invalid");

        if (froyoCats[_nftId].claimed) {
            return (
                ownerOf(_nftId),
                froyoCats[_nftId].claimed,
                froyoCats[_nftId].time
            );
        } else {
            return (
                froyoCats[_nftId].owner,
                froyoCats[_nftId].claimed,
                froyoCats[_nftId].time
            );
        }
    }

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

    function _totalSupply() internal view returns (uint256) {
        return _tokenIdTracker.current();
    }

    function totalMint() public view returns (uint256) {
        return _totalSupply();
    }

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

    function setBaseURI(string memory baseURI) public onlyOwner {
        baseTokenURI = baseURI;
    }

    function walletsOfUser(address _user)
        external
        view
        returns (uint256[] memory)
    {
        uint256 tokenCount = balanceOf(_user);

        uint256[] memory tokensId = new uint256[](tokenCount);
        for (uint256 i = 0; i < tokenCount; i++) {
            tokensId[i] = tokenOfOwnerByIndex(_user, i);
        }

        return tokensId;
    }

    function pause(bool val) public onlyOwner {
        if (val == true) {
            _pause();
            return;
        }
        _unpause();
    }

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"nftId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"Mint","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address[]","name":"_toAddresses","type":"address[]"}],"name":"adminMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nftId","type":"uint256"}],"name":"get","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","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":"totalMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":[{"internalType":"uint256","name":"_nftId","type":"uint256"},{"internalType":"address","name":"_owner","type":"address"},{"internalType":"bool","name":"_claimed","type":"bool"}],"name":"update","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IFroyoCatMachine","name":"_froyoCatMachine","type":"address"}],"name":"updateFroyoCatMachine","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"walletsOfUser","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040516200530c3803806200530c83398181016040528101906200003791906200064e565b6040518060400160405280600881526020017f46726f796f4361740000000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f46726f796f4361740000000000000000000000000000000000000000000000008152508160009080519060200190620000bb9291906200052c565b508060019080519060200190620000d49291906200052c565b505050620000f7620000eb6200013c60201b60201c565b6200014460201b60201c565b6000600a60146101000a81548160ff02191690831515021790555062000123816200020a60201b60201c565b620001356001620002b560201b60201c565b50620009cc565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200021a6200013c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002406200037c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000299576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000290906200077a565b60405180910390fd5b80600c9080519060200190620002b19291906200052c565b5050565b620002c56200013c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002eb6200037c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000344576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200033b906200077a565b60405180910390fd5b600115158115151415620003685762000362620003a660201b60201c565b62000379565b620003786200045e60201b60201c565b5b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620003b66200051560201b60201c565b15620003f9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003f09062000758565b60405180910390fd5b6001600a60146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620004456200013c60201b60201c565b60405162000454919062000719565b60405180910390a1565b6200046e6200051560201b60201c565b620004b0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004a79062000736565b60405180910390fd5b6000600a60146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa620004fc6200013c60201b60201c565b6040516200050b919062000719565b60405180910390a1565b6000600a60149054906101000a900460ff16905090565b8280546200053a9062000876565b90600052602060002090601f0160209004810192826200055e5760008555620005aa565b82601f106200057957805160ff1916838001178555620005aa565b82800160010185558215620005aa579182015b82811115620005a95782518255916020019190600101906200058c565b5b509050620005b99190620005bd565b5090565b5b80821115620005d8576000816000905550600101620005be565b5090565b6000620005f3620005ed84620007c5565b6200079c565b9050828152602081018484840111156200060c57600080fd5b6200061984828562000840565b509392505050565b600082601f8301126200063357600080fd5b815162000645848260208601620005dc565b91505092915050565b6000602082840312156200066157600080fd5b600082015167ffffffffffffffff8111156200067c57600080fd5b6200068a8482850162000621565b91505092915050565b6200069e816200080c565b82525050565b6000620006b3601483620007fb565b9150620006c08262000951565b602082019050919050565b6000620006da601083620007fb565b9150620006e7826200097a565b602082019050919050565b600062000701602083620007fb565b91506200070e82620009a3565b602082019050919050565b600060208201905062000730600083018462000693565b92915050565b600060208201905081810360008301526200075181620006a4565b9050919050565b600060208201905081810360008301526200077381620006cb565b9050919050565b600060208201905081810360008301526200079581620006f2565b9050919050565b6000620007a8620007bb565b9050620007b68282620008ac565b919050565b6000604051905090565b600067ffffffffffffffff821115620007e357620007e262000911565b5b620007ee8262000940565b9050602081019050919050565b600082825260208201905092915050565b6000620008198262000820565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b838110156200086057808201518184015260208101905062000843565b8381111562000870576000848401525b50505050565b600060028204905060018216806200088f57607f821691505b60208210811415620008a657620008a5620008e2565b5b50919050565b620008b78262000940565b810181811067ffffffffffffffff82111715620008d957620008d862000911565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b61493080620009dc6000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806359a7715a1161010457806395d89b41116100a2578063c87b56dd11610071578063c87b56dd14610541578063d547cfb714610571578063e985e9c51461058f578063f2fde38b146105bf576101da565b806395d89b41146104bb578063a22cb465146104d9578063b56a793c146104f5578063b88d4fde14610525576101da565b806370a08231116100de57806370a0823114610431578063715018a6146104615780638da5cb5b1461046b5780639507d39a14610489576101da565b806359a7715a146103c55780635c975abb146103e35780636352211e14610401576101da565b806323b872dd1161017c57806342842e0e1161014b57806342842e0e146103415780634b18651b1461035d5780634f6ccce71461037957806355f804b3146103a9576101da565b806323b872dd146102cf5780632b0d9067146102eb5780632f745c59146103075780633ccfd60b14610337576101da565b8063081812fc116101b8578063081812fc14610249578063095ea7b31461027957806318160ddd1461029557806321cbb5bd146102b3576101da565b806301ffc9a7146101df57806302329a291461020f57806306fdde031461022b575b600080fd5b6101f960048036038101906101f49190613438565b6105db565b6040516102069190613aed565b60405180910390f35b6102296004803603810190610224919061340f565b6105ed565b005b61023361068f565b6040516102409190613b08565b60405180910390f35b610263600480360381019061025e91906134f4565b610721565b6040516102709190613a2d565b60405180910390f35b610293600480360381019061028e919061338e565b6107a6565b005b61029d6108be565b6040516102aa9190613e2a565b60405180910390f35b6102cd60048036038101906102c891906133ca565b6108cb565b005b6102e960048036038101906102e49190613288565b610c77565b005b6103056004803603810190610300919061348a565b610cd7565b005b610321600480360381019061031c919061338e565b610d97565b60405161032e9190613e2a565b60405180910390f35b61033f610e3c565b005b61035b60048036038101906103569190613288565b610f07565b005b6103776004803603810190610372919061351d565b610f27565b005b610393600480360381019061038e91906134f4565b6110ec565b6040516103a09190613e2a565b60405180910390f35b6103c360048036038101906103be91906134b3565b611183565b005b6103cd611219565b6040516103da9190613e2a565b60405180910390f35b6103eb611228565b6040516103f89190613aed565b60405180910390f35b61041b600480360381019061041691906134f4565b61123f565b6040516104289190613a2d565b60405180910390f35b61044b60048036038101906104469190613223565b6112f1565b6040516104589190613e2a565b60405180910390f35b6104696113a9565b005b610473611431565b6040516104809190613a2d565b60405180910390f35b6104a3600480360381019061049e91906134f4565b61145b565b6040516104b293929190613a94565b60405180910390f35b6104c36115fd565b6040516104d09190613b08565b60405180910390f35b6104f360048036038101906104ee9190613352565b61168f565b005b61050f600480360381019061050a9190613223565b611810565b60405161051c9190613acb565b60405180910390f35b61053f600480360381019061053a91906132d7565b61190a565b005b61055b600480360381019061055691906134f4565b61196c565b6040516105689190613b08565b60405180910390f35b610579611a13565b6040516105869190613b08565b60405180910390f35b6105a960048036038101906105a4919061324c565b611aa1565b6040516105b69190613aed565b60405180910390f35b6105d960048036038101906105d49190613223565b611b35565b005b60006105e682611c2d565b9050919050565b6105f5611ca7565b73ffffffffffffffffffffffffffffffffffffffff16610613611431565b73ffffffffffffffffffffffffffffffffffffffff1614610669576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066090613d6a565b60405180910390fd5b6001151581151514156106835761067e611caf565b61068c565b61068b611d52565b5b50565b60606000805461069e906140cb565b80601f01602080910402602001604051908101604052809291908181526020018280546106ca906140cb565b80156107175780601f106106ec57610100808354040283529160200191610717565b820191906000526020600020905b8154815290600101906020018083116106fa57829003601f168201915b5050505050905090565b600061072c82611df4565b61076b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076290613d4a565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107b18261123f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081990613dca565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610841611ca7565b73ffffffffffffffffffffffffffffffffffffffff161480610870575061086f8161086a611ca7565b611aa1565b5b6108af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a690613cca565b60405180910390fd5b6108b98383611e60565b505050565b6000600880549050905090565b6108d3611ca7565b73ffffffffffffffffffffffffffffffffffffffff166108f1611431565b73ffffffffffffffffffffffffffffffffffffffff1614610947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093e90613d6a565b60405180910390fd5b61094f611228565b1561098f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098690613caa565b60405180910390fd5b60005b82829050811015610c7257600073ffffffffffffffffffffffffffffffffffffffff168383838181106109ee577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190610a039190613223565b73ffffffffffffffffffffffffffffffffffffffff161415610a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5190613c2a565b60405180910390fd5b610a64600b611f19565b6000610a6e611f2f565b9050610a9c600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682611f40565b6040518060600160405280858585818110610ae0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190610af59190613223565b73ffffffffffffffffffffffffffffffffffffffff16815260200160001515815260200142815250600d600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548160ff0219169083151502179055506040820151816001015590505080848484818110610bde577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190610bf39190613223565b73ffffffffffffffffffffffffffffffffffffffff16610c11611ca7565b73ffffffffffffffffffffffffffffffffffffffff167f2f00e3cdd69a77be7ed215ec7b2a36784dd158f921fca79ac29deffa353fe6ee42604051610c569190613e2a565b60405180910390a4508080610c6a9061412e565b915050610992565b505050565b610c88610c82611ca7565b8261210e565b610cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbe90613dea565b60405180910390fd5b610cd28383836121ec565b505050565b610cdf611ca7565b73ffffffffffffffffffffffffffffffffffffffff16610cfd611431565b73ffffffffffffffffffffffffffffffffffffffff1614610d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4a90613d6a565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610da2836112f1565b8210610de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dda90613b8a565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e44611ca7565b73ffffffffffffffffffffffffffffffffffffffff16610e62611431565b73ffffffffffffffffffffffffffffffffffffffff1614610eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaf90613d6a565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610f03573d6000803e3d6000fd5b5050565b610f228383836040518060200160405280600081525061190a565b505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610f68611ca7565b73ffffffffffffffffffffffffffffffffffffffff1614610fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb590613b6a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d600085815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105b90613bca565b60405180910390fd5b81600d600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d600085815260200190815260200160002060000160146101000a81548160ff021916908315150217905550505050565b60006110f66108be565b8210611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e90613e0a565b60405180910390fd5b60088281548110611171577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b61118b611ca7565b73ffffffffffffffffffffffffffffffffffffffff166111a9611431565b73ffffffffffffffffffffffffffffffffffffffff16146111ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f690613d6a565b60405180910390fd5b80600c9080519060200190611215929190612fe8565b5050565b6000611223611f2f565b905090565b6000600a60149054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112df90613d0a565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135990613cea565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113b1611ca7565b73ffffffffffffffffffffffffffffffffffffffff166113cf611431565b73ffffffffffffffffffffffffffffffffffffffff1614611425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141c90613d6a565b60405180910390fd5b61142f6000612448565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060008073ffffffffffffffffffffffffffffffffffffffff16600d600086815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fc90613bca565b60405180910390fd5b600d600085815260200190815260200160002060000160149054906101000a900460ff161561157d576115378461123f565b600d600086815260200190815260200160002060000160149054906101000a900460ff16600d6000878152602001908152602001600020600101549250925092506115f6565b600d600085815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d600086815260200190815260200160002060000160149054906101000a900460ff16600d6000878152602001908152602001600020600101549250925092505b9193909250565b60606001805461160c906140cb565b80601f0160208091040260200160405190810160405280929190818152602001828054611638906140cb565b80156116855780601f1061165a57610100808354040283529160200191611685565b820191906000526020600020905b81548152906001019060200180831161166857829003601f168201915b5050505050905090565b611697611ca7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fc90613c6a565b60405180910390fd5b8060056000611712611ca7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166117bf611ca7565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118049190613aed565b60405180910390a35050565b6060600061181d836112f1565b905060008167ffffffffffffffff811115611861577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561188f5781602001602082028036833780820191505090505b50905060005b828110156118ff576118a78582610d97565b8282815181106118e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080806118f79061412e565b915050611895565b508092505050919050565b61191b611915611ca7565b8361210e565b61195a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195190613dea565b60405180910390fd5b6119668484848461250e565b50505050565b606061197782611df4565b6119b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ad90613daa565b60405180910390fd5b60006119c061256a565b905060008151116119e05760405180602001604052806000815250611a0b565b806119ea846125fc565b6040516020016119fb929190613a09565b6040516020818303038152906040525b915050919050565b600c8054611a20906140cb565b80601f0160208091040260200160405190810160405280929190818152602001828054611a4c906140cb565b8015611a995780601f10611a6e57610100808354040283529160200191611a99565b820191906000526020600020905b815481529060010190602001808311611a7c57829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b3d611ca7565b73ffffffffffffffffffffffffffffffffffffffff16611b5b611431565b73ffffffffffffffffffffffffffffffffffffffff1614611bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba890613d6a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1890613bea565b60405180910390fd5b611c2a81612448565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611ca05750611c9f826127a9565b5b9050919050565b600033905090565b611cb7611228565b15611cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cee90613caa565b60405180910390fd5b6001600a60146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611d3b611ca7565b604051611d489190613a2d565b60405180910390a1565b611d5a611228565b611d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9090613b4a565b60405180910390fd5b6000600a60146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611ddd611ca7565b604051611dea9190613a2d565b60405180910390a1565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611ed38361123f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6001816000016000828254019250508190555050565b6000611f3b600b61288b565b905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa790613d2a565b60405180910390fd5b611fb981611df4565b15611ff9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff090613c0a565b60405180910390fd5b61200560008383612899565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120559190613f48565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600061211982611df4565b612158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214f90613c8a565b60405180910390fd5b60006121638361123f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806121d257508373ffffffffffffffffffffffffffffffffffffffff166121ba84610721565b73ffffffffffffffffffffffffffffffffffffffff16145b806121e357506121e28185611aa1565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661220c8261123f565b73ffffffffffffffffffffffffffffffffffffffff1614612262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225990613d8a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c990613c4a565b60405180910390fd5b6122dd838383612899565b6122e8600082611e60565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123389190613fcf565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461238f9190613f48565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6125198484846121ec565b612525848484846128a9565b612564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255b90613baa565b60405180910390fd5b50505050565b6060600c8054612579906140cb565b80601f01602080910402602001604051908101604052809291908181526020018280546125a5906140cb565b80156125f25780601f106125c7576101008083540402835291602001916125f2565b820191906000526020600020905b8154815290600101906020018083116125d557829003601f168201915b5050505050905090565b60606000821415612644576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127a4565b600082905060005b6000821461267657808061265f9061412e565b915050600a8261266f9190613f9e565b915061264c565b60008167ffffffffffffffff8111156126b8577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156126ea5781602001600182028036833780820191505090505b5090505b6000851461279d576001826127039190613fcf565b9150600a856127129190614177565b603061271e9190613f48565b60f81b81838151811061275a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127969190613f9e565b94506126ee565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061287457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612884575061288382612a40565b5b9050919050565b600081600001549050919050565b6128a4838383612aaa565b505050565b60006128ca8473ffffffffffffffffffffffffffffffffffffffff16612b44565b15612a33578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128f3611ca7565b8786866040518563ffffffff1660e01b81526004016129159493929190613a48565b602060405180830381600087803b15801561292f57600080fd5b505af192505050801561296057506040513d601f19601f8201168201806040525081019061295d9190613461565b60015b6129e3573d8060008114612990576040519150601f19603f3d011682016040523d82523d6000602084013e612995565b606091505b506000815114156129db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d290613baa565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a38565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612ab5838383612b57565b612abd611431565b73ffffffffffffffffffffffffffffffffffffffff16612adb611ca7565b73ffffffffffffffffffffffffffffffffffffffff1614612b3f57612afe611228565b15612b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3590613b2a565b60405180910390fd5b5b505050565b600080823b905060008111915050919050565b612b62838383612c6b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ba557612ba081612c70565b612be4565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612be357612be28382612cb9565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c2757612c2281612e26565b612c66565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612c6557612c648282612f69565b5b5b505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612cc6846112f1565b612cd09190613fcf565b9050600060076000848152602001908152602001600020549050818114612db5576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612e3a9190613fcf565b9050600060096000848152602001908152602001600020549050600060088381548110612e90577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612ed8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612f4d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612f74836112f1565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b828054612ff4906140cb565b90600052602060002090601f016020900481019282613016576000855561305d565b82601f1061302f57805160ff191683800117855561305d565b8280016001018555821561305d579182015b8281111561305c578251825591602001919060010190613041565b5b50905061306a919061306e565b5090565b5b8082111561308757600081600090555060010161306f565b5090565b600061309e61309984613e6a565b613e45565b9050828152602081018484840111156130b657600080fd5b6130c1848285614089565b509392505050565b60006130dc6130d784613e9b565b613e45565b9050828152602081018484840111156130f457600080fd5b6130ff848285614089565b509392505050565b60008135905061311681614887565b92915050565b60008083601f84011261312e57600080fd5b8235905067ffffffffffffffff81111561314757600080fd5b60208301915083602082028301111561315f57600080fd5b9250929050565b6000813590506131758161489e565b92915050565b60008135905061318a816148b5565b92915050565b60008151905061319f816148b5565b92915050565b600082601f8301126131b657600080fd5b81356131c684826020860161308b565b91505092915050565b6000813590506131de816148cc565b92915050565b600082601f8301126131f557600080fd5b81356132058482602086016130c9565b91505092915050565b60008135905061321d816148e3565b92915050565b60006020828403121561323557600080fd5b600061324384828501613107565b91505092915050565b6000806040838503121561325f57600080fd5b600061326d85828601613107565b925050602061327e85828601613107565b9150509250929050565b60008060006060848603121561329d57600080fd5b60006132ab86828701613107565b93505060206132bc86828701613107565b92505060406132cd8682870161320e565b9150509250925092565b600080600080608085870312156132ed57600080fd5b60006132fb87828801613107565b945050602061330c87828801613107565b935050604061331d8782880161320e565b925050606085013567ffffffffffffffff81111561333a57600080fd5b613346878288016131a5565b91505092959194509250565b6000806040838503121561336557600080fd5b600061337385828601613107565b925050602061338485828601613166565b9150509250929050565b600080604083850312156133a157600080fd5b60006133af85828601613107565b92505060206133c08582860161320e565b9150509250929050565b600080602083850312156133dd57600080fd5b600083013567ffffffffffffffff8111156133f757600080fd5b6134038582860161311c565b92509250509250929050565b60006020828403121561342157600080fd5b600061342f84828501613166565b91505092915050565b60006020828403121561344a57600080fd5b60006134588482850161317b565b91505092915050565b60006020828403121561347357600080fd5b600061348184828501613190565b91505092915050565b60006020828403121561349c57600080fd5b60006134aa848285016131cf565b91505092915050565b6000602082840312156134c557600080fd5b600082013567ffffffffffffffff8111156134df57600080fd5b6134eb848285016131e4565b91505092915050565b60006020828403121561350657600080fd5b60006135148482850161320e565b91505092915050565b60008060006060848603121561353257600080fd5b60006135408682870161320e565b935050602061355186828701613107565b925050604061356286828701613166565b9150509250925092565b600061357883836139eb565b60208301905092915050565b61358d81614003565b82525050565b600061359e82613edc565b6135a88185613f0a565b93506135b383613ecc565b8060005b838110156135e45781516135cb888261356c565b97506135d683613efd565b9250506001810190506135b7565b5085935050505092915050565b6135fa81614015565b82525050565b600061360b82613ee7565b6136158185613f1b565b9350613625818560208601614098565b61362e81614264565b840191505092915050565b600061364482613ef2565b61364e8185613f2c565b935061365e818560208601614098565b61366781614264565b840191505092915050565b600061367d82613ef2565b6136878185613f3d565b9350613697818560208601614098565b80840191505092915050565b60006136b0602b83613f2c565b91506136bb82614275565b604082019050919050565b60006136d3601483613f2c565b91506136de826142c4565b602082019050919050565b60006136f6601e83613f2c565b9150613701826142ed565b602082019050919050565b6000613719602b83613f2c565b915061372482614316565b604082019050919050565b600061373c603283613f2c565b915061374782614365565b604082019050919050565b600061375f601283613f2c565b915061376a826143b4565b602082019050919050565b6000613782602683613f2c565b915061378d826143dd565b604082019050919050565b60006137a5601c83613f2c565b91506137b08261442c565b602082019050919050565b60006137c8600f83613f2c565b91506137d382614455565b602082019050919050565b60006137eb602483613f2c565b91506137f68261447e565b604082019050919050565b600061380e601983613f2c565b9150613819826144cd565b602082019050919050565b6000613831602c83613f2c565b915061383c826144f6565b604082019050919050565b6000613854601083613f2c565b915061385f82614545565b602082019050919050565b6000613877603883613f2c565b91506138828261456e565b604082019050919050565b600061389a602a83613f2c565b91506138a5826145bd565b604082019050919050565b60006138bd602983613f2c565b91506138c88261460c565b604082019050919050565b60006138e0602083613f2c565b91506138eb8261465b565b602082019050919050565b6000613903602c83613f2c565b915061390e82614684565b604082019050919050565b6000613926602083613f2c565b9150613931826146d3565b602082019050919050565b6000613949602983613f2c565b9150613954826146fc565b604082019050919050565b600061396c602f83613f2c565b91506139778261474b565b604082019050919050565b600061398f602183613f2c565b915061399a8261479a565b604082019050919050565b60006139b2603183613f2c565b91506139bd826147e9565b604082019050919050565b60006139d5602c83613f2c565b91506139e082614838565b604082019050919050565b6139f48161407f565b82525050565b613a038161407f565b82525050565b6000613a158285613672565b9150613a218284613672565b91508190509392505050565b6000602082019050613a426000830184613584565b92915050565b6000608082019050613a5d6000830187613584565b613a6a6020830186613584565b613a7760408301856139fa565b8181036060830152613a898184613600565b905095945050505050565b6000606082019050613aa96000830186613584565b613ab660208301856135f1565b613ac360408301846139fa565b949350505050565b60006020820190508181036000830152613ae58184613593565b905092915050565b6000602082019050613b0260008301846135f1565b92915050565b60006020820190508181036000830152613b228184613639565b905092915050565b60006020820190508181036000830152613b43816136a3565b9050919050565b60006020820190508181036000830152613b63816136c6565b9050919050565b60006020820190508181036000830152613b83816136e9565b9050919050565b60006020820190508181036000830152613ba38161370c565b9050919050565b60006020820190508181036000830152613bc38161372f565b9050919050565b60006020820190508181036000830152613be381613752565b9050919050565b60006020820190508181036000830152613c0381613775565b9050919050565b60006020820190508181036000830152613c2381613798565b9050919050565b60006020820190508181036000830152613c43816137bb565b9050919050565b60006020820190508181036000830152613c63816137de565b9050919050565b60006020820190508181036000830152613c8381613801565b9050919050565b60006020820190508181036000830152613ca381613824565b9050919050565b60006020820190508181036000830152613cc381613847565b9050919050565b60006020820190508181036000830152613ce38161386a565b9050919050565b60006020820190508181036000830152613d038161388d565b9050919050565b60006020820190508181036000830152613d23816138b0565b9050919050565b60006020820190508181036000830152613d43816138d3565b9050919050565b60006020820190508181036000830152613d63816138f6565b9050919050565b60006020820190508181036000830152613d8381613919565b9050919050565b60006020820190508181036000830152613da38161393c565b9050919050565b60006020820190508181036000830152613dc38161395f565b9050919050565b60006020820190508181036000830152613de381613982565b9050919050565b60006020820190508181036000830152613e03816139a5565b9050919050565b60006020820190508181036000830152613e23816139c8565b9050919050565b6000602082019050613e3f60008301846139fa565b92915050565b6000613e4f613e60565b9050613e5b82826140fd565b919050565b6000604051905090565b600067ffffffffffffffff821115613e8557613e84614235565b5b613e8e82614264565b9050602081019050919050565b600067ffffffffffffffff821115613eb657613eb5614235565b5b613ebf82614264565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613f538261407f565b9150613f5e8361407f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f9357613f926141a8565b5b828201905092915050565b6000613fa98261407f565b9150613fb48361407f565b925082613fc457613fc36141d7565b5b828204905092915050565b6000613fda8261407f565b9150613fe58361407f565b925082821015613ff857613ff76141a8565b5b828203905092915050565b600061400e8261405f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061405882614003565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156140b657808201518184015260208101905061409b565b838111156140c5576000848401525b50505050565b600060028204905060018216806140e357607f821691505b602082108114156140f7576140f6614206565b5b50919050565b61410682614264565b810181811067ffffffffffffffff8211171561412557614124614235565b5b80604052505050565b60006141398261407f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561416c5761416b6141a8565b5b600182019050919050565b60006141828261407f565b915061418d8361407f565b92508261419d5761419c6141d7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732315061757361626c653a20746f6b656e207472616e73666572207760008201527f68696c6520706175736564000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f4572726f723a204e6f7420686176652072756c6520746f207570646174650000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4572726f723a204e465420696e76616c69640000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4164647265737320696e76616c69640000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61489081614003565b811461489b57600080fd5b50565b6148a781614015565b81146148b257600080fd5b50565b6148be81614021565b81146148c957600080fd5b50565b6148d58161404d565b81146148e057600080fd5b50565b6148ec8161407f565b81146148f757600080fd5b5056fea2646970667358221220f5e8407afc31c2f01f305098ed334e4d433ebec3378ad9d3fe0c3a41822af47964736f6c6343000803003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d6356325462737a76334e4833334a4c4c656f626f6e684d6770746836346a576171726b7672676a695a516d722f00000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101da5760003560e01c806359a7715a1161010457806395d89b41116100a2578063c87b56dd11610071578063c87b56dd14610541578063d547cfb714610571578063e985e9c51461058f578063f2fde38b146105bf576101da565b806395d89b41146104bb578063a22cb465146104d9578063b56a793c146104f5578063b88d4fde14610525576101da565b806370a08231116100de57806370a0823114610431578063715018a6146104615780638da5cb5b1461046b5780639507d39a14610489576101da565b806359a7715a146103c55780635c975abb146103e35780636352211e14610401576101da565b806323b872dd1161017c57806342842e0e1161014b57806342842e0e146103415780634b18651b1461035d5780634f6ccce71461037957806355f804b3146103a9576101da565b806323b872dd146102cf5780632b0d9067146102eb5780632f745c59146103075780633ccfd60b14610337576101da565b8063081812fc116101b8578063081812fc14610249578063095ea7b31461027957806318160ddd1461029557806321cbb5bd146102b3576101da565b806301ffc9a7146101df57806302329a291461020f57806306fdde031461022b575b600080fd5b6101f960048036038101906101f49190613438565b6105db565b6040516102069190613aed565b60405180910390f35b6102296004803603810190610224919061340f565b6105ed565b005b61023361068f565b6040516102409190613b08565b60405180910390f35b610263600480360381019061025e91906134f4565b610721565b6040516102709190613a2d565b60405180910390f35b610293600480360381019061028e919061338e565b6107a6565b005b61029d6108be565b6040516102aa9190613e2a565b60405180910390f35b6102cd60048036038101906102c891906133ca565b6108cb565b005b6102e960048036038101906102e49190613288565b610c77565b005b6103056004803603810190610300919061348a565b610cd7565b005b610321600480360381019061031c919061338e565b610d97565b60405161032e9190613e2a565b60405180910390f35b61033f610e3c565b005b61035b60048036038101906103569190613288565b610f07565b005b6103776004803603810190610372919061351d565b610f27565b005b610393600480360381019061038e91906134f4565b6110ec565b6040516103a09190613e2a565b60405180910390f35b6103c360048036038101906103be91906134b3565b611183565b005b6103cd611219565b6040516103da9190613e2a565b60405180910390f35b6103eb611228565b6040516103f89190613aed565b60405180910390f35b61041b600480360381019061041691906134f4565b61123f565b6040516104289190613a2d565b60405180910390f35b61044b60048036038101906104469190613223565b6112f1565b6040516104589190613e2a565b60405180910390f35b6104696113a9565b005b610473611431565b6040516104809190613a2d565b60405180910390f35b6104a3600480360381019061049e91906134f4565b61145b565b6040516104b293929190613a94565b60405180910390f35b6104c36115fd565b6040516104d09190613b08565b60405180910390f35b6104f360048036038101906104ee9190613352565b61168f565b005b61050f600480360381019061050a9190613223565b611810565b60405161051c9190613acb565b60405180910390f35b61053f600480360381019061053a91906132d7565b61190a565b005b61055b600480360381019061055691906134f4565b61196c565b6040516105689190613b08565b60405180910390f35b610579611a13565b6040516105869190613b08565b60405180910390f35b6105a960048036038101906105a4919061324c565b611aa1565b6040516105b69190613aed565b60405180910390f35b6105d960048036038101906105d49190613223565b611b35565b005b60006105e682611c2d565b9050919050565b6105f5611ca7565b73ffffffffffffffffffffffffffffffffffffffff16610613611431565b73ffffffffffffffffffffffffffffffffffffffff1614610669576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066090613d6a565b60405180910390fd5b6001151581151514156106835761067e611caf565b61068c565b61068b611d52565b5b50565b60606000805461069e906140cb565b80601f01602080910402602001604051908101604052809291908181526020018280546106ca906140cb565b80156107175780601f106106ec57610100808354040283529160200191610717565b820191906000526020600020905b8154815290600101906020018083116106fa57829003601f168201915b5050505050905090565b600061072c82611df4565b61076b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076290613d4a565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107b18261123f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081990613dca565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610841611ca7565b73ffffffffffffffffffffffffffffffffffffffff161480610870575061086f8161086a611ca7565b611aa1565b5b6108af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a690613cca565b60405180910390fd5b6108b98383611e60565b505050565b6000600880549050905090565b6108d3611ca7565b73ffffffffffffffffffffffffffffffffffffffff166108f1611431565b73ffffffffffffffffffffffffffffffffffffffff1614610947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093e90613d6a565b60405180910390fd5b61094f611228565b1561098f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098690613caa565b60405180910390fd5b60005b82829050811015610c7257600073ffffffffffffffffffffffffffffffffffffffff168383838181106109ee577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190610a039190613223565b73ffffffffffffffffffffffffffffffffffffffff161415610a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5190613c2a565b60405180910390fd5b610a64600b611f19565b6000610a6e611f2f565b9050610a9c600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682611f40565b6040518060600160405280858585818110610ae0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190610af59190613223565b73ffffffffffffffffffffffffffffffffffffffff16815260200160001515815260200142815250600d600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548160ff0219169083151502179055506040820151816001015590505080848484818110610bde577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190610bf39190613223565b73ffffffffffffffffffffffffffffffffffffffff16610c11611ca7565b73ffffffffffffffffffffffffffffffffffffffff167f2f00e3cdd69a77be7ed215ec7b2a36784dd158f921fca79ac29deffa353fe6ee42604051610c569190613e2a565b60405180910390a4508080610c6a9061412e565b915050610992565b505050565b610c88610c82611ca7565b8261210e565b610cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbe90613dea565b60405180910390fd5b610cd28383836121ec565b505050565b610cdf611ca7565b73ffffffffffffffffffffffffffffffffffffffff16610cfd611431565b73ffffffffffffffffffffffffffffffffffffffff1614610d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4a90613d6a565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610da2836112f1565b8210610de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dda90613b8a565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e44611ca7565b73ffffffffffffffffffffffffffffffffffffffff16610e62611431565b73ffffffffffffffffffffffffffffffffffffffff1614610eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaf90613d6a565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610f03573d6000803e3d6000fd5b5050565b610f228383836040518060200160405280600081525061190a565b505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610f68611ca7565b73ffffffffffffffffffffffffffffffffffffffff1614610fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb590613b6a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d600085815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105b90613bca565b60405180910390fd5b81600d600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d600085815260200190815260200160002060000160146101000a81548160ff021916908315150217905550505050565b60006110f66108be565b8210611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e90613e0a565b60405180910390fd5b60088281548110611171577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b61118b611ca7565b73ffffffffffffffffffffffffffffffffffffffff166111a9611431565b73ffffffffffffffffffffffffffffffffffffffff16146111ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f690613d6a565b60405180910390fd5b80600c9080519060200190611215929190612fe8565b5050565b6000611223611f2f565b905090565b6000600a60149054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112df90613d0a565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135990613cea565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113b1611ca7565b73ffffffffffffffffffffffffffffffffffffffff166113cf611431565b73ffffffffffffffffffffffffffffffffffffffff1614611425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141c90613d6a565b60405180910390fd5b61142f6000612448565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060008073ffffffffffffffffffffffffffffffffffffffff16600d600086815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fc90613bca565b60405180910390fd5b600d600085815260200190815260200160002060000160149054906101000a900460ff161561157d576115378461123f565b600d600086815260200190815260200160002060000160149054906101000a900460ff16600d6000878152602001908152602001600020600101549250925092506115f6565b600d600085815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d600086815260200190815260200160002060000160149054906101000a900460ff16600d6000878152602001908152602001600020600101549250925092505b9193909250565b60606001805461160c906140cb565b80601f0160208091040260200160405190810160405280929190818152602001828054611638906140cb565b80156116855780601f1061165a57610100808354040283529160200191611685565b820191906000526020600020905b81548152906001019060200180831161166857829003601f168201915b5050505050905090565b611697611ca7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fc90613c6a565b60405180910390fd5b8060056000611712611ca7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166117bf611ca7565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118049190613aed565b60405180910390a35050565b6060600061181d836112f1565b905060008167ffffffffffffffff811115611861577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561188f5781602001602082028036833780820191505090505b50905060005b828110156118ff576118a78582610d97565b8282815181106118e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080806118f79061412e565b915050611895565b508092505050919050565b61191b611915611ca7565b8361210e565b61195a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195190613dea565b60405180910390fd5b6119668484848461250e565b50505050565b606061197782611df4565b6119b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ad90613daa565b60405180910390fd5b60006119c061256a565b905060008151116119e05760405180602001604052806000815250611a0b565b806119ea846125fc565b6040516020016119fb929190613a09565b6040516020818303038152906040525b915050919050565b600c8054611a20906140cb565b80601f0160208091040260200160405190810160405280929190818152602001828054611a4c906140cb565b8015611a995780601f10611a6e57610100808354040283529160200191611a99565b820191906000526020600020905b815481529060010190602001808311611a7c57829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b3d611ca7565b73ffffffffffffffffffffffffffffffffffffffff16611b5b611431565b73ffffffffffffffffffffffffffffffffffffffff1614611bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba890613d6a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1890613bea565b60405180910390fd5b611c2a81612448565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611ca05750611c9f826127a9565b5b9050919050565b600033905090565b611cb7611228565b15611cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cee90613caa565b60405180910390fd5b6001600a60146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611d3b611ca7565b604051611d489190613a2d565b60405180910390a1565b611d5a611228565b611d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9090613b4a565b60405180910390fd5b6000600a60146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611ddd611ca7565b604051611dea9190613a2d565b60405180910390a1565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611ed38361123f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6001816000016000828254019250508190555050565b6000611f3b600b61288b565b905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa790613d2a565b60405180910390fd5b611fb981611df4565b15611ff9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff090613c0a565b60405180910390fd5b61200560008383612899565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120559190613f48565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600061211982611df4565b612158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214f90613c8a565b60405180910390fd5b60006121638361123f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806121d257508373ffffffffffffffffffffffffffffffffffffffff166121ba84610721565b73ffffffffffffffffffffffffffffffffffffffff16145b806121e357506121e28185611aa1565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661220c8261123f565b73ffffffffffffffffffffffffffffffffffffffff1614612262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225990613d8a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c990613c4a565b60405180910390fd5b6122dd838383612899565b6122e8600082611e60565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123389190613fcf565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461238f9190613f48565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6125198484846121ec565b612525848484846128a9565b612564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255b90613baa565b60405180910390fd5b50505050565b6060600c8054612579906140cb565b80601f01602080910402602001604051908101604052809291908181526020018280546125a5906140cb565b80156125f25780601f106125c7576101008083540402835291602001916125f2565b820191906000526020600020905b8154815290600101906020018083116125d557829003601f168201915b5050505050905090565b60606000821415612644576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127a4565b600082905060005b6000821461267657808061265f9061412e565b915050600a8261266f9190613f9e565b915061264c565b60008167ffffffffffffffff8111156126b8577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156126ea5781602001600182028036833780820191505090505b5090505b6000851461279d576001826127039190613fcf565b9150600a856127129190614177565b603061271e9190613f48565b60f81b81838151811061275a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127969190613f9e565b94506126ee565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061287457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612884575061288382612a40565b5b9050919050565b600081600001549050919050565b6128a4838383612aaa565b505050565b60006128ca8473ffffffffffffffffffffffffffffffffffffffff16612b44565b15612a33578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128f3611ca7565b8786866040518563ffffffff1660e01b81526004016129159493929190613a48565b602060405180830381600087803b15801561292f57600080fd5b505af192505050801561296057506040513d601f19601f8201168201806040525081019061295d9190613461565b60015b6129e3573d8060008114612990576040519150601f19603f3d011682016040523d82523d6000602084013e612995565b606091505b506000815114156129db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d290613baa565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a38565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612ab5838383612b57565b612abd611431565b73ffffffffffffffffffffffffffffffffffffffff16612adb611ca7565b73ffffffffffffffffffffffffffffffffffffffff1614612b3f57612afe611228565b15612b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3590613b2a565b60405180910390fd5b5b505050565b600080823b905060008111915050919050565b612b62838383612c6b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ba557612ba081612c70565b612be4565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612be357612be28382612cb9565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c2757612c2281612e26565b612c66565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612c6557612c648282612f69565b5b5b505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612cc6846112f1565b612cd09190613fcf565b9050600060076000848152602001908152602001600020549050818114612db5576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612e3a9190613fcf565b9050600060096000848152602001908152602001600020549050600060088381548110612e90577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612ed8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612f4d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612f74836112f1565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b828054612ff4906140cb565b90600052602060002090601f016020900481019282613016576000855561305d565b82601f1061302f57805160ff191683800117855561305d565b8280016001018555821561305d579182015b8281111561305c578251825591602001919060010190613041565b5b50905061306a919061306e565b5090565b5b8082111561308757600081600090555060010161306f565b5090565b600061309e61309984613e6a565b613e45565b9050828152602081018484840111156130b657600080fd5b6130c1848285614089565b509392505050565b60006130dc6130d784613e9b565b613e45565b9050828152602081018484840111156130f457600080fd5b6130ff848285614089565b509392505050565b60008135905061311681614887565b92915050565b60008083601f84011261312e57600080fd5b8235905067ffffffffffffffff81111561314757600080fd5b60208301915083602082028301111561315f57600080fd5b9250929050565b6000813590506131758161489e565b92915050565b60008135905061318a816148b5565b92915050565b60008151905061319f816148b5565b92915050565b600082601f8301126131b657600080fd5b81356131c684826020860161308b565b91505092915050565b6000813590506131de816148cc565b92915050565b600082601f8301126131f557600080fd5b81356132058482602086016130c9565b91505092915050565b60008135905061321d816148e3565b92915050565b60006020828403121561323557600080fd5b600061324384828501613107565b91505092915050565b6000806040838503121561325f57600080fd5b600061326d85828601613107565b925050602061327e85828601613107565b9150509250929050565b60008060006060848603121561329d57600080fd5b60006132ab86828701613107565b93505060206132bc86828701613107565b92505060406132cd8682870161320e565b9150509250925092565b600080600080608085870312156132ed57600080fd5b60006132fb87828801613107565b945050602061330c87828801613107565b935050604061331d8782880161320e565b925050606085013567ffffffffffffffff81111561333a57600080fd5b613346878288016131a5565b91505092959194509250565b6000806040838503121561336557600080fd5b600061337385828601613107565b925050602061338485828601613166565b9150509250929050565b600080604083850312156133a157600080fd5b60006133af85828601613107565b92505060206133c08582860161320e565b9150509250929050565b600080602083850312156133dd57600080fd5b600083013567ffffffffffffffff8111156133f757600080fd5b6134038582860161311c565b92509250509250929050565b60006020828403121561342157600080fd5b600061342f84828501613166565b91505092915050565b60006020828403121561344a57600080fd5b60006134588482850161317b565b91505092915050565b60006020828403121561347357600080fd5b600061348184828501613190565b91505092915050565b60006020828403121561349c57600080fd5b60006134aa848285016131cf565b91505092915050565b6000602082840312156134c557600080fd5b600082013567ffffffffffffffff8111156134df57600080fd5b6134eb848285016131e4565b91505092915050565b60006020828403121561350657600080fd5b60006135148482850161320e565b91505092915050565b60008060006060848603121561353257600080fd5b60006135408682870161320e565b935050602061355186828701613107565b925050604061356286828701613166565b9150509250925092565b600061357883836139eb565b60208301905092915050565b61358d81614003565b82525050565b600061359e82613edc565b6135a88185613f0a565b93506135b383613ecc565b8060005b838110156135e45781516135cb888261356c565b97506135d683613efd565b9250506001810190506135b7565b5085935050505092915050565b6135fa81614015565b82525050565b600061360b82613ee7565b6136158185613f1b565b9350613625818560208601614098565b61362e81614264565b840191505092915050565b600061364482613ef2565b61364e8185613f2c565b935061365e818560208601614098565b61366781614264565b840191505092915050565b600061367d82613ef2565b6136878185613f3d565b9350613697818560208601614098565b80840191505092915050565b60006136b0602b83613f2c565b91506136bb82614275565b604082019050919050565b60006136d3601483613f2c565b91506136de826142c4565b602082019050919050565b60006136f6601e83613f2c565b9150613701826142ed565b602082019050919050565b6000613719602b83613f2c565b915061372482614316565b604082019050919050565b600061373c603283613f2c565b915061374782614365565b604082019050919050565b600061375f601283613f2c565b915061376a826143b4565b602082019050919050565b6000613782602683613f2c565b915061378d826143dd565b604082019050919050565b60006137a5601c83613f2c565b91506137b08261442c565b602082019050919050565b60006137c8600f83613f2c565b91506137d382614455565b602082019050919050565b60006137eb602483613f2c565b91506137f68261447e565b604082019050919050565b600061380e601983613f2c565b9150613819826144cd565b602082019050919050565b6000613831602c83613f2c565b915061383c826144f6565b604082019050919050565b6000613854601083613f2c565b915061385f82614545565b602082019050919050565b6000613877603883613f2c565b91506138828261456e565b604082019050919050565b600061389a602a83613f2c565b91506138a5826145bd565b604082019050919050565b60006138bd602983613f2c565b91506138c88261460c565b604082019050919050565b60006138e0602083613f2c565b91506138eb8261465b565b602082019050919050565b6000613903602c83613f2c565b915061390e82614684565b604082019050919050565b6000613926602083613f2c565b9150613931826146d3565b602082019050919050565b6000613949602983613f2c565b9150613954826146fc565b604082019050919050565b600061396c602f83613f2c565b91506139778261474b565b604082019050919050565b600061398f602183613f2c565b915061399a8261479a565b604082019050919050565b60006139b2603183613f2c565b91506139bd826147e9565b604082019050919050565b60006139d5602c83613f2c565b91506139e082614838565b604082019050919050565b6139f48161407f565b82525050565b613a038161407f565b82525050565b6000613a158285613672565b9150613a218284613672565b91508190509392505050565b6000602082019050613a426000830184613584565b92915050565b6000608082019050613a5d6000830187613584565b613a6a6020830186613584565b613a7760408301856139fa565b8181036060830152613a898184613600565b905095945050505050565b6000606082019050613aa96000830186613584565b613ab660208301856135f1565b613ac360408301846139fa565b949350505050565b60006020820190508181036000830152613ae58184613593565b905092915050565b6000602082019050613b0260008301846135f1565b92915050565b60006020820190508181036000830152613b228184613639565b905092915050565b60006020820190508181036000830152613b43816136a3565b9050919050565b60006020820190508181036000830152613b63816136c6565b9050919050565b60006020820190508181036000830152613b83816136e9565b9050919050565b60006020820190508181036000830152613ba38161370c565b9050919050565b60006020820190508181036000830152613bc38161372f565b9050919050565b60006020820190508181036000830152613be381613752565b9050919050565b60006020820190508181036000830152613c0381613775565b9050919050565b60006020820190508181036000830152613c2381613798565b9050919050565b60006020820190508181036000830152613c43816137bb565b9050919050565b60006020820190508181036000830152613c63816137de565b9050919050565b60006020820190508181036000830152613c8381613801565b9050919050565b60006020820190508181036000830152613ca381613824565b9050919050565b60006020820190508181036000830152613cc381613847565b9050919050565b60006020820190508181036000830152613ce38161386a565b9050919050565b60006020820190508181036000830152613d038161388d565b9050919050565b60006020820190508181036000830152613d23816138b0565b9050919050565b60006020820190508181036000830152613d43816138d3565b9050919050565b60006020820190508181036000830152613d63816138f6565b9050919050565b60006020820190508181036000830152613d8381613919565b9050919050565b60006020820190508181036000830152613da38161393c565b9050919050565b60006020820190508181036000830152613dc38161395f565b9050919050565b60006020820190508181036000830152613de381613982565b9050919050565b60006020820190508181036000830152613e03816139a5565b9050919050565b60006020820190508181036000830152613e23816139c8565b9050919050565b6000602082019050613e3f60008301846139fa565b92915050565b6000613e4f613e60565b9050613e5b82826140fd565b919050565b6000604051905090565b600067ffffffffffffffff821115613e8557613e84614235565b5b613e8e82614264565b9050602081019050919050565b600067ffffffffffffffff821115613eb657613eb5614235565b5b613ebf82614264565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613f538261407f565b9150613f5e8361407f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f9357613f926141a8565b5b828201905092915050565b6000613fa98261407f565b9150613fb48361407f565b925082613fc457613fc36141d7565b5b828204905092915050565b6000613fda8261407f565b9150613fe58361407f565b925082821015613ff857613ff76141a8565b5b828203905092915050565b600061400e8261405f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061405882614003565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156140b657808201518184015260208101905061409b565b838111156140c5576000848401525b50505050565b600060028204905060018216806140e357607f821691505b602082108114156140f7576140f6614206565b5b50919050565b61410682614264565b810181811067ffffffffffffffff8211171561412557614124614235565b5b80604052505050565b60006141398261407f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561416c5761416b6141a8565b5b600182019050919050565b60006141828261407f565b915061418d8361407f565b92508261419d5761419c6141d7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732315061757361626c653a20746f6b656e207472616e73666572207760008201527f68696c6520706175736564000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f4572726f723a204e6f7420686176652072756c6520746f207570646174650000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4572726f723a204e465420696e76616c69640000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4164647265737320696e76616c69640000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61489081614003565b811461489b57600080fd5b50565b6148a781614015565b81146148b257600080fd5b50565b6148be81614021565b81146148c957600080fd5b50565b6148d58161404d565b81146148e057600080fd5b50565b6148ec8161407f565b81146148f757600080fd5b5056fea2646970667358221220f5e8407afc31c2f01f305098ed334e4d433ebec3378ad9d3fe0c3a41822af47964736f6c63430008030033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d6356325462737a76334e4833334a4c4c656f626f6e684d6770746836346a576171726b7672676a695a516d722f00000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string): ipfs://QmcV2Tbszv3NH33JLLeobonhMgpth64jWaqrkvrgjiZQmr/

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d6356325462737a76334e4833334a4c4c656f626f6e684d
Arg [3] : 6770746836346a576171726b7672676a695a516d722f00000000000000000000


Deployed Bytecode Sourcemap

48897:4147:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52812:229;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52403:154;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27874:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29433:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28956:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41036:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49760:578;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30323:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49591:161;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40704:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51418:143;;;:::i;:::-;;30733:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50346:418;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41226:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51904:101;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51684:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47173:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27568:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27298:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23107:94;;;:::i;:::-;;22456:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50772:638;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;28043:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29726:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52013:382;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30989:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28218:334;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49099:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30092:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23356:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52812:229;52968:4;52997:36;53021:11;52997:23;:36::i;:::-;52990:43;;52812:229;;;:::o;52403:154::-;22687:12;:10;:12::i;:::-;22676:23;;:7;:5;:7::i;:::-;:23;;;22668:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52467:4:::1;52460:11;;:3;:11;;;52456:73;;;52488:8;:6;:8::i;:::-;52511:7;;52456:73;52539:10;:8;:10::i;:::-;22747:1;52403:154:::0;:::o;27874:100::-;27928:13;27961:5;27954:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27874:100;:::o;29433:221::-;29509:7;29537:16;29545:7;29537;:16::i;:::-;29529:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29622:15;:24;29638:7;29622:24;;;;;;;;;;;;;;;;;;;;;29615:31;;29433:221;;;:::o;28956:411::-;29037:13;29053:23;29068:7;29053:14;:23::i;:::-;29037:39;;29101:5;29095:11;;:2;:11;;;;29087:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29195:5;29179:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29204:37;29221:5;29228:12;:10;:12::i;:::-;29204:16;:37::i;:::-;29179:62;29157:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;29338:21;29347:2;29351:7;29338:8;:21::i;:::-;28956:411;;;:::o;41036:113::-;41097:7;41124:10;:17;;;;41117:24;;41036:113;:::o;49760:578::-;22687:12;:10;:12::i;:::-;22676:23;;:7;:5;:7::i;:::-;:23;;;22668:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47499:8:::1;:6;:8::i;:::-;47498:9;47490:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;49893:9:::2;49888:443;49912:12;;:19;;49908:1;:23;49888:443;;;49988:1;49961:29;;:12;;49974:1;49961:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:29;;;;49953:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;50027:27;:15;:25;:27::i;:::-;50069:14;50086;:12;:14::i;:::-;50069:31;;50117:39;50131:15;;;;;;;;;;;50149:6;50117:5;:39::i;:::-;50193:44;;;;;;;;50197:12;;50210:1;50197:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50193:44;;;;;;50214:5;50193:44;;;;;;50221:15;50193:44;;::::0;50173:9:::2;:17;50183:6;50173:17;;;;;;;;;;;:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50295:6;50278:12;;50291:1;50278:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50259:60;;50264:12;:10;:12::i;:::-;50259:60;;;50303:15;50259:60;;;;;;:::i;:::-;;;;;;;;49888:443;49933:3;;;;;:::i;:::-;;;;49888:443;;;;49760:578:::0;;:::o;30323:339::-;30518:41;30537:12;:10;:12::i;:::-;30551:7;30518:18;:41::i;:::-;30510:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30626:28;30636:4;30642:2;30646:7;30626:9;:28::i;:::-;30323:339;;;:::o;49591:161::-;22687:12;:10;:12::i;:::-;22676:23;;:7;:5;:7::i;:::-;:23;;;22668:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49728:16:::1;49710:15;;:34;;;;;;;;;;;;;;;;;;49591:161:::0;:::o;40704:256::-;40801:7;40837:23;40854:5;40837:16;:23::i;:::-;40829:5;:31;40821:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;40926:12;:19;40939:5;40926:19;;;;;;;;;;;;;;;:26;40946:5;40926:26;;;;;;;;;;;;40919:33;;40704:256;;;;:::o;51418:143::-;22687:12;:10;:12::i;:::-;22676:23;;:7;:5;:7::i;:::-;:23;;;22668:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51466:15:::1;51484:21;51466:39;;51524:10;51516:28;;:37;51545:7;51516:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;22747:1;51418:143::o:0;30733:185::-;30871:39;30888:4;30894:2;30898:7;30871:39;;;;;;;;;;;;:16;:39::i;:::-;30733:185;;;:::o;50346:418::-;50509:15;;;;;;;;;;;50485:40;;:12;:10;:12::i;:::-;:40;;;50463:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;50639:1;50604:37;;:9;:17;50614:6;50604:17;;;;;;;;;;;:23;;;;;;;;;;;;:37;;;;50596:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50703:6;50677:9;:17;50687:6;50677:17;;;;;;;;;;;:23;;;:32;;;;;;;;;;;;;;;;;;50748:8;50720:9;:17;50730:6;50720:17;;;;;;;;;;;:25;;;:36;;;;;;;;;;;;;;;;;;50346:418;;;:::o;41226:233::-;41301:7;41337:30;:28;:30::i;:::-;41329:5;:38;41321:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;41434:10;41445:5;41434:17;;;;;;;;;;;;;;;;;;;;;;;;41427:24;;41226:233;;;:::o;51904:101::-;22687:12;:10;:12::i;:::-;22676:23;;:7;:5;:7::i;:::-;:23;;;22668:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51990:7:::1;51975:12;:22;;;;;;;;;;;;:::i;:::-;;51904:101:::0;:::o;51684:91::-;51726:7;51753:14;:12;:14::i;:::-;51746:21;;51684:91;:::o;47173:86::-;47220:4;47244:7;;;;;;;;;;;47237:14;;47173:86;:::o;27568:239::-;27640:7;27660:13;27676:7;:16;27684:7;27676:16;;;;;;;;;;;;;;;;;;;;;27660:32;;27728:1;27711:19;;:5;:19;;;;27703:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27794:5;27787:12;;;27568:239;;;:::o;27298:208::-;27370:7;27415:1;27398:19;;:5;:19;;;;27390:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27482:9;:16;27492:5;27482:16;;;;;;;;;;;;;;;;27475:23;;27298:208;;;:::o;23107:94::-;22687:12;:10;:12::i;:::-;22676:23;;:7;:5;:7::i;:::-;:23;;;22668:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23172:21:::1;23190:1;23172:9;:21::i;:::-;23107:94::o:0;22456:87::-;22502:7;22529:6;;;;;;;;;;;22522:13;;22456:87;:::o;50772:638::-;50865:7;50887:4;50906:7;50984:1;50949:37;;:9;:17;50959:6;50949:17;;;;;;;;;;;:23;;;;;;;;;;;;:37;;;;50941:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51026:9;:17;51036:6;51026:17;;;;;;;;;;;:25;;;;;;;;;;;;51022:381;;;51094:15;51102:6;51094:7;:15::i;:::-;51128:9;:17;51138:6;51128:17;;;;;;;;;;;:25;;;;;;;;;;;;51172:9;:17;51182:6;51172:17;;;;;;;;;;;:22;;;51068:141;;;;;;;;51022:381;51268:9;:17;51278:6;51268:17;;;;;;;;;;;:23;;;;;;;;;;;;51310:9;:17;51320:6;51310:17;;;;;;;;;;;:25;;;;;;;;;;;;51354:9;:17;51364:6;51354:17;;;;;;;;;;;:22;;;51242:149;;;;;;50772:638;;;;;;:::o;28043:104::-;28099:13;28132:7;28125:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28043:104;:::o;29726:295::-;29841:12;:10;:12::i;:::-;29829:24;;:8;:24;;;;29821:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29941:8;29896:18;:32;29915:12;:10;:12::i;:::-;29896:32;;;;;;;;;;;;;;;:42;29929:8;29896:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;29994:8;29965:48;;29980:12;:10;:12::i;:::-;29965:48;;;30004:8;29965:48;;;;;;:::i;:::-;;;;;;;;29726:295;;:::o;52013:382::-;52101:16;52135:18;52156:16;52166:5;52156:9;:16::i;:::-;52135:37;;52185:25;52227:10;52213:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52185:53;;52254:9;52249:111;52273:10;52269:1;:14;52249:111;;;52319:29;52339:5;52346:1;52319:19;:29::i;:::-;52305:8;52314:1;52305:11;;;;;;;;;;;;;;;;;;;;;:43;;;;;52285:3;;;;;:::i;:::-;;;;52249:111;;;;52379:8;52372:15;;;;52013:382;;;:::o;30989:328::-;31164:41;31183:12;:10;:12::i;:::-;31197:7;31164:18;:41::i;:::-;31156:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31270:39;31284:4;31290:2;31294:7;31303:5;31270:13;:39::i;:::-;30989:328;;;;:::o;28218:334::-;28291:13;28325:16;28333:7;28325;:16::i;:::-;28317:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28406:21;28430:10;:8;:10::i;:::-;28406:34;;28482:1;28464:7;28458:21;:25;:86;;;;;;;;;;;;;;;;;28510:7;28519:18;:7;:16;:18::i;:::-;28493:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28458:86;28451:93;;;28218:334;;;:::o;49099:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30092:164::-;30189:4;30213:18;:25;30232:5;30213:25;;;;;;;;;;;;;;;:35;30239:8;30213:35;;;;;;;;;;;;;;;;;;;;;;;;;30206:42;;30092:164;;;;:::o;23356:192::-;22687:12;:10;:12::i;:::-;22676:23;;:7;:5;:7::i;:::-;:23;;;22668:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23465:1:::1;23445:22;;:8;:22;;;;23437:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23521:19;23531:8;23521:9;:19::i;:::-;23356:192:::0;:::o;40396:224::-;40498:4;40537:35;40522:50;;;:11;:50;;;;:90;;;;40576:36;40600:11;40576:23;:36::i;:::-;40522:90;40515:97;;40396:224;;;:::o;21839:98::-;21892:7;21919:10;21912:17;;21839:98;:::o;47973:118::-;47499:8;:6;:8::i;:::-;47498:9;47490:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;48043:4:::1;48033:7;;:14;;;;;;;;;;;;;;;;;;48063:20;48070:12;:10;:12::i;:::-;48063:20;;;;;;:::i;:::-;;;;;;;;47973:118::o:0;48232:120::-;47776:8;:6;:8::i;:::-;47768:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;48301:5:::1;48291:7;;:15;;;;;;;;;;;;;;;;;;48322:22;48331:12;:10;:12::i;:::-;48322:22;;;;;;:::i;:::-;;;;;;;;48232:120::o:0;32827:127::-;32892:4;32944:1;32916:30;;:7;:16;32924:7;32916:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32909:37;;32827:127;;;:::o;36809:174::-;36911:2;36884:15;:24;36900:7;36884:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36967:7;36963:2;36929:46;;36938:23;36953:7;36938:14;:23::i;:::-;36929:46;;;;;;;;;;;;36809:174;;:::o;595:127::-;702:1;684:7;:14;;;:19;;;;;;;;;;;595:127;:::o;51569:107::-;51616:7;51643:25;:15;:23;:25::i;:::-;51636:32;;51569:107;:::o;34805:382::-;34899:1;34885:16;;:2;:16;;;;34877:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34958:16;34966:7;34958;:16::i;:::-;34957:17;34949:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35020:45;35049:1;35053:2;35057:7;35020:20;:45::i;:::-;35095:1;35078:9;:13;35088:2;35078:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35126:2;35107:7;:16;35115:7;35107:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35171:7;35167:2;35146:33;;35163:1;35146:33;;;;;;;;;;;;34805:382;;:::o;33121:348::-;33214:4;33239:16;33247:7;33239;:16::i;:::-;33231:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33315:13;33331:23;33346:7;33331:14;:23::i;:::-;33315:39;;33384:5;33373:16;;:7;:16;;;:51;;;;33417:7;33393:31;;:20;33405:7;33393:11;:20::i;:::-;:31;;;33373:51;:87;;;;33428:32;33445:5;33452:7;33428:16;:32::i;:::-;33373:87;33365:96;;;33121:348;;;;:::o;36113:578::-;36272:4;36245:31;;:23;36260:7;36245:14;:23::i;:::-;:31;;;36237:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;36355:1;36341:16;;:2;:16;;;;36333:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36411:39;36432:4;36438:2;36442:7;36411:20;:39::i;:::-;36515:29;36532:1;36536:7;36515:8;:29::i;:::-;36576:1;36557:9;:15;36567:4;36557:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36605:1;36588:9;:13;36598:2;36588:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36636:2;36617:7;:16;36625:7;36617:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36675:7;36671:2;36656:27;;36665:4;36656:27;;;;;;;;;;;;36113:578;;;:::o;23556:173::-;23612:16;23631:6;;;;;;;;;;;23612:25;;23657:8;23648:6;;:17;;;;;;;;;;;;;;;;;;23712:8;23681:40;;23702:8;23681:40;;;;;;;;;;;;23556:173;;:::o;32199:315::-;32356:28;32366:4;32372:2;32376:7;32356:9;:28::i;:::-;32403:48;32426:4;32432:2;32436:7;32445:5;32403:22;:48::i;:::-;32395:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;32199:315;;;;:::o;51783:113::-;51843:13;51876:12;51869:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51783:113;:::o;23924:723::-;23980:13;24210:1;24201:5;:10;24197:53;;;24228:10;;;;;;;;;;;;;;;;;;;;;24197:53;24260:12;24275:5;24260:20;;24291:14;24316:78;24331:1;24323:4;:9;24316:78;;24349:8;;;;;:::i;:::-;;;;24380:2;24372:10;;;;;:::i;:::-;;;24316:78;;;24404:19;24436:6;24426:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24404:39;;24454:154;24470:1;24461:5;:10;24454:154;;24498:1;24488:11;;;;;:::i;:::-;;;24565:2;24557:5;:10;;;;:::i;:::-;24544:2;:24;;;;:::i;:::-;24531:39;;24514:6;24521;24514:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;24594:2;24585:11;;;;;:::i;:::-;;;24454:154;;;24632:6;24618:21;;;;;23924:723;;;;:::o;26929:305::-;27031:4;27083:25;27068:40;;;:11;:40;;;;:105;;;;27140:33;27125:48;;;:11;:48;;;;27068:105;:158;;;;27190:36;27214:11;27190:23;:36::i;:::-;27068:158;27048:178;;26929:305;;;:::o;473:114::-;538:7;565;:14;;;558:21;;473:114;;;:::o;52565:239::-;52751:45;52778:4;52784:2;52788:7;52751:26;:45::i;:::-;52565:239;;;:::o;37548:799::-;37703:4;37724:15;:2;:13;;;:15::i;:::-;37720:620;;;37776:2;37760:36;;;37797:12;:10;:12::i;:::-;37811:4;37817:7;37826:5;37760:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37756:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38019:1;38002:6;:13;:18;37998:272;;;38045:60;;;;;;;;;;:::i;:::-;;;;;;;;37998:272;38220:6;38214:13;38205:6;38201:2;38197:15;38190:38;37756:529;37893:41;;;37883:51;;;:6;:51;;;;37876:58;;;;;37720:620;38324:4;38317:11;;37548:799;;;;;;;:::o;25790:157::-;25875:4;25914:25;25899:40;;;:11;:40;;;;25892:47;;25790:157;;;:::o;48428:328::-;48572:45;48599:4;48605:2;48609:7;48572:26;:45::i;:::-;48648:7;:5;:7::i;:::-;48632:23;;:12;:10;:12::i;:::-;:23;;;48628:121;;48681:8;:6;:8::i;:::-;48680:9;48672:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;48628:121;48428:328;;;:::o;14475:387::-;14535:4;14743:12;14810:7;14798:20;14790:28;;14853:1;14846:4;:8;14839:15;;;14475:387;;;:::o;42072:589::-;42216:45;42243:4;42249:2;42253:7;42216:26;:45::i;:::-;42294:1;42278:18;;:4;:18;;;42274:187;;;42313:40;42345:7;42313:31;:40::i;:::-;42274:187;;;42383:2;42375:10;;:4;:10;;;42371:90;;42402:47;42435:4;42441:7;42402:32;:47::i;:::-;42371:90;42274:187;42489:1;42475:16;;:2;:16;;;42471:183;;;42508:45;42545:7;42508:36;:45::i;:::-;42471:183;;;42581:4;42575:10;;:2;:10;;;42571:83;;42602:40;42630:2;42634:7;42602:27;:40::i;:::-;42571:83;42471:183;42072:589;;;:::o;38919:126::-;;;;:::o;43384:164::-;43488:10;:17;;;;43461:15;:24;43477:7;43461:24;;;;;;;;;;;:44;;;;43516:10;43532:7;43516:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43384:164;:::o;44175:988::-;44441:22;44491:1;44466:22;44483:4;44466:16;:22::i;:::-;:26;;;;:::i;:::-;44441:51;;44503:18;44524:17;:26;44542:7;44524:26;;;;;;;;;;;;44503:47;;44671:14;44657:10;:28;44653:328;;44702:19;44724:12;:18;44737:4;44724:18;;;;;;;;;;;;;;;:34;44743:14;44724:34;;;;;;;;;;;;44702:56;;44808:11;44775:12;:18;44788:4;44775:18;;;;;;;;;;;;;;;:30;44794:10;44775:30;;;;;;;;;;;:44;;;;44925:10;44892:17;:30;44910:11;44892:30;;;;;;;;;;;:43;;;;44653:328;;45077:17;:26;45095:7;45077:26;;;;;;;;;;;45070:33;;;45121:12;:18;45134:4;45121:18;;;;;;;;;;;;;;;:34;45140:14;45121:34;;;;;;;;;;;45114:41;;;44175:988;;;;:::o;45458:1079::-;45711:22;45756:1;45736:10;:17;;;;:21;;;;:::i;:::-;45711:46;;45768:18;45789:15;:24;45805:7;45789:24;;;;;;;;;;;;45768:45;;46140:19;46162:10;46173:14;46162:26;;;;;;;;;;;;;;;;;;;;;;;;46140:48;;46226:11;46201:10;46212;46201:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;46337:10;46306:15;:28;46322:11;46306:28;;;;;;;;;;;:41;;;;46478:15;:24;46494:7;46478:24;;;;;;;;;;;46471:31;;;46513:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45458:1079;;;;:::o;42962:221::-;43047:14;43064:20;43081:2;43064:16;:20::i;:::-;43047:37;;43122:7;43095:12;:16;43108:2;43095:16;;;;;;;;;;;;;;;:24;43112:6;43095:24;;;;;;;;;;;:34;;;;43169:6;43140:17;:26;43158:7;43140:26;;;;;;;;;;;:35;;;;42962:221;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;869:367::-;;;1002:3;995:4;987:6;983:17;979:27;969:2;;1020:1;1017;1010:12;969:2;1056:6;1043:20;1033:30;;1086:18;1078:6;1075:30;1072:2;;;1118:1;1115;1108:12;1072:2;1155:4;1147:6;1143:17;1131:29;;1209:3;1201:4;1193:6;1189:17;1179:8;1175:32;1172:41;1169:2;;;1226:1;1223;1216:12;1169:2;959:277;;;;;:::o;1242:133::-;;1323:6;1310:20;1301:29;;1339:30;1363:5;1339:30;:::i;:::-;1291:84;;;;:::o;1381:137::-;;1464:6;1451:20;1442:29;;1480:32;1506:5;1480:32;:::i;:::-;1432:86;;;;:::o;1524:141::-;;1611:6;1605:13;1596:22;;1627:32;1653:5;1627:32;:::i;:::-;1586:79;;;;:::o;1684:271::-;;1788:3;1781:4;1773:6;1769:17;1765:27;1755:2;;1806:1;1803;1796:12;1755:2;1846:6;1833:20;1871:78;1945:3;1937:6;1930:4;1922:6;1918:17;1871:78;:::i;:::-;1862:87;;1745:210;;;;;:::o;1961:189::-;;2070:6;2057:20;2048:29;;2086:58;2138:5;2086:58;:::i;:::-;2038:112;;;;:::o;2170:273::-;;2275:3;2268:4;2260:6;2256:17;2252:27;2242:2;;2293:1;2290;2283:12;2242:2;2333:6;2320:20;2358:79;2433:3;2425:6;2418:4;2410:6;2406:17;2358:79;:::i;:::-;2349:88;;2232:211;;;;;:::o;2449:139::-;;2533:6;2520:20;2511:29;;2549:33;2576:5;2549:33;:::i;:::-;2501:87;;;;:::o;2594:262::-;;2702:2;2690:9;2681:7;2677:23;2673:32;2670:2;;;2718:1;2715;2708:12;2670:2;2761:1;2786:53;2831:7;2822:6;2811:9;2807:22;2786:53;:::i;:::-;2776:63;;2732:117;2660:196;;;;:::o;2862:407::-;;;2987:2;2975:9;2966:7;2962:23;2958:32;2955:2;;;3003:1;3000;2993:12;2955:2;3046:1;3071:53;3116:7;3107:6;3096:9;3092:22;3071:53;:::i;:::-;3061:63;;3017:117;3173:2;3199:53;3244:7;3235:6;3224:9;3220:22;3199:53;:::i;:::-;3189:63;;3144:118;2945:324;;;;;:::o;3275:552::-;;;;3417:2;3405:9;3396:7;3392:23;3388:32;3385:2;;;3433:1;3430;3423:12;3385:2;3476:1;3501:53;3546:7;3537:6;3526:9;3522:22;3501:53;:::i;:::-;3491:63;;3447:117;3603:2;3629:53;3674:7;3665:6;3654:9;3650:22;3629:53;:::i;:::-;3619:63;;3574:118;3731:2;3757:53;3802:7;3793:6;3782:9;3778:22;3757:53;:::i;:::-;3747:63;;3702:118;3375:452;;;;;:::o;3833:809::-;;;;;4001:3;3989:9;3980:7;3976:23;3972:33;3969:2;;;4018:1;4015;4008:12;3969:2;4061:1;4086:53;4131:7;4122:6;4111:9;4107:22;4086:53;:::i;:::-;4076:63;;4032:117;4188:2;4214:53;4259:7;4250:6;4239:9;4235:22;4214:53;:::i;:::-;4204:63;;4159:118;4316:2;4342:53;4387:7;4378:6;4367:9;4363:22;4342:53;:::i;:::-;4332:63;;4287:118;4472:2;4461:9;4457:18;4444:32;4503:18;4495:6;4492:30;4489:2;;;4535:1;4532;4525:12;4489:2;4563:62;4617:7;4608:6;4597:9;4593:22;4563:62;:::i;:::-;4553:72;;4415:220;3959:683;;;;;;;:::o;4648:401::-;;;4770:2;4758:9;4749:7;4745:23;4741:32;4738:2;;;4786:1;4783;4776:12;4738:2;4829:1;4854:53;4899:7;4890:6;4879:9;4875:22;4854:53;:::i;:::-;4844:63;;4800:117;4956:2;4982:50;5024:7;5015:6;5004:9;5000:22;4982:50;:::i;:::-;4972:60;;4927:115;4728:321;;;;;:::o;5055:407::-;;;5180:2;5168:9;5159:7;5155:23;5151:32;5148:2;;;5196:1;5193;5186:12;5148:2;5239:1;5264:53;5309:7;5300:6;5289:9;5285:22;5264:53;:::i;:::-;5254:63;;5210:117;5366:2;5392:53;5437:7;5428:6;5417:9;5413:22;5392:53;:::i;:::-;5382:63;;5337:118;5138:324;;;;;:::o;5468:425::-;;;5611:2;5599:9;5590:7;5586:23;5582:32;5579:2;;;5627:1;5624;5617:12;5579:2;5698:1;5687:9;5683:17;5670:31;5728:18;5720:6;5717:30;5714:2;;;5760:1;5757;5750:12;5714:2;5796:80;5868:7;5859:6;5848:9;5844:22;5796:80;:::i;:::-;5778:98;;;;5641:245;5569:324;;;;;:::o;5899:256::-;;6004:2;5992:9;5983:7;5979:23;5975:32;5972:2;;;6020:1;6017;6010:12;5972:2;6063:1;6088:50;6130:7;6121:6;6110:9;6106:22;6088:50;:::i;:::-;6078:60;;6034:114;5962:193;;;;:::o;6161:260::-;;6268:2;6256:9;6247:7;6243:23;6239:32;6236:2;;;6284:1;6281;6274:12;6236:2;6327:1;6352:52;6396:7;6387:6;6376:9;6372:22;6352:52;:::i;:::-;6342:62;;6298:116;6226:195;;;;:::o;6427:282::-;;6545:2;6533:9;6524:7;6520:23;6516:32;6513:2;;;6561:1;6558;6551:12;6513:2;6604:1;6629:63;6684:7;6675:6;6664:9;6660:22;6629:63;:::i;:::-;6619:73;;6575:127;6503:206;;;;:::o;6715:312::-;;6848:2;6836:9;6827:7;6823:23;6819:32;6816:2;;;6864:1;6861;6854:12;6816:2;6907:1;6932:78;7002:7;6993:6;6982:9;6978:22;6932:78;:::i;:::-;6922:88;;6878:142;6806:221;;;;:::o;7033:375::-;;7151:2;7139:9;7130:7;7126:23;7122:32;7119:2;;;7167:1;7164;7157:12;7119:2;7238:1;7227:9;7223:17;7210:31;7268:18;7260:6;7257:30;7254:2;;;7300:1;7297;7290:12;7254:2;7328:63;7383:7;7374:6;7363:9;7359:22;7328:63;:::i;:::-;7318:73;;7181:220;7109:299;;;;:::o;7414:262::-;;7522:2;7510:9;7501:7;7497:23;7493:32;7490:2;;;7538:1;7535;7528:12;7490:2;7581:1;7606:53;7651:7;7642:6;7631:9;7627:22;7606:53;:::i;:::-;7596:63;;7552:117;7480:196;;;;:::o;7682:546::-;;;;7821:2;7809:9;7800:7;7796:23;7792:32;7789:2;;;7837:1;7834;7827:12;7789:2;7880:1;7905:53;7950:7;7941:6;7930:9;7926:22;7905:53;:::i;:::-;7895:63;;7851:117;8007:2;8033:53;8078:7;8069:6;8058:9;8054:22;8033:53;:::i;:::-;8023:63;;7978:118;8135:2;8161:50;8203:7;8194:6;8183:9;8179:22;8161:50;:::i;:::-;8151:60;;8106:115;7779:449;;;;;:::o;8234:179::-;;8324:46;8366:3;8358:6;8324:46;:::i;:::-;8402:4;8397:3;8393:14;8379:28;;8314:99;;;;:::o;8419:118::-;8506:24;8524:5;8506:24;:::i;:::-;8501:3;8494:37;8484:53;;:::o;8573:732::-;;8721:54;8769:5;8721:54;:::i;:::-;8791:86;8870:6;8865:3;8791:86;:::i;:::-;8784:93;;8901:56;8951:5;8901:56;:::i;:::-;8980:7;9011:1;8996:284;9021:6;9018:1;9015:13;8996:284;;;9097:6;9091:13;9124:63;9183:3;9168:13;9124:63;:::i;:::-;9117:70;;9210:60;9263:6;9210:60;:::i;:::-;9200:70;;9056:224;9043:1;9040;9036:9;9031:14;;8996:284;;;9000:14;9296:3;9289:10;;8697:608;;;;;;;:::o;9311:109::-;9392:21;9407:5;9392:21;:::i;:::-;9387:3;9380:34;9370:50;;:::o;9426:360::-;;9540:38;9572:5;9540:38;:::i;:::-;9594:70;9657:6;9652:3;9594:70;:::i;:::-;9587:77;;9673:52;9718:6;9713:3;9706:4;9699:5;9695:16;9673:52;:::i;:::-;9750:29;9772:6;9750:29;:::i;:::-;9745:3;9741:39;9734:46;;9516:270;;;;;:::o;9792:364::-;;9908:39;9941:5;9908:39;:::i;:::-;9963:71;10027:6;10022:3;9963:71;:::i;:::-;9956:78;;10043:52;10088:6;10083:3;10076:4;10069:5;10065:16;10043:52;:::i;:::-;10120:29;10142:6;10120:29;:::i;:::-;10115:3;10111:39;10104:46;;9884:272;;;;;:::o;10162:377::-;;10296:39;10329:5;10296:39;:::i;:::-;10351:89;10433:6;10428:3;10351:89;:::i;:::-;10344:96;;10449:52;10494:6;10489:3;10482:4;10475:5;10471:16;10449:52;:::i;:::-;10526:6;10521:3;10517:16;10510:23;;10272:267;;;;;:::o;10545:366::-;;10708:67;10772:2;10767:3;10708:67;:::i;:::-;10701:74;;10784:93;10873:3;10784:93;:::i;:::-;10902:2;10897:3;10893:12;10886:19;;10691:220;;;:::o;10917:366::-;;11080:67;11144:2;11139:3;11080:67;:::i;:::-;11073:74;;11156:93;11245:3;11156:93;:::i;:::-;11274:2;11269:3;11265:12;11258:19;;11063:220;;;:::o;11289:366::-;;11452:67;11516:2;11511:3;11452:67;:::i;:::-;11445:74;;11528:93;11617:3;11528:93;:::i;:::-;11646:2;11641:3;11637:12;11630:19;;11435:220;;;:::o;11661:366::-;;11824:67;11888:2;11883:3;11824:67;:::i;:::-;11817:74;;11900:93;11989:3;11900:93;:::i;:::-;12018:2;12013:3;12009:12;12002:19;;11807:220;;;:::o;12033:366::-;;12196:67;12260:2;12255:3;12196:67;:::i;:::-;12189:74;;12272:93;12361:3;12272:93;:::i;:::-;12390:2;12385:3;12381:12;12374:19;;12179:220;;;:::o;12405:366::-;;12568:67;12632:2;12627:3;12568:67;:::i;:::-;12561:74;;12644:93;12733:3;12644:93;:::i;:::-;12762:2;12757:3;12753:12;12746:19;;12551:220;;;:::o;12777:366::-;;12940:67;13004:2;12999:3;12940:67;:::i;:::-;12933:74;;13016:93;13105:3;13016:93;:::i;:::-;13134:2;13129:3;13125:12;13118:19;;12923:220;;;:::o;13149:366::-;;13312:67;13376:2;13371:3;13312:67;:::i;:::-;13305:74;;13388:93;13477:3;13388:93;:::i;:::-;13506:2;13501:3;13497:12;13490:19;;13295:220;;;:::o;13521:366::-;;13684:67;13748:2;13743:3;13684:67;:::i;:::-;13677:74;;13760:93;13849:3;13760:93;:::i;:::-;13878:2;13873:3;13869:12;13862:19;;13667:220;;;:::o;13893:366::-;;14056:67;14120:2;14115:3;14056:67;:::i;:::-;14049:74;;14132:93;14221:3;14132:93;:::i;:::-;14250:2;14245:3;14241:12;14234:19;;14039:220;;;:::o;14265:366::-;;14428:67;14492:2;14487:3;14428:67;:::i;:::-;14421:74;;14504:93;14593:3;14504:93;:::i;:::-;14622:2;14617:3;14613:12;14606:19;;14411:220;;;:::o;14637:366::-;;14800:67;14864:2;14859:3;14800:67;:::i;:::-;14793:74;;14876:93;14965:3;14876:93;:::i;:::-;14994:2;14989:3;14985:12;14978:19;;14783:220;;;:::o;15009:366::-;;15172:67;15236:2;15231:3;15172:67;:::i;:::-;15165:74;;15248:93;15337:3;15248:93;:::i;:::-;15366:2;15361:3;15357:12;15350:19;;15155:220;;;:::o;15381:366::-;;15544:67;15608:2;15603:3;15544:67;:::i;:::-;15537:74;;15620:93;15709:3;15620:93;:::i;:::-;15738:2;15733:3;15729:12;15722:19;;15527:220;;;:::o;15753:366::-;;15916:67;15980:2;15975:3;15916:67;:::i;:::-;15909:74;;15992:93;16081:3;15992:93;:::i;:::-;16110:2;16105:3;16101:12;16094:19;;15899:220;;;:::o;16125:366::-;;16288:67;16352:2;16347:3;16288:67;:::i;:::-;16281:74;;16364:93;16453:3;16364:93;:::i;:::-;16482:2;16477:3;16473:12;16466:19;;16271:220;;;:::o;16497:366::-;;16660:67;16724:2;16719:3;16660:67;:::i;:::-;16653:74;;16736:93;16825:3;16736:93;:::i;:::-;16854:2;16849:3;16845:12;16838:19;;16643:220;;;:::o;16869:366::-;;17032:67;17096:2;17091:3;17032:67;:::i;:::-;17025:74;;17108:93;17197:3;17108:93;:::i;:::-;17226:2;17221:3;17217:12;17210:19;;17015:220;;;:::o;17241:366::-;;17404:67;17468:2;17463:3;17404:67;:::i;:::-;17397:74;;17480:93;17569:3;17480:93;:::i;:::-;17598:2;17593:3;17589:12;17582:19;;17387:220;;;:::o;17613:366::-;;17776:67;17840:2;17835:3;17776:67;:::i;:::-;17769:74;;17852:93;17941:3;17852:93;:::i;:::-;17970:2;17965:3;17961:12;17954:19;;17759:220;;;:::o;17985:366::-;;18148:67;18212:2;18207:3;18148:67;:::i;:::-;18141:74;;18224:93;18313:3;18224:93;:::i;:::-;18342:2;18337:3;18333:12;18326:19;;18131:220;;;:::o;18357:366::-;;18520:67;18584:2;18579:3;18520:67;:::i;:::-;18513:74;;18596:93;18685:3;18596:93;:::i;:::-;18714:2;18709:3;18705:12;18698:19;;18503:220;;;:::o;18729:366::-;;18892:67;18956:2;18951:3;18892:67;:::i;:::-;18885:74;;18968:93;19057:3;18968:93;:::i;:::-;19086:2;19081:3;19077:12;19070:19;;18875:220;;;:::o;19101:366::-;;19264:67;19328:2;19323:3;19264:67;:::i;:::-;19257:74;;19340:93;19429:3;19340:93;:::i;:::-;19458:2;19453:3;19449:12;19442:19;;19247:220;;;:::o;19473:108::-;19550:24;19568:5;19550:24;:::i;:::-;19545:3;19538:37;19528:53;;:::o;19587:118::-;19674:24;19692:5;19674:24;:::i;:::-;19669:3;19662:37;19652:53;;:::o;19711:435::-;;19913:95;20004:3;19995:6;19913:95;:::i;:::-;19906:102;;20025:95;20116:3;20107:6;20025:95;:::i;:::-;20018:102;;20137:3;20130:10;;19895:251;;;;;:::o;20152:222::-;;20283:2;20272:9;20268:18;20260:26;;20296:71;20364:1;20353:9;20349:17;20340:6;20296:71;:::i;:::-;20250:124;;;;:::o;20380:640::-;;20613:3;20602:9;20598:19;20590:27;;20627:71;20695:1;20684:9;20680:17;20671:6;20627:71;:::i;:::-;20708:72;20776:2;20765:9;20761:18;20752:6;20708:72;:::i;:::-;20790;20858:2;20847:9;20843:18;20834:6;20790:72;:::i;:::-;20909:9;20903:4;20899:20;20894:2;20883:9;20879:18;20872:48;20937:76;21008:4;20999:6;20937:76;:::i;:::-;20929:84;;20580:440;;;;;;;:::o;21026:430::-;;21207:2;21196:9;21192:18;21184:26;;21220:71;21288:1;21277:9;21273:17;21264:6;21220:71;:::i;:::-;21301:66;21363:2;21352:9;21348:18;21339:6;21301:66;:::i;:::-;21377:72;21445:2;21434:9;21430:18;21421:6;21377:72;:::i;:::-;21174:282;;;;;;:::o;21462:373::-;;21643:2;21632:9;21628:18;21620:26;;21692:9;21686:4;21682:20;21678:1;21667:9;21663:17;21656:47;21720:108;21823:4;21814:6;21720:108;:::i;:::-;21712:116;;21610:225;;;;:::o;21841:210::-;;21966:2;21955:9;21951:18;21943:26;;21979:65;22041:1;22030:9;22026:17;22017:6;21979:65;:::i;:::-;21933:118;;;;:::o;22057:313::-;;22208:2;22197:9;22193:18;22185:26;;22257:9;22251:4;22247:20;22243:1;22232:9;22228:17;22221:47;22285:78;22358:4;22349:6;22285:78;:::i;:::-;22277:86;;22175:195;;;;:::o;22376:419::-;;22580:2;22569:9;22565:18;22557:26;;22629:9;22623:4;22619:20;22615:1;22604:9;22600:17;22593:47;22657:131;22783:4;22657:131;:::i;:::-;22649:139;;22547:248;;;:::o;22801:419::-;;23005:2;22994:9;22990:18;22982:26;;23054:9;23048:4;23044:20;23040:1;23029:9;23025:17;23018:47;23082:131;23208:4;23082:131;:::i;:::-;23074:139;;22972:248;;;:::o;23226:419::-;;23430:2;23419:9;23415:18;23407:26;;23479:9;23473:4;23469:20;23465:1;23454:9;23450:17;23443:47;23507:131;23633:4;23507:131;:::i;:::-;23499:139;;23397:248;;;:::o;23651:419::-;;23855:2;23844:9;23840:18;23832:26;;23904:9;23898:4;23894:20;23890:1;23879:9;23875:17;23868:47;23932:131;24058:4;23932:131;:::i;:::-;23924:139;;23822:248;;;:::o;24076:419::-;;24280:2;24269:9;24265:18;24257:26;;24329:9;24323:4;24319:20;24315:1;24304:9;24300:17;24293:47;24357:131;24483:4;24357:131;:::i;:::-;24349:139;;24247:248;;;:::o;24501:419::-;;24705:2;24694:9;24690:18;24682:26;;24754:9;24748:4;24744:20;24740:1;24729:9;24725:17;24718:47;24782:131;24908:4;24782:131;:::i;:::-;24774:139;;24672:248;;;:::o;24926:419::-;;25130:2;25119:9;25115:18;25107:26;;25179:9;25173:4;25169:20;25165:1;25154:9;25150:17;25143:47;25207:131;25333:4;25207:131;:::i;:::-;25199:139;;25097:248;;;:::o;25351:419::-;;25555:2;25544:9;25540:18;25532:26;;25604:9;25598:4;25594:20;25590:1;25579:9;25575:17;25568:47;25632:131;25758:4;25632:131;:::i;:::-;25624:139;;25522:248;;;:::o;25776:419::-;;25980:2;25969:9;25965:18;25957:26;;26029:9;26023:4;26019:20;26015:1;26004:9;26000:17;25993:47;26057:131;26183:4;26057:131;:::i;:::-;26049:139;;25947:248;;;:::o;26201:419::-;;26405:2;26394:9;26390:18;26382:26;;26454:9;26448:4;26444:20;26440:1;26429:9;26425:17;26418:47;26482:131;26608:4;26482:131;:::i;:::-;26474:139;;26372:248;;;:::o;26626:419::-;;26830:2;26819:9;26815:18;26807:26;;26879:9;26873:4;26869:20;26865:1;26854:9;26850:17;26843:47;26907:131;27033:4;26907:131;:::i;:::-;26899:139;;26797:248;;;:::o;27051:419::-;;27255:2;27244:9;27240:18;27232:26;;27304:9;27298:4;27294:20;27290:1;27279:9;27275:17;27268:47;27332:131;27458:4;27332:131;:::i;:::-;27324:139;;27222:248;;;:::o;27476:419::-;;27680:2;27669:9;27665:18;27657:26;;27729:9;27723:4;27719:20;27715:1;27704:9;27700:17;27693:47;27757:131;27883:4;27757:131;:::i;:::-;27749:139;;27647:248;;;:::o;27901:419::-;;28105:2;28094:9;28090:18;28082:26;;28154:9;28148:4;28144:20;28140:1;28129:9;28125:17;28118:47;28182:131;28308:4;28182:131;:::i;:::-;28174:139;;28072:248;;;:::o;28326:419::-;;28530:2;28519:9;28515:18;28507:26;;28579:9;28573:4;28569:20;28565:1;28554:9;28550:17;28543:47;28607:131;28733:4;28607:131;:::i;:::-;28599:139;;28497:248;;;:::o;28751:419::-;;28955:2;28944:9;28940:18;28932:26;;29004:9;28998:4;28994:20;28990:1;28979:9;28975:17;28968:47;29032:131;29158:4;29032:131;:::i;:::-;29024:139;;28922:248;;;:::o;29176:419::-;;29380:2;29369:9;29365:18;29357:26;;29429:9;29423:4;29419:20;29415:1;29404:9;29400:17;29393:47;29457:131;29583:4;29457:131;:::i;:::-;29449:139;;29347:248;;;:::o;29601:419::-;;29805:2;29794:9;29790:18;29782:26;;29854:9;29848:4;29844:20;29840:1;29829:9;29825:17;29818:47;29882:131;30008:4;29882:131;:::i;:::-;29874:139;;29772:248;;;:::o;30026:419::-;;30230:2;30219:9;30215:18;30207:26;;30279:9;30273:4;30269:20;30265:1;30254:9;30250:17;30243:47;30307:131;30433:4;30307:131;:::i;:::-;30299:139;;30197:248;;;:::o;30451:419::-;;30655:2;30644:9;30640:18;30632:26;;30704:9;30698:4;30694:20;30690:1;30679:9;30675:17;30668:47;30732:131;30858:4;30732:131;:::i;:::-;30724:139;;30622:248;;;:::o;30876:419::-;;31080:2;31069:9;31065:18;31057:26;;31129:9;31123:4;31119:20;31115:1;31104:9;31100:17;31093:47;31157:131;31283:4;31157:131;:::i;:::-;31149:139;;31047:248;;;:::o;31301:419::-;;31505:2;31494:9;31490:18;31482:26;;31554:9;31548:4;31544:20;31540:1;31529:9;31525:17;31518:47;31582:131;31708:4;31582:131;:::i;:::-;31574:139;;31472:248;;;:::o;31726:419::-;;31930:2;31919:9;31915:18;31907:26;;31979:9;31973:4;31969:20;31965:1;31954:9;31950:17;31943:47;32007:131;32133:4;32007:131;:::i;:::-;31999:139;;31897:248;;;:::o;32151:419::-;;32355:2;32344:9;32340:18;32332:26;;32404:9;32398:4;32394:20;32390:1;32379:9;32375:17;32368:47;32432:131;32558:4;32432:131;:::i;:::-;32424:139;;32322:248;;;:::o;32576:222::-;;32707:2;32696:9;32692:18;32684:26;;32720:71;32788:1;32777:9;32773:17;32764:6;32720:71;:::i;:::-;32674:124;;;;:::o;32804:129::-;;32865:20;;:::i;:::-;32855:30;;32894:33;32922:4;32914:6;32894:33;:::i;:::-;32845:88;;;:::o;32939:75::-;;33005:2;32999:9;32989:19;;32979:35;:::o;33020:307::-;;33171:18;33163:6;33160:30;33157:2;;;33193:18;;:::i;:::-;33157:2;33231:29;33253:6;33231:29;:::i;:::-;33223:37;;33315:4;33309;33305:15;33297:23;;33086:241;;;:::o;33333:308::-;;33485:18;33477:6;33474:30;33471:2;;;33507:18;;:::i;:::-;33471:2;33545:29;33567:6;33545:29;:::i;:::-;33537:37;;33629:4;33623;33619:15;33611:23;;33400:241;;;:::o;33647:132::-;;33737:3;33729:11;;33767:4;33762:3;33758:14;33750:22;;33719:60;;;:::o;33785:114::-;;33886:5;33880:12;33870:22;;33859:40;;;:::o;33905:98::-;;33990:5;33984:12;33974:22;;33963:40;;;:::o;34009:99::-;;34095:5;34089:12;34079:22;;34068:40;;;:::o;34114:113::-;;34216:4;34211:3;34207:14;34199:22;;34189:38;;;:::o;34233:184::-;;34366:6;34361:3;34354:19;34406:4;34401:3;34397:14;34382:29;;34344:73;;;;:::o;34423:168::-;;34540:6;34535:3;34528:19;34580:4;34575:3;34571:14;34556:29;;34518:73;;;;:::o;34597:169::-;;34715:6;34710:3;34703:19;34755:4;34750:3;34746:14;34731:29;;34693:73;;;;:::o;34772:148::-;;34911:3;34896:18;;34886:34;;;;:::o;34926:305::-;;34985:20;35003:1;34985:20;:::i;:::-;34980:25;;35019:20;35037:1;35019:20;:::i;:::-;35014:25;;35173:1;35105:66;35101:74;35098:1;35095:81;35092:2;;;35179:18;;:::i;:::-;35092:2;35223:1;35220;35216:9;35209:16;;34970:261;;;;:::o;35237:185::-;;35294:20;35312:1;35294:20;:::i;:::-;35289:25;;35328:20;35346:1;35328:20;:::i;:::-;35323:25;;35367:1;35357:2;;35372:18;;:::i;:::-;35357:2;35414:1;35411;35407:9;35402:14;;35279:143;;;;:::o;35428:191::-;;35488:20;35506:1;35488:20;:::i;:::-;35483:25;;35522:20;35540:1;35522:20;:::i;:::-;35517:25;;35561:1;35558;35555:8;35552:2;;;35566:18;;:::i;:::-;35552:2;35611:1;35608;35604:9;35596:17;;35473:146;;;;:::o;35625:96::-;;35691:24;35709:5;35691:24;:::i;:::-;35680:35;;35670:51;;;:::o;35727:90::-;;35804:5;35797:13;35790:21;35779:32;;35769:48;;;:::o;35823:149::-;;35899:66;35892:5;35888:78;35877:89;;35867:105;;;:::o;35978:121::-;;36069:24;36087:5;36069:24;:::i;:::-;36058:35;;36048:51;;;:::o;36105:126::-;;36182:42;36175:5;36171:54;36160:65;;36150:81;;;:::o;36237:77::-;;36303:5;36292:16;;36282:32;;;:::o;36320:154::-;36404:6;36399:3;36394;36381:30;36466:1;36457:6;36452:3;36448:16;36441:27;36371:103;;;:::o;36480:307::-;36548:1;36558:113;36572:6;36569:1;36566:13;36558:113;;;36657:1;36652:3;36648:11;36642:18;36638:1;36633:3;36629:11;36622:39;36594:2;36591:1;36587:10;36582:15;;36558:113;;;36689:6;36686:1;36683:13;36680:2;;;36769:1;36760:6;36755:3;36751:16;36744:27;36680:2;36529:258;;;;:::o;36793:320::-;;36874:1;36868:4;36864:12;36854:22;;36921:1;36915:4;36911:12;36942:18;36932:2;;36998:4;36990:6;36986:17;36976:27;;36932:2;37060;37052:6;37049:14;37029:18;37026:38;37023:2;;;37079:18;;:::i;:::-;37023:2;36844:269;;;;:::o;37119:281::-;37202:27;37224:4;37202:27;:::i;:::-;37194:6;37190:40;37332:6;37320:10;37317:22;37296:18;37284:10;37281:34;37278:62;37275:2;;;37343:18;;:::i;:::-;37275:2;37383:10;37379:2;37372:22;37162:238;;;:::o;37406:233::-;;37468:24;37486:5;37468:24;:::i;:::-;37459:33;;37514:66;37507:5;37504:77;37501:2;;;37584:18;;:::i;:::-;37501:2;37631:1;37624:5;37620:13;37613:20;;37449:190;;;:::o;37645:176::-;;37694:20;37712:1;37694:20;:::i;:::-;37689:25;;37728:20;37746:1;37728:20;:::i;:::-;37723:25;;37767:1;37757:2;;37772:18;;:::i;:::-;37757:2;37813:1;37810;37806:9;37801:14;;37679:142;;;;:::o;37827:180::-;37875:77;37872:1;37865:88;37972:4;37969:1;37962:15;37996:4;37993:1;37986:15;38013:180;38061:77;38058:1;38051:88;38158:4;38155:1;38148:15;38182:4;38179:1;38172:15;38199:180;38247:77;38244:1;38237:88;38344:4;38341:1;38334:15;38368:4;38365:1;38358:15;38385:180;38433:77;38430:1;38423:88;38530:4;38527:1;38520:15;38554:4;38551:1;38544:15;38571:102;;38663:2;38659:7;38654:2;38647:5;38643:14;38639:28;38629:38;;38619:54;;;:::o;38679:230::-;38819:34;38815:1;38807:6;38803:14;38796:58;38888:13;38883:2;38875:6;38871:15;38864:38;38785:124;:::o;38915:170::-;39055:22;39051:1;39043:6;39039:14;39032:46;39021:64;:::o;39091:180::-;39231:32;39227:1;39219:6;39215:14;39208:56;39197:74;:::o;39277:230::-;39417:34;39413:1;39405:6;39401:14;39394:58;39486:13;39481:2;39473:6;39469:15;39462:38;39383:124;:::o;39513:237::-;39653:34;39649:1;39641:6;39637:14;39630:58;39722:20;39717:2;39709:6;39705:15;39698:45;39619:131;:::o;39756:168::-;39896:20;39892:1;39884:6;39880:14;39873:44;39862:62;:::o;39930:225::-;40070:34;40066:1;40058:6;40054:14;40047:58;40139:8;40134:2;40126:6;40122:15;40115:33;40036:119;:::o;40161:178::-;40301:30;40297:1;40289:6;40285:14;40278:54;40267:72;:::o;40345:165::-;40485:17;40481:1;40473:6;40469:14;40462:41;40451:59;:::o;40516:223::-;40656:34;40652:1;40644:6;40640:14;40633:58;40725:6;40720:2;40712:6;40708:15;40701:31;40622:117;:::o;40745:175::-;40885:27;40881:1;40873:6;40869:14;40862:51;40851:69;:::o;40926:231::-;41066:34;41062:1;41054:6;41050:14;41043:58;41135:14;41130:2;41122:6;41118:15;41111:39;41032:125;:::o;41163:166::-;41303:18;41299:1;41291:6;41287:14;41280:42;41269:60;:::o;41335:243::-;41475:34;41471:1;41463:6;41459:14;41452:58;41544:26;41539:2;41531:6;41527:15;41520:51;41441:137;:::o;41584:229::-;41724:34;41720:1;41712:6;41708:14;41701:58;41793:12;41788:2;41780:6;41776:15;41769:37;41690:123;:::o;41819:228::-;41959:34;41955:1;41947:6;41943:14;41936:58;42028:11;42023:2;42015:6;42011:15;42004:36;41925:122;:::o;42053:182::-;42193:34;42189:1;42181:6;42177:14;42170:58;42159:76;:::o;42241:231::-;42381:34;42377:1;42369:6;42365:14;42358:58;42450:14;42445:2;42437:6;42433:15;42426:39;42347:125;:::o;42478:182::-;42618:34;42614:1;42606:6;42602:14;42595:58;42584:76;:::o;42666:228::-;42806:34;42802:1;42794:6;42790:14;42783:58;42875:11;42870:2;42862:6;42858:15;42851:36;42772:122;:::o;42900:234::-;43040:34;43036:1;43028:6;43024:14;43017:58;43109:17;43104:2;43096:6;43092:15;43085:42;43006:128;:::o;43140:220::-;43280:34;43276:1;43268:6;43264:14;43257:58;43349:3;43344:2;43336:6;43332:15;43325:28;43246:114;:::o;43366:236::-;43506:34;43502:1;43494:6;43490:14;43483:58;43575:19;43570:2;43562:6;43558:15;43551:44;43472:130;:::o;43608:231::-;43748:34;43744:1;43736:6;43732:14;43725:58;43817:14;43812:2;43804:6;43800:15;43793:39;43714:125;:::o;43845:122::-;43918:24;43936:5;43918:24;:::i;:::-;43911:5;43908:35;43898:2;;43957:1;43954;43947:12;43898:2;43888:79;:::o;43973:116::-;44043:21;44058:5;44043:21;:::i;:::-;44036:5;44033:32;44023:2;;44079:1;44076;44069:12;44023:2;44013:76;:::o;44095:120::-;44167:23;44184:5;44167:23;:::i;:::-;44160:5;44157:34;44147:2;;44205:1;44202;44195:12;44147:2;44137:78;:::o;44221:172::-;44319:49;44362:5;44319:49;:::i;:::-;44312:5;44309:60;44299:2;;44383:1;44380;44373:12;44299:2;44289:104;:::o;44399:122::-;44472:24;44490:5;44472:24;:::i;:::-;44465:5;44462:35;44452:2;;44511:1;44508;44501:12;44452:2;44442:79;:::o

Swarm Source

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