ERC-721
Overview
Max Total Supply
1,000 0xWP
Holders
101
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
19 0xWPLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
OxWP
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-05 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // 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: https://github.com/chiru-labs/ERC721A/blob/main/contracts/ERC721A.sol // Creator: Chiru Labs pragma solidity ^0.8.4; error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintedQueryForZeroAddress(); error BurnedQueryForZeroAddress(); error AuxQueryForZeroAddress(); 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 extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 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 { 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; // For miscellaneous variable(s) pertaining to the address // (e.g. number of whitelist mint slots used). // If there are multiple variables, please pack them into a uint64. uint64 aux; } // 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_; _currentIndex = _startTokenId(); } /** * To change the starting tokenId, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev See {IERC721Enumerable-totalSupply}. * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens. */ function totalSupply() public view returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex - _startTokenId() times unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to _startTokenId() unchecked { return _currentIndex - _startTokenId(); } } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { if (owner == address(0)) revert MintedQueryForZeroAddress(); return uint256(_addressData[owner].numberMinted); } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { if (owner == address(0)) revert BurnedQueryForZeroAddress(); return uint256(_addressData[owner].numberBurned); } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { if (owner == address(0)) revert AuxQueryForZeroAddress(); return _addressData[owner].aux; } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { if (owner == address(0)) revert AuxQueryForZeroAddress(); _addressData[owner].aux = aux; } /** * 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 (_startTokenId() <= curr && 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 (to.isContract() && !_checkContractOnERC721Received(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 _startTokenId() <= tokenId && 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; uint256 end = updatedIndex + quantity; if (safe && to.isContract()) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex != end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex != end); } _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 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 _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { 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)) } } } } /** * @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 {} } // File: contracts/contract.sol pragma solidity >=0.7.0 <0.9.0; contract OxWP is ERC721A, Ownable { using Strings for uint256; string baseURI; string public baseExtension = ".json"; uint256 public cost = 0.01 ether; uint256 public maxSupply = 10000; uint256 public maxMintAmount = 5; uint256 public freeAmount = 1000; uint256 public ogSupply = 200; uint256 public maxOGNFTs = 5; bool public paused = false; bool public mintForOGs = false; bytes32 private merkleRoot; mapping(address => uint256) maxMintOG; constructor( string memory _initBaseURI ) ERC721A("0xWP", "0xWP") { setBaseURI(_initBaseURI); } modifier checks(uint256 _mintAmount, bool _state) { require(!paused); require(_mintAmount > 0); require(totalSupply() + _mintAmount <= maxSupply, "Max supply exceeded!"); require(_state == mintForOGs, "This function is not available"); if(totalSupply() >= freeAmount){ if(totalSupply() - freeAmount < ogSupply && mintForOGs){ require(totalSupply() - freeAmount + _mintAmount <= ogSupply, "OG supply exceeded"); if(totalSupply() - freeAmount + _mintAmount == ogSupply) mintForOGs = false; require(_mintAmount <= maxOGNFTs, "OGs can't mint more than 2"); require(maxMintOG[msg.sender] < maxOGNFTs, "OGs can't mint more than 2"); maxMintOG[msg.sender]+= _mintAmount; } else{ if(msg.sender != owner()) require(msg.value >= cost * _mintAmount, "Insufficient funds!"); maxMintAmount = 20; } } else{ require(totalSupply() + _mintAmount <= freeAmount, "Free NFTs amount exceeded"); if(totalSupply() + _mintAmount == freeAmount) mintForOGs = true; } require(_mintAmount <= maxMintAmount, "Max mint amount exceeded"); _; } modifier isOG(bytes32[] calldata _merkleProof){ bytes32 leaf = keccak256(abi.encodePacked(msg.sender)); require(MerkleProof.verify(_merkleProof, merkleRoot, leaf)); _; } function mint(uint256 _mintAmount) public payable checks(_mintAmount,false) { _safeMint(msg.sender, _mintAmount); } function OGmint(uint256 _mintAmount, bytes32[] calldata _merkleProof) public payable checks(_mintAmount,true) isOG(_merkleProof) { _safeMint(msg.sender, _mintAmount); } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function setRoot(bytes32 _newRoot) public onlyOwner{ merkleRoot = _newRoot; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function pause() public onlyOwner { paused = !paused; } function withdraw() public payable onlyOwner { (bool os, ) = payable(0x5AD437c4403917AE814e93D3F2c8CEAA2be55385).call{value: address(this).balance}(""); require(os); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_initBaseURI","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":"OwnerQueryForNonexistentToken","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":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"OGmint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[],"name":"freeAmount","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":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","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":"maxOGNFTs","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":"mintForOGs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ogSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","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":"bytes32","name":"_newRoot","type":"bytes32"}],"name":"setRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600a90805190602001906200005192919062000377565b50662386f26fc10000600b55612710600c556005600d556103e8600e5560c8600f5560056010556000601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff021916908315150217905550348015620000bb57600080fd5b5060405162004b7038038062004b708339818101604052810190620000e19190620004a5565b6040518060400160405280600481526020017f30785750000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f307857500000000000000000000000000000000000000000000000000000000081525081600290805190602001906200016592919062000377565b5080600390805190602001906200017e92919062000377565b506200018f620001cf60201b60201c565b6000819055505050620001b7620001ab620001d460201b60201c565b620001dc60201b60201c565b620001c881620002a260201b60201c565b50620006fd565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002b2620001d460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002d86200034d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000331576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000328906200051d565b60405180910390fd5b80600990805190602001906200034992919062000377565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200038590620005e5565b90600052602060002090601f016020900481019282620003a95760008555620003f5565b82601f10620003c457805160ff1916838001178555620003f5565b82800160010185558215620003f5579182015b82811115620003f4578251825591602001919060010190620003d7565b5b50905062000404919062000408565b5090565b5b808211156200042357600081600090555060010162000409565b5090565b60006200043e620004388462000568565b6200053f565b9050828152602081018484840111156200045d576200045c620006b4565b5b6200046a848285620005af565b509392505050565b600082601f8301126200048a5762000489620006af565b5b81516200049c84826020860162000427565b91505092915050565b600060208284031215620004be57620004bd620006be565b5b600082015167ffffffffffffffff811115620004df57620004de620006b9565b5b620004ed8482850162000472565b91505092915050565b6000620005056020836200059e565b91506200051282620006d4565b602082019050919050565b600060208201905081810360008301526200053881620004f6565b9050919050565b60006200054b6200055e565b90506200055982826200061b565b919050565b6000604051905090565b600067ffffffffffffffff82111562000586576200058562000680565b5b6200059182620006c3565b9050602081019050919050565b600082825260208201905092915050565b60005b83811015620005cf578082015181840152602081019050620005b2565b83811115620005df576000848401525b50505050565b60006002820490506001821680620005fe57607f821691505b6020821081141562000615576200061462000651565b5b50919050565b6200062682620006c3565b810181811067ffffffffffffffff8211171562000648576200064762000680565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b614463806200070d6000396000f3fe6080604052600436106102045760003560e01c80637f00c7a611610118578063b88d4fde116100a0578063d7da95eb1161006f578063d7da95eb146106f6578063da3ef23f14610721578063dab5f3401461074a578063e985e9c514610773578063f2fde38b146107b057610204565b8063b88d4fde1461063a578063c668286214610663578063c87b56dd1461068e578063d5abeb01146106cb57610204565b806395d89b41116100e757806395d89b4114610574578063a0712d681461059f578063a22cb465146105bb578063a45af973146105e4578063ae5b7a7d1461060f57610204565b80637f00c7a6146104ed5780638456cb59146105165780638da5cb5b1461052d57806393683b831461055857610204565b806323b872dd1161019b57806355f804b31161016a57806355f804b3146104085780635c975abb146104315780636352211e1461045c57806370a0823114610499578063715018a6146104d657610204565b806323b872dd146103835780633ccfd60b146103ac57806342842e0e146103b657806344a0d68a146103df57610204565b8063095ea7b3116101d7578063095ea7b3146102d957806313faede61461030257806318160ddd1461032d578063239c70ae1461035857610204565b806301ffc9a7146102095780630451a9f11461024657806306fdde0314610271578063081812fc1461029c575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190613673565b6107d9565b60405161023d9190613b52565b60405180910390f35b34801561025257600080fd5b5061025b6108bb565b6040516102689190613ccf565b60405180910390f35b34801561027d57600080fd5b506102866108c1565b6040516102939190613b6d565b60405180910390f35b3480156102a857600080fd5b506102c360048036038101906102be9190613716565b610953565b6040516102d09190613aeb565b60405180910390f35b3480156102e557600080fd5b5061030060048036038101906102fb9190613606565b6109cf565b005b34801561030e57600080fd5b50610317610ada565b6040516103249190613ccf565b60405180910390f35b34801561033957600080fd5b50610342610ae0565b60405161034f9190613ccf565b60405180910390f35b34801561036457600080fd5b5061036d610af7565b60405161037a9190613ccf565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a591906134f0565b610afd565b005b6103b4610b0d565b005b3480156103c257600080fd5b506103dd60048036038101906103d891906134f0565b610c16565b005b3480156103eb57600080fd5b5061040660048036038101906104019190613716565b610c36565b005b34801561041457600080fd5b5061042f600480360381019061042a91906136cd565b610cbc565b005b34801561043d57600080fd5b50610446610d52565b6040516104539190613b52565b60405180910390f35b34801561046857600080fd5b50610483600480360381019061047e9190613716565b610d65565b6040516104909190613aeb565b60405180910390f35b3480156104a557600080fd5b506104c060048036038101906104bb9190613483565b610d7b565b6040516104cd9190613ccf565b60405180910390f35b3480156104e257600080fd5b506104eb610e4b565b005b3480156104f957600080fd5b50610514600480360381019061050f9190613716565b610ed3565b005b34801561052257600080fd5b5061052b610f59565b005b34801561053957600080fd5b50610542611001565b60405161054f9190613aeb565b60405180910390f35b610572600480360381019061056d9190613743565b61102b565b005b34801561058057600080fd5b50610589611519565b6040516105969190613b6d565b60405180910390f35b6105b960048036038101906105b49190613716565b6115ab565b005b3480156105c757600080fd5b506105e260048036038101906105dd91906135c6565b611a10565b005b3480156105f057600080fd5b506105f9611b88565b6040516106069190613b52565b60405180910390f35b34801561061b57600080fd5b50610624611b9b565b6040516106319190613ccf565b60405180910390f35b34801561064657600080fd5b50610661600480360381019061065c9190613543565b611ba1565b005b34801561066f57600080fd5b50610678611c1d565b6040516106859190613b6d565b60405180910390f35b34801561069a57600080fd5b506106b560048036038101906106b09190613716565b611cab565b6040516106c29190613b6d565b60405180910390f35b3480156106d757600080fd5b506106e0611d55565b6040516106ed9190613ccf565b60405180910390f35b34801561070257600080fd5b5061070b611d5b565b6040516107189190613ccf565b60405180910390f35b34801561072d57600080fd5b50610748600480360381019061074391906136cd565b611d61565b005b34801561075657600080fd5b50610771600480360381019061076c9190613646565b611df7565b005b34801561077f57600080fd5b5061079a600480360381019061079591906134b0565b611e7d565b6040516107a79190613b52565b60405180910390f35b3480156107bc57600080fd5b506107d760048036038101906107d29190613483565b611f11565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108a457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108b457506108b382612009565b5b9050919050565b600e5481565b6060600280546108d090613fa9565b80601f01602080910402602001604051908101604052809291908181526020018280546108fc90613fa9565b80156109495780601f1061091e57610100808354040283529160200191610949565b820191906000526020600020905b81548152906001019060200180831161092c57829003601f168201915b5050505050905090565b600061095e82612073565b610994576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109da82610d65565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a42576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a616120c1565b73ffffffffffffffffffffffffffffffffffffffff1614158015610a935750610a9181610a8c6120c1565b611e7d565b155b15610aca576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ad58383836120c9565b505050565b600b5481565b6000610aea61217b565b6001546000540303905090565b600d5481565b610b08838383612180565b505050565b610b156120c1565b73ffffffffffffffffffffffffffffffffffffffff16610b33611001565b73ffffffffffffffffffffffffffffffffffffffff1614610b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8090613bef565b60405180910390fd5b6000735ad437c4403917ae814e93d3f2c8ceaa2be5538573ffffffffffffffffffffffffffffffffffffffff1647604051610bc390613ad6565b60006040518083038185875af1925050503d8060008114610c00576040519150601f19603f3d011682016040523d82523d6000602084013e610c05565b606091505b5050905080610c1357600080fd5b50565b610c3183838360405180602001604052806000815250611ba1565b505050565b610c3e6120c1565b73ffffffffffffffffffffffffffffffffffffffff16610c5c611001565b73ffffffffffffffffffffffffffffffffffffffff1614610cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca990613bef565b60405180910390fd5b80600b8190555050565b610cc46120c1565b73ffffffffffffffffffffffffffffffffffffffff16610ce2611001565b73ffffffffffffffffffffffffffffffffffffffff1614610d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2f90613bef565b60405180910390fd5b8060099080519060200190610d4e9291906131e9565b5050565b601160009054906101000a900460ff1681565b6000610d7082612671565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610de3576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610e536120c1565b73ffffffffffffffffffffffffffffffffffffffff16610e71611001565b73ffffffffffffffffffffffffffffffffffffffff1614610ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebe90613bef565b60405180910390fd5b610ed16000612900565b565b610edb6120c1565b73ffffffffffffffffffffffffffffffffffffffff16610ef9611001565b73ffffffffffffffffffffffffffffffffffffffff1614610f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4690613bef565b60405180910390fd5b80600d8190555050565b610f616120c1565b73ffffffffffffffffffffffffffffffffffffffff16610f7f611001565b73ffffffffffffffffffffffffffffffffffffffff1614610fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcc90613bef565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b826001601160009054906101000a900460ff161561104857600080fd5b6000821161105557600080fd5b600c5482611061610ae0565b61106b9190613dd4565b11156110ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a390613c2f565b60405180910390fd5b601160019054906101000a900460ff16151581151514611101576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f890613caf565b60405180910390fd5b600e5461110c610ae0565b106113ac57600f54600e5461111f610ae0565b6111299190613eb5565b1080156111425750601160019054906101000a900460ff165b1561131357600f5482600e54611156610ae0565b6111609190613eb5565b61116a9190613dd4565b11156111ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a290613c6f565b60405180910390fd5b600f5482600e546111ba610ae0565b6111c49190613eb5565b6111ce9190613dd4565b14156111f0576000601160016101000a81548160ff0219169083151502179055505b601054821115611235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122c90613c4f565b60405180910390fd5b601054601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106112b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112af90613c4f565b60405180910390fd5b81601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113079190613dd4565b925050819055506113a7565b61131b611001565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461139e5781600b5461135b9190613e5b565b34101561139d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139490613c8f565b60405180910390fd5b5b6014600d819055505b61143c565b600e54826113b8610ae0565b6113c29190613dd4565b1115611403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fa90613baf565b60405180910390fd5b600e548261140f610ae0565b6114199190613dd4565b141561143b576001601160016101000a81548160ff0219169083151502179055505b5b600d54821115611481576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147890613bcf565b60405180910390fd5b83836000336040516020016114969190613a8a565b6040516020818303038152906040528051906020012090506114fc838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050601254836129c6565b61150557600080fd5b61150f33896129dd565b5050505050505050565b60606003805461152890613fa9565b80601f016020809104026020016040519081016040528092919081815260200182805461155490613fa9565b80156115a15780601f10611576576101008083540402835291602001916115a1565b820191906000526020600020905b81548152906001019060200180831161158457829003601f168201915b5050505050905090565b806000601160009054906101000a900460ff16156115c857600080fd5b600082116115d557600080fd5b600c54826115e1610ae0565b6115eb9190613dd4565b111561162c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162390613c2f565b60405180910390fd5b601160019054906101000a900460ff16151581151514611681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167890613caf565b60405180910390fd5b600e5461168c610ae0565b1061192c57600f54600e5461169f610ae0565b6116a99190613eb5565b1080156116c25750601160019054906101000a900460ff165b1561189357600f5482600e546116d6610ae0565b6116e09190613eb5565b6116ea9190613dd4565b111561172b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172290613c6f565b60405180910390fd5b600f5482600e5461173a610ae0565b6117449190613eb5565b61174e9190613dd4565b1415611770576000601160016101000a81548160ff0219169083151502179055505b6010548211156117b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ac90613c4f565b60405180910390fd5b601054601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182f90613c4f565b60405180910390fd5b81601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118879190613dd4565b92505081905550611927565b61189b611001565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461191e5781600b546118db9190613e5b565b34101561191d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191490613c8f565b60405180910390fd5b5b6014600d819055505b6119bc565b600e5482611938610ae0565b6119429190613dd4565b1115611983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197a90613baf565b60405180910390fd5b600e548261198f610ae0565b6119999190613dd4565b14156119bb576001601160016101000a81548160ff0219169083151502179055505b5b600d54821115611a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f890613bcf565b60405180910390fd5b611a0b33846129dd565b505050565b611a186120c1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a7d576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611a8a6120c1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b376120c1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b7c9190613b52565b60405180910390a35050565b601160019054906101000a900460ff1681565b600f5481565b611bac848484612180565b611bcb8373ffffffffffffffffffffffffffffffffffffffff166129fb565b8015611be05750611bde84848484612a1e565b155b15611c17576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b600a8054611c2a90613fa9565b80601f0160208091040260200160405190810160405280929190818152602001828054611c5690613fa9565b8015611ca35780601f10611c7857610100808354040283529160200191611ca3565b820191906000526020600020905b815481529060010190602001808311611c8657829003601f168201915b505050505081565b6060611cb682612073565b611cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cec90613c0f565b60405180910390fd5b6000611cff612b7e565b90506000815111611d1f5760405180602001604052806000815250611d4d565b80611d2984612c10565b600a604051602001611d3d93929190613aa5565b6040516020818303038152906040525b915050919050565b600c5481565b60105481565b611d696120c1565b73ffffffffffffffffffffffffffffffffffffffff16611d87611001565b73ffffffffffffffffffffffffffffffffffffffff1614611ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd490613bef565b60405180910390fd5b80600a9080519060200190611df39291906131e9565b5050565b611dff6120c1565b73ffffffffffffffffffffffffffffffffffffffff16611e1d611001565b73ffffffffffffffffffffffffffffffffffffffff1614611e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6a90613bef565b60405180910390fd5b8060128190555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f196120c1565b73ffffffffffffffffffffffffffffffffffffffff16611f37611001565b73ffffffffffffffffffffffffffffffffffffffff1614611f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8490613bef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff490613b8f565b60405180910390fd5b61200681612900565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008161207e61217b565b1115801561208d575060005482105b80156120ba575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b600061218b82612671565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166121b26120c1565b73ffffffffffffffffffffffffffffffffffffffff1614806121e557506121e482600001516121df6120c1565b611e7d565b5b8061222a57506121f36120c1565b73ffffffffffffffffffffffffffffffffffffffff1661221284610953565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612263576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146122cc576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612333576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123408585856001612d71565b61235060008484600001516120c9565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612601576000548110156126005782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461266a8585856001612d77565b5050505050565b61267961326f565b60008290508061268761217b565b11158015612696575060005481105b156128c9576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516128c757600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146127ab5780925050506128fb565b5b6001156128c657818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146128c15780925050506128fb565b6127ac565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000826129d38584612d7d565b1490509392505050565b6129f7828260405180602001604052806000815250612df2565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a446120c1565b8786866040518563ffffffff1660e01b8152600401612a669493929190613b06565b602060405180830381600087803b158015612a8057600080fd5b505af1925050508015612ab157506040513d601f19601f82011682018060405250810190612aae91906136a0565b60015b612b2b573d8060008114612ae1576040519150601f19603f3d011682016040523d82523d6000602084013e612ae6565b606091505b50600081511415612b23576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060098054612b8d90613fa9565b80601f0160208091040260200160405190810160405280929190818152602001828054612bb990613fa9565b8015612c065780601f10612bdb57610100808354040283529160200191612c06565b820191906000526020600020905b815481529060010190602001808311612be957829003601f168201915b5050505050905090565b60606000821415612c58576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d6c565b600082905060005b60008214612c8a578080612c739061400c565b915050600a82612c839190613e2a565b9150612c60565b60008167ffffffffffffffff811115612ca657612ca5614166565b5b6040519080825280601f01601f191660200182016040528015612cd85781602001600182028036833780820191505090505b5090505b60008514612d6557600182612cf19190613eb5565b9150600a85612d009190614079565b6030612d0c9190613dd4565b60f81b818381518110612d2257612d21614137565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d5e9190613e2a565b9450612cdc565b8093505050505b919050565b50505050565b50505050565b60008082905060005b8451811015612de7576000858281518110612da457612da3614137565b5b60200260200101519050808311612dc657612dbf8382612e04565b9250612dd3565b612dd08184612e04565b92505b508080612ddf9061400c565b915050612d86565b508091505092915050565b612dff8383836001612e1b565b505050565b600082600052816020526040600020905092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612e88576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415612ec3576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612ed06000868387612d71565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000858201905083801561309a57506130998773ffffffffffffffffffffffffffffffffffffffff166129fb565b5b15613160575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461310f6000888480600101955088612a1e565b613145576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808214156130a057826000541461315b57600080fd5b6131cc565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415613161575b8160008190555050506131e26000868387612d77565b5050505050565b8280546131f590613fa9565b90600052602060002090601f016020900481019282613217576000855561325e565b82601f1061323057805160ff191683800117855561325e565b8280016001018555821561325e579182015b8281111561325d578251825591602001919060010190613242565b5b50905061326b91906132b2565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156132cb5760008160009055506001016132b3565b5090565b60006132e26132dd84613d0f565b613cea565b9050828152602081018484840111156132fe576132fd6141a4565b5b613309848285613f67565b509392505050565b600061332461331f84613d40565b613cea565b9050828152602081018484840111156133405761333f6141a4565b5b61334b848285613f67565b509392505050565b600081359050613362816143ba565b92915050565b60008083601f84011261337e5761337d61419a565b5b8235905067ffffffffffffffff81111561339b5761339a614195565b5b6020830191508360208202830111156133b7576133b661419f565b5b9250929050565b6000813590506133cd816143d1565b92915050565b6000813590506133e2816143e8565b92915050565b6000813590506133f7816143ff565b92915050565b60008151905061340c816143ff565b92915050565b600082601f8301126134275761342661419a565b5b81356134378482602086016132cf565b91505092915050565b600082601f8301126134555761345461419a565b5b8135613465848260208601613311565b91505092915050565b60008135905061347d81614416565b92915050565b600060208284031215613499576134986141ae565b5b60006134a784828501613353565b91505092915050565b600080604083850312156134c7576134c66141ae565b5b60006134d585828601613353565b92505060206134e685828601613353565b9150509250929050565b600080600060608486031215613509576135086141ae565b5b600061351786828701613353565b935050602061352886828701613353565b92505060406135398682870161346e565b9150509250925092565b6000806000806080858703121561355d5761355c6141ae565b5b600061356b87828801613353565b945050602061357c87828801613353565b935050604061358d8782880161346e565b925050606085013567ffffffffffffffff8111156135ae576135ad6141a9565b5b6135ba87828801613412565b91505092959194509250565b600080604083850312156135dd576135dc6141ae565b5b60006135eb85828601613353565b92505060206135fc858286016133be565b9150509250929050565b6000806040838503121561361d5761361c6141ae565b5b600061362b85828601613353565b925050602061363c8582860161346e565b9150509250929050565b60006020828403121561365c5761365b6141ae565b5b600061366a848285016133d3565b91505092915050565b600060208284031215613689576136886141ae565b5b6000613697848285016133e8565b91505092915050565b6000602082840312156136b6576136b56141ae565b5b60006136c4848285016133fd565b91505092915050565b6000602082840312156136e3576136e26141ae565b5b600082013567ffffffffffffffff811115613701576137006141a9565b5b61370d84828501613440565b91505092915050565b60006020828403121561372c5761372b6141ae565b5b600061373a8482850161346e565b91505092915050565b60008060006040848603121561375c5761375b6141ae565b5b600061376a8682870161346e565b935050602084013567ffffffffffffffff81111561378b5761378a6141a9565b5b61379786828701613368565b92509250509250925092565b6137ac81613ee9565b82525050565b6137c36137be82613ee9565b614055565b82525050565b6137d281613efb565b82525050565b60006137e382613d86565b6137ed8185613d9c565b93506137fd818560208601613f76565b613806816141b3565b840191505092915050565b600061381c82613d91565b6138268185613db8565b9350613836818560208601613f76565b61383f816141b3565b840191505092915050565b600061385582613d91565b61385f8185613dc9565b935061386f818560208601613f76565b80840191505092915050565b6000815461388881613fa9565b6138928186613dc9565b945060018216600081146138ad57600181146138be576138f1565b60ff198316865281860193506138f1565b6138c785613d71565b60005b838110156138e9578154818901526001820191506020810190506138ca565b838801955050505b50505092915050565b6000613907602683613db8565b9150613912826141d1565b604082019050919050565b600061392a601983613db8565b915061393582614220565b602082019050919050565b600061394d601883613db8565b915061395882614249565b602082019050919050565b6000613970602083613db8565b915061397b82614272565b602082019050919050565b6000613993602f83613db8565b915061399e8261429b565b604082019050919050565b60006139b6600083613dad565b91506139c1826142ea565b600082019050919050565b60006139d9601483613db8565b91506139e4826142ed565b602082019050919050565b60006139fc601a83613db8565b9150613a0782614316565b602082019050919050565b6000613a1f601283613db8565b9150613a2a8261433f565b602082019050919050565b6000613a42601383613db8565b9150613a4d82614368565b602082019050919050565b6000613a65601e83613db8565b9150613a7082614391565b602082019050919050565b613a8481613f5d565b82525050565b6000613a9682846137b2565b60148201915081905092915050565b6000613ab1828661384a565b9150613abd828561384a565b9150613ac9828461387b565b9150819050949350505050565b6000613ae1826139a9565b9150819050919050565b6000602082019050613b0060008301846137a3565b92915050565b6000608082019050613b1b60008301876137a3565b613b2860208301866137a3565b613b356040830185613a7b565b8181036060830152613b4781846137d8565b905095945050505050565b6000602082019050613b6760008301846137c9565b92915050565b60006020820190508181036000830152613b878184613811565b905092915050565b60006020820190508181036000830152613ba8816138fa565b9050919050565b60006020820190508181036000830152613bc88161391d565b9050919050565b60006020820190508181036000830152613be881613940565b9050919050565b60006020820190508181036000830152613c0881613963565b9050919050565b60006020820190508181036000830152613c2881613986565b9050919050565b60006020820190508181036000830152613c48816139cc565b9050919050565b60006020820190508181036000830152613c68816139ef565b9050919050565b60006020820190508181036000830152613c8881613a12565b9050919050565b60006020820190508181036000830152613ca881613a35565b9050919050565b60006020820190508181036000830152613cc881613a58565b9050919050565b6000602082019050613ce46000830184613a7b565b92915050565b6000613cf4613d05565b9050613d008282613fdb565b919050565b6000604051905090565b600067ffffffffffffffff821115613d2a57613d29614166565b5b613d33826141b3565b9050602081019050919050565b600067ffffffffffffffff821115613d5b57613d5a614166565b5b613d64826141b3565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613ddf82613f5d565b9150613dea83613f5d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e1f57613e1e6140aa565b5b828201905092915050565b6000613e3582613f5d565b9150613e4083613f5d565b925082613e5057613e4f6140d9565b5b828204905092915050565b6000613e6682613f5d565b9150613e7183613f5d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613eaa57613ea96140aa565b5b828202905092915050565b6000613ec082613f5d565b9150613ecb83613f5d565b925082821015613ede57613edd6140aa565b5b828203905092915050565b6000613ef482613f3d565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613f94578082015181840152602081019050613f79565b83811115613fa3576000848401525b50505050565b60006002820490506001821680613fc157607f821691505b60208210811415613fd557613fd4614108565b5b50919050565b613fe4826141b3565b810181811067ffffffffffffffff8211171561400357614002614166565b5b80604052505050565b600061401782613f5d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561404a576140496140aa565b5b600182019050919050565b600061406082614067565b9050919050565b6000614072826141c4565b9050919050565b600061408482613f5d565b915061408f83613f5d565b92508261409f5761409e6140d9565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46726565204e46547320616d6f756e7420657863656564656400000000000000600082015250565b7f4d6178206d696e7420616d6f756e742065786365656465640000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f4f47732063616e2774206d696e74206d6f7265207468616e2032000000000000600082015250565b7f4f4720737570706c792065786365656465640000000000000000000000000000600082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b7f546869732066756e6374696f6e206973206e6f7420617661696c61626c650000600082015250565b6143c381613ee9565b81146143ce57600080fd5b50565b6143da81613efb565b81146143e557600080fd5b50565b6143f181613f07565b81146143fc57600080fd5b50565b61440881613f11565b811461441357600080fd5b50565b61441f81613f5d565b811461442a57600080fd5b5056fea264697066735822122002cecff6e4c7154a59ff072503d70c33e1394ed4e1e8e9ef01123844ffe9f48864736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5a456b763647387534656e33504246476269624b56676853643350665566326f6b67714b6a69433447336d692f00000000000000000000
Deployed Bytecode
0x6080604052600436106102045760003560e01c80637f00c7a611610118578063b88d4fde116100a0578063d7da95eb1161006f578063d7da95eb146106f6578063da3ef23f14610721578063dab5f3401461074a578063e985e9c514610773578063f2fde38b146107b057610204565b8063b88d4fde1461063a578063c668286214610663578063c87b56dd1461068e578063d5abeb01146106cb57610204565b806395d89b41116100e757806395d89b4114610574578063a0712d681461059f578063a22cb465146105bb578063a45af973146105e4578063ae5b7a7d1461060f57610204565b80637f00c7a6146104ed5780638456cb59146105165780638da5cb5b1461052d57806393683b831461055857610204565b806323b872dd1161019b57806355f804b31161016a57806355f804b3146104085780635c975abb146104315780636352211e1461045c57806370a0823114610499578063715018a6146104d657610204565b806323b872dd146103835780633ccfd60b146103ac57806342842e0e146103b657806344a0d68a146103df57610204565b8063095ea7b3116101d7578063095ea7b3146102d957806313faede61461030257806318160ddd1461032d578063239c70ae1461035857610204565b806301ffc9a7146102095780630451a9f11461024657806306fdde0314610271578063081812fc1461029c575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190613673565b6107d9565b60405161023d9190613b52565b60405180910390f35b34801561025257600080fd5b5061025b6108bb565b6040516102689190613ccf565b60405180910390f35b34801561027d57600080fd5b506102866108c1565b6040516102939190613b6d565b60405180910390f35b3480156102a857600080fd5b506102c360048036038101906102be9190613716565b610953565b6040516102d09190613aeb565b60405180910390f35b3480156102e557600080fd5b5061030060048036038101906102fb9190613606565b6109cf565b005b34801561030e57600080fd5b50610317610ada565b6040516103249190613ccf565b60405180910390f35b34801561033957600080fd5b50610342610ae0565b60405161034f9190613ccf565b60405180910390f35b34801561036457600080fd5b5061036d610af7565b60405161037a9190613ccf565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a591906134f0565b610afd565b005b6103b4610b0d565b005b3480156103c257600080fd5b506103dd60048036038101906103d891906134f0565b610c16565b005b3480156103eb57600080fd5b5061040660048036038101906104019190613716565b610c36565b005b34801561041457600080fd5b5061042f600480360381019061042a91906136cd565b610cbc565b005b34801561043d57600080fd5b50610446610d52565b6040516104539190613b52565b60405180910390f35b34801561046857600080fd5b50610483600480360381019061047e9190613716565b610d65565b6040516104909190613aeb565b60405180910390f35b3480156104a557600080fd5b506104c060048036038101906104bb9190613483565b610d7b565b6040516104cd9190613ccf565b60405180910390f35b3480156104e257600080fd5b506104eb610e4b565b005b3480156104f957600080fd5b50610514600480360381019061050f9190613716565b610ed3565b005b34801561052257600080fd5b5061052b610f59565b005b34801561053957600080fd5b50610542611001565b60405161054f9190613aeb565b60405180910390f35b610572600480360381019061056d9190613743565b61102b565b005b34801561058057600080fd5b50610589611519565b6040516105969190613b6d565b60405180910390f35b6105b960048036038101906105b49190613716565b6115ab565b005b3480156105c757600080fd5b506105e260048036038101906105dd91906135c6565b611a10565b005b3480156105f057600080fd5b506105f9611b88565b6040516106069190613b52565b60405180910390f35b34801561061b57600080fd5b50610624611b9b565b6040516106319190613ccf565b60405180910390f35b34801561064657600080fd5b50610661600480360381019061065c9190613543565b611ba1565b005b34801561066f57600080fd5b50610678611c1d565b6040516106859190613b6d565b60405180910390f35b34801561069a57600080fd5b506106b560048036038101906106b09190613716565b611cab565b6040516106c29190613b6d565b60405180910390f35b3480156106d757600080fd5b506106e0611d55565b6040516106ed9190613ccf565b60405180910390f35b34801561070257600080fd5b5061070b611d5b565b6040516107189190613ccf565b60405180910390f35b34801561072d57600080fd5b50610748600480360381019061074391906136cd565b611d61565b005b34801561075657600080fd5b50610771600480360381019061076c9190613646565b611df7565b005b34801561077f57600080fd5b5061079a600480360381019061079591906134b0565b611e7d565b6040516107a79190613b52565b60405180910390f35b3480156107bc57600080fd5b506107d760048036038101906107d29190613483565b611f11565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108a457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108b457506108b382612009565b5b9050919050565b600e5481565b6060600280546108d090613fa9565b80601f01602080910402602001604051908101604052809291908181526020018280546108fc90613fa9565b80156109495780601f1061091e57610100808354040283529160200191610949565b820191906000526020600020905b81548152906001019060200180831161092c57829003601f168201915b5050505050905090565b600061095e82612073565b610994576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109da82610d65565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a42576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a616120c1565b73ffffffffffffffffffffffffffffffffffffffff1614158015610a935750610a9181610a8c6120c1565b611e7d565b155b15610aca576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ad58383836120c9565b505050565b600b5481565b6000610aea61217b565b6001546000540303905090565b600d5481565b610b08838383612180565b505050565b610b156120c1565b73ffffffffffffffffffffffffffffffffffffffff16610b33611001565b73ffffffffffffffffffffffffffffffffffffffff1614610b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8090613bef565b60405180910390fd5b6000735ad437c4403917ae814e93d3f2c8ceaa2be5538573ffffffffffffffffffffffffffffffffffffffff1647604051610bc390613ad6565b60006040518083038185875af1925050503d8060008114610c00576040519150601f19603f3d011682016040523d82523d6000602084013e610c05565b606091505b5050905080610c1357600080fd5b50565b610c3183838360405180602001604052806000815250611ba1565b505050565b610c3e6120c1565b73ffffffffffffffffffffffffffffffffffffffff16610c5c611001565b73ffffffffffffffffffffffffffffffffffffffff1614610cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca990613bef565b60405180910390fd5b80600b8190555050565b610cc46120c1565b73ffffffffffffffffffffffffffffffffffffffff16610ce2611001565b73ffffffffffffffffffffffffffffffffffffffff1614610d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2f90613bef565b60405180910390fd5b8060099080519060200190610d4e9291906131e9565b5050565b601160009054906101000a900460ff1681565b6000610d7082612671565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610de3576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610e536120c1565b73ffffffffffffffffffffffffffffffffffffffff16610e71611001565b73ffffffffffffffffffffffffffffffffffffffff1614610ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebe90613bef565b60405180910390fd5b610ed16000612900565b565b610edb6120c1565b73ffffffffffffffffffffffffffffffffffffffff16610ef9611001565b73ffffffffffffffffffffffffffffffffffffffff1614610f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4690613bef565b60405180910390fd5b80600d8190555050565b610f616120c1565b73ffffffffffffffffffffffffffffffffffffffff16610f7f611001565b73ffffffffffffffffffffffffffffffffffffffff1614610fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcc90613bef565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b826001601160009054906101000a900460ff161561104857600080fd5b6000821161105557600080fd5b600c5482611061610ae0565b61106b9190613dd4565b11156110ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a390613c2f565b60405180910390fd5b601160019054906101000a900460ff16151581151514611101576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f890613caf565b60405180910390fd5b600e5461110c610ae0565b106113ac57600f54600e5461111f610ae0565b6111299190613eb5565b1080156111425750601160019054906101000a900460ff165b1561131357600f5482600e54611156610ae0565b6111609190613eb5565b61116a9190613dd4565b11156111ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a290613c6f565b60405180910390fd5b600f5482600e546111ba610ae0565b6111c49190613eb5565b6111ce9190613dd4565b14156111f0576000601160016101000a81548160ff0219169083151502179055505b601054821115611235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122c90613c4f565b60405180910390fd5b601054601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106112b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112af90613c4f565b60405180910390fd5b81601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113079190613dd4565b925050819055506113a7565b61131b611001565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461139e5781600b5461135b9190613e5b565b34101561139d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139490613c8f565b60405180910390fd5b5b6014600d819055505b61143c565b600e54826113b8610ae0565b6113c29190613dd4565b1115611403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fa90613baf565b60405180910390fd5b600e548261140f610ae0565b6114199190613dd4565b141561143b576001601160016101000a81548160ff0219169083151502179055505b5b600d54821115611481576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147890613bcf565b60405180910390fd5b83836000336040516020016114969190613a8a565b6040516020818303038152906040528051906020012090506114fc838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050601254836129c6565b61150557600080fd5b61150f33896129dd565b5050505050505050565b60606003805461152890613fa9565b80601f016020809104026020016040519081016040528092919081815260200182805461155490613fa9565b80156115a15780601f10611576576101008083540402835291602001916115a1565b820191906000526020600020905b81548152906001019060200180831161158457829003601f168201915b5050505050905090565b806000601160009054906101000a900460ff16156115c857600080fd5b600082116115d557600080fd5b600c54826115e1610ae0565b6115eb9190613dd4565b111561162c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162390613c2f565b60405180910390fd5b601160019054906101000a900460ff16151581151514611681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167890613caf565b60405180910390fd5b600e5461168c610ae0565b1061192c57600f54600e5461169f610ae0565b6116a99190613eb5565b1080156116c25750601160019054906101000a900460ff165b1561189357600f5482600e546116d6610ae0565b6116e09190613eb5565b6116ea9190613dd4565b111561172b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172290613c6f565b60405180910390fd5b600f5482600e5461173a610ae0565b6117449190613eb5565b61174e9190613dd4565b1415611770576000601160016101000a81548160ff0219169083151502179055505b6010548211156117b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ac90613c4f565b60405180910390fd5b601054601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182f90613c4f565b60405180910390fd5b81601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118879190613dd4565b92505081905550611927565b61189b611001565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461191e5781600b546118db9190613e5b565b34101561191d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191490613c8f565b60405180910390fd5b5b6014600d819055505b6119bc565b600e5482611938610ae0565b6119429190613dd4565b1115611983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197a90613baf565b60405180910390fd5b600e548261198f610ae0565b6119999190613dd4565b14156119bb576001601160016101000a81548160ff0219169083151502179055505b5b600d54821115611a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f890613bcf565b60405180910390fd5b611a0b33846129dd565b505050565b611a186120c1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a7d576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611a8a6120c1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b376120c1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b7c9190613b52565b60405180910390a35050565b601160019054906101000a900460ff1681565b600f5481565b611bac848484612180565b611bcb8373ffffffffffffffffffffffffffffffffffffffff166129fb565b8015611be05750611bde84848484612a1e565b155b15611c17576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b600a8054611c2a90613fa9565b80601f0160208091040260200160405190810160405280929190818152602001828054611c5690613fa9565b8015611ca35780601f10611c7857610100808354040283529160200191611ca3565b820191906000526020600020905b815481529060010190602001808311611c8657829003601f168201915b505050505081565b6060611cb682612073565b611cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cec90613c0f565b60405180910390fd5b6000611cff612b7e565b90506000815111611d1f5760405180602001604052806000815250611d4d565b80611d2984612c10565b600a604051602001611d3d93929190613aa5565b6040516020818303038152906040525b915050919050565b600c5481565b60105481565b611d696120c1565b73ffffffffffffffffffffffffffffffffffffffff16611d87611001565b73ffffffffffffffffffffffffffffffffffffffff1614611ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd490613bef565b60405180910390fd5b80600a9080519060200190611df39291906131e9565b5050565b611dff6120c1565b73ffffffffffffffffffffffffffffffffffffffff16611e1d611001565b73ffffffffffffffffffffffffffffffffffffffff1614611e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6a90613bef565b60405180910390fd5b8060128190555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f196120c1565b73ffffffffffffffffffffffffffffffffffffffff16611f37611001565b73ffffffffffffffffffffffffffffffffffffffff1614611f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8490613bef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff490613b8f565b60405180910390fd5b61200681612900565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008161207e61217b565b1115801561208d575060005482105b80156120ba575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b600061218b82612671565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166121b26120c1565b73ffffffffffffffffffffffffffffffffffffffff1614806121e557506121e482600001516121df6120c1565b611e7d565b5b8061222a57506121f36120c1565b73ffffffffffffffffffffffffffffffffffffffff1661221284610953565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612263576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146122cc576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612333576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123408585856001612d71565b61235060008484600001516120c9565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612601576000548110156126005782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461266a8585856001612d77565b5050505050565b61267961326f565b60008290508061268761217b565b11158015612696575060005481105b156128c9576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516128c757600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146127ab5780925050506128fb565b5b6001156128c657818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146128c15780925050506128fb565b6127ac565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000826129d38584612d7d565b1490509392505050565b6129f7828260405180602001604052806000815250612df2565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a446120c1565b8786866040518563ffffffff1660e01b8152600401612a669493929190613b06565b602060405180830381600087803b158015612a8057600080fd5b505af1925050508015612ab157506040513d601f19601f82011682018060405250810190612aae91906136a0565b60015b612b2b573d8060008114612ae1576040519150601f19603f3d011682016040523d82523d6000602084013e612ae6565b606091505b50600081511415612b23576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060098054612b8d90613fa9565b80601f0160208091040260200160405190810160405280929190818152602001828054612bb990613fa9565b8015612c065780601f10612bdb57610100808354040283529160200191612c06565b820191906000526020600020905b815481529060010190602001808311612be957829003601f168201915b5050505050905090565b60606000821415612c58576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d6c565b600082905060005b60008214612c8a578080612c739061400c565b915050600a82612c839190613e2a565b9150612c60565b60008167ffffffffffffffff811115612ca657612ca5614166565b5b6040519080825280601f01601f191660200182016040528015612cd85781602001600182028036833780820191505090505b5090505b60008514612d6557600182612cf19190613eb5565b9150600a85612d009190614079565b6030612d0c9190613dd4565b60f81b818381518110612d2257612d21614137565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d5e9190613e2a565b9450612cdc565b8093505050505b919050565b50505050565b50505050565b60008082905060005b8451811015612de7576000858281518110612da457612da3614137565b5b60200260200101519050808311612dc657612dbf8382612e04565b9250612dd3565b612dd08184612e04565b92505b508080612ddf9061400c565b915050612d86565b508091505092915050565b612dff8383836001612e1b565b505050565b600082600052816020526040600020905092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612e88576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415612ec3576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612ed06000868387612d71565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000858201905083801561309a57506130998773ffffffffffffffffffffffffffffffffffffffff166129fb565b5b15613160575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461310f6000888480600101955088612a1e565b613145576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808214156130a057826000541461315b57600080fd5b6131cc565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415613161575b8160008190555050506131e26000868387612d77565b5050505050565b8280546131f590613fa9565b90600052602060002090601f016020900481019282613217576000855561325e565b82601f1061323057805160ff191683800117855561325e565b8280016001018555821561325e579182015b8281111561325d578251825591602001919060010190613242565b5b50905061326b91906132b2565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156132cb5760008160009055506001016132b3565b5090565b60006132e26132dd84613d0f565b613cea565b9050828152602081018484840111156132fe576132fd6141a4565b5b613309848285613f67565b509392505050565b600061332461331f84613d40565b613cea565b9050828152602081018484840111156133405761333f6141a4565b5b61334b848285613f67565b509392505050565b600081359050613362816143ba565b92915050565b60008083601f84011261337e5761337d61419a565b5b8235905067ffffffffffffffff81111561339b5761339a614195565b5b6020830191508360208202830111156133b7576133b661419f565b5b9250929050565b6000813590506133cd816143d1565b92915050565b6000813590506133e2816143e8565b92915050565b6000813590506133f7816143ff565b92915050565b60008151905061340c816143ff565b92915050565b600082601f8301126134275761342661419a565b5b81356134378482602086016132cf565b91505092915050565b600082601f8301126134555761345461419a565b5b8135613465848260208601613311565b91505092915050565b60008135905061347d81614416565b92915050565b600060208284031215613499576134986141ae565b5b60006134a784828501613353565b91505092915050565b600080604083850312156134c7576134c66141ae565b5b60006134d585828601613353565b92505060206134e685828601613353565b9150509250929050565b600080600060608486031215613509576135086141ae565b5b600061351786828701613353565b935050602061352886828701613353565b92505060406135398682870161346e565b9150509250925092565b6000806000806080858703121561355d5761355c6141ae565b5b600061356b87828801613353565b945050602061357c87828801613353565b935050604061358d8782880161346e565b925050606085013567ffffffffffffffff8111156135ae576135ad6141a9565b5b6135ba87828801613412565b91505092959194509250565b600080604083850312156135dd576135dc6141ae565b5b60006135eb85828601613353565b92505060206135fc858286016133be565b9150509250929050565b6000806040838503121561361d5761361c6141ae565b5b600061362b85828601613353565b925050602061363c8582860161346e565b9150509250929050565b60006020828403121561365c5761365b6141ae565b5b600061366a848285016133d3565b91505092915050565b600060208284031215613689576136886141ae565b5b6000613697848285016133e8565b91505092915050565b6000602082840312156136b6576136b56141ae565b5b60006136c4848285016133fd565b91505092915050565b6000602082840312156136e3576136e26141ae565b5b600082013567ffffffffffffffff811115613701576137006141a9565b5b61370d84828501613440565b91505092915050565b60006020828403121561372c5761372b6141ae565b5b600061373a8482850161346e565b91505092915050565b60008060006040848603121561375c5761375b6141ae565b5b600061376a8682870161346e565b935050602084013567ffffffffffffffff81111561378b5761378a6141a9565b5b61379786828701613368565b92509250509250925092565b6137ac81613ee9565b82525050565b6137c36137be82613ee9565b614055565b82525050565b6137d281613efb565b82525050565b60006137e382613d86565b6137ed8185613d9c565b93506137fd818560208601613f76565b613806816141b3565b840191505092915050565b600061381c82613d91565b6138268185613db8565b9350613836818560208601613f76565b61383f816141b3565b840191505092915050565b600061385582613d91565b61385f8185613dc9565b935061386f818560208601613f76565b80840191505092915050565b6000815461388881613fa9565b6138928186613dc9565b945060018216600081146138ad57600181146138be576138f1565b60ff198316865281860193506138f1565b6138c785613d71565b60005b838110156138e9578154818901526001820191506020810190506138ca565b838801955050505b50505092915050565b6000613907602683613db8565b9150613912826141d1565b604082019050919050565b600061392a601983613db8565b915061393582614220565b602082019050919050565b600061394d601883613db8565b915061395882614249565b602082019050919050565b6000613970602083613db8565b915061397b82614272565b602082019050919050565b6000613993602f83613db8565b915061399e8261429b565b604082019050919050565b60006139b6600083613dad565b91506139c1826142ea565b600082019050919050565b60006139d9601483613db8565b91506139e4826142ed565b602082019050919050565b60006139fc601a83613db8565b9150613a0782614316565b602082019050919050565b6000613a1f601283613db8565b9150613a2a8261433f565b602082019050919050565b6000613a42601383613db8565b9150613a4d82614368565b602082019050919050565b6000613a65601e83613db8565b9150613a7082614391565b602082019050919050565b613a8481613f5d565b82525050565b6000613a9682846137b2565b60148201915081905092915050565b6000613ab1828661384a565b9150613abd828561384a565b9150613ac9828461387b565b9150819050949350505050565b6000613ae1826139a9565b9150819050919050565b6000602082019050613b0060008301846137a3565b92915050565b6000608082019050613b1b60008301876137a3565b613b2860208301866137a3565b613b356040830185613a7b565b8181036060830152613b4781846137d8565b905095945050505050565b6000602082019050613b6760008301846137c9565b92915050565b60006020820190508181036000830152613b878184613811565b905092915050565b60006020820190508181036000830152613ba8816138fa565b9050919050565b60006020820190508181036000830152613bc88161391d565b9050919050565b60006020820190508181036000830152613be881613940565b9050919050565b60006020820190508181036000830152613c0881613963565b9050919050565b60006020820190508181036000830152613c2881613986565b9050919050565b60006020820190508181036000830152613c48816139cc565b9050919050565b60006020820190508181036000830152613c68816139ef565b9050919050565b60006020820190508181036000830152613c8881613a12565b9050919050565b60006020820190508181036000830152613ca881613a35565b9050919050565b60006020820190508181036000830152613cc881613a58565b9050919050565b6000602082019050613ce46000830184613a7b565b92915050565b6000613cf4613d05565b9050613d008282613fdb565b919050565b6000604051905090565b600067ffffffffffffffff821115613d2a57613d29614166565b5b613d33826141b3565b9050602081019050919050565b600067ffffffffffffffff821115613d5b57613d5a614166565b5b613d64826141b3565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613ddf82613f5d565b9150613dea83613f5d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e1f57613e1e6140aa565b5b828201905092915050565b6000613e3582613f5d565b9150613e4083613f5d565b925082613e5057613e4f6140d9565b5b828204905092915050565b6000613e6682613f5d565b9150613e7183613f5d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613eaa57613ea96140aa565b5b828202905092915050565b6000613ec082613f5d565b9150613ecb83613f5d565b925082821015613ede57613edd6140aa565b5b828203905092915050565b6000613ef482613f3d565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613f94578082015181840152602081019050613f79565b83811115613fa3576000848401525b50505050565b60006002820490506001821680613fc157607f821691505b60208210811415613fd557613fd4614108565b5b50919050565b613fe4826141b3565b810181811067ffffffffffffffff8211171561400357614002614166565b5b80604052505050565b600061401782613f5d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561404a576140496140aa565b5b600182019050919050565b600061406082614067565b9050919050565b6000614072826141c4565b9050919050565b600061408482613f5d565b915061408f83613f5d565b92508261409f5761409e6140d9565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46726565204e46547320616d6f756e7420657863656564656400000000000000600082015250565b7f4d6178206d696e7420616d6f756e742065786365656465640000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f4f47732063616e2774206d696e74206d6f7265207468616e2032000000000000600082015250565b7f4f4720737570706c792065786365656465640000000000000000000000000000600082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b7f546869732066756e6374696f6e206973206e6f7420617661696c61626c650000600082015250565b6143c381613ee9565b81146143ce57600080fd5b50565b6143da81613efb565b81146143e557600080fd5b50565b6143f181613f07565b81146143fc57600080fd5b50565b61440881613f11565b811461441357600080fd5b50565b61441f81613f5d565b811461442a57600080fd5b5056fea264697066735822122002cecff6e4c7154a59ff072503d70c33e1394ed4e1e8e9ef01123844ffe9f48864736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5a456b763647387534656e33504246476269624b56676853643350665566326f6b67714b6a69433447336d692f00000000000000000000
-----Decoded View---------------
Arg [0] : _initBaseURI (string): ipfs://QmZEkv6G8u4en3PBFGbibKVghSd3PfUf2okgqKjiC4G3mi/
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d5a456b763647387534656e33504246476269624b566768
Arg [3] : 53643350665566326f6b67714b6a69433447336d692f00000000000000000000
Deployed Bytecode Sourcemap
48277:3660:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30734:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48522:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34119:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35622:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35185:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48411:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29983:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48485:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36479:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51754:180;;;:::i;:::-;;36720:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51244:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51452:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48628:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33928:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31103:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7152:103;;;;;;;;;;;;;:::i;:::-;;51330:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51684:63;;;;;;;;;;;;;:::i;:::-;;6501:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50430:178;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34288:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50299:125;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35898:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48659:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48559:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36976:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48367:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50815:423;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48448:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48593:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51556:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50722:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36248:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7410:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30734:305;30836:4;30888:25;30873:40;;;:11;:40;;;;:105;;;;30945:33;30930:48;;;:11;:48;;;;30873:105;:158;;;;30995:36;31019:11;30995:23;:36::i;:::-;30873:158;30853:178;;30734:305;;;:::o;48522:32::-;;;;:::o;34119:100::-;34173:13;34206:5;34199:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34119:100;:::o;35622:204::-;35690:7;35715:16;35723:7;35715;:16::i;:::-;35710:64;;35740:34;;;;;;;;;;;;;;35710:64;35794:15;:24;35810:7;35794:24;;;;;;;;;;;;;;;;;;;;;35787:31;;35622:204;;;:::o;35185:371::-;35258:13;35274:24;35290:7;35274:15;:24::i;:::-;35258:40;;35319:5;35313:11;;:2;:11;;;35309:48;;;35333:24;;;;;;;;;;;;;;35309:48;35390:5;35374:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;35400:37;35417:5;35424:12;:10;:12::i;:::-;35400:16;:37::i;:::-;35399:38;35374:63;35370:138;;;35461:35;;;;;;;;;;;;;;35370:138;35520:28;35529:2;35533:7;35542:5;35520:8;:28::i;:::-;35247:309;35185:371;;:::o;48411:32::-;;;;:::o;29983:303::-;30027:7;30252:15;:13;:15::i;:::-;30237:12;;30221:13;;:28;:46;30214:53;;29983:303;:::o;48485:32::-;;;;:::o;36479:170::-;36613:28;36623:4;36629:2;36633:7;36613:9;:28::i;:::-;36479:170;;;:::o;51754:180::-;6732:12;:10;:12::i;:::-;6721:23;;:7;:5;:7::i;:::-;:23;;;6713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51807:7:::1;51828:42;51820:56;;51884:21;51820:90;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51806:104;;;51925:2;51917:11;;;::::0;::::1;;51799:135;51754:180::o:0;36720:185::-;36858:39;36875:4;36881:2;36885:7;36858:39;;;;;;;;;;;;:16;:39::i;:::-;36720:185;;;:::o;51244:80::-;6732:12;:10;:12::i;:::-;6721:23;;:7;:5;:7::i;:::-;:23;;;6713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51310:8:::1;51303:4;:15;;;;51244:80:::0;:::o;51452:98::-;6732:12;:10;:12::i;:::-;6721:23;;:7;:5;:7::i;:::-;:23;;;6713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51533:11:::1;51523:7;:21;;;;;;;;;;;;:::i;:::-;;51452:98:::0;:::o;48628:26::-;;;;;;;;;;;;;:::o;33928:124::-;33992:7;34019:20;34031:7;34019:11;:20::i;:::-;:25;;;34012:32;;33928:124;;;:::o;31103:206::-;31167:7;31208:1;31191:19;;:5;:19;;;31187:60;;;31219:28;;;;;;;;;;;;;;31187:60;31273:12;:19;31286:5;31273:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;31265:36;;31258:43;;31103:206;;;:::o;7152:103::-;6732:12;:10;:12::i;:::-;6721:23;;:7;:5;:7::i;:::-;:23;;;6713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7217:30:::1;7244:1;7217:18;:30::i;:::-;7152:103::o:0;51330:116::-;6732:12;:10;:12::i;:::-;6721:23;;:7;:5;:7::i;:::-;:23;;;6713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51423:17:::1;51407:13;:33;;;;51330:116:::0;:::o;51684:63::-;6732:12;:10;:12::i;:::-;6721:23;;:7;:5;:7::i;:::-;:23;;;6713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51735:6:::1;;;;;;;;;;;51734:7;51725:6;;:16;;;;;;;;;;;;;;;;;;51684:63::o:0;6501:87::-;6547:7;6574:6;;;;;;;;;;;6567:13;;6501:87;:::o;50430:178::-;50522:11;50534:4;48954:6;;;;;;;;;;;48953:7;48945:16;;;;;;48990:1;48976:11;:15;48968:24;;;;;;49038:9;;49023:11;49007:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;48999:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;49097:10;;;;;;;;;;;49087:20;;:6;:20;;;49079:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;49171:10;;49154:13;:11;:13::i;:::-;:27;49151:860;;49225:8;;49212:10;;49196:13;:11;:13::i;:::-;:26;;;;:::i;:::-;:37;:51;;;;;49237:10;;;;;;;;;;;49196:51;49193:629;;;49315:8;;49300:11;49287:10;;49271:13;:11;:13::i;:::-;:26;;;;:::i;:::-;:40;;;;:::i;:::-;:52;;49263:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;49408:8;;49393:11;49380:10;;49364:13;:11;:13::i;:::-;:26;;;;:::i;:::-;:40;;;;:::i;:::-;:52;49361:75;;;49431:5;49418:10;;:18;;;;;;;;;;;;;;;;;;49361:75;49474:9;;49459:11;:24;;49451:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;49561:9;;49537;:21;49547:10;49537:21;;;;;;;;;;;;;;;;:33;49529:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;49640:11;49616:9;:21;49626:10;49616:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;49193:629;;;49707:7;:5;:7::i;:::-;49693:21;;:10;:21;;;49690:89;;49744:11;49737:4;;:18;;;;:::i;:::-;49724:9;:31;;49716:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;49690:89;49808:2;49792:13;:18;;;;49193:629;49151:860;;;49889:10;;49874:11;49858:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:41;;49850:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;49974:10;;49959:11;49943:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:41;49940:63;;;49999:4;49986:10;;:17;;;;;;;;;;;;;;;;;;49940:63;49151:860;50040:13;;50025:11;:28;;50017:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;50545:12:::1;;50157;50199:10;50182:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;50172:39;;;;;;50157:54;;50228:50;50247:12;;50228:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50261:10;;50273:4;50228:18;:50::i;:::-;50220:59;;;::::0;::::1;;50568:34:::2;50578:10;50590:11;50568:9;:34::i;:::-;50148:145:::1;50089:1;;50430:178:::0;;;;;:::o;34288:104::-;34344:13;34377:7;34370:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34288:104;:::o;50299:125::-;50356:11;50368:5;48954:6;;;;;;;;;;;48953:7;48945:16;;;;;;48990:1;48976:11;:15;48968:24;;;;;;49038:9;;49023:11;49007:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;48999:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;49097:10;;;;;;;;;;;49087:20;;:6;:20;;;49079:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;49171:10;;49154:13;:11;:13::i;:::-;:27;49151:860;;49225:8;;49212:10;;49196:13;:11;:13::i;:::-;:26;;;;:::i;:::-;:37;:51;;;;;49237:10;;;;;;;;;;;49196:51;49193:629;;;49315:8;;49300:11;49287:10;;49271:13;:11;:13::i;:::-;:26;;;;:::i;:::-;:40;;;;:::i;:::-;:52;;49263:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;49408:8;;49393:11;49380:10;;49364:13;:11;:13::i;:::-;:26;;;;:::i;:::-;:40;;;;:::i;:::-;:52;49361:75;;;49431:5;49418:10;;:18;;;;;;;;;;;;;;;;;;49361:75;49474:9;;49459:11;:24;;49451:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;49561:9;;49537;:21;49547:10;49537:21;;;;;;;;;;;;;;;;:33;49529:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;49640:11;49616:9;:21;49626:10;49616:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;49193:629;;;49707:7;:5;:7::i;:::-;49693:21;;:10;:21;;;49690:89;;49744:11;49737:4;;:18;;;;:::i;:::-;49724:9;:31;;49716:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;49690:89;49808:2;49792:13;:18;;;;49193:629;49151:860;;;49889:10;;49874:11;49858:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:41;;49850:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;49974:10;;49959:11;49943:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:41;49940:63;;;49999:4;49986:10;;:17;;;;;;;;;;;;;;;;;;49940:63;49151:860;50040:13;;50025:11;:28;;50017:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;50384:34:::1;50394:10;50406:11;50384:9;:34::i;:::-;50299:125:::0;;;:::o;35898:279::-;36001:12;:10;:12::i;:::-;35989:24;;:8;:24;;;35985:54;;;36022:17;;;;;;;;;;;;;;35985:54;36097:8;36052:18;:32;36071:12;:10;:12::i;:::-;36052:32;;;;;;;;;;;;;;;:42;36085:8;36052:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;36150:8;36121:48;;36136:12;:10;:12::i;:::-;36121:48;;;36160:8;36121:48;;;;;;:::i;:::-;;;;;;;;35898:279;;:::o;48659:30::-;;;;;;;;;;;;;:::o;48559:29::-;;;;:::o;36976:369::-;37143:28;37153:4;37159:2;37163:7;37143:9;:28::i;:::-;37186:15;:2;:13;;;:15::i;:::-;:76;;;;;37206:56;37237:4;37243:2;37247:7;37256:5;37206:30;:56::i;:::-;37205:57;37186:76;37182:156;;;37286:40;;;;;;;;;;;;;;37182:156;36976:369;;;;:::o;48367:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50815:423::-;50913:13;50954:16;50962:7;50954;:16::i;:::-;50938:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;51044:28;51075:10;:8;:10::i;:::-;51044:41;;51130:1;51105:14;51099:28;:32;:133;;;;;;;;;;;;;;;;;51167:14;51183:18;:7;:16;:18::i;:::-;51203:13;51150:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;51099:133;51092:140;;;50815:423;;;:::o;48448:32::-;;;;:::o;48593:28::-;;;;:::o;51556:122::-;6732:12;:10;:12::i;:::-;6721:23;;:7;:5;:7::i;:::-;:23;;;6713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51655:17:::1;51639:13;:33;;;;;;;;;;;;:::i;:::-;;51556:122:::0;:::o;50722:87::-;6732:12;:10;:12::i;:::-;6721:23;;:7;:5;:7::i;:::-;:23;;;6713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50795:8:::1;50782:10;:21;;;;50722:87:::0;:::o;36248:164::-;36345:4;36369:18;:25;36388:5;36369:25;;;;;;;;;;;;;;;:35;36395:8;36369:35;;;;;;;;;;;;;;;;;;;;;;;;;36362:42;;36248:164;;;;:::o;7410:201::-;6732:12;:10;:12::i;:::-;6721:23;;:7;:5;:7::i;:::-;:23;;;6713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7519:1:::1;7499:22;;:8;:22;;;;7491:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7575:28;7594:8;7575:18;:28::i;:::-;7410:201:::0;:::o;19285:157::-;19370:4;19409:25;19394:40;;;:11;:40;;;;19387:47;;19285:157;;;:::o;37600:187::-;37657:4;37700:7;37681:15;:13;:15::i;:::-;:26;;:53;;;;;37721:13;;37711:7;:23;37681:53;:98;;;;;37752:11;:20;37764:7;37752:20;;;;;;;;;;;:27;;;;;;;;;;;;37751:28;37681:98;37674:105;;37600:187;;;:::o;5225:98::-;5278:7;5305:10;5298:17;;5225:98;:::o;45211:196::-;45353:2;45326:15;:24;45342:7;45326:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;45391:7;45387:2;45371:28;;45380:5;45371:28;;;;;;;;;;;;45211:196;;;:::o;29707:92::-;29763:7;29707:92;:::o;40713:2112::-;40828:35;40866:20;40878:7;40866:11;:20::i;:::-;40828:58;;40899:22;40941:13;:18;;;40925:34;;:12;:10;:12::i;:::-;:34;;;:101;;;;40976:50;40993:13;:18;;;41013:12;:10;:12::i;:::-;40976:16;:50::i;:::-;40925:101;:154;;;;41067:12;:10;:12::i;:::-;41043:36;;:20;41055:7;41043:11;:20::i;:::-;:36;;;40925:154;40899:181;;41098:17;41093:66;;41124:35;;;;;;;;;;;;;;41093:66;41196:4;41174:26;;:13;:18;;;:26;;;41170:67;;41209:28;;;;;;;;;;;;;;41170:67;41266:1;41252:16;;:2;:16;;;41248:52;;;41277:23;;;;;;;;;;;;;;41248:52;41313:43;41335:4;41341:2;41345:7;41354:1;41313:21;:43::i;:::-;41421:49;41438:1;41442:7;41451:13;:18;;;41421:8;:49::i;:::-;41796:1;41766:12;:18;41779:4;41766:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41840:1;41812:12;:16;41825:2;41812:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41886:2;41858:11;:20;41870:7;41858:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;41948:15;41903:11;:20;41915:7;41903:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;42216:19;42248:1;42238:7;:11;42216:33;;42309:1;42268:43;;:11;:24;42280:11;42268:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;42264:445;;;42493:13;;42479:11;:27;42475:219;;;42563:13;:18;;;42531:11;:24;42543:11;42531:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;42646:13;:28;;;42604:11;:24;42616:11;42604:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;42475:219;42264:445;41741:979;42756:7;42752:2;42737:27;;42746:4;42737:27;;;;;;;;;;;;42775:42;42796:4;42802:2;42806:7;42815:1;42775:20;:42::i;:::-;40817:2008;;40713:2112;;;:::o;32758:1108::-;32819:21;;:::i;:::-;32853:12;32868:7;32853:22;;32936:4;32917:15;:13;:15::i;:::-;:23;;:47;;;;;32951:13;;32944:4;:20;32917:47;32913:886;;;32985:31;33019:11;:17;33031:4;33019:17;;;;;;;;;;;32985:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33060:9;:16;;;33055:729;;33131:1;33105:28;;:9;:14;;;:28;;;33101:101;;33169:9;33162:16;;;;;;33101:101;33504:261;33511:4;33504:261;;;33544:6;;;;;;;;33589:11;:17;33601:4;33589:17;;;;;;;;;;;33577:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33663:1;33637:28;;:9;:14;;;:28;;;33633:109;;33705:9;33698:16;;;;;;33633:109;33504:261;;;33055:729;32966:833;32913:886;33827:31;;;;;;;;;;;;;;32758:1108;;;;:::o;7771:191::-;7845:16;7864:6;;;;;;;;;;;7845:25;;7890:8;7881:6;;:17;;;;;;;;;;;;;;;;;;7945:8;7914:40;;7935:8;7914:40;;;;;;;;;;;;7834:128;7771:191;:::o;956:190::-;1081:4;1134;1105:25;1118:5;1125:4;1105:12;:25::i;:::-;:33;1098:40;;956:190;;;;;:::o;37795:104::-;37864:27;37874:2;37878:8;37864:27;;;;;;;;;;;;:9;:27::i;:::-;37795:104;;:::o;9202:326::-;9262:4;9519:1;9497:7;:19;;;:23;9490:30;;9202:326;;;:::o;45899:667::-;46062:4;46099:2;46083:36;;;46120:12;:10;:12::i;:::-;46134:4;46140:7;46149:5;46083:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;46079:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46334:1;46317:6;:13;:18;46313:235;;;46363:40;;;;;;;;;;;;;;46313:235;46506:6;46500:13;46491:6;46487:2;46483:15;46476:38;46079:480;46212:45;;;46202:55;;;:6;:55;;;;46195:62;;;45899:667;;;;;;:::o;50614:102::-;50674:13;50703:7;50696:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50614:102;:::o;2787:723::-;2843:13;3073:1;3064:5;:10;3060:53;;;3091:10;;;;;;;;;;;;;;;;;;;;;3060:53;3123:12;3138:5;3123:20;;3154:14;3179:78;3194:1;3186:4;:9;3179:78;;3212:8;;;;;:::i;:::-;;;;3243:2;3235:10;;;;;:::i;:::-;;;3179:78;;;3267:19;3299:6;3289:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3267:39;;3317:154;3333:1;3324:5;:10;3317:154;;3361:1;3351:11;;;;;:::i;:::-;;;3428:2;3420:5;:10;;;;:::i;:::-;3407:2;:24;;;;:::i;:::-;3394:39;;3377:6;3384;3377:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3457:2;3448:11;;;;;:::i;:::-;;;3317:154;;;3495:6;3481:21;;;;;2787:723;;;;:::o;47214:159::-;;;;;:::o;48032:158::-;;;;;:::o;1508:675::-;1591:7;1611:20;1634:4;1611:27;;1654:9;1649:497;1673:5;:12;1669:1;:16;1649:497;;;1707:20;1730:5;1736:1;1730:8;;;;;;;;:::i;:::-;;;;;;;;1707:31;;1773:12;1757;:28;1753:382;;1900:42;1915:12;1929;1900:14;:42::i;:::-;1885:57;;1753:382;;;2077:42;2092:12;2106;2077:14;:42::i;:::-;2062:57;;1753:382;1692:454;1687:3;;;;;:::i;:::-;;;;1649:497;;;;2163:12;2156:19;;;1508:675;;;;:::o;38262:163::-;38385:32;38391:2;38395:8;38405:5;38412:4;38385:5;:32::i;:::-;38262:163;;;:::o;2191:224::-;2259:13;2322:1;2316:4;2309:15;2351:1;2345:4;2338:15;2392:4;2386;2376:21;2367:30;;2191:224;;;;:::o;38684:1775::-;38823:20;38846:13;;38823:36;;38888:1;38874:16;;:2;:16;;;38870:48;;;38899:19;;;;;;;;;;;;;;38870:48;38945:1;38933:8;:13;38929:44;;;38955:18;;;;;;;;;;;;;;38929:44;38986:61;39016:1;39020:2;39024:12;39038:8;38986:21;:61::i;:::-;39359:8;39324:12;:16;39337:2;39324:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39423:8;39383:12;:16;39396:2;39383:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39482:2;39449:11;:25;39461:12;39449:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;39549:15;39499:11;:25;39511:12;39499:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;39582:20;39605:12;39582:35;;39632:11;39661:8;39646:12;:23;39632:37;;39690:4;:23;;;;;39698:15;:2;:13;;;:15::i;:::-;39690:23;39686:641;;;39734:314;39790:12;39786:2;39765:38;;39782:1;39765:38;;;;;;;;;;;;39831:69;39870:1;39874:2;39878:14;;;;;;39894:5;39831:30;:69::i;:::-;39826:174;;39936:40;;;;;;;;;;;;;;39826:174;40043:3;40027:12;:19;;39734:314;;40129:12;40112:13;;:29;40108:43;;40143:8;;;40108:43;39686:641;;;40192:120;40248:14;;;;;;40244:2;40223:40;;40240:1;40223:40;;;;;;;;;;;;40307:3;40291:12;:19;;40192:120;;39686:641;40357:12;40341:13;:28;;;;39299:1082;;40391:60;40420:1;40424:2;40428:12;40442:8;40391:20;:60::i;:::-;38812:1647;38684:1775;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:139::-;1762:5;1800:6;1787:20;1778:29;;1816:33;1843:5;1816:33;:::i;:::-;1716:139;;;;:::o;1861:137::-;1906:5;1944:6;1931:20;1922:29;;1960:32;1986:5;1960:32;:::i;:::-;1861:137;;;;:::o;2004:141::-;2060:5;2091:6;2085:13;2076:22;;2107:32;2133:5;2107:32;:::i;:::-;2004:141;;;;:::o;2164:338::-;2219:5;2268:3;2261:4;2253:6;2249:17;2245:27;2235:122;;2276:79;;:::i;:::-;2235:122;2393:6;2380:20;2418:78;2492:3;2484:6;2477:4;2469:6;2465:17;2418:78;:::i;:::-;2409:87;;2225:277;2164:338;;;;:::o;2522:340::-;2578:5;2627:3;2620:4;2612:6;2608:17;2604:27;2594:122;;2635:79;;:::i;:::-;2594:122;2752:6;2739:20;2777:79;2852:3;2844:6;2837:4;2829:6;2825:17;2777:79;:::i;:::-;2768:88;;2584:278;2522:340;;;;:::o;2868:139::-;2914:5;2952:6;2939:20;2930:29;;2968:33;2995:5;2968:33;:::i;:::-;2868:139;;;;:::o;3013:329::-;3072:6;3121:2;3109:9;3100:7;3096:23;3092:32;3089:119;;;3127:79;;:::i;:::-;3089:119;3247:1;3272:53;3317:7;3308:6;3297:9;3293:22;3272:53;:::i;:::-;3262:63;;3218:117;3013:329;;;;:::o;3348:474::-;3416:6;3424;3473:2;3461:9;3452:7;3448:23;3444:32;3441:119;;;3479:79;;:::i;:::-;3441:119;3599:1;3624:53;3669:7;3660:6;3649:9;3645:22;3624:53;:::i;:::-;3614:63;;3570:117;3726:2;3752:53;3797:7;3788:6;3777:9;3773:22;3752:53;:::i;:::-;3742:63;;3697:118;3348:474;;;;;:::o;3828:619::-;3905:6;3913;3921;3970:2;3958:9;3949:7;3945:23;3941:32;3938:119;;;3976:79;;:::i;:::-;3938:119;4096:1;4121:53;4166:7;4157:6;4146:9;4142:22;4121:53;:::i;:::-;4111:63;;4067:117;4223:2;4249:53;4294:7;4285:6;4274:9;4270:22;4249:53;:::i;:::-;4239:63;;4194:118;4351:2;4377:53;4422:7;4413:6;4402:9;4398:22;4377:53;:::i;:::-;4367:63;;4322:118;3828:619;;;;;:::o;4453:943::-;4548:6;4556;4564;4572;4621:3;4609:9;4600:7;4596:23;4592:33;4589:120;;;4628:79;;:::i;:::-;4589:120;4748:1;4773:53;4818:7;4809:6;4798:9;4794:22;4773:53;:::i;:::-;4763:63;;4719:117;4875:2;4901:53;4946:7;4937:6;4926:9;4922:22;4901:53;:::i;:::-;4891:63;;4846:118;5003:2;5029:53;5074:7;5065:6;5054:9;5050:22;5029:53;:::i;:::-;5019:63;;4974:118;5159:2;5148:9;5144:18;5131:32;5190:18;5182:6;5179:30;5176:117;;;5212:79;;:::i;:::-;5176:117;5317:62;5371:7;5362:6;5351:9;5347:22;5317:62;:::i;:::-;5307:72;;5102:287;4453:943;;;;;;;:::o;5402:468::-;5467:6;5475;5524:2;5512:9;5503:7;5499:23;5495:32;5492:119;;;5530:79;;:::i;:::-;5492:119;5650:1;5675:53;5720:7;5711:6;5700:9;5696:22;5675:53;:::i;:::-;5665:63;;5621:117;5777:2;5803:50;5845:7;5836:6;5825:9;5821:22;5803:50;:::i;:::-;5793:60;;5748:115;5402:468;;;;;:::o;5876:474::-;5944:6;5952;6001:2;5989:9;5980:7;5976:23;5972:32;5969:119;;;6007:79;;:::i;:::-;5969:119;6127:1;6152:53;6197:7;6188:6;6177:9;6173:22;6152:53;:::i;:::-;6142:63;;6098:117;6254:2;6280:53;6325:7;6316:6;6305:9;6301:22;6280:53;:::i;:::-;6270:63;;6225:118;5876:474;;;;;:::o;6356:329::-;6415:6;6464:2;6452:9;6443:7;6439:23;6435:32;6432:119;;;6470:79;;:::i;:::-;6432:119;6590:1;6615:53;6660:7;6651:6;6640:9;6636:22;6615:53;:::i;:::-;6605:63;;6561:117;6356:329;;;;:::o;6691:327::-;6749:6;6798:2;6786:9;6777:7;6773:23;6769:32;6766:119;;;6804:79;;:::i;:::-;6766:119;6924:1;6949:52;6993:7;6984:6;6973:9;6969:22;6949:52;:::i;:::-;6939:62;;6895:116;6691:327;;;;:::o;7024:349::-;7093:6;7142:2;7130:9;7121:7;7117:23;7113:32;7110:119;;;7148:79;;:::i;:::-;7110:119;7268:1;7293:63;7348:7;7339:6;7328:9;7324:22;7293:63;:::i;:::-;7283:73;;7239:127;7024:349;;;;:::o;7379:509::-;7448:6;7497:2;7485:9;7476:7;7472:23;7468:32;7465:119;;;7503:79;;:::i;:::-;7465:119;7651:1;7640:9;7636:17;7623:31;7681:18;7673:6;7670:30;7667:117;;;7703:79;;:::i;:::-;7667:117;7808:63;7863:7;7854:6;7843:9;7839:22;7808:63;:::i;:::-;7798:73;;7594:287;7379:509;;;;:::o;7894:329::-;7953:6;8002:2;7990:9;7981:7;7977:23;7973:32;7970:119;;;8008:79;;:::i;:::-;7970:119;8128:1;8153:53;8198:7;8189:6;8178:9;8174:22;8153:53;:::i;:::-;8143:63;;8099:117;7894:329;;;;:::o;8229:704::-;8324:6;8332;8340;8389:2;8377:9;8368:7;8364:23;8360:32;8357:119;;;8395:79;;:::i;:::-;8357:119;8515:1;8540:53;8585:7;8576:6;8565:9;8561:22;8540:53;:::i;:::-;8530:63;;8486:117;8670:2;8659:9;8655:18;8642:32;8701:18;8693:6;8690:30;8687:117;;;8723:79;;:::i;:::-;8687:117;8836:80;8908:7;8899:6;8888:9;8884:22;8836:80;:::i;:::-;8818:98;;;;8613:313;8229:704;;;;;:::o;8939:118::-;9026:24;9044:5;9026:24;:::i;:::-;9021:3;9014:37;8939:118;;:::o;9063:157::-;9168:45;9188:24;9206:5;9188:24;:::i;:::-;9168:45;:::i;:::-;9163:3;9156:58;9063:157;;:::o;9226:109::-;9307:21;9322:5;9307:21;:::i;:::-;9302:3;9295:34;9226:109;;:::o;9341:360::-;9427:3;9455:38;9487:5;9455:38;:::i;:::-;9509:70;9572:6;9567:3;9509:70;:::i;:::-;9502:77;;9588:52;9633:6;9628:3;9621:4;9614:5;9610:16;9588:52;:::i;:::-;9665:29;9687:6;9665:29;:::i;:::-;9660:3;9656:39;9649:46;;9431:270;9341:360;;;;:::o;9707:364::-;9795:3;9823:39;9856:5;9823:39;:::i;:::-;9878:71;9942:6;9937:3;9878:71;:::i;:::-;9871:78;;9958:52;10003:6;9998:3;9991:4;9984:5;9980:16;9958:52;:::i;:::-;10035:29;10057:6;10035:29;:::i;:::-;10030:3;10026:39;10019:46;;9799:272;9707:364;;;;:::o;10077:377::-;10183:3;10211:39;10244:5;10211:39;:::i;:::-;10266:89;10348:6;10343:3;10266:89;:::i;:::-;10259:96;;10364:52;10409:6;10404:3;10397:4;10390:5;10386:16;10364:52;:::i;:::-;10441:6;10436:3;10432:16;10425:23;;10187:267;10077:377;;;;:::o;10484:845::-;10587:3;10624:5;10618:12;10653:36;10679:9;10653:36;:::i;:::-;10705:89;10787:6;10782:3;10705:89;:::i;:::-;10698:96;;10825:1;10814:9;10810:17;10841:1;10836:137;;;;10987:1;10982:341;;;;10803:520;;10836:137;10920:4;10916:9;10905;10901:25;10896:3;10889:38;10956:6;10951:3;10947:16;10940:23;;10836:137;;10982:341;11049:38;11081:5;11049:38;:::i;:::-;11109:1;11123:154;11137:6;11134:1;11131:13;11123:154;;;11211:7;11205:14;11201:1;11196:3;11192:11;11185:35;11261:1;11252:7;11248:15;11237:26;;11159:4;11156:1;11152:12;11147:17;;11123:154;;;11306:6;11301:3;11297:16;11290:23;;10989:334;;10803:520;;10591:738;;10484:845;;;;:::o;11335:366::-;11477:3;11498:67;11562:2;11557:3;11498:67;:::i;:::-;11491:74;;11574:93;11663:3;11574:93;:::i;:::-;11692:2;11687:3;11683:12;11676:19;;11335:366;;;:::o;11707:::-;11849:3;11870:67;11934:2;11929:3;11870:67;:::i;:::-;11863:74;;11946:93;12035:3;11946:93;:::i;:::-;12064:2;12059:3;12055:12;12048:19;;11707:366;;;:::o;12079:::-;12221:3;12242:67;12306:2;12301:3;12242:67;:::i;:::-;12235:74;;12318:93;12407:3;12318:93;:::i;:::-;12436:2;12431:3;12427:12;12420:19;;12079:366;;;:::o;12451:::-;12593:3;12614:67;12678:2;12673:3;12614:67;:::i;:::-;12607:74;;12690:93;12779:3;12690:93;:::i;:::-;12808:2;12803:3;12799:12;12792:19;;12451:366;;;:::o;12823:::-;12965:3;12986:67;13050:2;13045:3;12986:67;:::i;:::-;12979:74;;13062:93;13151:3;13062:93;:::i;:::-;13180:2;13175:3;13171:12;13164:19;;12823:366;;;:::o;13195:398::-;13354:3;13375:83;13456:1;13451:3;13375:83;:::i;:::-;13368:90;;13467:93;13556:3;13467:93;:::i;:::-;13585:1;13580:3;13576:11;13569:18;;13195:398;;;:::o;13599:366::-;13741:3;13762:67;13826:2;13821:3;13762:67;:::i;:::-;13755:74;;13838:93;13927:3;13838:93;:::i;:::-;13956:2;13951:3;13947:12;13940:19;;13599:366;;;:::o;13971:::-;14113:3;14134:67;14198:2;14193:3;14134:67;:::i;:::-;14127:74;;14210:93;14299:3;14210:93;:::i;:::-;14328:2;14323:3;14319:12;14312:19;;13971:366;;;:::o;14343:::-;14485:3;14506:67;14570:2;14565:3;14506:67;:::i;:::-;14499:74;;14582:93;14671:3;14582:93;:::i;:::-;14700:2;14695:3;14691:12;14684:19;;14343:366;;;:::o;14715:::-;14857:3;14878:67;14942:2;14937:3;14878:67;:::i;:::-;14871:74;;14954:93;15043:3;14954:93;:::i;:::-;15072:2;15067:3;15063:12;15056:19;;14715:366;;;:::o;15087:::-;15229:3;15250:67;15314:2;15309:3;15250:67;:::i;:::-;15243:74;;15326:93;15415:3;15326:93;:::i;:::-;15444:2;15439:3;15435:12;15428:19;;15087:366;;;:::o;15459:118::-;15546:24;15564:5;15546:24;:::i;:::-;15541:3;15534:37;15459:118;;:::o;15583:256::-;15695:3;15710:75;15781:3;15772:6;15710:75;:::i;:::-;15810:2;15805:3;15801:12;15794:19;;15830:3;15823:10;;15583:256;;;;:::o;15845:589::-;16070:3;16092:95;16183:3;16174:6;16092:95;:::i;:::-;16085:102;;16204:95;16295:3;16286:6;16204:95;:::i;:::-;16197:102;;16316:92;16404:3;16395:6;16316:92;:::i;:::-;16309:99;;16425:3;16418:10;;15845:589;;;;;;:::o;16440:379::-;16624:3;16646:147;16789:3;16646:147;:::i;:::-;16639:154;;16810:3;16803:10;;16440:379;;;:::o;16825:222::-;16918:4;16956:2;16945:9;16941:18;16933:26;;16969:71;17037:1;17026:9;17022:17;17013:6;16969:71;:::i;:::-;16825:222;;;;:::o;17053:640::-;17248:4;17286:3;17275:9;17271:19;17263:27;;17300:71;17368:1;17357:9;17353:17;17344:6;17300:71;:::i;:::-;17381:72;17449:2;17438:9;17434:18;17425:6;17381:72;:::i;:::-;17463;17531:2;17520:9;17516:18;17507:6;17463:72;:::i;:::-;17582:9;17576:4;17572:20;17567:2;17556:9;17552:18;17545:48;17610:76;17681:4;17672:6;17610:76;:::i;:::-;17602:84;;17053:640;;;;;;;:::o;17699:210::-;17786:4;17824:2;17813:9;17809:18;17801:26;;17837:65;17899:1;17888:9;17884:17;17875:6;17837:65;:::i;:::-;17699:210;;;;:::o;17915:313::-;18028:4;18066:2;18055:9;18051:18;18043:26;;18115:9;18109:4;18105:20;18101:1;18090:9;18086:17;18079:47;18143:78;18216:4;18207:6;18143:78;:::i;:::-;18135:86;;17915:313;;;;:::o;18234:419::-;18400:4;18438:2;18427:9;18423:18;18415:26;;18487:9;18481:4;18477:20;18473:1;18462:9;18458:17;18451:47;18515:131;18641:4;18515:131;:::i;:::-;18507:139;;18234:419;;;:::o;18659:::-;18825:4;18863:2;18852:9;18848:18;18840:26;;18912:9;18906:4;18902:20;18898:1;18887:9;18883:17;18876:47;18940:131;19066:4;18940:131;:::i;:::-;18932:139;;18659:419;;;:::o;19084:::-;19250:4;19288:2;19277:9;19273:18;19265:26;;19337:9;19331:4;19327:20;19323:1;19312:9;19308:17;19301:47;19365:131;19491:4;19365:131;:::i;:::-;19357:139;;19084:419;;;:::o;19509:::-;19675:4;19713:2;19702:9;19698:18;19690:26;;19762:9;19756:4;19752:20;19748:1;19737:9;19733:17;19726:47;19790:131;19916:4;19790:131;:::i;:::-;19782:139;;19509:419;;;:::o;19934:::-;20100:4;20138:2;20127:9;20123:18;20115:26;;20187:9;20181:4;20177:20;20173:1;20162:9;20158:17;20151:47;20215:131;20341:4;20215:131;:::i;:::-;20207:139;;19934:419;;;:::o;20359:::-;20525:4;20563:2;20552:9;20548:18;20540:26;;20612:9;20606:4;20602:20;20598:1;20587:9;20583:17;20576:47;20640:131;20766:4;20640:131;:::i;:::-;20632:139;;20359:419;;;:::o;20784:::-;20950:4;20988:2;20977:9;20973:18;20965:26;;21037:9;21031:4;21027:20;21023:1;21012:9;21008:17;21001:47;21065:131;21191:4;21065:131;:::i;:::-;21057:139;;20784:419;;;:::o;21209:::-;21375:4;21413:2;21402:9;21398:18;21390:26;;21462:9;21456:4;21452:20;21448:1;21437:9;21433:17;21426:47;21490:131;21616:4;21490:131;:::i;:::-;21482:139;;21209:419;;;:::o;21634:::-;21800:4;21838:2;21827:9;21823:18;21815:26;;21887:9;21881:4;21877:20;21873:1;21862:9;21858:17;21851:47;21915:131;22041:4;21915:131;:::i;:::-;21907:139;;21634:419;;;:::o;22059:::-;22225:4;22263:2;22252:9;22248:18;22240:26;;22312:9;22306:4;22302:20;22298:1;22287:9;22283:17;22276:47;22340:131;22466:4;22340:131;:::i;:::-;22332:139;;22059:419;;;:::o;22484:222::-;22577:4;22615:2;22604:9;22600:18;22592:26;;22628:71;22696:1;22685:9;22681:17;22672:6;22628:71;:::i;:::-;22484:222;;;;:::o;22712:129::-;22746:6;22773:20;;:::i;:::-;22763:30;;22802:33;22830:4;22822:6;22802:33;:::i;:::-;22712:129;;;:::o;22847:75::-;22880:6;22913:2;22907:9;22897:19;;22847:75;:::o;22928:307::-;22989:4;23079:18;23071:6;23068:30;23065:56;;;23101:18;;:::i;:::-;23065:56;23139:29;23161:6;23139:29;:::i;:::-;23131:37;;23223:4;23217;23213:15;23205:23;;22928:307;;;:::o;23241:308::-;23303:4;23393:18;23385:6;23382:30;23379:56;;;23415:18;;:::i;:::-;23379:56;23453:29;23475:6;23453:29;:::i;:::-;23445:37;;23537:4;23531;23527:15;23519:23;;23241:308;;;:::o;23555:141::-;23604:4;23627:3;23619:11;;23650:3;23647:1;23640:14;23684:4;23681:1;23671:18;23663:26;;23555:141;;;:::o;23702:98::-;23753:6;23787:5;23781:12;23771:22;;23702:98;;;:::o;23806:99::-;23858:6;23892:5;23886:12;23876:22;;23806:99;;;:::o;23911:168::-;23994:11;24028:6;24023:3;24016:19;24068:4;24063:3;24059:14;24044:29;;23911:168;;;;:::o;24085:147::-;24186:11;24223:3;24208:18;;24085:147;;;;:::o;24238:169::-;24322:11;24356:6;24351:3;24344:19;24396:4;24391:3;24387:14;24372:29;;24238:169;;;;:::o;24413:148::-;24515:11;24552:3;24537:18;;24413:148;;;;:::o;24567:305::-;24607:3;24626:20;24644:1;24626:20;:::i;:::-;24621:25;;24660:20;24678:1;24660:20;:::i;:::-;24655:25;;24814:1;24746:66;24742:74;24739:1;24736:81;24733:107;;;24820:18;;:::i;:::-;24733:107;24864:1;24861;24857:9;24850:16;;24567:305;;;;:::o;24878:185::-;24918:1;24935:20;24953:1;24935:20;:::i;:::-;24930:25;;24969:20;24987:1;24969:20;:::i;:::-;24964:25;;25008:1;24998:35;;25013:18;;:::i;:::-;24998:35;25055:1;25052;25048:9;25043:14;;24878:185;;;;:::o;25069:348::-;25109:7;25132:20;25150:1;25132:20;:::i;:::-;25127:25;;25166:20;25184:1;25166:20;:::i;:::-;25161:25;;25354:1;25286:66;25282:74;25279:1;25276:81;25271:1;25264:9;25257:17;25253:105;25250:131;;;25361:18;;:::i;:::-;25250:131;25409:1;25406;25402:9;25391:20;;25069:348;;;;:::o;25423:191::-;25463:4;25483:20;25501:1;25483:20;:::i;:::-;25478:25;;25517:20;25535:1;25517:20;:::i;:::-;25512:25;;25556:1;25553;25550:8;25547:34;;;25561:18;;:::i;:::-;25547:34;25606:1;25603;25599:9;25591:17;;25423:191;;;;:::o;25620:96::-;25657:7;25686:24;25704:5;25686:24;:::i;:::-;25675:35;;25620:96;;;:::o;25722:90::-;25756:7;25799:5;25792:13;25785:21;25774:32;;25722:90;;;:::o;25818:77::-;25855:7;25884:5;25873:16;;25818:77;;;:::o;25901:149::-;25937:7;25977:66;25970:5;25966:78;25955:89;;25901:149;;;:::o;26056:126::-;26093:7;26133:42;26126:5;26122:54;26111:65;;26056:126;;;:::o;26188:77::-;26225:7;26254:5;26243:16;;26188:77;;;:::o;26271:154::-;26355:6;26350:3;26345;26332:30;26417:1;26408:6;26403:3;26399:16;26392:27;26271:154;;;:::o;26431:307::-;26499:1;26509:113;26523:6;26520:1;26517:13;26509:113;;;26608:1;26603:3;26599:11;26593:18;26589:1;26584:3;26580:11;26573:39;26545:2;26542:1;26538:10;26533:15;;26509:113;;;26640:6;26637:1;26634:13;26631:101;;;26720:1;26711:6;26706:3;26702:16;26695:27;26631:101;26480:258;26431:307;;;:::o;26744:320::-;26788:6;26825:1;26819:4;26815:12;26805:22;;26872:1;26866:4;26862:12;26893:18;26883:81;;26949:4;26941:6;26937:17;26927:27;;26883:81;27011:2;27003:6;27000:14;26980:18;26977:38;26974:84;;;27030:18;;:::i;:::-;26974:84;26795:269;26744:320;;;:::o;27070:281::-;27153:27;27175:4;27153:27;:::i;:::-;27145:6;27141:40;27283:6;27271:10;27268:22;27247:18;27235:10;27232:34;27229:62;27226:88;;;27294:18;;:::i;:::-;27226:88;27334:10;27330:2;27323:22;27113:238;27070:281;;:::o;27357:233::-;27396:3;27419:24;27437:5;27419:24;:::i;:::-;27410:33;;27465:66;27458:5;27455:77;27452:103;;;27535:18;;:::i;:::-;27452:103;27582:1;27575:5;27571:13;27564:20;;27357:233;;;:::o;27596:100::-;27635:7;27664:26;27684:5;27664:26;:::i;:::-;27653:37;;27596:100;;;:::o;27702:94::-;27741:7;27770:20;27784:5;27770:20;:::i;:::-;27759:31;;27702:94;;;:::o;27802:176::-;27834:1;27851:20;27869:1;27851:20;:::i;:::-;27846:25;;27885:20;27903:1;27885:20;:::i;:::-;27880:25;;27924:1;27914:35;;27929:18;;:::i;:::-;27914:35;27970:1;27967;27963:9;27958:14;;27802:176;;;;:::o;27984:180::-;28032:77;28029:1;28022:88;28129:4;28126:1;28119:15;28153:4;28150:1;28143:15;28170:180;28218:77;28215:1;28208:88;28315:4;28312:1;28305:15;28339:4;28336:1;28329:15;28356:180;28404:77;28401:1;28394:88;28501:4;28498:1;28491:15;28525:4;28522:1;28515:15;28542:180;28590:77;28587:1;28580:88;28687:4;28684:1;28677:15;28711:4;28708:1;28701:15;28728:180;28776:77;28773:1;28766:88;28873:4;28870:1;28863:15;28897:4;28894:1;28887:15;28914:117;29023:1;29020;29013:12;29037:117;29146:1;29143;29136:12;29160:117;29269:1;29266;29259:12;29283:117;29392:1;29389;29382:12;29406:117;29515:1;29512;29505:12;29529:117;29638:1;29635;29628:12;29652:102;29693:6;29744:2;29740:7;29735:2;29728:5;29724:14;29720:28;29710:38;;29652:102;;;:::o;29760:94::-;29793:8;29841:5;29837:2;29833:14;29812:35;;29760:94;;;:::o;29860:225::-;30000:34;29996:1;29988:6;29984:14;29977:58;30069:8;30064:2;30056:6;30052:15;30045:33;29860:225;:::o;30091:175::-;30231:27;30227:1;30219:6;30215:14;30208:51;30091:175;:::o;30272:174::-;30412:26;30408:1;30400:6;30396:14;30389:50;30272:174;:::o;30452:182::-;30592:34;30588:1;30580:6;30576:14;30569:58;30452:182;:::o;30640:234::-;30780:34;30776:1;30768:6;30764:14;30757:58;30849:17;30844:2;30836:6;30832:15;30825:42;30640:234;:::o;30880:114::-;;:::o;31000:170::-;31140:22;31136:1;31128:6;31124:14;31117:46;31000:170;:::o;31176:176::-;31316:28;31312:1;31304:6;31300:14;31293:52;31176:176;:::o;31358:168::-;31498:20;31494:1;31486:6;31482:14;31475:44;31358:168;:::o;31532:169::-;31672:21;31668:1;31660:6;31656:14;31649:45;31532:169;:::o;31707:180::-;31847:32;31843:1;31835:6;31831:14;31824:56;31707:180;:::o;31893:122::-;31966:24;31984:5;31966:24;:::i;:::-;31959:5;31956:35;31946:63;;32005:1;32002;31995:12;31946:63;31893:122;:::o;32021:116::-;32091:21;32106:5;32091:21;:::i;:::-;32084:5;32081:32;32071:60;;32127:1;32124;32117:12;32071:60;32021:116;:::o;32143:122::-;32216:24;32234:5;32216:24;:::i;:::-;32209:5;32206:35;32196:63;;32255:1;32252;32245:12;32196:63;32143:122;:::o;32271:120::-;32343:23;32360:5;32343:23;:::i;:::-;32336:5;32333:34;32323:62;;32381:1;32378;32371:12;32323:62;32271:120;:::o;32397:122::-;32470:24;32488:5;32470:24;:::i;:::-;32463:5;32460:35;32450:63;;32509:1;32506;32499:12;32450:63;32397:122;:::o
Swarm Source
ipfs://02cecff6e4c7154a59ff072503d70c33e1394ed4e1e8e9ef01123844ffe9f488
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.