Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
NFT
Overview
Max Total Supply
10,010 CLEM
Holders
2,211
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 CLEMLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ClementineNFT2
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-07 */ // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (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 Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: contracts/ClementineNFT2.sol // Creator: Chiru Labs pragma solidity ^0.8.4; error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintedQueryForZeroAddress(); error BurnedQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerIndexOutOfBounds(); error OwnerQueryForNonexistentToken(); error TokenIndexOutOfBounds(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; // Compiler will pack this into a single 256bit word. struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; // Keeps track of burn count with minimal overhead for tokenomics. uint64 numberBurned; } // The tokenId of the next token to be minted. uint256 internal _currentIndex; // The number of tokens burned. uint256 internal _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // 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; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex times unchecked { return _currentIndex - _burnCounter; } } /** * @dev See {IERC721Enumerable-tokenByIndex}. * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenByIndex(uint256 index) public view override returns (uint256) { uint256 numMintedSoFar = _currentIndex; uint256 tokenIdsIdx; // Counter overflow is impossible as the loop breaks when // uint256 i is equal to another uint256 numMintedSoFar. unchecked { for (uint256 i; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (!ownership.burned) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } } revert TokenIndexOutOfBounds(); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { if (index >= balanceOf(owner)) revert OwnerIndexOutOfBounds(); uint256 numMintedSoFar = _currentIndex; uint256 tokenIdsIdx; address currOwnershipAddr; // Counter overflow is impossible as the loop breaks when // uint256 i is equal to another uint256 numMintedSoFar. unchecked { for (uint256 i; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.burned) { continue; } if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } } // Execution should never reach this point. revert(); } /** * @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 || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { if (owner == address(0)) revert MintedQueryForZeroAddress(); return uint256(_addressData[owner].numberMinted); } function _numberBurned(address owner) internal view returns (uint256) { if (owner == address(0)) revert BurnedQueryForZeroAddress(); return uint256(_addressData[owner].numberBurned); } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { uint256 curr = tokenId; unchecked { if (curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (!ownership.burned) { if (ownership.addr != address(0)) { return ownership; } // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } } } revert OwnerQueryForNonexistentToken(); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @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) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { if (operator == _msgSender()) revert ApproveToCaller(); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _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 { _transfer(from, to, tokenId); if (!_checkOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @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`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < _currentIndex && !_ownerships[tokenId].burned; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ""); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; for (uint256 i; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); if ( safe && !_checkOnERC721Received(address(0), to, updatedIndex, _data) ) { revert TransferToNonERC721ReceiverImplementer(); } updatedIndex++; } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * 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 ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || isApprovedForAll(prevOwnership.addr, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId].addr = to; _ownerships[tokenId].startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId < _currentIndex) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership .startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @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 { TokenOwnership memory prevOwnership = ownershipOf(tokenId); _beforeTokenTransfers(prevOwnership.addr, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[prevOwnership.addr].balance -= 1; _addressData[prevOwnership.addr].numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. _ownerships[tokenId].addr = prevOwnership.addr; _ownerships[tokenId].startTimestamp = uint64(block.timestamp); _ownerships[tokenId].burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId < _currentIndex) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership .startTimestamp; } } } emit Transfer(prevOwnership.addr, address(0), tokenId); _afterTokenTransfers(prevOwnership.addr, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received( _msgSender(), from, tokenId, _data ) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * 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, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } pragma solidity ^0.8.4; contract ClementineNFT2 is ERC721A, Ownable { using Strings for uint256; string baseURI; string public baseExtension = ".json"; uint256 public cost = 0.2 ether; uint256 public hallPassCost = 0.1 ether; uint256 public maxSupply = 10010; uint256 public maxMintAmount = 5; uint256 public hallPasses = 0; bool public paused = true; bool public revealed = false; bool public hallPassOnly = false; bool public limitPublic = true; string public notRevealedUri; // Number of Hall Passes an address has remaining. mapping(address => uint8) public hallPass; constructor(string memory _initNotRevealedUri) ERC721A("Clementine's Nightmare", "CLEM") { setNotRevealedURI(_initNotRevealedUri); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(!paused); require(_mintAmount > 0); require(supply + _mintAmount <= maxSupply); if (msg.sender != owner()) { // Don't exceed the max mint amount per tx. require(_mintAmount <= maxMintAmount); // Hall Pass settings. if (hallPassOnly == true) { // They have enough hall passes to mint. require(hallPass[msg.sender] >= _mintAmount); // They have the right payment. require(msg.value >= hallPassCost * _mintAmount); // _mintAmount bounds check above. Safe typecast. hallPass[msg.sender] -= uint8(_mintAmount); } else { // Save supply for Hall passes. if (limitPublic) { require((supply + _mintAmount) <= (maxSupply - hallPasses)); } // Has the right payment. require(msg.value >= cost * _mintAmount); } } _safeMint(msg.sender, _mintAmount); } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721AMetadata: URI query for nonexistent token" ); if (revealed == false) { return notRevealedUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string( abi.encodePacked( currentBaseURI, tokenId.toString(), baseExtension ) ) : ""; } // owner function reveal() public onlyOwner { revealed = true; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setHallPassCost(uint256 _newHallPassCost) public onlyOwner { hallPassCost = _newHallPassCost; } function setMaxMintAmount(uint256 _newMaxMintAmount) public onlyOwner { maxMintAmount = _newMaxMintAmount; } function setLimitPublic(bool _newLimitPublic) public onlyOwner { limitPublic = _newLimitPublic; } function setHallPassOnly(bool _newHallPassOnly) public onlyOwner { hallPassOnly = _newHallPassOnly; } function seedHallPass(address[] memory addresses, uint8[] memory counts) external onlyOwner { require(addresses.length == counts.length); uint256 passCount; for (uint256 i = 0; i < addresses.length; i++) { hallPass[addresses[i]] = counts[i]; passCount += counts[i]; } hallPasses += passCount; } function removeHallPass(address[] memory addresses) external onlyOwner { uint256 passCount; for (uint256 i = 0; i < addresses.length; i++) { passCount += hallPass[addresses[i]]; hallPass[addresses[i]] = 0; } hallPasses -= passCount; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function pause(bool _state) public onlyOwner { paused = _state; } function withdraw() public payable onlyOwner { (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerIndexOutOfBounds","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TokenIndexOutOfBounds","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"hallPass","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hallPassCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hallPassOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hallPasses","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitPublic","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"removeHallPass","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"addresses","type":"address[]"},{"internalType":"uint8[]","name":"counts","type":"uint8[]"}],"name":"seedHallPass","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newHallPassCost","type":"uint256"}],"name":"setHallPassCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_newHallPassOnly","type":"bool"}],"name":"setHallPassOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_newLimitPublic","type":"bool"}],"name":"setLimitPublic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxMintAmount","type":"uint256"}],"name":"setMaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600a90805190602001906200005192919062000394565b506702c68af0bb140000600b5567016345785d8a0000600c5561271a600d556005600e556000600f556001601060006101000a81548160ff0219169083151502179055506000601060016101000a81548160ff0219169083151502179055506000601060026101000a81548160ff0219169083151502179055506001601060036101000a81548160ff021916908315150217905550348015620000f357600080fd5b5060405162004f5038038062004f508339818101604052810190620001199190620004c2565b6040518060400160405280601681526020017f436c656d656e74696e652773204e696768746d617265000000000000000000008152506040518060400160405280600481526020017f434c454d0000000000000000000000000000000000000000000000000000000081525081600290805190602001906200019d92919062000394565b508060039080519060200190620001b692919062000394565b505050620001d9620001cd620001f160201b60201c565b620001f960201b60201c565b620001ea81620002bf60201b60201c565b506200071a565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002cf620001f160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002f56200036a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200034e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000345906200053a565b60405180910390fd5b80601190805190602001906200036692919062000394565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003a29062000602565b90600052602060002090601f016020900481019282620003c6576000855562000412565b82601f10620003e157805160ff191683800117855562000412565b8280016001018555821562000412579182015b8281111562000411578251825591602001919060010190620003f4565b5b50905062000421919062000425565b5090565b5b808211156200044057600081600090555060010162000426565b5090565b60006200045b620004558462000585565b6200055c565b9050828152602081018484840111156200047a5762000479620006d1565b5b62000487848285620005cc565b509392505050565b600082601f830112620004a757620004a6620006cc565b5b8151620004b984826020860162000444565b91505092915050565b600060208284031215620004db57620004da620006db565b5b600082015167ffffffffffffffff811115620004fc57620004fb620006d6565b5b6200050a848285016200048f565b91505092915050565b600062000522602083620005bb565b91506200052f82620006f1565b602082019050919050565b60006020820190508181036000830152620005558162000513565b9050919050565b6000620005686200057b565b905062000576828262000638565b919050565b6000604051905090565b600067ffffffffffffffff821115620005a357620005a26200069d565b5b620005ae82620006e0565b9050602081019050919050565b600082825260208201905092915050565b60005b83811015620005ec578082015181840152602081019050620005cf565b83811115620005fc576000848401525b50505050565b600060028204905060018216806200061b57607f821691505b602082108114156200063257620006316200066e565b5b50919050565b6200064382620006e0565b810181811067ffffffffffffffff821117156200066557620006646200069d565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b614826806200072a6000396000f3fe6080604052600436106102725760003560e01c80635c975abb1161014f578063a22cb465116100c1578063c87b56dd1161007a578063c87b56dd14610922578063d5abeb011461095f578063e6f8e8fd1461098a578063e985e9c5146109b3578063f2c4ce1e146109f0578063f2fde38b14610a1957610272565b8063a22cb4651461083c578063a475b5dd14610865578063a8a4382d1461087c578063b4e54193146108a5578063b88d4fde146108ce578063c6682862146108f757610272565b80637c78d9e0116101135780637c78d9e0146107375780638da5cb5b1461077457806395b19dc71461079f57806395d89b41146107ca57806396772cee146107f5578063a0712d681461082057610272565b80635c975abb146106525780635d5975a61461067d5780636352211e146106a657806370a08231146106e3578063715018a61461072057610272565b8063239c70ae116101e857806342842e0e116101ac57806342842e0e14610532578063438b63001461055b57806344a0d68a146105985780634f6ccce7146105c157806351830227146105fe57806355f804b31461062957610272565b8063239c70ae1461046c57806323b872dd14610497578063286e9a2d146104c05780632f745c59146104eb5780633ccfd60b1461052857610272565b8063081812fc1161023a578063081812fc1461035c578063081c8c4414610399578063088a4ed0146103c4578063095ea7b3146103ed57806313faede61461041657806318160ddd1461044157610272565b806301ffc9a71461027757806302329a29146102b45780630267d08b146102dd57806306fdde0314610306578063077924f314610331575b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613c59565b610a42565b6040516102ab9190614067565b60405180910390f35b3480156102c057600080fd5b506102db60048036038101906102d69190613c2c565b610b8c565b005b3480156102e957600080fd5b5061030460048036038101906102ff9190613bb4565b610c25565b005b34801561031257600080fd5b5061031b610da9565b6040516103289190614082565b60405180910390f35b34801561033d57600080fd5b50610346610e3b565b6040516103539190614104565b60405180910390f35b34801561036857600080fd5b50610383600480360381019061037e9190613cfc565b610e41565b6040516103909190613fde565b60405180910390f35b3480156103a557600080fd5b506103ae610ebd565b6040516103bb9190614082565b60405180910390f35b3480156103d057600080fd5b506103eb60048036038101906103e69190613cfc565b610f4b565b005b3480156103f957600080fd5b50610414600480360381019061040f9190613b2b565b610fd1565b005b34801561042257600080fd5b5061042b6110dc565b6040516104389190614104565b60405180910390f35b34801561044d57600080fd5b506104566110e2565b6040516104639190614104565b60405180910390f35b34801561047857600080fd5b506104816110f0565b60405161048e9190614104565b60405180910390f35b3480156104a357600080fd5b506104be60048036038101906104b99190613a15565b6110f6565b005b3480156104cc57600080fd5b506104d5611106565b6040516104e29190614067565b60405180910390f35b3480156104f757600080fd5b50610512600480360381019061050d9190613b2b565b611119565b60405161051f9190614104565b60405180910390f35b6105306112f2565b005b34801561053e57600080fd5b5061055960048036038101906105549190613a15565b6113ee565b005b34801561056757600080fd5b50610582600480360381019061057d91906139a8565b61140e565b60405161058f9190614045565b60405180910390f35b3480156105a457600080fd5b506105bf60048036038101906105ba9190613cfc565b6114bc565b005b3480156105cd57600080fd5b506105e860048036038101906105e39190613cfc565b611542565b6040516105f59190614104565b60405180910390f35b34801561060a57600080fd5b50610613611687565b6040516106209190614067565b60405180910390f35b34801561063557600080fd5b50610650600480360381019061064b9190613cb3565b61169a565b005b34801561065e57600080fd5b50610667611730565b6040516106749190614067565b60405180910390f35b34801561068957600080fd5b506106a4600480360381019061069f9190613c2c565b611743565b005b3480156106b257600080fd5b506106cd60048036038101906106c89190613cfc565b6117dc565b6040516106da9190613fde565b60405180910390f35b3480156106ef57600080fd5b5061070a600480360381019061070591906139a8565b6117f2565b6040516107179190614104565b60405180910390f35b34801561072c57600080fd5b506107356118c2565b005b34801561074357600080fd5b5061075e600480360381019061075991906139a8565b61194a565b60405161076b919061411f565b60405180910390f35b34801561078057600080fd5b5061078961196a565b6040516107969190613fde565b60405180910390f35b3480156107ab57600080fd5b506107b4611994565b6040516107c19190614104565b60405180910390f35b3480156107d657600080fd5b506107df61199a565b6040516107ec9190614082565b60405180910390f35b34801561080157600080fd5b5061080a611a2c565b6040516108179190614067565b60405180910390f35b61083a60048036038101906108359190613cfc565b611a3f565b005b34801561084857600080fd5b50610863600480360381019061085e9190613aeb565b611c46565b005b34801561087157600080fd5b5061087a611dbe565b005b34801561088857600080fd5b506108a3600480360381019061089e9190613b6b565b611e57565b005b3480156108b157600080fd5b506108cc60048036038101906108c79190613c2c565b611fff565b005b3480156108da57600080fd5b506108f560048036038101906108f09190613a68565b612098565b005b34801561090357600080fd5b5061090c6120eb565b6040516109199190614082565b60405180910390f35b34801561092e57600080fd5b5061094960048036038101906109449190613cfc565b612179565b6040516109569190614082565b60405180910390f35b34801561096b57600080fd5b506109746122d2565b6040516109819190614104565b60405180910390f35b34801561099657600080fd5b506109b160048036038101906109ac9190613cfc565b6122d8565b005b3480156109bf57600080fd5b506109da60048036038101906109d591906139d5565b61235e565b6040516109e79190614067565b60405180910390f35b3480156109fc57600080fd5b50610a176004803603810190610a129190613cb3565b6123f2565b005b348015610a2557600080fd5b50610a406004803603810190610a3b91906139a8565b612488565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b0d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b7557507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b855750610b8482612580565b5b9050919050565b610b946125ea565b73ffffffffffffffffffffffffffffffffffffffff16610bb261196a565b73ffffffffffffffffffffffffffffffffffffffff1614610c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bff906140e4565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b610c2d6125ea565b73ffffffffffffffffffffffffffffffffffffffff16610c4b61196a565b73ffffffffffffffffffffffffffffffffffffffff1614610ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c98906140e4565b60405180910390fd5b8051825114610caf57600080fd5b600080600090505b8351811015610d8a57828181518110610cd357610cd261462b565b5b602002602001015160126000868481518110610cf257610cf161462b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff160217905550828181518110610d5f57610d5e61462b565b5b602002602001015160ff1682610d7591906142b5565b91508080610d8290614524565b915050610cb7565b5080600f6000828254610d9d91906142b5565b92505081905550505050565b606060028054610db8906144c1565b80601f0160208091040260200160405190810160405280929190818152602001828054610de4906144c1565b8015610e315780601f10610e0657610100808354040283529160200191610e31565b820191906000526020600020905b815481529060010190602001808311610e1457829003601f168201915b5050505050905090565b600c5481565b6000610e4c826125f2565b610e82576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60118054610eca906144c1565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef6906144c1565b8015610f435780601f10610f1857610100808354040283529160200191610f43565b820191906000526020600020905b815481529060010190602001808311610f2657829003601f168201915b505050505081565b610f536125ea565b73ffffffffffffffffffffffffffffffffffffffff16610f7161196a565b73ffffffffffffffffffffffffffffffffffffffff1614610fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbe906140e4565b60405180910390fd5b80600e8190555050565b6000610fdc826117dc565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611044576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166110636125ea565b73ffffffffffffffffffffffffffffffffffffffff161415801561109557506110938161108e6125ea565b61235e565b155b156110cc576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110d783838361262c565b505050565b600b5481565b600060015460005403905090565b600e5481565b6111018383836126de565b505050565b601060029054906101000a900460ff1681565b6000611124836117f2565b821061115c576040517f0ddac30e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054905060008060005b838110156112e6576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001511561124557506112d9565b600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461128557806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112d757868414156112ce5781955050505050506112ec565b83806001019450505b505b8080600101915050611168565b50600080fd5b92915050565b6112fa6125ea565b73ffffffffffffffffffffffffffffffffffffffff1661131861196a565b73ffffffffffffffffffffffffffffffffffffffff161461136e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611365906140e4565b60405180910390fd5b600061137861196a565b73ffffffffffffffffffffffffffffffffffffffff164760405161139b90613fc9565b60006040518083038185875af1925050503d80600081146113d8576040519150601f19603f3d011682016040523d82523d6000602084013e6113dd565b606091505b50509050806113eb57600080fd5b50565b61140983838360405180602001604052806000815250612098565b505050565b6060600061141b836117f2565b905060008167ffffffffffffffff8111156114395761143861465a565b5b6040519080825280602002602001820160405280156114675781602001602082028036833780820191505090505b50905060005b828110156114b15761147f8582611119565b8282815181106114925761149161462b565b5b60200260200101818152505080806114a990614524565b91505061146d565b508092505050919050565b6114c46125ea565b73ffffffffffffffffffffffffffffffffffffffff166114e261196a565b73ffffffffffffffffffffffffffffffffffffffff1614611538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152f906140e4565b60405180910390fd5b80600b8190555050565b60008060005490506000805b8281101561164f576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161164157858314156116385781945050505050611682565b82806001019350505b50808060010191505061154e565b506040517fa723001c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b601060019054906101000a900460ff1681565b6116a26125ea565b73ffffffffffffffffffffffffffffffffffffffff166116c061196a565b73ffffffffffffffffffffffffffffffffffffffff1614611716576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170d906140e4565b60405180910390fd5b806009908051906020019061172c929190613628565b5050565b601060009054906101000a900460ff1681565b61174b6125ea565b73ffffffffffffffffffffffffffffffffffffffff1661176961196a565b73ffffffffffffffffffffffffffffffffffffffff16146117bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b6906140e4565b60405180910390fd5b80601060026101000a81548160ff02191690831515021790555050565b60006117e782612bcf565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561185a576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6118ca6125ea565b73ffffffffffffffffffffffffffffffffffffffff166118e861196a565b73ffffffffffffffffffffffffffffffffffffffff161461193e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611935906140e4565b60405180910390fd5b6119486000612e4b565b565b60126020528060005260406000206000915054906101000a900460ff1681565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f5481565b6060600380546119a9906144c1565b80601f01602080910402602001604051908101604052809291908181526020018280546119d5906144c1565b8015611a225780601f106119f757610100808354040283529160200191611a22565b820191906000526020600020905b815481529060010190602001808311611a0557829003601f168201915b5050505050905090565b601060039054906101000a900460ff1681565b6000611a496110e2565b9050601060009054906101000a900460ff1615611a6557600080fd5b60008211611a7257600080fd5b600d548282611a8191906142b5565b1115611a8c57600080fd5b611a9461196a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c3857600e54821115611ad557600080fd5b60011515601060029054906101000a900460ff1615151415611bdf5781601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff161015611b4d57600080fd5b81600c54611b5b919061433c565b341015611b6757600080fd5b81601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900460ff16611bc291906143ca565b92506101000a81548160ff021916908360ff160217905550611c37565b601060039054906101000a900460ff1615611c1c57600f54600d54611c049190614396565b8282611c1091906142b5565b1115611c1b57600080fd5b5b81600b54611c2a919061433c565b341015611c3657600080fd5b5b5b611c423383612f11565b5050565b611c4e6125ea565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cb3576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611cc06125ea565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611d6d6125ea565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611db29190614067565b60405180910390a35050565b611dc66125ea565b73ffffffffffffffffffffffffffffffffffffffff16611de461196a565b73ffffffffffffffffffffffffffffffffffffffff1614611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e31906140e4565b60405180910390fd5b6001601060016101000a81548160ff021916908315150217905550565b611e5f6125ea565b73ffffffffffffffffffffffffffffffffffffffff16611e7d61196a565b73ffffffffffffffffffffffffffffffffffffffff1614611ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eca906140e4565b60405180910390fd5b600080600090505b8251811015611fe15760126000848381518110611efb57611efa61462b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1682611f5991906142b5565b9150600060126000858481518110611f7457611f7361462b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff1602179055508080611fd990614524565b915050611edb565b5080600f6000828254611ff49190614396565b925050819055505050565b6120076125ea565b73ffffffffffffffffffffffffffffffffffffffff1661202561196a565b73ffffffffffffffffffffffffffffffffffffffff161461207b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612072906140e4565b60405180910390fd5b80601060036101000a81548160ff02191690831515021790555050565b6120a38484846126de565b6120af84848484612f2f565b6120e5576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b600a80546120f8906144c1565b80601f0160208091040260200160405190810160405280929190818152602001828054612124906144c1565b80156121715780601f1061214657610100808354040283529160200191612171565b820191906000526020600020905b81548152906001019060200180831161215457829003601f168201915b505050505081565b6060612184826125f2565b6121c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ba906140a4565b60405180910390fd5b60001515601060019054906101000a900460ff161515141561227157601180546121ec906144c1565b80601f0160208091040260200160405190810160405280929190818152602001828054612218906144c1565b80156122655780601f1061223a57610100808354040283529160200191612265565b820191906000526020600020905b81548152906001019060200180831161224857829003601f168201915b505050505090506122cd565b600061227b6130bd565b9050600081511161229b57604051806020016040528060008152506122c9565b806122a58461314f565b600a6040516020016122b993929190613f98565b6040516020818303038152906040525b9150505b919050565b600d5481565b6122e06125ea565b73ffffffffffffffffffffffffffffffffffffffff166122fe61196a565b73ffffffffffffffffffffffffffffffffffffffff1614612354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234b906140e4565b60405180910390fd5b80600c8190555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6123fa6125ea565b73ffffffffffffffffffffffffffffffffffffffff1661241861196a565b73ffffffffffffffffffffffffffffffffffffffff161461246e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612465906140e4565b60405180910390fd5b8060119080519060200190612484929190613628565b5050565b6124906125ea565b73ffffffffffffffffffffffffffffffffffffffff166124ae61196a565b73ffffffffffffffffffffffffffffffffffffffff1614612504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fb906140e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256b906140c4565b60405180910390fd5b61257d81612e4b565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000805482108015612625575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006126e982612bcf565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166127106125ea565b73ffffffffffffffffffffffffffffffffffffffff1614806127435750612742826000015161273d6125ea565b61235e565b5b8061278857506127516125ea565b73ffffffffffffffffffffffffffffffffffffffff1661277084610e41565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806127c1576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461282a576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612891576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61289e85858560016132b0565b6128ae600084846000015161262c565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612b5f57600054811015612b5e5782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612bc885858560016132b6565b5050505050565b612bd76136ae565b6000829050600054811015612e14576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612e1257600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612cf6578092505050612e46565b5b600115612e1157818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612e0c578092505050612e46565b612cf7565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612f2b8282604051806020016040528060008152506132bc565b5050565b6000612f508473ffffffffffffffffffffffffffffffffffffffff166132ce565b156130b0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f796125ea565b8786866040518563ffffffff1660e01b8152600401612f9b9493929190613ff9565b602060405180830381600087803b158015612fb557600080fd5b505af1925050508015612fe657506040513d601f19601f82011682018060405250810190612fe39190613c86565b60015b613060573d8060008114613016576040519150601f19603f3d011682016040523d82523d6000602084013e61301b565b606091505b50600081511415613058576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506130b5565b600190505b949350505050565b6060600980546130cc906144c1565b80601f01602080910402602001604051908101604052809291908181526020018280546130f8906144c1565b80156131455780601f1061311a57610100808354040283529160200191613145565b820191906000526020600020905b81548152906001019060200180831161312857829003601f168201915b5050505050905090565b60606000821415613197576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506132ab565b600082905060005b600082146131c95780806131b290614524565b915050600a826131c2919061430b565b915061319f565b60008167ffffffffffffffff8111156131e5576131e461465a565b5b6040519080825280601f01601f1916602001820160405280156132175781602001600182028036833780820191505090505b5090505b600085146132a4576001826132309190614396565b9150600a8561323f919061456d565b603061324b91906142b5565b60f81b8183815181106132615761326061462b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561329d919061430b565b945061321b565b8093505050505b919050565b50505050565b50505050565b6132c983838360016132f1565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561335e576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415613399576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6133a660008683876132b0565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b8581101561360b57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48380156135bf57506135bd6000888488612f2f565b155b156135f6576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81806001019250508080600101915050613544565b50806000819055505061362160008683876132b6565b5050505050565b828054613634906144c1565b90600052602060002090601f016020900481019282613656576000855561369d565b82601f1061366f57805160ff191683800117855561369d565b8280016001018555821561369d579182015b8281111561369c578251825591602001919060010190613681565b5b5090506136aa91906136f1565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b8082111561370a5760008160009055506001016136f2565b5090565b600061372161371c8461415f565b61413a565b905080838252602082019050828560208602820111156137445761374361468e565b5b60005b85811015613774578161375a8882613872565b845260208401935060208301925050600181019050613747565b5050509392505050565b600061379161378c8461418b565b61413a565b905080838252602082019050828560208602820111156137b4576137b361468e565b5b60005b858110156137e457816137ca8882613993565b8452602084019350602083019250506001810190506137b7565b5050509392505050565b60006138016137fc846141b7565b61413a565b90508281526020810184848401111561381d5761381c614693565b5b61382884828561447f565b509392505050565b600061384361383e846141e8565b61413a565b90508281526020810184848401111561385f5761385e614693565b5b61386a84828561447f565b509392505050565b6000813590506138818161477d565b92915050565b600082601f83011261389c5761389b614689565b5b81356138ac84826020860161370e565b91505092915050565b600082601f8301126138ca576138c9614689565b5b81356138da84826020860161377e565b91505092915050565b6000813590506138f281614794565b92915050565b600081359050613907816147ab565b92915050565b60008151905061391c816147ab565b92915050565b600082601f83011261393757613936614689565b5b81356139478482602086016137ee565b91505092915050565b600082601f83011261396557613964614689565b5b8135613975848260208601613830565b91505092915050565b60008135905061398d816147c2565b92915050565b6000813590506139a2816147d9565b92915050565b6000602082840312156139be576139bd61469d565b5b60006139cc84828501613872565b91505092915050565b600080604083850312156139ec576139eb61469d565b5b60006139fa85828601613872565b9250506020613a0b85828601613872565b9150509250929050565b600080600060608486031215613a2e57613a2d61469d565b5b6000613a3c86828701613872565b9350506020613a4d86828701613872565b9250506040613a5e8682870161397e565b9150509250925092565b60008060008060808587031215613a8257613a8161469d565b5b6000613a9087828801613872565b9450506020613aa187828801613872565b9350506040613ab28782880161397e565b925050606085013567ffffffffffffffff811115613ad357613ad2614698565b5b613adf87828801613922565b91505092959194509250565b60008060408385031215613b0257613b0161469d565b5b6000613b1085828601613872565b9250506020613b21858286016138e3565b9150509250929050565b60008060408385031215613b4257613b4161469d565b5b6000613b5085828601613872565b9250506020613b618582860161397e565b9150509250929050565b600060208284031215613b8157613b8061469d565b5b600082013567ffffffffffffffff811115613b9f57613b9e614698565b5b613bab84828501613887565b91505092915050565b60008060408385031215613bcb57613bca61469d565b5b600083013567ffffffffffffffff811115613be957613be8614698565b5b613bf585828601613887565b925050602083013567ffffffffffffffff811115613c1657613c15614698565b5b613c22858286016138b5565b9150509250929050565b600060208284031215613c4257613c4161469d565b5b6000613c50848285016138e3565b91505092915050565b600060208284031215613c6f57613c6e61469d565b5b6000613c7d848285016138f8565b91505092915050565b600060208284031215613c9c57613c9b61469d565b5b6000613caa8482850161390d565b91505092915050565b600060208284031215613cc957613cc861469d565b5b600082013567ffffffffffffffff811115613ce757613ce6614698565b5b613cf384828501613950565b91505092915050565b600060208284031215613d1257613d1161469d565b5b6000613d208482850161397e565b91505092915050565b6000613d358383613f6b565b60208301905092915050565b613d4a816143fe565b82525050565b6000613d5b8261423e565b613d65818561426c565b9350613d7083614219565b8060005b83811015613da1578151613d888882613d29565b9750613d938361425f565b925050600181019050613d74565b5085935050505092915050565b613db781614410565b82525050565b6000613dc882614249565b613dd2818561427d565b9350613de281856020860161448e565b613deb816146a2565b840191505092915050565b6000613e0182614254565b613e0b8185614299565b9350613e1b81856020860161448e565b613e24816146a2565b840191505092915050565b6000613e3a82614254565b613e4481856142aa565b9350613e5481856020860161448e565b80840191505092915050565b60008154613e6d816144c1565b613e7781866142aa565b94506001821660008114613e925760018114613ea357613ed6565b60ff19831686528186019350613ed6565b613eac85614229565b60005b83811015613ece57815481890152600182019150602081019050613eaf565b838801955050505b50505092915050565b6000613eec603083614299565b9150613ef7826146b3565b604082019050919050565b6000613f0f602683614299565b9150613f1a82614702565b604082019050919050565b6000613f32602083614299565b9150613f3d82614751565b602082019050919050565b6000613f5560008361428e565b9150613f608261477a565b600082019050919050565b613f7481614468565b82525050565b613f8381614468565b82525050565b613f9281614472565b82525050565b6000613fa48286613e2f565b9150613fb08285613e2f565b9150613fbc8284613e60565b9150819050949350505050565b6000613fd482613f48565b9150819050919050565b6000602082019050613ff36000830184613d41565b92915050565b600060808201905061400e6000830187613d41565b61401b6020830186613d41565b6140286040830185613f7a565b818103606083015261403a8184613dbd565b905095945050505050565b6000602082019050818103600083015261405f8184613d50565b905092915050565b600060208201905061407c6000830184613dae565b92915050565b6000602082019050818103600083015261409c8184613df6565b905092915050565b600060208201905081810360008301526140bd81613edf565b9050919050565b600060208201905081810360008301526140dd81613f02565b9050919050565b600060208201905081810360008301526140fd81613f25565b9050919050565b60006020820190506141196000830184613f7a565b92915050565b60006020820190506141346000830184613f89565b92915050565b6000614144614155565b905061415082826144f3565b919050565b6000604051905090565b600067ffffffffffffffff82111561417a5761417961465a565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156141a6576141a561465a565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156141d2576141d161465a565b5b6141db826146a2565b9050602081019050919050565b600067ffffffffffffffff8211156142035761420261465a565b5b61420c826146a2565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006142c082614468565b91506142cb83614468565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614300576142ff61459e565b5b828201905092915050565b600061431682614468565b915061432183614468565b925082614331576143306145cd565b5b828204905092915050565b600061434782614468565b915061435283614468565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561438b5761438a61459e565b5b828202905092915050565b60006143a182614468565b91506143ac83614468565b9250828210156143bf576143be61459e565b5b828203905092915050565b60006143d582614472565b91506143e083614472565b9250828210156143f3576143f261459e565b5b828203905092915050565b600061440982614448565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156144ac578082015181840152602081019050614491565b838111156144bb576000848401525b50505050565b600060028204905060018216806144d957607f821691505b602082108114156144ed576144ec6145fc565b5b50919050565b6144fc826146a2565b810181811067ffffffffffffffff8211171561451b5761451a61465a565b5b80604052505050565b600061452f82614468565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156145625761456161459e565b5b600182019050919050565b600061457882614468565b915061458383614468565b925082614593576145926145cd565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231414d657461646174613a2055524920717565727920666f72206e60008201527f6f6e6578697374656e7420746f6b656e00000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b614786816143fe565b811461479157600080fd5b50565b61479d81614410565b81146147a857600080fd5b50565b6147b48161441c565b81146147bf57600080fd5b50565b6147cb81614468565b81146147d657600080fd5b50565b6147e281614472565b81146147ed57600080fd5b5056fea26469706673582212202a956730a09f3560790072a727122dd483e1fd4eecbbf39894c8e678a904fa8c64736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042697066733a2f2f516d555a714271464a667766337566733748327a7453567138717359634734346a37585046336f6f6e584836446b2f756e6c656173682e6a736f6e000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102725760003560e01c80635c975abb1161014f578063a22cb465116100c1578063c87b56dd1161007a578063c87b56dd14610922578063d5abeb011461095f578063e6f8e8fd1461098a578063e985e9c5146109b3578063f2c4ce1e146109f0578063f2fde38b14610a1957610272565b8063a22cb4651461083c578063a475b5dd14610865578063a8a4382d1461087c578063b4e54193146108a5578063b88d4fde146108ce578063c6682862146108f757610272565b80637c78d9e0116101135780637c78d9e0146107375780638da5cb5b1461077457806395b19dc71461079f57806395d89b41146107ca57806396772cee146107f5578063a0712d681461082057610272565b80635c975abb146106525780635d5975a61461067d5780636352211e146106a657806370a08231146106e3578063715018a61461072057610272565b8063239c70ae116101e857806342842e0e116101ac57806342842e0e14610532578063438b63001461055b57806344a0d68a146105985780634f6ccce7146105c157806351830227146105fe57806355f804b31461062957610272565b8063239c70ae1461046c57806323b872dd14610497578063286e9a2d146104c05780632f745c59146104eb5780633ccfd60b1461052857610272565b8063081812fc1161023a578063081812fc1461035c578063081c8c4414610399578063088a4ed0146103c4578063095ea7b3146103ed57806313faede61461041657806318160ddd1461044157610272565b806301ffc9a71461027757806302329a29146102b45780630267d08b146102dd57806306fdde0314610306578063077924f314610331575b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613c59565b610a42565b6040516102ab9190614067565b60405180910390f35b3480156102c057600080fd5b506102db60048036038101906102d69190613c2c565b610b8c565b005b3480156102e957600080fd5b5061030460048036038101906102ff9190613bb4565b610c25565b005b34801561031257600080fd5b5061031b610da9565b6040516103289190614082565b60405180910390f35b34801561033d57600080fd5b50610346610e3b565b6040516103539190614104565b60405180910390f35b34801561036857600080fd5b50610383600480360381019061037e9190613cfc565b610e41565b6040516103909190613fde565b60405180910390f35b3480156103a557600080fd5b506103ae610ebd565b6040516103bb9190614082565b60405180910390f35b3480156103d057600080fd5b506103eb60048036038101906103e69190613cfc565b610f4b565b005b3480156103f957600080fd5b50610414600480360381019061040f9190613b2b565b610fd1565b005b34801561042257600080fd5b5061042b6110dc565b6040516104389190614104565b60405180910390f35b34801561044d57600080fd5b506104566110e2565b6040516104639190614104565b60405180910390f35b34801561047857600080fd5b506104816110f0565b60405161048e9190614104565b60405180910390f35b3480156104a357600080fd5b506104be60048036038101906104b99190613a15565b6110f6565b005b3480156104cc57600080fd5b506104d5611106565b6040516104e29190614067565b60405180910390f35b3480156104f757600080fd5b50610512600480360381019061050d9190613b2b565b611119565b60405161051f9190614104565b60405180910390f35b6105306112f2565b005b34801561053e57600080fd5b5061055960048036038101906105549190613a15565b6113ee565b005b34801561056757600080fd5b50610582600480360381019061057d91906139a8565b61140e565b60405161058f9190614045565b60405180910390f35b3480156105a457600080fd5b506105bf60048036038101906105ba9190613cfc565b6114bc565b005b3480156105cd57600080fd5b506105e860048036038101906105e39190613cfc565b611542565b6040516105f59190614104565b60405180910390f35b34801561060a57600080fd5b50610613611687565b6040516106209190614067565b60405180910390f35b34801561063557600080fd5b50610650600480360381019061064b9190613cb3565b61169a565b005b34801561065e57600080fd5b50610667611730565b6040516106749190614067565b60405180910390f35b34801561068957600080fd5b506106a4600480360381019061069f9190613c2c565b611743565b005b3480156106b257600080fd5b506106cd60048036038101906106c89190613cfc565b6117dc565b6040516106da9190613fde565b60405180910390f35b3480156106ef57600080fd5b5061070a600480360381019061070591906139a8565b6117f2565b6040516107179190614104565b60405180910390f35b34801561072c57600080fd5b506107356118c2565b005b34801561074357600080fd5b5061075e600480360381019061075991906139a8565b61194a565b60405161076b919061411f565b60405180910390f35b34801561078057600080fd5b5061078961196a565b6040516107969190613fde565b60405180910390f35b3480156107ab57600080fd5b506107b4611994565b6040516107c19190614104565b60405180910390f35b3480156107d657600080fd5b506107df61199a565b6040516107ec9190614082565b60405180910390f35b34801561080157600080fd5b5061080a611a2c565b6040516108179190614067565b60405180910390f35b61083a60048036038101906108359190613cfc565b611a3f565b005b34801561084857600080fd5b50610863600480360381019061085e9190613aeb565b611c46565b005b34801561087157600080fd5b5061087a611dbe565b005b34801561088857600080fd5b506108a3600480360381019061089e9190613b6b565b611e57565b005b3480156108b157600080fd5b506108cc60048036038101906108c79190613c2c565b611fff565b005b3480156108da57600080fd5b506108f560048036038101906108f09190613a68565b612098565b005b34801561090357600080fd5b5061090c6120eb565b6040516109199190614082565b60405180910390f35b34801561092e57600080fd5b5061094960048036038101906109449190613cfc565b612179565b6040516109569190614082565b60405180910390f35b34801561096b57600080fd5b506109746122d2565b6040516109819190614104565b60405180910390f35b34801561099657600080fd5b506109b160048036038101906109ac9190613cfc565b6122d8565b005b3480156109bf57600080fd5b506109da60048036038101906109d591906139d5565b61235e565b6040516109e79190614067565b60405180910390f35b3480156109fc57600080fd5b50610a176004803603810190610a129190613cb3565b6123f2565b005b348015610a2557600080fd5b50610a406004803603810190610a3b91906139a8565b612488565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b0d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b7557507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b855750610b8482612580565b5b9050919050565b610b946125ea565b73ffffffffffffffffffffffffffffffffffffffff16610bb261196a565b73ffffffffffffffffffffffffffffffffffffffff1614610c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bff906140e4565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b610c2d6125ea565b73ffffffffffffffffffffffffffffffffffffffff16610c4b61196a565b73ffffffffffffffffffffffffffffffffffffffff1614610ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c98906140e4565b60405180910390fd5b8051825114610caf57600080fd5b600080600090505b8351811015610d8a57828181518110610cd357610cd261462b565b5b602002602001015160126000868481518110610cf257610cf161462b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff160217905550828181518110610d5f57610d5e61462b565b5b602002602001015160ff1682610d7591906142b5565b91508080610d8290614524565b915050610cb7565b5080600f6000828254610d9d91906142b5565b92505081905550505050565b606060028054610db8906144c1565b80601f0160208091040260200160405190810160405280929190818152602001828054610de4906144c1565b8015610e315780601f10610e0657610100808354040283529160200191610e31565b820191906000526020600020905b815481529060010190602001808311610e1457829003601f168201915b5050505050905090565b600c5481565b6000610e4c826125f2565b610e82576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60118054610eca906144c1565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef6906144c1565b8015610f435780601f10610f1857610100808354040283529160200191610f43565b820191906000526020600020905b815481529060010190602001808311610f2657829003601f168201915b505050505081565b610f536125ea565b73ffffffffffffffffffffffffffffffffffffffff16610f7161196a565b73ffffffffffffffffffffffffffffffffffffffff1614610fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbe906140e4565b60405180910390fd5b80600e8190555050565b6000610fdc826117dc565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611044576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166110636125ea565b73ffffffffffffffffffffffffffffffffffffffff161415801561109557506110938161108e6125ea565b61235e565b155b156110cc576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110d783838361262c565b505050565b600b5481565b600060015460005403905090565b600e5481565b6111018383836126de565b505050565b601060029054906101000a900460ff1681565b6000611124836117f2565b821061115c576040517f0ddac30e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054905060008060005b838110156112e6576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001511561124557506112d9565b600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461128557806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112d757868414156112ce5781955050505050506112ec565b83806001019450505b505b8080600101915050611168565b50600080fd5b92915050565b6112fa6125ea565b73ffffffffffffffffffffffffffffffffffffffff1661131861196a565b73ffffffffffffffffffffffffffffffffffffffff161461136e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611365906140e4565b60405180910390fd5b600061137861196a565b73ffffffffffffffffffffffffffffffffffffffff164760405161139b90613fc9565b60006040518083038185875af1925050503d80600081146113d8576040519150601f19603f3d011682016040523d82523d6000602084013e6113dd565b606091505b50509050806113eb57600080fd5b50565b61140983838360405180602001604052806000815250612098565b505050565b6060600061141b836117f2565b905060008167ffffffffffffffff8111156114395761143861465a565b5b6040519080825280602002602001820160405280156114675781602001602082028036833780820191505090505b50905060005b828110156114b15761147f8582611119565b8282815181106114925761149161462b565b5b60200260200101818152505080806114a990614524565b91505061146d565b508092505050919050565b6114c46125ea565b73ffffffffffffffffffffffffffffffffffffffff166114e261196a565b73ffffffffffffffffffffffffffffffffffffffff1614611538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152f906140e4565b60405180910390fd5b80600b8190555050565b60008060005490506000805b8281101561164f576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161164157858314156116385781945050505050611682565b82806001019350505b50808060010191505061154e565b506040517fa723001c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b601060019054906101000a900460ff1681565b6116a26125ea565b73ffffffffffffffffffffffffffffffffffffffff166116c061196a565b73ffffffffffffffffffffffffffffffffffffffff1614611716576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170d906140e4565b60405180910390fd5b806009908051906020019061172c929190613628565b5050565b601060009054906101000a900460ff1681565b61174b6125ea565b73ffffffffffffffffffffffffffffffffffffffff1661176961196a565b73ffffffffffffffffffffffffffffffffffffffff16146117bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b6906140e4565b60405180910390fd5b80601060026101000a81548160ff02191690831515021790555050565b60006117e782612bcf565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561185a576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6118ca6125ea565b73ffffffffffffffffffffffffffffffffffffffff166118e861196a565b73ffffffffffffffffffffffffffffffffffffffff161461193e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611935906140e4565b60405180910390fd5b6119486000612e4b565b565b60126020528060005260406000206000915054906101000a900460ff1681565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f5481565b6060600380546119a9906144c1565b80601f01602080910402602001604051908101604052809291908181526020018280546119d5906144c1565b8015611a225780601f106119f757610100808354040283529160200191611a22565b820191906000526020600020905b815481529060010190602001808311611a0557829003601f168201915b5050505050905090565b601060039054906101000a900460ff1681565b6000611a496110e2565b9050601060009054906101000a900460ff1615611a6557600080fd5b60008211611a7257600080fd5b600d548282611a8191906142b5565b1115611a8c57600080fd5b611a9461196a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c3857600e54821115611ad557600080fd5b60011515601060029054906101000a900460ff1615151415611bdf5781601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff161015611b4d57600080fd5b81600c54611b5b919061433c565b341015611b6757600080fd5b81601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900460ff16611bc291906143ca565b92506101000a81548160ff021916908360ff160217905550611c37565b601060039054906101000a900460ff1615611c1c57600f54600d54611c049190614396565b8282611c1091906142b5565b1115611c1b57600080fd5b5b81600b54611c2a919061433c565b341015611c3657600080fd5b5b5b611c423383612f11565b5050565b611c4e6125ea565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cb3576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611cc06125ea565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611d6d6125ea565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611db29190614067565b60405180910390a35050565b611dc66125ea565b73ffffffffffffffffffffffffffffffffffffffff16611de461196a565b73ffffffffffffffffffffffffffffffffffffffff1614611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e31906140e4565b60405180910390fd5b6001601060016101000a81548160ff021916908315150217905550565b611e5f6125ea565b73ffffffffffffffffffffffffffffffffffffffff16611e7d61196a565b73ffffffffffffffffffffffffffffffffffffffff1614611ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eca906140e4565b60405180910390fd5b600080600090505b8251811015611fe15760126000848381518110611efb57611efa61462b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff1682611f5991906142b5565b9150600060126000858481518110611f7457611f7361462b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff1602179055508080611fd990614524565b915050611edb565b5080600f6000828254611ff49190614396565b925050819055505050565b6120076125ea565b73ffffffffffffffffffffffffffffffffffffffff1661202561196a565b73ffffffffffffffffffffffffffffffffffffffff161461207b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612072906140e4565b60405180910390fd5b80601060036101000a81548160ff02191690831515021790555050565b6120a38484846126de565b6120af84848484612f2f565b6120e5576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b600a80546120f8906144c1565b80601f0160208091040260200160405190810160405280929190818152602001828054612124906144c1565b80156121715780601f1061214657610100808354040283529160200191612171565b820191906000526020600020905b81548152906001019060200180831161215457829003601f168201915b505050505081565b6060612184826125f2565b6121c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ba906140a4565b60405180910390fd5b60001515601060019054906101000a900460ff161515141561227157601180546121ec906144c1565b80601f0160208091040260200160405190810160405280929190818152602001828054612218906144c1565b80156122655780601f1061223a57610100808354040283529160200191612265565b820191906000526020600020905b81548152906001019060200180831161224857829003601f168201915b505050505090506122cd565b600061227b6130bd565b9050600081511161229b57604051806020016040528060008152506122c9565b806122a58461314f565b600a6040516020016122b993929190613f98565b6040516020818303038152906040525b9150505b919050565b600d5481565b6122e06125ea565b73ffffffffffffffffffffffffffffffffffffffff166122fe61196a565b73ffffffffffffffffffffffffffffffffffffffff1614612354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234b906140e4565b60405180910390fd5b80600c8190555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6123fa6125ea565b73ffffffffffffffffffffffffffffffffffffffff1661241861196a565b73ffffffffffffffffffffffffffffffffffffffff161461246e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612465906140e4565b60405180910390fd5b8060119080519060200190612484929190613628565b5050565b6124906125ea565b73ffffffffffffffffffffffffffffffffffffffff166124ae61196a565b73ffffffffffffffffffffffffffffffffffffffff1614612504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fb906140e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256b906140c4565b60405180910390fd5b61257d81612e4b565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000805482108015612625575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006126e982612bcf565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166127106125ea565b73ffffffffffffffffffffffffffffffffffffffff1614806127435750612742826000015161273d6125ea565b61235e565b5b8061278857506127516125ea565b73ffffffffffffffffffffffffffffffffffffffff1661277084610e41565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806127c1576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461282a576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612891576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61289e85858560016132b0565b6128ae600084846000015161262c565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612b5f57600054811015612b5e5782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612bc885858560016132b6565b5050505050565b612bd76136ae565b6000829050600054811015612e14576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612e1257600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612cf6578092505050612e46565b5b600115612e1157818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612e0c578092505050612e46565b612cf7565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612f2b8282604051806020016040528060008152506132bc565b5050565b6000612f508473ffffffffffffffffffffffffffffffffffffffff166132ce565b156130b0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f796125ea565b8786866040518563ffffffff1660e01b8152600401612f9b9493929190613ff9565b602060405180830381600087803b158015612fb557600080fd5b505af1925050508015612fe657506040513d601f19601f82011682018060405250810190612fe39190613c86565b60015b613060573d8060008114613016576040519150601f19603f3d011682016040523d82523d6000602084013e61301b565b606091505b50600081511415613058576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506130b5565b600190505b949350505050565b6060600980546130cc906144c1565b80601f01602080910402602001604051908101604052809291908181526020018280546130f8906144c1565b80156131455780601f1061311a57610100808354040283529160200191613145565b820191906000526020600020905b81548152906001019060200180831161312857829003601f168201915b5050505050905090565b60606000821415613197576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506132ab565b600082905060005b600082146131c95780806131b290614524565b915050600a826131c2919061430b565b915061319f565b60008167ffffffffffffffff8111156131e5576131e461465a565b5b6040519080825280601f01601f1916602001820160405280156132175781602001600182028036833780820191505090505b5090505b600085146132a4576001826132309190614396565b9150600a8561323f919061456d565b603061324b91906142b5565b60f81b8183815181106132615761326061462b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561329d919061430b565b945061321b565b8093505050505b919050565b50505050565b50505050565b6132c983838360016132f1565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561335e576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415613399576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6133a660008683876132b0565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b8581101561360b57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48380156135bf57506135bd6000888488612f2f565b155b156135f6576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81806001019250508080600101915050613544565b50806000819055505061362160008683876132b6565b5050505050565b828054613634906144c1565b90600052602060002090601f016020900481019282613656576000855561369d565b82601f1061366f57805160ff191683800117855561369d565b8280016001018555821561369d579182015b8281111561369c578251825591602001919060010190613681565b5b5090506136aa91906136f1565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b8082111561370a5760008160009055506001016136f2565b5090565b600061372161371c8461415f565b61413a565b905080838252602082019050828560208602820111156137445761374361468e565b5b60005b85811015613774578161375a8882613872565b845260208401935060208301925050600181019050613747565b5050509392505050565b600061379161378c8461418b565b61413a565b905080838252602082019050828560208602820111156137b4576137b361468e565b5b60005b858110156137e457816137ca8882613993565b8452602084019350602083019250506001810190506137b7565b5050509392505050565b60006138016137fc846141b7565b61413a565b90508281526020810184848401111561381d5761381c614693565b5b61382884828561447f565b509392505050565b600061384361383e846141e8565b61413a565b90508281526020810184848401111561385f5761385e614693565b5b61386a84828561447f565b509392505050565b6000813590506138818161477d565b92915050565b600082601f83011261389c5761389b614689565b5b81356138ac84826020860161370e565b91505092915050565b600082601f8301126138ca576138c9614689565b5b81356138da84826020860161377e565b91505092915050565b6000813590506138f281614794565b92915050565b600081359050613907816147ab565b92915050565b60008151905061391c816147ab565b92915050565b600082601f83011261393757613936614689565b5b81356139478482602086016137ee565b91505092915050565b600082601f83011261396557613964614689565b5b8135613975848260208601613830565b91505092915050565b60008135905061398d816147c2565b92915050565b6000813590506139a2816147d9565b92915050565b6000602082840312156139be576139bd61469d565b5b60006139cc84828501613872565b91505092915050565b600080604083850312156139ec576139eb61469d565b5b60006139fa85828601613872565b9250506020613a0b85828601613872565b9150509250929050565b600080600060608486031215613a2e57613a2d61469d565b5b6000613a3c86828701613872565b9350506020613a4d86828701613872565b9250506040613a5e8682870161397e565b9150509250925092565b60008060008060808587031215613a8257613a8161469d565b5b6000613a9087828801613872565b9450506020613aa187828801613872565b9350506040613ab28782880161397e565b925050606085013567ffffffffffffffff811115613ad357613ad2614698565b5b613adf87828801613922565b91505092959194509250565b60008060408385031215613b0257613b0161469d565b5b6000613b1085828601613872565b9250506020613b21858286016138e3565b9150509250929050565b60008060408385031215613b4257613b4161469d565b5b6000613b5085828601613872565b9250506020613b618582860161397e565b9150509250929050565b600060208284031215613b8157613b8061469d565b5b600082013567ffffffffffffffff811115613b9f57613b9e614698565b5b613bab84828501613887565b91505092915050565b60008060408385031215613bcb57613bca61469d565b5b600083013567ffffffffffffffff811115613be957613be8614698565b5b613bf585828601613887565b925050602083013567ffffffffffffffff811115613c1657613c15614698565b5b613c22858286016138b5565b9150509250929050565b600060208284031215613c4257613c4161469d565b5b6000613c50848285016138e3565b91505092915050565b600060208284031215613c6f57613c6e61469d565b5b6000613c7d848285016138f8565b91505092915050565b600060208284031215613c9c57613c9b61469d565b5b6000613caa8482850161390d565b91505092915050565b600060208284031215613cc957613cc861469d565b5b600082013567ffffffffffffffff811115613ce757613ce6614698565b5b613cf384828501613950565b91505092915050565b600060208284031215613d1257613d1161469d565b5b6000613d208482850161397e565b91505092915050565b6000613d358383613f6b565b60208301905092915050565b613d4a816143fe565b82525050565b6000613d5b8261423e565b613d65818561426c565b9350613d7083614219565b8060005b83811015613da1578151613d888882613d29565b9750613d938361425f565b925050600181019050613d74565b5085935050505092915050565b613db781614410565b82525050565b6000613dc882614249565b613dd2818561427d565b9350613de281856020860161448e565b613deb816146a2565b840191505092915050565b6000613e0182614254565b613e0b8185614299565b9350613e1b81856020860161448e565b613e24816146a2565b840191505092915050565b6000613e3a82614254565b613e4481856142aa565b9350613e5481856020860161448e565b80840191505092915050565b60008154613e6d816144c1565b613e7781866142aa565b94506001821660008114613e925760018114613ea357613ed6565b60ff19831686528186019350613ed6565b613eac85614229565b60005b83811015613ece57815481890152600182019150602081019050613eaf565b838801955050505b50505092915050565b6000613eec603083614299565b9150613ef7826146b3565b604082019050919050565b6000613f0f602683614299565b9150613f1a82614702565b604082019050919050565b6000613f32602083614299565b9150613f3d82614751565b602082019050919050565b6000613f5560008361428e565b9150613f608261477a565b600082019050919050565b613f7481614468565b82525050565b613f8381614468565b82525050565b613f9281614472565b82525050565b6000613fa48286613e2f565b9150613fb08285613e2f565b9150613fbc8284613e60565b9150819050949350505050565b6000613fd482613f48565b9150819050919050565b6000602082019050613ff36000830184613d41565b92915050565b600060808201905061400e6000830187613d41565b61401b6020830186613d41565b6140286040830185613f7a565b818103606083015261403a8184613dbd565b905095945050505050565b6000602082019050818103600083015261405f8184613d50565b905092915050565b600060208201905061407c6000830184613dae565b92915050565b6000602082019050818103600083015261409c8184613df6565b905092915050565b600060208201905081810360008301526140bd81613edf565b9050919050565b600060208201905081810360008301526140dd81613f02565b9050919050565b600060208201905081810360008301526140fd81613f25565b9050919050565b60006020820190506141196000830184613f7a565b92915050565b60006020820190506141346000830184613f89565b92915050565b6000614144614155565b905061415082826144f3565b919050565b6000604051905090565b600067ffffffffffffffff82111561417a5761417961465a565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156141a6576141a561465a565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156141d2576141d161465a565b5b6141db826146a2565b9050602081019050919050565b600067ffffffffffffffff8211156142035761420261465a565b5b61420c826146a2565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006142c082614468565b91506142cb83614468565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614300576142ff61459e565b5b828201905092915050565b600061431682614468565b915061432183614468565b925082614331576143306145cd565b5b828204905092915050565b600061434782614468565b915061435283614468565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561438b5761438a61459e565b5b828202905092915050565b60006143a182614468565b91506143ac83614468565b9250828210156143bf576143be61459e565b5b828203905092915050565b60006143d582614472565b91506143e083614472565b9250828210156143f3576143f261459e565b5b828203905092915050565b600061440982614448565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156144ac578082015181840152602081019050614491565b838111156144bb576000848401525b50505050565b600060028204905060018216806144d957607f821691505b602082108114156144ed576144ec6145fc565b5b50919050565b6144fc826146a2565b810181811067ffffffffffffffff8211171561451b5761451a61465a565b5b80604052505050565b600061452f82614468565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156145625761456161459e565b5b600182019050919050565b600061457882614468565b915061458383614468565b925082614593576145926145cd565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231414d657461646174613a2055524920717565727920666f72206e60008201527f6f6e6578697374656e7420746f6b656e00000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b614786816143fe565b811461479157600080fd5b50565b61479d81614410565b81146147a857600080fd5b50565b6147b48161441c565b81146147bf57600080fd5b50565b6147cb81614468565b81146147d657600080fd5b50565b6147e281614472565b81146147ed57600080fd5b5056fea26469706673582212202a956730a09f3560790072a727122dd483e1fd4eecbbf39894c8e678a904fa8c64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000042697066733a2f2f516d555a714271464a667766337566733748327a7453567138717359634734346a37585046336f6f6e584836446b2f756e6c656173682e6a736f6e000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _initNotRevealedUri (string): ipfs://QmUZqBqFJfwf3ufs7H2ztSVq8qsYcG44j7XPF3oonXH6Dk/unleash.json
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000042
Arg [2] : 697066733a2f2f516d555a714271464a667766337566733748327a7453567138
Arg [3] : 717359634734346a37585046336f6f6e584836446b2f756e6c656173682e6a73
Arg [4] : 6f6e000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
46815:5174:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29800:422;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51744:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50778:399;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32490:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47003:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34090:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47306:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50406:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33653:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46965:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26959:276;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47088:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35061:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47230:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28582:1146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51831:155;;;:::i;:::-;;35302:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48963:390;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50186:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27528:754;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47195:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51632:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47163:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50655:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32299:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30286:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4730:103;;;;;;;;;;;;;:::i;:::-;;47399:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4079:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47127:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32659:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47269:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47765:1190;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34407:302;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50109:69;;;;;;;;;;;;;:::i;:::-;;51185:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50536:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35558:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46921:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49361:726;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47049:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50280:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34780:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51498:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4988:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29800:422;29947:4;30004:25;29989:40;;;:11;:40;;;;:105;;;;30061:33;30046:48;;;:11;:48;;;;29989:105;:172;;;;30126:35;30111:50;;;:11;:50;;;;29989:172;:225;;;;30178:36;30202:11;30178:23;:36::i;:::-;29989:225;29969:245;;29800:422;;;:::o;51744:79::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51809:6:::1;51800;;:15;;;;;;;;;;;;;;;;;;51744:79:::0;:::o;50778:399::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50932:6:::1;:13;50912:9;:16;:33;50904:42;;;::::0;::::1;;50959:17;50994:9:::0;51006:1:::1;50994:13;;50989:145;51013:9;:16;51009:1;:20;50989:145;;;51076:6;51083:1;51076:9;;;;;;;;:::i;:::-;;;;;;;;51051:8;:22;51060:9;51070:1;51060:12;;;;;;;;:::i;:::-;;;;;;;;51051:22;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;51113:6;51120:1;51113:9;;;;;;;;:::i;:::-;;;;;;;;51100:22;;;;;;;:::i;:::-;;;51031:3;;;;;:::i;:::-;;;;50989:145;;;;51160:9;51146:10;;:23;;;;;;;:::i;:::-;;;;;;;;50893:284;50778:399:::0;;:::o;32490:100::-;32544:13;32577:5;32570:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32490:100;:::o;47003:39::-;;;;:::o;34090:245::-;34194:7;34224:16;34232:7;34224;:16::i;:::-;34219:64;;34249:34;;;;;;;;;;;;;;34219:64;34303:15;:24;34319:7;34303:24;;;;;;;;;;;;;;;;;;;;;34296:31;;34090:245;;;:::o;47306:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50406:122::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50503:17:::1;50487:13;:33;;;;50406:122:::0;:::o;33653:371::-;33726:13;33742:24;33758:7;33742:15;:24::i;:::-;33726:40;;33787:5;33781:11;;:2;:11;;;33777:48;;;33801:24;;;;;;;;;;;;;;33777:48;33858:5;33842:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;33868:37;33885:5;33892:12;:10;:12::i;:::-;33868:16;:37::i;:::-;33867:38;33842:63;33838:138;;;33929:35;;;;;;;;;;;;;;33838:138;33988:28;33997:2;34001:7;34010:5;33988:8;:28::i;:::-;33715:309;33653:371;;:::o;46965:31::-;;;;:::o;26959:276::-;27012:7;27204:12;;27188:13;;:28;27181:35;;26959:276;:::o;47088:32::-;;;;:::o;35061:170::-;35195:28;35205:4;35211:2;35215:7;35195:9;:28::i;:::-;35061:170;;;:::o;47230:32::-;;;;;;;;;;;;;:::o;28582:1146::-;28707:7;28745:16;28755:5;28745:9;:16::i;:::-;28736:5;:25;28732:61;;28770:23;;;;;;;;;;;;;;28732:61;28804:22;28829:13;;28804:38;;28853:19;28883:25;29084:9;29079:557;29099:14;29095:1;:18;29079:557;;;29139:31;29173:11;:14;29185:1;29173:14;;;;;;;;;;;29139:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29210:9;:16;;;29206:73;;;29251:8;;;29206:73;29327:1;29301:28;;:9;:14;;;:28;;;29297:111;;29374:9;:14;;;29354:34;;29297:111;29451:5;29430:26;;:17;:26;;;29426:195;;;29500:5;29485:11;:20;29481:85;;;29541:1;29534:8;;;;;;;;;29481:85;29588:13;;;;;;;29426:195;29120:516;29079:557;29115:3;;;;;;;29079:557;;;;29712:8;;;28582:1146;;;;;:::o;51831:155::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51888:7:::1;51909;:5;:7::i;:::-;51901:21;;51930;51901:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51887:69;;;51975:2;51967:11;;;::::0;::::1;;51876:110;51831:155::o:0;35302:185::-;35440:39;35457:4;35463:2;35467:7;35440:39;;;;;;;;;;;;:16;:39::i;:::-;35302:185;;;:::o;48963:390::-;49050:16;49084:23;49110:17;49120:6;49110:9;:17::i;:::-;49084:43;;49138:25;49180:15;49166:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49138:58;;49212:9;49207:113;49227:15;49223:1;:19;49207:113;;;49278:30;49298:6;49306:1;49278:19;:30::i;:::-;49264:8;49273:1;49264:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;49244:3;;;;;:::i;:::-;;;;49207:113;;;;49337:8;49330:15;;;;48963:390;;;:::o;50186:86::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50256:8:::1;50249:4;:15;;;;50186:86:::0;:::o;27528:754::-;27631:7;27656:22;27681:13;;27656:38;;27705:19;27900:9;27895:328;27915:14;27911:1;:18;27895:328;;;27955:31;27989:11;:14;28001:1;27989:14;;;;;;;;;;;27955:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28027:9;:16;;;28022:186;;28087:5;28072:11;:20;28068:85;;;28128:1;28121:8;;;;;;;;28068:85;28175:13;;;;;;;28022:186;27936:287;27931:3;;;;;;;27895:328;;;;28251:23;;;;;;;;;;;;;;27528:754;;;;:::o;47195:28::-;;;;;;;;;;;;;:::o;51632:104::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51717:11:::1;51707:7;:21;;;;;;;;;;;;:::i;:::-;;51632:104:::0;:::o;47163:25::-;;;;;;;;;;;;;:::o;50655:115::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50746:16:::1;50731:12;;:31;;;;;;;;;;;;;;;;;;50655:115:::0;:::o;32299:124::-;32363:7;32390:20;32402:7;32390:11;:20::i;:::-;:25;;;32383:32;;32299:124;;;:::o;30286:206::-;30350:7;30391:1;30374:19;;:5;:19;;;30370:60;;;30402:28;;;;;;;;;;;;;;30370:60;30456:12;:19;30469:5;30456:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;30448:36;;30441:43;;30286:206;;;:::o;4730:103::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4795:30:::1;4822:1;4795:18;:30::i;:::-;4730:103::o:0;47399:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;4079:87::-;4125:7;4152:6;;;;;;;;;;;4145:13;;4079:87;:::o;47127:29::-;;;;:::o;32659:104::-;32715:13;32748:7;32741:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32659:104;:::o;47269:30::-;;;;;;;;;;;;;:::o;47765:1190::-;47826:14;47843:13;:11;:13::i;:::-;47826:30;;47876:6;;;;;;;;;;;47875:7;47867:16;;;;;;47916:1;47902:11;:15;47894:24;;;;;;47961:9;;47946:11;47937:6;:20;;;;:::i;:::-;:33;;47929:42;;;;;;48002:7;:5;:7::i;:::-;47988:21;;:10;:21;;;47984:917;;48106:13;;48091:11;:28;;48083:37;;;;;;48193:4;48177:20;;:12;;;;;;;;;;;:20;;;48173:717;;;48308:11;48284:8;:20;48293:10;48284:20;;;;;;;;;;;;;;;;;;;;;;;;;:35;;;;48276:44;;;;;;48424:11;48409:12;;:26;;;;:::i;:::-;48396:9;:39;;48388:48;;;;;;48552:11;48522:8;:20;48531:10;48522:20;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;48173:717;;;48658:11;;;;;;;;;;;48654:119;;;48741:10;;48729:9;;:22;;;;:::i;:::-;48712:11;48703:6;:20;;;;:::i;:::-;48702:50;;48694:59;;;;;;48654:119;48862:11;48855:4;;:18;;;;:::i;:::-;48842:9;:31;;48834:40;;;;;;48173:717;47984:917;48913:34;48923:10;48935:11;48913:9;:34::i;:::-;47815:1140;47765:1190;:::o;34407:302::-;34533:12;:10;:12::i;:::-;34521:24;;:8;:24;;;34517:54;;;34554:17;;;;;;;;;;;;;;34517:54;34629:8;34584:18;:32;34603:12;:10;:12::i;:::-;34584:32;;;;;;;;;;;;;;;:42;34617:8;34584:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;34682:8;34653:48;;34668:12;:10;:12::i;:::-;34653:48;;;34692:8;34653:48;;;;;;:::i;:::-;;;;;;;;34407:302;;:::o;50109:69::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50166:4:::1;50155:8;;:15;;;;;;;;;;;;;;;;;;50109:69::o:0;51185:305::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51267:17:::1;51302:9:::0;51314:1:::1;51302:13;;51297:150;51321:9;:16;51317:1;:20;51297:150;;;51372:8;:22;51381:9;51391:1;51381:12;;;;;;;;:::i;:::-;;;;;;;;51372:22;;;;;;;;;;;;;;;;;;;;;;;;;51359:35;;;;;;;:::i;:::-;;;51434:1;51409:8;:22;51418:9;51428:1;51418:12;;;;;;;;:::i;:::-;;;;;;;;51409:22;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;51339:3;;;;;:::i;:::-;;;;51297:150;;;;51473:9;51459:10;;:23;;;;;;;:::i;:::-;;;;;;;;51256:234;51185:305:::0;:::o;50536:111::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50624:15:::1;50610:11;;:29;;;;;;;;;;;;;;;;;;50536:111:::0;:::o;35558:342::-;35725:28;35735:4;35741:2;35745:7;35725:9;:28::i;:::-;35769:48;35792:4;35798:2;35802:7;35811:5;35769:22;:48::i;:::-;35764:129;;35841:40;;;;;;;;;;;;;;35764:129;35558:342;;;;:::o;46921:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49361:726::-;49479:13;49532:16;49540:7;49532;:16::i;:::-;49510:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;49653:5;49641:17;;:8;;;;;;;;;;;:17;;;49637:71;;;49682:14;49675:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49637:71;49720:28;49751:10;:8;:10::i;:::-;49720:41;;49823:1;49798:14;49792:28;:32;:287;;;;;;;;;;;;;;;;;49916:14;49957:18;:7;:16;:18::i;:::-;50002:13;49873:165;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49792:287;49772:307;;;49361:726;;;;:::o;47049:32::-;;;;:::o;50280:118::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50374:16:::1;50359:12;:31;;;;50280:118:::0;:::o;34780:214::-;34922:4;34951:18;:25;34970:5;34951:25;;;;;;;;;;;;;;;:35;34977:8;34951:35;;;;;;;;;;;;;;;;;;;;;;;;;34944:42;;34780:214;;;;:::o;51498:126::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51601:15:::1;51584:14;:32;;;;;;;;;;;;:::i;:::-;;51498:126:::0;:::o;4988:201::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5097:1:::1;5077:22;;:8;:22;;;;5069:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5153:28;5172:8;5153:18;:28::i;:::-;4988:201:::0;:::o;16863:157::-;16948:4;16987:25;16972:40;;;:11;:40;;;;16965:47;;16863:157;;;:::o;2803:98::-;2856:7;2883:10;2876:17;;2803:98;:::o;36155:144::-;36212:4;36246:13;;36236:7;:23;:55;;;;;36264:11;:20;36276:7;36264:20;;;;;;;;;;;:27;;;;;;;;;;;;36263:28;36236:55;36229:62;;36155:144;;;:::o;43473:196::-;43615:2;43588:15;:24;43604:7;43588:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;43653:7;43649:2;43633:28;;43642:5;43633:28;;;;;;;;;;;;43473:196;;;:::o;38923:2138::-;39038:35;39076:20;39088:7;39076:11;:20::i;:::-;39038:58;;39109:22;39151:13;:18;;;39135:34;;:12;:10;:12::i;:::-;:34;;;:101;;;;39186:50;39203:13;:18;;;39223:12;:10;:12::i;:::-;39186:16;:50::i;:::-;39135:101;:154;;;;39277:12;:10;:12::i;:::-;39253:36;;:20;39265:7;39253:11;:20::i;:::-;:36;;;39135:154;39109:181;;39308:17;39303:66;;39334:35;;;;;;;;;;;;;;39303:66;39406:4;39384:26;;:13;:18;;;:26;;;39380:67;;39419:28;;;;;;;;;;;;;;39380:67;39476:1;39462:16;;:2;:16;;;39458:52;;;39487:23;;;;;;;;;;;;;;39458:52;39523:43;39545:4;39551:2;39555:7;39564:1;39523:21;:43::i;:::-;39631:49;39648:1;39652:7;39661:13;:18;;;39631:8;:49::i;:::-;40006:1;39976:12;:18;39989:4;39976:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40050:1;40022:12;:16;40035:2;40022:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40096:2;40068:11;:20;40080:7;40068:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;40158:15;40113:11;:20;40125:7;40113:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;40426:19;40458:1;40448:7;:11;40426:33;;40519:1;40478:43;;:11;:24;40490:11;40478:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;40474:471;;;40703:13;;40689:11;:27;40685:245;;;40773:13;:18;;;40741:11;:24;40753:11;40741:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;40856:13;:54;;;40814:11;:24;40826:11;40814:24;;;;;;;;;;;:39;;;:96;;;;;;;;;;;;;;;;;;40685:245;40474:471;39951:1005;40992:7;40988:2;40973:27;;40982:4;40973:27;;;;;;;;;;;;41011:42;41032:4;41038:2;41042:7;41051:1;41011:20;:42::i;:::-;39027:2034;;38923:2138;;;:::o;31124:1113::-;31212:21;;:::i;:::-;31251:12;31266:7;31251:22;;31322:13;;31315:4;:20;31311:859;;;31356:31;31390:11;:17;31402:4;31390:17;;;;;;;;;;;31356:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31431:9;:16;;;31426:729;;31502:1;31476:28;;:9;:14;;;:28;;;31472:101;;31540:9;31533:16;;;;;;31472:101;31875:261;31882:4;31875:261;;;31915:6;;;;;;;;31960:11;:17;31972:4;31960:17;;;;;;;;;;;31948:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32034:1;32008:28;;:9;:14;;;:28;;;32004:109;;32076:9;32069:16;;;;;;32004:109;31875:261;;;31426:729;31337:833;31311:859;32198:31;;;;;;;;;;;;;;31124:1113;;;;:::o;5349:191::-;5423:16;5442:6;;;;;;;;;;;5423:25;;5468:8;5459:6;;:17;;;;;;;;;;;;;;;;;;5523:8;5492:40;;5513:8;5492:40;;;;;;;;;;;;5412:128;5349:191;:::o;36307:104::-;36376:27;36386:2;36390:8;36376:27;;;;;;;;;;;;:9;:27::i;:::-;36307:104;;:::o;44234:923::-;44389:4;44410:15;:2;:13;;;:15::i;:::-;44406:744;;;44479:2;44463:36;;;44522:12;:10;:12::i;:::-;44557:4;44584:7;44614:5;44463:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;44442:653;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44842:1;44825:6;:13;:18;44821:259;;;44875:40;;;;;;;;;;;;;;44821:259;45030:6;45024:13;45015:6;45011:2;45007:15;45000:38;44442:653;44712:45;;;44702:55;;;:6;:55;;;;44695:62;;;;;44406:744;45134:4;45127:11;;44234:923;;;;;;;:::o;47634:108::-;47694:13;47727:7;47720:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47634:108;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;45805:159::-;;;;;:::o;46623:158::-;;;;;:::o;36774:163::-;36897:32;36903:2;36907:8;36917:5;36924:4;36897:5;:32::i;:::-;36774:163;;;:::o;6780:326::-;6840:4;7097:1;7075:7;:19;;;:23;7068:30;;6780:326;;;:::o;37196:1473::-;37335:20;37358:13;;37335:36;;37400:1;37386:16;;:2;:16;;;37382:48;;;37411:19;;;;;;;;;;;;;;37382:48;37457:1;37445:8;:13;37441:44;;;37467:18;;;;;;;;;;;;;;37441:44;37498:61;37528:1;37532:2;37536:12;37550:8;37498:21;:61::i;:::-;37871:8;37836:12;:16;37849:2;37836:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37935:8;37895:12;:16;37908:2;37895:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37994:2;37961:11;:25;37973:12;37961:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;38061:15;38011:11;:25;38023:12;38011:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;38094:20;38117:12;38094:35;;38151:9;38146:389;38166:8;38162:1;:12;38146:389;;;38230:12;38226:2;38205:38;;38222:1;38205:38;;;;;;;;;;;;38288:4;:89;;;;;38318:59;38349:1;38353:2;38357:12;38371:5;38318:22;:59::i;:::-;38317:60;38288:89;38262:225;;;38427:40;;;;;;;;;;;;;;38262:225;38505:14;;;;;;;38176:3;;;;;;;38146:389;;;;38567:12;38551:13;:28;;;;37811:780;38601:60;38630:1;38634:2;38638:12;38652:8;38601:20;:60::i;:::-;37324:1345;37196:1473;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;767:716::-;861:5;886:79;902:62;957:6;902:62;:::i;:::-;886:79;:::i;:::-;877:88;;985:5;1014:6;1007:5;1000:21;1048:4;1041:5;1037:16;1030:23;;1074:6;1124:3;1116:4;1108:6;1104:17;1099:3;1095:27;1092:36;1089:143;;;1143:79;;:::i;:::-;1089:143;1256:1;1241:236;1266:6;1263:1;1260:13;1241:236;;;1334:3;1363:35;1394:3;1382:10;1363:35;:::i;:::-;1358:3;1351:48;1428:4;1423:3;1419:14;1412:21;;1462:4;1457:3;1453:14;1446:21;;1301:176;1288:1;1285;1281:9;1276:14;;1241:236;;;1245:14;867:616;;767:716;;;;;:::o;1489:410::-;1566:5;1591:65;1607:48;1648:6;1607:48;:::i;:::-;1591:65;:::i;:::-;1582:74;;1679:6;1672:5;1665:21;1717:4;1710:5;1706:16;1755:3;1746:6;1741:3;1737:16;1734:25;1731:112;;;1762:79;;:::i;:::-;1731:112;1852:41;1886:6;1881:3;1876;1852:41;:::i;:::-;1572:327;1489:410;;;;;:::o;1905:412::-;1983:5;2008:66;2024:49;2066:6;2024:49;:::i;:::-;2008:66;:::i;:::-;1999:75;;2097:6;2090:5;2083:21;2135:4;2128:5;2124:16;2173:3;2164:6;2159:3;2155:16;2152:25;2149:112;;;2180:79;;:::i;:::-;2149:112;2270:41;2304:6;2299:3;2294;2270:41;:::i;:::-;1989:328;1905:412;;;;;:::o;2323:139::-;2369:5;2407:6;2394:20;2385:29;;2423:33;2450:5;2423:33;:::i;:::-;2323:139;;;;:::o;2485:370::-;2556:5;2605:3;2598:4;2590:6;2586:17;2582:27;2572:122;;2613:79;;:::i;:::-;2572:122;2730:6;2717:20;2755:94;2845:3;2837:6;2830:4;2822:6;2818:17;2755:94;:::i;:::-;2746:103;;2562:293;2485:370;;;;:::o;2876:366::-;2945:5;2994:3;2987:4;2979:6;2975:17;2971:27;2961:122;;3002:79;;:::i;:::-;2961:122;3119:6;3106:20;3144:92;3232:3;3224:6;3217:4;3209:6;3205:17;3144:92;:::i;:::-;3135:101;;2951:291;2876:366;;;;:::o;3248:133::-;3291:5;3329:6;3316:20;3307:29;;3345:30;3369:5;3345:30;:::i;:::-;3248:133;;;;:::o;3387:137::-;3432:5;3470:6;3457:20;3448:29;;3486:32;3512:5;3486:32;:::i;:::-;3387:137;;;;:::o;3530:141::-;3586:5;3617:6;3611:13;3602:22;;3633:32;3659:5;3633:32;:::i;:::-;3530:141;;;;:::o;3690:338::-;3745:5;3794:3;3787:4;3779:6;3775:17;3771:27;3761:122;;3802:79;;:::i;:::-;3761:122;3919:6;3906:20;3944:78;4018:3;4010:6;4003:4;3995:6;3991:17;3944:78;:::i;:::-;3935:87;;3751:277;3690:338;;;;:::o;4048:340::-;4104:5;4153:3;4146:4;4138:6;4134:17;4130:27;4120:122;;4161:79;;:::i;:::-;4120:122;4278:6;4265:20;4303:79;4378:3;4370:6;4363:4;4355:6;4351:17;4303:79;:::i;:::-;4294:88;;4110:278;4048:340;;;;:::o;4394:139::-;4440:5;4478:6;4465:20;4456:29;;4494:33;4521:5;4494:33;:::i;:::-;4394:139;;;;:::o;4539:135::-;4583:5;4621:6;4608:20;4599:29;;4637:31;4662:5;4637:31;:::i;:::-;4539:135;;;;:::o;4680:329::-;4739:6;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;4680:329;;;;:::o;5015:474::-;5083:6;5091;5140:2;5128:9;5119:7;5115:23;5111:32;5108:119;;;5146:79;;:::i;:::-;5108:119;5266:1;5291:53;5336:7;5327:6;5316:9;5312:22;5291:53;:::i;:::-;5281:63;;5237:117;5393:2;5419:53;5464:7;5455:6;5444:9;5440:22;5419:53;:::i;:::-;5409:63;;5364:118;5015:474;;;;;:::o;5495:619::-;5572:6;5580;5588;5637:2;5625:9;5616:7;5612:23;5608:32;5605:119;;;5643:79;;:::i;:::-;5605:119;5763:1;5788:53;5833:7;5824:6;5813:9;5809:22;5788:53;:::i;:::-;5778:63;;5734:117;5890:2;5916:53;5961:7;5952:6;5941:9;5937:22;5916:53;:::i;:::-;5906:63;;5861:118;6018:2;6044:53;6089:7;6080:6;6069:9;6065:22;6044:53;:::i;:::-;6034:63;;5989:118;5495:619;;;;;:::o;6120:943::-;6215:6;6223;6231;6239;6288:3;6276:9;6267:7;6263:23;6259:33;6256:120;;;6295:79;;:::i;:::-;6256:120;6415:1;6440:53;6485:7;6476:6;6465:9;6461:22;6440:53;:::i;:::-;6430:63;;6386:117;6542:2;6568:53;6613:7;6604:6;6593:9;6589:22;6568:53;:::i;:::-;6558:63;;6513:118;6670:2;6696:53;6741:7;6732:6;6721:9;6717:22;6696:53;:::i;:::-;6686:63;;6641:118;6826:2;6815:9;6811:18;6798:32;6857:18;6849:6;6846:30;6843:117;;;6879:79;;:::i;:::-;6843:117;6984:62;7038:7;7029:6;7018:9;7014:22;6984:62;:::i;:::-;6974:72;;6769:287;6120:943;;;;;;;:::o;7069:468::-;7134:6;7142;7191:2;7179:9;7170:7;7166:23;7162:32;7159:119;;;7197:79;;:::i;:::-;7159:119;7317:1;7342:53;7387:7;7378:6;7367:9;7363:22;7342:53;:::i;:::-;7332:63;;7288:117;7444:2;7470:50;7512:7;7503:6;7492:9;7488:22;7470:50;:::i;:::-;7460:60;;7415:115;7069:468;;;;;:::o;7543:474::-;7611:6;7619;7668:2;7656:9;7647:7;7643:23;7639:32;7636:119;;;7674:79;;:::i;:::-;7636:119;7794:1;7819:53;7864:7;7855:6;7844:9;7840:22;7819:53;:::i;:::-;7809:63;;7765:117;7921:2;7947:53;7992:7;7983:6;7972:9;7968:22;7947:53;:::i;:::-;7937:63;;7892:118;7543:474;;;;;:::o;8023:539::-;8107:6;8156:2;8144:9;8135:7;8131:23;8127:32;8124:119;;;8162:79;;:::i;:::-;8124:119;8310:1;8299:9;8295:17;8282:31;8340:18;8332:6;8329:30;8326:117;;;8362:79;;:::i;:::-;8326:117;8467:78;8537:7;8528:6;8517:9;8513:22;8467:78;:::i;:::-;8457:88;;8253:302;8023:539;;;;:::o;8568:890::-;8684:6;8692;8741:2;8729:9;8720:7;8716:23;8712:32;8709:119;;;8747:79;;:::i;:::-;8709:119;8895:1;8884:9;8880:17;8867:31;8925:18;8917:6;8914:30;8911:117;;;8947:79;;:::i;:::-;8911:117;9052:78;9122:7;9113:6;9102:9;9098:22;9052:78;:::i;:::-;9042:88;;8838:302;9207:2;9196:9;9192:18;9179:32;9238:18;9230:6;9227:30;9224:117;;;9260:79;;:::i;:::-;9224:117;9365:76;9433:7;9424:6;9413:9;9409:22;9365:76;:::i;:::-;9355:86;;9150:301;8568:890;;;;;:::o;9464:323::-;9520:6;9569:2;9557:9;9548:7;9544:23;9540:32;9537:119;;;9575:79;;:::i;:::-;9537:119;9695:1;9720:50;9762:7;9753:6;9742:9;9738:22;9720:50;:::i;:::-;9710:60;;9666:114;9464:323;;;;:::o;9793:327::-;9851:6;9900:2;9888:9;9879:7;9875:23;9871:32;9868:119;;;9906:79;;:::i;:::-;9868:119;10026:1;10051:52;10095:7;10086:6;10075:9;10071:22;10051:52;:::i;:::-;10041:62;;9997:116;9793:327;;;;:::o;10126:349::-;10195:6;10244:2;10232:9;10223:7;10219:23;10215:32;10212:119;;;10250:79;;:::i;:::-;10212:119;10370:1;10395:63;10450:7;10441:6;10430:9;10426:22;10395:63;:::i;:::-;10385:73;;10341:127;10126:349;;;;:::o;10481:509::-;10550:6;10599:2;10587:9;10578:7;10574:23;10570:32;10567:119;;;10605:79;;:::i;:::-;10567:119;10753:1;10742:9;10738:17;10725:31;10783:18;10775:6;10772:30;10769:117;;;10805:79;;:::i;:::-;10769:117;10910:63;10965:7;10956:6;10945:9;10941:22;10910:63;:::i;:::-;10900:73;;10696:287;10481:509;;;;:::o;10996:329::-;11055:6;11104:2;11092:9;11083:7;11079:23;11075:32;11072:119;;;11110:79;;:::i;:::-;11072:119;11230:1;11255:53;11300:7;11291:6;11280:9;11276:22;11255:53;:::i;:::-;11245:63;;11201:117;10996:329;;;;:::o;11331:179::-;11400:10;11421:46;11463:3;11455:6;11421:46;:::i;:::-;11499:4;11494:3;11490:14;11476:28;;11331:179;;;;:::o;11516:118::-;11603:24;11621:5;11603:24;:::i;:::-;11598:3;11591:37;11516:118;;:::o;11670:732::-;11789:3;11818:54;11866:5;11818:54;:::i;:::-;11888:86;11967:6;11962:3;11888:86;:::i;:::-;11881:93;;11998:56;12048:5;11998:56;:::i;:::-;12077:7;12108:1;12093:284;12118:6;12115:1;12112:13;12093:284;;;12194:6;12188:13;12221:63;12280:3;12265:13;12221:63;:::i;:::-;12214:70;;12307:60;12360:6;12307:60;:::i;:::-;12297:70;;12153:224;12140:1;12137;12133:9;12128:14;;12093:284;;;12097:14;12393:3;12386:10;;11794:608;;;11670:732;;;;:::o;12408:109::-;12489:21;12504:5;12489:21;:::i;:::-;12484:3;12477:34;12408:109;;:::o;12523:360::-;12609:3;12637:38;12669:5;12637:38;:::i;:::-;12691:70;12754:6;12749:3;12691:70;:::i;:::-;12684:77;;12770:52;12815:6;12810:3;12803:4;12796:5;12792:16;12770:52;:::i;:::-;12847:29;12869:6;12847:29;:::i;:::-;12842:3;12838:39;12831:46;;12613:270;12523:360;;;;:::o;12889:364::-;12977:3;13005:39;13038:5;13005:39;:::i;:::-;13060:71;13124:6;13119:3;13060:71;:::i;:::-;13053:78;;13140:52;13185:6;13180:3;13173:4;13166:5;13162:16;13140:52;:::i;:::-;13217:29;13239:6;13217:29;:::i;:::-;13212:3;13208:39;13201:46;;12981:272;12889:364;;;;:::o;13259:377::-;13365:3;13393:39;13426:5;13393:39;:::i;:::-;13448:89;13530:6;13525:3;13448:89;:::i;:::-;13441:96;;13546:52;13591:6;13586:3;13579:4;13572:5;13568:16;13546:52;:::i;:::-;13623:6;13618:3;13614:16;13607:23;;13369:267;13259:377;;;;:::o;13666:845::-;13769:3;13806:5;13800:12;13835:36;13861:9;13835:36;:::i;:::-;13887:89;13969:6;13964:3;13887:89;:::i;:::-;13880:96;;14007:1;13996:9;13992:17;14023:1;14018:137;;;;14169:1;14164:341;;;;13985:520;;14018:137;14102:4;14098:9;14087;14083:25;14078:3;14071:38;14138:6;14133:3;14129:16;14122:23;;14018:137;;14164:341;14231:38;14263:5;14231:38;:::i;:::-;14291:1;14305:154;14319:6;14316:1;14313:13;14305:154;;;14393:7;14387:14;14383:1;14378:3;14374:11;14367:35;14443:1;14434:7;14430:15;14419:26;;14341:4;14338:1;14334:12;14329:17;;14305:154;;;14488:6;14483:3;14479:16;14472:23;;14171:334;;13985:520;;13773:738;;13666:845;;;;:::o;14517:366::-;14659:3;14680:67;14744:2;14739:3;14680:67;:::i;:::-;14673:74;;14756:93;14845:3;14756:93;:::i;:::-;14874:2;14869:3;14865:12;14858:19;;14517:366;;;:::o;14889:::-;15031:3;15052:67;15116:2;15111:3;15052:67;:::i;:::-;15045:74;;15128:93;15217:3;15128:93;:::i;:::-;15246:2;15241:3;15237:12;15230:19;;14889:366;;;:::o;15261:::-;15403:3;15424:67;15488:2;15483:3;15424:67;:::i;:::-;15417:74;;15500:93;15589:3;15500:93;:::i;:::-;15618:2;15613:3;15609:12;15602:19;;15261:366;;;:::o;15633:398::-;15792:3;15813:83;15894:1;15889:3;15813:83;:::i;:::-;15806:90;;15905:93;15994:3;15905:93;:::i;:::-;16023:1;16018:3;16014:11;16007:18;;15633:398;;;:::o;16037:108::-;16114:24;16132:5;16114:24;:::i;:::-;16109:3;16102:37;16037:108;;:::o;16151:118::-;16238:24;16256:5;16238:24;:::i;:::-;16233:3;16226:37;16151:118;;:::o;16275:112::-;16358:22;16374:5;16358:22;:::i;:::-;16353:3;16346:35;16275:112;;:::o;16393:589::-;16618:3;16640:95;16731:3;16722:6;16640:95;:::i;:::-;16633:102;;16752:95;16843:3;16834:6;16752:95;:::i;:::-;16745:102;;16864:92;16952:3;16943:6;16864:92;:::i;:::-;16857:99;;16973:3;16966:10;;16393:589;;;;;;:::o;16988:379::-;17172:3;17194:147;17337:3;17194:147;:::i;:::-;17187:154;;17358:3;17351:10;;16988:379;;;:::o;17373:222::-;17466:4;17504:2;17493:9;17489:18;17481:26;;17517:71;17585:1;17574:9;17570:17;17561:6;17517:71;:::i;:::-;17373:222;;;;:::o;17601:640::-;17796:4;17834:3;17823:9;17819:19;17811:27;;17848:71;17916:1;17905:9;17901:17;17892:6;17848:71;:::i;:::-;17929:72;17997:2;17986:9;17982:18;17973:6;17929:72;:::i;:::-;18011;18079:2;18068:9;18064:18;18055:6;18011:72;:::i;:::-;18130:9;18124:4;18120:20;18115:2;18104:9;18100:18;18093:48;18158:76;18229:4;18220:6;18158:76;:::i;:::-;18150:84;;17601:640;;;;;;;:::o;18247:373::-;18390:4;18428:2;18417:9;18413:18;18405:26;;18477:9;18471:4;18467:20;18463:1;18452:9;18448:17;18441:47;18505:108;18608:4;18599:6;18505:108;:::i;:::-;18497:116;;18247:373;;;;:::o;18626:210::-;18713:4;18751:2;18740:9;18736:18;18728:26;;18764:65;18826:1;18815:9;18811:17;18802:6;18764:65;:::i;:::-;18626:210;;;;:::o;18842:313::-;18955:4;18993:2;18982:9;18978:18;18970:26;;19042:9;19036:4;19032:20;19028:1;19017:9;19013:17;19006:47;19070:78;19143:4;19134:6;19070:78;:::i;:::-;19062:86;;18842:313;;;;:::o;19161:419::-;19327:4;19365:2;19354:9;19350:18;19342:26;;19414:9;19408:4;19404:20;19400:1;19389:9;19385:17;19378:47;19442:131;19568:4;19442:131;:::i;:::-;19434:139;;19161:419;;;:::o;19586:::-;19752:4;19790:2;19779:9;19775:18;19767:26;;19839:9;19833:4;19829:20;19825:1;19814:9;19810:17;19803:47;19867:131;19993:4;19867:131;:::i;:::-;19859:139;;19586:419;;;:::o;20011:::-;20177:4;20215:2;20204:9;20200:18;20192:26;;20264:9;20258:4;20254:20;20250:1;20239:9;20235:17;20228:47;20292:131;20418:4;20292:131;:::i;:::-;20284:139;;20011:419;;;:::o;20436:222::-;20529:4;20567:2;20556:9;20552:18;20544:26;;20580:71;20648:1;20637:9;20633:17;20624:6;20580:71;:::i;:::-;20436:222;;;;:::o;20664:214::-;20753:4;20791:2;20780:9;20776:18;20768:26;;20804:67;20868:1;20857:9;20853:17;20844:6;20804:67;:::i;:::-;20664:214;;;;:::o;20884:129::-;20918:6;20945:20;;:::i;:::-;20935:30;;20974:33;21002:4;20994:6;20974:33;:::i;:::-;20884:129;;;:::o;21019:75::-;21052:6;21085:2;21079:9;21069:19;;21019:75;:::o;21100:311::-;21177:4;21267:18;21259:6;21256:30;21253:56;;;21289:18;;:::i;:::-;21253:56;21339:4;21331:6;21327:17;21319:25;;21399:4;21393;21389:15;21381:23;;21100:311;;;:::o;21417:309::-;21492:4;21582:18;21574:6;21571:30;21568:56;;;21604:18;;:::i;:::-;21568:56;21654:4;21646:6;21642:17;21634:25;;21714:4;21708;21704:15;21696:23;;21417:309;;;:::o;21732:307::-;21793:4;21883:18;21875:6;21872:30;21869:56;;;21905:18;;:::i;:::-;21869:56;21943:29;21965:6;21943:29;:::i;:::-;21935:37;;22027:4;22021;22017:15;22009:23;;21732:307;;;:::o;22045:308::-;22107:4;22197:18;22189:6;22186:30;22183:56;;;22219:18;;:::i;:::-;22183:56;22257:29;22279:6;22257:29;:::i;:::-;22249:37;;22341:4;22335;22331:15;22323:23;;22045:308;;;:::o;22359:132::-;22426:4;22449:3;22441:11;;22479:4;22474:3;22470:14;22462:22;;22359:132;;;:::o;22497:141::-;22546:4;22569:3;22561:11;;22592:3;22589:1;22582:14;22626:4;22623:1;22613:18;22605:26;;22497:141;;;:::o;22644:114::-;22711:6;22745:5;22739:12;22729:22;;22644:114;;;:::o;22764:98::-;22815:6;22849:5;22843:12;22833:22;;22764:98;;;:::o;22868:99::-;22920:6;22954:5;22948:12;22938:22;;22868:99;;;:::o;22973:113::-;23043:4;23075;23070:3;23066:14;23058:22;;22973:113;;;:::o;23092:184::-;23191:11;23225:6;23220:3;23213:19;23265:4;23260:3;23256:14;23241:29;;23092:184;;;;:::o;23282:168::-;23365:11;23399:6;23394:3;23387:19;23439:4;23434:3;23430:14;23415:29;;23282:168;;;;:::o;23456:147::-;23557:11;23594:3;23579:18;;23456:147;;;;:::o;23609:169::-;23693:11;23727:6;23722:3;23715:19;23767:4;23762:3;23758:14;23743:29;;23609:169;;;;:::o;23784:148::-;23886:11;23923:3;23908:18;;23784:148;;;;:::o;23938:305::-;23978:3;23997:20;24015:1;23997:20;:::i;:::-;23992:25;;24031:20;24049:1;24031:20;:::i;:::-;24026:25;;24185:1;24117:66;24113:74;24110:1;24107:81;24104:107;;;24191:18;;:::i;:::-;24104:107;24235:1;24232;24228:9;24221:16;;23938:305;;;;:::o;24249:185::-;24289:1;24306:20;24324:1;24306:20;:::i;:::-;24301:25;;24340:20;24358:1;24340:20;:::i;:::-;24335:25;;24379:1;24369:35;;24384:18;;:::i;:::-;24369:35;24426:1;24423;24419:9;24414:14;;24249:185;;;;:::o;24440:348::-;24480:7;24503:20;24521:1;24503:20;:::i;:::-;24498:25;;24537:20;24555:1;24537:20;:::i;:::-;24532:25;;24725:1;24657:66;24653:74;24650:1;24647:81;24642:1;24635:9;24628:17;24624:105;24621:131;;;24732:18;;:::i;:::-;24621:131;24780:1;24777;24773:9;24762:20;;24440:348;;;;:::o;24794:191::-;24834:4;24854:20;24872:1;24854:20;:::i;:::-;24849:25;;24888:20;24906:1;24888:20;:::i;:::-;24883:25;;24927:1;24924;24921:8;24918:34;;;24932:18;;:::i;:::-;24918:34;24977:1;24974;24970:9;24962:17;;24794:191;;;;:::o;24991:185::-;25029:4;25049:18;25065:1;25049:18;:::i;:::-;25044:23;;25081:18;25097:1;25081:18;:::i;:::-;25076:23;;25118:1;25115;25112:8;25109:34;;;25123:18;;:::i;:::-;25109:34;25168:1;25165;25161:9;25153:17;;24991:185;;;;:::o;25182:96::-;25219:7;25248:24;25266:5;25248:24;:::i;:::-;25237:35;;25182:96;;;:::o;25284:90::-;25318:7;25361:5;25354:13;25347:21;25336:32;;25284:90;;;:::o;25380:149::-;25416:7;25456:66;25449:5;25445:78;25434:89;;25380:149;;;:::o;25535:126::-;25572:7;25612:42;25605:5;25601:54;25590:65;;25535:126;;;:::o;25667:77::-;25704:7;25733:5;25722:16;;25667:77;;;:::o;25750:86::-;25785:7;25825:4;25818:5;25814:16;25803:27;;25750:86;;;:::o;25842:154::-;25926:6;25921:3;25916;25903:30;25988:1;25979:6;25974:3;25970:16;25963:27;25842:154;;;:::o;26002:307::-;26070:1;26080:113;26094:6;26091:1;26088:13;26080:113;;;26179:1;26174:3;26170:11;26164:18;26160:1;26155:3;26151:11;26144:39;26116:2;26113:1;26109:10;26104:15;;26080:113;;;26211:6;26208:1;26205:13;26202:101;;;26291:1;26282:6;26277:3;26273:16;26266:27;26202:101;26051:258;26002:307;;;:::o;26315:320::-;26359:6;26396:1;26390:4;26386:12;26376:22;;26443:1;26437:4;26433:12;26464:18;26454:81;;26520:4;26512:6;26508:17;26498:27;;26454:81;26582:2;26574:6;26571:14;26551:18;26548:38;26545:84;;;26601:18;;:::i;:::-;26545:84;26366:269;26315:320;;;:::o;26641:281::-;26724:27;26746:4;26724:27;:::i;:::-;26716:6;26712:40;26854:6;26842:10;26839:22;26818:18;26806:10;26803:34;26800:62;26797:88;;;26865:18;;:::i;:::-;26797:88;26905:10;26901:2;26894:22;26684:238;26641:281;;:::o;26928:233::-;26967:3;26990:24;27008:5;26990:24;:::i;:::-;26981:33;;27036:66;27029:5;27026:77;27023:103;;;27106:18;;:::i;:::-;27023:103;27153:1;27146:5;27142:13;27135:20;;26928:233;;;:::o;27167:176::-;27199:1;27216:20;27234:1;27216:20;:::i;:::-;27211:25;;27250:20;27268:1;27250:20;:::i;:::-;27245:25;;27289:1;27279:35;;27294:18;;:::i;:::-;27279:35;27335:1;27332;27328:9;27323:14;;27167:176;;;;:::o;27349:180::-;27397:77;27394:1;27387:88;27494:4;27491:1;27484:15;27518:4;27515:1;27508:15;27535:180;27583:77;27580:1;27573:88;27680:4;27677:1;27670:15;27704:4;27701:1;27694:15;27721:180;27769:77;27766:1;27759:88;27866:4;27863:1;27856:15;27890:4;27887:1;27880:15;27907:180;27955:77;27952:1;27945:88;28052:4;28049:1;28042:15;28076:4;28073:1;28066:15;28093:180;28141:77;28138:1;28131:88;28238:4;28235:1;28228:15;28262:4;28259:1;28252:15;28279:117;28388:1;28385;28378:12;28402:117;28511:1;28508;28501:12;28525:117;28634:1;28631;28624:12;28648:117;28757:1;28754;28747:12;28771:117;28880:1;28877;28870:12;28894:102;28935:6;28986:2;28982:7;28977:2;28970:5;28966:14;28962:28;28952:38;;28894:102;;;:::o;29002:235::-;29142:34;29138:1;29130:6;29126:14;29119:58;29211:18;29206:2;29198:6;29194:15;29187:43;29002:235;:::o;29243:225::-;29383:34;29379:1;29371:6;29367:14;29360:58;29452:8;29447:2;29439:6;29435:15;29428:33;29243:225;:::o;29474:182::-;29614:34;29610:1;29602:6;29598:14;29591:58;29474:182;:::o;29662:114::-;;:::o;29782:122::-;29855:24;29873:5;29855:24;:::i;:::-;29848:5;29845:35;29835:63;;29894:1;29891;29884:12;29835:63;29782:122;:::o;29910:116::-;29980:21;29995:5;29980:21;:::i;:::-;29973:5;29970:32;29960:60;;30016:1;30013;30006:12;29960:60;29910:116;:::o;30032:120::-;30104:23;30121:5;30104:23;:::i;:::-;30097:5;30094:34;30084:62;;30142:1;30139;30132:12;30084:62;30032:120;:::o;30158:122::-;30231:24;30249:5;30231:24;:::i;:::-;30224:5;30221:35;30211:63;;30270:1;30267;30260:12;30211:63;30158:122;:::o;30286:118::-;30357:22;30373:5;30357:22;:::i;:::-;30350:5;30347:33;30337:61;;30394:1;30391;30384:12;30337:61;30286:118;:::o
Swarm Source
ipfs://2a956730a09f3560790072a727122dd483e1fd4eecbbf39894c8e678a904fa8c
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.