Feature Tip: Add private address tag to any address under My Name Tag !
This is a fake Wordle token.
ERC-721
Phish / Hack
Overview
Max Total Supply
358 ERC-721 TOKEN*
Holders
59
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 ERC-721 TOKEN*Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Wordle
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-17 */ /** *Submitted for verification at Etherscan.io on 2021-12-15 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/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 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 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @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/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/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/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/token/ERC721/ERC721.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: @openzeppelin/contracts/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() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity >=0.7.0 <0.9.0; contract Wordle is ERC721Enumerable, Ownable { using Strings for uint256; string public baseTokenURI; string public baseExtension = ".json"; uint256 public maxSupply = 10000; uint256 public mintPrice = 0.01 ether; bool public paused = false; bool public giveStatus = true; /** * @dev Throws if called by any account is not ownerListed. */ constructor() ERC721("Wordle", "Wordle") { //setBaseURI(baseURI); } function price() public view returns (uint256) { return mintPrice; } function mint(uint256[] memory _mintCount, address[] memory to) public payable { uint256 supply = totalSupply(); if (msg.sender == owner()) { for (uint256 i = 0; i < to.length; i++) { supply = totalSupply(); require(supply + _mintCount[i] < maxSupply, 'This transaction woud exceed max supply of Wordle'); for (uint256 j = 1; j <= _mintCount[i]; j++) { _safeMint(to[i], supply + j); } } } else { require(!paused, 'Contract is paused.'); require(supply + _mintCount[0] < maxSupply, 'This transaction would exceed max supply of Wordle'); require(msg.value >= price() * _mintCount[0], 'Ether value is too low'); if (giveStatus) { _mintCount[0] += uint256(_mintCount[0] / 5); } for (uint256 i = 1; i <= _mintCount[0]; i++) { _safeMint(msg.sender, supply + i); } } } function _baseURI() internal view virtual override returns (string memory) { return baseTokenURI; } 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 setBaseURI(string memory baseURI) public onlyOwner { baseTokenURI = baseURI; } function setPrice(uint256 _mintPrice) public onlyOwner { mintPrice = _mintPrice; } function setSupply(uint256 _max_supply) public onlyOwner { maxSupply = _max_supply; } function setBaseExtension(string memory _base_extension) public onlyOwner { baseExtension = _base_extension; } function pause(bool _state) public onlyOwner { paused = _state; } function tokensOfOwner(address owner) public view returns (uint256[] memory) { uint256 tokenCount = balanceOf(owner); uint256[] memory tokenIds = new uint256[](tokenCount); for (uint256 i = 1; i <= tokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(owner, i); } return tokenIds; } function info() public view returns (uint256, uint256, uint256, address) { return (price(), totalSupply(), maxSupply, owner()); } function withdrawAll() public payable onlyOwner { uint256 amount = address(this).balance; payable(owner()).transfer(amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"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":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"giveStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"info","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"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":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_mintCount","type":"uint256[]"},{"internalType":"address[]","name":"to","type":"address[]"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"_base_extension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_max_supply","type":"uint256"}],"name":"setSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60c06040526005608081905264173539b7b760d91b60a09081526200002891600c919062000127565b50612710600d55662386f26fc10000600e55600f805461ffff19166101001790553480156200005657600080fd5b50604080518082018252600680825265576f72646c6560d01b602080840182815285518087019096529285528401528151919291620000989160009162000127565b508051620000ae90600190602084019062000127565b505050620000cb620000c5620000d160201b60201c565b620000d5565b6200020a565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200013590620001cd565b90600052602060002090601f016020900481019282620001595760008555620001a4565b82601f106200017457805160ff1916838001178555620001a4565b82800160010185558215620001a4579182015b82811115620001a457825182559160200191906001019062000187565b50620001b2929150620001b6565b5090565b5b80821115620001b25760008155600101620001b7565b600181811c90821680620001e257607f821691505b602082108114156200020457634e487b7160e01b600052602260045260246000fd5b50919050565b6126fc806200021a6000396000f3fe6080604052600436106102045760003560e01c8063715018a611610118578063b88d4fde116100a0578063d5abeb011161006f578063d5abeb01146105c2578063da3ef23f146105d8578063e985e9c5146105f8578063f2fde38b14610641578063fa2a94ef1461066157600080fd5b8063b88d4fde14610558578063c668286214610578578063c87b56dd1461058d578063d547cfb7146105ad57600080fd5b806390f94c65116100e757806390f94c65146104cf57806391b7f5ed146104ee57806395d89b411461050e578063a035b1fe14610523578063a22cb4651461053857600080fd5b8063715018a6146104675780638462151c1461047c578063853828b6146104a95780638da5cb5b146104b157600080fd5b8063370158ea1161019b57806355f804b31161016a57806355f804b3146103d75780635c975abb146103f75780636352211e146104115780636817c76c1461043157806370a082311461044757600080fd5b8063370158ea146103395780633b4c4b251461037757806342842e0e146103975780634f6ccce7146103b757600080fd5b8063095ea7b3116101d7578063095ea7b3146102ba57806318160ddd146102da57806323b872dd146102f95780632f745c591461031957600080fd5b806301ffc9a71461020957806302329a291461023e57806306fdde0314610260578063081812fc14610282575b600080fd5b34801561021557600080fd5b506102296102243660046121fd565b610674565b60405190151581526020015b60405180910390f35b34801561024a57600080fd5b5061025e6102593660046121e2565b61069f565b005b34801561026c57600080fd5b506102756106e5565b604051610235919061240a565b34801561028e57600080fd5b506102a261029d366004612280565b610777565b6040516001600160a01b039091168152602001610235565b3480156102c657600080fd5b5061025e6102d53660046120f8565b61080c565b3480156102e657600080fd5b506008545b604051908152602001610235565b34801561030557600080fd5b5061025e610314366004612016565b610922565b34801561032557600080fd5b506102eb6103343660046120f8565b610953565b34801561034557600080fd5b5061034e6109e9565b604080519485526020850193909352918301526001600160a01b03166060820152608001610235565b34801561038357600080fd5b5061025e610392366004612280565b610a18565b3480156103a357600080fd5b5061025e6103b2366004612016565b610a47565b3480156103c357600080fd5b506102eb6103d2366004612280565b610a62565b3480156103e357600080fd5b5061025e6103f2366004612237565b610af5565b34801561040357600080fd5b50600f546102299060ff1681565b34801561041d57600080fd5b506102a261042c366004612280565b610b36565b34801561043d57600080fd5b506102eb600e5481565b34801561045357600080fd5b506102eb610462366004611fc8565b610bad565b34801561047357600080fd5b5061025e610c34565b34801561048857600080fd5b5061049c610497366004611fc8565b610c6a565b60405161023591906123c6565b61025e610d0b565b3480156104bd57600080fd5b50600a546001600160a01b03166102a2565b3480156104db57600080fd5b50600f5461022990610100900460ff1681565b3480156104fa57600080fd5b5061025e610509366004612280565b610d80565b34801561051a57600080fd5b50610275610daf565b34801561052f57600080fd5b50600e546102eb565b34801561054457600080fd5b5061025e6105533660046120ce565b610dbe565b34801561056457600080fd5b5061025e610573366004612052565b610e83565b34801561058457600080fd5b50610275610ebb565b34801561059957600080fd5b506102756105a8366004612280565b610f49565b3480156105b957600080fd5b50610275611027565b3480156105ce57600080fd5b506102eb600d5481565b3480156105e457600080fd5b5061025e6105f3366004612237565b611034565b34801561060457600080fd5b50610229610613366004611fe3565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561064d57600080fd5b5061025e61065c366004611fc8565b611071565b61025e61066f366004612122565b61110c565b60006001600160e01b0319821663780e9d6360e01b1480610699575061069982611450565b92915050565b600a546001600160a01b031633146106d25760405162461bcd60e51b81526004016106c99061246f565b60405180910390fd5b600f805460ff1916911515919091179055565b6060600080546106f4906125d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610720906125d8565b801561076d5780601f106107425761010080835404028352916020019161076d565b820191906000526020600020905b81548152906001019060200180831161075057829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166107f05760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016106c9565b506000908152600460205260409020546001600160a01b031690565b600061081782610b36565b9050806001600160a01b0316836001600160a01b031614156108855760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016106c9565b336001600160a01b03821614806108a157506108a18133610613565b6109135760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016106c9565b61091d83836114a0565b505050565b61092c338261150e565b6109485760405162461bcd60e51b81526004016106c9906124a4565b61091d838383611605565b600061095e83610bad565b82106109c05760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016106c9565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6000806000806109f8600e5490565b600854600d54600a546001600160a01b0316935093509350935090919293565b600a546001600160a01b03163314610a425760405162461bcd60e51b81526004016106c99061246f565b600d55565b61091d83838360405180602001604052806000815250610e83565b6000610a6d60085490565b8210610ad05760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016106c9565b60088281548110610ae357610ae3612684565b90600052602060002001549050919050565b600a546001600160a01b03163314610b1f5760405162461bcd60e51b81526004016106c99061246f565b8051610b3290600b906020840190611e32565b5050565b6000818152600260205260408120546001600160a01b0316806106995760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016106c9565b60006001600160a01b038216610c185760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016106c9565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b03163314610c5e5760405162461bcd60e51b81526004016106c99061246f565b610c6860006117b0565b565b60606000610c7783610bad565b905060008167ffffffffffffffff811115610c9457610c9461269a565b604051908082528060200260200182016040528015610cbd578160200160208202803683370190505b50905060015b828111610d0357610cd48582610953565b828281518110610ce657610ce6612684565b602090810291909101015280610cfb81612613565b915050610cc3565b509392505050565b600a546001600160a01b03163314610d355760405162461bcd60e51b81526004016106c99061246f565b47610d48600a546001600160a01b031690565b6001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015610b32573d6000803e3d6000fd5b600a546001600160a01b03163314610daa5760405162461bcd60e51b81526004016106c99061246f565b600e55565b6060600180546106f4906125d8565b6001600160a01b038216331415610e175760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016106c9565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610e8d338361150e565b610ea95760405162461bcd60e51b81526004016106c9906124a4565b610eb584848484611802565b50505050565b600c8054610ec8906125d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef4906125d8565b8015610f415780601f10610f1657610100808354040283529160200191610f41565b820191906000526020600020905b815481529060010190602001808311610f2457829003601f168201915b505050505081565b6000818152600260205260409020546060906001600160a01b0316610fc85760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016106c9565b6000610fd2611835565b90506000815111610ff25760405180602001604052806000815250611020565b80610ffc84611844565b600c604051602001611010939291906122c5565b6040516020818303038152906040525b9392505050565b600b8054610ec8906125d8565b600a546001600160a01b0316331461105e5760405162461bcd60e51b81526004016106c99061246f565b8051610b3290600c906020840190611e32565b600a546001600160a01b0316331461109b5760405162461bcd60e51b81526004016106c99061246f565b6001600160a01b0381166111005760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106c9565b611109816117b0565b50565b600061111760085490565b905061112b600a546001600160a01b031690565b6001600160a01b0316336001600160a01b0316141561125a5760005b8251811015610eb5576008549150600d5484828151811061116a5761116a612684565b60200260200101518361117d919061254a565b106111e45760405162461bcd60e51b815260206004820152603160248201527f54686973207472616e73616374696f6e20776f756420657863656564206d617860448201527020737570706c79206f6620576f72646c6560781b60648201526084016106c9565b60015b8482815181106111f9576111f9612684565b602002602001015181116112475761123584838151811061121c5761121c612684565b60200260200101518285611230919061254a565b611942565b8061123f81612613565b9150506111e7565b508061125281612613565b915050611147565b600f5460ff16156112a35760405162461bcd60e51b815260206004820152601360248201527221b7b73a3930b1ba1034b9903830bab9b2b21760691b60448201526064016106c9565b600d54836000815181106112b9576112b9612684565b6020026020010151826112cc919061254a565b106113345760405162461bcd60e51b815260206004820152603260248201527f54686973207472616e73616374696f6e20776f756c6420657863656564206d616044820152717820737570706c79206f6620576f72646c6560701b60648201526084016106c9565b8260008151811061134757611347612684565b6020026020010151611358600e5490565b6113629190612576565b3410156113aa5760405162461bcd60e51b815260206004820152601660248201527545746865722076616c756520697320746f6f206c6f7760501b60448201526064016106c9565b600f54610100900460ff161561140c576005836000815181106113cf576113cf612684565b60200260200101516113e19190612562565b836000815181106113f4576113f4612684565b60200260200101818151611408919061254a565b9052505b60015b8360008151811061142257611422612684565b60200260200101518111610eb55761143e33611230838561254a565b8061144881612613565b91505061140f565b60006001600160e01b031982166380ac58cd60e01b148061148157506001600160e01b03198216635b5e139f60e01b145b8061069957506301ffc9a760e01b6001600160e01b0319831614610699565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906114d582610b36565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166115875760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016106c9565b600061159283610b36565b9050806001600160a01b0316846001600160a01b031614806115cd5750836001600160a01b03166115c284610777565b6001600160a01b0316145b806115fd57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661161882610b36565b6001600160a01b0316146116805760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016106c9565b6001600160a01b0382166116e25760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016106c9565b6116ed83838361195c565b6116f86000826114a0565b6001600160a01b0383166000908152600360205260408120805460019290611721908490612595565b90915550506001600160a01b038216600090815260036020526040812080546001929061174f90849061254a565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61180d848484611605565b61181984848484611a14565b610eb55760405162461bcd60e51b81526004016106c99061241d565b6060600b80546106f4906125d8565b6060816118685750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611892578061187c81612613565b915061188b9050600a83612562565b915061186c565b60008167ffffffffffffffff8111156118ad576118ad61269a565b6040519080825280601f01601f1916602001820160405280156118d7576020820181803683370190505b5090505b84156115fd576118ec600183612595565b91506118f9600a8661262e565b61190490603061254a565b60f81b81838151811061191957611919612684565b60200101906001600160f81b031916908160001a90535061193b600a86612562565b94506118db565b610b32828260405180602001604052806000815250611b21565b6001600160a01b0383166119b7576119b281600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6119da565b816001600160a01b0316836001600160a01b0316146119da576119da8382611b54565b6001600160a01b0382166119f15761091d81611bf1565b826001600160a01b0316826001600160a01b03161461091d5761091d8282611ca0565b60006001600160a01b0384163b15611b1657604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611a58903390899088908890600401612389565b602060405180830381600087803b158015611a7257600080fd5b505af1925050508015611aa2575060408051601f3d908101601f19168201909252611a9f9181019061221a565b60015b611afc573d808015611ad0576040519150601f19603f3d011682016040523d82523d6000602084013e611ad5565b606091505b508051611af45760405162461bcd60e51b81526004016106c99061241d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506115fd565b506001949350505050565b611b2b8383611ce4565b611b386000848484611a14565b61091d5760405162461bcd60e51b81526004016106c99061241d565b60006001611b6184610bad565b611b6b9190612595565b600083815260076020526040902054909150808214611bbe576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611c0390600190612595565b60008381526009602052604081205460088054939450909284908110611c2b57611c2b612684565b906000526020600020015490508060088381548110611c4c57611c4c612684565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611c8457611c8461266e565b6001900381819060005260206000200160009055905550505050565b6000611cab83610bad565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b038216611d3a5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016106c9565b6000818152600260205260409020546001600160a01b031615611d9f5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106c9565b611dab6000838361195c565b6001600160a01b0382166000908152600360205260408120805460019290611dd490849061254a565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611e3e906125d8565b90600052602060002090601f016020900481019282611e605760008555611ea6565b82601f10611e7957805160ff1916838001178555611ea6565b82800160010185558215611ea6579182015b82811115611ea6578251825591602001919060010190611e8b565b50611eb2929150611eb6565b5090565b5b80821115611eb25760008155600101611eb7565b600067ffffffffffffffff831115611ee557611ee561269a565b611ef8601f8401601f19166020016124f5565b9050828152838383011115611f0c57600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b0381168114611f3a57600080fd5b919050565b600082601f830112611f5057600080fd5b81356020611f65611f6083612526565b6124f5565b80838252828201915082860187848660051b8901011115611f8557600080fd5b60005b85811015611fab57611f9982611f23565b84529284019290840190600101611f88565b5090979650505050505050565b80358015158114611f3a57600080fd5b600060208284031215611fda57600080fd5b61102082611f23565b60008060408385031215611ff657600080fd5b611fff83611f23565b915061200d60208401611f23565b90509250929050565b60008060006060848603121561202b57600080fd5b61203484611f23565b925061204260208501611f23565b9150604084013590509250925092565b6000806000806080858703121561206857600080fd5b61207185611f23565b935061207f60208601611f23565b925060408501359150606085013567ffffffffffffffff8111156120a257600080fd5b8501601f810187136120b357600080fd5b6120c287823560208401611ecb565b91505092959194509250565b600080604083850312156120e157600080fd5b6120ea83611f23565b915061200d60208401611fb8565b6000806040838503121561210b57600080fd5b61211483611f23565b946020939093013593505050565b6000806040838503121561213557600080fd5b823567ffffffffffffffff8082111561214d57600080fd5b818501915085601f83011261216157600080fd5b81356020612171611f6083612526565b8083825282820191508286018a848660051b890101111561219157600080fd5b600096505b848710156121b4578035835260019690960195918301918301612196565b50965050860135925050808211156121cb57600080fd5b506121d885828601611f3f565b9150509250929050565b6000602082840312156121f457600080fd5b61102082611fb8565b60006020828403121561220f57600080fd5b8135611020816126b0565b60006020828403121561222c57600080fd5b8151611020816126b0565b60006020828403121561224957600080fd5b813567ffffffffffffffff81111561226057600080fd5b8201601f8101841361227157600080fd5b6115fd84823560208401611ecb565b60006020828403121561229257600080fd5b5035919050565b600081518084526122b18160208601602086016125ac565b601f01601f19169290920160200192915050565b6000845160206122d88285838a016125ac565b8551918401916122eb8184848a016125ac565b8554920191600090600181811c908083168061230857607f831692505b85831081141561232657634e487b7160e01b85526022600452602485fd5b80801561233a576001811461234b57612378565b60ff19851688528388019550612378565b60008b81526020902060005b858110156123705781548a820152908401908801612357565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906123bc90830184612299565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156123fe578351835292840192918401916001016123e2565b50909695505050505050565b6020815260006110206020830184612299565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561251e5761251e61269a565b604052919050565b600067ffffffffffffffff8211156125405761254061269a565b5060051b60200190565b6000821982111561255d5761255d612642565b500190565b60008261257157612571612658565b500490565b600081600019048311821515161561259057612590612642565b500290565b6000828210156125a7576125a7612642565b500390565b60005b838110156125c75781810151838201526020016125af565b83811115610eb55750506000910152565b600181811c908216806125ec57607f821691505b6020821081141561260d57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561262757612627612642565b5060010190565b60008261263d5761263d612658565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461110957600080fdfea2646970667358221220ef4aecac3b3dae033f3db5c239754a335850d9b64ed9805947251e643f017aab64736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102045760003560e01c8063715018a611610118578063b88d4fde116100a0578063d5abeb011161006f578063d5abeb01146105c2578063da3ef23f146105d8578063e985e9c5146105f8578063f2fde38b14610641578063fa2a94ef1461066157600080fd5b8063b88d4fde14610558578063c668286214610578578063c87b56dd1461058d578063d547cfb7146105ad57600080fd5b806390f94c65116100e757806390f94c65146104cf57806391b7f5ed146104ee57806395d89b411461050e578063a035b1fe14610523578063a22cb4651461053857600080fd5b8063715018a6146104675780638462151c1461047c578063853828b6146104a95780638da5cb5b146104b157600080fd5b8063370158ea1161019b57806355f804b31161016a57806355f804b3146103d75780635c975abb146103f75780636352211e146104115780636817c76c1461043157806370a082311461044757600080fd5b8063370158ea146103395780633b4c4b251461037757806342842e0e146103975780634f6ccce7146103b757600080fd5b8063095ea7b3116101d7578063095ea7b3146102ba57806318160ddd146102da57806323b872dd146102f95780632f745c591461031957600080fd5b806301ffc9a71461020957806302329a291461023e57806306fdde0314610260578063081812fc14610282575b600080fd5b34801561021557600080fd5b506102296102243660046121fd565b610674565b60405190151581526020015b60405180910390f35b34801561024a57600080fd5b5061025e6102593660046121e2565b61069f565b005b34801561026c57600080fd5b506102756106e5565b604051610235919061240a565b34801561028e57600080fd5b506102a261029d366004612280565b610777565b6040516001600160a01b039091168152602001610235565b3480156102c657600080fd5b5061025e6102d53660046120f8565b61080c565b3480156102e657600080fd5b506008545b604051908152602001610235565b34801561030557600080fd5b5061025e610314366004612016565b610922565b34801561032557600080fd5b506102eb6103343660046120f8565b610953565b34801561034557600080fd5b5061034e6109e9565b604080519485526020850193909352918301526001600160a01b03166060820152608001610235565b34801561038357600080fd5b5061025e610392366004612280565b610a18565b3480156103a357600080fd5b5061025e6103b2366004612016565b610a47565b3480156103c357600080fd5b506102eb6103d2366004612280565b610a62565b3480156103e357600080fd5b5061025e6103f2366004612237565b610af5565b34801561040357600080fd5b50600f546102299060ff1681565b34801561041d57600080fd5b506102a261042c366004612280565b610b36565b34801561043d57600080fd5b506102eb600e5481565b34801561045357600080fd5b506102eb610462366004611fc8565b610bad565b34801561047357600080fd5b5061025e610c34565b34801561048857600080fd5b5061049c610497366004611fc8565b610c6a565b60405161023591906123c6565b61025e610d0b565b3480156104bd57600080fd5b50600a546001600160a01b03166102a2565b3480156104db57600080fd5b50600f5461022990610100900460ff1681565b3480156104fa57600080fd5b5061025e610509366004612280565b610d80565b34801561051a57600080fd5b50610275610daf565b34801561052f57600080fd5b50600e546102eb565b34801561054457600080fd5b5061025e6105533660046120ce565b610dbe565b34801561056457600080fd5b5061025e610573366004612052565b610e83565b34801561058457600080fd5b50610275610ebb565b34801561059957600080fd5b506102756105a8366004612280565b610f49565b3480156105b957600080fd5b50610275611027565b3480156105ce57600080fd5b506102eb600d5481565b3480156105e457600080fd5b5061025e6105f3366004612237565b611034565b34801561060457600080fd5b50610229610613366004611fe3565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561064d57600080fd5b5061025e61065c366004611fc8565b611071565b61025e61066f366004612122565b61110c565b60006001600160e01b0319821663780e9d6360e01b1480610699575061069982611450565b92915050565b600a546001600160a01b031633146106d25760405162461bcd60e51b81526004016106c99061246f565b60405180910390fd5b600f805460ff1916911515919091179055565b6060600080546106f4906125d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610720906125d8565b801561076d5780601f106107425761010080835404028352916020019161076d565b820191906000526020600020905b81548152906001019060200180831161075057829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166107f05760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016106c9565b506000908152600460205260409020546001600160a01b031690565b600061081782610b36565b9050806001600160a01b0316836001600160a01b031614156108855760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016106c9565b336001600160a01b03821614806108a157506108a18133610613565b6109135760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016106c9565b61091d83836114a0565b505050565b61092c338261150e565b6109485760405162461bcd60e51b81526004016106c9906124a4565b61091d838383611605565b600061095e83610bad565b82106109c05760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016106c9565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6000806000806109f8600e5490565b600854600d54600a546001600160a01b0316935093509350935090919293565b600a546001600160a01b03163314610a425760405162461bcd60e51b81526004016106c99061246f565b600d55565b61091d83838360405180602001604052806000815250610e83565b6000610a6d60085490565b8210610ad05760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016106c9565b60088281548110610ae357610ae3612684565b90600052602060002001549050919050565b600a546001600160a01b03163314610b1f5760405162461bcd60e51b81526004016106c99061246f565b8051610b3290600b906020840190611e32565b5050565b6000818152600260205260408120546001600160a01b0316806106995760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016106c9565b60006001600160a01b038216610c185760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016106c9565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b03163314610c5e5760405162461bcd60e51b81526004016106c99061246f565b610c6860006117b0565b565b60606000610c7783610bad565b905060008167ffffffffffffffff811115610c9457610c9461269a565b604051908082528060200260200182016040528015610cbd578160200160208202803683370190505b50905060015b828111610d0357610cd48582610953565b828281518110610ce657610ce6612684565b602090810291909101015280610cfb81612613565b915050610cc3565b509392505050565b600a546001600160a01b03163314610d355760405162461bcd60e51b81526004016106c99061246f565b47610d48600a546001600160a01b031690565b6001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015610b32573d6000803e3d6000fd5b600a546001600160a01b03163314610daa5760405162461bcd60e51b81526004016106c99061246f565b600e55565b6060600180546106f4906125d8565b6001600160a01b038216331415610e175760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016106c9565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610e8d338361150e565b610ea95760405162461bcd60e51b81526004016106c9906124a4565b610eb584848484611802565b50505050565b600c8054610ec8906125d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef4906125d8565b8015610f415780601f10610f1657610100808354040283529160200191610f41565b820191906000526020600020905b815481529060010190602001808311610f2457829003601f168201915b505050505081565b6000818152600260205260409020546060906001600160a01b0316610fc85760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016106c9565b6000610fd2611835565b90506000815111610ff25760405180602001604052806000815250611020565b80610ffc84611844565b600c604051602001611010939291906122c5565b6040516020818303038152906040525b9392505050565b600b8054610ec8906125d8565b600a546001600160a01b0316331461105e5760405162461bcd60e51b81526004016106c99061246f565b8051610b3290600c906020840190611e32565b600a546001600160a01b0316331461109b5760405162461bcd60e51b81526004016106c99061246f565b6001600160a01b0381166111005760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106c9565b611109816117b0565b50565b600061111760085490565b905061112b600a546001600160a01b031690565b6001600160a01b0316336001600160a01b0316141561125a5760005b8251811015610eb5576008549150600d5484828151811061116a5761116a612684565b60200260200101518361117d919061254a565b106111e45760405162461bcd60e51b815260206004820152603160248201527f54686973207472616e73616374696f6e20776f756420657863656564206d617860448201527020737570706c79206f6620576f72646c6560781b60648201526084016106c9565b60015b8482815181106111f9576111f9612684565b602002602001015181116112475761123584838151811061121c5761121c612684565b60200260200101518285611230919061254a565b611942565b8061123f81612613565b9150506111e7565b508061125281612613565b915050611147565b600f5460ff16156112a35760405162461bcd60e51b815260206004820152601360248201527221b7b73a3930b1ba1034b9903830bab9b2b21760691b60448201526064016106c9565b600d54836000815181106112b9576112b9612684565b6020026020010151826112cc919061254a565b106113345760405162461bcd60e51b815260206004820152603260248201527f54686973207472616e73616374696f6e20776f756c6420657863656564206d616044820152717820737570706c79206f6620576f72646c6560701b60648201526084016106c9565b8260008151811061134757611347612684565b6020026020010151611358600e5490565b6113629190612576565b3410156113aa5760405162461bcd60e51b815260206004820152601660248201527545746865722076616c756520697320746f6f206c6f7760501b60448201526064016106c9565b600f54610100900460ff161561140c576005836000815181106113cf576113cf612684565b60200260200101516113e19190612562565b836000815181106113f4576113f4612684565b60200260200101818151611408919061254a565b9052505b60015b8360008151811061142257611422612684565b60200260200101518111610eb55761143e33611230838561254a565b8061144881612613565b91505061140f565b60006001600160e01b031982166380ac58cd60e01b148061148157506001600160e01b03198216635b5e139f60e01b145b8061069957506301ffc9a760e01b6001600160e01b0319831614610699565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906114d582610b36565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166115875760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016106c9565b600061159283610b36565b9050806001600160a01b0316846001600160a01b031614806115cd5750836001600160a01b03166115c284610777565b6001600160a01b0316145b806115fd57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661161882610b36565b6001600160a01b0316146116805760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016106c9565b6001600160a01b0382166116e25760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016106c9565b6116ed83838361195c565b6116f86000826114a0565b6001600160a01b0383166000908152600360205260408120805460019290611721908490612595565b90915550506001600160a01b038216600090815260036020526040812080546001929061174f90849061254a565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61180d848484611605565b61181984848484611a14565b610eb55760405162461bcd60e51b81526004016106c99061241d565b6060600b80546106f4906125d8565b6060816118685750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611892578061187c81612613565b915061188b9050600a83612562565b915061186c565b60008167ffffffffffffffff8111156118ad576118ad61269a565b6040519080825280601f01601f1916602001820160405280156118d7576020820181803683370190505b5090505b84156115fd576118ec600183612595565b91506118f9600a8661262e565b61190490603061254a565b60f81b81838151811061191957611919612684565b60200101906001600160f81b031916908160001a90535061193b600a86612562565b94506118db565b610b32828260405180602001604052806000815250611b21565b6001600160a01b0383166119b7576119b281600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6119da565b816001600160a01b0316836001600160a01b0316146119da576119da8382611b54565b6001600160a01b0382166119f15761091d81611bf1565b826001600160a01b0316826001600160a01b03161461091d5761091d8282611ca0565b60006001600160a01b0384163b15611b1657604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611a58903390899088908890600401612389565b602060405180830381600087803b158015611a7257600080fd5b505af1925050508015611aa2575060408051601f3d908101601f19168201909252611a9f9181019061221a565b60015b611afc573d808015611ad0576040519150601f19603f3d011682016040523d82523d6000602084013e611ad5565b606091505b508051611af45760405162461bcd60e51b81526004016106c99061241d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506115fd565b506001949350505050565b611b2b8383611ce4565b611b386000848484611a14565b61091d5760405162461bcd60e51b81526004016106c99061241d565b60006001611b6184610bad565b611b6b9190612595565b600083815260076020526040902054909150808214611bbe576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611c0390600190612595565b60008381526009602052604081205460088054939450909284908110611c2b57611c2b612684565b906000526020600020015490508060088381548110611c4c57611c4c612684565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611c8457611c8461266e565b6001900381819060005260206000200160009055905550505050565b6000611cab83610bad565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b038216611d3a5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016106c9565b6000818152600260205260409020546001600160a01b031615611d9f5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106c9565b611dab6000838361195c565b6001600160a01b0382166000908152600360205260408120805460019290611dd490849061254a565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611e3e906125d8565b90600052602060002090601f016020900481019282611e605760008555611ea6565b82601f10611e7957805160ff1916838001178555611ea6565b82800160010185558215611ea6579182015b82811115611ea6578251825591602001919060010190611e8b565b50611eb2929150611eb6565b5090565b5b80821115611eb25760008155600101611eb7565b600067ffffffffffffffff831115611ee557611ee561269a565b611ef8601f8401601f19166020016124f5565b9050828152838383011115611f0c57600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b0381168114611f3a57600080fd5b919050565b600082601f830112611f5057600080fd5b81356020611f65611f6083612526565b6124f5565b80838252828201915082860187848660051b8901011115611f8557600080fd5b60005b85811015611fab57611f9982611f23565b84529284019290840190600101611f88565b5090979650505050505050565b80358015158114611f3a57600080fd5b600060208284031215611fda57600080fd5b61102082611f23565b60008060408385031215611ff657600080fd5b611fff83611f23565b915061200d60208401611f23565b90509250929050565b60008060006060848603121561202b57600080fd5b61203484611f23565b925061204260208501611f23565b9150604084013590509250925092565b6000806000806080858703121561206857600080fd5b61207185611f23565b935061207f60208601611f23565b925060408501359150606085013567ffffffffffffffff8111156120a257600080fd5b8501601f810187136120b357600080fd5b6120c287823560208401611ecb565b91505092959194509250565b600080604083850312156120e157600080fd5b6120ea83611f23565b915061200d60208401611fb8565b6000806040838503121561210b57600080fd5b61211483611f23565b946020939093013593505050565b6000806040838503121561213557600080fd5b823567ffffffffffffffff8082111561214d57600080fd5b818501915085601f83011261216157600080fd5b81356020612171611f6083612526565b8083825282820191508286018a848660051b890101111561219157600080fd5b600096505b848710156121b4578035835260019690960195918301918301612196565b50965050860135925050808211156121cb57600080fd5b506121d885828601611f3f565b9150509250929050565b6000602082840312156121f457600080fd5b61102082611fb8565b60006020828403121561220f57600080fd5b8135611020816126b0565b60006020828403121561222c57600080fd5b8151611020816126b0565b60006020828403121561224957600080fd5b813567ffffffffffffffff81111561226057600080fd5b8201601f8101841361227157600080fd5b6115fd84823560208401611ecb565b60006020828403121561229257600080fd5b5035919050565b600081518084526122b18160208601602086016125ac565b601f01601f19169290920160200192915050565b6000845160206122d88285838a016125ac565b8551918401916122eb8184848a016125ac565b8554920191600090600181811c908083168061230857607f831692505b85831081141561232657634e487b7160e01b85526022600452602485fd5b80801561233a576001811461234b57612378565b60ff19851688528388019550612378565b60008b81526020902060005b858110156123705781548a820152908401908801612357565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906123bc90830184612299565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156123fe578351835292840192918401916001016123e2565b50909695505050505050565b6020815260006110206020830184612299565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561251e5761251e61269a565b604052919050565b600067ffffffffffffffff8211156125405761254061269a565b5060051b60200190565b6000821982111561255d5761255d612642565b500190565b60008261257157612571612658565b500490565b600081600019048311821515161561259057612590612642565b500290565b6000828210156125a7576125a7612642565b500390565b60005b838110156125c75781810151838201526020016125af565b83811115610eb55750506000910152565b600181811c908216806125ec57607f821691505b6020821081141561260d57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561262757612627612642565b5060010190565b60008261263d5761263d612658565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461110957600080fdfea2646970667358221220ef4aecac3b3dae033f3db5c239754a335850d9b64ed9805947251e643f017aab64736f6c63430008070033
Deployed Bytecode Sourcemap
43186:3675:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34733:224;;;;;;;;;;-1:-1:-1;34733:224:0;;;;;:::i;:::-;;:::i;:::-;;;9212:14:1;;9205:22;9187:41;;9175:2;9160:18;34733:224:0;;;;;;;;46111:79;;;;;;;;;;-1:-1:-1;46111:79:0;;;;;:::i;:::-;;:::i;:::-;;22625:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;24184:221::-;;;;;;;;;;-1:-1:-1;24184:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7873:32:1;;;7855:51;;7843:2;7828:18;24184:221:0;7709:203:1;23707:411:0;;;;;;;;;;-1:-1:-1;23707:411:0;;;;;:::i;:::-;;:::i;35373:113::-;;;;;;;;;;-1:-1:-1;35461:10:0;:17;35373:113;;;18352:25:1;;;18340:2;18325:18;35373:113:0;18206:177:1;25074:339:0;;;;;;;;;;-1:-1:-1;25074:339:0;;;;;:::i;:::-;;:::i;35041:256::-;;;;;;;;;;-1:-1:-1;35041:256:0;;;;;:::i;:::-;;:::i;46558:143::-;;;;;;;;;;;;;:::i;:::-;;;;18619:25:1;;;18675:2;18660:18;;18653:34;;;;18703:18;;;18696:34;-1:-1:-1;;;;;18766:32:1;18761:2;18746:18;;18739:60;18606:3;18591:19;46558:143:0;18388:417:1;45868:99:0;;;;;;;;;;-1:-1:-1;45868:99:0;;;;;:::i;:::-;;:::i;25484:185::-;;;;;;;;;;-1:-1:-1;25484:185:0;;;;;:::i;:::-;;:::i;35563:233::-;;;;;;;;;;-1:-1:-1;35563:233:0;;;;;:::i;:::-;;:::i;45651:101::-;;;;;;;;;;-1:-1:-1;45651:101:0;;;;;:::i;:::-;;:::i;43443:26::-;;;;;;;;;;-1:-1:-1;43443:26:0;;;;;;;;22319:239;;;;;;;;;;-1:-1:-1;22319:239:0;;;;;:::i;:::-;;:::i;43393:37::-;;;;;;;;;;;;;;;;22049:208;;;;;;;;;;-1:-1:-1;22049:208:0;;;;;:::i;:::-;;:::i;42522:94::-;;;;;;;;;;;;;:::i;46198:345::-;;;;;;;;;;-1:-1:-1;46198:345:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;46709:149::-;;;:::i;41871:87::-;;;;;;;;;;-1:-1:-1;41944:6:0;;-1:-1:-1;;;;;41944:6:0;41871:87;;43476:29;;;;;;;;;;-1:-1:-1;43476:29:0;;;;;;;;;;;45760:96;;;;;;;;;;-1:-1:-1;45760:96:0;;;;;:::i;:::-;;:::i;22794:104::-;;;;;;;;;;;;;:::i;43686:82::-;;;;;;;;;;-1:-1:-1;43751:9:0;;43686:82;;24477:295;;;;;;;;;;-1:-1:-1;24477:295:0;;;;;:::i;:::-;;:::i;25740:328::-;;;;;;;;;;-1:-1:-1;25740:328:0;;;;;:::i;:::-;;:::i;43306:37::-;;;;;;;;;;;;;:::i;45074:569::-;;;;;;;;;;-1:-1:-1;45074:569:0;;;;;:::i;:::-;;:::i;43273:26::-;;;;;;;;;;;;;:::i;43352:32::-;;;;;;;;;;;;;;;;45979:124;;;;;;;;;;-1:-1:-1;45979:124:0;;;;;:::i;:::-;;:::i;24843:164::-;;;;;;;;;;-1:-1:-1;24843:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;24964:25:0;;;24940:4;24964:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;24843:164;42771:192;;;;;;;;;;-1:-1:-1;42771:192:0;;;;;:::i;:::-;;:::i;43776:1169::-;;;;;;:::i;:::-;;:::i;34733:224::-;34835:4;-1:-1:-1;;;;;;34859:50:0;;-1:-1:-1;;;34859:50:0;;:90;;;34913:36;34937:11;34913:23;:36::i;:::-;34852:97;34733:224;-1:-1:-1;;34733:224:0:o;46111:79::-;41944:6;;-1:-1:-1;;;;;41944:6:0;20234:10;42091:23;42083:68;;;;-1:-1:-1;;;42083:68:0;;;;;;;:::i;:::-;;;;;;;;;46167:6:::1;:15:::0;;-1:-1:-1;;46167:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;46111:79::o;22625:100::-;22679:13;22712:5;22705:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22625:100;:::o;24184:221::-;24260:7;27667:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27667:16:0;24280:73;;;;-1:-1:-1;;;24280:73:0;;14876:2:1;24280:73:0;;;14858:21:1;14915:2;14895:18;;;14888:30;14954:34;14934:18;;;14927:62;-1:-1:-1;;;15005:18:1;;;14998:42;15057:19;;24280:73:0;14674:408:1;24280:73:0;-1:-1:-1;24373:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;24373:24:0;;24184:221::o;23707:411::-;23788:13;23804:23;23819:7;23804:14;:23::i;:::-;23788:39;;23852:5;-1:-1:-1;;;;;23846:11:0;:2;-1:-1:-1;;;;;23846:11:0;;;23838:57;;;;-1:-1:-1;;;23838:57:0;;16476:2:1;23838:57:0;;;16458:21:1;16515:2;16495:18;;;16488:30;16554:34;16534:18;;;16527:62;-1:-1:-1;;;16605:18:1;;;16598:31;16646:19;;23838:57:0;16274:397:1;23838:57:0;20234:10;-1:-1:-1;;;;;23930:21:0;;;;:62;;-1:-1:-1;23955:37:0;23972:5;20234:10;24843:164;:::i;23955:37::-;23908:168;;;;-1:-1:-1;;;23908:168:0;;13269:2:1;23908:168:0;;;13251:21:1;13308:2;13288:18;;;13281:30;13347:34;13327:18;;;13320:62;13418:26;13398:18;;;13391:54;13462:19;;23908:168:0;13067:420:1;23908:168:0;24089:21;24098:2;24102:7;24089:8;:21::i;:::-;23777:341;23707:411;;:::o;25074:339::-;25269:41;20234:10;25302:7;25269:18;:41::i;:::-;25261:103;;;;-1:-1:-1;;;25261:103:0;;;;;;;:::i;:::-;25377:28;25387:4;25393:2;25397:7;25377:9;:28::i;35041:256::-;35138:7;35174:23;35191:5;35174:16;:23::i;:::-;35166:5;:31;35158:87;;;;-1:-1:-1;;;35158:87:0;;10084:2:1;35158:87:0;;;10066:21:1;10123:2;10103:18;;;10096:30;10162:34;10142:18;;;10135:62;-1:-1:-1;;;10213:18:1;;;10206:41;10264:19;;35158:87:0;9882:407:1;35158:87:0;-1:-1:-1;;;;;;35263:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;35041:256::o;46558:143::-;46595:7;46604;46613;46622;46650;43751:9;;;43686:82;46650:7;35461:10;:17;46674:9;;41944:6;;-1:-1:-1;;;;;41944:6:0;46642:51;;;;;;;;46558:143;;;;:::o;45868:99::-;41944:6;;-1:-1:-1;;;;;41944:6:0;20234:10;42091:23;42083:68;;;;-1:-1:-1;;;42083:68:0;;;;;;;:::i;:::-;45936:9:::1;:23:::0;45868:99::o;25484:185::-;25622:39;25639:4;25645:2;25649:7;25622:39;;;;;;;;;;;;:16;:39::i;35563:233::-;35638:7;35674:30;35461:10;:17;;35373:113;35674:30;35666:5;:38;35658:95;;;;-1:-1:-1;;;35658:95:0;;17647:2:1;35658:95:0;;;17629:21:1;17686:2;17666:18;;;17659:30;17725:34;17705:18;;;17698:62;-1:-1:-1;;;17776:18:1;;;17769:42;17828:19;;35658:95:0;17445:408:1;35658:95:0;35771:10;35782:5;35771:17;;;;;;;;:::i;:::-;;;;;;;;;35764:24;;35563:233;;;:::o;45651:101::-;41944:6;;-1:-1:-1;;;;;41944:6:0;20234:10;42091:23;42083:68;;;;-1:-1:-1;;;42083:68:0;;;;;;;:::i;:::-;45722:22;;::::1;::::0;:12:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;;45651:101:::0;:::o;22319:239::-;22391:7;22427:16;;;:7;:16;;;;;;-1:-1:-1;;;;;22427:16:0;22462:19;22454:73;;;;-1:-1:-1;;;22454:73:0;;14105:2:1;22454:73:0;;;14087:21:1;14144:2;14124:18;;;14117:30;14183:34;14163:18;;;14156:62;-1:-1:-1;;;14234:18:1;;;14227:39;14283:19;;22454:73:0;13903:405:1;22049:208:0;22121:7;-1:-1:-1;;;;;22149:19:0;;22141:74;;;;-1:-1:-1;;;22141:74:0;;13694:2:1;22141:74:0;;;13676:21:1;13733:2;13713:18;;;13706:30;13772:34;13752:18;;;13745:62;-1:-1:-1;;;13823:18:1;;;13816:40;13873:19;;22141:74:0;13492:406:1;22141:74:0;-1:-1:-1;;;;;;22233:16:0;;;;;:9;:16;;;;;;;22049:208::o;42522:94::-;41944:6;;-1:-1:-1;;;;;41944:6:0;20234:10;42091:23;42083:68;;;;-1:-1:-1;;;42083:68:0;;;;;;;:::i;:::-;42587:21:::1;42605:1;42587:9;:21::i;:::-;42522:94::o:0;46198:345::-;46257:16;46286:18;46307:16;46317:5;46307:9;:16::i;:::-;46286:37;;46334:25;46376:10;46362:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46362:25:0;-1:-1:-1;46334:53:0;-1:-1:-1;46415:1:0;46398:112;46423:10;46418:1;:15;46398:112;;46469:29;46489:5;46496:1;46469:19;:29::i;:::-;46455:8;46464:1;46455:11;;;;;;;;:::i;:::-;;;;;;;;;;:43;46435:3;;;;:::i;:::-;;;;46398:112;;;-1:-1:-1;46527:8:0;46198:345;-1:-1:-1;;;46198:345:0:o;46709:149::-;41944:6;;-1:-1:-1;;;;;41944:6:0;20234:10;42091:23;42083:68;;;;-1:-1:-1;;;42083:68:0;;;;;;;:::i;:::-;46785:21:::1;46825:7;41944:6:::0;;-1:-1:-1;;;;;41944:6:0;;41871:87;46825:7:::1;-1:-1:-1::0;;;;;46817:25:0::1;:33;46843:6;46817:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;45760:96:::0;41944:6;;-1:-1:-1;;;;;41944:6:0;20234:10;42091:23;42083:68;;;;-1:-1:-1;;;42083:68:0;;;;;;;:::i;:::-;45826:9:::1;:22:::0;45760:96::o;22794:104::-;22850:13;22883:7;22876:14;;;;;:::i;24477:295::-;-1:-1:-1;;;;;24580:24:0;;20234:10;24580:24;;24572:62;;;;-1:-1:-1;;;24572:62:0;;12502:2:1;24572:62:0;;;12484:21:1;12541:2;12521:18;;;12514:30;12580:27;12560:18;;;12553:55;12625:18;;24572:62:0;12300:349:1;24572:62:0;20234:10;24647:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;24647:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;24647:53:0;;;;;;;;;;24716:48;;9187:41:1;;;24647:42:0;;20234:10;24716:48;;9160:18:1;24716:48:0;;;;;;;24477:295;;:::o;25740:328::-;25915:41;20234:10;25948:7;25915:18;:41::i;:::-;25907:103;;;;-1:-1:-1;;;25907:103:0;;;;;;;:::i;:::-;26021:39;26035:4;26041:2;26045:7;26054:5;26021:13;:39::i;:::-;25740:328;;;;:::o;43306:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45074:569::-;27643:4;27667:16;;;:7;:16;;;;;;45147:13;;-1:-1:-1;;;;;27667:16:0;45173:90;;;;-1:-1:-1;;;45173:90:0;;16060:2:1;45173:90:0;;;16042:21:1;16099:2;16079:18;;;16072:30;16138:34;16118:18;;;16111:62;-1:-1:-1;;;16189:18:1;;;16182:45;16244:19;;45173:90:0;15858:411:1;45173:90:0;45276:28;45307:10;:8;:10::i;:::-;45276:41;;45379:1;45354:14;45348:28;:32;:287;;;;;;;;;;;;;;;;;45472:14;45513:18;:7;:16;:18::i;:::-;45558:13;45429:165;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45348:287;45328:307;45074:569;-1:-1:-1;;;45074:569:0:o;43273:26::-;;;;;;;:::i;45979:124::-;41944:6;;-1:-1:-1;;;;;41944:6:0;20234:10;42091:23;42083:68;;;;-1:-1:-1;;;42083:68:0;;;;;;;:::i;:::-;46064:31;;::::1;::::0;:13:::1;::::0;:31:::1;::::0;::::1;::::0;::::1;:::i;42771:192::-:0;41944:6;;-1:-1:-1;;;;;41944:6:0;20234:10;42091:23;42083:68;;;;-1:-1:-1;;;42083:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42860:22:0;::::1;42852:73;;;::::0;-1:-1:-1;;;42852:73:0;;10915:2:1;42852:73:0::1;::::0;::::1;10897:21:1::0;10954:2;10934:18;;;10927:30;10993:34;10973:18;;;10966:62;-1:-1:-1;;;11044:18:1;;;11037:36;11090:19;;42852:73:0::1;10713:402:1::0;42852:73:0::1;42936:19;42946:8;42936:9;:19::i;:::-;42771:192:::0;:::o;43776:1169::-;43866:14;43883:13;35461:10;:17;;35373:113;43883:13;43866:30;;43925:7;41944:6;;-1:-1:-1;;;;;41944:6:0;;41871:87;43925:7;-1:-1:-1;;;;;43911:21:0;:10;-1:-1:-1;;;;;43911:21:0;;43907:1021;;;43954:9;43949:393;43973:2;:9;43969:1;:13;43949:393;;;35461:10;:17;44020:22;;44098:9;;44082:10;44093:1;44082:13;;;;;;;;:::i;:::-;;;;;;;44073:6;:22;;;;:::i;:::-;:34;44065:103;;;;-1:-1:-1;;;44065:103:0;;11679:2:1;44065:103:0;;;11661:21:1;11718:2;11698:18;;;11691:30;11757:34;11737:18;;;11730:62;-1:-1:-1;;;11808:18:1;;;11801:47;11865:19;;44065:103:0;11477:413:1;44065:103:0;44204:1;44187:119;44212:10;44223:1;44212:13;;;;;;;;:::i;:::-;;;;;;;44207:1;:18;44187:119;;44255:28;44265:2;44268:1;44265:5;;;;;;;;:::i;:::-;;;;;;;44281:1;44272:6;:10;;;;:::i;:::-;44255:9;:28::i;:::-;44227:3;;;;:::i;:::-;;;;44187:119;;;-1:-1:-1;43984:3:0;;;;:::i;:::-;;;;43949:393;;43907:1021;44383:6;;;;44382:7;44374:70;;;;-1:-1:-1;;;44374:70:0;;18060:2:1;44374:70:0;;;18042:21:1;18099:2;18079:18;;;18072:30;-1:-1:-1;;;18118:18:1;;;18111:49;18177:18;;44374:70:0;17858:343:1;44374:70:0;44492:9;;44476:10;44487:1;44476:13;;;;;;;;:::i;:::-;;;;;;;44467:6;:22;;;;:::i;:::-;:34;44459:104;;;;-1:-1:-1;;;44459:104:0;;9665:2:1;44459:104:0;;;9647:21:1;9704:2;9684:18;;;9677:30;9743:34;9723:18;;;9716:62;-1:-1:-1;;;9794:18:1;;;9787:48;9852:19;;44459:104:0;9463:414:1;44459:104:0;44609:10;44620:1;44609:13;;;;;;;;:::i;:::-;;;;;;;44599:7;43751:9;;;43686:82;44599:7;:23;;;;:::i;:::-;44586:9;:36;;44578:89;;;;-1:-1:-1;;;44578:89:0;;16878:2:1;44578:89:0;;;16860:21:1;16917:2;16897:18;;;16890:30;-1:-1:-1;;;16936:18:1;;;16929:52;16998:18;;44578:89:0;16676:346:1;44578:89:0;44688:10;;;;;;;44684:94;;;44760:1;44744:10;44755:1;44744:13;;;;;;;;:::i;:::-;;;;;;;:17;;;;:::i;:::-;44719:10;44730:1;44719:13;;;;;;;;:::i;:::-;;;;;;:43;;;;;;;:::i;:::-;;;-1:-1:-1;44684:94:0;44809:1;44792:125;44817:10;44828:1;44817:13;;;;;;;;:::i;:::-;;;;;;;44812:1;:18;44792:125;;44856:33;44866:10;44878;44887:1;44878:6;:10;:::i;44856:33::-;44832:3;;;;:::i;:::-;;;;44792:125;;21680:305;21782:4;-1:-1:-1;;;;;;21819:40:0;;-1:-1:-1;;;21819:40:0;;:105;;-1:-1:-1;;;;;;;21876:48:0;;-1:-1:-1;;;21876:48:0;21819:105;:158;;;-1:-1:-1;;;;;;;;;;7620:40:0;;;21941:36;7511:157;31560:174;31635:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;31635:29:0;-1:-1:-1;;;;;31635:29:0;;;;;;;;:24;;31689:23;31635:24;31689:14;:23::i;:::-;-1:-1:-1;;;;;31680:46:0;;;;;;;;;;;31560:174;;:::o;27872:348::-;27965:4;27667:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27667:16:0;27982:73;;;;-1:-1:-1;;;27982:73:0;;12856:2:1;27982:73:0;;;12838:21:1;12895:2;12875:18;;;12868:30;12934:34;12914:18;;;12907:62;-1:-1:-1;;;12985:18:1;;;12978:42;13037:19;;27982:73:0;12654:408:1;27982:73:0;28066:13;28082:23;28097:7;28082:14;:23::i;:::-;28066:39;;28135:5;-1:-1:-1;;;;;28124:16:0;:7;-1:-1:-1;;;;;28124:16:0;;:51;;;;28168:7;-1:-1:-1;;;;;28144:31:0;:20;28156:7;28144:11;:20::i;:::-;-1:-1:-1;;;;;28144:31:0;;28124:51;:87;;;-1:-1:-1;;;;;;24964:25:0;;;24940:4;24964:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;28179:32;28116:96;27872:348;-1:-1:-1;;;;27872:348:0:o;30864:578::-;31023:4;-1:-1:-1;;;;;30996:31:0;:23;31011:7;30996:14;:23::i;:::-;-1:-1:-1;;;;;30996:31:0;;30988:85;;;;-1:-1:-1;;;30988:85:0;;15650:2:1;30988:85:0;;;15632:21:1;15689:2;15669:18;;;15662:30;15728:34;15708:18;;;15701:62;-1:-1:-1;;;15779:18:1;;;15772:39;15828:19;;30988:85:0;15448:405:1;30988:85:0;-1:-1:-1;;;;;31092:16:0;;31084:65;;;;-1:-1:-1;;;31084:65:0;;12097:2:1;31084:65:0;;;12079:21:1;12136:2;12116:18;;;12109:30;12175:34;12155:18;;;12148:62;-1:-1:-1;;;12226:18:1;;;12219:34;12270:19;;31084:65:0;11895:400:1;31084:65:0;31162:39;31183:4;31189:2;31193:7;31162:20;:39::i;:::-;31266:29;31283:1;31287:7;31266:8;:29::i;:::-;-1:-1:-1;;;;;31308:15:0;;;;;;:9;:15;;;;;:20;;31327:1;;31308:15;:20;;31327:1;;31308:20;:::i;:::-;;;;-1:-1:-1;;;;;;;31339:13:0;;;;;;:9;:13;;;;;:18;;31356:1;;31339:13;:18;;31356:1;;31339:18;:::i;:::-;;;;-1:-1:-1;;31368:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;31368:21:0;-1:-1:-1;;;;;31368:21:0;;;;;;;;;31407:27;;31368:16;;31407:27;;;;;;;30864:578;;;:::o;42971:173::-;43046:6;;;-1:-1:-1;;;;;43063:17:0;;;-1:-1:-1;;;;;;43063:17:0;;;;;;;43096:40;;43046:6;;;43063:17;43046:6;;43096:40;;43027:16;;43096:40;43016:128;42971:173;:::o;26950:315::-;27107:28;27117:4;27123:2;27127:7;27107:9;:28::i;:::-;27154:48;27177:4;27183:2;27187:7;27196:5;27154:22;:48::i;:::-;27146:111;;;;-1:-1:-1;;;27146:111:0;;;;;;;:::i;44953:113::-;45013:13;45046:12;45039:19;;;;;:::i;7986:723::-;8042:13;8263:10;8259:53;;-1:-1:-1;;8290:10:0;;;;;;;;;;;;-1:-1:-1;;;8290:10:0;;;;;7986:723::o;8259:53::-;8337:5;8322:12;8378:78;8385:9;;8378:78;;8411:8;;;;:::i;:::-;;-1:-1:-1;8434:10:0;;-1:-1:-1;8442:2:0;8434:10;;:::i;:::-;;;8378:78;;;8466:19;8498:6;8488:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8488:17:0;;8466:39;;8516:154;8523:10;;8516:154;;8550:11;8560:1;8550:11;;:::i;:::-;;-1:-1:-1;8619:10:0;8627:2;8619:5;:10;:::i;:::-;8606:24;;:2;:24;:::i;:::-;8593:39;;8576:6;8583;8576:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;8576:56:0;;;;;;;;-1:-1:-1;8647:11:0;8656:2;8647:11;;:::i;:::-;;;8516:154;;28562:110;28638:26;28648:2;28652:7;28638:26;;;;;;;;;;;;:9;:26::i;36409:589::-;-1:-1:-1;;;;;36615:18:0;;36611:187;;36650:40;36682:7;37825:10;:17;;37798:24;;;;:15;:24;;;;;:44;;;37853:24;;;;;;;;;;;;37721:164;36650:40;36611:187;;;36720:2;-1:-1:-1;;;;;36712:10:0;:4;-1:-1:-1;;;;;36712:10:0;;36708:90;;36739:47;36772:4;36778:7;36739:32;:47::i;:::-;-1:-1:-1;;;;;36812:16:0;;36808:183;;36845:45;36882:7;36845:36;:45::i;36808:183::-;36918:4;-1:-1:-1;;;;;36912:10:0;:2;-1:-1:-1;;;;;36912:10:0;;36908:83;;36939:40;36967:2;36971:7;36939:27;:40::i;32299:799::-;32454:4;-1:-1:-1;;;;;32475:13:0;;10834:20;10882:8;32471:620;;32511:72;;-1:-1:-1;;;32511:72:0;;-1:-1:-1;;;;;32511:36:0;;;;;:72;;20234:10;;32562:4;;32568:7;;32577:5;;32511:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32511:72:0;;;;;;;;-1:-1:-1;;32511:72:0;;;;;;;;;;;;:::i;:::-;;;32507:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32753:13:0;;32749:272;;32796:60;;-1:-1:-1;;;32796:60:0;;;;;;;:::i;32749:272::-;32971:6;32965:13;32956:6;32952:2;32948:15;32941:38;32507:529;-1:-1:-1;;;;;;32634:51:0;-1:-1:-1;;;32634:51:0;;-1:-1:-1;32627:58:0;;32471:620;-1:-1:-1;33075:4:0;32299:799;;;;;;:::o;28899:321::-;29029:18;29035:2;29039:7;29029:5;:18::i;:::-;29080:54;29111:1;29115:2;29119:7;29128:5;29080:22;:54::i;:::-;29058:154;;;;-1:-1:-1;;;29058:154:0;;;;;;;:::i;38512:988::-;38778:22;38828:1;38803:22;38820:4;38803:16;:22::i;:::-;:26;;;;:::i;:::-;38840:18;38861:26;;;:17;:26;;;;;;38778:51;;-1:-1:-1;38994:28:0;;;38990:328;;-1:-1:-1;;;;;39061:18:0;;39039:19;39061:18;;;:12;:18;;;;;;;;:34;;;;;;;;;39112:30;;;;;;:44;;;39229:30;;:17;:30;;;;;:43;;;38990:328;-1:-1:-1;39414:26:0;;;;:17;:26;;;;;;;;39407:33;;;-1:-1:-1;;;;;39458:18:0;;;;;:12;:18;;;;;:34;;;;;;;39451:41;38512:988::o;39795:1079::-;40073:10;:17;40048:22;;40073:21;;40093:1;;40073:21;:::i;:::-;40105:18;40126:24;;;:15;:24;;;;;;40499:10;:26;;40048:46;;-1:-1:-1;40126:24:0;;40048:46;;40499:26;;;;;;:::i;:::-;;;;;;;;;40477:48;;40563:11;40538:10;40549;40538:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;40643:28;;;:15;:28;;;;;;;:41;;;40815:24;;;;;40808:31;40850:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;39866:1008;;;39795:1079;:::o;37299:221::-;37384:14;37401:20;37418:2;37401:16;:20::i;:::-;-1:-1:-1;;;;;37432:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;37477:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;37299:221:0:o;29556:382::-;-1:-1:-1;;;;;29636:16:0;;29628:61;;;;-1:-1:-1;;;29628:61:0;;14515:2:1;29628:61:0;;;14497:21:1;;;14534:18;;;14527:30;14593:34;14573:18;;;14566:62;14645:18;;29628:61:0;14313:356:1;29628:61:0;27643:4;27667:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27667:16:0;:30;29700:58;;;;-1:-1:-1;;;29700:58:0;;11322:2:1;29700:58:0;;;11304:21:1;11361:2;11341:18;;;11334:30;11400;11380:18;;;11373:58;11448:18;;29700:58:0;11120:352:1;29700:58:0;29771:45;29800:1;29804:2;29808:7;29771:20;:45::i;:::-;-1:-1:-1;;;;;29829:13:0;;;;;;:9;:13;;;;;:18;;29846:1;;29829:13;:18;;29846:1;;29829:18;:::i;:::-;;;;-1:-1:-1;;29858:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;29858:21:0;-1:-1:-1;;;;;29858:21:0;;;;;;;;29897:33;;29858:16;;;29897:33;;29858:16;;29897:33;29556:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:406:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:45;;;309:1;306;299:12;268:45;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;14:406;;;;;:::o;425:173::-;493:20;;-1:-1:-1;;;;;542:31:1;;532:42;;522:70;;588:1;585;578:12;522:70;425:173;;;:::o;603:679::-;657:5;710:3;703:4;695:6;691:17;687:27;677:55;;728:1;725;718:12;677:55;764:6;751:20;790:4;814:60;830:43;870:2;830:43;:::i;:::-;814:60;:::i;:::-;896:3;920:2;915:3;908:15;948:2;943:3;939:12;932:19;;983:2;975:6;971:15;1035:3;1030:2;1024;1021:1;1017:10;1009:6;1005:23;1001:32;998:41;995:61;;;1052:1;1049;1042:12;995:61;1074:1;1084:169;1098:2;1095:1;1092:9;1084:169;;;1155:23;1174:3;1155:23;:::i;:::-;1143:36;;1199:12;;;;1231;;;;1116:1;1109:9;1084:169;;;-1:-1:-1;1271:5:1;;603:679;-1:-1:-1;;;;;;;603:679:1:o;1287:160::-;1352:20;;1408:13;;1401:21;1391:32;;1381:60;;1437:1;1434;1427:12;1452:186;1511:6;1564:2;1552:9;1543:7;1539:23;1535:32;1532:52;;;1580:1;1577;1570:12;1532:52;1603:29;1622:9;1603:29;:::i;1643:260::-;1711:6;1719;1772:2;1760:9;1751:7;1747:23;1743:32;1740:52;;;1788:1;1785;1778:12;1740:52;1811:29;1830:9;1811:29;:::i;:::-;1801:39;;1859:38;1893:2;1882:9;1878:18;1859:38;:::i;:::-;1849:48;;1643:260;;;;;:::o;1908:328::-;1985:6;1993;2001;2054:2;2042:9;2033:7;2029:23;2025:32;2022:52;;;2070:1;2067;2060:12;2022:52;2093:29;2112:9;2093:29;:::i;:::-;2083:39;;2141:38;2175:2;2164:9;2160:18;2141:38;:::i;:::-;2131:48;;2226:2;2215:9;2211:18;2198:32;2188:42;;1908:328;;;;;:::o;2241:666::-;2336:6;2344;2352;2360;2413:3;2401:9;2392:7;2388:23;2384:33;2381:53;;;2430:1;2427;2420:12;2381:53;2453:29;2472:9;2453:29;:::i;:::-;2443:39;;2501:38;2535:2;2524:9;2520:18;2501:38;:::i;:::-;2491:48;;2586:2;2575:9;2571:18;2558:32;2548:42;;2641:2;2630:9;2626:18;2613:32;2668:18;2660:6;2657:30;2654:50;;;2700:1;2697;2690:12;2654:50;2723:22;;2776:4;2768:13;;2764:27;-1:-1:-1;2754:55:1;;2805:1;2802;2795:12;2754:55;2828:73;2893:7;2888:2;2875:16;2870:2;2866;2862:11;2828:73;:::i;:::-;2818:83;;;2241:666;;;;;;;:::o;2912:254::-;2977:6;2985;3038:2;3026:9;3017:7;3013:23;3009:32;3006:52;;;3054:1;3051;3044:12;3006:52;3077:29;3096:9;3077:29;:::i;:::-;3067:39;;3125:35;3156:2;3145:9;3141:18;3125:35;:::i;3171:254::-;3239:6;3247;3300:2;3288:9;3279:7;3275:23;3271:32;3268:52;;;3316:1;3313;3306:12;3268:52;3339:29;3358:9;3339:29;:::i;:::-;3329:39;3415:2;3400:18;;;;3387:32;;-1:-1:-1;;;3171:254:1:o;3430:1151::-;3548:6;3556;3609:2;3597:9;3588:7;3584:23;3580:32;3577:52;;;3625:1;3622;3615:12;3577:52;3665:9;3652:23;3694:18;3735:2;3727:6;3724:14;3721:34;;;3751:1;3748;3741:12;3721:34;3789:6;3778:9;3774:22;3764:32;;3834:7;3827:4;3823:2;3819:13;3815:27;3805:55;;3856:1;3853;3846:12;3805:55;3892:2;3879:16;3914:4;3938:60;3954:43;3994:2;3954:43;:::i;3938:60::-;4020:3;4044:2;4039:3;4032:15;4072:2;4067:3;4063:12;4056:19;;4103:2;4099;4095:11;4151:7;4146:2;4140;4137:1;4133:10;4129:2;4125:19;4121:28;4118:41;4115:61;;;4172:1;4169;4162:12;4115:61;4194:1;4185:10;;4204:163;4218:2;4215:1;4212:9;4204:163;;;4275:17;;4263:30;;4236:1;4229:9;;;;;4313:12;;;;4345;;4204:163;;;-1:-1:-1;4386:5:1;-1:-1:-1;;4429:18:1;;4416:32;;-1:-1:-1;;4460:16:1;;;4457:36;;;4489:1;4486;4479:12;4457:36;;4512:63;4567:7;4556:8;4545:9;4541:24;4512:63;:::i;:::-;4502:73;;;3430:1151;;;;;:::o;4586:180::-;4642:6;4695:2;4683:9;4674:7;4670:23;4666:32;4663:52;;;4711:1;4708;4701:12;4663:52;4734:26;4750:9;4734:26;:::i;4771:245::-;4829:6;4882:2;4870:9;4861:7;4857:23;4853:32;4850:52;;;4898:1;4895;4888:12;4850:52;4937:9;4924:23;4956:30;4980:5;4956:30;:::i;5021:249::-;5090:6;5143:2;5131:9;5122:7;5118:23;5114:32;5111:52;;;5159:1;5156;5149:12;5111:52;5191:9;5185:16;5210:30;5234:5;5210:30;:::i;5275:450::-;5344:6;5397:2;5385:9;5376:7;5372:23;5368:32;5365:52;;;5413:1;5410;5403:12;5365:52;5453:9;5440:23;5486:18;5478:6;5475:30;5472:50;;;5518:1;5515;5508:12;5472:50;5541:22;;5594:4;5586:13;;5582:27;-1:-1:-1;5572:55:1;;5623:1;5620;5613:12;5572:55;5646:73;5711:7;5706:2;5693:16;5688:2;5684;5680:11;5646:73;:::i;5730:180::-;5789:6;5842:2;5830:9;5821:7;5817:23;5813:32;5810:52;;;5858:1;5855;5848:12;5810:52;-1:-1:-1;5881:23:1;;5730:180;-1:-1:-1;5730:180:1:o;5915:257::-;5956:3;5994:5;5988:12;6021:6;6016:3;6009:19;6037:63;6093:6;6086:4;6081:3;6077:14;6070:4;6063:5;6059:16;6037:63;:::i;:::-;6154:2;6133:15;-1:-1:-1;;6129:29:1;6120:39;;;;6161:4;6116:50;;5915:257;-1:-1:-1;;5915:257:1:o;6177:1527::-;6401:3;6439:6;6433:13;6465:4;6478:51;6522:6;6517:3;6512:2;6504:6;6500:15;6478:51;:::i;:::-;6592:13;;6551:16;;;;6614:55;6592:13;6551:16;6636:15;;;6614:55;:::i;:::-;6758:13;;6691:20;;;6731:1;;6818;6840:18;;;;6893;;;;6920:93;;6998:4;6988:8;6984:19;6972:31;;6920:93;7061:2;7051:8;7048:16;7028:18;7025:40;7022:167;;;-1:-1:-1;;;7088:33:1;;7144:4;7141:1;7134:15;7174:4;7095:3;7162:17;7022:167;7205:18;7232:110;;;;7356:1;7351:328;;;;7198:481;;7232:110;-1:-1:-1;;7267:24:1;;7253:39;;7312:20;;;;-1:-1:-1;7232:110:1;;7351:328;19351:1;19344:14;;;19388:4;19375:18;;7446:1;7460:169;7474:8;7471:1;7468:15;7460:169;;;7556:14;;7541:13;;;7534:37;7599:16;;;;7491:10;;7460:169;;;7464:3;;7660:8;7653:5;7649:20;7642:27;;7198:481;-1:-1:-1;7695:3:1;;6177:1527;-1:-1:-1;;;;;;;;;;;6177:1527:1:o;7917:488::-;-1:-1:-1;;;;;8186:15:1;;;8168:34;;8238:15;;8233:2;8218:18;;8211:43;8285:2;8270:18;;8263:34;;;8333:3;8328:2;8313:18;;8306:31;;;8111:4;;8354:45;;8379:19;;8371:6;8354:45;:::i;:::-;8346:53;7917:488;-1:-1:-1;;;;;;7917:488:1:o;8410:632::-;8581:2;8633:21;;;8703:13;;8606:18;;;8725:22;;;8552:4;;8581:2;8804:15;;;;8778:2;8763:18;;;8552:4;8847:169;8861:6;8858:1;8855:13;8847:169;;;8922:13;;8910:26;;8991:15;;;;8956:12;;;;8883:1;8876:9;8847:169;;;-1:-1:-1;9033:3:1;;8410:632;-1:-1:-1;;;;;;8410:632:1:o;9239:219::-;9388:2;9377:9;9370:21;9351:4;9408:44;9448:2;9437:9;9433:18;9425:6;9408:44;:::i;10294:414::-;10496:2;10478:21;;;10535:2;10515:18;;;10508:30;10574:34;10569:2;10554:18;;10547:62;-1:-1:-1;;;10640:2:1;10625:18;;10618:48;10698:3;10683:19;;10294:414::o;15087:356::-;15289:2;15271:21;;;15308:18;;;15301:30;15367:34;15362:2;15347:18;;15340:62;15434:2;15419:18;;15087:356::o;17027:413::-;17229:2;17211:21;;;17268:2;17248:18;;;17241:30;17307:34;17302:2;17287:18;;17280:62;-1:-1:-1;;;17373:2:1;17358:18;;17351:47;17430:3;17415:19;;17027:413::o;18810:275::-;18881:2;18875:9;18946:2;18927:13;;-1:-1:-1;;18923:27:1;18911:40;;18981:18;18966:34;;19002:22;;;18963:62;18960:88;;;19028:18;;:::i;:::-;19064:2;19057:22;18810:275;;-1:-1:-1;18810:275:1:o;19090:183::-;19150:4;19183:18;19175:6;19172:30;19169:56;;;19205:18;;:::i;:::-;-1:-1:-1;19250:1:1;19246:14;19262:4;19242:25;;19090:183::o;19404:128::-;19444:3;19475:1;19471:6;19468:1;19465:13;19462:39;;;19481:18;;:::i;:::-;-1:-1:-1;19517:9:1;;19404:128::o;19537:120::-;19577:1;19603;19593:35;;19608:18;;:::i;:::-;-1:-1:-1;19642:9:1;;19537:120::o;19662:168::-;19702:7;19768:1;19764;19760:6;19756:14;19753:1;19750:21;19745:1;19738:9;19731:17;19727:45;19724:71;;;19775:18;;:::i;:::-;-1:-1:-1;19815:9:1;;19662:168::o;19835:125::-;19875:4;19903:1;19900;19897:8;19894:34;;;19908:18;;:::i;:::-;-1:-1:-1;19945:9:1;;19835:125::o;19965:258::-;20037:1;20047:113;20061:6;20058:1;20055:13;20047:113;;;20137:11;;;20131:18;20118:11;;;20111:39;20083:2;20076:10;20047:113;;;20178:6;20175:1;20172:13;20169:48;;;-1:-1:-1;;20213:1:1;20195:16;;20188:27;19965:258::o;20228:380::-;20307:1;20303:12;;;;20350;;;20371:61;;20425:4;20417:6;20413:17;20403:27;;20371:61;20478:2;20470:6;20467:14;20447:18;20444:38;20441:161;;;20524:10;20519:3;20515:20;20512:1;20505:31;20559:4;20556:1;20549:15;20587:4;20584:1;20577:15;20441:161;;20228:380;;;:::o;20613:135::-;20652:3;-1:-1:-1;;20673:17:1;;20670:43;;;20693:18;;:::i;:::-;-1:-1:-1;20740:1:1;20729:13;;20613:135::o;20753:112::-;20785:1;20811;20801:35;;20816:18;;:::i;:::-;-1:-1:-1;20850:9:1;;20753:112::o;20870:127::-;20931:10;20926:3;20922:20;20919:1;20912:31;20962:4;20959:1;20952:15;20986:4;20983:1;20976:15;21002:127;21063:10;21058:3;21054:20;21051:1;21044:31;21094:4;21091:1;21084:15;21118:4;21115:1;21108:15;21134:127;21195:10;21190:3;21186:20;21183:1;21176:31;21226:4;21223:1;21216:15;21250:4;21247:1;21240:15;21266:127;21327:10;21322:3;21318:20;21315:1;21308:31;21358:4;21355:1;21348:15;21382:4;21379:1;21372:15;21398:127;21459:10;21454:3;21450:20;21447:1;21440:31;21490:4;21487:1;21480:15;21514:4;21511:1;21504:15;21530:131;-1:-1:-1;;;;;;21604:32:1;;21594:43;;21584:71;;21651:1;21648;21641:12
Swarm Source
ipfs://ef4aecac3b3dae033f3db5c239754a335850d9b64ed9805947251e643f017aab
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.