ETH Price: $3,482.74 (+2.17%)

Noun Pepes (NP)
 

Overview

TokenID

260

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-
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:
NounPepes

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-25
*/

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


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

pragma solidity ^0.8.0;

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

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

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

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

        _;

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;


/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
     * @dev Handles the receipt of a single ERC1155 token type. This function is
     * called at the end of a `safeTransferFrom` after the balance has been updated.
     *
     * NOTE: To accept the transfer, this must return
     * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * (i.e. 0xf23a6e61, or its own function selector).
     *
     * @param operator The address which initiated the transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param id The ID of the token being transferred
     * @param value The amount of tokens being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
     */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
     * @dev Handles the receipt of a multiple ERC1155 token types. This function
     * is called at the end of a `safeBatchTransferFrom` after the balances have
     * been updated.
     *
     * NOTE: To accept the transfer(s), this must return
     * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     * (i.e. 0xbc197c81, or its own function selector).
     *
     * @param operator The address which initiated the batch transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param ids An array containing ids of each token being transferred (order and length must match values array)
     * @param values An array containing amounts of each token being transferred (order and length must match ids array)
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
     */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol


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

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

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


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

pragma solidity ^0.8.0;


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

// File: @openzeppelin/contracts/token/ERC1155/utils/ERC1155Receiver.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/utils/ERC1155Receiver.sol)

pragma solidity ^0.8.0;



/**
 * @dev _Available since v3.1._
 */
abstract contract ERC1155Receiver is ERC165, IERC1155Receiver {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId);
    }
}

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/security/Pausable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
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 Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        _requireNotPaused();
        _;
    }

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

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

    /**
     * @dev Throws if the contract is paused.
     */
    function _requireNotPaused() internal view virtual {
        require(!paused(), "Pausable: paused");
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused() internal view virtual {
        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());
    }
}

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


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

pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

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

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

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

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

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

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

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


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

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

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

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

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

// File: contracts/NounPepes.sol

pragma solidity 0.8.7;








interface Metadata {
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

contract NounPepes is ERC721('Noun Pepes', 'NP'), Ownable, ERC1155Receiver, ReentrancyGuard, Pausable {

    address OS = 0x495f947276749Ce646f68AC8c248420045cb7b5e;
    address MD = 0x005A20Ba09425A3F9A0dDAf1B0764e9CAF0E8dfc;

    modifier onlyFren {
        //frens can map.
        require(frens[msg.sender] || msg.sender == owner(), "not a fren");
        _;
    }

    mapping(uint256 => bool) isIdMapped;
    mapping(uint256 => uint256) map;
    mapping(address => bool) frens;

    function tokenURI(uint256 tokenId) public view override returns (string memory) {
        return Metadata(MD).tokenURI(tokenId);
    }

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

    function onERC1155Received(
            address operator, address from, uint256 id, uint256 value, bytes calldata data
    ) public virtual override nonReentrant returns (bytes4) {
        require(msg.sender == OS, "not an os token");
        require(isIdMapped[id], "token not mapped");
        require(!paused(), "paused");
        _safeMint(from, map[id]);

        return this.onERC1155Received.selector;
    }
    function onERC1155BatchReceived(
            address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data
    ) public virtual override returns (bytes4) {
        require(msg.sender == OS, "not an OS token");
        require(!paused(), "paused");
        for(uint i = 0; i < ids.length; i++) {
            require(isIdMapped[ids[i]], "token not mapped");
            _safeMint(from, map[ids[i]]);
        }
        return this.onERC1155BatchReceived.selector;
    }

    receive() external payable {}

    function isNounPepeMigrationReady(uint256 osTokenId) external view returns (bool) {
        return isIdMapped[osTokenId];
    }
    function isFren(address _user) external view returns (bool) {
        return frens[_user];
    }

    function mapNounPepes(uint256[] calldata osTokenIds, uint256[] calldata newTokenIds) external onlyFren {
        require(osTokenIds.length == newTokenIds.length);
        for(uint256 i; i < osTokenIds.length; i++) {
            mapNounPepe(osTokenIds[i], newTokenIds[i]);
        }
    }

    function mapNounPepe(uint256 osTokenId, uint256 newTokenId) public onlyFren {
        isIdMapped[osTokenId] = true;
        map[osTokenId] = newTokenId;
    }

    function pause() external onlyOwner whenNotPaused {
        _pause();
    }

    function unpause() external onlyOwner whenPaused {
        _unpause();
    }

    function retrieveOldNounPepe(uint256 tokenId) external onlyOwner {
        IERC1155(OS).safeTransferFrom(address(this), msg.sender, tokenId, 1, '');
    }
    function forceMint(uint256 newTokenId, address _user) external onlyOwner {
        _safeMint(_user, newTokenId);
    }
    function retrieveNewNounPepe(uint256 tokenId) external onlyOwner {
        safeTransferFrom(address(this), msg.sender, tokenId);
    }

    function withdraw() external onlyOwner {
        payable(owner()).call{value: address(this).balance}('');
    }
    function setOpenSeaContract(address _os) external onlyOwner {
        OS = _os;
    }
    function setMetadataContract(address _md) external onlyOwner {
        MD = _md;
    }

    function addFren(address fren) external onlyOwner {
        frens[fren] = true;
    }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"fren","type":"address"}],"name":"addFren","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":[{"internalType":"uint256","name":"newTokenId","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"forceMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[{"internalType":"address","name":"_user","type":"address"}],"name":"isFren","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"osTokenId","type":"uint256"}],"name":"isNounPepeMigrationReady","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"osTokenId","type":"uint256"},{"internalType":"uint256","name":"newTokenId","type":"uint256"}],"name":"mapNounPepe","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"osTokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"newTokenIds","type":"uint256[]"}],"name":"mapNounPepes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"uint256","name":"tokenId","type":"uint256"}],"name":"retrieveNewNounPepe","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"retrieveOldNounPepe","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":"address","name":"_md","type":"address"}],"name":"setMetadataContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_os","type":"address"}],"name":"setOpenSeaContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405273495f947276749ce646f68ac8c248420045cb7b5e600860016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550725a20ba09425a3f9a0ddaf1b0764e9caf0e8dfc600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000ba57600080fd5b506040518060400160405280600a81526020017f4e6f756e205065706573000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f4e5000000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200013f92919062000272565b5080600190805190602001906200015892919062000272565b5050506200017b6200016f620001a460201b60201c565b620001ac60201b60201c565b60016007819055506000600860006101000a81548160ff02191690831515021790555062000387565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002809062000322565b90600052602060002090601f016020900481019282620002a45760008555620002f0565b82601f10620002bf57805160ff1916838001178555620002f0565b82800160010185558215620002f0579182015b82811115620002ef578251825591602001919060010190620002d2565b5b509050620002ff919062000303565b5090565b5b808211156200031e57600081600090555060010162000304565b5090565b600060028204905060018216806200033b57607f821691505b6020821081141562000352576200035162000358565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613dd180620003976000396000f3fe6080604052600436106101e75760003560e01c80638074be9811610102578063c87b56dd11610095578063e5187f4311610064578063e5187f43146106cf578063e985e9c5146106f8578063f23a6e6114610735578063f2fde38b14610772576101ee565b8063c87b56dd14610603578063ca5a40d714610640578063d5c7265c1461067d578063dea8b396146106a6576101ee565b8063a0caa5bb116100d1578063a0caa5bb1461054b578063a22cb46514610574578063b88d4fde1461059d578063bc197c81146105c6576101ee565b80638074be98146104b55780638456cb59146104de5780638da5cb5b146104f557806395d89b4114610520576101ee565b80633f4ba83a1161017a578063676f0ec811610149578063676f0ec8146103fb57806370a0823114610424578063715018a614610461578063732ad39714610478576101ee565b80633f4ba83a1461035357806342842e0e1461036a5780635c975abb146103935780636352211e146103be576101ee565b8063095ea7b3116101b6578063095ea7b3146102c157806323b872dd146102ea578063329fee6a146103135780633ccfd60b1461033c576101ee565b806301ffc9a7146101f357806302c6c7a71461023057806306fdde0314610259578063081812fc14610284576101ee565b366101ee57005b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190612be3565b61079b565b60405161022791906131e9565b60405180910390f35b34801561023c57600080fd5b5061025760048036038101906102529190612829565b6107ad565b005b34801561026557600080fd5b5061026e6107f9565b60405161027b919061321f565b60405180910390f35b34801561029057600080fd5b506102ab60048036038101906102a69190612c86565b61088b565b6040516102b8919061312a565b60405180910390f35b3480156102cd57600080fd5b506102e860048036038101906102e39190612b22565b6108d1565b005b3480156102f657600080fd5b50610311600480360381019061030c9190612972565b6109e9565b005b34801561031f57600080fd5b5061033a60048036038101906103359190612c86565b610a49565b005b34801561034857600080fd5b50610351610ae8565b005b34801561035f57600080fd5b50610368610b62565b005b34801561037657600080fd5b50610391600480360381019061038c9190612972565b610b7c565b005b34801561039f57600080fd5b506103a8610b9c565b6040516103b591906131e9565b60405180910390f35b3480156103ca57600080fd5b506103e560048036038101906103e09190612c86565b610bb3565b6040516103f2919061312a565b60405180910390f35b34801561040757600080fd5b50610422600480360381019061041d9190612c86565b610c65565b005b34801561043057600080fd5b5061044b60048036038101906104469190612829565b610c7b565b60405161045891906134e1565b60405180910390f35b34801561046d57600080fd5b50610476610d33565b005b34801561048457600080fd5b5061049f600480360381019061049a9190612829565b610d47565b6040516104ac91906131e9565b60405180910390f35b3480156104c157600080fd5b506104dc60048036038101906104d79190612cb3565b610d9d565b005b3480156104ea57600080fd5b506104f3610db3565b005b34801561050157600080fd5b5061050a610dcd565b604051610517919061312a565b60405180910390f35b34801561052c57600080fd5b50610535610df7565b604051610542919061321f565b60405180910390f35b34801561055757600080fd5b50610572600480360381019061056d9190612b62565b610e89565b005b34801561058057600080fd5b5061059b60048036038101906105969190612ae2565b610fc8565b005b3480156105a957600080fd5b506105c460048036038101906105bf91906129c5565b610fde565b005b3480156105d257600080fd5b506105ed60048036038101906105e89190612896565b611040565b6040516105fa9190613204565b60405180910390f35b34801561060f57600080fd5b5061062a60048036038101906106259190612c86565b611201565b604051610637919061321f565b60405180910390f35b34801561064c57600080fd5b5061066760048036038101906106629190612c86565b6112ba565b60405161067491906131e9565b60405180910390f35b34801561068957600080fd5b506106a4600480360381019061069f9190612829565b6112e4565b005b3480156106b257600080fd5b506106cd60048036038101906106c89190612cf3565b611347565b005b3480156106db57600080fd5b506106f660048036038101906106f19190612829565b611458565b005b34801561070457600080fd5b5061071f600480360381019061071a9190612856565b6114a4565b60405161072c91906131e9565b60405180910390f35b34801561074157600080fd5b5061075c60048036038101906107579190612a48565b611538565b6040516107699190613204565b60405180910390f35b34801561077e57600080fd5b5061079960048036038101906107949190612829565b6116f9565b005b60006107a68261177d565b9050919050565b6107b56117f7565b80600860016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000805461080890613718565b80601f016020809104026020016040519081016040528092919081815260200182805461083490613718565b80156108815780601f1061085657610100808354040283529160200191610881565b820191906000526020600020905b81548152906001019060200180831161086457829003601f168201915b5050505050905090565b600061089682611875565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108dc82610bb3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561094d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094490613441565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661096c6118c0565b73ffffffffffffffffffffffffffffffffffffffff16148061099b575061099a816109956118c0565b6114a4565b5b6109da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d1906133a1565b60405180910390fd5b6109e483836118c8565b505050565b6109fa6109f46118c0565b82611981565b610a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3090613481565b60405180910390fd5b610a44838383611a16565b505050565b610a516117f7565b600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a30338460016040518563ffffffff1660e01b8152600401610ab39493929190613191565b600060405180830381600087803b158015610acd57600080fd5b505af1158015610ae1573d6000803e3d6000fd5b5050505050565b610af06117f7565b610af8610dcd565b73ffffffffffffffffffffffffffffffffffffffff1647604051610b1b90613115565b60006040518083038185875af1925050503d8060008114610b58576040519150601f19603f3d011682016040523d82523d6000602084013e610b5d565b606091505b505050565b610b6a6117f7565b610b72611c7d565b610b7a611cc6565b565b610b9783838360405180602001604052806000815250610fde565b505050565b6000600860009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5390613421565b60405180910390fd5b80915050919050565b610c6d6117f7565b610c78303383610b7c565b50565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610cec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce390613341565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d3b6117f7565b610d456000611d29565b565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610da56117f7565b610daf8183611def565b5050565b610dbb6117f7565b610dc3611e0d565b610dcb611e57565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610e0690613718565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3290613718565b8015610e7f5780601f10610e5457610100808354040283529160200191610e7f565b820191906000526020600020905b815481529060010190602001808311610e6257829003601f168201915b5050505050905090565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610f135750610ee4610dcd565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4990613461565b60405180910390fd5b818190508484905014610f6457600080fd5b60005b84849050811015610fc157610fae858583818110610f8857610f87613822565b5b90506020020135848484818110610fa257610fa1613822565b5b90506020020135611347565b8080610fb99061377b565b915050610f67565b5050505050565b610fda610fd36118c0565b8383611eba565b5050565b610fef610fe96118c0565b83611981565b61102e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102590613481565b60405180910390fd5b61103a84848484612027565b50505050565b6000600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c990613361565b60405180910390fd5b6110da610b9c565b1561111a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611111906134c1565b60405180910390fd5b60005b878790508110156111ea57600a600089898481811061113f5761113e613822565b5b90506020020135815260200190815260200160002060009054906101000a900460ff166111a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119890613401565b60405180910390fd5b6111d78a600b60008b8b868181106111bc576111bb613822565b5b90506020020135815260200190815260200160002054611def565b80806111e29061377b565b91505061111d565b5063bc197c8160e01b905098975050505050505050565b6060600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b815260040161125e91906134e1565b60006040518083038186803b15801561127657600080fd5b505afa15801561128a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906112b39190612c3d565b9050919050565b6000600a600083815260200190815260200160002060009054906101000a900460ff169050919050565b6112ec6117f7565b6001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806113d157506113a2610dcd565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140790613461565b60405180910390fd5b6001600a600084815260200190815260200160002060006101000a81548160ff02191690831515021790555080600b6000848152602001908152602001600020819055505050565b6114606117f7565b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600060026007541415611580576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611577906134a1565b60405180910390fd5b6002600781905550600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160f90613381565b60405180910390fd5b600a600086815260200190815260200160002060009054906101000a900460ff16611678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166f90613401565b60405180910390fd5b611680610b9c565b156116c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b7906134c1565b60405180910390fd5b6116dd86600b600088815260200190815260200160002054611def565b63f23a6e6160e01b905060016007819055509695505050505050565b6117016117f7565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176890613281565b60405180910390fd5b61177a81611d29565b50565b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806117f057506117ef82612083565b5b9050919050565b6117ff6118c0565b73ffffffffffffffffffffffffffffffffffffffff1661181d610dcd565b73ffffffffffffffffffffffffffffffffffffffff1614611873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186a906133e1565b60405180910390fd5b565b61187e81612165565b6118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b490613421565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661193b83610bb3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061198d83610bb3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806119cf57506119ce81856114a4565b5b80611a0d57508373ffffffffffffffffffffffffffffffffffffffff166119f58461088b565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611a3682610bb3565b73ffffffffffffffffffffffffffffffffffffffff1614611a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a83906132a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af3906132e1565b60405180910390fd5b611b078383836121d1565b611b126000826118c8565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b62919061361c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bb991906135c6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611c788383836121d6565b505050565b611c85610b9c565b611cc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbb90613241565b60405180910390fd5b565b611cce611c7d565b6000600860006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611d126118c0565b604051611d1f919061312a565b60405180910390a1565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611e098282604051806020016040528060008152506121db565b5050565b611e15610b9c565b15611e55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4c90613321565b60405180910390fd5b565b611e5f611e0d565b6001600860006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611ea36118c0565b604051611eb0919061312a565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2090613301565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161201a91906131e9565b60405180910390a3505050565b612032848484611a16565b61203e84848484612236565b61207d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207490613261565b60405180910390fd5b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061214e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061215e575061215d826123cd565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b505050565b6121e58383612437565b6121f26000848484612236565b612231576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222890613261565b60405180910390fd5b505050565b60006122578473ffffffffffffffffffffffffffffffffffffffff16612611565b156123c0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026122806118c0565b8786866040518563ffffffff1660e01b81526004016122a29493929190613145565b602060405180830381600087803b1580156122bc57600080fd5b505af19250505080156122ed57506040513d601f19601f820116820180604052508101906122ea9190612c10565b60015b612370573d806000811461231d576040519150601f19603f3d011682016040523d82523d6000602084013e612322565b606091505b50600081511415612368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235f90613261565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506123c5565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249e906133c1565b60405180910390fd5b6124b081612165565b156124f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e7906132c1565b60405180910390fd5b6124fc600083836121d1565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461254c91906135c6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461260d600083836121d6565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600061264761264284613521565b6134fc565b9050828152602081018484840111156126635761266261388f565b5b61266e8482856136d6565b509392505050565b600061268961268484613552565b6134fc565b9050828152602081018484840111156126a5576126a461388f565b5b6126b08482856136e5565b509392505050565b6000813590506126c781613d3f565b92915050565b60008083601f8401126126e3576126e2613885565b5b8235905067ffffffffffffffff811115612700576126ff613880565b5b60208301915083602082028301111561271c5761271b61388a565b5b9250929050565b60008135905061273281613d56565b92915050565b60008135905061274781613d6d565b92915050565b60008151905061275c81613d6d565b92915050565b60008083601f84011261277857612777613885565b5b8235905067ffffffffffffffff81111561279557612794613880565b5b6020830191508360018202830111156127b1576127b061388a565b5b9250929050565b600082601f8301126127cd576127cc613885565b5b81356127dd848260208601612634565b91505092915050565b600082601f8301126127fb576127fa613885565b5b815161280b848260208601612676565b91505092915050565b60008135905061282381613d84565b92915050565b60006020828403121561283f5761283e613899565b5b600061284d848285016126b8565b91505092915050565b6000806040838503121561286d5761286c613899565b5b600061287b858286016126b8565b925050602061288c858286016126b8565b9150509250929050565b60008060008060008060008060a0898b0312156128b6576128b5613899565b5b60006128c48b828c016126b8565b98505060206128d58b828c016126b8565b975050604089013567ffffffffffffffff8111156128f6576128f5613894565b5b6129028b828c016126cd565b9650965050606089013567ffffffffffffffff81111561292557612924613894565b5b6129318b828c016126cd565b9450945050608089013567ffffffffffffffff81111561295457612953613894565b5b6129608b828c01612762565b92509250509295985092959890939650565b60008060006060848603121561298b5761298a613899565b5b6000612999868287016126b8565b93505060206129aa868287016126b8565b92505060406129bb86828701612814565b9150509250925092565b600080600080608085870312156129df576129de613899565b5b60006129ed878288016126b8565b94505060206129fe878288016126b8565b9350506040612a0f87828801612814565b925050606085013567ffffffffffffffff811115612a3057612a2f613894565b5b612a3c878288016127b8565b91505092959194509250565b60008060008060008060a08789031215612a6557612a64613899565b5b6000612a7389828a016126b8565b9650506020612a8489828a016126b8565b9550506040612a9589828a01612814565b9450506060612aa689828a01612814565b935050608087013567ffffffffffffffff811115612ac757612ac6613894565b5b612ad389828a01612762565b92509250509295509295509295565b60008060408385031215612af957612af8613899565b5b6000612b07858286016126b8565b9250506020612b1885828601612723565b9150509250929050565b60008060408385031215612b3957612b38613899565b5b6000612b47858286016126b8565b9250506020612b5885828601612814565b9150509250929050565b60008060008060408587031215612b7c57612b7b613899565b5b600085013567ffffffffffffffff811115612b9a57612b99613894565b5b612ba6878288016126cd565b9450945050602085013567ffffffffffffffff811115612bc957612bc8613894565b5b612bd5878288016126cd565b925092505092959194509250565b600060208284031215612bf957612bf8613899565b5b6000612c0784828501612738565b91505092915050565b600060208284031215612c2657612c25613899565b5b6000612c348482850161274d565b91505092915050565b600060208284031215612c5357612c52613899565b5b600082015167ffffffffffffffff811115612c7157612c70613894565b5b612c7d848285016127e6565b91505092915050565b600060208284031215612c9c57612c9b613899565b5b6000612caa84828501612814565b91505092915050565b60008060408385031215612cca57612cc9613899565b5b6000612cd885828601612814565b9250506020612ce9858286016126b8565b9150509250929050565b60008060408385031215612d0a57612d09613899565b5b6000612d1885828601612814565b9250506020612d2985828601612814565b9150509250929050565b612d3c81613650565b82525050565b612d4b81613662565b82525050565b612d5a8161366e565b82525050565b6000612d6b82613583565b612d758185613599565b9350612d858185602086016136e5565b612d8e8161389e565b840191505092915050565b612da2816136c4565b82525050565b6000612db38261358e565b612dbd81856135b5565b9350612dcd8185602086016136e5565b612dd68161389e565b840191505092915050565b6000612dee6014836135b5565b9150612df9826138af565b602082019050919050565b6000612e116032836135b5565b9150612e1c826138d8565b604082019050919050565b6000612e346026836135b5565b9150612e3f82613927565b604082019050919050565b6000612e576025836135b5565b9150612e6282613976565b604082019050919050565b6000612e7a601c836135b5565b9150612e85826139c5565b602082019050919050565b6000612e9d6024836135b5565b9150612ea8826139ee565b604082019050919050565b6000612ec06019836135b5565b9150612ecb82613a3d565b602082019050919050565b6000612ee36010836135b5565b9150612eee82613a66565b602082019050919050565b6000612f066029836135b5565b9150612f1182613a8f565b604082019050919050565b6000612f29600f836135b5565b9150612f3482613ade565b602082019050919050565b6000612f4c600f836135b5565b9150612f5782613b07565b602082019050919050565b6000612f6f603e836135b5565b9150612f7a82613b30565b604082019050919050565b6000612f926020836135b5565b9150612f9d82613b7f565b602082019050919050565b6000612fb56020836135b5565b9150612fc082613ba8565b602082019050919050565b6000612fd86010836135b5565b9150612fe382613bd1565b602082019050919050565b6000612ffb6018836135b5565b915061300682613bfa565b602082019050919050565b600061301e6021836135b5565b915061302982613c23565b604082019050919050565b6000613041600a836135b5565b915061304c82613c72565b602082019050919050565b6000613064600083613599565b915061306f82613c9b565b600082019050919050565b60006130876000836135aa565b915061309282613c9b565b600082019050919050565b60006130aa602e836135b5565b91506130b582613c9e565b604082019050919050565b60006130cd601f836135b5565b91506130d882613ced565b602082019050919050565b60006130f06006836135b5565b91506130fb82613d16565b602082019050919050565b61310f816136ba565b82525050565b60006131208261307a565b9150819050919050565b600060208201905061313f6000830184612d33565b92915050565b600060808201905061315a6000830187612d33565b6131676020830186612d33565b6131746040830185613106565b81810360608301526131868184612d60565b905095945050505050565b600060a0820190506131a66000830187612d33565b6131b36020830186612d33565b6131c06040830185613106565b6131cd6060830184612d99565b81810360808301526131de81613057565b905095945050505050565b60006020820190506131fe6000830184612d42565b92915050565b60006020820190506132196000830184612d51565b92915050565b600060208201905081810360008301526132398184612da8565b905092915050565b6000602082019050818103600083015261325a81612de1565b9050919050565b6000602082019050818103600083015261327a81612e04565b9050919050565b6000602082019050818103600083015261329a81612e27565b9050919050565b600060208201905081810360008301526132ba81612e4a565b9050919050565b600060208201905081810360008301526132da81612e6d565b9050919050565b600060208201905081810360008301526132fa81612e90565b9050919050565b6000602082019050818103600083015261331a81612eb3565b9050919050565b6000602082019050818103600083015261333a81612ed6565b9050919050565b6000602082019050818103600083015261335a81612ef9565b9050919050565b6000602082019050818103600083015261337a81612f1c565b9050919050565b6000602082019050818103600083015261339a81612f3f565b9050919050565b600060208201905081810360008301526133ba81612f62565b9050919050565b600060208201905081810360008301526133da81612f85565b9050919050565b600060208201905081810360008301526133fa81612fa8565b9050919050565b6000602082019050818103600083015261341a81612fcb565b9050919050565b6000602082019050818103600083015261343a81612fee565b9050919050565b6000602082019050818103600083015261345a81613011565b9050919050565b6000602082019050818103600083015261347a81613034565b9050919050565b6000602082019050818103600083015261349a8161309d565b9050919050565b600060208201905081810360008301526134ba816130c0565b9050919050565b600060208201905081810360008301526134da816130e3565b9050919050565b60006020820190506134f66000830184613106565b92915050565b6000613506613517565b9050613512828261374a565b919050565b6000604051905090565b600067ffffffffffffffff82111561353c5761353b613851565b5b6135458261389e565b9050602081019050919050565b600067ffffffffffffffff82111561356d5761356c613851565b5b6135768261389e565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006135d1826136ba565b91506135dc836136ba565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613611576136106137c4565b5b828201905092915050565b6000613627826136ba565b9150613632836136ba565b925082821015613645576136446137c4565b5b828203905092915050565b600061365b8261369a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006136cf826136ba565b9050919050565b82818337600083830152505050565b60005b838110156137035780820151818401526020810190506136e8565b83811115613712576000848401525b50505050565b6000600282049050600182168061373057607f821691505b60208210811415613744576137436137f3565b5b50919050565b6137538261389e565b810181811067ffffffffffffffff8211171561377257613771613851565b5b80604052505050565b6000613786826136ba565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137b9576137b86137c4565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f6e6f7420616e204f5320746f6b656e0000000000000000000000000000000000600082015250565b7f6e6f7420616e206f7320746f6b656e0000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f746f6b656e206e6f74206d617070656400000000000000000000000000000000600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f6e6f742061206672656e00000000000000000000000000000000000000000000600082015250565b50565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f7061757365640000000000000000000000000000000000000000000000000000600082015250565b613d4881613650565b8114613d5357600080fd5b50565b613d5f81613662565b8114613d6a57600080fd5b50565b613d768161366e565b8114613d8157600080fd5b50565b613d8d816136ba565b8114613d9857600080fd5b5056fea2646970667358221220d27aae360585d661941f03d39da36e2df34e3df1a6e45817e312e465b544334864736f6c63430008070033

Deployed Bytecode

0x6080604052600436106101e75760003560e01c80638074be9811610102578063c87b56dd11610095578063e5187f4311610064578063e5187f43146106cf578063e985e9c5146106f8578063f23a6e6114610735578063f2fde38b14610772576101ee565b8063c87b56dd14610603578063ca5a40d714610640578063d5c7265c1461067d578063dea8b396146106a6576101ee565b8063a0caa5bb116100d1578063a0caa5bb1461054b578063a22cb46514610574578063b88d4fde1461059d578063bc197c81146105c6576101ee565b80638074be98146104b55780638456cb59146104de5780638da5cb5b146104f557806395d89b4114610520576101ee565b80633f4ba83a1161017a578063676f0ec811610149578063676f0ec8146103fb57806370a0823114610424578063715018a614610461578063732ad39714610478576101ee565b80633f4ba83a1461035357806342842e0e1461036a5780635c975abb146103935780636352211e146103be576101ee565b8063095ea7b3116101b6578063095ea7b3146102c157806323b872dd146102ea578063329fee6a146103135780633ccfd60b1461033c576101ee565b806301ffc9a7146101f357806302c6c7a71461023057806306fdde0314610259578063081812fc14610284576101ee565b366101ee57005b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190612be3565b61079b565b60405161022791906131e9565b60405180910390f35b34801561023c57600080fd5b5061025760048036038101906102529190612829565b6107ad565b005b34801561026557600080fd5b5061026e6107f9565b60405161027b919061321f565b60405180910390f35b34801561029057600080fd5b506102ab60048036038101906102a69190612c86565b61088b565b6040516102b8919061312a565b60405180910390f35b3480156102cd57600080fd5b506102e860048036038101906102e39190612b22565b6108d1565b005b3480156102f657600080fd5b50610311600480360381019061030c9190612972565b6109e9565b005b34801561031f57600080fd5b5061033a60048036038101906103359190612c86565b610a49565b005b34801561034857600080fd5b50610351610ae8565b005b34801561035f57600080fd5b50610368610b62565b005b34801561037657600080fd5b50610391600480360381019061038c9190612972565b610b7c565b005b34801561039f57600080fd5b506103a8610b9c565b6040516103b591906131e9565b60405180910390f35b3480156103ca57600080fd5b506103e560048036038101906103e09190612c86565b610bb3565b6040516103f2919061312a565b60405180910390f35b34801561040757600080fd5b50610422600480360381019061041d9190612c86565b610c65565b005b34801561043057600080fd5b5061044b60048036038101906104469190612829565b610c7b565b60405161045891906134e1565b60405180910390f35b34801561046d57600080fd5b50610476610d33565b005b34801561048457600080fd5b5061049f600480360381019061049a9190612829565b610d47565b6040516104ac91906131e9565b60405180910390f35b3480156104c157600080fd5b506104dc60048036038101906104d79190612cb3565b610d9d565b005b3480156104ea57600080fd5b506104f3610db3565b005b34801561050157600080fd5b5061050a610dcd565b604051610517919061312a565b60405180910390f35b34801561052c57600080fd5b50610535610df7565b604051610542919061321f565b60405180910390f35b34801561055757600080fd5b50610572600480360381019061056d9190612b62565b610e89565b005b34801561058057600080fd5b5061059b60048036038101906105969190612ae2565b610fc8565b005b3480156105a957600080fd5b506105c460048036038101906105bf91906129c5565b610fde565b005b3480156105d257600080fd5b506105ed60048036038101906105e89190612896565b611040565b6040516105fa9190613204565b60405180910390f35b34801561060f57600080fd5b5061062a60048036038101906106259190612c86565b611201565b604051610637919061321f565b60405180910390f35b34801561064c57600080fd5b5061066760048036038101906106629190612c86565b6112ba565b60405161067491906131e9565b60405180910390f35b34801561068957600080fd5b506106a4600480360381019061069f9190612829565b6112e4565b005b3480156106b257600080fd5b506106cd60048036038101906106c89190612cf3565b611347565b005b3480156106db57600080fd5b506106f660048036038101906106f19190612829565b611458565b005b34801561070457600080fd5b5061071f600480360381019061071a9190612856565b6114a4565b60405161072c91906131e9565b60405180910390f35b34801561074157600080fd5b5061075c60048036038101906107579190612a48565b611538565b6040516107699190613204565b60405180910390f35b34801561077e57600080fd5b5061079960048036038101906107949190612829565b6116f9565b005b60006107a68261177d565b9050919050565b6107b56117f7565b80600860016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000805461080890613718565b80601f016020809104026020016040519081016040528092919081815260200182805461083490613718565b80156108815780601f1061085657610100808354040283529160200191610881565b820191906000526020600020905b81548152906001019060200180831161086457829003601f168201915b5050505050905090565b600061089682611875565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108dc82610bb3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561094d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094490613441565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661096c6118c0565b73ffffffffffffffffffffffffffffffffffffffff16148061099b575061099a816109956118c0565b6114a4565b5b6109da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d1906133a1565b60405180910390fd5b6109e483836118c8565b505050565b6109fa6109f46118c0565b82611981565b610a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3090613481565b60405180910390fd5b610a44838383611a16565b505050565b610a516117f7565b600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a30338460016040518563ffffffff1660e01b8152600401610ab39493929190613191565b600060405180830381600087803b158015610acd57600080fd5b505af1158015610ae1573d6000803e3d6000fd5b5050505050565b610af06117f7565b610af8610dcd565b73ffffffffffffffffffffffffffffffffffffffff1647604051610b1b90613115565b60006040518083038185875af1925050503d8060008114610b58576040519150601f19603f3d011682016040523d82523d6000602084013e610b5d565b606091505b505050565b610b6a6117f7565b610b72611c7d565b610b7a611cc6565b565b610b9783838360405180602001604052806000815250610fde565b505050565b6000600860009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5390613421565b60405180910390fd5b80915050919050565b610c6d6117f7565b610c78303383610b7c565b50565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610cec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce390613341565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d3b6117f7565b610d456000611d29565b565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610da56117f7565b610daf8183611def565b5050565b610dbb6117f7565b610dc3611e0d565b610dcb611e57565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610e0690613718565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3290613718565b8015610e7f5780601f10610e5457610100808354040283529160200191610e7f565b820191906000526020600020905b815481529060010190602001808311610e6257829003601f168201915b5050505050905090565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610f135750610ee4610dcd565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4990613461565b60405180910390fd5b818190508484905014610f6457600080fd5b60005b84849050811015610fc157610fae858583818110610f8857610f87613822565b5b90506020020135848484818110610fa257610fa1613822565b5b90506020020135611347565b8080610fb99061377b565b915050610f67565b5050505050565b610fda610fd36118c0565b8383611eba565b5050565b610fef610fe96118c0565b83611981565b61102e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102590613481565b60405180910390fd5b61103a84848484612027565b50505050565b6000600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c990613361565b60405180910390fd5b6110da610b9c565b1561111a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611111906134c1565b60405180910390fd5b60005b878790508110156111ea57600a600089898481811061113f5761113e613822565b5b90506020020135815260200190815260200160002060009054906101000a900460ff166111a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119890613401565b60405180910390fd5b6111d78a600b60008b8b868181106111bc576111bb613822565b5b90506020020135815260200190815260200160002054611def565b80806111e29061377b565b91505061111d565b5063bc197c8160e01b905098975050505050505050565b6060600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b815260040161125e91906134e1565b60006040518083038186803b15801561127657600080fd5b505afa15801561128a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906112b39190612c3d565b9050919050565b6000600a600083815260200190815260200160002060009054906101000a900460ff169050919050565b6112ec6117f7565b6001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806113d157506113a2610dcd565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140790613461565b60405180910390fd5b6001600a600084815260200190815260200160002060006101000a81548160ff02191690831515021790555080600b6000848152602001908152602001600020819055505050565b6114606117f7565b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600060026007541415611580576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611577906134a1565b60405180910390fd5b6002600781905550600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160f90613381565b60405180910390fd5b600a600086815260200190815260200160002060009054906101000a900460ff16611678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166f90613401565b60405180910390fd5b611680610b9c565b156116c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b7906134c1565b60405180910390fd5b6116dd86600b600088815260200190815260200160002054611def565b63f23a6e6160e01b905060016007819055509695505050505050565b6117016117f7565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176890613281565b60405180910390fd5b61177a81611d29565b50565b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806117f057506117ef82612083565b5b9050919050565b6117ff6118c0565b73ffffffffffffffffffffffffffffffffffffffff1661181d610dcd565b73ffffffffffffffffffffffffffffffffffffffff1614611873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186a906133e1565b60405180910390fd5b565b61187e81612165565b6118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b490613421565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661193b83610bb3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061198d83610bb3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806119cf57506119ce81856114a4565b5b80611a0d57508373ffffffffffffffffffffffffffffffffffffffff166119f58461088b565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611a3682610bb3565b73ffffffffffffffffffffffffffffffffffffffff1614611a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a83906132a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af3906132e1565b60405180910390fd5b611b078383836121d1565b611b126000826118c8565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b62919061361c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bb991906135c6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611c788383836121d6565b505050565b611c85610b9c565b611cc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbb90613241565b60405180910390fd5b565b611cce611c7d565b6000600860006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611d126118c0565b604051611d1f919061312a565b60405180910390a1565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611e098282604051806020016040528060008152506121db565b5050565b611e15610b9c565b15611e55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4c90613321565b60405180910390fd5b565b611e5f611e0d565b6001600860006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611ea36118c0565b604051611eb0919061312a565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2090613301565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161201a91906131e9565b60405180910390a3505050565b612032848484611a16565b61203e84848484612236565b61207d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207490613261565b60405180910390fd5b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061214e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061215e575061215d826123cd565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b505050565b6121e58383612437565b6121f26000848484612236565b612231576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222890613261565b60405180910390fd5b505050565b60006122578473ffffffffffffffffffffffffffffffffffffffff16612611565b156123c0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026122806118c0565b8786866040518563ffffffff1660e01b81526004016122a29493929190613145565b602060405180830381600087803b1580156122bc57600080fd5b505af19250505080156122ed57506040513d601f19601f820116820180604052508101906122ea9190612c10565b60015b612370573d806000811461231d576040519150601f19603f3d011682016040523d82523d6000602084013e612322565b606091505b50600081511415612368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235f90613261565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506123c5565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249e906133c1565b60405180910390fd5b6124b081612165565b156124f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e7906132c1565b60405180910390fd5b6124fc600083836121d1565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461254c91906135c6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461260d600083836121d6565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600061264761264284613521565b6134fc565b9050828152602081018484840111156126635761266261388f565b5b61266e8482856136d6565b509392505050565b600061268961268484613552565b6134fc565b9050828152602081018484840111156126a5576126a461388f565b5b6126b08482856136e5565b509392505050565b6000813590506126c781613d3f565b92915050565b60008083601f8401126126e3576126e2613885565b5b8235905067ffffffffffffffff811115612700576126ff613880565b5b60208301915083602082028301111561271c5761271b61388a565b5b9250929050565b60008135905061273281613d56565b92915050565b60008135905061274781613d6d565b92915050565b60008151905061275c81613d6d565b92915050565b60008083601f84011261277857612777613885565b5b8235905067ffffffffffffffff81111561279557612794613880565b5b6020830191508360018202830111156127b1576127b061388a565b5b9250929050565b600082601f8301126127cd576127cc613885565b5b81356127dd848260208601612634565b91505092915050565b600082601f8301126127fb576127fa613885565b5b815161280b848260208601612676565b91505092915050565b60008135905061282381613d84565b92915050565b60006020828403121561283f5761283e613899565b5b600061284d848285016126b8565b91505092915050565b6000806040838503121561286d5761286c613899565b5b600061287b858286016126b8565b925050602061288c858286016126b8565b9150509250929050565b60008060008060008060008060a0898b0312156128b6576128b5613899565b5b60006128c48b828c016126b8565b98505060206128d58b828c016126b8565b975050604089013567ffffffffffffffff8111156128f6576128f5613894565b5b6129028b828c016126cd565b9650965050606089013567ffffffffffffffff81111561292557612924613894565b5b6129318b828c016126cd565b9450945050608089013567ffffffffffffffff81111561295457612953613894565b5b6129608b828c01612762565b92509250509295985092959890939650565b60008060006060848603121561298b5761298a613899565b5b6000612999868287016126b8565b93505060206129aa868287016126b8565b92505060406129bb86828701612814565b9150509250925092565b600080600080608085870312156129df576129de613899565b5b60006129ed878288016126b8565b94505060206129fe878288016126b8565b9350506040612a0f87828801612814565b925050606085013567ffffffffffffffff811115612a3057612a2f613894565b5b612a3c878288016127b8565b91505092959194509250565b60008060008060008060a08789031215612a6557612a64613899565b5b6000612a7389828a016126b8565b9650506020612a8489828a016126b8565b9550506040612a9589828a01612814565b9450506060612aa689828a01612814565b935050608087013567ffffffffffffffff811115612ac757612ac6613894565b5b612ad389828a01612762565b92509250509295509295509295565b60008060408385031215612af957612af8613899565b5b6000612b07858286016126b8565b9250506020612b1885828601612723565b9150509250929050565b60008060408385031215612b3957612b38613899565b5b6000612b47858286016126b8565b9250506020612b5885828601612814565b9150509250929050565b60008060008060408587031215612b7c57612b7b613899565b5b600085013567ffffffffffffffff811115612b9a57612b99613894565b5b612ba6878288016126cd565b9450945050602085013567ffffffffffffffff811115612bc957612bc8613894565b5b612bd5878288016126cd565b925092505092959194509250565b600060208284031215612bf957612bf8613899565b5b6000612c0784828501612738565b91505092915050565b600060208284031215612c2657612c25613899565b5b6000612c348482850161274d565b91505092915050565b600060208284031215612c5357612c52613899565b5b600082015167ffffffffffffffff811115612c7157612c70613894565b5b612c7d848285016127e6565b91505092915050565b600060208284031215612c9c57612c9b613899565b5b6000612caa84828501612814565b91505092915050565b60008060408385031215612cca57612cc9613899565b5b6000612cd885828601612814565b9250506020612ce9858286016126b8565b9150509250929050565b60008060408385031215612d0a57612d09613899565b5b6000612d1885828601612814565b9250506020612d2985828601612814565b9150509250929050565b612d3c81613650565b82525050565b612d4b81613662565b82525050565b612d5a8161366e565b82525050565b6000612d6b82613583565b612d758185613599565b9350612d858185602086016136e5565b612d8e8161389e565b840191505092915050565b612da2816136c4565b82525050565b6000612db38261358e565b612dbd81856135b5565b9350612dcd8185602086016136e5565b612dd68161389e565b840191505092915050565b6000612dee6014836135b5565b9150612df9826138af565b602082019050919050565b6000612e116032836135b5565b9150612e1c826138d8565b604082019050919050565b6000612e346026836135b5565b9150612e3f82613927565b604082019050919050565b6000612e576025836135b5565b9150612e6282613976565b604082019050919050565b6000612e7a601c836135b5565b9150612e85826139c5565b602082019050919050565b6000612e9d6024836135b5565b9150612ea8826139ee565b604082019050919050565b6000612ec06019836135b5565b9150612ecb82613a3d565b602082019050919050565b6000612ee36010836135b5565b9150612eee82613a66565b602082019050919050565b6000612f066029836135b5565b9150612f1182613a8f565b604082019050919050565b6000612f29600f836135b5565b9150612f3482613ade565b602082019050919050565b6000612f4c600f836135b5565b9150612f5782613b07565b602082019050919050565b6000612f6f603e836135b5565b9150612f7a82613b30565b604082019050919050565b6000612f926020836135b5565b9150612f9d82613b7f565b602082019050919050565b6000612fb56020836135b5565b9150612fc082613ba8565b602082019050919050565b6000612fd86010836135b5565b9150612fe382613bd1565b602082019050919050565b6000612ffb6018836135b5565b915061300682613bfa565b602082019050919050565b600061301e6021836135b5565b915061302982613c23565b604082019050919050565b6000613041600a836135b5565b915061304c82613c72565b602082019050919050565b6000613064600083613599565b915061306f82613c9b565b600082019050919050565b60006130876000836135aa565b915061309282613c9b565b600082019050919050565b60006130aa602e836135b5565b91506130b582613c9e565b604082019050919050565b60006130cd601f836135b5565b91506130d882613ced565b602082019050919050565b60006130f06006836135b5565b91506130fb82613d16565b602082019050919050565b61310f816136ba565b82525050565b60006131208261307a565b9150819050919050565b600060208201905061313f6000830184612d33565b92915050565b600060808201905061315a6000830187612d33565b6131676020830186612d33565b6131746040830185613106565b81810360608301526131868184612d60565b905095945050505050565b600060a0820190506131a66000830187612d33565b6131b36020830186612d33565b6131c06040830185613106565b6131cd6060830184612d99565b81810360808301526131de81613057565b905095945050505050565b60006020820190506131fe6000830184612d42565b92915050565b60006020820190506132196000830184612d51565b92915050565b600060208201905081810360008301526132398184612da8565b905092915050565b6000602082019050818103600083015261325a81612de1565b9050919050565b6000602082019050818103600083015261327a81612e04565b9050919050565b6000602082019050818103600083015261329a81612e27565b9050919050565b600060208201905081810360008301526132ba81612e4a565b9050919050565b600060208201905081810360008301526132da81612e6d565b9050919050565b600060208201905081810360008301526132fa81612e90565b9050919050565b6000602082019050818103600083015261331a81612eb3565b9050919050565b6000602082019050818103600083015261333a81612ed6565b9050919050565b6000602082019050818103600083015261335a81612ef9565b9050919050565b6000602082019050818103600083015261337a81612f1c565b9050919050565b6000602082019050818103600083015261339a81612f3f565b9050919050565b600060208201905081810360008301526133ba81612f62565b9050919050565b600060208201905081810360008301526133da81612f85565b9050919050565b600060208201905081810360008301526133fa81612fa8565b9050919050565b6000602082019050818103600083015261341a81612fcb565b9050919050565b6000602082019050818103600083015261343a81612fee565b9050919050565b6000602082019050818103600083015261345a81613011565b9050919050565b6000602082019050818103600083015261347a81613034565b9050919050565b6000602082019050818103600083015261349a8161309d565b9050919050565b600060208201905081810360008301526134ba816130c0565b9050919050565b600060208201905081810360008301526134da816130e3565b9050919050565b60006020820190506134f66000830184613106565b92915050565b6000613506613517565b9050613512828261374a565b919050565b6000604051905090565b600067ffffffffffffffff82111561353c5761353b613851565b5b6135458261389e565b9050602081019050919050565b600067ffffffffffffffff82111561356d5761356c613851565b5b6135768261389e565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006135d1826136ba565b91506135dc836136ba565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613611576136106137c4565b5b828201905092915050565b6000613627826136ba565b9150613632836136ba565b925082821015613645576136446137c4565b5b828203905092915050565b600061365b8261369a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006136cf826136ba565b9050919050565b82818337600083830152505050565b60005b838110156137035780820151818401526020810190506136e8565b83811115613712576000848401525b50505050565b6000600282049050600182168061373057607f821691505b60208210811415613744576137436137f3565b5b50919050565b6137538261389e565b810181811067ffffffffffffffff8211171561377257613771613851565b5b80604052505050565b6000613786826136ba565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137b9576137b86137c4565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f6e6f7420616e204f5320746f6b656e0000000000000000000000000000000000600082015250565b7f6e6f7420616e206f7320746f6b656e0000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f746f6b656e206e6f74206d617070656400000000000000000000000000000000600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f6e6f742061206672656e00000000000000000000000000000000000000000000600082015250565b50565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f7061757365640000000000000000000000000000000000000000000000000000600082015250565b613d4881613650565b8114613d5357600080fd5b50565b613d5f81613662565b8114613d6a57600080fd5b50565b613d768161366e565b8114613d8157600080fd5b50565b613d8d816136ba565b8114613d9857600080fd5b5056fea2646970667358221220d27aae360585d661941f03d39da36e2df34e3df1a6e45817e312e465b544334864736f6c63430008070033

Deployed Bytecode Sourcemap

50845:3523:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51493:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54089:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35708:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37221:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36738:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37921:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53538:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53970:113;;;;;;;;;;;;;:::i;:::-;;53452:78;;;;;;;;;;;;;:::i;:::-;;38328:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32392:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35419:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53826:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35150:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49846:103;;;;;;;;;;;;;:::i;:::-;;52792:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53700:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53367:77;;;;;;;;;;;;;:::i;:::-;;49198:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35877:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52898:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37464:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38584:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52100:512;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51349:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52657:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54278:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53198:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54182:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37690:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51671:423;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50104:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51493:170;51595:4;51619:36;51643:11;51619:23;:36::i;:::-;51612:43;;51493:170;;;:::o;54089:87::-;49084:13;:11;:13::i;:::-;54165:3:::1;54160:2;;:8;;;;;;;;;;;;;;;;;;54089:87:::0;:::o;35708:100::-;35762:13;35795:5;35788:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35708:100;:::o;37221:171::-;37297:7;37317:23;37332:7;37317:14;:23::i;:::-;37360:15;:24;37376:7;37360:24;;;;;;;;;;;;;;;;;;;;;37353:31;;37221:171;;;:::o;36738:417::-;36819:13;36835:23;36850:7;36835:14;:23::i;:::-;36819:39;;36883:5;36877:11;;:2;:11;;;;36869:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;36977:5;36961:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;36986:37;37003:5;37010:12;:10;:12::i;:::-;36986:16;:37::i;:::-;36961:62;36939:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;37126:21;37135:2;37139:7;37126:8;:21::i;:::-;36808:347;36738:417;;:::o;37921:336::-;38116:41;38135:12;:10;:12::i;:::-;38149:7;38116:18;:41::i;:::-;38108:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;38221:28;38231:4;38237:2;38241:7;38221:9;:28::i;:::-;37921:336;;;:::o;53538:156::-;49084:13;:11;:13::i;:::-;53623:2:::1;;;;;;;;;;;53614:29;;;53652:4;53659:10;53671:7;53680:1;53614:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;53538:156:::0;:::o;53970:113::-;49084:13;:11;:13::i;:::-;54028:7:::1;:5;:7::i;:::-;54020:21;;54049;54020:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53970:113::o:0;53452:78::-;49084:13;:11;:13::i;:::-;32256:16:::1;:14;:16::i;:::-;53512:10:::2;:8;:10::i;:::-;53452:78::o:0;38328:185::-;38466:39;38483:4;38489:2;38493:7;38466:39;;;;;;;;;;;;:16;:39::i;:::-;38328:185;;;:::o;32392:86::-;32439:4;32463:7;;;;;;;;;;;32456:14;;32392:86;:::o;35419:222::-;35491:7;35511:13;35527:7;:16;35535:7;35527:16;;;;;;;;;;;;;;;;;;;;;35511:32;;35579:1;35562:19;;:5;:19;;;;35554:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;35628:5;35621:12;;;35419:222;;;:::o;53826:136::-;49084:13;:11;:13::i;:::-;53902:52:::1;53927:4;53934:10;53946:7;53902:16;:52::i;:::-;53826:136:::0;:::o;35150:207::-;35222:7;35267:1;35250:19;;:5;:19;;;;35242:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35333:9;:16;35343:5;35333:16;;;;;;;;;;;;;;;;35326:23;;35150:207;;;:::o;49846:103::-;49084:13;:11;:13::i;:::-;49911:30:::1;49938:1;49911:18;:30::i;:::-;49846:103::o:0;52792:98::-;52846:4;52870:5;:12;52876:5;52870:12;;;;;;;;;;;;;;;;;;;;;;;;;52863:19;;52792:98;;;:::o;53700:120::-;49084:13;:11;:13::i;:::-;53784:28:::1;53794:5;53801:10;53784:9;:28::i;:::-;53700:120:::0;;:::o;53367:77::-;49084:13;:11;:13::i;:::-;31997:19:::1;:17;:19::i;:::-;53428:8:::2;:6;:8::i;:::-;53367:77::o:0;49198:87::-;49244:7;49271:6;;;;;;;;;;;49264:13;;49198:87;:::o;35877:104::-;35933:13;35966:7;35959:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35877:104;:::o;52898:292::-;51145:5;:17;51151:10;51145:17;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;;51180:7;:5;:7::i;:::-;51166:21;;:10;:21;;;51145:42;51137:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;53041:11:::1;;:18;;53020:10;;:17;;:39;53012:48;;;::::0;::::1;;53075:9;53071:112;53090:10;;:17;;53086:1;:21;53071:112;;;53129:42;53141:10;;53152:1;53141:13;;;;;;;:::i;:::-;;;;;;;;53156:11;;53168:1;53156:14;;;;;;;:::i;:::-;;;;;;;;53129:11;:42::i;:::-;53109:3;;;;;:::i;:::-;;;;53071:112;;;;52898:292:::0;;;;:::o;37464:155::-;37559:52;37578:12;:10;:12::i;:::-;37592:8;37602;37559:18;:52::i;:::-;37464:155;;:::o;38584:323::-;38758:41;38777:12;:10;:12::i;:::-;38791:7;38758:18;:41::i;:::-;38750:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;38861:38;38875:4;38881:2;38885:7;38894:4;38861:13;:38::i;:::-;38584:323;;;;:::o;52100:512::-;52284:6;52325:2;;;;;;;;;;;52311:16;;:10;:16;;;52303:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;52367:8;:6;:8::i;:::-;52366:9;52358:28;;;;;;;;;;;;:::i;:::-;;;;;;;;;52401:6;52397:154;52417:3;;:10;;52413:1;:14;52397:154;;;52457:10;:18;52468:3;;52472:1;52468:6;;;;;;;:::i;:::-;;;;;;;;52457:18;;;;;;;;;;;;;;;;;;;;;52449:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;52511:28;52521:4;52527:3;:11;52531:3;;52535:1;52531:6;;;;;;;:::i;:::-;;;;;;;;52527:11;;;;;;;;;;;;52511:9;:28::i;:::-;52429:3;;;;;:::i;:::-;;;;52397:154;;;;52568:36;;;52561:43;;52100:512;;;;;;;;;;:::o;51349:136::-;51414:13;51456:2;;;;;;;;;;;51447:21;;;51469:7;51447:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51440:37;;51349:136;;;:::o;52657:129::-;52733:4;52757:10;:21;52768:9;52757:21;;;;;;;;;;;;;;;;;;;;;52750:28;;52657:129;;;:::o;54278:87::-;49084:13;:11;:13::i;:::-;54353:4:::1;54339:5;:11;54345:4;54339:11;;;;;;;;;;;;;;;;:18;;;;;;;;;;;;;;;;;;54278:87:::0;:::o;53198:161::-;51145:5;:17;51151:10;51145:17;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;;51180:7;:5;:7::i;:::-;51166:21;;:10;:21;;;51145:42;51137:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;53309:4:::1;53285:10;:21;53296:9;53285:21;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;53341:10;53324:3;:14;53328:9;53324:14;;;;;;;;;;;:27;;;;53198:161:::0;;:::o;54182:88::-;49084:13;:11;:13::i;:::-;54259:3:::1;54254:2;;:8;;;;;;;;;;;;;;;;;;54182:88:::0;:::o;37690:164::-;37787:4;37811:18;:25;37830:5;37811:25;;;;;;;;;;;;;;;:35;37837:8;37811:35;;;;;;;;;;;;;;;;;;;;;;;;;37804:42;;37690:164;;;;:::o;51671:423::-;51844:6;1812:1;2410:7;;:19;;2402:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1812:1;2543:7;:18;;;;51885:2:::1;;;;;;;;;;;51871:16;;:10;:16;;;51863:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;51926:10;:14;51937:2;51926:14;;;;;;;;;;;;;;;;;;;;;51918:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;51981:8;:6;:8::i;:::-;51980:9;51972:28;;;;;;;;;;;;:::i;:::-;;;;;;;;;52011:24;52021:4;52027:3;:7;52031:2;52027:7;;;;;;;;;;;;52011:9;:24::i;:::-;52055:31;;;52048:38;;1768:1:::0;2722:7;:22;;;;51671:423;;;;;;;;:::o;50104:201::-;49084:13;:11;:13::i;:::-;50213:1:::1;50193:22;;:8;:22;;;;50185:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;50269:28;50288:8;50269:18;:28::i;:::-;50104:201:::0;:::o;23909:223::-;24011:4;24050:34;24035:49;;;:11;:49;;;;:89;;;;24088:36;24112:11;24088:23;:36::i;:::-;24035:89;24028:96;;23909:223;;;:::o;49363:132::-;49438:12;:10;:12::i;:::-;49427:23;;:7;:5;:7::i;:::-;:23;;;49419:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49363:132::o;45196:135::-;45278:16;45286:7;45278;:16::i;:::-;45270:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;45196:135;:::o;30505:98::-;30558:7;30585:10;30578:17;;30505:98;:::o;44475:174::-;44577:2;44550:15;:24;44566:7;44550:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;44633:7;44629:2;44595:46;;44604:23;44619:7;44604:14;:23::i;:::-;44595:46;;;;;;;;;;;;44475:174;;:::o;40708:264::-;40801:4;40818:13;40834:23;40849:7;40834:14;:23::i;:::-;40818:39;;40887:5;40876:16;;:7;:16;;;:52;;;;40896:32;40913:5;40920:7;40896:16;:32::i;:::-;40876:52;:87;;;;40956:7;40932:31;;:20;40944:7;40932:11;:20::i;:::-;:31;;;40876:87;40868:96;;;40708:264;;;;:::o;43731:625::-;43890:4;43863:31;;:23;43878:7;43863:14;:23::i;:::-;:31;;;43855:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;43969:1;43955:16;;:2;:16;;;;43947:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;44025:39;44046:4;44052:2;44056:7;44025:20;:39::i;:::-;44129:29;44146:1;44150:7;44129:8;:29::i;:::-;44190:1;44171:9;:15;44181:4;44171:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;44219:1;44202:9;:13;44212:2;44202:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;44250:2;44231:7;:16;44239:7;44231:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;44289:7;44285:2;44270:27;;44279:4;44270:27;;;;;;;;;;;;44310:38;44330:4;44336:2;44340:7;44310:19;:38::i;:::-;43731:625;;;:::o;32736:108::-;32803:8;:6;:8::i;:::-;32795:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;32736:108::o;33247:120::-;32256:16;:14;:16::i;:::-;33316:5:::1;33306:7;;:15;;;;;;;;;;;;;;;;;;33337:22;33346:12;:10;:12::i;:::-;33337:22;;;;;;:::i;:::-;;;;;;;;33247:120::o:0;50465:191::-;50539:16;50558:6;;;;;;;;;;;50539:25;;50584:8;50575:6;;:17;;;;;;;;;;;;;;;;;;50639:8;50608:40;;50629:8;50608:40;;;;;;;;;;;;50528:128;50465:191;:::o;41314:110::-;41390:26;41400:2;41404:7;41390:26;;;;;;;;;;;;:9;:26::i;:::-;41314:110;;:::o;32551:108::-;32622:8;:6;:8::i;:::-;32621:9;32613:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;32551:108::o;32988:118::-;31997:19;:17;:19::i;:::-;33058:4:::1;33048:7;;:14;;;;;;;;;;;;;;;;;;33078:20;33085:12;:10;:12::i;:::-;33078:20;;;;;;:::i;:::-;;;;;;;;32988:118::o:0;44792:315::-;44947:8;44938:17;;:5;:17;;;;44930:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;45034:8;44996:18;:25;45015:5;44996:25;;;;;;;;;;;;;;;:35;45022:8;44996:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;45080:8;45058:41;;45073:5;45058:41;;;45090:8;45058:41;;;;;;:::i;:::-;;;;;;;;44792:315;;;:::o;39788:313::-;39944:28;39954:4;39960:2;39964:7;39944:9;:28::i;:::-;39991:47;40014:4;40020:2;40024:7;40033:4;39991:22;:47::i;:::-;39983:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;39788:313;;;;:::o;34781:305::-;34883:4;34935:25;34920:40;;;:11;:40;;;;:105;;;;34992:33;34977:48;;;:11;:48;;;;34920:105;:158;;;;35042:36;35066:11;35042:23;:36::i;:::-;34920:158;34900:178;;34781:305;;;:::o;40414:127::-;40479:4;40531:1;40503:30;;:7;:16;40511:7;40503:16;;;;;;;;;;;;;;;;;;;;;:30;;;;40496:37;;40414:127;;;:::o;47320:126::-;;;;:::o;47831:125::-;;;;:::o;41651:319::-;41780:18;41786:2;41790:7;41780:5;:18::i;:::-;41831:53;41862:1;41866:2;41870:7;41879:4;41831:22;:53::i;:::-;41809:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;41651:319;;;:::o;45895:853::-;46049:4;46070:15;:2;:13;;;:15::i;:::-;46066:675;;;46122:2;46106:36;;;46143:12;:10;:12::i;:::-;46157:4;46163:7;46172:4;46106:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;46102:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46364:1;46347:6;:13;:18;46343:328;;;46390:60;;;;;;;;;;:::i;:::-;;;;;;;;46343:328;46621:6;46615:13;46606:6;46602:2;46598:15;46591:38;46102:584;46238:41;;;46228:51;;;:6;:51;;;;46221:58;;;;;46066:675;46725:4;46718:11;;45895:853;;;;;;;:::o;23382:157::-;23467:4;23506:25;23491:40;;;:11;:40;;;;23484:47;;23382:157;;;:::o;42306:439::-;42400:1;42386:16;;:2;:16;;;;42378:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;42459:16;42467:7;42459;:16::i;:::-;42458:17;42450:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;42521:45;42550:1;42554:2;42558:7;42521:20;:45::i;:::-;42596:1;42579:9;:13;42589:2;42579:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;42627:2;42608:7;:16;42616:7;42608:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;42672:7;42668:2;42647:33;;42664:1;42647:33;;;;;;;;;;;;42693:44;42721:1;42725:2;42729:7;42693:19;:44::i;:::-;42306:439;;:::o;6489:326::-;6549:4;6806:1;6784:7;:19;;;:23;6777:30;;6489:326;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:421::-;512:5;537:66;553:49;595:6;553:49;:::i;:::-;537:66;:::i;:::-;528:75;;626:6;619:5;612:21;664:4;657:5;653:16;702:3;693:6;688:3;684:16;681:25;678:112;;;709:79;;:::i;:::-;678:112;799:39;831:6;826:3;821;799:39;:::i;:::-;518:326;423:421;;;;;:::o;850:139::-;896:5;934:6;921:20;912:29;;950:33;977:5;950:33;:::i;:::-;850:139;;;;:::o;1012:568::-;1085:8;1095:6;1145:3;1138:4;1130:6;1126:17;1122:27;1112:122;;1153:79;;:::i;:::-;1112:122;1266:6;1253:20;1243:30;;1296:18;1288:6;1285:30;1282:117;;;1318:79;;:::i;:::-;1282:117;1432:4;1424:6;1420:17;1408:29;;1486:3;1478:4;1470:6;1466:17;1456:8;1452:32;1449:41;1446:128;;;1493:79;;:::i;:::-;1446:128;1012:568;;;;;:::o;1586:133::-;1629:5;1667:6;1654:20;1645:29;;1683:30;1707:5;1683:30;:::i;:::-;1586:133;;;;:::o;1725:137::-;1770:5;1808:6;1795:20;1786:29;;1824:32;1850:5;1824:32;:::i;:::-;1725:137;;;;:::o;1868:141::-;1924:5;1955:6;1949:13;1940:22;;1971:32;1997:5;1971:32;:::i;:::-;1868:141;;;;:::o;2028:552::-;2085:8;2095:6;2145:3;2138:4;2130:6;2126:17;2122:27;2112:122;;2153:79;;:::i;:::-;2112:122;2266:6;2253:20;2243:30;;2296:18;2288:6;2285:30;2282:117;;;2318:79;;:::i;:::-;2282:117;2432:4;2424:6;2420:17;2408:29;;2486:3;2478:4;2470:6;2466:17;2456:8;2452:32;2449:41;2446:128;;;2493:79;;:::i;:::-;2446:128;2028:552;;;;;:::o;2599:338::-;2654:5;2703:3;2696:4;2688:6;2684:17;2680:27;2670:122;;2711:79;;:::i;:::-;2670:122;2828:6;2815:20;2853:78;2927:3;2919:6;2912:4;2904:6;2900:17;2853:78;:::i;:::-;2844:87;;2660:277;2599:338;;;;:::o;2957:355::-;3024:5;3073:3;3066:4;3058:6;3054:17;3050:27;3040:122;;3081:79;;:::i;:::-;3040:122;3191:6;3185:13;3216:90;3302:3;3294:6;3287:4;3279:6;3275:17;3216:90;:::i;:::-;3207:99;;3030:282;2957:355;;;;:::o;3318:139::-;3364:5;3402:6;3389:20;3380:29;;3418:33;3445:5;3418:33;:::i;:::-;3318:139;;;;:::o;3463:329::-;3522:6;3571:2;3559:9;3550:7;3546:23;3542:32;3539:119;;;3577:79;;:::i;:::-;3539:119;3697:1;3722:53;3767:7;3758:6;3747:9;3743:22;3722:53;:::i;:::-;3712:63;;3668:117;3463:329;;;;:::o;3798:474::-;3866:6;3874;3923:2;3911:9;3902:7;3898:23;3894:32;3891:119;;;3929:79;;:::i;:::-;3891:119;4049:1;4074:53;4119:7;4110:6;4099:9;4095:22;4074:53;:::i;:::-;4064:63;;4020:117;4176:2;4202:53;4247:7;4238:6;4227:9;4223:22;4202:53;:::i;:::-;4192:63;;4147:118;3798:474;;;;;:::o;4278:1569::-;4438:6;4446;4454;4462;4470;4478;4486;4494;4543:3;4531:9;4522:7;4518:23;4514:33;4511:120;;;4550:79;;:::i;:::-;4511:120;4670:1;4695:53;4740:7;4731:6;4720:9;4716:22;4695:53;:::i;:::-;4685:63;;4641:117;4797:2;4823:53;4868:7;4859:6;4848:9;4844:22;4823:53;:::i;:::-;4813:63;;4768:118;4953:2;4942:9;4938:18;4925:32;4984:18;4976:6;4973:30;4970:117;;;5006:79;;:::i;:::-;4970:117;5119:80;5191:7;5182:6;5171:9;5167:22;5119:80;:::i;:::-;5101:98;;;;4896:313;5276:2;5265:9;5261:18;5248:32;5307:18;5299:6;5296:30;5293:117;;;5329:79;;:::i;:::-;5293:117;5442:80;5514:7;5505:6;5494:9;5490:22;5442:80;:::i;:::-;5424:98;;;;5219:313;5599:3;5588:9;5584:19;5571:33;5631:18;5623:6;5620:30;5617:117;;;5653:79;;:::i;:::-;5617:117;5766:64;5822:7;5813:6;5802:9;5798:22;5766:64;:::i;:::-;5748:82;;;;5542:298;4278:1569;;;;;;;;;;;:::o;5853:619::-;5930:6;5938;5946;5995:2;5983:9;5974:7;5970:23;5966:32;5963:119;;;6001:79;;:::i;:::-;5963:119;6121:1;6146:53;6191:7;6182:6;6171:9;6167:22;6146:53;:::i;:::-;6136:63;;6092:117;6248:2;6274:53;6319:7;6310:6;6299:9;6295:22;6274:53;:::i;:::-;6264:63;;6219:118;6376:2;6402:53;6447:7;6438:6;6427:9;6423:22;6402:53;:::i;:::-;6392:63;;6347:118;5853:619;;;;;:::o;6478:943::-;6573:6;6581;6589;6597;6646:3;6634:9;6625:7;6621:23;6617:33;6614:120;;;6653:79;;:::i;:::-;6614:120;6773:1;6798:53;6843:7;6834:6;6823:9;6819:22;6798:53;:::i;:::-;6788:63;;6744:117;6900:2;6926:53;6971:7;6962:6;6951:9;6947:22;6926:53;:::i;:::-;6916:63;;6871:118;7028:2;7054:53;7099:7;7090:6;7079:9;7075:22;7054:53;:::i;:::-;7044:63;;6999:118;7184:2;7173:9;7169:18;7156:32;7215:18;7207:6;7204:30;7201:117;;;7237:79;;:::i;:::-;7201:117;7342:62;7396:7;7387:6;7376:9;7372:22;7342:62;:::i;:::-;7332:72;;7127:287;6478:943;;;;;;;:::o;7427:1109::-;7533:6;7541;7549;7557;7565;7573;7622:3;7610:9;7601:7;7597:23;7593:33;7590:120;;;7629:79;;:::i;:::-;7590:120;7749:1;7774:53;7819:7;7810:6;7799:9;7795:22;7774:53;:::i;:::-;7764:63;;7720:117;7876:2;7902:53;7947:7;7938:6;7927:9;7923:22;7902:53;:::i;:::-;7892:63;;7847:118;8004:2;8030:53;8075:7;8066:6;8055:9;8051:22;8030:53;:::i;:::-;8020:63;;7975:118;8132:2;8158:53;8203:7;8194:6;8183:9;8179:22;8158:53;:::i;:::-;8148:63;;8103:118;8288:3;8277:9;8273:19;8260:33;8320:18;8312:6;8309:30;8306:117;;;8342:79;;:::i;:::-;8306:117;8455:64;8511:7;8502:6;8491:9;8487:22;8455:64;:::i;:::-;8437:82;;;;8231:298;7427:1109;;;;;;;;:::o;8542:468::-;8607:6;8615;8664:2;8652:9;8643:7;8639:23;8635:32;8632:119;;;8670:79;;:::i;:::-;8632:119;8790:1;8815:53;8860:7;8851:6;8840:9;8836:22;8815:53;:::i;:::-;8805:63;;8761:117;8917:2;8943:50;8985:7;8976:6;8965:9;8961:22;8943:50;:::i;:::-;8933:60;;8888:115;8542:468;;;;;:::o;9016:474::-;9084:6;9092;9141:2;9129:9;9120:7;9116:23;9112:32;9109:119;;;9147:79;;:::i;:::-;9109:119;9267:1;9292:53;9337:7;9328:6;9317:9;9313:22;9292:53;:::i;:::-;9282:63;;9238:117;9394:2;9420:53;9465:7;9456:6;9445:9;9441:22;9420:53;:::i;:::-;9410:63;;9365:118;9016:474;;;;;:::o;9496:934::-;9618:6;9626;9634;9642;9691:2;9679:9;9670:7;9666:23;9662:32;9659:119;;;9697:79;;:::i;:::-;9659:119;9845:1;9834:9;9830:17;9817:31;9875:18;9867:6;9864:30;9861:117;;;9897:79;;:::i;:::-;9861:117;10010:80;10082:7;10073:6;10062:9;10058:22;10010:80;:::i;:::-;9992:98;;;;9788:312;10167:2;10156:9;10152:18;10139:32;10198:18;10190:6;10187:30;10184:117;;;10220:79;;:::i;:::-;10184:117;10333:80;10405:7;10396:6;10385:9;10381:22;10333:80;:::i;:::-;10315:98;;;;10110:313;9496:934;;;;;;;:::o;10436:327::-;10494:6;10543:2;10531:9;10522:7;10518:23;10514:32;10511:119;;;10549:79;;:::i;:::-;10511:119;10669:1;10694:52;10738:7;10729:6;10718:9;10714:22;10694:52;:::i;:::-;10684:62;;10640:116;10436:327;;;;:::o;10769:349::-;10838:6;10887:2;10875:9;10866:7;10862:23;10858:32;10855:119;;;10893:79;;:::i;:::-;10855:119;11013:1;11038:63;11093:7;11084:6;11073:9;11069:22;11038:63;:::i;:::-;11028:73;;10984:127;10769:349;;;;:::o;11124:524::-;11204:6;11253:2;11241:9;11232:7;11228:23;11224:32;11221:119;;;11259:79;;:::i;:::-;11221:119;11400:1;11389:9;11385:17;11379:24;11430:18;11422:6;11419:30;11416:117;;;11452:79;;:::i;:::-;11416:117;11557:74;11623:7;11614:6;11603:9;11599:22;11557:74;:::i;:::-;11547:84;;11350:291;11124:524;;;;:::o;11654:329::-;11713:6;11762:2;11750:9;11741:7;11737:23;11733:32;11730:119;;;11768:79;;:::i;:::-;11730:119;11888:1;11913:53;11958:7;11949:6;11938:9;11934:22;11913:53;:::i;:::-;11903:63;;11859:117;11654:329;;;;:::o;11989:474::-;12057:6;12065;12114:2;12102:9;12093:7;12089:23;12085:32;12082:119;;;12120:79;;:::i;:::-;12082:119;12240:1;12265:53;12310:7;12301:6;12290:9;12286:22;12265:53;:::i;:::-;12255:63;;12211:117;12367:2;12393:53;12438:7;12429:6;12418:9;12414:22;12393:53;:::i;:::-;12383:63;;12338:118;11989:474;;;;;:::o;12469:::-;12537:6;12545;12594:2;12582:9;12573:7;12569:23;12565:32;12562:119;;;12600:79;;:::i;:::-;12562:119;12720:1;12745:53;12790:7;12781:6;12770:9;12766:22;12745:53;:::i;:::-;12735:63;;12691:117;12847:2;12873:53;12918:7;12909:6;12898:9;12894:22;12873:53;:::i;:::-;12863:63;;12818:118;12469:474;;;;;:::o;12949:118::-;13036:24;13054:5;13036:24;:::i;:::-;13031:3;13024:37;12949:118;;:::o;13073:109::-;13154:21;13169:5;13154:21;:::i;:::-;13149:3;13142:34;13073:109;;:::o;13188:115::-;13273:23;13290:5;13273:23;:::i;:::-;13268:3;13261:36;13188:115;;:::o;13309:360::-;13395:3;13423:38;13455:5;13423:38;:::i;:::-;13477:70;13540:6;13535:3;13477:70;:::i;:::-;13470:77;;13556:52;13601:6;13596:3;13589:4;13582:5;13578:16;13556:52;:::i;:::-;13633:29;13655:6;13633:29;:::i;:::-;13628:3;13624:39;13617:46;;13399:270;13309:360;;;;:::o;13675:147::-;13770:45;13809:5;13770:45;:::i;:::-;13765:3;13758:58;13675:147;;:::o;13828:364::-;13916:3;13944:39;13977:5;13944:39;:::i;:::-;13999:71;14063:6;14058:3;13999:71;:::i;:::-;13992:78;;14079:52;14124:6;14119:3;14112:4;14105:5;14101:16;14079:52;:::i;:::-;14156:29;14178:6;14156:29;:::i;:::-;14151:3;14147:39;14140:46;;13920:272;13828:364;;;;:::o;14198:366::-;14340:3;14361:67;14425:2;14420:3;14361:67;:::i;:::-;14354:74;;14437:93;14526:3;14437:93;:::i;:::-;14555:2;14550:3;14546:12;14539:19;;14198:366;;;:::o;14570:::-;14712:3;14733:67;14797:2;14792:3;14733:67;:::i;:::-;14726:74;;14809:93;14898:3;14809:93;:::i;:::-;14927:2;14922:3;14918:12;14911:19;;14570:366;;;:::o;14942:::-;15084:3;15105:67;15169:2;15164:3;15105:67;:::i;:::-;15098:74;;15181:93;15270:3;15181:93;:::i;:::-;15299:2;15294:3;15290:12;15283:19;;14942:366;;;:::o;15314:::-;15456:3;15477:67;15541:2;15536:3;15477:67;:::i;:::-;15470:74;;15553:93;15642:3;15553:93;:::i;:::-;15671:2;15666:3;15662:12;15655:19;;15314:366;;;:::o;15686:::-;15828:3;15849:67;15913:2;15908:3;15849:67;:::i;:::-;15842:74;;15925:93;16014:3;15925:93;:::i;:::-;16043:2;16038:3;16034:12;16027:19;;15686:366;;;:::o;16058:::-;16200:3;16221:67;16285:2;16280:3;16221:67;:::i;:::-;16214:74;;16297:93;16386:3;16297:93;:::i;:::-;16415:2;16410:3;16406:12;16399:19;;16058:366;;;:::o;16430:::-;16572:3;16593:67;16657:2;16652:3;16593:67;:::i;:::-;16586:74;;16669:93;16758:3;16669:93;:::i;:::-;16787:2;16782:3;16778:12;16771:19;;16430:366;;;:::o;16802:::-;16944:3;16965:67;17029:2;17024:3;16965:67;:::i;:::-;16958:74;;17041:93;17130:3;17041:93;:::i;:::-;17159:2;17154:3;17150:12;17143:19;;16802:366;;;:::o;17174:::-;17316:3;17337:67;17401:2;17396:3;17337:67;:::i;:::-;17330:74;;17413:93;17502:3;17413:93;:::i;:::-;17531:2;17526:3;17522:12;17515:19;;17174:366;;;:::o;17546:::-;17688:3;17709:67;17773:2;17768:3;17709:67;:::i;:::-;17702:74;;17785:93;17874:3;17785:93;:::i;:::-;17903:2;17898:3;17894:12;17887:19;;17546:366;;;:::o;17918:::-;18060:3;18081:67;18145:2;18140:3;18081:67;:::i;:::-;18074:74;;18157:93;18246:3;18157:93;:::i;:::-;18275:2;18270:3;18266:12;18259:19;;17918:366;;;:::o;18290:::-;18432:3;18453:67;18517:2;18512:3;18453:67;:::i;:::-;18446:74;;18529:93;18618:3;18529:93;:::i;:::-;18647:2;18642:3;18638:12;18631:19;;18290:366;;;:::o;18662:::-;18804:3;18825:67;18889:2;18884:3;18825:67;:::i;:::-;18818:74;;18901:93;18990:3;18901:93;:::i;:::-;19019:2;19014:3;19010:12;19003:19;;18662:366;;;:::o;19034:::-;19176:3;19197:67;19261:2;19256:3;19197:67;:::i;:::-;19190:74;;19273:93;19362:3;19273:93;:::i;:::-;19391:2;19386:3;19382:12;19375:19;;19034:366;;;:::o;19406:::-;19548:3;19569:67;19633:2;19628:3;19569:67;:::i;:::-;19562:74;;19645:93;19734:3;19645:93;:::i;:::-;19763:2;19758:3;19754:12;19747:19;;19406:366;;;:::o;19778:::-;19920:3;19941:67;20005:2;20000:3;19941:67;:::i;:::-;19934:74;;20017:93;20106:3;20017:93;:::i;:::-;20135:2;20130:3;20126:12;20119:19;;19778:366;;;:::o;20150:::-;20292:3;20313:67;20377:2;20372:3;20313:67;:::i;:::-;20306:74;;20389:93;20478:3;20389:93;:::i;:::-;20507:2;20502:3;20498:12;20491:19;;20150:366;;;:::o;20522:::-;20664:3;20685:67;20749:2;20744:3;20685:67;:::i;:::-;20678:74;;20761:93;20850:3;20761:93;:::i;:::-;20879:2;20874:3;20870:12;20863:19;;20522:366;;;:::o;20894:362::-;21035:3;21056:65;21119:1;21114:3;21056:65;:::i;:::-;21049:72;;21130:93;21219:3;21130:93;:::i;:::-;21248:1;21243:3;21239:11;21232:18;;20894:362;;;:::o;21262:398::-;21421:3;21442:83;21523:1;21518:3;21442:83;:::i;:::-;21435:90;;21534:93;21623:3;21534:93;:::i;:::-;21652:1;21647:3;21643:11;21636:18;;21262:398;;;:::o;21666:366::-;21808:3;21829:67;21893:2;21888:3;21829:67;:::i;:::-;21822:74;;21905:93;21994:3;21905:93;:::i;:::-;22023:2;22018:3;22014:12;22007:19;;21666:366;;;:::o;22038:::-;22180:3;22201:67;22265:2;22260:3;22201:67;:::i;:::-;22194:74;;22277:93;22366:3;22277:93;:::i;:::-;22395:2;22390:3;22386:12;22379:19;;22038:366;;;:::o;22410:365::-;22552:3;22573:66;22637:1;22632:3;22573:66;:::i;:::-;22566:73;;22648:93;22737:3;22648:93;:::i;:::-;22766:2;22761:3;22757:12;22750:19;;22410:365;;;:::o;22781:118::-;22868:24;22886:5;22868:24;:::i;:::-;22863:3;22856:37;22781:118;;:::o;22905:379::-;23089:3;23111:147;23254:3;23111:147;:::i;:::-;23104:154;;23275:3;23268:10;;22905:379;;;:::o;23290:222::-;23383:4;23421:2;23410:9;23406:18;23398:26;;23434:71;23502:1;23491:9;23487:17;23478:6;23434:71;:::i;:::-;23290:222;;;;:::o;23518:640::-;23713:4;23751:3;23740:9;23736:19;23728:27;;23765:71;23833:1;23822:9;23818:17;23809:6;23765:71;:::i;:::-;23846:72;23914:2;23903:9;23899:18;23890:6;23846:72;:::i;:::-;23928;23996:2;23985:9;23981:18;23972:6;23928:72;:::i;:::-;24047:9;24041:4;24037:20;24032:2;24021:9;24017:18;24010:48;24075:76;24146:4;24137:6;24075:76;:::i;:::-;24067:84;;23518:640;;;;;;;:::o;24164:875::-;24449:4;24487:3;24476:9;24472:19;24464:27;;24501:71;24569:1;24558:9;24554:17;24545:6;24501:71;:::i;:::-;24582:72;24650:2;24639:9;24635:18;24626:6;24582:72;:::i;:::-;24664;24732:2;24721:9;24717:18;24708:6;24664:72;:::i;:::-;24746:80;24822:2;24811:9;24807:18;24798:6;24746:80;:::i;:::-;24874:9;24868:4;24864:20;24858:3;24847:9;24843:19;24836:49;24902:130;25027:4;24902:130;:::i;:::-;24894:138;;24164:875;;;;;;;:::o;25045:210::-;25132:4;25170:2;25159:9;25155:18;25147:26;;25183:65;25245:1;25234:9;25230:17;25221:6;25183:65;:::i;:::-;25045:210;;;;:::o;25261:218::-;25352:4;25390:2;25379:9;25375:18;25367:26;;25403:69;25469:1;25458:9;25454:17;25445:6;25403:69;:::i;:::-;25261:218;;;;:::o;25485:313::-;25598:4;25636:2;25625:9;25621:18;25613:26;;25685:9;25679:4;25675:20;25671:1;25660:9;25656:17;25649:47;25713:78;25786:4;25777:6;25713:78;:::i;:::-;25705:86;;25485:313;;;;:::o;25804:419::-;25970:4;26008:2;25997:9;25993:18;25985:26;;26057:9;26051:4;26047:20;26043:1;26032:9;26028:17;26021:47;26085:131;26211:4;26085:131;:::i;:::-;26077:139;;25804:419;;;:::o;26229:::-;26395:4;26433:2;26422:9;26418:18;26410:26;;26482:9;26476:4;26472:20;26468:1;26457:9;26453:17;26446:47;26510:131;26636:4;26510:131;:::i;:::-;26502:139;;26229:419;;;:::o;26654:::-;26820:4;26858:2;26847:9;26843:18;26835:26;;26907:9;26901:4;26897:20;26893:1;26882:9;26878:17;26871:47;26935:131;27061:4;26935:131;:::i;:::-;26927:139;;26654:419;;;:::o;27079:::-;27245:4;27283:2;27272:9;27268:18;27260:26;;27332:9;27326:4;27322:20;27318:1;27307:9;27303:17;27296:47;27360:131;27486:4;27360:131;:::i;:::-;27352:139;;27079:419;;;:::o;27504:::-;27670:4;27708:2;27697:9;27693:18;27685:26;;27757:9;27751:4;27747:20;27743:1;27732:9;27728:17;27721:47;27785:131;27911:4;27785:131;:::i;:::-;27777:139;;27504:419;;;:::o;27929:::-;28095:4;28133:2;28122:9;28118:18;28110:26;;28182:9;28176:4;28172:20;28168:1;28157:9;28153:17;28146:47;28210:131;28336:4;28210:131;:::i;:::-;28202:139;;27929:419;;;:::o;28354:::-;28520:4;28558:2;28547:9;28543:18;28535:26;;28607:9;28601:4;28597:20;28593:1;28582:9;28578:17;28571:47;28635:131;28761:4;28635:131;:::i;:::-;28627:139;;28354:419;;;:::o;28779:::-;28945:4;28983:2;28972:9;28968:18;28960:26;;29032:9;29026:4;29022:20;29018:1;29007:9;29003:17;28996:47;29060:131;29186:4;29060:131;:::i;:::-;29052:139;;28779:419;;;:::o;29204:::-;29370:4;29408:2;29397:9;29393:18;29385:26;;29457:9;29451:4;29447:20;29443:1;29432:9;29428:17;29421:47;29485:131;29611:4;29485:131;:::i;:::-;29477:139;;29204:419;;;:::o;29629:::-;29795:4;29833:2;29822:9;29818:18;29810:26;;29882:9;29876:4;29872:20;29868:1;29857:9;29853:17;29846:47;29910:131;30036:4;29910:131;:::i;:::-;29902:139;;29629:419;;;:::o;30054:::-;30220:4;30258:2;30247:9;30243:18;30235:26;;30307:9;30301:4;30297:20;30293:1;30282:9;30278:17;30271:47;30335:131;30461:4;30335:131;:::i;:::-;30327:139;;30054:419;;;:::o;30479:::-;30645:4;30683:2;30672:9;30668:18;30660:26;;30732:9;30726:4;30722:20;30718:1;30707:9;30703:17;30696:47;30760:131;30886:4;30760:131;:::i;:::-;30752:139;;30479:419;;;:::o;30904:::-;31070:4;31108:2;31097:9;31093:18;31085:26;;31157:9;31151:4;31147:20;31143:1;31132:9;31128:17;31121:47;31185:131;31311:4;31185:131;:::i;:::-;31177:139;;30904:419;;;:::o;31329:::-;31495:4;31533:2;31522:9;31518:18;31510:26;;31582:9;31576:4;31572:20;31568:1;31557:9;31553:17;31546:47;31610:131;31736:4;31610:131;:::i;:::-;31602:139;;31329:419;;;:::o;31754:::-;31920:4;31958:2;31947:9;31943:18;31935:26;;32007:9;32001:4;31997:20;31993:1;31982:9;31978:17;31971:47;32035:131;32161:4;32035:131;:::i;:::-;32027:139;;31754:419;;;:::o;32179:::-;32345:4;32383:2;32372:9;32368:18;32360:26;;32432:9;32426:4;32422:20;32418:1;32407:9;32403:17;32396:47;32460:131;32586:4;32460:131;:::i;:::-;32452:139;;32179:419;;;:::o;32604:::-;32770:4;32808:2;32797:9;32793:18;32785:26;;32857:9;32851:4;32847:20;32843:1;32832:9;32828:17;32821:47;32885:131;33011:4;32885:131;:::i;:::-;32877:139;;32604:419;;;:::o;33029:::-;33195:4;33233:2;33222:9;33218:18;33210:26;;33282:9;33276:4;33272:20;33268:1;33257:9;33253:17;33246:47;33310:131;33436:4;33310:131;:::i;:::-;33302:139;;33029:419;;;:::o;33454:::-;33620:4;33658:2;33647:9;33643:18;33635:26;;33707:9;33701:4;33697:20;33693:1;33682:9;33678:17;33671:47;33735:131;33861:4;33735:131;:::i;:::-;33727:139;;33454:419;;;:::o;33879:::-;34045:4;34083:2;34072:9;34068:18;34060:26;;34132:9;34126:4;34122:20;34118:1;34107:9;34103:17;34096:47;34160:131;34286:4;34160:131;:::i;:::-;34152:139;;33879:419;;;:::o;34304:::-;34470:4;34508:2;34497:9;34493:18;34485:26;;34557:9;34551:4;34547:20;34543:1;34532:9;34528:17;34521:47;34585:131;34711:4;34585:131;:::i;:::-;34577:139;;34304:419;;;:::o;34729:222::-;34822:4;34860:2;34849:9;34845:18;34837:26;;34873:71;34941:1;34930:9;34926:17;34917:6;34873:71;:::i;:::-;34729:222;;;;:::o;34957:129::-;34991:6;35018:20;;:::i;:::-;35008:30;;35047:33;35075:4;35067:6;35047:33;:::i;:::-;34957:129;;;:::o;35092:75::-;35125:6;35158:2;35152:9;35142:19;;35092:75;:::o;35173:307::-;35234:4;35324:18;35316:6;35313:30;35310:56;;;35346:18;;:::i;:::-;35310:56;35384:29;35406:6;35384:29;:::i;:::-;35376:37;;35468:4;35462;35458:15;35450:23;;35173:307;;;:::o;35486:308::-;35548:4;35638:18;35630:6;35627:30;35624:56;;;35660:18;;:::i;:::-;35624:56;35698:29;35720:6;35698:29;:::i;:::-;35690:37;;35782:4;35776;35772:15;35764:23;;35486:308;;;:::o;35800:98::-;35851:6;35885:5;35879:12;35869:22;;35800:98;;;:::o;35904:99::-;35956:6;35990:5;35984:12;35974:22;;35904:99;;;:::o;36009:168::-;36092:11;36126:6;36121:3;36114:19;36166:4;36161:3;36157:14;36142:29;;36009:168;;;;:::o;36183:147::-;36284:11;36321:3;36306:18;;36183:147;;;;:::o;36336:169::-;36420:11;36454:6;36449:3;36442:19;36494:4;36489:3;36485:14;36470:29;;36336:169;;;;:::o;36511:305::-;36551:3;36570:20;36588:1;36570:20;:::i;:::-;36565:25;;36604:20;36622:1;36604:20;:::i;:::-;36599:25;;36758:1;36690:66;36686:74;36683:1;36680:81;36677:107;;;36764:18;;:::i;:::-;36677:107;36808:1;36805;36801:9;36794:16;;36511:305;;;;:::o;36822:191::-;36862:4;36882:20;36900:1;36882:20;:::i;:::-;36877:25;;36916:20;36934:1;36916:20;:::i;:::-;36911:25;;36955:1;36952;36949:8;36946:34;;;36960:18;;:::i;:::-;36946:34;37005:1;37002;36998:9;36990:17;;36822:191;;;;:::o;37019:96::-;37056:7;37085:24;37103:5;37085:24;:::i;:::-;37074:35;;37019:96;;;:::o;37121:90::-;37155:7;37198:5;37191:13;37184:21;37173:32;;37121:90;;;:::o;37217:149::-;37253:7;37293:66;37286:5;37282:78;37271:89;;37217:149;;;:::o;37372:126::-;37409:7;37449:42;37442:5;37438:54;37427:65;;37372:126;;;:::o;37504:77::-;37541:7;37570:5;37559:16;;37504:77;;;:::o;37587:121::-;37645:9;37678:24;37696:5;37678:24;:::i;:::-;37665:37;;37587:121;;;:::o;37714:154::-;37798:6;37793:3;37788;37775:30;37860:1;37851:6;37846:3;37842:16;37835:27;37714:154;;;:::o;37874:307::-;37942:1;37952:113;37966:6;37963:1;37960:13;37952:113;;;38051:1;38046:3;38042:11;38036:18;38032:1;38027:3;38023:11;38016:39;37988:2;37985:1;37981:10;37976:15;;37952:113;;;38083:6;38080:1;38077:13;38074:101;;;38163:1;38154:6;38149:3;38145:16;38138:27;38074:101;37923:258;37874:307;;;:::o;38187:320::-;38231:6;38268:1;38262:4;38258:12;38248:22;;38315:1;38309:4;38305:12;38336:18;38326:81;;38392:4;38384:6;38380:17;38370:27;;38326:81;38454:2;38446:6;38443:14;38423:18;38420:38;38417:84;;;38473:18;;:::i;:::-;38417:84;38238:269;38187:320;;;:::o;38513:281::-;38596:27;38618:4;38596:27;:::i;:::-;38588:6;38584:40;38726:6;38714:10;38711:22;38690:18;38678:10;38675:34;38672:62;38669:88;;;38737:18;;:::i;:::-;38669:88;38777:10;38773:2;38766:22;38556:238;38513:281;;:::o;38800:233::-;38839:3;38862:24;38880:5;38862:24;:::i;:::-;38853:33;;38908:66;38901:5;38898:77;38895:103;;;38978:18;;:::i;:::-;38895:103;39025:1;39018:5;39014:13;39007:20;;38800:233;;;:::o;39039:180::-;39087:77;39084:1;39077:88;39184:4;39181:1;39174:15;39208:4;39205:1;39198:15;39225:180;39273:77;39270:1;39263:88;39370:4;39367:1;39360:15;39394:4;39391:1;39384:15;39411:180;39459:77;39456:1;39449:88;39556:4;39553:1;39546:15;39580:4;39577:1;39570:15;39597:180;39645:77;39642:1;39635:88;39742:4;39739:1;39732:15;39766:4;39763:1;39756:15;39783:117;39892:1;39889;39882:12;39906:117;40015:1;40012;40005:12;40029:117;40138:1;40135;40128:12;40152:117;40261:1;40258;40251:12;40275:117;40384:1;40381;40374:12;40398:117;40507:1;40504;40497:12;40521:102;40562:6;40613:2;40609:7;40604:2;40597:5;40593:14;40589:28;40579:38;;40521:102;;;:::o;40629:170::-;40769:22;40765:1;40757:6;40753:14;40746:46;40629:170;:::o;40805:237::-;40945:34;40941:1;40933:6;40929:14;40922:58;41014:20;41009:2;41001:6;40997:15;40990:45;40805:237;:::o;41048:225::-;41188:34;41184:1;41176:6;41172:14;41165:58;41257:8;41252:2;41244:6;41240:15;41233:33;41048:225;:::o;41279:224::-;41419:34;41415:1;41407:6;41403:14;41396:58;41488:7;41483:2;41475:6;41471:15;41464:32;41279:224;:::o;41509:178::-;41649:30;41645:1;41637:6;41633:14;41626:54;41509:178;:::o;41693:223::-;41833:34;41829:1;41821:6;41817:14;41810:58;41902:6;41897:2;41889:6;41885:15;41878:31;41693:223;:::o;41922:175::-;42062:27;42058:1;42050:6;42046:14;42039:51;41922:175;:::o;42103:166::-;42243:18;42239:1;42231:6;42227:14;42220:42;42103:166;:::o;42275:228::-;42415:34;42411:1;42403:6;42399:14;42392:58;42484:11;42479:2;42471:6;42467:15;42460:36;42275:228;:::o;42509:165::-;42649:17;42645:1;42637:6;42633:14;42626:41;42509:165;:::o;42680:::-;42820:17;42816:1;42808:6;42804:14;42797:41;42680:165;:::o;42851:249::-;42991:34;42987:1;42979:6;42975:14;42968:58;43060:32;43055:2;43047:6;43043:15;43036:57;42851:249;:::o;43106:182::-;43246:34;43242:1;43234:6;43230:14;43223:58;43106:182;:::o;43294:::-;43434:34;43430:1;43422:6;43418:14;43411:58;43294:182;:::o;43482:166::-;43622:18;43618:1;43610:6;43606:14;43599:42;43482:166;:::o;43654:174::-;43794:26;43790:1;43782:6;43778:14;43771:50;43654:174;:::o;43834:220::-;43974:34;43970:1;43962:6;43958:14;43951:58;44043:3;44038:2;44030:6;44026:15;44019:28;43834:220;:::o;44060:160::-;44200:12;44196:1;44188:6;44184:14;44177:36;44060:160;:::o;44226:114::-;;:::o;44346:233::-;44486:34;44482:1;44474:6;44470:14;44463:58;44555:16;44550:2;44542:6;44538:15;44531:41;44346:233;:::o;44585:181::-;44725:33;44721:1;44713:6;44709:14;44702:57;44585:181;:::o;44772:156::-;44912:8;44908:1;44900:6;44896:14;44889:32;44772:156;:::o;44934:122::-;45007:24;45025:5;45007:24;:::i;:::-;45000:5;44997:35;44987:63;;45046:1;45043;45036:12;44987:63;44934:122;:::o;45062:116::-;45132:21;45147:5;45132:21;:::i;:::-;45125:5;45122:32;45112:60;;45168:1;45165;45158:12;45112:60;45062:116;:::o;45184:120::-;45256:23;45273:5;45256:23;:::i;:::-;45249:5;45246:34;45236:62;;45294:1;45291;45284:12;45236:62;45184:120;:::o;45310:122::-;45383:24;45401:5;45383:24;:::i;:::-;45376:5;45373:35;45363:63;;45422:1;45419;45412:12;45363:63;45310:122;:::o

Swarm Source

ipfs://d27aae360585d661941f03d39da36e2df34e3df1a6e45817e312e465b5443348
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

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