Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
0 DIPO
Holders
209
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
10 DIPOLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DeeperNFT
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-06-21 */ pragma solidity ^0.8.0; pragma experimental ABIEncoderV2; // /** * @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); } // /** * @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; } // /** * @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); } // /** * @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); } // /** * @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); } } } } // /* * @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; } } // /** * @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); } } // /** * @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; } } // /** * @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 { } } // /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { function hasRole(bytes32 role, address account) external view returns (bool); function getRoleAdmin(bytes32 role) external view returns (bytes32); function grantRole(bytes32 role, address account) external; function revokeRole(bytes32 role, address account) external; function renounceRole(bytes32 role, address account) external; } /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ``` * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ``` * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping (address => bool) members; bytes32 adminRole; } mapping (bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. * * _Available since v3.1._ */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Modifier that checks that an account has a specific role. Reverts * with a standardized message including the required role. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{20}) is missing role (0x[0-9a-f]{32})$/ * * _Available since v4.1._ */ modifier onlyRole(bytes32 role) { _checkRole(role, _msgSender()); _; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view override returns (bool) { return _roles[role].members[account]; } /** * @dev Revert with a standard message if `account` is missing `role`. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{20}) is missing role (0x[0-9a-f]{32})$/ */ function _checkRole(bytes32 role, address account) internal view { if(!hasRole(role, account)) { revert(string(abi.encodePacked( "AccessControl: account ", Strings.toHexString(uint160(account), 20), " is missing role ", Strings.toHexString(uint256(role), 32) ))); } } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view override returns (bytes32) { return _roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. Note that unlike {grantRole}, this function doesn't perform any * checks on the calling account. * * [WARNING] * ==== * This function should only be called from the constructor when setting * up the initial roles for the system. * * Using this function in any other way is effectively circumventing the admin * system imposed by {AccessControl}. * ==== */ function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { emit RoleAdminChanged(role, getRoleAdmin(role), adminRole); _roles[role].adminRole = adminRole; } function _grantRole(bytes32 role, address account) private { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } function _revokeRole(bytes32 role, address account) private { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } } contract DeeperNFT is ERC721, AccessControl{ //events event TransferOwnership(address indexed oldOwner, address indexed newOwner); event PropertyChange(uint256 indexed id); event ChangeNFTInfo(address indexed from, address indexed to, uint256 id); event AddMinter(address indexed miner); event RevokeMinter(address indexed miner); event baseURIChcnage(string uri); //string[5] token_properties = ['universe','earth','person','blockchain','satashi']; struct Properties { uint256 universe; uint256 earth; uint256 person; uint256 blockchain; uint256 satashi; } bytes32 private MINER_ROLE = keccak256(abi.encodePacked("MinterRole")); bytes32 private ADMIN_ROLE = keccak256(abi.encodePacked("AdminRole")); string private baseURI; mapping(uint256=>Properties) public token_properties; mapping(address=>uint256[]) userClaimIds; //mapping(uint256=>string) propertyMap; constructor(string memory name, string memory symbol) ERC721(name, symbol) public{ _setupRole(ADMIN_ROLE, msg.sender); _setRoleAdmin(MINER_ROLE, ADMIN_ROLE); } function setMiner(address minter) external returns(bool){ //Permission check in function grantRole grantRole(MINER_ROLE, minter); emit AddMinter(minter); return true; } function revokeMiner(address minter) external returns(bool){ //Permission check in function revokeRole revokeRole(MINER_ROLE, minter); emit RevokeMinter(minter); return true; } function transferOwnership(address newAdmin) onlyRole(ADMIN_ROLE) external { require(newAdmin != address(0), "Deeper: Transfer Permission to zero address"); renounceRole(ADMIN_ROLE, msg.sender); _setupRole(ADMIN_ROLE, newAdmin); emit TransferOwnership(msg.sender, newAdmin); } function mint(address to, uint256 id) onlyRole(ADMIN_ROLE) external returns(bool){ _mint(to, id); return true; } function claim(address to, uint256 tokenId, uint256 universeId, uint256 earthId, uint256 personId, uint256 blockchainId, uint256 satashiId) public onlyRole(MINER_ROLE) returns (bool) { _mint(to, tokenId); Properties memory p; p.universe = universeId; p.earth = earthId; p.person = personId; p.blockchain = blockchainId; p.satashi = satashiId; token_properties[tokenId] = p; userClaimIds[to].push(tokenId); return true; } function changeProperties( uint256 id, uint256 tokenId, uint256 universeId, uint256 earthId, uint256 personId, uint256 blockchainId, uint256 satashiId) external onlyRole(ADMIN_ROLE) returns(bool){ require(_exists(tokenId), "Deeper: token already minted"); Properties memory p; p.universe = universeId; p.earth = earthId; p.person = personId; p.blockchain = blockchainId; p.satashi = satashiId; token_properties[tokenId] = p; emit PropertyChange(id); return true; } //For emergency case. eg: user lost their private key and want to get their Deeper IPO back function changeNFTInfo(address oldAddress, address newAddress, uint256 id) onlyRole(ADMIN_ROLE) external returns(bool){ require(ownerOf(id) == oldAddress, "Deeper: Try to modify a wrong id"); _burn(id); _mint(newAddress, id); emit ChangeNFTInfo(oldAddress, newAddress, id); return true; } function getUserClaimIds(address user) external view returns(uint256[] memory){ return userClaimIds[user]; } function _baseURI() internal view override returns (string memory) { return baseURI; } function chageBaseURI(string calldata newBaseURI) onlyRole(ADMIN_ROLE) external returns(bool){ baseURI = newBaseURI; emit baseURIChcnage(newBaseURI); return true; } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721, AccessControl) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"miner","type":"address"}],"name":"AddMinter","type":"event"},{"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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ChangeNFTInfo","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"PropertyChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"miner","type":"address"}],"name":"RevokeMinter","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"TransferOwnership","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"uri","type":"string"}],"name":"baseURIChcnage","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseURI","type":"string"}],"name":"chageBaseURI","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"oldAddress","type":"address"},{"internalType":"address","name":"newAddress","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"changeNFTInfo","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"universeId","type":"uint256"},{"internalType":"uint256","name":"earthId","type":"uint256"},{"internalType":"uint256","name":"personId","type":"uint256"},{"internalType":"uint256","name":"blockchainId","type":"uint256"},{"internalType":"uint256","name":"satashiId","type":"uint256"}],"name":"changeProperties","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"universeId","type":"uint256"},{"internalType":"uint256","name":"earthId","type":"uint256"},{"internalType":"uint256","name":"personId","type":"uint256"},{"internalType":"uint256","name":"blockchainId","type":"uint256"},{"internalType":"uint256","name":"satashiId","type":"uint256"}],"name":"claim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserClaimIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"}],"name":"revokeMiner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"}],"name":"setMiner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"token_properties","outputs":[{"internalType":"uint256","name":"universe","type":"uint256"},{"internalType":"uint256","name":"earth","type":"uint256"},{"internalType":"uint256","name":"person","type":"uint256"},{"internalType":"uint256","name":"blockchain","type":"uint256"},{"internalType":"uint256","name":"satashi","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":"newAdmin","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
694d696e746572526f6c6560b01b60a052600a6080527f329f6c9d87b9898860515038c2e06b2011f9cdfd29f4b8fd7a363b6534d0bb376007556841646d696e526f6c6560b81b60ca52600960aa5260d36040527f710fe53b4ead4eb49a281544d00606284187c1a254e4529cfcf0fb4073a5763c6008553480156200008457600080fd5b50604051620027a5380380620027a5833981016040819052620000a79162000367565b815182908290620000c09060009060208501906200020e565b508051620000d69060019060208401906200020e565b5050600854620000e891503362000106565b620000fe6007546008546200011660201b60201c565b505062000421565b6200011282826200016a565b5050565b600082815260066020526040902060010154819060405184907fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff90600090a460009182526006602052604090912060010155565b60008281526006602090815260408083206001600160a01b038516845290915290205460ff16620001125760008281526006602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620001ca3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b8280546200021c90620003ce565b90600052602060002090601f0160209004810192826200024057600085556200028b565b82601f106200025b57805160ff19168380011785556200028b565b828001600101855582156200028b579182015b828111156200028b5782518255916020019190600101906200026e565b50620002999291506200029d565b5090565b5b808211156200029957600081556001016200029e565b600082601f830112620002c5578081fd5b81516001600160401b0380821115620002e257620002e26200040b565b604051601f8301601f19908116603f011681019082821181831017156200030d576200030d6200040b565b8160405283815260209250868385880101111562000329578485fd5b8491505b838210156200034c57858201830151818301840152908201906200032d565b838211156200035d57848385830101525b9695505050505050565b600080604083850312156200037a578182fd5b82516001600160401b038082111562000391578384fd5b6200039f86838701620002b4565b93506020850151915080821115620003b5578283fd5b50620003c485828601620002b4565b9150509250929050565b600181811c90821680620003e357607f821691505b602082108114156200040557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61237480620004316000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806370a0823111610104578063b3f7cbb6116100a2578063d547741f11610071578063d547741f146103f5578063d750429114610408578063e985e9c51461046d578063f2fde38b146104a957600080fd5b8063b3f7cbb6146103a9578063b88d4fde146103bc578063bac9493c146103cf578063c87b56dd146103e257600080fd5b806395d89b41116100de57806395d89b41146103735780639742ca461461037b578063a217fddf1461038e578063a22cb4651461039657600080fd5b806370a082311461033a57806391d148541461034d578063928f1a331461036057600080fd5b80632f2ff15d1161017157806340c10f191161014b57806340c10f19146102ee57806342842e0e146103015780636352211e146103145780636e85aab81461032757600080fd5b80632f2ff15d146102b55780633614db1b146102c857806336568abe146102db57600080fd5b8063095ea7b3116101ad578063095ea7b31461023c5780630bc095e21461025157806323b872dd14610271578063248a9ca31461028457600080fd5b806301ffc9a7146101d457806306fdde03146101fc578063081812fc14610211575b600080fd5b6101e76101e2366004611eae565b6104bc565b60405190151581526020015b60405180910390f35b61020461051d565b6040516101f3919061211e565b61022461021f366004611e74565b6105af565b6040516001600160a01b0390911681526020016101f3565b61024f61024a366004611df9565b610649565b005b61026461025f366004611c63565b61075f565b6040516101f391906120ab565b61024f61027f366004611caf565b6107cb565b6102a7610292366004611e74565b60009081526006602052604090206001015490565b6040519081526020016101f3565b61024f6102c3366004611e8c565b6107fc565b6101e76102d6366004611caf565b610827565b61024f6102e9366004611e8c565b61090b565b6101e76102fc366004611df9565b610989565b61024f61030f366004611caf565b6109ad565b610224610322366004611e74565b6109c8565b6101e7610335366004611f53565b610a3f565b6102a7610348366004611c63565b610b6b565b6101e761035b366004611e8c565b610bf2565b6101e761036e366004611e22565b610c1d565b610204610ce7565b6101e7610389366004611c63565b610cf6565b6102a7600081565b61024f6103a4366004611dbf565b610d40565b6101e76103b7366004611ee6565b610e05565b61024f6103ca366004611cea565b610e65565b6101e76103dd366004611c63565b610e9d565b6102046103f0366004611e74565b610ee7565b61024f610403366004611e8c565b610fc2565b610445610416366004611e74565b600a60205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b604080519586526020860194909452928401919091526060830152608082015260a0016101f3565b6101e761047b366004611c7d565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61024f6104b7366004611c63565b610fe8565b60006001600160e01b031982166380ac58cd60e01b14806104ed57506001600160e01b03198216635b5e139f60e01b145b8061050857506001600160e01b03198216637965db0b60e01b145b806105175750610517826110b1565b92915050565b60606000805461052c90612279565b80601f016020809104026020016040519081016040528092919081815260200182805461055890612279565b80156105a55780601f1061057a576101008083540402835291602001916105a5565b820191906000526020600020905b81548152906001019060200180831161058857829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b031661062d5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610654826109c8565b9050806001600160a01b0316836001600160a01b031614156106c25760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610624565b336001600160a01b03821614806106de57506106de813361047b565b6107505760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610624565b61075a83836110d6565b505050565b6001600160a01b0381166000908152600b60209081526040918290208054835181840281018401909452808452606093928301828280156107bf57602002820191906000526020600020905b8154815260200190600101908083116107ab575b50505050509050919050565b6107d53382611144565b6107f15760405162461bcd60e51b815260040161062490612183565b61075a83838361123b565b60008281526006602052604090206001015461081d81336113db565b6113db565b61075a838361143f565b6000600854610837816108183390565b846001600160a01b031661084a846109c8565b6001600160a01b0316146108a05760405162461bcd60e51b815260206004820181905260248201527f4465657065723a2054727920746f206d6f6469667920612077726f6e672069646044820152606401610624565b6108a9836114c5565b6108b38484611560565b836001600160a01b0316856001600160a01b03167f7d08d127bfd55c51898105b3667780c9198cc120d22f7b3713fc47633cf01421856040516108f891815260200190565b60405180910390a3506001949350505050565b6001600160a01b038116331461097b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610624565b61098582826116a2565b5050565b6000600854610999816108183390565b6109a38484611560565b5060019392505050565b61075a83838360405180602001604052806000815250610e65565b6000818152600260205260408120546001600160a01b0316806105175760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610624565b6000600854610a4f816108183390565b6000888152600260205260409020546001600160a01b0316610ab35760405162461bcd60e51b815260206004820152601c60248201527f4465657065723a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610624565b610ae56040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b87815260208082018881526040808401898152606085018981526080860189815260008f8152600a90965283862087518155945160018601559151600285015551600384015551600490920191909155518b917f3eca0b1271eb15138eec48acdb3c0b7ef2544b73a3b31e728cbf65000d638e1e91a25060019998505050505050505050565b60006001600160a01b038216610bd65760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610624565b506001600160a01b031660009081526003602052604090205490565b60009182526006602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6000600754610c2d816108183390565b610c378989611560565b610c696040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b96875250506020808601948552604080870194855260608701938452608087019283526000888152600a8352818120975188559551600180890191909155945160028801559251600387015590516004909501949094556001600160a01b03959095168252600b835293812080548086018255908252919020015590565b60606001805461052c90612279565b6000610d04600754836107fc565b6040516001600160a01b038316907f16baa937b08d58713325f93ac58b8a9369a4359bbefb4957d6d9b402735722ab90600090a2506001919050565b6001600160a01b038216331415610d995760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610624565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000600854610e15816108183390565b610e2160098585611bae565b507f987743ed8d4e844e774111473f38448b880b540d2b7252f4e79ff861a129d1a18484604051610e539291906120ef565b60405180910390a15060019392505050565b610e6f3383611144565b610e8b5760405162461bcd60e51b815260040161062490612183565b610e9784848484611709565b50505050565b6000610eab60075483610fc2565b6040516001600160a01b038316907fb25deee473f0ba18671a95db5d000875190013846968f76c09db86657cac5e4290600090a2506001919050565b6000818152600260205260409020546060906001600160a01b0316610f665760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610624565b6000610f7061173c565b90506000815111610f905760405180602001604052806000815250610fbb565b80610f9a8461174b565b604051602001610fab929190611fca565b6040516020818303038152906040525b9392505050565b600082815260066020526040902060010154610fde81336113db565b61075a83836116a2565b600854610ff581336113db565b6001600160a01b03821661105f5760405162461bcd60e51b815260206004820152602b60248201527f4465657065723a205472616e73666572205065726d697373696f6e20746f207a60448201526a65726f206164647265737360a81b6064820152608401610624565b61106b6008543361090b565b61107760085483611865565b6040516001600160a01b0383169033907f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c90600090a35050565b60006001600160e01b03198216637965db0b60e01b148061051757506105178261186f565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061110b826109c8565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166111bd5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610624565b60006111c8836109c8565b9050806001600160a01b0316846001600160a01b031614806112035750836001600160a01b03166111f8846105af565b6001600160a01b0316145b8061123357506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661124e826109c8565b6001600160a01b0316146112b65760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610624565b6001600160a01b0382166113185760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610624565b6113236000826110d6565b6001600160a01b038316600090815260036020526040812080546001929061134c90849061221f565b90915550506001600160a01b038216600090815260036020526040812080546001929061137a9084906121d4565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6113e58282610bf2565b610985576113fd816001600160a01b031660146118bf565b6114088360206118bf565b604051602001611419929190611ff9565b60408051601f198184030181529082905262461bcd60e51b82526106249160040161211e565b6114498282610bf2565b6109855760008281526006602090815260408083206001600160a01b03851684529091529020805460ff191660011790556114813390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006114d0826109c8565b90506114dd6000836110d6565b6001600160a01b038116600090815260036020526040812080546001929061150690849061221f565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b0382166115b65760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610624565b6000818152600260205260409020546001600160a01b03161561161b5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610624565b6001600160a01b03821660009081526003602052604081208054600192906116449084906121d4565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6116ac8282610bf2565b156109855760008281526006602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b61171484848461123b565b61172084848484611aa1565b610e975760405162461bcd60e51b815260040161062490612131565b60606009805461052c90612279565b60608161176f5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156117995780611783816122b4565b91506117929050600a836121ec565b9150611773565b60008167ffffffffffffffff8111156117c257634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156117ec576020820181803683370190505b5090505b84156112335761180160018361221f565b915061180e600a866122cf565b6118199060306121d4565b60f81b81838151811061183c57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535061185e600a866121ec565b94506117f0565b610985828261143f565b60006001600160e01b031982166380ac58cd60e01b14806118a057506001600160e01b03198216635b5e139f60e01b145b8061051757506301ffc9a760e01b6001600160e01b0319831614610517565b606060006118ce836002612200565b6118d99060026121d4565b67ffffffffffffffff8111156118ff57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611929576020820181803683370190505b509050600360fc1b8160008151811061195257634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061198f57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060006119b3846002612200565b6119be9060016121d4565b90505b6001811115611a52576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a0057634e487b7160e01b600052603260045260246000fd5b1a60f81b828281518110611a2457634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c93611a4b81612262565b90506119c1565b508315610fbb5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610624565b60006001600160a01b0384163b15611ba357604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611ae590339089908890889060040161206e565b602060405180830381600087803b158015611aff57600080fd5b505af1925050508015611b2f575060408051601f3d908101601f19168201909252611b2c91810190611eca565b60015b611b89573d808015611b5d576040519150601f19603f3d011682016040523d82523d6000602084013e611b62565b606091505b508051611b815760405162461bcd60e51b815260040161062490612131565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611233565b506001949350505050565b828054611bba90612279565b90600052602060002090601f016020900481019282611bdc5760008555611c22565b82601f10611bf55782800160ff19823516178555611c22565b82800160010185558215611c22579182015b82811115611c22578235825591602001919060010190611c07565b50611c2e929150611c32565b5090565b5b80821115611c2e5760008155600101611c33565b80356001600160a01b0381168114611c5e57600080fd5b919050565b600060208284031215611c74578081fd5b610fbb82611c47565b60008060408385031215611c8f578081fd5b611c9883611c47565b9150611ca660208401611c47565b90509250929050565b600080600060608486031215611cc3578081fd5b611ccc84611c47565b9250611cda60208501611c47565b9150604084013590509250925092565b60008060008060808587031215611cff578081fd5b611d0885611c47565b9350611d1660208601611c47565b925060408501359150606085013567ffffffffffffffff80821115611d39578283fd5b818701915087601f830112611d4c578283fd5b813581811115611d5e57611d5e61230f565b604051601f8201601f19908116603f01168101908382118183101715611d8657611d8661230f565b816040528281528a6020848701011115611d9e578586fd5b82602086016020830137918201602001949094529598949750929550505050565b60008060408385031215611dd1578182fd5b611dda83611c47565b915060208301358015158114611dee578182fd5b809150509250929050565b60008060408385031215611e0b578182fd5b611e1483611c47565b946020939093013593505050565b600080600080600080600060e0888a031215611e3c578283fd5b611e4588611c47565b9960208901359950604089013598606081013598506080810135975060a0810135965060c00135945092505050565b600060208284031215611e85578081fd5b5035919050565b60008060408385031215611e9e578182fd5b82359150611ca660208401611c47565b600060208284031215611ebf578081fd5b8135610fbb81612325565b600060208284031215611edb578081fd5b8151610fbb81612325565b60008060208385031215611ef8578182fd5b823567ffffffffffffffff80821115611f0f578384fd5b818501915085601f830112611f22578384fd5b813581811115611f30578485fd5b866020828501011115611f41578485fd5b60209290920196919550909350505050565b600080600080600080600060e0888a031215611f6d578081fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b60008151808452611fb6816020860160208601612236565b601f01601f19169290920160200192915050565b60008351611fdc818460208801612236565b835190830190611ff0818360208801612236565b01949350505050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612031816017850160208801612236565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612062816028840160208801612236565b01602801949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906120a190830184611f9e565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156120e3578351835292840192918401916001016120c7565b50909695505050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b602081526000610fbb6020830184611f9e565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156121e7576121e76122e3565b500190565b6000826121fb576121fb6122f9565b500490565b600081600019048311821515161561221a5761221a6122e3565b500290565b600082821015612231576122316122e3565b500390565b60005b83811015612251578181015183820152602001612239565b83811115610e975750506000910152565b600081612271576122716122e3565b506000190190565b600181811c9082168061228d57607f821691505b602082108114156122ae57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156122c8576122c86122e3565b5060010190565b6000826122de576122de6122f9565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461233b57600080fd5b5056fea26469706673582212201f2b68416931a8c90f504d1921c72448d47fc5fbadaab4cdc7964d75421ee07a64736f6c6343000804003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000e4465657065722049504f204e465400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044449504f00000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c806370a0823111610104578063b3f7cbb6116100a2578063d547741f11610071578063d547741f146103f5578063d750429114610408578063e985e9c51461046d578063f2fde38b146104a957600080fd5b8063b3f7cbb6146103a9578063b88d4fde146103bc578063bac9493c146103cf578063c87b56dd146103e257600080fd5b806395d89b41116100de57806395d89b41146103735780639742ca461461037b578063a217fddf1461038e578063a22cb4651461039657600080fd5b806370a082311461033a57806391d148541461034d578063928f1a331461036057600080fd5b80632f2ff15d1161017157806340c10f191161014b57806340c10f19146102ee57806342842e0e146103015780636352211e146103145780636e85aab81461032757600080fd5b80632f2ff15d146102b55780633614db1b146102c857806336568abe146102db57600080fd5b8063095ea7b3116101ad578063095ea7b31461023c5780630bc095e21461025157806323b872dd14610271578063248a9ca31461028457600080fd5b806301ffc9a7146101d457806306fdde03146101fc578063081812fc14610211575b600080fd5b6101e76101e2366004611eae565b6104bc565b60405190151581526020015b60405180910390f35b61020461051d565b6040516101f3919061211e565b61022461021f366004611e74565b6105af565b6040516001600160a01b0390911681526020016101f3565b61024f61024a366004611df9565b610649565b005b61026461025f366004611c63565b61075f565b6040516101f391906120ab565b61024f61027f366004611caf565b6107cb565b6102a7610292366004611e74565b60009081526006602052604090206001015490565b6040519081526020016101f3565b61024f6102c3366004611e8c565b6107fc565b6101e76102d6366004611caf565b610827565b61024f6102e9366004611e8c565b61090b565b6101e76102fc366004611df9565b610989565b61024f61030f366004611caf565b6109ad565b610224610322366004611e74565b6109c8565b6101e7610335366004611f53565b610a3f565b6102a7610348366004611c63565b610b6b565b6101e761035b366004611e8c565b610bf2565b6101e761036e366004611e22565b610c1d565b610204610ce7565b6101e7610389366004611c63565b610cf6565b6102a7600081565b61024f6103a4366004611dbf565b610d40565b6101e76103b7366004611ee6565b610e05565b61024f6103ca366004611cea565b610e65565b6101e76103dd366004611c63565b610e9d565b6102046103f0366004611e74565b610ee7565b61024f610403366004611e8c565b610fc2565b610445610416366004611e74565b600a60205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b604080519586526020860194909452928401919091526060830152608082015260a0016101f3565b6101e761047b366004611c7d565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61024f6104b7366004611c63565b610fe8565b60006001600160e01b031982166380ac58cd60e01b14806104ed57506001600160e01b03198216635b5e139f60e01b145b8061050857506001600160e01b03198216637965db0b60e01b145b806105175750610517826110b1565b92915050565b60606000805461052c90612279565b80601f016020809104026020016040519081016040528092919081815260200182805461055890612279565b80156105a55780601f1061057a576101008083540402835291602001916105a5565b820191906000526020600020905b81548152906001019060200180831161058857829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b031661062d5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610654826109c8565b9050806001600160a01b0316836001600160a01b031614156106c25760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610624565b336001600160a01b03821614806106de57506106de813361047b565b6107505760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610624565b61075a83836110d6565b505050565b6001600160a01b0381166000908152600b60209081526040918290208054835181840281018401909452808452606093928301828280156107bf57602002820191906000526020600020905b8154815260200190600101908083116107ab575b50505050509050919050565b6107d53382611144565b6107f15760405162461bcd60e51b815260040161062490612183565b61075a83838361123b565b60008281526006602052604090206001015461081d81336113db565b6113db565b61075a838361143f565b6000600854610837816108183390565b846001600160a01b031661084a846109c8565b6001600160a01b0316146108a05760405162461bcd60e51b815260206004820181905260248201527f4465657065723a2054727920746f206d6f6469667920612077726f6e672069646044820152606401610624565b6108a9836114c5565b6108b38484611560565b836001600160a01b0316856001600160a01b03167f7d08d127bfd55c51898105b3667780c9198cc120d22f7b3713fc47633cf01421856040516108f891815260200190565b60405180910390a3506001949350505050565b6001600160a01b038116331461097b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610624565b61098582826116a2565b5050565b6000600854610999816108183390565b6109a38484611560565b5060019392505050565b61075a83838360405180602001604052806000815250610e65565b6000818152600260205260408120546001600160a01b0316806105175760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610624565b6000600854610a4f816108183390565b6000888152600260205260409020546001600160a01b0316610ab35760405162461bcd60e51b815260206004820152601c60248201527f4465657065723a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610624565b610ae56040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b87815260208082018881526040808401898152606085018981526080860189815260008f8152600a90965283862087518155945160018601559151600285015551600384015551600490920191909155518b917f3eca0b1271eb15138eec48acdb3c0b7ef2544b73a3b31e728cbf65000d638e1e91a25060019998505050505050505050565b60006001600160a01b038216610bd65760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610624565b506001600160a01b031660009081526003602052604090205490565b60009182526006602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6000600754610c2d816108183390565b610c378989611560565b610c696040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b96875250506020808601948552604080870194855260608701938452608087019283526000888152600a8352818120975188559551600180890191909155945160028801559251600387015590516004909501949094556001600160a01b03959095168252600b835293812080548086018255908252919020015590565b60606001805461052c90612279565b6000610d04600754836107fc565b6040516001600160a01b038316907f16baa937b08d58713325f93ac58b8a9369a4359bbefb4957d6d9b402735722ab90600090a2506001919050565b6001600160a01b038216331415610d995760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610624565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000600854610e15816108183390565b610e2160098585611bae565b507f987743ed8d4e844e774111473f38448b880b540d2b7252f4e79ff861a129d1a18484604051610e539291906120ef565b60405180910390a15060019392505050565b610e6f3383611144565b610e8b5760405162461bcd60e51b815260040161062490612183565b610e9784848484611709565b50505050565b6000610eab60075483610fc2565b6040516001600160a01b038316907fb25deee473f0ba18671a95db5d000875190013846968f76c09db86657cac5e4290600090a2506001919050565b6000818152600260205260409020546060906001600160a01b0316610f665760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610624565b6000610f7061173c565b90506000815111610f905760405180602001604052806000815250610fbb565b80610f9a8461174b565b604051602001610fab929190611fca565b6040516020818303038152906040525b9392505050565b600082815260066020526040902060010154610fde81336113db565b61075a83836116a2565b600854610ff581336113db565b6001600160a01b03821661105f5760405162461bcd60e51b815260206004820152602b60248201527f4465657065723a205472616e73666572205065726d697373696f6e20746f207a60448201526a65726f206164647265737360a81b6064820152608401610624565b61106b6008543361090b565b61107760085483611865565b6040516001600160a01b0383169033907f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c90600090a35050565b60006001600160e01b03198216637965db0b60e01b148061051757506105178261186f565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061110b826109c8565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166111bd5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610624565b60006111c8836109c8565b9050806001600160a01b0316846001600160a01b031614806112035750836001600160a01b03166111f8846105af565b6001600160a01b0316145b8061123357506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661124e826109c8565b6001600160a01b0316146112b65760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610624565b6001600160a01b0382166113185760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610624565b6113236000826110d6565b6001600160a01b038316600090815260036020526040812080546001929061134c90849061221f565b90915550506001600160a01b038216600090815260036020526040812080546001929061137a9084906121d4565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6113e58282610bf2565b610985576113fd816001600160a01b031660146118bf565b6114088360206118bf565b604051602001611419929190611ff9565b60408051601f198184030181529082905262461bcd60e51b82526106249160040161211e565b6114498282610bf2565b6109855760008281526006602090815260408083206001600160a01b03851684529091529020805460ff191660011790556114813390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006114d0826109c8565b90506114dd6000836110d6565b6001600160a01b038116600090815260036020526040812080546001929061150690849061221f565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b0382166115b65760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610624565b6000818152600260205260409020546001600160a01b03161561161b5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610624565b6001600160a01b03821660009081526003602052604081208054600192906116449084906121d4565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6116ac8282610bf2565b156109855760008281526006602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b61171484848461123b565b61172084848484611aa1565b610e975760405162461bcd60e51b815260040161062490612131565b60606009805461052c90612279565b60608161176f5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156117995780611783816122b4565b91506117929050600a836121ec565b9150611773565b60008167ffffffffffffffff8111156117c257634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156117ec576020820181803683370190505b5090505b84156112335761180160018361221f565b915061180e600a866122cf565b6118199060306121d4565b60f81b81838151811061183c57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535061185e600a866121ec565b94506117f0565b610985828261143f565b60006001600160e01b031982166380ac58cd60e01b14806118a057506001600160e01b03198216635b5e139f60e01b145b8061051757506301ffc9a760e01b6001600160e01b0319831614610517565b606060006118ce836002612200565b6118d99060026121d4565b67ffffffffffffffff8111156118ff57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611929576020820181803683370190505b509050600360fc1b8160008151811061195257634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061198f57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060006119b3846002612200565b6119be9060016121d4565b90505b6001811115611a52576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a0057634e487b7160e01b600052603260045260246000fd5b1a60f81b828281518110611a2457634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c93611a4b81612262565b90506119c1565b508315610fbb5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610624565b60006001600160a01b0384163b15611ba357604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611ae590339089908890889060040161206e565b602060405180830381600087803b158015611aff57600080fd5b505af1925050508015611b2f575060408051601f3d908101601f19168201909252611b2c91810190611eca565b60015b611b89573d808015611b5d576040519150601f19603f3d011682016040523d82523d6000602084013e611b62565b606091505b508051611b815760405162461bcd60e51b815260040161062490612131565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611233565b506001949350505050565b828054611bba90612279565b90600052602060002090601f016020900481019282611bdc5760008555611c22565b82601f10611bf55782800160ff19823516178555611c22565b82800160010185558215611c22579182015b82811115611c22578235825591602001919060010190611c07565b50611c2e929150611c32565b5090565b5b80821115611c2e5760008155600101611c33565b80356001600160a01b0381168114611c5e57600080fd5b919050565b600060208284031215611c74578081fd5b610fbb82611c47565b60008060408385031215611c8f578081fd5b611c9883611c47565b9150611ca660208401611c47565b90509250929050565b600080600060608486031215611cc3578081fd5b611ccc84611c47565b9250611cda60208501611c47565b9150604084013590509250925092565b60008060008060808587031215611cff578081fd5b611d0885611c47565b9350611d1660208601611c47565b925060408501359150606085013567ffffffffffffffff80821115611d39578283fd5b818701915087601f830112611d4c578283fd5b813581811115611d5e57611d5e61230f565b604051601f8201601f19908116603f01168101908382118183101715611d8657611d8661230f565b816040528281528a6020848701011115611d9e578586fd5b82602086016020830137918201602001949094529598949750929550505050565b60008060408385031215611dd1578182fd5b611dda83611c47565b915060208301358015158114611dee578182fd5b809150509250929050565b60008060408385031215611e0b578182fd5b611e1483611c47565b946020939093013593505050565b600080600080600080600060e0888a031215611e3c578283fd5b611e4588611c47565b9960208901359950604089013598606081013598506080810135975060a0810135965060c00135945092505050565b600060208284031215611e85578081fd5b5035919050565b60008060408385031215611e9e578182fd5b82359150611ca660208401611c47565b600060208284031215611ebf578081fd5b8135610fbb81612325565b600060208284031215611edb578081fd5b8151610fbb81612325565b60008060208385031215611ef8578182fd5b823567ffffffffffffffff80821115611f0f578384fd5b818501915085601f830112611f22578384fd5b813581811115611f30578485fd5b866020828501011115611f41578485fd5b60209290920196919550909350505050565b600080600080600080600060e0888a031215611f6d578081fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b60008151808452611fb6816020860160208601612236565b601f01601f19169290920160200192915050565b60008351611fdc818460208801612236565b835190830190611ff0818360208801612236565b01949350505050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612031816017850160208801612236565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612062816028840160208801612236565b01602801949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906120a190830184611f9e565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156120e3578351835292840192918401916001016120c7565b50909695505050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b602081526000610fbb6020830184611f9e565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156121e7576121e76122e3565b500190565b6000826121fb576121fb6122f9565b500490565b600081600019048311821515161561221a5761221a6122e3565b500290565b600082821015612231576122316122e3565b500390565b60005b83811015612251578181015183820152602001612239565b83811115610e975750506000910152565b600081612271576122716122e3565b506000190190565b600181811c9082168061228d57607f821691505b602082108114156122ae57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156122c8576122c86122e3565b5060010190565b6000826122de576122de6122f9565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461233b57600080fd5b5056fea26469706673582212201f2b68416931a8c90f504d1921c72448d47fc5fbadaab4cdc7964d75421ee07a64736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000e4465657065722049504f204e465400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044449504f00000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): Deeper IPO NFT
Arg [1] : symbol (string): DIPO
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [3] : 4465657065722049504f204e4654000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [5] : 4449504f00000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
40096:4564:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44289:362;;;;;;:::i;:::-;;:::i;:::-;;;8924:14:1;;8917:22;8899:41;;8887:2;8872:18;44289:362:0;;;;;;;;20741:100;;;:::i;:::-;;;;;;;:::i;22201:221::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7582:32:1;;;7564:51;;7552:2;7537:18;22201:221:0;7519:102:1;21738:397:0;;;;;;:::i;:::-;;:::i;:::-;;43847:122;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;23091:305::-;;;;;;:::i;:::-;;:::i;36941:123::-;;;;;;:::i;:::-;37007:7;37034:12;;;:6;:12;;;;;:22;;;;36941:123;;;;9097:25:1;;;9085:2;9070:18;36941:123:0;9052:76:1;37326:147:0;;;;;;:::i;:::-;;:::i;43499:338::-;;;;;;:::i;:::-;;:::i;38374:218::-;;;;;;:::i;:::-;;:::i;42051:137::-;;;;;;:::i;:::-;;:::i;23467:151::-;;;;;;:::i;:::-;;:::i;20435:239::-;;;;;;:::i;:::-;;:::i;42770:624::-;;;;;;:::i;:::-;;:::i;20165:208::-;;;;;;:::i;:::-;;:::i;35939:139::-;;;;;;:::i;:::-;;:::i;42197:565::-;;;;;;:::i;:::-;;:::i;20910:104::-;;;:::i;41280:209::-;;;;;;:::i;:::-;;:::i;33904:49::-;;33949:4;33904:49;;22494:295;;;;;;:::i;:::-;;:::i;44085:196::-;;;;;;:::i;:::-;;:::i;23689:285::-;;;;;;:::i;:::-;;:::i;41497:217::-;;;;;;:::i;:::-;;:::i;21085:360::-;;;;;;:::i;:::-;;:::i;37718:149::-;;;;;;:::i;:::-;;:::i;40942:52::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17717:25:1;;;17773:2;17758:18;;17751:34;;;;17801:18;;;17794:34;;;;17859:2;17844:18;;17837:34;17902:3;17887:19;;17880:35;17704:3;17689:19;40942:52:0;17671:250:1;22860:164:0;;;;;;:::i;:::-;-1:-1:-1;;;;;22981:25:0;;;22957:4;22981:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;22860:164;41722:321;;;;;;:::i;:::-;;:::i;44289:362::-;44397:4;-1:-1:-1;;;;;;44421:40:0;;-1:-1:-1;;;44421:40:0;;:105;;-1:-1:-1;;;;;;;44478:48:0;;-1:-1:-1;;;44478:48:0;44421:105;:169;;;-1:-1:-1;;;;;;;44543:47:0;;-1:-1:-1;;;44543:47:0;44421:169;:222;;;;44607:36;44631:11;44607:23;:36::i;:::-;44414:229;44289:362;-1:-1:-1;;44289:362:0:o;20741:100::-;20795:13;20828:5;20821:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20741:100;:::o;22201:221::-;22277:7;25530:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25530:16:0;22297:73;;;;-1:-1:-1;;;22297:73:0;;14646:2:1;22297:73:0;;;14628:21:1;14685:2;14665:18;;;14658:30;14724:34;14704:18;;;14697:62;-1:-1:-1;;;14775:18:1;;;14768:42;14827:19;;22297:73:0;;;;;;;;;-1:-1:-1;22390:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;22390:24:0;;22201:221::o;21738:397::-;21819:13;21835:23;21850:7;21835:14;:23::i;:::-;21819:39;;21883:5;-1:-1:-1;;;;;21877:11:0;:2;-1:-1:-1;;;;;21877:11:0;;;21869:57;;;;-1:-1:-1;;;21869:57:0;;15885:2:1;21869:57:0;;;15867:21:1;15924:2;15904:18;;;15897:30;15963:34;15943:18;;;15936:62;-1:-1:-1;;;16014:18:1;;;16007:31;16055:19;;21869:57:0;15857:223:1;21869:57:0;15452:10;-1:-1:-1;;;;;21947:21:0;;;;:62;;-1:-1:-1;21972:37:0;21989:5;15452:10;22860:164;:::i;21972:37::-;21939:154;;;;-1:-1:-1;;;21939:154:0;;12266:2:1;21939:154:0;;;12248:21:1;12305:2;12285:18;;;12278:30;12344:34;12324:18;;;12317:62;12415:26;12395:18;;;12388:54;12459:19;;21939:154:0;12238:246:1;21939:154:0;22106:21;22115:2;22119:7;22106:8;:21::i;:::-;21738:397;;;:::o;43847:122::-;-1:-1:-1;;;;;43943:18:0;;;;;;:12;:18;;;;;;;;;43936:25;;;;;;;;;;;;;;;;;43908:16;;43936:25;;;43943:18;43936:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43847:122;;;:::o;23091:305::-;23252:41;15452:10;23285:7;23252:18;:41::i;:::-;23244:103;;;;-1:-1:-1;;;23244:103:0;;;;;;;:::i;:::-;23360:28;23370:4;23376:2;23380:7;23360:9;:28::i;37326:147::-;37007:7;37034:12;;;:6;:12;;;;;:22;;;35508:30;35519:4;15452:10;35508;:30::i;35525:12::-;35508:10;:30::i;:::-;37440:25:::1;37451:4;37457:7;37440:10;:25::i;43499:338::-:0;43612:4;43583:10;;35508:30;35519:4;35525:12;15452:10;;15372:98;35508:30;43651:10:::1;-1:-1:-1::0;;;;;43636:25:0::1;:11;43644:2;43636:7;:11::i;:::-;-1:-1:-1::0;;;;;43636:25:0::1;;43628:70;;;::::0;-1:-1:-1;;;43628:70:0;;13512:2:1;43628:70:0::1;::::0;::::1;13494:21:1::0;;;13531:18;;;13524:30;13590:34;13570:18;;;13563:62;13642:18;;43628:70:0::1;13484:182:1::0;43628:70:0::1;43709:9;43715:2;43709:5;:9::i;:::-;43729:21;43735:10;43747:2;43729:5;:21::i;:::-;43792:10;-1:-1:-1::0;;;;;43766:41:0::1;43780:10;-1:-1:-1::0;;;;;43766:41:0::1;;43804:2;43766:41;;;;9097:25:1::0;;9085:2;9070:18;;9052:76;43766:41:0::1;;;;;;;;-1:-1:-1::0;43825:4:0::1;::::0;43499:338;-1:-1:-1;;;;43499:338:0:o;38374:218::-;-1:-1:-1;;;;;38470:23:0;;15452:10;38470:23;38462:83;;;;-1:-1:-1;;;38462:83:0;;17062:2:1;38462:83:0;;;17044:21:1;17101:2;17081:18;;;17074:30;17140:34;17120:18;;;17113:62;-1:-1:-1;;;17191:18:1;;;17184:45;17246:19;;38462:83:0;17034:237:1;38462:83:0;38558:26;38570:4;38576:7;38558:11;:26::i;:::-;38374:218;;:::o;42051:137::-;42127:4;42098:10;;35508:30;35519:4;35525:12;15452:10;;15372:98;35508:30;42143:13:::1;42149:2;42153;42143:5;:13::i;:::-;-1:-1:-1::0;42176:4:0::1;::::0;42051:137;-1:-1:-1;;;42051:137:0:o;23467:151::-;23571:39;23588:4;23594:2;23598:7;23571:39;;;;;;;;;;;;:16;:39::i;20435:239::-;20507:7;20543:16;;;:7;:16;;;;;;-1:-1:-1;;;;;20543:16:0;20578:19;20570:73;;;;-1:-1:-1;;;20570:73:0;;13102:2:1;20570:73:0;;;13084:21:1;13141:2;13121:18;;;13114:30;13180:34;13160:18;;;13153:62;-1:-1:-1;;;13231:18:1;;;13224:39;13280:19;;20570:73:0;13074:231:1;42770:624:0;43025:4;43005:10;;35508:30;35519:4;35525:12;15452:10;;15372:98;35508:30;25506:4;25530:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25530:16:0;43041:57:::1;;;::::0;-1:-1:-1;;;43041:57:0;;16287:2:1;43041:57:0::1;::::0;::::1;16269:21:1::0;16326:2;16306:18;;;16299:30;16365;16345:18;;;16338:58;16413:18;;43041:57:0::1;16259:178:1::0;43041:57:0::1;43109:19;-1:-1:-1::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43109:19:0::1;43139:23:::0;;;43173:7:::1;::::0;;::::1;:17:::0;;;43201:8:::1;::::0;;::::1;:19:::0;;;43231:12:::1;::::0;::::1;:27:::0;;;43269:9:::1;::::0;::::1;:21:::0;;;43139:10:::1;43301:25:::0;;;:16:::1;:25:::0;;;;;;:29;;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;43346:18;43361:2;;43346:18:::1;::::0;::::1;-1:-1:-1::0;43382:4:0::1;::::0;42770:624;-1:-1:-1;;;;;;;;;42770:624:0:o;20165:208::-;20237:7;-1:-1:-1;;;;;20265:19:0;;20257:74;;;;-1:-1:-1;;;20257:74:0;;12691:2:1;20257:74:0;;;12673:21:1;12730:2;12710:18;;;12703:30;12769:34;12749:18;;;12742:62;-1:-1:-1;;;12820:18:1;;;12813:40;12870:19;;20257:74:0;12663:232:1;20257:74:0;-1:-1:-1;;;;;;20349:16:0;;;;;:9;:16;;;;;;;20165:208::o;35939:139::-;36017:4;36041:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;36041:29:0;;;;;;;;;;;;;;;35939:139::o;42197:565::-;42430:4;42409:10;;35508:30;35519:4;35525:12;15452:10;;15372:98;35508:30;42447:18:::1;42453:2;42457:7;42447:5;:18::i;:::-;42470:19;-1:-1:-1::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42470:19:0::1;42500:23:::0;;;-1:-1:-1;;42534:7:0::1;::::0;;::::1;:17:::0;;;42562:8:::1;::::0;;::::1;:19:::0;;;42592:12:::1;::::0;::::1;:27:::0;;;42630:9:::1;::::0;::::1;:21:::0;;;-1:-1:-1;42662:25:0;;;:16:::1;:25:::0;;;;;:29;;;;;;::::1;::::0;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;;-1:-1:-1;;;;;42702:16:0;;;::::1;::::0;;:12:::1;:16:::0;;;;;:30;;;;::::1;::::0;;;;;;;;::::1;::::0;42662:29;42197:565::o;20910:104::-;20966:13;20999:7;20992:14;;;;;:::i;41280:209::-;41331:4;41397:29;41407:10;;41419:6;41397:9;:29::i;:::-;41442:17;;-1:-1:-1;;;;;41442:17:0;;;;;;;;-1:-1:-1;41477:4:0;;41280:209;-1:-1:-1;41280:209:0:o;22494:295::-;-1:-1:-1;;;;;22597:24:0;;15452:10;22597:24;;22589:62;;;;-1:-1:-1;;;22589:62:0;;11499:2:1;22589:62:0;;;11481:21:1;11538:2;11518:18;;;11511:30;11577:27;11557:18;;;11550:55;11622:18;;22589:62:0;11471:175:1;22589:62:0;15452:10;22664:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;22664:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;22664:53:0;;;;;;;;;;22733:48;;8899:41:1;;;22664:42:0;;15452:10;22733:48;;8872:18:1;22733:48:0;;;;;;;22494:295;;:::o;44085:196::-;44173:4;44144:10;;35508:30;35519:4;35525:12;15452:10;;15372:98;35508:30;44189:20:::1;:7;44199:10:::0;;44189:20:::1;:::i;:::-;;44225:26;44240:10;;44225:26;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;44269:4:0::1;::::0;44085:196;-1:-1:-1;;;44085:196:0:o;23689:285::-;23821:41;15452:10;23854:7;23821:18;:41::i;:::-;23813:103;;;;-1:-1:-1;;;23813:103:0;;;;;;;:::i;:::-;23927:39;23941:4;23947:2;23951:7;23960:5;23927:13;:39::i;:::-;23689:285;;;;:::o;41497:217::-;41551:4;41618:30;41629:10;;41641:6;41618:10;:30::i;:::-;41664:20;;-1:-1:-1;;;;;41664:20:0;;;;;;;;-1:-1:-1;41702:4:0;;41497:217;-1:-1:-1;41497:217:0:o;21085:360::-;25506:4;25530:16;;;:7;:16;;;;;;21158:13;;-1:-1:-1;;;;;25530:16:0;21184:76;;;;-1:-1:-1;;;21184:76:0;;15469:2:1;21184:76:0;;;15451:21:1;15508:2;15488:18;;;15481:30;15547:34;15527:18;;;15520:62;-1:-1:-1;;;15598:18:1;;;15591:45;15653:19;;21184:76:0;15441:237:1;21184:76:0;21273:21;21297:10;:8;:10::i;:::-;21273:34;;21349:1;21331:7;21325:21;:25;:112;;;;;;;;;;;;;;;;;21390:7;21399:18;:7;:16;:18::i;:::-;21373:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21325:112;21318:119;21085:360;-1:-1:-1;;;21085:360:0:o;37718:149::-;37007:7;37034:12;;;:6;:12;;;;;:22;;;35508:30;35519:4;15452:10;35508;:30::i;:::-;37833:26:::1;37845:4;37851:7;37833:11;:26::i;41722:321::-:0;41776:10;;35508:30;41776:10;15452;35508;:30::i;:::-;-1:-1:-1;;;;;41816:22:0;::::1;41808:78;;;::::0;-1:-1:-1;;;41808:78:0;;13873:2:1;41808:78:0::1;::::0;::::1;13855:21:1::0;13912:2;13892:18;;;13885:30;13951:34;13931:18;;;13924:62;-1:-1:-1;;;14002:18:1;;;13995:41;14053:19;;41808:78:0::1;13845:233:1::0;41808:78:0::1;41897:36;41910:10;;41922;41897:12;:36::i;:::-;41944:32;41955:10;;41967:8;41944:10;:32::i;:::-;41994:39;::::0;-1:-1:-1;;;;;41994:39:0;::::1;::::0;42012:10:::1;::::0;41994:39:::1;::::0;;;::::1;41722:321:::0;;:::o;35630:217::-;35715:4;-1:-1:-1;;;;;;35739:47:0;;-1:-1:-1;;;35739:47:0;;:100;;;35803:36;35827:11;35803:23;:36::i;29318:174::-;29393:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;29393:29:0;-1:-1:-1;;;;;29393:29:0;;;;;;;;:24;;29447:23;29393:24;29447:14;:23::i;:::-;-1:-1:-1;;;;;29438:46:0;;;;;;;;;;;29318:174;;:::o;25735:348::-;25828:4;25530:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25530:16:0;25845:73;;;;-1:-1:-1;;;25845:73:0;;11853:2:1;25845:73:0;;;11835:21:1;11892:2;11872:18;;;11865:30;11931:34;11911:18;;;11904:62;-1:-1:-1;;;11982:18:1;;;11975:42;12034:19;;25845:73:0;11825:234:1;25845:73:0;25929:13;25945:23;25960:7;25945:14;:23::i;:::-;25929:39;;25998:5;-1:-1:-1;;;;;25987:16:0;:7;-1:-1:-1;;;;;25987:16:0;;:51;;;;26031:7;-1:-1:-1;;;;;26007:31:0;:20;26019:7;26007:11;:20::i;:::-;-1:-1:-1;;;;;26007:31:0;;25987:51;:87;;;-1:-1:-1;;;;;;22981:25:0;;;22957:4;22981:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;26042:32;25979:96;25735:348;-1:-1:-1;;;;25735:348:0:o;28656:544::-;28781:4;-1:-1:-1;;;;;28754:31:0;:23;28769:7;28754:14;:23::i;:::-;-1:-1:-1;;;;;28754:31:0;;28746:85;;;;-1:-1:-1;;;28746:85:0;;15059:2:1;28746:85:0;;;15041:21:1;15098:2;15078:18;;;15071:30;15137:34;15117:18;;;15110:62;-1:-1:-1;;;15188:18:1;;;15181:39;15237:19;;28746:85:0;15031:231:1;28746:85:0;-1:-1:-1;;;;;28850:16:0;;28842:65;;;;-1:-1:-1;;;28842:65:0;;11094:2:1;28842:65:0;;;11076:21:1;11133:2;11113:18;;;11106:30;11172:34;11152:18;;;11145:62;-1:-1:-1;;;11223:18:1;;;11216:34;11267:19;;28842:65:0;11066:226:1;28842:65:0;29024:29;29041:1;29045:7;29024:8;:29::i;:::-;-1:-1:-1;;;;;29066:15:0;;;;;;:9;:15;;;;;:20;;29085:1;;29066:15;:20;;29085:1;;29066:20;:::i;:::-;;;;-1:-1:-1;;;;;;;29097:13:0;;;;;;:9;:13;;;;;:18;;29114:1;;29097:13;:18;;29114:1;;29097:18;:::i;:::-;;;;-1:-1:-1;;29126:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;29126:21:0;-1:-1:-1;;;;;29126:21:0;;;;;;;;;29165:27;;29126:16;;29165:27;;;;;;;28656:544;;;:::o;36368:384::-;36448:22;36456:4;36462:7;36448;:22::i;:::-;36444:301;;36580:41;36608:7;-1:-1:-1;;;;;36580:41:0;36618:2;36580:19;:41::i;:::-;36678:38;36706:4;36713:2;36678:19;:38::i;:::-;36501:230;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;36501:230:0;;;;;;;;;;-1:-1:-1;;;36487:246:0;;;;;;;:::i;39622:229::-;39697:22;39705:4;39711:7;39697;:22::i;:::-;39692:152;;39736:12;;;;:6;:12;;;;;;;;-1:-1:-1;;;;;39736:29:0;;;;;;;;;:36;;-1:-1:-1;;39736:36:0;39768:4;39736:36;;;39819:12;15452:10;;15372:98;39819:12;-1:-1:-1;;;;;39792:40:0;39810:7;-1:-1:-1;;;;;39792:40:0;39804:4;39792:40;;;;;;;;;;39622:229;;:::o;27959:360::-;28019:13;28035:23;28050:7;28035:14;:23::i;:::-;28019:39;;28160:29;28177:1;28181:7;28160:8;:29::i;:::-;-1:-1:-1;;;;;28202:16:0;;;;;;:9;:16;;;;;:21;;28222:1;;28202:16;:21;;28222:1;;28202:21;:::i;:::-;;;;-1:-1:-1;;28241:16:0;;;;:7;:16;;;;;;28234:23;;-1:-1:-1;;;;;;28234:23:0;;;28275:36;28249:7;;28241:16;-1:-1:-1;;;;;28275:36:0;;;;;28241:16;;28275:36;27959:360;;:::o;27348:382::-;-1:-1:-1;;;;;27428:16:0;;27420:61;;;;-1:-1:-1;;;27420:61:0;;14285:2:1;27420:61:0;;;14267:21:1;;;14304:18;;;14297:30;14363:34;14343:18;;;14336:62;14415:18;;27420:61:0;14257:182:1;27420:61:0;25506:4;25530:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25530:16:0;:30;27492:58;;;;-1:-1:-1;;;27492:58:0;;10737:2:1;27492:58:0;;;10719:21:1;10776:2;10756:18;;;10749:30;10815;10795:18;;;10788:58;10863:18;;27492:58:0;10709:178:1;27492:58:0;-1:-1:-1;;;;;27621:13:0;;;;;;:9;:13;;;;;:18;;27638:1;;27621:13;:18;;27638:1;;27621:18;:::i;:::-;;;;-1:-1:-1;;27650:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;27650:21:0;-1:-1:-1;;;;;27650:21:0;;;;;;;;27689:33;;27650:16;;;27689:33;;27650:16;;27689:33;27348:382;;:::o;39859:230::-;39934:22;39942:4;39948:7;39934;:22::i;:::-;39930:152;;;40005:5;39973:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;39973:29:0;;;;;;;;;;:37;;-1:-1:-1;;39973:37:0;;;40030:40;15452:10;;39973:12;;40030:40;;40005:5;40030:40;39859:230;;:::o;24856:272::-;24970:28;24980:4;24986:2;24990:7;24970:9;:28::i;:::-;25017:48;25040:4;25046:2;25050:7;25059:5;25017:22;:48::i;:::-;25009:111;;;;-1:-1:-1;;;25009:111:0;;;;;;;:::i;43977:100::-;44029:13;44062:7;44055:14;;;;;:::i;15947:723::-;16003:13;16224:10;16220:53;;-1:-1:-1;;16251:10:0;;;;;;;;;;;;-1:-1:-1;;;16251:10:0;;;;;15947:723::o;16220:53::-;16298:5;16283:12;16339:78;16346:9;;16339:78;;16372:8;;;;:::i;:::-;;-1:-1:-1;16395:10:0;;-1:-1:-1;16403:2:0;16395:10;;:::i;:::-;;;16339:78;;;16427:19;16459:6;16449:17;;;;;;-1:-1:-1;;;16449:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16449:17:0;;16427:39;;16477:154;16484:10;;16477:154;;16511:11;16521:1;16511:11;;:::i;:::-;;-1:-1:-1;16580:10:0;16588:2;16580:5;:10;:::i;:::-;16567:24;;:2;:24;:::i;:::-;16554:39;;16537:6;16544;16537:14;;;;;;-1:-1:-1;;;16537:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;16537:56:0;;;;;;;;-1:-1:-1;16608:11:0;16617:2;16608:11;;:::i;:::-;;;16477:154;;39175:112;39254:25;39265:4;39271:7;39254:10;:25::i;19809:292::-;19911:4;-1:-1:-1;;;;;;19935:40:0;;-1:-1:-1;;;19935:40:0;;:105;;-1:-1:-1;;;;;;;19992:48:0;;-1:-1:-1;;;19992:48:0;19935:105;:158;;;-1:-1:-1;;;;;;;;;;18516:40:0;;;20057:36;18407:157;17248:447;17323:13;17349:19;17381:10;17385:6;17381:1;:10;:::i;:::-;:14;;17394:1;17381:14;:::i;:::-;17371:25;;;;;;-1:-1:-1;;;17371:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17371:25:0;;17349:47;;-1:-1:-1;;;17407:6:0;17414:1;17407:9;;;;;;-1:-1:-1;;;17407:9:0;;;;;;;;;;;;:15;-1:-1:-1;;;;;17407:15:0;;;;;;;;;-1:-1:-1;;;17433:6:0;17440:1;17433:9;;;;;;-1:-1:-1;;;17433:9:0;;;;;;;;;;;;:15;-1:-1:-1;;;;;17433:15:0;;;;;;;;-1:-1:-1;17464:9:0;17476:10;17480:6;17476:1;:10;:::i;:::-;:14;;17489:1;17476:14;:::i;:::-;17464:26;;17459:131;17496:1;17492;:5;17459:131;;;-1:-1:-1;;;17540:5:0;17548:3;17540:11;17531:21;;;;;-1:-1:-1;;;17531:21:0;;;;;;;;;;;;17519:6;17526:1;17519:9;;;;;;-1:-1:-1;;;17519:9:0;;;;;;;;;;;;:33;-1:-1:-1;;;;;17519:33:0;;;;;;;;-1:-1:-1;17577:1:0;17567:11;;;;;17499:3;;;:::i;:::-;;;17459:131;;;-1:-1:-1;17608:10:0;;17600:55;;;;-1:-1:-1;;;17600:55:0;;9957:2:1;17600:55:0;;;9939:21:1;;;9976:18;;;9969:30;10035:34;10015:18;;;10008:62;10087:18;;17600:55:0;9929:182:1;30057:843:0;30178:4;-1:-1:-1;;;;;30204:13:0;;7936:20;7975:8;30200:693;;30240:72;;-1:-1:-1;;;30240:72:0;;-1:-1:-1;;;;;30240:36:0;;;;;:72;;15452:10;;30291:4;;30297:7;;30306:5;;30240:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30240:72:0;;;;;;;;-1:-1:-1;;30240:72:0;;;;;;;;;;;;:::i;:::-;;;30236:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30486:13:0;;30482:341;;30529:60;;-1:-1:-1;;;30529:60:0;;;;;;;:::i;30482:341::-;30773:6;30767:13;30758:6;30754:2;30750:15;30743:38;30236:602;-1:-1:-1;;;;;;30363:55:0;-1:-1:-1;;;30363:55:0;;-1:-1:-1;30356:62:0;;30200:693;-1:-1:-1;30877:4:0;30057:843;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;111:2;63:124;;;:::o;192:196::-;251:6;304:2;292:9;283:7;279:23;275:32;272:2;;;325:6;317;310:22;272:2;353:29;372:9;353:29;:::i;393:270::-;461:6;469;522:2;510:9;501:7;497:23;493:32;490:2;;;543:6;535;528:22;490:2;571:29;590:9;571:29;:::i;:::-;561:39;;619:38;653:2;642:9;638:18;619:38;:::i;:::-;609:48;;480:183;;;;;:::o;668:338::-;745:6;753;761;814:2;802:9;793:7;789:23;785:32;782:2;;;835:6;827;820:22;782:2;863:29;882:9;863:29;:::i;:::-;853:39;;911:38;945:2;934:9;930:18;911:38;:::i;:::-;901:48;;996:2;985:9;981:18;968:32;958:42;;772:234;;;;;:::o;1011:1183::-;1106:6;1114;1122;1130;1183:3;1171:9;1162:7;1158:23;1154:33;1151:2;;;1205:6;1197;1190:22;1151:2;1233:29;1252:9;1233:29;:::i;:::-;1223:39;;1281:38;1315:2;1304:9;1300:18;1281:38;:::i;:::-;1271:48;;1366:2;1355:9;1351:18;1338:32;1328:42;;1421:2;1410:9;1406:18;1393:32;1444:18;1485:2;1477:6;1474:14;1471:2;;;1506:6;1498;1491:22;1471:2;1549:6;1538:9;1534:22;1524:32;;1594:7;1587:4;1583:2;1579:13;1575:27;1565:2;;1621:6;1613;1606:22;1565:2;1662;1649:16;1684:2;1680;1677:10;1674:2;;;1690:18;;:::i;:::-;1765:2;1759:9;1733:2;1819:13;;-1:-1:-1;;1815:22:1;;;1839:2;1811:31;1807:40;1795:53;;;1863:18;;;1883:22;;;1860:46;1857:2;;;1909:18;;:::i;:::-;1949:10;1945:2;1938:22;1984:2;1976:6;1969:18;2024:7;2019:2;2014;2010;2006:11;2002:20;1999:33;1996:2;;;2050:6;2042;2035:22;1996:2;2111;2106;2102;2098:11;2093:2;2085:6;2081:15;2068:46;2134:15;;;2151:2;2130:24;2123:40;;;;1141:1053;;;;-1:-1:-1;1141:1053:1;;-1:-1:-1;;;;1141:1053:1:o;2199:367::-;2264:6;2272;2325:2;2313:9;2304:7;2300:23;2296:32;2293:2;;;2346:6;2338;2331:22;2293:2;2374:29;2393:9;2374:29;:::i;:::-;2364:39;;2453:2;2442:9;2438:18;2425:32;2500:5;2493:13;2486:21;2479:5;2476:32;2466:2;;2527:6;2519;2512:22;2466:2;2555:5;2545:15;;;2283:283;;;;;:::o;2571:264::-;2639:6;2647;2700:2;2688:9;2679:7;2675:23;2671:32;2668:2;;;2721:6;2713;2706:22;2668:2;2749:29;2768:9;2749:29;:::i;:::-;2739:39;2825:2;2810:18;;;;2797:32;;-1:-1:-1;;;2658:177:1:o;2840:608::-;2953:6;2961;2969;2977;2985;2993;3001;3054:3;3042:9;3033:7;3029:23;3025:33;3022:2;;;3076:6;3068;3061:22;3022:2;3104:29;3123:9;3104:29;:::i;:::-;3094:39;3180:2;3165:18;;3152:32;;-1:-1:-1;3231:2:1;3216:18;;3203:32;;3282:2;3267:18;;3254:32;;-1:-1:-1;3333:3:1;3318:19;;3305:33;;-1:-1:-1;3385:3:1;3370:19;;3357:33;;-1:-1:-1;3437:3:1;3422:19;3409:33;;-1:-1:-1;3012:436:1;-1:-1:-1;;;3012:436:1:o;3453:190::-;3512:6;3565:2;3553:9;3544:7;3540:23;3536:32;3533:2;;;3586:6;3578;3571:22;3533:2;-1:-1:-1;3614:23:1;;3523:120;-1:-1:-1;3523:120:1:o;3648:264::-;3716:6;3724;3777:2;3765:9;3756:7;3752:23;3748:32;3745:2;;;3798:6;3790;3783:22;3745:2;3839:9;3826:23;3816:33;;3868:38;3902:2;3891:9;3887:18;3868:38;:::i;3917:255::-;3975:6;4028:2;4016:9;4007:7;4003:23;3999:32;3996:2;;;4049:6;4041;4034:22;3996:2;4093:9;4080:23;4112:30;4136:5;4112:30;:::i;4177:259::-;4246:6;4299:2;4287:9;4278:7;4274:23;4270:32;4267:2;;;4320:6;4312;4305:22;4267:2;4357:9;4351:16;4376:30;4400:5;4376:30;:::i;4441:642::-;4512:6;4520;4573:2;4561:9;4552:7;4548:23;4544:32;4541:2;;;4594:6;4586;4579:22;4541:2;4639:9;4626:23;4668:18;4709:2;4701:6;4698:14;4695:2;;;4730:6;4722;4715:22;4695:2;4773:6;4762:9;4758:22;4748:32;;4818:7;4811:4;4807:2;4803:13;4799:27;4789:2;;4845:6;4837;4830:22;4789:2;4890;4877:16;4916:2;4908:6;4905:14;4902:2;;;4937:6;4929;4922:22;4902:2;4987:7;4982:2;4973:6;4969:2;4965:15;4961:24;4958:37;4955:2;;;5013:6;5005;4998:22;4955:2;5049;5041:11;;;;;5071:6;;-1:-1:-1;4531:552:1;;-1:-1:-1;;;;4531:552:1:o;5283:602::-;5396:6;5404;5412;5420;5428;5436;5444;5497:3;5485:9;5476:7;5472:23;5468:33;5465:2;;;5519:6;5511;5504:22;5465:2;-1:-1:-1;;5547:23:1;;;5617:2;5602:18;;5589:32;;-1:-1:-1;5668:2:1;5653:18;;5640:32;;5719:2;5704:18;;5691:32;;-1:-1:-1;5770:3:1;5755:19;;5742:33;;-1:-1:-1;5822:3:1;5807:19;;5794:33;;-1:-1:-1;5874:3:1;5859:19;5846:33;;-1:-1:-1;5455:430:1;-1:-1:-1;5455:430:1:o;5890:257::-;5931:3;5969:5;5963:12;5996:6;5991:3;5984:19;6012:63;6068:6;6061:4;6056:3;6052:14;6045:4;6038:5;6034:16;6012:63;:::i;:::-;6129:2;6108:15;-1:-1:-1;;6104:29:1;6095:39;;;;6136:4;6091:50;;5939:208;-1:-1:-1;;5939:208:1:o;6152:470::-;6331:3;6369:6;6363:13;6385:53;6431:6;6426:3;6419:4;6411:6;6407:17;6385:53;:::i;:::-;6501:13;;6460:16;;;;6523:57;6501:13;6460:16;6557:4;6545:17;;6523:57;:::i;:::-;6596:20;;6339:283;-1:-1:-1;;;;6339:283:1:o;6627:786::-;7038:25;7033:3;7026:38;7008:3;7093:6;7087:13;7109:62;7164:6;7159:2;7154:3;7150:12;7143:4;7135:6;7131:17;7109:62;:::i;:::-;-1:-1:-1;;;7230:2:1;7190:16;;;7222:11;;;7215:40;7280:13;;7302:63;7280:13;7351:2;7343:11;;7336:4;7324:17;;7302:63;:::i;:::-;7385:17;7404:2;7381:26;;7016:397;-1:-1:-1;;;;7016:397:1:o;7626:488::-;-1:-1:-1;;;;;7895:15:1;;;7877:34;;7947:15;;7942:2;7927:18;;7920:43;7994:2;7979:18;;7972:34;;;8042:3;8037:2;8022:18;;8015:31;;;7820:4;;8063:45;;8088:19;;8080:6;8063:45;:::i;:::-;8055:53;7829:285;-1:-1:-1;;;;;;7829:285:1:o;8119:635::-;8290:2;8342:21;;;8412:13;;8315:18;;;8434:22;;;8261:4;;8290:2;8513:15;;;;8487:2;8472:18;;;8261:4;8559:169;8573:6;8570:1;8567:13;8559:169;;;8634:13;;8622:26;;8703:15;;;;8668:12;;;;8595:1;8588:9;8559:169;;;-1:-1:-1;8745:3:1;;8270:484;-1:-1:-1;;;;;;8270:484:1:o;9133:393::-;9292:2;9281:9;9274:21;9331:6;9326:2;9315:9;9311:18;9304:34;9388:6;9380;9375:2;9364:9;9360:18;9347:48;9255:4;9415:22;;;9439:2;9411:31;;;9404:45;;;;9510:2;9489:15;;;-1:-1:-1;;9485:29:1;9470:45;9466:54;;9264:262;-1:-1:-1;9264:262:1:o;9531:219::-;9680:2;9669:9;9662:21;9643:4;9700:44;9740:2;9729:9;9725:18;9717:6;9700:44;:::i;10116:414::-;10318:2;10300:21;;;10357:2;10337:18;;;10330:30;10396:34;10391:2;10376:18;;10369:62;-1:-1:-1;;;10462:2:1;10447:18;;10440:48;10520:3;10505:19;;10290:240::o;16442:413::-;16644:2;16626:21;;;16683:2;16663:18;;;16656:30;16722:34;16717:2;16702:18;;16695:62;-1:-1:-1;;;16788:2:1;16773:18;;16766:47;16845:3;16830:19;;16616:239::o;17926:128::-;17966:3;17997:1;17993:6;17990:1;17987:13;17984:2;;;18003:18;;:::i;:::-;-1:-1:-1;18039:9:1;;17974:80::o;18059:120::-;18099:1;18125;18115:2;;18130:18;;:::i;:::-;-1:-1:-1;18164:9:1;;18105:74::o;18184:168::-;18224:7;18290:1;18286;18282:6;18278:14;18275:1;18272:21;18267:1;18260:9;18253:17;18249:45;18246:2;;;18297:18;;:::i;:::-;-1:-1:-1;18337:9:1;;18236:116::o;18357:125::-;18397:4;18425:1;18422;18419:8;18416:2;;;18430:18;;:::i;:::-;-1:-1:-1;18467:9:1;;18406:76::o;18487:258::-;18559:1;18569:113;18583:6;18580:1;18577:13;18569:113;;;18659:11;;;18653:18;18640:11;;;18633:39;18605:2;18598:10;18569:113;;;18700:6;18697:1;18694:13;18691:2;;;-1:-1:-1;;18735:1:1;18717:16;;18710:27;18540:205::o;18750:136::-;18789:3;18817:5;18807:2;;18826:18;;:::i;:::-;-1:-1:-1;;;18862:18:1;;18797:89::o;18891:380::-;18970:1;18966:12;;;;19013;;;19034:2;;19088:4;19080:6;19076:17;19066:27;;19034:2;19141;19133:6;19130:14;19110:18;19107:38;19104:2;;;19187:10;19182:3;19178:20;19175:1;19168:31;19222:4;19219:1;19212:15;19250:4;19247:1;19240:15;19104:2;;18946:325;;;:::o;19276:135::-;19315:3;-1:-1:-1;;19336:17:1;;19333:2;;;19356:18;;:::i;:::-;-1:-1:-1;19403:1:1;19392:13;;19323:88::o;19416:112::-;19448:1;19474;19464:2;;19479:18;;:::i;:::-;-1:-1:-1;19513:9:1;;19454:74::o;19533:127::-;19594:10;19589:3;19585:20;19582:1;19575:31;19625:4;19622:1;19615:15;19649:4;19646:1;19639:15;19665:127;19726:10;19721:3;19717:20;19714:1;19707:31;19757:4;19754:1;19747:15;19781:4;19778:1;19771:15;19797:127;19858:10;19853:3;19849:20;19846:1;19839:31;19889:4;19886:1;19879:15;19913:4;19910:1;19903:15;19929:131;-1:-1:-1;;;;;;20003:32:1;;19993:43;;19983:2;;20050:1;20047;20040:12;19983:2;19973:87;:::o
Swarm Source
ipfs://1f2b68416931a8c90f504d1921c72448d47fc5fbadaab4cdc7964d75421ee07a
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.