ERC-721
NFT
Overview
Max Total Supply
7,648 CT
Holders
817
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 CTLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CryptoTyans
Compiler Version
v0.8.6+commit.11564f7e
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./AllDepsMerged.sol"; contract CryptoTyans is WhitelistedERC721, Ownable { using Math for uint256; string public constant provenance = "5ddee3a9170ab6edcd5c2947c42c5dc01599d1cb11a831e642736482813ca772"; bytes32 public immutable baseUriHash; uint256 public constant maxSupply = 19800; uint256 public constant freeLimit = 500; uint256 private constant presaleDuration = 14 * 86400; address payable private _payoutAddress; string private _baseUri; uint256 private _tokenNum = 0; uint256 private _freeCounter = 0; uint256 private _presaleFinishedAt = 0; uint256 private _price = 50000000000000000; // 0.050ETH constructor( string memory name, string memory symbol, string memory presaleUri, bytes32 futureUriHash, address payoutAddress, address proxyAddress ) WhitelistedERC721(name, symbol, proxyAddress) { bytes32 presaleUriHash = keccak256(bytes(presaleUri)); require( presaleUriHash != futureUriHash, "presaleUriHash must not match baseUriHash" ); _baseUri = presaleUri; baseUriHash = futureUriHash; _payoutAddress = payable(payoutAddress); } modifier finishedPresale() { require( totalSupply() >= maxSupply || (_presaleFinishedAt != 0 && block.timestamp > _presaleFinishedAt), "Presale is not finished yet" ); _; } function getSalesStartedAt() external view returns (uint256) { require(_presaleFinishedAt != 0, "Sales not yet defined"); return _presaleFinishedAt - presaleDuration; } function isSalesStartedAt(uint256 timestamp) public view returns (bool) { return _presaleFinishedAt != 0 && timestamp > _presaleFinishedAt - presaleDuration; } function startSales(uint256 presaleStartAt) public onlyOwner { require(_presaleFinishedAt == 0, "Sales are started already"); _presaleFinishedAt = presaleStartAt + presaleDuration; } function totalSupply() public view returns (uint256) { return _tokenNum; } function _baseURI() internal view virtual override returns (string memory) { return _baseUri; } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) _tokenNum += 1; else if (to == address(0)) _tokenNum -= 1; } function setPrice(uint256 newPrice) external onlyOwner { _price = newPrice; } function getPrice() public view returns (uint256) { if (totalSupply() <= 1000) { return 10000000000000000; // 0.010 ETH } else if (totalSupply() <= 2000) { return 25000000000000000; // 0.025 ETH } else { return _price; } } function getFreeAvailable() public view returns (uint256) { return freeLimit - _freeCounter; } function mint(uint256 num) external payable { if (msg.value == 0 && owner() == msg.sender) { _mintWrapper(num); } else { require( isSalesStartedAt(block.timestamp), "Sales are not started yet" ); if (msg.value == 0 && num == 1 && balanceOf(msg.sender) == 0) { // allow one token per address for free, with respect to limits require(_freeCounter + 1 <= freeLimit, "Free limit is over"); _freeCounter++; _mintWrapper(1); } else { require( getPrice() * num == msg.value, "Value sent is incorrect" ); _mintWrapper(num); } } } function _mintWrapper(uint256 num) internal { require(num > 0 && num <= 20, "Num is not in 1-20 range"); require(totalSupply() + num <= maxSupply, "Can't mint above maxSupply"); for (uint256 i = 0; i < num; i++) { _safeMint(msg.sender, totalSupply() + 1); } } function metadataRevealed() external view returns (bool) { bytes32 _curUriHash = keccak256(bytes(_baseUri)); return _curUriHash == baseUriHash; } function revealMetadata(string memory baseUri) external onlyOwner finishedPresale { bytes32 uriHash = keccak256(bytes(baseUri)); require(uriHash == baseUriHash, "Can't accept wrong URI"); _baseUri = baseUri; } function changePayoutAddress(address newPayoutAddress) external onlyOwner { _payoutAddress = payable(newPayoutAddress); } function withdraw() external onlyOwner { uint256 contractBalance = address(this).balance; require(contractBalance > 0); _payoutAddress.transfer(contractBalance); } }
// File: @openzeppelin\contracts\utils\math\Math.sol // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow, so we distribute return (a / 2) + (b / 2) + (((a % 2) + (b % 2)) / 2); } } // File: node_modules\@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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // 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() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: node_modules\@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: node_modules\@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: node_modules\@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: node_modules\@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: node_modules\@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; // solhint-disable-next-line no-inline-assembly 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" ); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: node_modules\@openzeppelin\contracts\utils\Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "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] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: node_modules\@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\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}. 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(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert( "ERC721: transfer to non ERC721Receiver implementer" ); } else { // solhint-disable-next-line no-inline-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` 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 {} } // File: contracts\AllDeps.sol pragma solidity ^0.8.0; contract OwnableDelegateProxy {} contract ProxyRegistry { mapping(address => OwnableDelegateProxy) public proxies; } contract WhitelistedERC721 is ERC721 { address private proxyRegistryAddress; constructor( string memory name, string memory symbol, address proxyAddress ) ERC721(name, symbol) { proxyRegistryAddress = proxyAddress; } // // Override isApprovedForAll to whitelist user's OpenSea proxy accounts to enable gas-less listings. // https://github.com/ProjectOpenSea/opensea-creatures/blob/master/contracts/ERC721Tradable.sol // function isApprovedForAll(address _owner, address _operator) public view override returns (bool isOperator) { // Whitelist OpenSea proxy contract for easy trading. ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress); if (address(proxyRegistry.proxies(_owner)) == _operator) { return true; } return ERC721.isApprovedForAll(_owner, _operator); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"presaleUri","type":"string"},{"internalType":"bytes32","name":"futureUriHash","type":"bytes32"},{"internalType":"address","name":"payoutAddress","type":"address"},{"internalType":"address","name":"proxyAddress","type":"address"}],"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":"baseUriHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newPayoutAddress","type":"address"}],"name":"changePayoutAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freeLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFreeAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSalesStartedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"isOperator","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"isSalesStartedAt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metadataRevealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","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":[],"name":"provenance","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseUri","type":"string"}],"name":"revealMetadata","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":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"presaleStartAt","type":"uint256"}],"name":"startSales","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040526000600a556000600b556000600c5566b1a2bc2ec50000600d553480156200002b57600080fd5b50604051620026ef380380620026ef8339810160408190526200004e9162000330565b858582828281600090805190602001906200006b929190620001b6565b50805162000081906001906020840190620001b6565b5050600680546001600160a01b0319166001600160a01b0393909316929092179091555060009150620000b390503390565b600780546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35083516020850120838114156200016f5760405162461bcd60e51b815260206004820152602960248201527f70726573616c6555726948617368206d757374206e6f74206d617463682062616044820152680e6caaae4d290c2e6d60bb1b606482015260840160405180910390fd5b845162000184906009906020880190620001b6565b505050608091909152600880546001600160a01b0319166001600160a01b039092169190911790555062000442915050565b828054620001c490620003ef565b90600052602060002090601f016020900481019282620001e8576000855562000233565b82601f106200020357805160ff191683800117855562000233565b8280016001018555821562000233579182015b828111156200023357825182559160200191906001019062000216565b506200024192915062000245565b5090565b5b8082111562000241576000815560010162000246565b80516001600160a01b03811681146200027457600080fd5b919050565b600082601f8301126200028b57600080fd5b81516001600160401b0380821115620002a857620002a86200042c565b604051601f8301601f19908116603f01168101908282118183101715620002d357620002d36200042c565b81604052838152602092508683858801011115620002f057600080fd5b600091505b83821015620003145785820183015181830184015290820190620002f5565b83821115620003265760008385830101525b9695505050505050565b60008060008060008060c087890312156200034a57600080fd5b86516001600160401b03808211156200036257600080fd5b620003708a838b0162000279565b975060208901519150808211156200038757600080fd5b620003958a838b0162000279565b96506040890151915080821115620003ac57600080fd5b50620003bb89828a0162000279565b94505060608701519250620003d3608088016200025c565b9150620003e360a088016200025c565b90509295509295509295565b600181811c908216806200040457607f821691505b602082108114156200042657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6080516122836200046c600039600081816103aa0152818161093a015261113101526122836000f3fe6080604052600436106101e35760003560e01c8063715018a611610102578063c87b56dd11610095578063d5abeb0111610064578063d5abeb0114610546578063dcc7ba241461055c578063e985e9c514610571578063f2fde38b1461059157600080fd5b8063c87b56dd146104dc578063cac37390146104fc578063cd0c00fe14610511578063ce22b8cd1461052657600080fd5b806398d5fdca116100d157806398d5fdca14610474578063a0712d6814610489578063a22cb4651461049c578063b88d4fde146104bc57600080fd5b8063715018a61461040c5780638da5cb5b1461042157806391b7f5ed1461043f57806395d89b411461045f57600080fd5b806323b872dd1161017a57806348e4245d1161014957806348e4245d1461037857806360671910146103985780636352211e146103cc57806370a08231146103ec57600080fd5b806323b872dd1461030d578063269bbebd1461032d5780633ccfd60b1461034357806342842e0e1461035857600080fd5b8063095ea7b3116101b6578063095ea7b3146102995780630cb71584146102b95780630f7309e8146102d957806318160ddd146102ee57600080fd5b806301ffc9a7146101e85780630426c6971461021d57806306fdde031461023f578063081812fc14610261575b600080fd5b3480156101f457600080fd5b50610208610203366004611dba565b6105b1565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004611c44565b610603565b005b34801561024b57600080fd5b50610254610658565b6040516102149190611fa7565b34801561026d57600080fd5b5061028161027c366004611e5a565b6106ea565b6040516001600160a01b039091168152602001610214565b3480156102a557600080fd5b5061023d6102b4366004611d8e565b61077f565b3480156102c557600080fd5b5061023d6102d4366004611e11565b610895565b3480156102e557600080fd5b506102546109b3565b3480156102fa57600080fd5b50600a545b604051908152602001610214565b34801561031957600080fd5b5061023d610328366004611c9a565b6109cf565b34801561033957600080fd5b506102ff6101f481565b34801561034f57600080fd5b5061023d610a00565b34801561036457600080fd5b5061023d610373366004611c9a565b610a73565b34801561038457600080fd5b5061023d610393366004611e5a565b610a8e565b3480156103a457600080fd5b506102ff7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103d857600080fd5b506102816103e7366004611e5a565b610b1b565b3480156103f857600080fd5b506102ff610407366004611c44565b610b92565b34801561041857600080fd5b5061023d610c19565b34801561042d57600080fd5b506007546001600160a01b0316610281565b34801561044b57600080fd5b5061023d61045a366004611e5a565b610c8d565b34801561046b57600080fd5b50610254610cbc565b34801561048057600080fd5b506102ff610ccb565b61023d610497366004611e5a565b610d0e565b3480156104a857600080fd5b5061023d6104b7366004611d5b565b610e9e565b3480156104c857600080fd5b5061023d6104d7366004611cdb565b610f63565b3480156104e857600080fd5b506102546104f7366004611e5a565b610f9b565b34801561050857600080fd5b506102ff611076565b34801561051d57600080fd5b506102ff6110d9565b34801561053257600080fd5b50610208610541366004611e5a565b6110eb565b34801561055257600080fd5b506102ff614d5881565b34801561056857600080fd5b50610208611114565b34801561057d57600080fd5b5061020861058c366004611c61565b611157565b34801561059d57600080fd5b5061023d6105ac366004611c44565b611227565b60006001600160e01b031982166380ac58cd60e01b14806105e257506001600160e01b03198216635b5e139f60e01b145b806105fd57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6007546001600160a01b031633146106365760405162461bcd60e51b815260040161062d9061200c565b60405180910390fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b60606000805461066790612120565b80601f016020809104026020016040519081016040528092919081815260200182805461069390612120565b80156106e05780601f106106b5576101008083540402835291602001916106e0565b820191906000526020600020905b8154815290600101906020018083116106c357829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166107635760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161062d565b506000908152600460205260409020546001600160a01b031690565b600061078a82610b1b565b9050806001600160a01b0316836001600160a01b031614156107f85760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161062d565b336001600160a01b038216148061081457506108148133611157565b6108865760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161062d565b6108908383611312565b505050565b6007546001600160a01b031633146108bf5760405162461bcd60e51b815260040161062d9061200c565b614d586108cb600a5490565b1015806108e55750600c54158015906108e55750600c5442115b6109315760405162461bcd60e51b815260206004820152601b60248201527f50726573616c65206973206e6f742066696e6973686564207965740000000000604482015260640161062d565b805160208201207f000000000000000000000000000000000000000000000000000000000000000081146109a05760405162461bcd60e51b815260206004820152601660248201527543616e2774206163636570742077726f6e672055524960501b604482015260640161062d565b8151610890906009906020850190611b35565b60405180606001604052806040815260200161220e6040913981565b6109d93382611380565b6109f55760405162461bcd60e51b815260040161062d90612041565b61089083838361144f565b6007546001600160a01b03163314610a2a5760405162461bcd60e51b815260040161062d9061200c565b4780610a3557600080fd5b6008546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610a6f573d6000803e3d6000fd5b5050565b61089083838360405180602001604052806000815250610f63565b6007546001600160a01b03163314610ab85760405162461bcd60e51b815260040161062d9061200c565b600c5415610b085760405162461bcd60e51b815260206004820152601960248201527f53616c657320617265207374617274656420616c726561647900000000000000604482015260640161062d565b610b156212750082612092565b600c5550565b6000818152600260205260408120546001600160a01b0316806105fd5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161062d565b60006001600160a01b038216610bfd5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161062d565b506001600160a01b031660009081526003602052604090205490565b6007546001600160a01b03163314610c435760405162461bcd60e51b815260040161062d9061200c565b6007546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600780546001600160a01b0319169055565b6007546001600160a01b03163314610cb75760405162461bcd60e51b815260040161062d9061200c565b600d55565b60606001805461066790612120565b60006103e8610cd9600a5490565b11610cea5750662386f26fc1000090565b6107d0610cf6600a5490565b11610d0757506658d15e1762800090565b50600d5490565b34158015610d35575033610d2a6007546001600160a01b031690565b6001600160a01b0316145b15610d4657610d43816115fa565b50565b610d4f426110eb565b610d9b5760405162461bcd60e51b815260206004820152601960248201527f53616c657320617265206e6f7420737461727465642079657400000000000000604482015260640161062d565b34158015610da95750806001145b8015610dbb5750610db933610b92565b155b15610e34576101f4600b546001610dd29190612092565b1115610e155760405162461bcd60e51b8152602060048201526012602482015271233932b2903634b6b4ba1034b99037bb32b960711b604482015260640161062d565b600b8054906000610e258361215b565b9190505550610d4360016115fa565b3481610e3e610ccb565b610e4891906120be565b14610e955760405162461bcd60e51b815260206004820152601760248201527f56616c75652073656e7420697320696e636f7272656374000000000000000000604482015260640161062d565b610d43816115fa565b6001600160a01b038216331415610ef75760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161062d565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610f6d3383611380565b610f895760405162461bcd60e51b815260040161062d90612041565b610f95848484846116f6565b50505050565b6000818152600260205260409020546060906001600160a01b031661101a5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161062d565b6000611024611729565b90506000815111611044576040518060200160405280600081525061106f565b8061104e84611738565b60405160200161105f929190611f3b565b6040516020818303038152906040525b9392505050565b6000600c54600014156110c35760405162461bcd60e51b815260206004820152601560248201527414d85b195cc81b9bdd081e595d081919599a5b9959605a1b604482015260640161062d565b62127500600c546110d491906120dd565b905090565b6000600b546101f46110d491906120dd565b6000600c546000141580156105fd575062127500600c5461110c91906120dd565b821192915050565b60008060096040516111269190611e9f565b6040519081900390207f00000000000000000000000000000000000000000000000000000000000000001492915050565b60065460405163c455279160e01b81526001600160a01b03848116600483015260009281169190841690829063c45527919060240160206040518083038186803b1580156111a457600080fd5b505afa1580156111b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111dc9190611df4565b6001600160a01b031614156111f55760019150506105fd565b6001600160a01b0380851660009081526005602090815260408083209387168352929052205460ff165b949350505050565b6007546001600160a01b031633146112515760405162461bcd60e51b815260040161062d9061200c565b6001600160a01b0381166112b65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161062d565b6007546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061134782610b1b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166113f95760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161062d565b600061140483610b1b565b9050806001600160a01b0316846001600160a01b0316148061143f5750836001600160a01b0316611434846106ea565b6001600160a01b0316145b8061121f575061121f8185611157565b826001600160a01b031661146282610b1b565b6001600160a01b0316146114ca5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161062d565b6001600160a01b03821661152c5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161062d565b611537838383611836565b611542600082611312565b6001600160a01b038316600090815260036020526040812080546001929061156b9084906120dd565b90915550506001600160a01b0382166000908152600360205260408120805460019290611599908490612092565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60008111801561160b575060148111155b6116575760405162461bcd60e51b815260206004820152601860248201527f4e756d206973206e6f7420696e20312d32302072616e67650000000000000000604482015260640161062d565b614d5881611664600a5490565b61166e9190612092565b11156116bc5760405162461bcd60e51b815260206004820152601a60248201527f43616e2774206d696e742061626f7665206d6178537570706c79000000000000604482015260640161062d565b60005b81811015610a6f576116e4336116d4600a5490565b6116df906001612092565b61188d565b806116ee8161215b565b9150506116bf565b61170184848461144f565b61170d848484846118a7565b610f955760405162461bcd60e51b815260040161062d90611fba565b60606009805461066790612120565b60608161175c5750506040805180820190915260018152600360fc1b602082015290565b8160005b811561178657806117708161215b565b915061177f9050600a836120aa565b9150611760565b60008167ffffffffffffffff8111156117a1576117a16121cc565b6040519080825280601f01601f1916602001820160405280156117cb576020820181803683370190505b5090505b841561121f576117e06001836120dd565b91506117ed600a86612176565b6117f8906030612092565b60f81b81838151811061180d5761180d6121b6565b60200101906001600160f81b031916908160001a90535061182f600a866120aa565b94506117cf565b6001600160a01b038316611862576001600a60008282546118579190612092565b909155506108909050565b6001600160a01b038216610890576001600a600082825461188391906120dd565b9091555050505050565b610a6f8282604051806020016040528060008152506119b4565b60006001600160a01b0384163b156119a957604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906118eb903390899088908890600401611f6a565b602060405180830381600087803b15801561190557600080fd5b505af1925050508015611935575060408051601f3d908101601f1916820190925261193291810190611dd7565b60015b61198f573d808015611963576040519150601f19603f3d011682016040523d82523d6000602084013e611968565b606091505b5080516119875760405162461bcd60e51b815260040161062d90611fba565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061121f565b506001949350505050565b6119be83836119e7565b6119cb60008484846118a7565b6108905760405162461bcd60e51b815260040161062d90611fba565b6001600160a01b038216611a3d5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161062d565b6000818152600260205260409020546001600160a01b031615611aa25760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161062d565b611aae60008383611836565b6001600160a01b0382166000908152600360205260408120805460019290611ad7908490612092565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611b4190612120565b90600052602060002090601f016020900481019282611b635760008555611ba9565b82601f10611b7c57805160ff1916838001178555611ba9565b82800160010185558215611ba9579182015b82811115611ba9578251825591602001919060010190611b8e565b50611bb5929150611bb9565b5090565b5b80821115611bb55760008155600101611bba565b600067ffffffffffffffff80841115611be957611be96121cc565b604051601f8501601f19908116603f01168101908282118183101715611c1157611c116121cc565b81604052809350858152868686011115611c2a57600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611c5657600080fd5b813561106f816121e2565b60008060408385031215611c7457600080fd5b8235611c7f816121e2565b91506020830135611c8f816121e2565b809150509250929050565b600080600060608486031215611caf57600080fd5b8335611cba816121e2565b92506020840135611cca816121e2565b929592945050506040919091013590565b60008060008060808587031215611cf157600080fd5b8435611cfc816121e2565b93506020850135611d0c816121e2565b925060408501359150606085013567ffffffffffffffff811115611d2f57600080fd5b8501601f81018713611d4057600080fd5b611d4f87823560208401611bce565b91505092959194509250565b60008060408385031215611d6e57600080fd5b8235611d79816121e2565b915060208301358015158114611c8f57600080fd5b60008060408385031215611da157600080fd5b8235611dac816121e2565b946020939093013593505050565b600060208284031215611dcc57600080fd5b813561106f816121f7565b600060208284031215611de957600080fd5b815161106f816121f7565b600060208284031215611e0657600080fd5b815161106f816121e2565b600060208284031215611e2357600080fd5b813567ffffffffffffffff811115611e3a57600080fd5b8201601f81018413611e4b57600080fd5b61121f84823560208401611bce565b600060208284031215611e6c57600080fd5b5035919050565b60008151808452611e8b8160208601602086016120f4565b601f01601f19169290920160200192915050565b600080835481600182811c915080831680611ebb57607f831692505b6020808410821415611edb57634e487b7160e01b86526022600452602486fd5b818015611eef5760018114611f0057611f2d565b60ff19861689528489019650611f2d565b60008a81526020902060005b86811015611f255781548b820152908501908301611f0c565b505084890196505b509498975050505050505050565b60008351611f4d8184602088016120f4565b835190830190611f618183602088016120f4565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611f9d90830184611e73565b9695505050505050565b60208152600061106f6020830184611e73565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156120a5576120a561218a565b500190565b6000826120b9576120b96121a0565b500490565b60008160001904831182151516156120d8576120d861218a565b500290565b6000828210156120ef576120ef61218a565b500390565b60005b8381101561210f5781810151838201526020016120f7565b83811115610f955750506000910152565b600181811c9082168061213457607f821691505b6020821081141561215557634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561216f5761216f61218a565b5060010190565b600082612185576121856121a0565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610d4357600080fd5b6001600160e01b031981168114610d4357600080fdfe35646465653361393137306162366564636435633239343763343263356463303135393964316362313161383331653634323733363438323831336361373732a264697066735822122065a997ef00eae962da4fd308c0d0fc46587383553be5a650e6a061befbc26c9a64736f6c6343000806003300000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140493cb4204b8573c36d28fb25446edabeb44da2ac5637d1e25e429936f39414e3000000000000000000000000e2fd72dc68dd603a62cfe669aebc1bc2f5839521000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1000000000000000000000000000000000000000000000000000000000000000f43727970746f5479616e7320322e300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000243540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5765714a4c313663686e6e33503635504a527073525756593764334652434453696766695438757a7a3538652f00000000000000000000
Deployed Bytecode
0x6080604052600436106101e35760003560e01c8063715018a611610102578063c87b56dd11610095578063d5abeb0111610064578063d5abeb0114610546578063dcc7ba241461055c578063e985e9c514610571578063f2fde38b1461059157600080fd5b8063c87b56dd146104dc578063cac37390146104fc578063cd0c00fe14610511578063ce22b8cd1461052657600080fd5b806398d5fdca116100d157806398d5fdca14610474578063a0712d6814610489578063a22cb4651461049c578063b88d4fde146104bc57600080fd5b8063715018a61461040c5780638da5cb5b1461042157806391b7f5ed1461043f57806395d89b411461045f57600080fd5b806323b872dd1161017a57806348e4245d1161014957806348e4245d1461037857806360671910146103985780636352211e146103cc57806370a08231146103ec57600080fd5b806323b872dd1461030d578063269bbebd1461032d5780633ccfd60b1461034357806342842e0e1461035857600080fd5b8063095ea7b3116101b6578063095ea7b3146102995780630cb71584146102b95780630f7309e8146102d957806318160ddd146102ee57600080fd5b806301ffc9a7146101e85780630426c6971461021d57806306fdde031461023f578063081812fc14610261575b600080fd5b3480156101f457600080fd5b50610208610203366004611dba565b6105b1565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023d610238366004611c44565b610603565b005b34801561024b57600080fd5b50610254610658565b6040516102149190611fa7565b34801561026d57600080fd5b5061028161027c366004611e5a565b6106ea565b6040516001600160a01b039091168152602001610214565b3480156102a557600080fd5b5061023d6102b4366004611d8e565b61077f565b3480156102c557600080fd5b5061023d6102d4366004611e11565b610895565b3480156102e557600080fd5b506102546109b3565b3480156102fa57600080fd5b50600a545b604051908152602001610214565b34801561031957600080fd5b5061023d610328366004611c9a565b6109cf565b34801561033957600080fd5b506102ff6101f481565b34801561034f57600080fd5b5061023d610a00565b34801561036457600080fd5b5061023d610373366004611c9a565b610a73565b34801561038457600080fd5b5061023d610393366004611e5a565b610a8e565b3480156103a457600080fd5b506102ff7f493cb4204b8573c36d28fb25446edabeb44da2ac5637d1e25e429936f39414e381565b3480156103d857600080fd5b506102816103e7366004611e5a565b610b1b565b3480156103f857600080fd5b506102ff610407366004611c44565b610b92565b34801561041857600080fd5b5061023d610c19565b34801561042d57600080fd5b506007546001600160a01b0316610281565b34801561044b57600080fd5b5061023d61045a366004611e5a565b610c8d565b34801561046b57600080fd5b50610254610cbc565b34801561048057600080fd5b506102ff610ccb565b61023d610497366004611e5a565b610d0e565b3480156104a857600080fd5b5061023d6104b7366004611d5b565b610e9e565b3480156104c857600080fd5b5061023d6104d7366004611cdb565b610f63565b3480156104e857600080fd5b506102546104f7366004611e5a565b610f9b565b34801561050857600080fd5b506102ff611076565b34801561051d57600080fd5b506102ff6110d9565b34801561053257600080fd5b50610208610541366004611e5a565b6110eb565b34801561055257600080fd5b506102ff614d5881565b34801561056857600080fd5b50610208611114565b34801561057d57600080fd5b5061020861058c366004611c61565b611157565b34801561059d57600080fd5b5061023d6105ac366004611c44565b611227565b60006001600160e01b031982166380ac58cd60e01b14806105e257506001600160e01b03198216635b5e139f60e01b145b806105fd57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6007546001600160a01b031633146106365760405162461bcd60e51b815260040161062d9061200c565b60405180910390fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b60606000805461066790612120565b80601f016020809104026020016040519081016040528092919081815260200182805461069390612120565b80156106e05780601f106106b5576101008083540402835291602001916106e0565b820191906000526020600020905b8154815290600101906020018083116106c357829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166107635760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161062d565b506000908152600460205260409020546001600160a01b031690565b600061078a82610b1b565b9050806001600160a01b0316836001600160a01b031614156107f85760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161062d565b336001600160a01b038216148061081457506108148133611157565b6108865760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161062d565b6108908383611312565b505050565b6007546001600160a01b031633146108bf5760405162461bcd60e51b815260040161062d9061200c565b614d586108cb600a5490565b1015806108e55750600c54158015906108e55750600c5442115b6109315760405162461bcd60e51b815260206004820152601b60248201527f50726573616c65206973206e6f742066696e6973686564207965740000000000604482015260640161062d565b805160208201207f493cb4204b8573c36d28fb25446edabeb44da2ac5637d1e25e429936f39414e381146109a05760405162461bcd60e51b815260206004820152601660248201527543616e2774206163636570742077726f6e672055524960501b604482015260640161062d565b8151610890906009906020850190611b35565b60405180606001604052806040815260200161220e6040913981565b6109d93382611380565b6109f55760405162461bcd60e51b815260040161062d90612041565b61089083838361144f565b6007546001600160a01b03163314610a2a5760405162461bcd60e51b815260040161062d9061200c565b4780610a3557600080fd5b6008546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610a6f573d6000803e3d6000fd5b5050565b61089083838360405180602001604052806000815250610f63565b6007546001600160a01b03163314610ab85760405162461bcd60e51b815260040161062d9061200c565b600c5415610b085760405162461bcd60e51b815260206004820152601960248201527f53616c657320617265207374617274656420616c726561647900000000000000604482015260640161062d565b610b156212750082612092565b600c5550565b6000818152600260205260408120546001600160a01b0316806105fd5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161062d565b60006001600160a01b038216610bfd5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161062d565b506001600160a01b031660009081526003602052604090205490565b6007546001600160a01b03163314610c435760405162461bcd60e51b815260040161062d9061200c565b6007546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600780546001600160a01b0319169055565b6007546001600160a01b03163314610cb75760405162461bcd60e51b815260040161062d9061200c565b600d55565b60606001805461066790612120565b60006103e8610cd9600a5490565b11610cea5750662386f26fc1000090565b6107d0610cf6600a5490565b11610d0757506658d15e1762800090565b50600d5490565b34158015610d35575033610d2a6007546001600160a01b031690565b6001600160a01b0316145b15610d4657610d43816115fa565b50565b610d4f426110eb565b610d9b5760405162461bcd60e51b815260206004820152601960248201527f53616c657320617265206e6f7420737461727465642079657400000000000000604482015260640161062d565b34158015610da95750806001145b8015610dbb5750610db933610b92565b155b15610e34576101f4600b546001610dd29190612092565b1115610e155760405162461bcd60e51b8152602060048201526012602482015271233932b2903634b6b4ba1034b99037bb32b960711b604482015260640161062d565b600b8054906000610e258361215b565b9190505550610d4360016115fa565b3481610e3e610ccb565b610e4891906120be565b14610e955760405162461bcd60e51b815260206004820152601760248201527f56616c75652073656e7420697320696e636f7272656374000000000000000000604482015260640161062d565b610d43816115fa565b6001600160a01b038216331415610ef75760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161062d565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610f6d3383611380565b610f895760405162461bcd60e51b815260040161062d90612041565b610f95848484846116f6565b50505050565b6000818152600260205260409020546060906001600160a01b031661101a5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161062d565b6000611024611729565b90506000815111611044576040518060200160405280600081525061106f565b8061104e84611738565b60405160200161105f929190611f3b565b6040516020818303038152906040525b9392505050565b6000600c54600014156110c35760405162461bcd60e51b815260206004820152601560248201527414d85b195cc81b9bdd081e595d081919599a5b9959605a1b604482015260640161062d565b62127500600c546110d491906120dd565b905090565b6000600b546101f46110d491906120dd565b6000600c546000141580156105fd575062127500600c5461110c91906120dd565b821192915050565b60008060096040516111269190611e9f565b6040519081900390207f493cb4204b8573c36d28fb25446edabeb44da2ac5637d1e25e429936f39414e31492915050565b60065460405163c455279160e01b81526001600160a01b03848116600483015260009281169190841690829063c45527919060240160206040518083038186803b1580156111a457600080fd5b505afa1580156111b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111dc9190611df4565b6001600160a01b031614156111f55760019150506105fd565b6001600160a01b0380851660009081526005602090815260408083209387168352929052205460ff165b949350505050565b6007546001600160a01b031633146112515760405162461bcd60e51b815260040161062d9061200c565b6001600160a01b0381166112b65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161062d565b6007546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061134782610b1b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166113f95760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161062d565b600061140483610b1b565b9050806001600160a01b0316846001600160a01b0316148061143f5750836001600160a01b0316611434846106ea565b6001600160a01b0316145b8061121f575061121f8185611157565b826001600160a01b031661146282610b1b565b6001600160a01b0316146114ca5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161062d565b6001600160a01b03821661152c5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161062d565b611537838383611836565b611542600082611312565b6001600160a01b038316600090815260036020526040812080546001929061156b9084906120dd565b90915550506001600160a01b0382166000908152600360205260408120805460019290611599908490612092565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60008111801561160b575060148111155b6116575760405162461bcd60e51b815260206004820152601860248201527f4e756d206973206e6f7420696e20312d32302072616e67650000000000000000604482015260640161062d565b614d5881611664600a5490565b61166e9190612092565b11156116bc5760405162461bcd60e51b815260206004820152601a60248201527f43616e2774206d696e742061626f7665206d6178537570706c79000000000000604482015260640161062d565b60005b81811015610a6f576116e4336116d4600a5490565b6116df906001612092565b61188d565b806116ee8161215b565b9150506116bf565b61170184848461144f565b61170d848484846118a7565b610f955760405162461bcd60e51b815260040161062d90611fba565b60606009805461066790612120565b60608161175c5750506040805180820190915260018152600360fc1b602082015290565b8160005b811561178657806117708161215b565b915061177f9050600a836120aa565b9150611760565b60008167ffffffffffffffff8111156117a1576117a16121cc565b6040519080825280601f01601f1916602001820160405280156117cb576020820181803683370190505b5090505b841561121f576117e06001836120dd565b91506117ed600a86612176565b6117f8906030612092565b60f81b81838151811061180d5761180d6121b6565b60200101906001600160f81b031916908160001a90535061182f600a866120aa565b94506117cf565b6001600160a01b038316611862576001600a60008282546118579190612092565b909155506108909050565b6001600160a01b038216610890576001600a600082825461188391906120dd565b9091555050505050565b610a6f8282604051806020016040528060008152506119b4565b60006001600160a01b0384163b156119a957604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906118eb903390899088908890600401611f6a565b602060405180830381600087803b15801561190557600080fd5b505af1925050508015611935575060408051601f3d908101601f1916820190925261193291810190611dd7565b60015b61198f573d808015611963576040519150601f19603f3d011682016040523d82523d6000602084013e611968565b606091505b5080516119875760405162461bcd60e51b815260040161062d90611fba565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061121f565b506001949350505050565b6119be83836119e7565b6119cb60008484846118a7565b6108905760405162461bcd60e51b815260040161062d90611fba565b6001600160a01b038216611a3d5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161062d565b6000818152600260205260409020546001600160a01b031615611aa25760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161062d565b611aae60008383611836565b6001600160a01b0382166000908152600360205260408120805460019290611ad7908490612092565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611b4190612120565b90600052602060002090601f016020900481019282611b635760008555611ba9565b82601f10611b7c57805160ff1916838001178555611ba9565b82800160010185558215611ba9579182015b82811115611ba9578251825591602001919060010190611b8e565b50611bb5929150611bb9565b5090565b5b80821115611bb55760008155600101611bba565b600067ffffffffffffffff80841115611be957611be96121cc565b604051601f8501601f19908116603f01168101908282118183101715611c1157611c116121cc565b81604052809350858152868686011115611c2a57600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611c5657600080fd5b813561106f816121e2565b60008060408385031215611c7457600080fd5b8235611c7f816121e2565b91506020830135611c8f816121e2565b809150509250929050565b600080600060608486031215611caf57600080fd5b8335611cba816121e2565b92506020840135611cca816121e2565b929592945050506040919091013590565b60008060008060808587031215611cf157600080fd5b8435611cfc816121e2565b93506020850135611d0c816121e2565b925060408501359150606085013567ffffffffffffffff811115611d2f57600080fd5b8501601f81018713611d4057600080fd5b611d4f87823560208401611bce565b91505092959194509250565b60008060408385031215611d6e57600080fd5b8235611d79816121e2565b915060208301358015158114611c8f57600080fd5b60008060408385031215611da157600080fd5b8235611dac816121e2565b946020939093013593505050565b600060208284031215611dcc57600080fd5b813561106f816121f7565b600060208284031215611de957600080fd5b815161106f816121f7565b600060208284031215611e0657600080fd5b815161106f816121e2565b600060208284031215611e2357600080fd5b813567ffffffffffffffff811115611e3a57600080fd5b8201601f81018413611e4b57600080fd5b61121f84823560208401611bce565b600060208284031215611e6c57600080fd5b5035919050565b60008151808452611e8b8160208601602086016120f4565b601f01601f19169290920160200192915050565b600080835481600182811c915080831680611ebb57607f831692505b6020808410821415611edb57634e487b7160e01b86526022600452602486fd5b818015611eef5760018114611f0057611f2d565b60ff19861689528489019650611f2d565b60008a81526020902060005b86811015611f255781548b820152908501908301611f0c565b505084890196505b509498975050505050505050565b60008351611f4d8184602088016120f4565b835190830190611f618183602088016120f4565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611f9d90830184611e73565b9695505050505050565b60208152600061106f6020830184611e73565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156120a5576120a561218a565b500190565b6000826120b9576120b96121a0565b500490565b60008160001904831182151516156120d8576120d861218a565b500290565b6000828210156120ef576120ef61218a565b500390565b60005b8381101561210f5781810151838201526020016120f7565b83811115610f955750506000910152565b600181811c9082168061213457607f821691505b6020821081141561215557634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561216f5761216f61218a565b5060010190565b600082612185576121856121a0565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610d4357600080fd5b6001600160e01b031981168114610d4357600080fdfe35646465653361393137306162366564636435633239343763343263356463303135393964316362313161383331653634323733363438323831336361373732a264697066735822122065a997ef00eae962da4fd308c0d0fc46587383553be5a650e6a061befbc26c9a64736f6c63430008060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140493cb4204b8573c36d28fb25446edabeb44da2ac5637d1e25e429936f39414e3000000000000000000000000e2fd72dc68dd603a62cfe669aebc1bc2f5839521000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1000000000000000000000000000000000000000000000000000000000000000f43727970746f5479616e7320322e300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000243540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5765714a4c313663686e6e33503635504a527073525756593764334652434453696766695438757a7a3538652f00000000000000000000
-----Decoded View---------------
Arg [0] : name (string): CryptoTyans 2.0
Arg [1] : symbol (string): CT
Arg [2] : presaleUri (string): ipfs://QmWeqJL16chnn3P65PJRpsRWVY7d3FRCDSigfiT8uzz58e/
Arg [3] : futureUriHash (bytes32): 0x493cb4204b8573c36d28fb25446edabeb44da2ac5637d1e25e429936f39414e3
Arg [4] : payoutAddress (address): 0xe2fd72dC68Dd603A62Cfe669AEBC1bC2f5839521
Arg [5] : proxyAddress (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1
-----Encoded View---------------
13 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [3] : 493cb4204b8573c36d28fb25446edabeb44da2ac5637d1e25e429936f39414e3
Arg [4] : 000000000000000000000000e2fd72dc68dd603a62cfe669aebc1bc2f5839521
Arg [5] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Arg [6] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [7] : 43727970746f5479616e7320322e300000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [9] : 4354000000000000000000000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [11] : 697066733a2f2f516d5765714a4c313663686e6e33503635504a527073525756
Arg [12] : 593764334652434453696766695438757a7a3538652f00000000000000000000
Deployed Bytecode Sourcemap
93:5146:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24166:344:0;;;;;;;;;;-1:-1:-1;24166:344:0;;;;;:::i;:::-;;:::i;:::-;;;7437:14:2;;7430:22;7412:41;;7400:2;7385:18;24166:344:0;;;;;;;;4898:135:1;;;;;;;;;;-1:-1:-1;4898:135:1;;;;;:::i;:::-;;:::i;:::-;;25284:98:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;26807:295::-;;;;;;;;;;-1:-1:-1;26807:295:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6735:32:2;;;6717:51;;6705:2;6690:18;26807:295:0;6672:102:2;26345:401:0;;;;;;;;;;-1:-1:-1;26345:401:0;;;;;:::i;:::-;;:::i;4617:273:1:-;;;;;;;;;;-1:-1:-1;4617:273:1;;;;;:::i;:::-;;:::i;182:111::-;;;;;;;;;;;;;:::i;2242:88::-;;;;;;;;;;-1:-1:-1;2313:9:1;;2242:88;;;7610:25:2;;;7598:2;7583:18;2242:88:1;7565:76:2;27821:364:0;;;;;;;;;;-1:-1:-1;27821:364:0;;;;;:::i;:::-;;:::i;391:39:1:-;;;;;;;;;;;;427:3;391:39;;5041:195;;;;;;;;;;;;;:::i;28251:179:0:-;;;;;;;;;;-1:-1:-1;28251:179:0;;;;;:::i;:::-;;:::i;2029:205:1:-;;;;;;;;;;-1:-1:-1;2029:205:1;;;;;:::i;:::-;;:::i;300:36::-;;;;;;;;;;;;;;;24909:313:0;;;;;;;;;;-1:-1:-1;24909:313:0;;;;;:::i;:::-;;:::i;24569:283::-;;;;;;;;;;-1:-1:-1;24569:283:0;;;;;:::i;:::-;;:::i;3526:145::-;;;;;;;;;;;;;:::i;2894:85::-;;;;;;;;;;-1:-1:-1;2966:6:0;;-1:-1:-1;;;;;2966:6:0;2894:85;;2761:91:1;;;;;;;;;;-1:-1:-1;2761:91:1;;;;;:::i;:::-;;:::i;25446:102:0:-;;;;;;;;;;;;;:::i;2860:302:1:-;;;;;;;;;;;;;:::i;3286:826::-;;;;;;:::i;:::-;;:::i;27169:318:0:-;;;;;;;;;;-1:-1:-1;27169:318:0;;;;;:::i;:::-;;:::i;28496:354::-;;;;;;;;;;-1:-1:-1;28496:354:0;;;;;:::i;:::-;;:::i;25614:451::-;;;;;;;;;;-1:-1:-1;25614:451:0;;;;;:::i;:::-;;:::i;1623:191:1:-;;;;;;;;;;;;;:::i;3170:108::-;;;;;;;;;;;;;:::i;1822:199::-;;;;;;;;;;-1:-1:-1;1822:199:1;;;;;:::i;:::-;;:::i;343:41::-;;;;;;;;;;;;379:5;343:41;;4441:168;;;;;;;;;;;;;:::i;37473:450:0:-;;;;;;;;;;-1:-1:-1;37473:450:0;;;;;:::i;:::-;;:::i;3820:274::-;;;;;;;;;;-1:-1:-1;3820:274:0;;;;;:::i;:::-;;:::i;24166:344::-;24308:4;-1:-1:-1;;;;;;24347:40:0;;-1:-1:-1;;;24347:40:0;;:104;;-1:-1:-1;;;;;;;24403:48:0;;-1:-1:-1;;;24403:48:0;24347:104;:156;;;-1:-1:-1;;;;;;;;;;22843:40:0;;;24467:36;24328:175;24166:344;-1:-1:-1;;24166:344:0:o;4898:135:1:-;2966:6:0;;-1:-1:-1;;;;;2966:6:0;1557:10;3106:23;3098:68;;;;-1:-1:-1;;;3098:68:0;;;;;;;:::i;:::-;;;;;;;;;4983:14:1::1;:42:::0;;-1:-1:-1;;;;;;4983:42:1::1;-1:-1:-1::0;;;;;4983:42:1;;;::::1;::::0;;;::::1;::::0;;4898:135::o;25284:98:0:-;25338:13;25370:5;25363:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25284:98;:::o;26807:295::-;26923:7;30444:16;;;:7;:16;;;;;;-1:-1:-1;;;;;30444:16:0;26946:107;;;;-1:-1:-1;;;26946:107:0;;13798:2:2;26946:107:0;;;13780:21:2;13837:2;13817:18;;;13810:30;13876:34;13856:18;;;13849:62;-1:-1:-1;;;13927:18:2;;;13920:42;13979:19;;26946:107:0;13770:234:2;26946:107:0;-1:-1:-1;27071:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;27071:24:0;;26807:295::o;26345:401::-;26425:13;26441:23;26456:7;26441:14;:23::i;:::-;26425:39;;26488:5;-1:-1:-1;;;;;26482:11:0;:2;-1:-1:-1;;;;;26482:11:0;;;26474:57;;;;-1:-1:-1;;;26474:57:0;;15398:2:2;26474:57:0;;;15380:21:2;15437:2;15417:18;;;15410:30;15476:34;15456:18;;;15449:62;-1:-1:-1;;;15527:18:2;;;15520:31;15568:19;;26474:57:0;15370:223:2;26474:57:0;1557:10;-1:-1:-1;;;;;26563:21:0;;;;:62;;-1:-1:-1;26588:37:0;26605:5;1557:10;37473:450;:::i;26588:37::-;26542:165;;;;-1:-1:-1;;;26542:165:0;;11844:2:2;26542:165:0;;;11826:21:2;11883:2;11863:18;;;11856:30;11922:34;11902:18;;;11895:62;11993:26;11973:18;;;11966:54;12037:19;;26542:165:0;11816:246:2;26542:165:0;26718:21;26727:2;26731:7;26718:8;:21::i;:::-;26415:331;26345:401;;:::o;4617:273:1:-;2966:6:0;;-1:-1:-1;;;;;2966:6:0;1557:10;3106:23;3098:68;;;;-1:-1:-1;;;3098:68:0;;;;;;;:::i;:::-;379:5:1::1;1407:13;2313:9:::0;;;2242:88;1407:13:::1;:26;;:133;;;-1:-1:-1::0;1455:18:1::1;::::0;:23;;::::1;::::0;:84:::1;;;1521:18;;1503:15;:36;1455:84;1385:210;;;::::0;-1:-1:-1;;;1385:210:1;;11488:2:2;1385:210:1::1;::::0;::::1;11470:21:2::0;11527:2;11507:18;;;11500:30;11566:29;11546:18;;;11539:57;11613:18;;1385:210:1::1;11460:177:2::0;1385:210:1::1;4760:25:::0;;::::2;::::0;::::2;::::0;4815:11:::2;4804:22:::0;::::2;4796:57;;;::::0;-1:-1:-1;;;4796:57:1;;16923:2:2;4796:57:1::2;::::0;::::2;16905:21:2::0;16962:2;16942:18;;;16935:30;-1:-1:-1;;;16981:18:2;;;16974:52;17043:18;;4796:57:1::2;16895:172:2::0;4796:57:1::2;4864:18:::0;;::::2;::::0;:8:::2;::::0;:18:::2;::::0;::::2;::::0;::::2;:::i;182:111::-:0;;;;;;;;;;;;;;;;;;;:::o;27821:364:0:-;28023:41;1557:10;28056:7;28023:18;:41::i;:::-;28002:137;;;;-1:-1:-1;;;28002:137:0;;;;;;;:::i;:::-;28150:28;28160:4;28166:2;28170:7;28150:9;:28::i;5041:195:1:-;2966:6:0;;-1:-1:-1;;;;;2966:6:0;1557:10;3106:23;3098:68;;;;-1:-1:-1;;;3098:68:0;;;;;;;:::i;:::-;5117:21:1::1;5157:19:::0;5149:28:::1;;;::::0;::::1;;5188:14;::::0;:40:::1;::::0;-1:-1:-1;;;;;5188:14:1;;::::1;::::0;:40;::::1;;;::::0;5212:15;;5188:14:::1;:40:::0;:14;:40;5212:15;5188:14;:40;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;5080:156;5041:195::o:0;28251:179:0:-;28384:39;28401:4;28407:2;28411:7;28384:39;;;;;;;;;;;;:16;:39::i;2029:205:1:-;2966:6:0;;-1:-1:-1;;;;;2966:6:0;1557:10;3106:23;3098:68;;;;-1:-1:-1;;;3098:68:0;;;;;;;:::i;:::-;2109:18:1::1;::::0;:23;2101:61:::1;;;::::0;-1:-1:-1;;;2101:61:1;;9608:2:2;2101:61:1::1;::::0;::::1;9590:21:2::0;9647:2;9627:18;;;9620:30;9686:27;9666:18;;;9659:55;9731:18;;2101:61:1::1;9580:175:2::0;2101:61:1::1;2194:32;480:10;2194:14:::0;:32:::1;:::i;:::-;2173:18;:53:::0;-1:-1:-1;2029:205:1:o;24909:313:0:-;25021:7;25060:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25060:16:0;25107:19;25086:107;;;;-1:-1:-1;;;25086:107:0;;12680:2:2;25086:107:0;;;12662:21:2;12719:2;12699:18;;;12692:30;12758:34;12738:18;;;12731:62;-1:-1:-1;;;12809:18:2;;;12802:39;12858:19;;25086:107:0;12652:231:2;24569:283:0;24681:7;-1:-1:-1;;;;;24725:19:0;;24704:108;;;;-1:-1:-1;;;24704:108:0;;12269:2:2;24704:108:0;;;12251:21:2;12308:2;12288:18;;;12281:30;12347:34;12327:18;;;12320:62;-1:-1:-1;;;12398:18:2;;;12391:40;12448:19;;24704:108:0;12241:232:2;24704:108:0;-1:-1:-1;;;;;;24829:16:0;;;;;:9;:16;;;;;;;24569:283::o;3526:145::-;2966:6;;-1:-1:-1;;;;;2966:6:0;1557:10;3106:23;3098:68;;;;-1:-1:-1;;;3098:68:0;;;;;;;:::i;:::-;3616:6:::1;::::0;3595:40:::1;::::0;3632:1:::1;::::0;-1:-1:-1;;;;;3616:6:0::1;::::0;3595:40:::1;::::0;3632:1;;3595:40:::1;3645:6;:19:::0;;-1:-1:-1;;;;;;3645:19:0::1;::::0;;3526:145::o;2761:91:1:-;2966:6:0;;-1:-1:-1;;;;;2966:6:0;1557:10;3106:23;3098:68;;;;-1:-1:-1;;;3098:68:0;;;;;;;:::i;:::-;2827:6:1::1;:17:::0;2761:91::o;25446:102:0:-;25502:13;25534:7;25527:14;;;;;:::i;2860:302:1:-;2901:7;2942:4;2925:13;2313:9;;;2242:88;2925:13;:21;2921:234;;-1:-1:-1;2970:17:1;;2860:302::o;2921:234::-;3039:4;3022:13;2313:9;;;2242:88;3022:13;:21;3018:137;;-1:-1:-1;3067:17:1;;2860:302::o;3018:137::-;-1:-1:-1;3137:6:1;;;2860:302::o;3286:826::-;3345:9;:14;:39;;;;-1:-1:-1;3374:10:1;3363:7;2966:6:0;;-1:-1:-1;;;;;2966:6:0;;2894:85;3363:7:1;-1:-1:-1;;;;;3363:21:1;;3345:39;3341:764;;;3401:17;3414:3;3401:12;:17::i;:::-;3286:826;:::o;3341:764::-;3477:33;3494:15;3477:16;:33::i;:::-;3451:120;;;;-1:-1:-1;;;3451:120:1;;10721:2:2;3451:120:1;;;10703:21:2;10760:2;10740:18;;;10733:30;10799:27;10779:18;;;10772:55;10844:18;;3451:120:1;10693:175:2;3451:120:1;3590:9;:14;:26;;;;;3608:3;3615:1;3608:8;3590:26;:56;;;;;3620:21;3630:10;3620:9;:21::i;:::-;:26;3590:56;3586:508;;;427:3;3756:12;;3771:1;3756:16;;;;:::i;:::-;:29;;3748:60;;;;-1:-1:-1;;;3748:60:1;;13090:2:2;3748:60:1;;;13072:21:2;13129:2;13109:18;;;13102:30;-1:-1:-1;;;13148:18:2;;;13141:48;13206:18;;3748:60:1;13062:168:2;3748:60:1;3827:12;:14;;;:12;:14;;;:::i;:::-;;;;;;3860:15;3873:1;3860:12;:15::i;3586:508::-;3966:9;3959:3;3946:10;:8;:10::i;:::-;:16;;;;:::i;:::-;:29;3916:126;;;;-1:-1:-1;;;3916:126:1;;17274:2:2;3916:126:1;;;17256:21:2;17313:2;17293:18;;;17286:30;17352:25;17332:18;;;17325:53;17395:18;;3916:126:1;17246:173:2;3916:126:1;4061:17;4074:3;4061:12;:17::i;27169:318:0:-;-1:-1:-1;;;;;27299:24:0;;1557:10;27299:24;;27291:62;;;;-1:-1:-1;;;27291:62:0;;10367:2:2;27291:62:0;;;10349:21:2;10406:2;10386:18;;;10379:30;10445:27;10425:18;;;10418:55;10490:18;;27291:62:0;10339:175:2;27291:62:0;1557:10;27364:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;27364:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;27364:53:0;;;;;;;;;;27432:48;;7412:41:2;;;27364:42:0;;1557:10;27432:48;;7385:18:2;27432:48:0;;;;;;;27169:318;;:::o;28496:354::-;28678:41;1557:10;28711:7;28678:18;:41::i;:::-;28657:137;;;;-1:-1:-1;;;28657:137:0;;;;;;;:::i;:::-;28804:39;28818:4;28824:2;28828:7;28837:5;28804:13;:39::i;:::-;28496:354;;;;:::o;25614:451::-;30421:4;30444:16;;;:7;:16;;;;;;25727:13;;-1:-1:-1;;;;;30444:16:0;25756:110;;;;-1:-1:-1;;;25756:110:0;;14982:2:2;25756:110:0;;;14964:21:2;15021:2;15001:18;;;14994:30;15060:34;15040:18;;;15033:62;-1:-1:-1;;;15111:18:2;;;15104:45;15166:19;;25756:110:0;14954:237:2;25756:110:0;25877:21;25901:10;:8;:10::i;:::-;25877:34;;25964:1;25946:7;25940:21;:25;:118;;;;;;;;;;;;;;;;;26008:7;26017:18;:7;:16;:18::i;:::-;25991:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25940:118;25921:137;25614:451;-1:-1:-1;;;25614:451:0:o;1623:191:1:-;1675:7;1703:18;;1725:1;1703:23;;1695:57;;;;-1:-1:-1;;;1695:57:1;;15800:2:2;1695:57:1;;;15782:21:2;15839:2;15819:18;;;15812:30;-1:-1:-1;;;15858:18:2;;;15851:51;15919:18;;1695:57:1;15772:171:2;1695:57:1;480:10;1770:18;;:36;;;;:::i;:::-;1763:43;;1623:191;:::o;3170:108::-;3219:7;3258:12;;427:3;3246:24;;;;:::i;1822:199::-;1888:4;1925:18;;1947:1;1925:23;;:88;;;;;480:10;1977:18;;:36;;;;:::i;:::-;1965:9;:48;1905:108;1822:199;-1:-1:-1;;1822:199:1:o;4441:168::-;4492:4;4509:19;4547:8;4531:26;;;;;;:::i;:::-;;;;;;;;;4590:11;4575:26;;4441:168;-1:-1:-1;;4441:168:1:o;37473:450:0:-;37733:20;;37776:29;;-1:-1:-1;;;37776:29:0;;-1:-1:-1;;;;;6735:32:2;;;37776:29:0;;;6717:51:2;37596:15:0;;37733:20;;;37768:51;;;;37733:20;;37776:21;;6690:18:2;;37776:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37768:51:0;;37764:93;;;37842:4;37835:11;;;;;37764:93;-1:-1:-1;;;;;27717:25:0;;;27690:4;27717:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;37874:42;37867:49;37473:450;-1:-1:-1;;;;37473:450:0:o;3820:274::-;2966:6;;-1:-1:-1;;;;;2966:6:0;1557:10;3106:23;3098:68;;;;-1:-1:-1;;;3098:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3921:22:0;::::1;3900:107;;;::::0;-1:-1:-1;;;3900:107:0;;8844:2:2;3900:107:0::1;::::0;::::1;8826:21:2::0;8883:2;8863:18;;;8856:30;8922:34;8902:18;;;8895:62;-1:-1:-1;;;8973:18:2;;;8966:36;9019:19;;3900:107:0::1;8816:228:2::0;3900:107:0::1;4043:6;::::0;4022:38:::1;::::0;-1:-1:-1;;;;;4022:38:0;;::::1;::::0;4043:6:::1;::::0;4022:38:::1;::::0;4043:6:::1;::::0;4022:38:::1;4070:6;:17:::0;;-1:-1:-1;;;;;;4070:17:0::1;-1:-1:-1::0;;;;;4070:17:0;;;::::1;::::0;;;::::1;::::0;;3820:274::o;34335:171::-;34409:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;34409:29:0;-1:-1:-1;;;;;34409:29:0;;;;;;;;:24;;34462:23;34409:24;34462:14;:23::i;:::-;-1:-1:-1;;;;;34453:46:0;;;;;;;;;;;34335:171;;:::o;30639:438::-;30764:4;30444:16;;;:7;:16;;;;;;-1:-1:-1;;;;;30444:16:0;30784:107;;;;-1:-1:-1;;;30784:107:0;;11075:2:2;30784:107:0;;;11057:21:2;11114:2;11094:18;;;11087:30;11153:34;11133:18;;;11126:62;-1:-1:-1;;;11204:18:2;;;11197:42;11256:19;;30784:107:0;11047:234:2;30784:107:0;30901:13;30917:23;30932:7;30917:14;:23::i;:::-;30901:39;;30969:5;-1:-1:-1;;;;;30958:16:0;:7;-1:-1:-1;;;;;30958:16:0;;:63;;;;31014:7;-1:-1:-1;;;;;30990:31:0;:20;31002:7;30990:11;:20::i;:::-;-1:-1:-1;;;;;30990:31:0;;30958:63;:111;;;;31037:32;31054:5;31061:7;31037:16;:32::i;33630:594::-;33797:4;-1:-1:-1;;;;;33770:31:0;:23;33785:7;33770:14;:23::i;:::-;-1:-1:-1;;;;;33770:31:0;;33749:119;;;;-1:-1:-1;;;33749:119:0;;14572:2:2;33749:119:0;;;14554:21:2;14611:2;14591:18;;;14584:30;14650:34;14630:18;;;14623:62;-1:-1:-1;;;14701:18:2;;;14694:39;14750:19;;33749:119:0;14544:231:2;33749:119:0;-1:-1:-1;;;;;33886:16:0;;33878:65;;;;-1:-1:-1;;;33878:65:0;;9962:2:2;33878:65:0;;;9944:21:2;10001:2;9981:18;;;9974:30;10040:34;10020:18;;;10013:62;-1:-1:-1;;;10091:18:2;;;10084:34;10135:19;;33878:65:0;9934:226:2;33878:65:0;33954:39;33975:4;33981:2;33985:7;33954:20;:39::i;:::-;34055:29;34072:1;34076:7;34055:8;:29::i;:::-;-1:-1:-1;;;;;34095:15:0;;;;;;:9;:15;;;;;:20;;34114:1;;34095:15;:20;;34114:1;;34095:20;:::i;:::-;;;;-1:-1:-1;;;;;;;34125:13:0;;;;;;:9;:13;;;;;:18;;34142:1;;34125:13;:18;;34142:1;;34125:18;:::i;:::-;;;;-1:-1:-1;;34153:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;34153:21:0;-1:-1:-1;;;;;34153:21:0;;;;;;;;;34190:27;;34153:16;;34190:27;;;;;;;33630:594;;;:::o;4120:313:1:-;4189:1;4183:3;:7;:20;;;;;4201:2;4194:3;:9;;4183:20;4175:57;;;;-1:-1:-1;;;4175:57:1;;8072:2:2;4175:57:1;;;8054:21:2;8111:2;8091:18;;;8084:30;8150:26;8130:18;;;8123:54;8194:18;;4175:57:1;8044:174:2;4175:57:1;379:5;4267:3;4251:13;2313:9;;;2242:88;4251:13;:19;;;;:::i;:::-;:32;;4243:71;;;;-1:-1:-1;;;4243:71:1;;16150:2:2;4243:71:1;;;16132:21:2;16189:2;16169:18;;;16162:30;16228:28;16208:18;;;16201:56;16274:18;;4243:71:1;16122:176:2;4243:71:1;4330:9;4325:101;4349:3;4345:1;:7;4325:101;;;4374:40;4384:10;4396:13;2313:9;;;2242:88;4396:13;:17;;4412:1;4396:17;:::i;:::-;4374:9;:40::i;:::-;4354:3;;;;:::i;:::-;;;;4325:101;;29712:341:0;29863:28;29873:4;29879:2;29883:7;29863:9;:28::i;:::-;29922:48;29945:4;29951:2;29955:7;29964:5;29922:22;:48::i;:::-;29901:145;;;;-1:-1:-1;;;29901:145:0;;;;;;;:::i;2338:109:1:-;2398:13;2431:8;2424:15;;;;;:::i;20179:703:0:-;20235:13;20452:10;20448:51;;-1:-1:-1;;20478:10:0;;;;;;;;;;;;-1:-1:-1;;;20478:10:0;;;;;20179:703::o;20448:51::-;20523:5;20508:12;20562:75;20569:9;;20562:75;;20594:8;;;;:::i;:::-;;-1:-1:-1;20616:10:0;;-1:-1:-1;20624:2:0;20616:10;;:::i;:::-;;;20562:75;;;20646:19;20678:6;20668:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20668:17:0;;20646:39;;20695:150;20702:10;;20695:150;;20728:11;20738:1;20728:11;;:::i;:::-;;-1:-1:-1;20796:10:0;20804:2;20796:5;:10;:::i;:::-;20783:24;;:2;:24;:::i;:::-;20770:39;;20753:6;20760;20753:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;20753:56:0;;;;;;;;-1:-1:-1;20823:11:0;20832:2;20823:11;;:::i;:::-;;;20695:150;;2455:298:1;-1:-1:-1;;;;;2659:18:1;;2655:90;;2692:1;2679:9;;:14;;;;;;;:::i;:::-;;;;-1:-1:-1;2655:90:1;;-1:-1:-1;2655:90:1;;-1:-1:-1;;;;;2713:16:1;;2709:36;;2744:1;2731:9;;:14;;;;;;;:::i;:::-;;;;-1:-1:-1;;2455:298:1;;;:::o;31407:108:0:-;31482:26;31492:2;31496:7;31482:26;;;;;;;;;;;;:9;:26::i;35059:1022::-;35209:4;-1:-1:-1;;;;;35229:13:0;;12517:20;12563:8;35225:850;;35280:170;;-1:-1:-1;;;35280:170:0;;-1:-1:-1;;;;;35280:36:0;;;;;:170;;1557:10;;35372:4;;35398:7;;35427:5;;35280:170;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35280:170:0;;;;;;;;-1:-1:-1;;35280:170:0;;;;;;;;;;;;:::i;:::-;;;35260:763;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35633:13:0;;35629:380;;35675:106;;-1:-1:-1;;;35675:106:0;;;;;;;:::i;35629:380::-;35961:6;35955:13;35946:6;35942:2;35938:15;35931:38;35260:763;-1:-1:-1;;;;;;35512:55:0;-1:-1:-1;;;35512:55:0;;-1:-1:-1;35505:62:0;;35225:850;-1:-1:-1;36060:4:0;35059:1022;;;;;;:::o;31736:311::-;31861:18;31867:2;31871:7;31861:5;:18::i;:::-;31910:54;31941:1;31945:2;31949:7;31958:5;31910:22;:54::i;:::-;31889:151;;;;-1:-1:-1;;;31889:151:0;;;;;;;:::i;32369:372::-;-1:-1:-1;;;;;32448:16:0;;32440:61;;;;-1:-1:-1;;;32440:61:0;;13437:2:2;32440:61:0;;;13419:21:2;;;13456:18;;;13449:30;13515:34;13495:18;;;13488:62;13567:18;;32440:61:0;13409:182:2;32440:61:0;30421:4;30444:16;;;:7;:16;;;;;;-1:-1:-1;;;;;30444:16:0;:30;32511:58;;;;-1:-1:-1;;;32511:58:0;;9251:2:2;32511:58:0;;;9233:21:2;9290:2;9270:18;;;9263:30;9329;9309:18;;;9302:58;9377:18;;32511:58:0;9223:178:2;32511:58:0;32580:45;32609:1;32613:2;32617:7;32580:20;:45::i;:::-;-1:-1:-1;;;;;32636:13:0;;;;;;:9;:13;;;;;:18;;32653:1;;32636:13;:18;;32653:1;;32636:18;:::i;:::-;;;;-1:-1:-1;;32664:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;32664:21:0;-1:-1:-1;;;;;32664:21:0;;;;;;;;32701:33;;32664:16;;;32701:33;;32664:16;;32701:33;32369:372;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:2;78:5;108:18;149:2;141:6;138:14;135:2;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:2;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:2;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:2;;;532:1;529;522:12;491:2;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;88:557;;;;;:::o;650:247::-;709:6;762:2;750:9;741:7;737:23;733:32;730:2;;;778:1;775;768:12;730:2;817:9;804:23;836:31;861:5;836:31;:::i;902:388::-;970:6;978;1031:2;1019:9;1010:7;1006:23;1002:32;999:2;;;1047:1;1044;1037:12;999:2;1086:9;1073:23;1105:31;1130:5;1105:31;:::i;:::-;1155:5;-1:-1:-1;1212:2:2;1197:18;;1184:32;1225:33;1184:32;1225:33;:::i;:::-;1277:7;1267:17;;;989:301;;;;;:::o;1295:456::-;1372:6;1380;1388;1441:2;1429:9;1420:7;1416:23;1412:32;1409:2;;;1457:1;1454;1447:12;1409:2;1496:9;1483:23;1515:31;1540:5;1515:31;:::i;:::-;1565:5;-1:-1:-1;1622:2:2;1607:18;;1594:32;1635:33;1594:32;1635:33;:::i;:::-;1399:352;;1687:7;;-1:-1:-1;;;1741:2:2;1726:18;;;;1713:32;;1399:352::o;1756:794::-;1851:6;1859;1867;1875;1928:3;1916:9;1907:7;1903:23;1899:33;1896:2;;;1945:1;1942;1935:12;1896:2;1984:9;1971:23;2003:31;2028:5;2003:31;:::i;:::-;2053:5;-1:-1:-1;2110:2:2;2095:18;;2082:32;2123:33;2082:32;2123:33;:::i;:::-;2175:7;-1:-1:-1;2229:2:2;2214:18;;2201:32;;-1:-1:-1;2284:2:2;2269:18;;2256:32;2311:18;2300:30;;2297:2;;;2343:1;2340;2333:12;2297:2;2366:22;;2419:4;2411:13;;2407:27;-1:-1:-1;2397:2:2;;2448:1;2445;2438:12;2397:2;2471:73;2536:7;2531:2;2518:16;2513:2;2509;2505:11;2471:73;:::i;:::-;2461:83;;;1886:664;;;;;;;:::o;2555:416::-;2620:6;2628;2681:2;2669:9;2660:7;2656:23;2652:32;2649:2;;;2697:1;2694;2687:12;2649:2;2736:9;2723:23;2755:31;2780:5;2755:31;:::i;:::-;2805:5;-1:-1:-1;2862:2:2;2847:18;;2834:32;2904:15;;2897:23;2885:36;;2875:2;;2935:1;2932;2925:12;2976:315;3044:6;3052;3105:2;3093:9;3084:7;3080:23;3076:32;3073:2;;;3121:1;3118;3111:12;3073:2;3160:9;3147:23;3179:31;3204:5;3179:31;:::i;:::-;3229:5;3281:2;3266:18;;;;3253:32;;-1:-1:-1;;;3063:228:2:o;3296:245::-;3354:6;3407:2;3395:9;3386:7;3382:23;3378:32;3375:2;;;3423:1;3420;3413:12;3375:2;3462:9;3449:23;3481:30;3505:5;3481:30;:::i;3546:249::-;3615:6;3668:2;3656:9;3647:7;3643:23;3639:32;3636:2;;;3684:1;3681;3674:12;3636:2;3716:9;3710:16;3735:30;3759:5;3735:30;:::i;3800:280::-;3899:6;3952:2;3940:9;3931:7;3927:23;3923:32;3920:2;;;3968:1;3965;3958:12;3920:2;4000:9;3994:16;4019:31;4044:5;4019:31;:::i;4085:450::-;4154:6;4207:2;4195:9;4186:7;4182:23;4178:32;4175:2;;;4223:1;4220;4213:12;4175:2;4263:9;4250:23;4296:18;4288:6;4285:30;4282:2;;;4328:1;4325;4318:12;4282:2;4351:22;;4404:4;4396:13;;4392:27;-1:-1:-1;4382:2:2;;4433:1;4430;4423:12;4382:2;4456:73;4521:7;4516:2;4503:16;4498:2;4494;4490:11;4456:73;:::i;4540:180::-;4599:6;4652:2;4640:9;4631:7;4627:23;4623:32;4620:2;;;4668:1;4665;4658:12;4620:2;-1:-1:-1;4691:23:2;;4610:110;-1:-1:-1;4610:110:2:o;4725:257::-;4766:3;4804:5;4798:12;4831:6;4826:3;4819:19;4847:63;4903:6;4896:4;4891:3;4887:14;4880:4;4873:5;4869:16;4847:63;:::i;:::-;4964:2;4943:15;-1:-1:-1;;4939:29:2;4930:39;;;;4971:4;4926:50;;4774:208;-1:-1:-1;;4774:208:2:o;4987:1104::-;5117:3;5146:1;5179:6;5173:13;5209:3;5231:1;5259:9;5255:2;5251:18;5241:28;;5319:2;5308:9;5304:18;5341;5331:2;;5385:4;5377:6;5373:17;5363:27;;5331:2;5411;5459;5451:6;5448:14;5428:18;5425:38;5422:2;;;-1:-1:-1;;;5486:33:2;;5542:4;5539:1;5532:15;5572:4;5493:3;5560:17;5422:2;5603:18;5630:104;;;;5748:1;5743:323;;;;5596:470;;5630:104;-1:-1:-1;;5663:24:2;;5651:37;;5708:16;;;;-1:-1:-1;5630:104:2;;5743:323;17682:1;17675:14;;;17719:4;17706:18;;5841:1;5855:165;5869:6;5866:1;5863:13;5855:165;;;5947:14;;5934:11;;;5927:35;5990:16;;;;5884:10;;5855:165;;;5859:3;;6049:6;6044:3;6040:16;6033:23;;5596:470;-1:-1:-1;6082:3:2;;5125:966;-1:-1:-1;;;;;;;;5125:966:2:o;6096:470::-;6275:3;6313:6;6307:13;6329:53;6375:6;6370:3;6363:4;6355:6;6351:17;6329:53;:::i;:::-;6445:13;;6404:16;;;;6467:57;6445:13;6404:16;6501:4;6489:17;;6467:57;:::i;:::-;6540:20;;6283:283;-1:-1:-1;;;;6283:283:2:o;6779:488::-;-1:-1:-1;;;;;7048:15:2;;;7030:34;;7100:15;;7095:2;7080:18;;7073:43;7147:2;7132:18;;7125:34;;;7195:3;7190:2;7175:18;;7168:31;;;6973:4;;7216:45;;7241:19;;7233:6;7216:45;:::i;:::-;7208:53;6982:285;-1:-1:-1;;;;;;6982:285:2:o;7646:219::-;7795:2;7784:9;7777:21;7758:4;7815:44;7855:2;7844:9;7840:18;7832:6;7815:44;:::i;8223:414::-;8425:2;8407:21;;;8464:2;8444:18;;;8437:30;8503:34;8498:2;8483:18;;8476:62;-1:-1:-1;;;8569:2:2;8554:18;;8547:48;8627:3;8612:19;;8397:240::o;14009:356::-;14211:2;14193:21;;;14230:18;;;14223:30;14289:34;14284:2;14269:18;;14262:62;14356:2;14341:18;;14183:182::o;16303:413::-;16505:2;16487:21;;;16544:2;16524:18;;;16517:30;16583:34;16578:2;16563:18;;16556:62;-1:-1:-1;;;16649:2:2;16634:18;;16627:47;16706:3;16691:19;;16477:239::o;17735:128::-;17775:3;17806:1;17802:6;17799:1;17796:13;17793:2;;;17812:18;;:::i;:::-;-1:-1:-1;17848:9:2;;17783:80::o;17868:120::-;17908:1;17934;17924:2;;17939:18;;:::i;:::-;-1:-1:-1;17973:9:2;;17914:74::o;17993:168::-;18033:7;18099:1;18095;18091:6;18087:14;18084:1;18081:21;18076:1;18069:9;18062:17;18058:45;18055:2;;;18106:18;;:::i;:::-;-1:-1:-1;18146:9:2;;18045:116::o;18166:125::-;18206:4;18234:1;18231;18228:8;18225:2;;;18239:18;;:::i;:::-;-1:-1:-1;18276:9:2;;18215:76::o;18296:258::-;18368:1;18378:113;18392:6;18389:1;18386:13;18378:113;;;18468:11;;;18462:18;18449:11;;;18442:39;18414:2;18407:10;18378:113;;;18509:6;18506:1;18503:13;18500:2;;;-1:-1:-1;;18544:1:2;18526:16;;18519:27;18349:205::o;18559:380::-;18638:1;18634:12;;;;18681;;;18702:2;;18756:4;18748:6;18744:17;18734:27;;18702:2;18809;18801:6;18798:14;18778:18;18775:38;18772:2;;;18855:10;18850:3;18846:20;18843:1;18836:31;18890:4;18887:1;18880:15;18918:4;18915:1;18908:15;18772:2;;18614:325;;;:::o;18944:135::-;18983:3;-1:-1:-1;;19004:17:2;;19001:2;;;19024:18;;:::i;:::-;-1:-1:-1;19071:1:2;19060:13;;18991:88::o;19084:112::-;19116:1;19142;19132:2;;19147:18;;:::i;:::-;-1:-1:-1;19181:9:2;;19122:74::o;19201:127::-;19262:10;19257:3;19253:20;19250:1;19243:31;19293:4;19290:1;19283:15;19317:4;19314:1;19307:15;19333:127;19394:10;19389:3;19385:20;19382:1;19375:31;19425:4;19422:1;19415:15;19449:4;19446:1;19439:15;19465:127;19526:10;19521:3;19517:20;19514:1;19507:31;19557:4;19554:1;19547:15;19581:4;19578:1;19571:15;19597:127;19658:10;19653:3;19649:20;19646:1;19639:31;19689:4;19686:1;19679:15;19713:4;19710:1;19703:15;19729:131;-1:-1:-1;;;;;19804:31:2;;19794:42;;19784:2;;19850:1;19847;19840:12;19865:131;-1:-1:-1;;;;;;19939:32:2;;19929:43;;19919:2;;19986:1;19983;19976:12
Swarm Source
ipfs://65a997ef00eae962da4fd308c0d0fc46587383553be5a650e6a061befbc26c9a
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.