Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 517 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Reset Domain For... | 19323699 | 273 days ago | IN | 0 ETH | 0.00180629 | ||||
Set Domain | 17381449 | 545 days ago | IN | 0 ETH | 0.00605702 | ||||
Set Domain | 16380662 | 686 days ago | IN | 0 ETH | 0.00311068 | ||||
Set Domain | 16329937 | 693 days ago | IN | 0 ETH | 0.00225298 | ||||
Set Domain | 16238633 | 706 days ago | IN | 0 ETH | 0.0006088 | ||||
Set Domain | 16238601 | 706 days ago | IN | 0 ETH | 0.00060813 | ||||
Reset Domain For... | 16184631 | 713 days ago | IN | 0 ETH | 0.00094392 | ||||
Reset Domain For... | 16176317 | 714 days ago | IN | 0 ETH | 0.00154553 | ||||
Reset Domain For... | 16174166 | 715 days ago | IN | 0 ETH | 0.00066899 | ||||
Set Domain | 16172430 | 715 days ago | IN | 0 ETH | 0.00232699 | ||||
Set Domain | 16172401 | 715 days ago | IN | 0 ETH | 0.00237781 | ||||
Set Domain | 16155025 | 717 days ago | IN | 0 ETH | 0.00302237 | ||||
Set Domain | 16154822 | 717 days ago | IN | 0 ETH | 0.0034855 | ||||
Set Domain | 16146388 | 718 days ago | IN | 0 ETH | 0.00315734 | ||||
Set Domain | 16134229 | 720 days ago | IN | 0 ETH | 0.00373179 | ||||
Set Domain | 16134190 | 720 days ago | IN | 0 ETH | 0.00310989 | ||||
Set Domain | 16129622 | 721 days ago | IN | 0 ETH | 0.00241235 | ||||
Set Domain | 16121098 | 722 days ago | IN | 0 ETH | 0.0024317 | ||||
Set Domain | 16117036 | 723 days ago | IN | 0 ETH | 0.00212564 | ||||
Set Domain | 16103635 | 724 days ago | IN | 0 ETH | 0.00189747 | ||||
Set Domain | 16069146 | 729 days ago | IN | 0 ETH | 0.00790131 | ||||
Set Domain | 16034977 | 734 days ago | IN | 0 ETH | 0.0027998 | ||||
Set Domain | 16032508 | 734 days ago | IN | 0 ETH | 0.00243666 | ||||
Set Domain | 16028062 | 735 days ago | IN | 0 ETH | 0.00244265 | ||||
Set Domain | 16000502 | 739 days ago | IN | 0 ETH | 0.00207758 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
ENS721Mapper
Compiler Version
v0.8.9+commit.e5eed63a
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: MIT pragma solidity ^0.8.2; import "@ensdomains/ens-contracts/contracts/registry/ENS.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/utils/Strings.sol"; interface IERC20 { function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); } contract ENS721Mapper is Ownable { using Strings for uint256; ENS private ens; IERC721Enumerable public nft; bytes32 public domainHash; mapping(bytes32 => mapping(string => string)) public texts; mapping(address => mapping(uint256 => uint256)) public nextRegisterTimestamp; string public domainLabel = "rektguy"; string public nftImageBaseUri = "https://rektguy.mypinata.cloud/ipfs/QmRuj3fqWkZkuruTkPgGSvSdTdjyAMiXyBDPQ5oFer43Rq/"; bool public useEIP155 = true; mapping(bytes32 => uint256) public hashToIdMap; mapping(uint256 => bytes32) public tokenHashmap; mapping(bytes32 => string) public hashToDomainMap; uint256 public reset_period = 7257600; //12 weeks uint256 public claimFee = 0; //test claim fee, changable bool public publicClaimOpen = true; //true initally,no waste gas mapping(address => bool) public address_whitelist; event TextChanged(bytes32 indexed node, string indexed indexedKey, string key); event RegisterSubdomain(address indexed registrar, uint256 indexed token_id, string indexed label); constructor(){ ens = ENS(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e); nft = IERC721Enumerable(0xB852c6b5892256C264Cc2C888eA462189154D8d7); domainHash = getDomainHash(); } //<interface-functions> function supportsInterface(bytes4 interfaceID) public pure returns (bool) { return interfaceID == 0x3b3b57de //addr || interfaceID == 0x59d1d43c //text || interfaceID == 0x691f3431 //name || interfaceID == 0x01ffc9a7; //supportsInterface << [inception] } function text(bytes32 node, string calldata key) external view returns (string memory) { uint256 token_id = hashToIdMap[node]; require(token_id > 0 && tokenHashmap[token_id] != 0x0, "Invalid address"); if(keccak256(abi.encodePacked(key)) == keccak256("avatar")){ //eip155 string did not seem to work in any supported dapps during testing despite the returned string being properly //formatted. So the toggle was added so that we can direct link the image using http:// if this still does not work on //mainnet return useEIP155 ? string(abi.encodePacked("eip155:1/erc721:", addressToString(address(nft)), "/", token_id.toString())) : string(abi.encodePacked(nftImageBaseUri, token_id.toString(),".gif")); } else{ return texts[node][key]; } } function addr(bytes32 nodeID) public view returns (address) { uint256 token_id = hashToIdMap[nodeID]; require(token_id > 0 && tokenHashmap[token_id] != 0x0, "Invalid address"); return nft.ownerOf(token_id); } function name(bytes32 node) view public returns (string memory){ return (hashToIdMap[node] == 0) ? "" : string(abi.encodePacked(hashToDomainMap[node], ".", domainLabel, ".eth")); } //</interface-functions> //--------------------------------------------------------------------------------------------// //<read-functions> function domainMap(string calldata label) public view returns(bytes32){ bytes32 encoded_label = keccak256(abi.encodePacked(label)); bytes32 big_hash = keccak256(abi.encodePacked(domainHash, encoded_label)); return hashToIdMap[big_hash] > 0 ? big_hash : bytes32(0x0); } function getClaimableIdsForAddress(address addy) public view returns(uint256[] memory){ if(((address_whitelist[addy] || publicClaimOpen)) || owner() == addy){ return getAllIds(addy); } else{ return new uint256[](0); } } function getAllIds(address addy) private view returns(uint256[] memory){ uint256 balance = nft.balanceOf(addy); uint256[] memory ids = new uint256[](balance); uint256 count; for(uint256 i; i < balance; i++){ uint256 id = nft.tokenOfOwnerByIndex(addy, i); if(tokenHashmap[id] == 0x0){ ids[count++] = id; } } uint256[] memory trim_ids = new uint256[](count); for(uint256 i; i < count; i++){ trim_ids[i] = ids[i]; } return trim_ids; } function getTokenDomain(uint256 token_id) private view returns(string memory uri){ require(tokenHashmap[token_id] != 0x0, "Token does not have an ENS register"); uri = string(abi.encodePacked(hashToDomainMap[tokenHashmap[token_id]] ,"." ,domainLabel, ".eth")); } function getTokensDomains(uint256[] memory token_ids) public view returns(string[] memory){ string[] memory uris = new string[](token_ids.length); for(uint256 i; i < token_ids.length; i++){ uris[i] = getTokenDomain(token_ids[i]); } return uris; } function getTweaksWithDomains(address addy) public view returns(uint256[] memory){ uint256 balance = nft.balanceOf(addy); uint256[] memory ids = new uint256[](balance); uint256 count; for(uint256 i; i < balance; i++){ uint256 id = nft.tokenOfOwnerByIndex(addy, i); if(tokenHashmap[id] != 0x0){ ids[count++] = id; } } uint256[] memory trim_ids = new uint256[](count); for(uint256 i; i < count; i++){ trim_ids[i] = ids[i]; } return trim_ids; } //</read-functions> //--------------------------------------------------------------------------------------------// //<helper-functions> function addressToString(address _addr) private pure returns(string memory) { bytes32 value = bytes32(uint256(uint160(_addr))); bytes memory alphabet = "0123456789abcdef"; bytes memory str = new bytes(51); str[0] = "0"; str[1] = "x"; for (uint i = 0; i < 20; i++) { str[2+i*2] = alphabet[uint(uint8(value[i + 12] >> 4))]; str[3+i*2] = alphabet[uint(uint8(value[i + 12] & 0x0f))]; } return string(str); } //this is the correct method for creating a 2 level ENS namehash function getDomainHash() private view returns (bytes32 namehash) { namehash = 0x0; namehash = keccak256(abi.encodePacked(namehash, keccak256(abi.encodePacked('eth')))); namehash = keccak256(abi.encodePacked(namehash, keccak256(abi.encodePacked(domainLabel)))); } //</helper-functions> //--------------------------------------------------------------------------------------------// //<authorised-functions> function setDomain(string calldata label, uint256 token_id) public isAuthorised(token_id) { require(tokenHashmap[token_id] == 0x0, "Token has already been set"); require(address_whitelist[msg.sender] || publicClaimOpen || owner() == msg.sender, "Not authorised"); bytes32 encoded_label = keccak256(abi.encodePacked(label)); bytes32 big_hash = keccak256(abi.encodePacked(domainHash, encoded_label)); //contract owner can update / overwrite records. << this may be changed in the future with an updated method but as this is still //an experiment we'd like to retain some level of control over the sub-domains // //ens.recordExists seems to not be reliable (tested removing records through ENS control panel and this still returns true) require(!ens.recordExists(big_hash) || msg.sender == owner(), "sub-domain already exists"); ens.setSubnodeRecord(domainHash, encoded_label, msg.sender, address(this), 0); hashToIdMap[big_hash] = token_id; tokenHashmap[token_id] = big_hash; hashToDomainMap[big_hash] = label; emit RegisterSubdomain(nft.ownerOf(token_id), token_id, label); } function feeSetDomain(string calldata label, uint256 token_id) public isAuthorised(token_id) payable { setDomain(label, token_id); } function setText(bytes32 node, string calldata key, string calldata value) external isAuthorised(hashToIdMap[node]) { uint256 token_id = hashToIdMap[node]; require(token_id > 0 && tokenHashmap[token_id] != 0x0, "Invalid address"); require(keccak256(abi.encodePacked(key)) != keccak256("avatar"), "cannot set avatar"); texts[node][key] = value; emit TextChanged(node, key, key); } function resetDomainForToken(uint256 token_id) public isAuthorised(token_id) { bytes32 domain = tokenHashmap[token_id]; require(ens.recordExists(domain), "Sub-domain does not exist"); //reset domain mappings hashToDomainMap[domain] = ""; hashToIdMap[domain] = 0; tokenHashmap[token_id] = 0x0; //allow sender to reclaim (if public == true) if(nextRegisterTimestamp[msg.sender][token_id] > block.timestamp && msg.sender != owner()){ nextRegisterTimestamp[msg.sender][token_id] = block.timestamp + (60 * 30); //30 minute cooldown } } //</authorised-functions> //--------------------------------------------------------------------------------------------// // <owner-functions> function addAddressWhitelist(address[] calldata addresses) public onlyOwner { for(uint256 i; i < addresses.length; i++){ address_whitelist[addresses[i]] = true; } } function setDomainLabel(string calldata label) public onlyOwner { domainLabel = label; domainHash = getDomainHash(); } function setClaimFee(uint256 fee) public onlyOwner{ claimFee = fee; } function setNftAddress(address addy) public onlyOwner{ nft = IERC721Enumerable(addy); } function toggleNftImageLink() public onlyOwner{ useEIP155 = !useEIP155; } function setNftImageBaseUri(string memory _uri) public onlyOwner{ nftImageBaseUri = _uri; } function setEnsAddress(address addy) public onlyOwner { ens = ENS(addy); } function resetAddressForClaim(address addy,uint256 token_id) public onlyOwner { nextRegisterTimestamp[addy][token_id] = 0; } function togglePublicClaim() public onlyOwner { publicClaimOpen = !publicClaimOpen; } function updateResetPeriod(uint256 time) public onlyOwner { reset_period = time; } function renounceOwnership() public override onlyOwner { require(false, "Sorry - you cannot renounce ownership."); super.renounceOwnership(); } //want to be able to withdraw if people send eth to this contract function withdraw() public onlyOwner { uint256 balance = address(this).balance; payable(msg.sender).transfer(balance); } function withdrawTokens(IERC20 token) public onlyOwner { require(address(token) != address(0)); uint256 balance = token.balanceOf(address(this)); token.transfer(msg.sender, balance); } //</owner-functions> modifier isAuthorised(uint256 tokenId) { require(owner() == msg.sender || nft.ownerOf(tokenId) == msg.sender, "Not authorised"); _; } }
pragma solidity >=0.8.4; interface ENS { // Logged when the owner of a node assigns a new owner to a subnode. event NewOwner(bytes32 indexed node, bytes32 indexed label, address owner); // Logged when the owner of a node transfers ownership to a new account. event Transfer(bytes32 indexed node, address owner); // Logged when the resolver for a node changes. event NewResolver(bytes32 indexed node, address resolver); // Logged when the TTL of a node changes event NewTTL(bytes32 indexed node, uint64 ttl); // Logged when an operator is added or removed. event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); function setRecord( bytes32 node, address owner, address resolver, uint64 ttl ) external; function setSubnodeRecord( bytes32 node, bytes32 label, address owner, address resolver, uint64 ttl ) external; function setSubnodeOwner( bytes32 node, bytes32 label, address owner ) external returns (bytes32); function setResolver(bytes32 node, address resolver) external; function setOwner(bytes32 node, address owner) external; function setTTL(bytes32 node, uint64 ttl) external; function setApprovalForAll(address operator, bool approved) external; function owner(bytes32 node) external view returns (address); function resolver(bytes32 node) external view returns (address); function ttl(bytes32 node) external view returns (uint64); function recordExists(bytes32 node) external view returns (bool); function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @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`. * * 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; /** * @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 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 the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; import "../IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"registrar","type":"address"},{"indexed":true,"internalType":"uint256","name":"token_id","type":"uint256"},{"indexed":true,"internalType":"string","name":"label","type":"string"}],"name":"RegisterSubdomain","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"string","name":"indexedKey","type":"string"},{"indexed":false,"internalType":"string","name":"key","type":"string"}],"name":"TextChanged","type":"event"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addAddressWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"nodeID","type":"bytes32"}],"name":"addr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"address_whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"domainHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"domainLabel","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"label","type":"string"}],"name":"domainMap","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"label","type":"string"},{"internalType":"uint256","name":"token_id","type":"uint256"}],"name":"feeSetDomain","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"}],"name":"getClaimableIdsForAddress","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"token_ids","type":"uint256[]"}],"name":"getTokensDomains","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"}],"name":"getTweaksWithDomains","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"hashToDomainMap","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"hashToIdMap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"nextRegisterTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nft","outputs":[{"internalType":"contract IERC721Enumerable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftImageBaseUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicClaimOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"},{"internalType":"uint256","name":"token_id","type":"uint256"}],"name":"resetAddressForClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"token_id","type":"uint256"}],"name":"resetDomainForToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reset_period","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setClaimFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"label","type":"string"},{"internalType":"uint256","name":"token_id","type":"uint256"}],"name":"setDomain","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"label","type":"string"}],"name":"setDomainLabel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"}],"name":"setEnsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"}],"name":"setNftAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setNftImageBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"key","type":"string"},{"internalType":"string","name":"value","type":"string"}],"name":"setText","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"key","type":"string"}],"name":"text","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"string","name":"","type":"string"}],"name":"texts","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleNftImageLink","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePublicClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenHashmap","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"updateResetPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"useEIP155","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c0604052600760808190526672656b7467757960c81b60a09081526200002a916006919062000205565b50604051806080016040528060538152602001620034496053913980516200005b9160079160209091019062000205565b5060088054600160ff199182168117909255626ebe00600c556000600d55600e805490911690911790553480156200009257600080fd5b506200009e33620000f4565b600180546001600160a01b03199081166e0c2e074ec69a0dfb2997ba6c7d2e1e179091556002805490911673b852c6b5892256c264cc2c888ea462189154d8d7179055620000eb62000144565b6003556200038c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604051620cae8d60eb1b60208201526000908190602301604051602081830303815290604052805190602001206040516020016200018c929190918252602082015260400190565b604051602081830303815290604052805190602001209050806006604051602001620001b99190620002e8565b60405160208183030381529060405280519060200120604051602001620001ea929190918252602082015260400190565b60405160208183030381529060405280519060200120905090565b8280546200021390620002ab565b90600052602060002090601f01602090048101928262000237576000855562000282565b82601f106200025257805160ff191683800117855562000282565b8280016001018555821562000282579182015b828111156200028257825182559160200191906001019062000265565b506200029092915062000294565b5090565b5b8082111562000290576000815560010162000295565b600181811c90821680620002c057607f821691505b60208210811415620002e257634e487b7160e01b600052602260045260246000fd5b50919050565b600080835481600182811c9150808316806200030557607f831692505b60208084108214156200032657634e487b7160e01b86526022600452602486fd5b8180156200033d57600181146200034f576200037e565b60ff198616895284890196506200037e565b60008a81526020902060005b86811015620003765781548b8201529085019083016200035b565b505084890196505b509498975050505050505050565b6130ad806200039c6000396000f3fe6080604052600436106102465760003560e01c80638da5cb5b11610139578063c074c3da116100b6578063ea5822c61161007a578063ea5822c6146106df578063f2fde38b146106ff578063f4ffa31c1461071f578063f5958ee814610734578063f7569f9c14610761578063fd6f73641461077657600080fd5b8063c074c3da14610649578063c230af7414610669578063d890582f14610689578063df46d7a6146106a9578063dfe86ac5146106c957600080fd5b8063a9e18272116100fd578063a9e18272146105a8578063abcec0a2146105bd578063b63bcfc6146105ea578063b97a305914610604578063bcbe0e3c1461063457600080fd5b80638da5cb5b14610511578063957b069f1461052f5780639741cbff1461054f57806399d32fc41461057c578063a449329c1461059257600080fd5b80634f1050d3116101c7578063691f34311161018b578063691f343114610456578063715018a61461047657806371a93fb51461048b578063731fa5c2146104ab5780638082995c146104cb57600080fd5b80634f1050d3146103bc5780635287ea5e146103cf57806358b79b62146103ef57806359d1d43c1461040957806362b683a01461042957600080fd5b80633ccfd60b1161020e5780633ccfd60b1461031a578063428cfb201461032f57806347329f611461035c57806347ccca021461037c57806349df728c1461039c57600080fd5b806301ffc9a71461024b5780630b102d1a1461028057806310f13a8c146102a25780632e75ab50146102c25780633b3b57de146102e2575b600080fd5b34801561025757600080fd5b5061026b610266366004612752565b610796565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b506102a061029b366004612791565b610803565b005b3480156102ae57600080fd5b506102a06102bd3660046127f6565b610858565b3480156102ce57600080fd5b506102a06102dd36600461286f565b610a9b565b3480156102ee57600080fd5b506103026102fd36600461286f565b610aca565b6040516001600160a01b039091168152602001610277565b34801561032657600080fd5b506102a0610b94565b34801561033b57600080fd5b5061034f61034a36600461286f565b610bf1565b60405161027791906128e0565b34801561036857600080fd5b506102a06103773660046128f3565b610c8b565b34801561038857600080fd5b50600254610302906001600160a01b031681565b3480156103a857600080fd5b506102a06103b7366004612791565b610cd1565b6102a06103ca366004612934565b610e10565b3480156103db57600080fd5b506102a06103ea366004612791565b610ee8565b3480156103fb57600080fd5b5060085461026b9060ff1681565b34801561041557600080fd5b5061034f61042436600461297f565b610f34565b34801561043557600080fd5b50610449610444366004612791565b61110f565b60405161027791906129ca565b34801561046257600080fd5b5061034f61047136600461286f565b611364565b34801561048257600080fd5b506102a06113c5565b34801561049757600080fd5b506102a06104a6366004612a0e565b611446565b3480156104b757600080fd5b506102a06104c6366004612b37565b6114e2565b3480156104d757600080fd5b506105036104e6366004612b6b565b600560209081526000928352604080842090915290825290205481565b604051908152602001610277565b34801561051d57600080fd5b506000546001600160a01b0316610302565b34801561053b57600080fd5b5061044961054a366004612791565b61151f565b34801561055b57600080fd5b5061050361056a36600461286f565b60096020526000908152604090205481565b34801561058857600080fd5b50610503600d5481565b34801561059e57600080fd5b50610503600c5481565b3480156105b457600080fd5b506102a061159f565b3480156105c957600080fd5b506105036105d836600461286f565b600a6020526000908152604090205481565b3480156105f657600080fd5b50600e5461026b9060ff1681565b34801561061057600080fd5b5061026b61061f366004612791565b600f6020526000908152604090205460ff1681565b34801561064057600080fd5b5061034f6115dd565b34801561065557600080fd5b506105036106643660046128f3565b6115ea565b34801561067557600080fd5b506102a061068436600461286f565b611676565b34801561069557600080fd5b506102a06106a4366004612934565b6118bc565b3480156106b557600080fd5b506102a06106c436600461286f565b611d05565b3480156106d557600080fd5b5061050360035481565b3480156106eb57600080fd5b5061034f6106fa366004612b97565b611d34565b34801561070b57600080fd5b506102a061071a366004612791565b611d69565b34801561072b57600080fd5b506102a0611e04565b34801561074057600080fd5b5061075461074f366004612bdd565b611e42565b6040516102779190612c82565b34801561076d57600080fd5b5061034f611ef3565b34801561078257600080fd5b506102a0610791366004612b6b565b611f00565b6000631d9dabef60e11b6001600160e01b0319831614806107c75750631674750f60e21b6001600160e01b03198316145b806107e2575063691f343160e01b6001600160e01b03198316145b806107fd57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000546001600160a01b031633146108365760405162461bcd60e51b815260040161082d90612ce4565b60405180910390fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000858152600960205260409020543361087a6000546001600160a01b031690565b6001600160a01b0316148061091157506002546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e9060240160206040518083038186803b1580156108ce57600080fd5b505afa1580156108e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109069190612d19565b6001600160a01b0316145b61092d5760405162461bcd60e51b815260040161082d90612d36565b600086815260096020526040902054801580159061095857506000818152600a602052604090205415155b6109745760405162461bcd60e51b815260040161082d90612d5e565b7fd1f86c93d831119ad98fe983e643a7431e4ac992e3ead6e3007f4dd1adf6634386866040516020016109a8929190612d87565b604051602081830303815290604052805190602001201415610a005760405162461bcd60e51b815260206004820152601160248201527031b0b73737ba1039b2ba1030bb30ba30b960791b604482015260640161082d565b8383600460008a81526020019081526020016000208888604051610a25929190612d87565b908152604051908190036020019020610a3f929091612645565b508585604051610a50929190612d87565b6040518091039020877fd8c9334b1a9c2f9da342a0a2b32629c1a229b6445dad78947f674b44444a75508888604051610a8a929190612d97565b60405180910390a350505050505050565b6000546001600160a01b03163314610ac55760405162461bcd60e51b815260040161082d90612ce4565b600d55565b6000818152600960205260408120548015801590610af557506000818152600a602052604090205415155b610b115760405162461bcd60e51b815260040161082d90612d5e565b6002546040516331a9108f60e11b8152600481018390526001600160a01b0390911690636352211e9060240160206040518083038186803b158015610b5557600080fd5b505afa158015610b69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8d9190612d19565b9392505050565b6000546001600160a01b03163314610bbe5760405162461bcd60e51b815260040161082d90612ce4565b6040514790339082156108fc029083906000818181858888f19350505050158015610bed573d6000803e3d6000fd5b5050565b600b6020526000908152604090208054610c0a90612dc6565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3690612dc6565b8015610c835780601f10610c5857610100808354040283529160200191610c83565b820191906000526020600020905b815481529060010190602001808311610c6657829003601f168201915b505050505081565b6000546001600160a01b03163314610cb55760405162461bcd60e51b815260040161082d90612ce4565b610cc160068383612645565b50610cca611f52565b6003555050565b6000546001600160a01b03163314610cfb5760405162461bcd60e51b815260040161082d90612ce4565b6001600160a01b038116610d0e57600080fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b158015610d5057600080fd5b505afa158015610d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d889190612e01565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb90604401602060405180830381600087803b158015610dd357600080fd5b505af1158015610de7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0b9190612e1a565b505050565b8033610e246000546001600160a01b031690565b6001600160a01b03161480610ebb57506002546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e9060240160206040518083038186803b158015610e7857600080fd5b505afa158015610e8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb09190612d19565b6001600160a01b0316145b610ed75760405162461bcd60e51b815260040161082d90612d36565b610ee28484846118bc565b50505050565b6000546001600160a01b03163314610f125760405162461bcd60e51b815260040161082d90612ce4565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000838152600960205260409020546060908015801590610f6257506000818152600a602052604090205415155b610f7e5760405162461bcd60e51b815260040161082d90612d5e565b7fd1f86c93d831119ad98fe983e643a7431e4ac992e3ead6e3007f4dd1adf663438484604051602001610fb2929190612d87565b60405160208183030381529060405280519060200120141561104f5760085460ff16611008576007610fe38261200f565b604051602001610ff4929190612ed6565b604051602081830303815290604052611047565b60025461101d906001600160a01b0316612114565b6110268261200f565b604051602001611037929190612f0a565b6040516020818303038152906040525b915050610b8d565b60008581526004602052604090819020905161106e9086908690612d87565b9081526020016040518091039020805461108790612dc6565b80601f01602080910402602001604051908101604052809291908181526020018280546110b390612dc6565b80156111005780601f106110d557610100808354040283529160200191611100565b820191906000526020600020905b8154815290600101906020018083116110e357829003601f168201915b50505050509150509392505050565b6002546040516370a0823160e01b81526001600160a01b0383811660048301526060926000929116906370a082319060240160206040518083038186803b15801561115957600080fd5b505afa15801561116d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111919190612e01565b90506000816001600160401b038111156111ad576111ad612a82565b6040519080825280602002602001820160405280156111d6578160200160208202803683370190505b5090506000805b838110156112bf57600254604051632f745c5960e01b81526001600160a01b038881166004830152602482018490526000921690632f745c599060440160206040518083038186803b15801561123257600080fd5b505afa158015611246573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126a9190612e01565b6000818152600a6020526040902054909150156112ac5780848461128d81612f78565b95508151811061129f5761129f612f93565b6020026020010181815250505b50806112b781612f78565b9150506111dd565b506000816001600160401b038111156112da576112da612a82565b604051908082528060200260200182016040528015611303578160200160208202803683370190505b50905060005b8281101561135a5783818151811061132357611323612f93565b602002602001015182828151811061133d5761133d612f93565b60209081029190910101528061135281612f78565b915050611309565b5095945050505050565b600081815260096020526040902054606090156113b1576000828152600b6020908152604091829020915161139d929160069101612fa9565b6040516020818303038152906040526107fd565b505060408051602081019091526000815290565b6000546001600160a01b031633146113ef5760405162461bcd60e51b815260040161082d90612ce4565b60405162461bcd60e51b815260206004820152602660248201527f536f727279202d20796f752063616e6e6f742072656e6f756e6365206f776e656044820152653939b434b81760d11b606482015260840161082d565b6000546001600160a01b031633146114705760405162461bcd60e51b815260040161082d90612ce4565b60005b81811015610e0b576001600f600085858581811061149357611493612f93565b90506020020160208101906114a89190612791565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806114da81612f78565b915050611473565b6000546001600160a01b0316331461150c5760405162461bcd60e51b815260040161082d90612ce4565b8051610bed9060079060208401906126c9565b6001600160a01b0381166000908152600f602052604090205460609060ff168061154b5750600e5460ff165b806115785750816001600160a01b031661156d6000546001600160a01b031690565b6001600160a01b0316145b15611586576107fd826122ff565b60408051600080825260208201909252905b5092915050565b6000546001600160a01b031633146115c95760405162461bcd60e51b815260040161082d90612ce4565b6008805460ff19811660ff90911615179055565b60068054610c0a90612dc6565b6000808383604051602001611600929190612d87565b604051602081830303815290604052805190602001209050600060035482604051602001611638929190918252602082015260400190565b60408051601f1981840301815291815281516020928301206000818152600990935291205490915061166b57600061166d565b805b95945050505050565b803361168a6000546001600160a01b031690565b6001600160a01b0316148061172157506002546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e9060240160206040518083038186803b1580156116de57600080fd5b505afa1580156116f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117169190612d19565b6001600160a01b0316145b61173d5760405162461bcd60e51b815260040161082d90612d36565b6000828152600a602052604090819020546001549151631ef3fca760e31b81526004810182905290916001600160a01b03169063f79fe5389060240160206040518083038186803b15801561179157600080fd5b505afa1580156117a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c99190612e1a565b6118155760405162461bcd60e51b815260206004820152601960248201527f5375622d646f6d61696e20646f6573206e6f7420657869737400000000000000604482015260640161082d565b6040805160208082018084526000808452858152600b909252929020905161183d92906126c9565b506000818152600960209081526040808320839055858352600a8252808320839055338352600582528083208684529091529020544210801561188b57506000546001600160a01b03163314155b15610e0b5761189c42610708612fdf565b336000908152600560209081526040808320878452909152902055505050565b80336118d06000546001600160a01b031690565b6001600160a01b0316148061196757506002546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e9060240160206040518083038186803b15801561192457600080fd5b505afa158015611938573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195c9190612d19565b6001600160a01b0316145b6119835760405162461bcd60e51b815260040161082d90612d36565b6000828152600a6020526040902054156119df5760405162461bcd60e51b815260206004820152601a60248201527f546f6b656e2068617320616c7265616479206265656e20736574000000000000604482015260640161082d565b336000908152600f602052604090205460ff16806119ff5750600e5460ff165b80611a23575033611a186000546001600160a01b031690565b6001600160a01b0316145b611a3f5760405162461bcd60e51b815260040161082d90612d36565b60008484604051602001611a54929190612d87565b604051602081830303815290604052805190602001209050600060035482604051602001611a8c929190918252602082015260400190565b60408051808303601f19018152908290528051602090910120600154631ef3fca760e31b8352600483018290529092506001600160a01b03169063f79fe5389060240160206040518083038186803b158015611ae757600080fd5b505afa158015611afb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1f9190612e1a565b1580611b3557506000546001600160a01b031633145b611b815760405162461bcd60e51b815260206004820152601960248201527f7375622d646f6d61696e20616c72656164792065786973747300000000000000604482015260640161082d565b6001546003546040516305ef2c7f60e41b8152600481019190915260248101849052336044820152306064820152600060848201526001600160a01b0390911690635ef2c7f09060a401600060405180830381600087803b158015611be557600080fd5b505af1158015611bf9573d6000803e3d6000fd5b5050506000828152600960209081526040808320889055878352600a8252808320859055848352600b9091529020611c3391508787612645565b508585604051611c44929190612d87565b6040519081900381206002546331a9108f60e11b835260048301879052909186916001600160a01b031690636352211e9060240160206040518083038186803b158015611c9057600080fd5b505afa158015611ca4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc89190612d19565b6001600160a01b03167fa16b10a6d8a8b7e20fab669fb2b5acd39c210216e639cdd3190a0c1fe2b7cc7b60405160405180910390a4505050505050565b6000546001600160a01b03163314611d2f5760405162461bcd60e51b815260040161082d90612ce4565b600c55565b6004602090815260009283526040909220815180830184018051928152908401929093019190912091528054610c0a90612dc6565b6000546001600160a01b03163314611d935760405162461bcd60e51b815260040161082d90612ce4565b6001600160a01b038116611df85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161082d565b611e0181612549565b50565b6000546001600160a01b03163314611e2e5760405162461bcd60e51b815260040161082d90612ce4565b600e805460ff19811660ff90911615179055565b6060600082516001600160401b03811115611e5f57611e5f612a82565b604051908082528060200260200182016040528015611e9257816020015b6060815260200190600190039081611e7d5790505b50905060005b835181101561159857611ec3848281518110611eb657611eb6612f93565b6020026020010151612599565b828281518110611ed557611ed5612f93565b60200260200101819052508080611eeb90612f78565b915050611e98565b60078054610c0a90612dc6565b6000546001600160a01b03163314611f2a5760405162461bcd60e51b815260040161082d90612ce4565b6001600160a01b03909116600090815260056020908152604080832093835292905290812055565b604051620cae8d60eb1b6020820152600090819060230160405160208183030381529060405280519060200120604051602001611f99929190918252602082015260400190565b604051602081830303815290604052805190602001209050806006604051602001611fc49190612ff7565b60405160208183030381529060405280519060200120604051602001611ff4929190918252602082015260400190565b60405160208183030381529060405280519060200120905090565b6060816120335750506040805180820190915260018152600360fc1b602082015290565b8160005b811561205d578061204781612f78565b91506120569050600a83613019565b9150612037565b6000816001600160401b0381111561207757612077612a82565b6040519080825280601f01601f1916602001820160405280156120a1576020820181803683370190505b5090505b841561210c576120b660018361302d565b91506120c3600a86613044565b6120ce906030612fdf565b60f81b8183815181106120e3576120e3612f93565b60200101906001600160f81b031916908160001a905350612105600a86613019565b94506120a5565b949350505050565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b60208201528151603380825260608281019094526001600160a01b0385169291600091602082018180368337019050509050600360fc1b8160008151811061217f5761217f612f93565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106121ae576121ae612f93565b60200101906001600160f81b031916908160001a90535060005b60148110156122f657826004856121e084600c612fdf565b602081106121f0576121f0612f93565b1a60f81b6001600160f81b031916901c60f81c60ff168151811061221657612216612f93565b01602001516001600160f81b03191682612231836002613058565b61223c906002612fdf565b8151811061224c5761224c612f93565b60200101906001600160f81b031916908160001a905350828461227083600c612fdf565b6020811061228057612280612f93565b825191901a600f1690811061229757612297612f93565b01602001516001600160f81b031916826122b2836002613058565b6122bd906003612fdf565b815181106122cd576122cd612f93565b60200101906001600160f81b031916908160001a905350806122ee81612f78565b9150506121c8565b50949350505050565b6002546040516370a0823160e01b81526001600160a01b0383811660048301526060926000929116906370a082319060240160206040518083038186803b15801561234957600080fd5b505afa15801561235d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123819190612e01565b90506000816001600160401b0381111561239d5761239d612a82565b6040519080825280602002602001820160405280156123c6578160200160208202803683370190505b5090506000805b838110156124ae57600254604051632f745c5960e01b81526001600160a01b038881166004830152602482018490526000921690632f745c599060440160206040518083038186803b15801561242257600080fd5b505afa158015612436573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061245a9190612e01565b6000818152600a602052604090205490915061249b5780848461247c81612f78565b95508151811061248e5761248e612f93565b6020026020010181815250505b50806124a681612f78565b9150506123cd565b506000816001600160401b038111156124c9576124c9612a82565b6040519080825280602002602001820160405280156124f2578160200160208202803683370190505b50905060005b8281101561135a5783818151811061251257612512612f93565b602002602001015182828151811061252c5761252c612f93565b60209081029190910101528061254181612f78565b9150506124f8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000818152600a60205260409020546060906126035760405162461bcd60e51b815260206004820152602360248201527f546f6b656e20646f6573206e6f74206861766520616e20454e532072656769736044820152623a32b960e91b606482015260840161082d565b6000828152600a60209081526040808320548352600b825291829020915161262f929160069101612fa9565b6040516020818303038152906040529050919050565b82805461265190612dc6565b90600052602060002090601f01602090048101928261267357600085556126b9565b82601f1061268c5782800160ff198235161785556126b9565b828001600101855582156126b9579182015b828111156126b957823582559160200191906001019061269e565b506126c592915061273d565b5090565b8280546126d590612dc6565b90600052602060002090601f0160209004810192826126f757600085556126b9565b82601f1061271057805160ff19168380011785556126b9565b828001600101855582156126b9579182015b828111156126b9578251825591602001919060010190612722565b5b808211156126c5576000815560010161273e565b60006020828403121561276457600080fd5b81356001600160e01b031981168114610b8d57600080fd5b6001600160a01b0381168114611e0157600080fd5b6000602082840312156127a357600080fd5b8135610b8d8161277c565b60008083601f8401126127c057600080fd5b5081356001600160401b038111156127d757600080fd5b6020830191508360208285010111156127ef57600080fd5b9250929050565b60008060008060006060868803121561280e57600080fd5b8535945060208601356001600160401b038082111561282c57600080fd5b61283889838a016127ae565b9096509450604088013591508082111561285157600080fd5b5061285e888289016127ae565b969995985093965092949392505050565b60006020828403121561288157600080fd5b5035919050565b60005b838110156128a357818101518382015260200161288b565b83811115610ee25750506000910152565b600081518084526128cc816020860160208601612888565b601f01601f19169290920160200192915050565b602081526000610b8d60208301846128b4565b6000806020838503121561290657600080fd5b82356001600160401b0381111561291c57600080fd5b612928858286016127ae565b90969095509350505050565b60008060006040848603121561294957600080fd5b83356001600160401b0381111561295f57600080fd5b61296b868287016127ae565b909790965060209590950135949350505050565b60008060006040848603121561299457600080fd5b8335925060208401356001600160401b038111156129b157600080fd5b6129bd868287016127ae565b9497909650939450505050565b6020808252825182820181905260009190848201906040850190845b81811015612a02578351835292840192918401916001016129e6565b50909695505050505050565b60008060208385031215612a2157600080fd5b82356001600160401b0380821115612a3857600080fd5b818501915085601f830112612a4c57600080fd5b813581811115612a5b57600080fd5b8660208260051b8501011115612a7057600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715612ac057612ac0612a82565b604052919050565b600082601f830112612ad957600080fd5b81356001600160401b03811115612af257612af2612a82565b612b05601f8201601f1916602001612a98565b818152846020838601011115612b1a57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215612b4957600080fd5b81356001600160401b03811115612b5f57600080fd5b61210c84828501612ac8565b60008060408385031215612b7e57600080fd5b8235612b898161277c565b946020939093013593505050565b60008060408385031215612baa57600080fd5b8235915060208301356001600160401b03811115612bc757600080fd5b612bd385828601612ac8565b9150509250929050565b60006020808385031215612bf057600080fd5b82356001600160401b0380821115612c0757600080fd5b818501915085601f830112612c1b57600080fd5b813581811115612c2d57612c2d612a82565b8060051b9150612c3e848301612a98565b8181529183018401918481019088841115612c5857600080fd5b938501935b83851015612c7657843582529385019390850190612c5d565b98975050505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015612cd757603f19888603018452612cc58583516128b4565b94509285019290850190600101612ca9565b5092979650505050505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215612d2b57600080fd5b8151610b8d8161277c565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5cd95960921b604082015260600190565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b8183823760009101908152919050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b600181811c90821680612dda57607f821691505b60208210811415612dfb57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215612e1357600080fd5b5051919050565b600060208284031215612e2c57600080fd5b81518015158114610b8d57600080fd5b8054600090600181811c9080831680612e5657607f831692505b6020808410821415612e7857634e487b7160e01b600052602260045260246000fd5b818015612e8c5760018114612e9d57612eca565b60ff19861689528489019650612eca565b60008881526020902060005b86811015612ec25781548b820152908501908301612ea9565b505084890196505b50505050505092915050565b6000612ee28285612e3c565b8351612ef2818360208801612888565b631733b4b360e11b9101908152600401949350505050565b6f32b4b8189a9a9d1897b2b9319b99189d60811b815260008351612f35816010850160208801612888565b602f60f81b6010918401918201528351612f56816011840160208801612888565b01601101949350505050565b634e487b7160e01b600052601160045260246000fd5b6000600019821415612f8c57612f8c612f62565b5060010190565b634e487b7160e01b600052603260045260246000fd5b6000612fb58285612e3c565b601760f91b8152612fc96001820185612e3c565b6305ccae8d60e31b815260040195945050505050565b60008219821115612ff257612ff2612f62565b500190565b6000610b8d8284612e3c565b634e487b7160e01b600052601260045260246000fd5b60008261302857613028613003565b500490565b60008282101561303f5761303f612f62565b500390565b60008261305357613053613003565b500690565b600081600019048311821515161561307257613072612f62565b50029056fea264697066735822122030207463cded83dc3174623cd0724be2a3733e4ad638d53e9bbdb395f382002a64736f6c6343000809003368747470733a2f2f72656b746775792e6d7970696e6174612e636c6f75642f697066732f516d52756a336671576b5a6b757275546b5067475376536454646a79414d69587942445051356f466572343352712f
Deployed Bytecode
0x6080604052600436106102465760003560e01c80638da5cb5b11610139578063c074c3da116100b6578063ea5822c61161007a578063ea5822c6146106df578063f2fde38b146106ff578063f4ffa31c1461071f578063f5958ee814610734578063f7569f9c14610761578063fd6f73641461077657600080fd5b8063c074c3da14610649578063c230af7414610669578063d890582f14610689578063df46d7a6146106a9578063dfe86ac5146106c957600080fd5b8063a9e18272116100fd578063a9e18272146105a8578063abcec0a2146105bd578063b63bcfc6146105ea578063b97a305914610604578063bcbe0e3c1461063457600080fd5b80638da5cb5b14610511578063957b069f1461052f5780639741cbff1461054f57806399d32fc41461057c578063a449329c1461059257600080fd5b80634f1050d3116101c7578063691f34311161018b578063691f343114610456578063715018a61461047657806371a93fb51461048b578063731fa5c2146104ab5780638082995c146104cb57600080fd5b80634f1050d3146103bc5780635287ea5e146103cf57806358b79b62146103ef57806359d1d43c1461040957806362b683a01461042957600080fd5b80633ccfd60b1161020e5780633ccfd60b1461031a578063428cfb201461032f57806347329f611461035c57806347ccca021461037c57806349df728c1461039c57600080fd5b806301ffc9a71461024b5780630b102d1a1461028057806310f13a8c146102a25780632e75ab50146102c25780633b3b57de146102e2575b600080fd5b34801561025757600080fd5b5061026b610266366004612752565b610796565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b506102a061029b366004612791565b610803565b005b3480156102ae57600080fd5b506102a06102bd3660046127f6565b610858565b3480156102ce57600080fd5b506102a06102dd36600461286f565b610a9b565b3480156102ee57600080fd5b506103026102fd36600461286f565b610aca565b6040516001600160a01b039091168152602001610277565b34801561032657600080fd5b506102a0610b94565b34801561033b57600080fd5b5061034f61034a36600461286f565b610bf1565b60405161027791906128e0565b34801561036857600080fd5b506102a06103773660046128f3565b610c8b565b34801561038857600080fd5b50600254610302906001600160a01b031681565b3480156103a857600080fd5b506102a06103b7366004612791565b610cd1565b6102a06103ca366004612934565b610e10565b3480156103db57600080fd5b506102a06103ea366004612791565b610ee8565b3480156103fb57600080fd5b5060085461026b9060ff1681565b34801561041557600080fd5b5061034f61042436600461297f565b610f34565b34801561043557600080fd5b50610449610444366004612791565b61110f565b60405161027791906129ca565b34801561046257600080fd5b5061034f61047136600461286f565b611364565b34801561048257600080fd5b506102a06113c5565b34801561049757600080fd5b506102a06104a6366004612a0e565b611446565b3480156104b757600080fd5b506102a06104c6366004612b37565b6114e2565b3480156104d757600080fd5b506105036104e6366004612b6b565b600560209081526000928352604080842090915290825290205481565b604051908152602001610277565b34801561051d57600080fd5b506000546001600160a01b0316610302565b34801561053b57600080fd5b5061044961054a366004612791565b61151f565b34801561055b57600080fd5b5061050361056a36600461286f565b60096020526000908152604090205481565b34801561058857600080fd5b50610503600d5481565b34801561059e57600080fd5b50610503600c5481565b3480156105b457600080fd5b506102a061159f565b3480156105c957600080fd5b506105036105d836600461286f565b600a6020526000908152604090205481565b3480156105f657600080fd5b50600e5461026b9060ff1681565b34801561061057600080fd5b5061026b61061f366004612791565b600f6020526000908152604090205460ff1681565b34801561064057600080fd5b5061034f6115dd565b34801561065557600080fd5b506105036106643660046128f3565b6115ea565b34801561067557600080fd5b506102a061068436600461286f565b611676565b34801561069557600080fd5b506102a06106a4366004612934565b6118bc565b3480156106b557600080fd5b506102a06106c436600461286f565b611d05565b3480156106d557600080fd5b5061050360035481565b3480156106eb57600080fd5b5061034f6106fa366004612b97565b611d34565b34801561070b57600080fd5b506102a061071a366004612791565b611d69565b34801561072b57600080fd5b506102a0611e04565b34801561074057600080fd5b5061075461074f366004612bdd565b611e42565b6040516102779190612c82565b34801561076d57600080fd5b5061034f611ef3565b34801561078257600080fd5b506102a0610791366004612b6b565b611f00565b6000631d9dabef60e11b6001600160e01b0319831614806107c75750631674750f60e21b6001600160e01b03198316145b806107e2575063691f343160e01b6001600160e01b03198316145b806107fd57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000546001600160a01b031633146108365760405162461bcd60e51b815260040161082d90612ce4565b60405180910390fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000858152600960205260409020543361087a6000546001600160a01b031690565b6001600160a01b0316148061091157506002546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e9060240160206040518083038186803b1580156108ce57600080fd5b505afa1580156108e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109069190612d19565b6001600160a01b0316145b61092d5760405162461bcd60e51b815260040161082d90612d36565b600086815260096020526040902054801580159061095857506000818152600a602052604090205415155b6109745760405162461bcd60e51b815260040161082d90612d5e565b7fd1f86c93d831119ad98fe983e643a7431e4ac992e3ead6e3007f4dd1adf6634386866040516020016109a8929190612d87565b604051602081830303815290604052805190602001201415610a005760405162461bcd60e51b815260206004820152601160248201527031b0b73737ba1039b2ba1030bb30ba30b960791b604482015260640161082d565b8383600460008a81526020019081526020016000208888604051610a25929190612d87565b908152604051908190036020019020610a3f929091612645565b508585604051610a50929190612d87565b6040518091039020877fd8c9334b1a9c2f9da342a0a2b32629c1a229b6445dad78947f674b44444a75508888604051610a8a929190612d97565b60405180910390a350505050505050565b6000546001600160a01b03163314610ac55760405162461bcd60e51b815260040161082d90612ce4565b600d55565b6000818152600960205260408120548015801590610af557506000818152600a602052604090205415155b610b115760405162461bcd60e51b815260040161082d90612d5e565b6002546040516331a9108f60e11b8152600481018390526001600160a01b0390911690636352211e9060240160206040518083038186803b158015610b5557600080fd5b505afa158015610b69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8d9190612d19565b9392505050565b6000546001600160a01b03163314610bbe5760405162461bcd60e51b815260040161082d90612ce4565b6040514790339082156108fc029083906000818181858888f19350505050158015610bed573d6000803e3d6000fd5b5050565b600b6020526000908152604090208054610c0a90612dc6565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3690612dc6565b8015610c835780601f10610c5857610100808354040283529160200191610c83565b820191906000526020600020905b815481529060010190602001808311610c6657829003601f168201915b505050505081565b6000546001600160a01b03163314610cb55760405162461bcd60e51b815260040161082d90612ce4565b610cc160068383612645565b50610cca611f52565b6003555050565b6000546001600160a01b03163314610cfb5760405162461bcd60e51b815260040161082d90612ce4565b6001600160a01b038116610d0e57600080fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b158015610d5057600080fd5b505afa158015610d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d889190612e01565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb90604401602060405180830381600087803b158015610dd357600080fd5b505af1158015610de7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0b9190612e1a565b505050565b8033610e246000546001600160a01b031690565b6001600160a01b03161480610ebb57506002546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e9060240160206040518083038186803b158015610e7857600080fd5b505afa158015610e8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb09190612d19565b6001600160a01b0316145b610ed75760405162461bcd60e51b815260040161082d90612d36565b610ee28484846118bc565b50505050565b6000546001600160a01b03163314610f125760405162461bcd60e51b815260040161082d90612ce4565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000838152600960205260409020546060908015801590610f6257506000818152600a602052604090205415155b610f7e5760405162461bcd60e51b815260040161082d90612d5e565b7fd1f86c93d831119ad98fe983e643a7431e4ac992e3ead6e3007f4dd1adf663438484604051602001610fb2929190612d87565b60405160208183030381529060405280519060200120141561104f5760085460ff16611008576007610fe38261200f565b604051602001610ff4929190612ed6565b604051602081830303815290604052611047565b60025461101d906001600160a01b0316612114565b6110268261200f565b604051602001611037929190612f0a565b6040516020818303038152906040525b915050610b8d565b60008581526004602052604090819020905161106e9086908690612d87565b9081526020016040518091039020805461108790612dc6565b80601f01602080910402602001604051908101604052809291908181526020018280546110b390612dc6565b80156111005780601f106110d557610100808354040283529160200191611100565b820191906000526020600020905b8154815290600101906020018083116110e357829003601f168201915b50505050509150509392505050565b6002546040516370a0823160e01b81526001600160a01b0383811660048301526060926000929116906370a082319060240160206040518083038186803b15801561115957600080fd5b505afa15801561116d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111919190612e01565b90506000816001600160401b038111156111ad576111ad612a82565b6040519080825280602002602001820160405280156111d6578160200160208202803683370190505b5090506000805b838110156112bf57600254604051632f745c5960e01b81526001600160a01b038881166004830152602482018490526000921690632f745c599060440160206040518083038186803b15801561123257600080fd5b505afa158015611246573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126a9190612e01565b6000818152600a6020526040902054909150156112ac5780848461128d81612f78565b95508151811061129f5761129f612f93565b6020026020010181815250505b50806112b781612f78565b9150506111dd565b506000816001600160401b038111156112da576112da612a82565b604051908082528060200260200182016040528015611303578160200160208202803683370190505b50905060005b8281101561135a5783818151811061132357611323612f93565b602002602001015182828151811061133d5761133d612f93565b60209081029190910101528061135281612f78565b915050611309565b5095945050505050565b600081815260096020526040902054606090156113b1576000828152600b6020908152604091829020915161139d929160069101612fa9565b6040516020818303038152906040526107fd565b505060408051602081019091526000815290565b6000546001600160a01b031633146113ef5760405162461bcd60e51b815260040161082d90612ce4565b60405162461bcd60e51b815260206004820152602660248201527f536f727279202d20796f752063616e6e6f742072656e6f756e6365206f776e656044820152653939b434b81760d11b606482015260840161082d565b6000546001600160a01b031633146114705760405162461bcd60e51b815260040161082d90612ce4565b60005b81811015610e0b576001600f600085858581811061149357611493612f93565b90506020020160208101906114a89190612791565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806114da81612f78565b915050611473565b6000546001600160a01b0316331461150c5760405162461bcd60e51b815260040161082d90612ce4565b8051610bed9060079060208401906126c9565b6001600160a01b0381166000908152600f602052604090205460609060ff168061154b5750600e5460ff165b806115785750816001600160a01b031661156d6000546001600160a01b031690565b6001600160a01b0316145b15611586576107fd826122ff565b60408051600080825260208201909252905b5092915050565b6000546001600160a01b031633146115c95760405162461bcd60e51b815260040161082d90612ce4565b6008805460ff19811660ff90911615179055565b60068054610c0a90612dc6565b6000808383604051602001611600929190612d87565b604051602081830303815290604052805190602001209050600060035482604051602001611638929190918252602082015260400190565b60408051601f1981840301815291815281516020928301206000818152600990935291205490915061166b57600061166d565b805b95945050505050565b803361168a6000546001600160a01b031690565b6001600160a01b0316148061172157506002546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e9060240160206040518083038186803b1580156116de57600080fd5b505afa1580156116f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117169190612d19565b6001600160a01b0316145b61173d5760405162461bcd60e51b815260040161082d90612d36565b6000828152600a602052604090819020546001549151631ef3fca760e31b81526004810182905290916001600160a01b03169063f79fe5389060240160206040518083038186803b15801561179157600080fd5b505afa1580156117a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c99190612e1a565b6118155760405162461bcd60e51b815260206004820152601960248201527f5375622d646f6d61696e20646f6573206e6f7420657869737400000000000000604482015260640161082d565b6040805160208082018084526000808452858152600b909252929020905161183d92906126c9565b506000818152600960209081526040808320839055858352600a8252808320839055338352600582528083208684529091529020544210801561188b57506000546001600160a01b03163314155b15610e0b5761189c42610708612fdf565b336000908152600560209081526040808320878452909152902055505050565b80336118d06000546001600160a01b031690565b6001600160a01b0316148061196757506002546040516331a9108f60e11b81526004810183905233916001600160a01b031690636352211e9060240160206040518083038186803b15801561192457600080fd5b505afa158015611938573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195c9190612d19565b6001600160a01b0316145b6119835760405162461bcd60e51b815260040161082d90612d36565b6000828152600a6020526040902054156119df5760405162461bcd60e51b815260206004820152601a60248201527f546f6b656e2068617320616c7265616479206265656e20736574000000000000604482015260640161082d565b336000908152600f602052604090205460ff16806119ff5750600e5460ff165b80611a23575033611a186000546001600160a01b031690565b6001600160a01b0316145b611a3f5760405162461bcd60e51b815260040161082d90612d36565b60008484604051602001611a54929190612d87565b604051602081830303815290604052805190602001209050600060035482604051602001611a8c929190918252602082015260400190565b60408051808303601f19018152908290528051602090910120600154631ef3fca760e31b8352600483018290529092506001600160a01b03169063f79fe5389060240160206040518083038186803b158015611ae757600080fd5b505afa158015611afb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1f9190612e1a565b1580611b3557506000546001600160a01b031633145b611b815760405162461bcd60e51b815260206004820152601960248201527f7375622d646f6d61696e20616c72656164792065786973747300000000000000604482015260640161082d565b6001546003546040516305ef2c7f60e41b8152600481019190915260248101849052336044820152306064820152600060848201526001600160a01b0390911690635ef2c7f09060a401600060405180830381600087803b158015611be557600080fd5b505af1158015611bf9573d6000803e3d6000fd5b5050506000828152600960209081526040808320889055878352600a8252808320859055848352600b9091529020611c3391508787612645565b508585604051611c44929190612d87565b6040519081900381206002546331a9108f60e11b835260048301879052909186916001600160a01b031690636352211e9060240160206040518083038186803b158015611c9057600080fd5b505afa158015611ca4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc89190612d19565b6001600160a01b03167fa16b10a6d8a8b7e20fab669fb2b5acd39c210216e639cdd3190a0c1fe2b7cc7b60405160405180910390a4505050505050565b6000546001600160a01b03163314611d2f5760405162461bcd60e51b815260040161082d90612ce4565b600c55565b6004602090815260009283526040909220815180830184018051928152908401929093019190912091528054610c0a90612dc6565b6000546001600160a01b03163314611d935760405162461bcd60e51b815260040161082d90612ce4565b6001600160a01b038116611df85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161082d565b611e0181612549565b50565b6000546001600160a01b03163314611e2e5760405162461bcd60e51b815260040161082d90612ce4565b600e805460ff19811660ff90911615179055565b6060600082516001600160401b03811115611e5f57611e5f612a82565b604051908082528060200260200182016040528015611e9257816020015b6060815260200190600190039081611e7d5790505b50905060005b835181101561159857611ec3848281518110611eb657611eb6612f93565b6020026020010151612599565b828281518110611ed557611ed5612f93565b60200260200101819052508080611eeb90612f78565b915050611e98565b60078054610c0a90612dc6565b6000546001600160a01b03163314611f2a5760405162461bcd60e51b815260040161082d90612ce4565b6001600160a01b03909116600090815260056020908152604080832093835292905290812055565b604051620cae8d60eb1b6020820152600090819060230160405160208183030381529060405280519060200120604051602001611f99929190918252602082015260400190565b604051602081830303815290604052805190602001209050806006604051602001611fc49190612ff7565b60405160208183030381529060405280519060200120604051602001611ff4929190918252602082015260400190565b60405160208183030381529060405280519060200120905090565b6060816120335750506040805180820190915260018152600360fc1b602082015290565b8160005b811561205d578061204781612f78565b91506120569050600a83613019565b9150612037565b6000816001600160401b0381111561207757612077612a82565b6040519080825280601f01601f1916602001820160405280156120a1576020820181803683370190505b5090505b841561210c576120b660018361302d565b91506120c3600a86613044565b6120ce906030612fdf565b60f81b8183815181106120e3576120e3612f93565b60200101906001600160f81b031916908160001a905350612105600a86613019565b94506120a5565b949350505050565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b60208201528151603380825260608281019094526001600160a01b0385169291600091602082018180368337019050509050600360fc1b8160008151811061217f5761217f612f93565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106121ae576121ae612f93565b60200101906001600160f81b031916908160001a90535060005b60148110156122f657826004856121e084600c612fdf565b602081106121f0576121f0612f93565b1a60f81b6001600160f81b031916901c60f81c60ff168151811061221657612216612f93565b01602001516001600160f81b03191682612231836002613058565b61223c906002612fdf565b8151811061224c5761224c612f93565b60200101906001600160f81b031916908160001a905350828461227083600c612fdf565b6020811061228057612280612f93565b825191901a600f1690811061229757612297612f93565b01602001516001600160f81b031916826122b2836002613058565b6122bd906003612fdf565b815181106122cd576122cd612f93565b60200101906001600160f81b031916908160001a905350806122ee81612f78565b9150506121c8565b50949350505050565b6002546040516370a0823160e01b81526001600160a01b0383811660048301526060926000929116906370a082319060240160206040518083038186803b15801561234957600080fd5b505afa15801561235d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123819190612e01565b90506000816001600160401b0381111561239d5761239d612a82565b6040519080825280602002602001820160405280156123c6578160200160208202803683370190505b5090506000805b838110156124ae57600254604051632f745c5960e01b81526001600160a01b038881166004830152602482018490526000921690632f745c599060440160206040518083038186803b15801561242257600080fd5b505afa158015612436573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061245a9190612e01565b6000818152600a602052604090205490915061249b5780848461247c81612f78565b95508151811061248e5761248e612f93565b6020026020010181815250505b50806124a681612f78565b9150506123cd565b506000816001600160401b038111156124c9576124c9612a82565b6040519080825280602002602001820160405280156124f2578160200160208202803683370190505b50905060005b8281101561135a5783818151811061251257612512612f93565b602002602001015182828151811061252c5761252c612f93565b60209081029190910101528061254181612f78565b9150506124f8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000818152600a60205260409020546060906126035760405162461bcd60e51b815260206004820152602360248201527f546f6b656e20646f6573206e6f74206861766520616e20454e532072656769736044820152623a32b960e91b606482015260840161082d565b6000828152600a60209081526040808320548352600b825291829020915161262f929160069101612fa9565b6040516020818303038152906040529050919050565b82805461265190612dc6565b90600052602060002090601f01602090048101928261267357600085556126b9565b82601f1061268c5782800160ff198235161785556126b9565b828001600101855582156126b9579182015b828111156126b957823582559160200191906001019061269e565b506126c592915061273d565b5090565b8280546126d590612dc6565b90600052602060002090601f0160209004810192826126f757600085556126b9565b82601f1061271057805160ff19168380011785556126b9565b828001600101855582156126b9579182015b828111156126b9578251825591602001919060010190612722565b5b808211156126c5576000815560010161273e565b60006020828403121561276457600080fd5b81356001600160e01b031981168114610b8d57600080fd5b6001600160a01b0381168114611e0157600080fd5b6000602082840312156127a357600080fd5b8135610b8d8161277c565b60008083601f8401126127c057600080fd5b5081356001600160401b038111156127d757600080fd5b6020830191508360208285010111156127ef57600080fd5b9250929050565b60008060008060006060868803121561280e57600080fd5b8535945060208601356001600160401b038082111561282c57600080fd5b61283889838a016127ae565b9096509450604088013591508082111561285157600080fd5b5061285e888289016127ae565b969995985093965092949392505050565b60006020828403121561288157600080fd5b5035919050565b60005b838110156128a357818101518382015260200161288b565b83811115610ee25750506000910152565b600081518084526128cc816020860160208601612888565b601f01601f19169290920160200192915050565b602081526000610b8d60208301846128b4565b6000806020838503121561290657600080fd5b82356001600160401b0381111561291c57600080fd5b612928858286016127ae565b90969095509350505050565b60008060006040848603121561294957600080fd5b83356001600160401b0381111561295f57600080fd5b61296b868287016127ae565b909790965060209590950135949350505050565b60008060006040848603121561299457600080fd5b8335925060208401356001600160401b038111156129b157600080fd5b6129bd868287016127ae565b9497909650939450505050565b6020808252825182820181905260009190848201906040850190845b81811015612a02578351835292840192918401916001016129e6565b50909695505050505050565b60008060208385031215612a2157600080fd5b82356001600160401b0380821115612a3857600080fd5b818501915085601f830112612a4c57600080fd5b813581811115612a5b57600080fd5b8660208260051b8501011115612a7057600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715612ac057612ac0612a82565b604052919050565b600082601f830112612ad957600080fd5b81356001600160401b03811115612af257612af2612a82565b612b05601f8201601f1916602001612a98565b818152846020838601011115612b1a57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215612b4957600080fd5b81356001600160401b03811115612b5f57600080fd5b61210c84828501612ac8565b60008060408385031215612b7e57600080fd5b8235612b898161277c565b946020939093013593505050565b60008060408385031215612baa57600080fd5b8235915060208301356001600160401b03811115612bc757600080fd5b612bd385828601612ac8565b9150509250929050565b60006020808385031215612bf057600080fd5b82356001600160401b0380821115612c0757600080fd5b818501915085601f830112612c1b57600080fd5b813581811115612c2d57612c2d612a82565b8060051b9150612c3e848301612a98565b8181529183018401918481019088841115612c5857600080fd5b938501935b83851015612c7657843582529385019390850190612c5d565b98975050505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015612cd757603f19888603018452612cc58583516128b4565b94509285019290850190600101612ca9565b5092979650505050505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215612d2b57600080fd5b8151610b8d8161277c565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5cd95960921b604082015260600190565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b8183823760009101908152919050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b600181811c90821680612dda57607f821691505b60208210811415612dfb57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215612e1357600080fd5b5051919050565b600060208284031215612e2c57600080fd5b81518015158114610b8d57600080fd5b8054600090600181811c9080831680612e5657607f831692505b6020808410821415612e7857634e487b7160e01b600052602260045260246000fd5b818015612e8c5760018114612e9d57612eca565b60ff19861689528489019650612eca565b60008881526020902060005b86811015612ec25781548b820152908501908301612ea9565b505084890196505b50505050505092915050565b6000612ee28285612e3c565b8351612ef2818360208801612888565b631733b4b360e11b9101908152600401949350505050565b6f32b4b8189a9a9d1897b2b9319b99189d60811b815260008351612f35816010850160208801612888565b602f60f81b6010918401918201528351612f56816011840160208801612888565b01601101949350505050565b634e487b7160e01b600052601160045260246000fd5b6000600019821415612f8c57612f8c612f62565b5060010190565b634e487b7160e01b600052603260045260246000fd5b6000612fb58285612e3c565b601760f91b8152612fc96001820185612e3c565b6305ccae8d60e31b815260040195945050505050565b60008219821115612ff257612ff2612f62565b500190565b6000610b8d8284612e3c565b634e487b7160e01b600052601260045260246000fd5b60008261302857613028613003565b500490565b60008282101561303f5761303f612f62565b500390565b60008261305357613053613003565b500690565b600081600019048311821515161561307257613072612f62565b50029056fea264697066735822122030207463cded83dc3174623cd0724be2a3733e4ad638d53e9bbdb395f382002a64736f6c63430008090033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.