More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 236 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim | 21286897 | 31 days ago | IN | 0 ETH | 0.00219359 | ||||
Claim | 21272620 | 33 days ago | IN | 0 ETH | 0.00446091 | ||||
Claim | 21272616 | 33 days ago | IN | 0 ETH | 0.00448952 | ||||
Claim | 21272606 | 33 days ago | IN | 0 ETH | 0.00373976 | ||||
Claim | 21154370 | 49 days ago | IN | 0 ETH | 0.00125145 | ||||
Claim | 20578785 | 129 days ago | IN | 0 ETH | 0.00082363 | ||||
Claim | 20324172 | 165 days ago | IN | 0 ETH | 0.00236374 | ||||
Claim | 20324164 | 165 days ago | IN | 0 ETH | 0.00238225 | ||||
Claim | 20324158 | 165 days ago | IN | 0 ETH | 0.00229879 | ||||
Claim | 20324150 | 165 days ago | IN | 0 ETH | 0.00229962 | ||||
Claim | 20324142 | 165 days ago | IN | 0 ETH | 0.00210914 | ||||
Claim | 20267073 | 173 days ago | IN | 0 ETH | 0.00080176 | ||||
Claim | 20267066 | 173 days ago | IN | 0 ETH | 0.00067367 | ||||
Claim | 20267058 | 173 days ago | IN | 0 ETH | 0.00070744 | ||||
Claim | 20267054 | 173 days ago | IN | 0 ETH | 0.00081044 | ||||
Claim | 20267049 | 173 days ago | IN | 0 ETH | 0.00078605 | ||||
Claim | 20267043 | 173 days ago | IN | 0 ETH | 0.00073509 | ||||
Claim | 20267036 | 173 days ago | IN | 0 ETH | 0.0008312 | ||||
Claim | 20267029 | 173 days ago | IN | 0 ETH | 0.00081163 | ||||
Claim | 20266986 | 173 days ago | IN | 0 ETH | 0.00074436 | ||||
Claim | 20266978 | 173 days ago | IN | 0 ETH | 0.00081604 | ||||
Claim | 20109193 | 195 days ago | IN | 0 ETH | 0.00084608 | ||||
Claim | 20096276 | 197 days ago | IN | 0 ETH | 0.0010878 | ||||
Claim | 19975652 | 214 days ago | IN | 0 ETH | 0.0034137 | ||||
Claim | 19932674 | 220 days ago | IN | 0 ETH | 0.00287039 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
TomiDNSMarketplace
Compiler Version
v0.8.13+commit.abaa5c0e
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: Unlicense pragma solidity ^0.8.0; import "../ethregistrar/IERC20.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "../ethregistrar/SafeMath.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; import "@openzeppelin/contracts/interfaces/IERC721Receiver.sol"; contract ERC721Holder is IERC721Receiver { function onERC721Received( address, address, uint256, bytes calldata ) public pure override returns (bytes4) { return this.onERC721Received.selector; } } interface IPartner { function safeMint(address, uint256) external returns(uint256); function updateBaseURI(string memory) external; function getDnsOfNFT(uint256) external view returns(uint256); function ownerOf(uint256) external view returns(address); } contract TomiDNSMarketplace is ERC721Holder, ReentrancyGuard, Ownable { using SafeMath for uint256; /// @notice Token used for payments IERC20 public tomiToken; /// @notice NFT used for auctions IERC721 public tomiDNS; /// @notice Name Wrapper address public contractor; /// @notice Minter NFT IPartner public partnerNFT; /// @notice DaoTreasury address public treasury; /// @notice tomi team address public tomiWallet; /// @notice Minimum delta between current and previous bid uint8 public minBidIncrementPercentage; /// @notice Duration of bidding for an auction uint256 public auctionDuration; uint256 public auctionBufferTime; uint256 public auctionBumpTime; /// @notice Distribution percentage of minter, bidders and affiliates uint8[3] public distributionPercentages; uint256 public expiryTime; mapping (bytes32 => bool) private _isHashClaimed; address public signerWallet; // structs struct Bidding { address bidder; uint256 amount; } struct Auction { uint256 tokenId; address minter; uint256 mintAmount; uint256 startTime; uint256 expiryTime; bool isClaimed; bool biddingStarted; uint256 CashBackAmount; uint256 partnerAmount; uint256 partnerClaimedAmount; uint256 affiliateAmount; uint256 affiliateClaimedAmount; uint256 DaoAndTomiAmount; uint256 partnerId; } // mappings /// @notice Gives the active/highest bid for an NFT mapping (uint256 => Bidding) public getBiddings; /// @notice Gives the auction details for an NFT mapping (uint256 => Auction) public getAuctions; // events event UpdatedContractor(address indexed oldContractor, address indexed newContractor); event UpdatedReservePrice(uint256 oldReservePrice, uint256 newReservePrice); event UpdatedMinBidIncrementPercentage(uint256 oldMinBidIncrementPercentage, uint256 newMinBidIncrementPercentage); event UpdatedAuctionBufferTime(uint256 oldAuctionBufferTime, uint256 newAuctionBufferTime); event UpdatedAuctionBumpTime(uint256 oldAuctionBumpTime, uint256 newAuctionBumpTime); event UpdatedReclaimDiscount(uint256 oldReclaimDiscount, uint256 newReclaimDiscount); event PartnerClaimed(uint256 partnerId , uint256 _tokenId, uint256 amount , address claimedBy); event CashbackClaimed(uint256 _tokenId, uint256 amount , address claimedBy); event AffiliateClaimed(uint256 _tokenId, uint256 amount, address claimedBy); event AuctionCreated( uint256 tokenId, address indexed minter, uint256 mintAmount, uint256 startTime, uint256 expiryTime, string label, bytes32 indexed labelhash, string tld, uint256 partnerId ); event AuctionExtended( uint256 tokenId, uint256 expiryTime ); event BidCreated( uint256 tokenId, address indexed bidder, uint256 amount, uint256 difference ); event Claimed( uint256 tokenId, address indexed minter, address indexed claimer, uint256 amount ); event Reclaimed( uint256 tokenId, address indexed minter, uint256 amount ); constructor( IERC20 _tomi , IERC721 _dns , address _contracter, IPartner _partner, address _signerWallet ) { treasury = 0x834335177a99F952da03b15ba6FA3859B175f1e1; tomiWallet = 0x379D1e20c4FCe5E0b7914277dB448a8439b5245b; minBidIncrementPercentage = 15; // TODO change auctionDuration = 1715773475; // TODO change auctionBumpTime = 10 minutes; auctionBufferTime = 10 minutes; distributionPercentages = [25, 20 , 30]; tomiToken = _tomi; tomiDNS = _dns; contractor = _contracter; partnerNFT = _partner; signerWallet = _signerWallet; } function updateContractor(address _contractor) external onlyOwner { require(_contractor != contractor, "TomiDNSMarketplace: Contractor is already this address"); emit UpdatedContractor(contractor, _contractor); contractor = _contractor; } function updateNFT(address _NFT) external onlyOwner { require(_NFT != contractor, "TomiDNSMarketplace: NFT is already this address"); emit UpdatedContractor(contractor, _NFT); tomiDNS = IERC721(_NFT); } function updateDistributionPercentages(uint8[3] calldata _distributionPercentages) external onlyOwner { require(_distributionPercentages[0] + _distributionPercentages[1] == 100, "TomiDNSMarketplace: Total percentage should always equal 100"); distributionPercentages = _distributionPercentages; } function updateMinBidIncrementPercentage(uint8 _minBidIncrementPercentage) external onlyOwner { require(_minBidIncrementPercentage != minBidIncrementPercentage, "TomiDNSMarketplace: Minimum Bid Increment Percentage is already this value"); emit UpdatedMinBidIncrementPercentage(minBidIncrementPercentage, _minBidIncrementPercentage); minBidIncrementPercentage = _minBidIncrementPercentage; } function updateAuctionBufferTime(uint256 _auctionBufferTime) external onlyOwner { require(_auctionBufferTime != auctionBufferTime, "TomiDNSMarketplace: Auction Buffer Time is already this value"); emit UpdatedAuctionBufferTime(auctionBufferTime, _auctionBufferTime); auctionBufferTime = _auctionBufferTime; } function updateAuctionBumpTime(uint256 _auctionBumpTime) external onlyOwner { require(_auctionBumpTime != auctionBumpTime, "TomiDNSMarketplace: Auction Bump Time is already this value"); emit UpdatedAuctionBumpTime(auctionBumpTime, _auctionBumpTime); auctionBumpTime = _auctionBumpTime; } function changeSigner(address _signer) external onlyOwner { signerWallet = _signer; } function setOnAuction( address _minter, uint256 _tokenId, string memory _label, bytes32 _labelhash, string memory _tld, uint256 amount ) external onlyContract { Auction memory auction; auction.tokenId = _tokenId; auction.minter = _minter; auction.mintAmount = amount; auction.startTime = block.timestamp; if(auctionDuration < block.timestamp){ auction.expiryTime = block.timestamp.add(2 weeks); }else{ auction.expiryTime = auctionDuration; } auction.CashBackAmount = amount.mul(5).div(100); auction.affiliateAmount = amount.mul(distributionPercentages[2]).div(100); auction.DaoAndTomiAmount = amount.sub(auction.CashBackAmount).sub(auction.affiliateAmount); uint256 partnerId = partnerNFT.safeMint(_minter, _tokenId); auction.partnerId = partnerId; getAuctions[_tokenId] = auction; Bidding storage bidding = getBiddings[_tokenId]; bidding.bidder = _minter; bidding.amount = amount; emit AuctionCreated( _tokenId, auction.minter, auction.mintAmount, auction.startTime, auction.expiryTime, _label, _labelhash, _tld, partnerId ); emit BidCreated(_tokenId, _minter, amount, 0); } function bid(uint256 _tokenId, uint256 _amount) external nonReentrant { Auction storage auction = getAuctions[_tokenId]; require(_tokenId == auction.tokenId, "TomiDNSMarketplace: Not on auction"); require(!auction.isClaimed, "TomiDNSMarketplace: Already claimed"); require(block.timestamp < auction.expiryTime, "TomiDNSMarketplace: Auction finished"); Bidding storage bidding = getBiddings[_tokenId]; require( _amount >= bidding.amount.add(bidding.amount.mul(minBidIncrementPercentage).div(100)), "TomiDNSMarketplace: Bid should exceed last bid by a certain perceentage" ); tomiToken.transferFrom(_msgSender(), address(this), _amount); uint256 diff = _amount.sub(bidding.amount); uint256 forPartner = diff.mul(distributionPercentages[0]).div(100); uint256 forBidder = diff.mul(distributionPercentages[1]).div(100); uint256 forAffiliate = diff.mul(distributionPercentages[2]).div(100); uint256 forDaoAndTomi; auction.partnerAmount = auction.partnerAmount.add(forPartner); auction.affiliateAmount = auction.affiliateAmount.add(forAffiliate); if(auction.biddingStarted){ tomiToken.transfer(bidding.bidder, bidding.amount.add(forBidder)); forDaoAndTomi = diff.sub(forPartner).sub(forBidder).sub(forAffiliate); }else{ tomiToken.transfer(bidding.bidder, forBidder); auction.biddingStarted = true; forDaoAndTomi = _amount.sub(forPartner).sub(forBidder).sub(forAffiliate); } auction.DaoAndTomiAmount = auction.DaoAndTomiAmount.add(forDaoAndTomi); bool isBufferTime = auction.expiryTime - block.timestamp < auctionBufferTime; if (isBufferTime) { auction.expiryTime += auctionBumpTime; emit AuctionExtended(_tokenId, auction.expiryTime); } bidding.bidder = _msgSender(); bidding.amount = _amount; emit BidCreated(_tokenId, _msgSender(), _amount , diff); } function claim(uint256 _tokenId) external nonReentrant { Auction storage auction = getAuctions[_tokenId]; require(_tokenId == auction.tokenId, "TomiDNSMarketplace: Not on auction"); require(!auction.isClaimed, "TomiDNSMarketplace: Already claimed"); require(block.timestamp >= auction.expiryTime, "TomiDNSMarketplace: Auction not yet finished"); Bidding memory bidding = getBiddings[_tokenId]; uint256 treasuryAmount = auction.DaoAndTomiAmount.div(2); uint256 tomiAmount = auction.DaoAndTomiAmount.div(2); tomiToken.transfer(treasury, treasuryAmount); tomiToken.transfer(tomiWallet, tomiAmount); tomiDNS.transferFrom(address(this), bidding.bidder, _tokenId); auction.isClaimed = true; emit Claimed(_tokenId, auction.minter, bidding.bidder, bidding.amount); } function getPartnerReward(uint256 id) view public returns(uint256){ uint256 _tokenId = partnerNFT.getDnsOfNFT(id); Auction memory auction = getAuctions[_tokenId]; return auction.partnerAmount.sub(auction.partnerClaimedAmount); } function partnerClaimReward(uint256 id) public nonReentrant { uint256 toClaim = getPartnerReward(id); uint256 _tokenId = partnerNFT.getDnsOfNFT(id); address sendTo = partnerNFT.ownerOf(id); Auction storage auction = getAuctions[_tokenId]; auction.partnerClaimedAmount = auction.partnerClaimedAmount.add(toClaim); tomiToken.transfer(sendTo, toClaim); emit PartnerClaimed(id, _tokenId, toClaim, sendTo); } function partnerClaimRewardMultiple(uint256[] memory ids) public { for(uint256 i = 0 ; i < ids.length ; i++){ partnerClaimReward(ids[i]); } } function getCashbackReward(uint256 _tokenId) view public returns(uint256){ Auction memory auction = getAuctions[_tokenId]; return auction.CashBackAmount; } function minterCashbackClaim(uint256 _tokenId, uint8 v, bytes32 r, bytes32 s) public nonReentrant { verifySignCashBack(_tokenId, v, r, s); Auction storage auction = getAuctions[_tokenId]; address sendTo = auction.minter; uint256 amount = getCashbackReward(_tokenId); auction.CashBackAmount = 0; tomiToken.transfer(sendTo, amount); emit CashbackClaimed(_tokenId, amount, sendTo); } function minterCashbackClaimMultiple(uint256[] memory _tokenIds, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public { for(uint256 i = 0 ; i < _tokenIds.length ; i++){ minterCashbackClaim(_tokenIds[i], v[i], r[i], s[i]); } } function affiliateClaim(uint256 _tokenId, uint256 amount, string memory id, uint8 v, bytes32 r, bytes32 s) public nonReentrant { verifySign(amount, _tokenId, id, v, r, s); Auction storage auction = getAuctions[_tokenId]; address sendTo = _msgSender(); require(auction.affiliateClaimedAmount.add(amount) <= auction.affiliateAmount , "TomiDNSMarketplace: Invalid amount"); auction.affiliateClaimedAmount = auction.affiliateClaimedAmount.add(amount); tomiToken.transfer(sendTo, amount); emit AffiliateClaimed(_tokenId, amount, sendTo); } function affiliateClaimMultiple(uint256[] memory _tokenIds , uint256[] memory amounts, string[] memory ids, uint8[] memory v, bytes32[] memory r, bytes32[] memory s) public { for(uint256 i = 0 ; i < _tokenIds.length ; i++){ affiliateClaim(_tokenIds[i] , amounts[i] , ids[i], v[i], r[i], s[i]); } } function updatePartnerBaseURI(string memory _uri) public onlyOwner{ partnerNFT.updateBaseURI(_uri); } function verifySignCashBack(uint256 _tokenId, uint8 v, bytes32 r, bytes32 s) internal view returns(bool){ bytes32 encodedMessageHash = keccak256(abi.encodePacked(address(this), _msgSender(), bytes32(_tokenId))); require(signerWallet == ecrecover(getSignedHash(encodedMessageHash), v, r, s), "Invalid Claim"); return true; } function verifySign(uint256 amount, uint256 _tokenId, string memory id, uint8 v, bytes32 r, bytes32 s) internal returns(bool){ bytes32 encodedMessageHash = keccak256(abi.encodePacked(address(this), _msgSender(), amount, bytes32(_tokenId) , id)); require(_isHashClaimed[encodedMessageHash] == false, "Already claimed"); require(signerWallet == ecrecover(getSignedHash(encodedMessageHash), v, r, s), "Invalid Claim"); _isHashClaimed[encodedMessageHash] = true; return true; } function getSignedHash(bytes32 _messageHash) private pure returns(bytes32){ return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", _messageHash)); } // modifiers modifier onlyContract { require(msg.sender == contractor, "TomiDNSMarketplace: Only Registrar Contract can call this function"); _; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); }
pragma solidity >=0.8.4; /** * @title SafeMath * @dev Unsigned math operations with safety checks that revert on error */ library SafeMath { /** * @dev Multiplies two unsigned integers, reverts on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b); return c; } /** * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a); uint256 c = a - b; return c; } /** * @dev Adds two unsigned integers, reverts on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a); return c; } /** * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo), * reverts when dividing by zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0); return a % b; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (interfaces/IERC721Receiver.sol) pragma solidity ^0.8.0; import "../token/ERC721/IERC721Receiver.sol";
// 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 (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`, 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; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// 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; } }
// 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); }
{ "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":[{"internalType":"contract IERC20","name":"_tomi","type":"address"},{"internalType":"contract IERC721","name":"_dns","type":"address"},{"internalType":"address","name":"_contracter","type":"address"},{"internalType":"contract IPartner","name":"_partner","type":"address"},{"internalType":"address","name":"_signerWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"claimedBy","type":"address"}],"name":"AffiliateClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"mintAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"expiryTime","type":"uint256"},{"indexed":false,"internalType":"string","name":"label","type":"string"},{"indexed":true,"internalType":"bytes32","name":"labelhash","type":"bytes32"},{"indexed":false,"internalType":"string","name":"tld","type":"string"},{"indexed":false,"internalType":"uint256","name":"partnerId","type":"uint256"}],"name":"AuctionCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"expiryTime","type":"uint256"}],"name":"AuctionExtended","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"bidder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"difference","type":"uint256"}],"name":"BidCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"claimedBy","type":"address"}],"name":"CashbackClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"minter","type":"address"},{"indexed":true,"internalType":"address","name":"claimer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"partnerId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"claimedBy","type":"address"}],"name":"PartnerClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Reclaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldAuctionBufferTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newAuctionBufferTime","type":"uint256"}],"name":"UpdatedAuctionBufferTime","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldAuctionBumpTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newAuctionBumpTime","type":"uint256"}],"name":"UpdatedAuctionBumpTime","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldContractor","type":"address"},{"indexed":true,"internalType":"address","name":"newContractor","type":"address"}],"name":"UpdatedContractor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldMinBidIncrementPercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newMinBidIncrementPercentage","type":"uint256"}],"name":"UpdatedMinBidIncrementPercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldReclaimDiscount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newReclaimDiscount","type":"uint256"}],"name":"UpdatedReclaimDiscount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldReservePrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newReservePrice","type":"uint256"}],"name":"UpdatedReservePrice","type":"event"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"id","type":"string"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"affiliateClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"string[]","name":"ids","type":"string[]"},{"internalType":"uint8[]","name":"v","type":"uint8[]"},{"internalType":"bytes32[]","name":"r","type":"bytes32[]"},{"internalType":"bytes32[]","name":"s","type":"bytes32[]"}],"name":"affiliateClaimMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"auctionBufferTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"auctionBumpTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"auctionDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"bid","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_signer","type":"address"}],"name":"changeSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"distributionPercentages","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"expiryTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getAuctions","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"minter","type":"address"},{"internalType":"uint256","name":"mintAmount","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"expiryTime","type":"uint256"},{"internalType":"bool","name":"isClaimed","type":"bool"},{"internalType":"bool","name":"biddingStarted","type":"bool"},{"internalType":"uint256","name":"CashBackAmount","type":"uint256"},{"internalType":"uint256","name":"partnerAmount","type":"uint256"},{"internalType":"uint256","name":"partnerClaimedAmount","type":"uint256"},{"internalType":"uint256","name":"affiliateAmount","type":"uint256"},{"internalType":"uint256","name":"affiliateClaimedAmount","type":"uint256"},{"internalType":"uint256","name":"DaoAndTomiAmount","type":"uint256"},{"internalType":"uint256","name":"partnerId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getBiddings","outputs":[{"internalType":"address","name":"bidder","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getCashbackReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getPartnerReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minBidIncrementPercentage","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"minterCashbackClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"},{"internalType":"uint8[]","name":"v","type":"uint8[]"},{"internalType":"bytes32[]","name":"r","type":"bytes32[]"},{"internalType":"bytes32[]","name":"s","type":"bytes32[]"}],"name":"minterCashbackClaimMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"partnerClaimReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"partnerClaimRewardMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"partnerNFT","outputs":[{"internalType":"contract IPartner","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_label","type":"string"},{"internalType":"bytes32","name":"_labelhash","type":"bytes32"},{"internalType":"string","name":"_tld","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setOnAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"signerWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tomiDNS","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tomiToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tomiWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_auctionBufferTime","type":"uint256"}],"name":"updateAuctionBufferTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_auctionBumpTime","type":"uint256"}],"name":"updateAuctionBumpTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contractor","type":"address"}],"name":"updateContractor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8[3]","name":"_distributionPercentages","type":"uint8[3]"}],"name":"updateDistributionPercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_minBidIncrementPercentage","type":"uint8"}],"name":"updateMinBidIncrementPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_NFT","type":"address"}],"name":"updateNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"updatePartnerBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200347f3803806200347f833981016040819052620000349162000254565b6001600055620000443362000138565b600680546001600160a01b03191673834335177a99f952da03b15ba6fa3859b175f1e117905560078054740f379d1e20c4fce5e0b7914277db448a8439b5245b6001600160a81b0319909116179055636644a023600855610258600a819055600955604080516060810182526019815260146020820152601e91810191909152620000d490600b9060036200018a565b50600280546001600160a01b03199081166001600160a01b03978816179091556003805482169587169590951790945560048054851693861693909317909255600580548416918516919091179055600e80549092169216919091179055620002d4565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600183019183908215620002125791602002820160005b83821115620001e157835183826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302620001a1565b8015620002105782816101000a81549060ff0219169055600101602081600001049283019260010302620001e1565b505b506200022092915062000224565b5090565b5b8082111562000220576000815560010162000225565b6001600160a01b03811681146200025157600080fd5b50565b600080600080600060a086880312156200026d57600080fd5b85516200027a816200023b565b60208701519095506200028d816200023b565b6040870151909450620002a0816200023b565b6060870151909350620002b3816200023b565b6080870151909250620002c6816200023b565b809150509295509295909350565b61319b80620002e46000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c8063598647f811610130578063a50371cc116100b8578063c35984a01161007c578063c35984a0146105f6578063e1bf7b7514610609578063e1c5eea21461061c578063f2fde38b1461062f578063fbfd20451461064257600080fd5b8063a50371cc14610596578063aad2b723146105a9578063aeabef6a146105bc578063b296024d146105cf578063b3215bb7146105e357600080fd5b8063715018a6116100ff578063715018a61461054e5780638b654cf5146105565780638da5cb5b1461056957806399bc0aea1461057a5780639bccc0eb1461058357600080fd5b8063598647f8146105025780635be68e931461051557806361d027b31461052857806364f0d35e1461053b57600080fd5b80632213eae0116101be5780634a865e4f116101825780634a865e4f146104a35780634c0a5182146104b6578063559618bb146104c95780635802b826146104dc5780635969ae7c146104ef57600080fd5b80632213eae0146104055780633387a57814610418578063344ba1971461042b57806334cc07871461043e578063379607f51461049057600080fd5b8063150b7a0211610205578063150b7a021461028457806316ab2ece146102bc57806316be3d90146102e757806316c40727146103d75780631f99966a146103e057600080fd5b80630c348ef5146102375780630cbf54c81461024c5780630d554261146102685780631124605a1461027b575b600080fd5b61024a610245366004612819565b610655565b005b61025560085481565b6040519081526020015b60405180910390f35b61024a61027636600461293a565b610a96565b610255600a5481565b6102a361029236600461296f565b630a85bd0160e11b95945050505050565b6040516001600160e01b0319909116815260200161025f565b6007546102cf906001600160a01b031681565b6040516001600160a01b03909116815260200161025f565b6103676102f5366004612a0e565b601060205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b0154600b8c0154600c909c01549a9b6001600160a01b03909a169a98999798969760ff8088169861010090980416968e565b604080519e8f526001600160a01b03909d1660208f01529b8d019a909a5260608c019890985260808b019690965293151560a08a015291151560c089015260e08801526101008701526101208601526101408501526101608401526101808301526101a08201526101c00161025f565b61025560095481565b6103f36103ee366004612a0e565b610ada565b60405160ff909116815260200161025f565b61024a610413366004612a3d565b610b04565b6003546102cf906001600160a01b031681565b61024a610439366004612a5f565b610c2e565b61047161044c366004612a0e565b600f60205260009081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b03909316835260208301919091520161025f565b61024a61049e366004612a0e565b610d31565b61024a6104b1366004612a7c565b611050565b6102556104c4366004612a0e565b6111e7565b61024a6104d7366004612aef565b611331565b61024a6104ea366004612b24565b6113c0565b61024a6104fd366004612bc1565b6114f5565b61024a610510366004612c6e565b611583565b61024a610523366004612a5f565b611aaa565b6006546102cf906001600160a01b031681565b600e546102cf906001600160a01b031681565b61024a611ba6565b6005546102cf906001600160a01b031681565b6001546001600160a01b03166102cf565b610255600c5481565b61024a610591366004612a0e565b611bdc565b61024a6105a4366004612a0e565b611cbe565b61024a6105b7366004612a5f565b611ed0565b61024a6105ca366004612a0e565b611f1c565b6007546103f390600160a01b900460ff1681565b61024a6105f1366004612c90565b611ffe565b61024a610604366004612d38565b6120d4565b610255610617366004612a0e565b61219f565b6002546102cf906001600160a01b031681565b61024a61063d366004612a5f565b612267565b6004546102cf906001600160a01b031681565b6004546001600160a01b031633146106e55760405162461bcd60e51b815260206004820152604260248201527f546f6d69444e534d61726b6574706c6163653a204f6e6c79205265676973747260448201527f617220436f6e74726163742063616e2063616c6c20746869732066756e63746960648201526137b760f11b608482015260a4015b60405180910390fd5b610764604051806101c001604052806000815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600015158152602001600015158152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8581526001600160a01b038716602082015260408101829052426060820181905260085410156107a55761079b4262127500612302565b60808201526107ae565b60085460808201525b6107c460646107be846005612327565b9061235c565b60e08201526107f260646107be600b60025b6020810491909101548691601f166101000a900460ff16612327565b610140820181905260e0820151610815919061080f908590612376565b90612376565b610180820152600554604051632851206560e21b81526001600160a01b03898116600483015260248201899052600092169063a1448194906044016020604051808303816000875af115801561086f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108939190612e43565b905080826101a001818152505081601060008981526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548160ff02191690831515021790555060c08201518160050160016101000a81548160ff02191690831515021790555060e0820151816006015561010082015181600701556101208201518160080155610140820151816009015561016082015181600a015561018082015181600b01556101a082015181600c01559050506000600f60008981526020019081526020016000209050888160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508381600101819055508583602001516001600160a01b03167f21ba2e1eb28a604f23580912c9867fd3ab7cf6fa5284f5600a2f03e471ede77d8a8660400151876060015188608001518d8c8a604051610a379796959493929190612eb8565b60405180910390a3604080518981526020810186905260008183015290516001600160a01b038b16917f77689ebf788c0f9d9e045fa81e22903cc7a1e34686c3fa4874c9a6a4d8a239f5919081900360600190a2505050505050505050565b60005b8151811015610ad657610ac4828281518110610ab757610ab7612e2d565b6020026020010151611cbe565b80610ace81612f20565b915050610a99565b5050565b600b8160038110610aea57600080fd5b60209182820401919006915054906101000a900460ff1681565b6001546001600160a01b03163314610b2e5760405162461bcd60e51b81526004016106dc90612f39565b60075460ff600160a01b909104811690821603610bc65760405162461bcd60e51b815260206004820152604a60248201527f546f6d69444e534d61726b6574706c6163653a204d696e696d756d204269642060448201527f496e6372656d656e742050657263656e7461676520697320616c726561647920606482015269746869732076616c756560b01b608482015260a4016106dc565b6007546040805160ff600160a01b9093048316815291831660208301527f9a266de57278b8e3b6a18180ba24b44b584e1be4da9c5845a7bc4b708ace4735910160405180910390a16007805460ff909216600160a01b0260ff60a01b19909216919091179055565b6001546001600160a01b03163314610c585760405162461bcd60e51b81526004016106dc90612f39565b6004546001600160a01b0390811690821603610cd55760405162461bcd60e51b815260206004820152603660248201527f546f6d69444e534d61726b6574706c6163653a20436f6e74726163746f7220696044820152757320616c72656164792074686973206164647265737360501b60648201526084016106dc565b6004546040516001600160a01b038084169216907f7cac4ee0a0f1b01873b683f84e8b3919fa2ccd806b9f4dbd0f9fb5237b74aa4f90600090a3600480546001600160a01b0319166001600160a01b0392909216919091179055565b600260005403610d535760405162461bcd60e51b81526004016106dc90612f6e565b6002600090815581815260106020526040902080548214610d865760405162461bcd60e51b81526004016106dc90612fa5565b600581015460ff1615610dab5760405162461bcd60e51b81526004016106dc90612fe7565b8060040154421015610e145760405162461bcd60e51b815260206004820152602c60248201527f546f6d69444e534d61726b6574706c6163653a2041756374696f6e206e6f742060448201526b1e595d08199a5b9a5cda195960a21b60648201526084016106dc565b6000828152600f60209081526040808320815180830190925280546001600160a01b031682526001015491810191909152600b830154909190610e5890600261235c565b90506000610e74600285600b015461235c90919063ffffffff16565b60025460065460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101869052929350169063a9059cbb906044016020604051808303816000875af1158015610ecb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eef919061302a565b5060025460075460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810184905291169063a9059cbb906044016020604051808303816000875af1158015610f45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f69919061302a565b5060035483516040516323b872dd60e01b81523060048201526001600160a01b039182166024820152604481018890529116906323b872dd90606401600060405180830381600087803b158015610fbf57600080fd5b505af1158015610fd3573d6000803e3d6000fd5b50505060058501805460ff1916600190811790915584519086015460208601516040516001600160a01b03938416945091909216917fce3bcb6e219596cf26007ffdfaae8953bc3f76e3f36c0a79b23e28020da3222e9161103c918a8252602082015260400190565b60405180910390a350506001600055505050565b6002600054036110725760405162461bcd60e51b81526004016106dc90612f6e565b6002600055611085858786868686612391565b5060008681526010602052604090206009810154600a8201543391906110ab9089612302565b11156111045760405162461bcd60e51b815260206004820152602260248201527f546f6d69444e534d61726b6574706c6163653a20496e76616c696420616d6f756044820152611b9d60f21b60648201526084016106dc565b600a8201546111139088612302565b600a83015560025460405163a9059cbb60e01b81526001600160a01b038381166004830152602482018a90529091169063a9059cbb906044016020604051808303816000875af115801561116b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118f919061302a565b5060408051898152602081018990526001600160a01b0383168183015290517f9078433060e9bd601dcb8ae93daa38c362c4229ec712817ed4fc903fa813e67a9181900360600190a150506001600055505050505050565b600554604051637bdcb43960e11b81526004810183905260009182916001600160a01b039091169063f7b9687290602401602060405180830381865afa158015611235573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112599190612e43565b60008181526010602090815260409182902082516101c0810184528154815260018201546001600160a01b0316928101929092526002810154928201929092526003820154606082015260048201546080820152600582015460ff808216151560a08401526101009182900416151560c0830152600683015460e08301526007830154908201819052600883015461012083018190526009840154610140840152600a840154610160840152600b840154610180840152600c909301546101a08301529293509161132991612376565b949350505050565b6001546001600160a01b0316331461135b5760405162461bcd60e51b81526004016106dc90612f39565b60055460405163931688cb60e01b81526001600160a01b039091169063931688cb9061138b90849060040161304c565b600060405180830381600087803b1580156113a557600080fd5b505af11580156113b9573d6000803e3d6000fd5b5050505050565b6002600054036113e25760405162461bcd60e51b81526004016106dc90612f6e565b60026000556113f3848484846124f1565b506000848152601060205260408120600181015490916001600160a01b039091169061141e8761219f565b6000600685015560025460405163a9059cbb60e01b81526001600160a01b0385811660048301526024820184905292935091169063a9059cbb906044016020604051808303816000875af115801561147a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149e919061302a565b5060408051888152602081018390526001600160a01b0384168183015290517f91724ff61867ce92a3bf1f30c8911bb11fa862cf207cf3475fc7c81c3c5718f09181900360600190a1505060016000555050505050565b60005b84518110156113b95761157185828151811061151657611516612e2d565b602002602001015185838151811061153057611530612e2d565b602002602001015185848151811061154a5761154a612e2d565b602002602001015185858151811061156457611564612e2d565b60200260200101516113c0565b8061157b81612f20565b9150506114f8565b6002600054036115a55760405162461bcd60e51b81526004016106dc90612f6e565b60026000908155828152601060205260409020805483146115d85760405162461bcd60e51b81526004016106dc90612fa5565b600581015460ff16156115fd5760405162461bcd60e51b81526004016106dc90612fe7565b8060040154421061165c5760405162461bcd60e51b8152602060048201526024808201527f546f6d69444e534d61726b6574706c6163653a2041756374696f6e2066696e696044820152631cda195960e21b60648201526084016106dc565b6000838152600f60205260409020600754600182015461169c91611691916064916107be9190600160a01b900460ff16612327565b600183015490612302565b8310156117215760405162461bcd60e51b815260206004820152604760248201527f546f6d69444e534d61726b6574706c6163653a204269642073686f756c64206560448201527f7863656564206c617374206269642062792061206365727461696e207065726360648201526665656e7461676560c81b608482015260a4016106dc565b6002546001600160a01b03166323b872dd336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018690526064016020604051808303816000875af1158015611786573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117aa919061302a565b5060006117c482600101548561237690919063ffffffff16565b905060006117d860646107be600b846107d6565b600b549091506000906117fb906064906107be908690610100900460ff16612327565b600b5490915060009061181f906064906107be90879062010000900460ff16612327565b9050600061183a84886007015461230290919063ffffffff16565b6007880155600987015461184e9083612302565b60098801556005870154610100900460ff161561191457600254865460018801546001600160a01b039283169263a9059cbb92169061188d9087612302565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156118d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fc919061302a565b5061190d8261080f85818989612376565b90506119b1565b600254865460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810186905291169063a9059cbb906044016020604051808303816000875af1158015611968573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198c919061302a565b5060058701805461ff0019166101001790556119ae8261080f85818c89612376565b90505b600b8701546119c09082612302565b600b8801556009546004880154600091906119dc90429061305f565b1090508015611a4057600a548860040160008282546119fb9190613076565b90915550506004880154604080518c815260208101929092527f6e912a3a9105bdd2af817ba5adc14e6c127c1035b5b648faa29ca0d58ab8ff4e910160405180910390a15b86546001600160a01b031916339081178855600188018a9055604080518c8152602081018c905280820189905290517f77689ebf788c0f9d9e045fa81e22903cc7a1e34686c3fa4874c9a6a4d8a239f59181900360600190a2505060016000555050505050505050565b6001546001600160a01b03163314611ad45760405162461bcd60e51b81526004016106dc90612f39565b6004546001600160a01b0390811690821603611b4a5760405162461bcd60e51b815260206004820152602f60248201527f546f6d69444e534d61726b6574706c6163653a204e465420697320616c72656160448201526e64792074686973206164647265737360881b60648201526084016106dc565b6004546040516001600160a01b038084169216907f7cac4ee0a0f1b01873b683f84e8b3919fa2ccd806b9f4dbd0f9fb5237b74aa4f90600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314611bd05760405162461bcd60e51b81526004016106dc90612f39565b611bda60006125fd565b565b6001546001600160a01b03163314611c065760405162461bcd60e51b81526004016106dc90612f39565b600a548103611c7d5760405162461bcd60e51b815260206004820152603b60248201527f546f6d69444e534d61726b6574706c6163653a2041756374696f6e2042756d7060448201527f2054696d6520697320616c726561647920746869732076616c7565000000000060648201526084016106dc565b600a5460408051918252602082018390527f89e5c964c3daa7e36b9215a10d608130904961f3bf65ba7dac24af8d601526e5910160405180910390a1600a55565b600260005403611ce05760405162461bcd60e51b81526004016106dc90612f6e565b60026000908155611cf0826111e7565b600554604051637bdcb43960e11b8152600481018590529192506000916001600160a01b039091169063f7b9687290602401602060405180830381865afa158015611d3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d639190612e43565b6005546040516331a9108f60e11b8152600481018690529192506000916001600160a01b0390911690636352211e90602401602060405180830381865afa158015611db2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd6919061308e565b6000838152601060205260409020600881015491925090611df79085612302565b600882015560025460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018790529091169063a9059cbb906044016020604051808303816000875af1158015611e4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e73919061302a565b5060408051868152602081018590529081018590526001600160a01b03831660608201527f39d07c4702a50d295d0755a2413eb6e386618b9e17100ef630ac3ba40a7616909060800160405180910390a150506001600055505050565b6001546001600160a01b03163314611efa5760405162461bcd60e51b81526004016106dc90612f39565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314611f465760405162461bcd60e51b81526004016106dc90612f39565b6009548103611fbd5760405162461bcd60e51b815260206004820152603d60248201527f546f6d69444e534d61726b6574706c6163653a2041756374696f6e204275666660448201527f65722054696d6520697320616c726561647920746869732076616c756500000060648201526084016106dc565b60095460408051918252602082018390527f7fadb8a3557834bf2dade7479251cfaa8d25502eef02975b9744d70a3b59b6e7910160405180910390a1600955565b6001546001600160a01b031633146120285760405162461bcd60e51b81526004016106dc90612f39565b6120386040820160208301612a3d565b6120456020830183612a3d565b61204f91906130ab565b60ff166064146120c75760405162461bcd60e51b815260206004820152603c60248201527f546f6d69444e534d61726b6574706c6163653a20546f74616c2070657263656e60448201527f746167652073686f756c6420616c7761797320657175616c203130300000000060648201526084016106dc565b610ad6600b8260036126a2565b60005b8651811015612196576121848782815181106120f5576120f5612e2d565b602002602001015187838151811061210f5761210f612e2d565b602002602001015187848151811061212957612129612e2d565b602002602001015187858151811061214357612143612e2d565b602002602001015187868151811061215d5761215d612e2d565b602002602001015187878151811061217757612177612e2d565b6020026020010151611050565b8061218e81612f20565b9150506120d7565b50505050505050565b60009081526010602090815260409182902082516101c0810184528154815260018201546001600160a01b0316928101929092526002810154928201929092526003820154606082015260048201546080820152600582015460ff808216151560a08401526101009182900416151560c0830152600683015460e0830181905260078401549183019190915260088301546101208301526009830154610140830152600a830154610160830152600b830154610180830152600c909201546101a09091015290565b6001546001600160a01b031633146122915760405162461bcd60e51b81526004016106dc90612f39565b6001600160a01b0381166122f65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106dc565b6122ff816125fd565b50565b60008061230f8385613076565b90508381101561231e57600080fd5b90505b92915050565b60008260000361233957506000612321565b600061234583856130d0565b90508261235285836130ef565b1461231e57600080fd5b600080821161236a57600080fd5b600061132983856130ef565b60008282111561238557600080fd5b6000611329838561305f565b60008030336040516123ad9291908b908b908b90602001613111565b60408051601f1981840301815291815281516020928301206000818152600d90935291205490915060ff16156124175760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e4818db185a5b5959608a1b60448201526064016106dc565b60016124228261264f565b6040805160008152602081018083529290925260ff881690820152606081018690526080810185905260a0016020604051602081039080840390855afa158015612470573d6000803e3d6000fd5b5050604051601f190151600e546001600160a01b0390811691161490506124c95760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420436c61696d60981b60448201526064016106dc565b6000908152600d60205260409020805460ff1916600190811790915590509695505050505050565b60008030336040516bffffffffffffffffffffffff19606093841b811660208301529190921b16603482015260488101879052606801604051602081830303815290604052805190602001209050600161254a8261264f565b6040805160008152602081018083529290925260ff881690820152606081018690526080810185905260a0016020604051602081039080840390855afa158015612598573d6000803e3d6000fd5b5050604051601f190151600e546001600160a01b0390811691161490506125f15760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420436c61696d60981b60448201526064016106dc565b50600195945050505050565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b6001830191839082156127285791602002820160005b838211156126f957833560ff1683826101000a81548160ff021916908360ff16021790555092602001926001016020816000010492830192600103026126b8565b80156127265782816101000a81549060ff02191690556001016020816000010492830192600103026126f9565b505b50612734929150612738565b5090565b5b808211156127345760008155600101612739565b6001600160a01b03811681146122ff57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156127a1576127a1612762565b604052919050565b600082601f8301126127ba57600080fd5b813567ffffffffffffffff8111156127d4576127d4612762565b6127e7601f8201601f1916602001612778565b8181528460208386010111156127fc57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561283257600080fd5b863561283d8161274d565b955060208701359450604087013567ffffffffffffffff8082111561286157600080fd5b61286d8a838b016127a9565b955060608901359450608089013591508082111561288a57600080fd5b5061289789828a016127a9565b92505060a087013590509295509295509295565b600067ffffffffffffffff8211156128c5576128c5612762565b5060051b60200190565b600082601f8301126128e057600080fd5b813560206128f56128f0836128ab565b612778565b82815260059290921b8401810191818101908684111561291457600080fd5b8286015b8481101561292f5780358352918301918301612918565b509695505050505050565b60006020828403121561294c57600080fd5b813567ffffffffffffffff81111561296357600080fd5b611329848285016128cf565b60008060008060006080868803121561298757600080fd5b85356129928161274d565b945060208601356129a28161274d565b935060408601359250606086013567ffffffffffffffff808211156129c657600080fd5b818801915088601f8301126129da57600080fd5b8135818111156129e957600080fd5b8960208285010111156129fb57600080fd5b9699959850939650602001949392505050565b600060208284031215612a2057600080fd5b5035919050565b803560ff81168114612a3857600080fd5b919050565b600060208284031215612a4f57600080fd5b612a5882612a27565b9392505050565b600060208284031215612a7157600080fd5b813561231e8161274d565b60008060008060008060c08789031215612a9557600080fd5b8635955060208701359450604087013567ffffffffffffffff811115612aba57600080fd5b612ac689828a016127a9565b945050612ad560608801612a27565b92506080870135915060a087013590509295509295509295565b600060208284031215612b0157600080fd5b813567ffffffffffffffff811115612b1857600080fd5b611329848285016127a9565b60008060008060808587031215612b3a57600080fd5b84359350612b4a60208601612a27565b93969395505050506040820135916060013590565b600082601f830112612b7057600080fd5b81356020612b806128f0836128ab565b82815260059290921b84018101918181019086841115612b9f57600080fd5b8286015b8481101561292f57612bb481612a27565b8352918301918301612ba3565b60008060008060808587031215612bd757600080fd5b843567ffffffffffffffff80821115612bef57600080fd5b612bfb888389016128cf565b95506020870135915080821115612c1157600080fd5b612c1d88838901612b5f565b94506040870135915080821115612c3357600080fd5b612c3f888389016128cf565b93506060870135915080821115612c5557600080fd5b50612c62878288016128cf565b91505092959194509250565b60008060408385031215612c8157600080fd5b50508035926020909101359150565b600060608284031215612ca257600080fd5b82606083011115612cb257600080fd5b50919050565b600082601f830112612cc957600080fd5b81356020612cd96128f0836128ab565b82815260059290921b84018101918181019086841115612cf857600080fd5b8286015b8481101561292f57803567ffffffffffffffff811115612d1c5760008081fd5b612d2a8986838b01016127a9565b845250918301918301612cfc565b60008060008060008060c08789031215612d5157600080fd5b863567ffffffffffffffff80821115612d6957600080fd5b612d758a838b016128cf565b97506020890135915080821115612d8b57600080fd5b612d978a838b016128cf565b96506040890135915080821115612dad57600080fd5b612db98a838b01612cb8565b95506060890135915080821115612dcf57600080fd5b612ddb8a838b01612b5f565b94506080890135915080821115612df157600080fd5b612dfd8a838b016128cf565b935060a0890135915080821115612e1357600080fd5b50612e2089828a016128cf565b9150509295509295509295565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612e5557600080fd5b5051919050565b60005b83811015612e77578181015183820152602001612e5f565b83811115612e86576000848401525b50505050565b60008151808452612ea4816020860160208601612e5c565b601f01601f19169290920160200192915050565b87815286602082015285604082015284606082015260e060808201526000612ee360e0830186612e8c565b82810360a0840152612ef58186612e8c565b9150508260c083015298975050505050505050565b634e487b7160e01b600052601160045260246000fd5b600060018201612f3257612f32612f0a565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526022908201527f546f6d69444e534d61726b6574706c6163653a204e6f74206f6e20617563746960408201526137b760f11b606082015260800190565b60208082526023908201527f546f6d69444e534d61726b6574706c6163653a20416c726561647920636c61696040820152621b595960ea1b606082015260800190565b60006020828403121561303c57600080fd5b8151801515811461231e57600080fd5b602081526000612a586020830184612e8c565b60008282101561307157613071612f0a565b500390565b6000821982111561308957613089612f0a565b500190565b6000602082840312156130a057600080fd5b815161231e8161274d565b600060ff821660ff84168060ff038211156130c8576130c8612f0a565b019392505050565b60008160001904831182151516156130ea576130ea612f0a565b500290565b60008261310c57634e487b7160e01b600052601260045260246000fd5b500490565b60006bffffffffffffffffffffffff19808860601b168352808760601b166014840152508460288301528360488301528251613154816068850160208701612e5c565b91909101606801969550505050505056fea2646970667358221220fa3b75aa779b2495fca5c6430cf3c315536452d364558fb6c752f4d965f4edcc64736f6c634300080d00330000000000000000000000004385328cc4d643ca98dfea734360c0f596c83449000000000000000000000000893d5e7ffe6a489186fcd1ebf6bc5c83a4c42505000000000000000000000000e2096c37364d48d9292c0cef29aa27d0653c1af4000000000000000000000000ca521b7accb512cf218fe19fedecc6d8399fcbbb000000000000000000000000745dcabb8fe4e505368736f63cb15765d272d541
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102325760003560e01c8063598647f811610130578063a50371cc116100b8578063c35984a01161007c578063c35984a0146105f6578063e1bf7b7514610609578063e1c5eea21461061c578063f2fde38b1461062f578063fbfd20451461064257600080fd5b8063a50371cc14610596578063aad2b723146105a9578063aeabef6a146105bc578063b296024d146105cf578063b3215bb7146105e357600080fd5b8063715018a6116100ff578063715018a61461054e5780638b654cf5146105565780638da5cb5b1461056957806399bc0aea1461057a5780639bccc0eb1461058357600080fd5b8063598647f8146105025780635be68e931461051557806361d027b31461052857806364f0d35e1461053b57600080fd5b80632213eae0116101be5780634a865e4f116101825780634a865e4f146104a35780634c0a5182146104b6578063559618bb146104c95780635802b826146104dc5780635969ae7c146104ef57600080fd5b80632213eae0146104055780633387a57814610418578063344ba1971461042b57806334cc07871461043e578063379607f51461049057600080fd5b8063150b7a0211610205578063150b7a021461028457806316ab2ece146102bc57806316be3d90146102e757806316c40727146103d75780631f99966a146103e057600080fd5b80630c348ef5146102375780630cbf54c81461024c5780630d554261146102685780631124605a1461027b575b600080fd5b61024a610245366004612819565b610655565b005b61025560085481565b6040519081526020015b60405180910390f35b61024a61027636600461293a565b610a96565b610255600a5481565b6102a361029236600461296f565b630a85bd0160e11b95945050505050565b6040516001600160e01b0319909116815260200161025f565b6007546102cf906001600160a01b031681565b6040516001600160a01b03909116815260200161025f565b6103676102f5366004612a0e565b601060205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b0154600b8c0154600c909c01549a9b6001600160a01b03909a169a98999798969760ff8088169861010090980416968e565b604080519e8f526001600160a01b03909d1660208f01529b8d019a909a5260608c019890985260808b019690965293151560a08a015291151560c089015260e08801526101008701526101208601526101408501526101608401526101808301526101a08201526101c00161025f565b61025560095481565b6103f36103ee366004612a0e565b610ada565b60405160ff909116815260200161025f565b61024a610413366004612a3d565b610b04565b6003546102cf906001600160a01b031681565b61024a610439366004612a5f565b610c2e565b61047161044c366004612a0e565b600f60205260009081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b03909316835260208301919091520161025f565b61024a61049e366004612a0e565b610d31565b61024a6104b1366004612a7c565b611050565b6102556104c4366004612a0e565b6111e7565b61024a6104d7366004612aef565b611331565b61024a6104ea366004612b24565b6113c0565b61024a6104fd366004612bc1565b6114f5565b61024a610510366004612c6e565b611583565b61024a610523366004612a5f565b611aaa565b6006546102cf906001600160a01b031681565b600e546102cf906001600160a01b031681565b61024a611ba6565b6005546102cf906001600160a01b031681565b6001546001600160a01b03166102cf565b610255600c5481565b61024a610591366004612a0e565b611bdc565b61024a6105a4366004612a0e565b611cbe565b61024a6105b7366004612a5f565b611ed0565b61024a6105ca366004612a0e565b611f1c565b6007546103f390600160a01b900460ff1681565b61024a6105f1366004612c90565b611ffe565b61024a610604366004612d38565b6120d4565b610255610617366004612a0e565b61219f565b6002546102cf906001600160a01b031681565b61024a61063d366004612a5f565b612267565b6004546102cf906001600160a01b031681565b6004546001600160a01b031633146106e55760405162461bcd60e51b815260206004820152604260248201527f546f6d69444e534d61726b6574706c6163653a204f6e6c79205265676973747260448201527f617220436f6e74726163742063616e2063616c6c20746869732066756e63746960648201526137b760f11b608482015260a4015b60405180910390fd5b610764604051806101c001604052806000815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600015158152602001600015158152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8581526001600160a01b038716602082015260408101829052426060820181905260085410156107a55761079b4262127500612302565b60808201526107ae565b60085460808201525b6107c460646107be846005612327565b9061235c565b60e08201526107f260646107be600b60025b6020810491909101548691601f166101000a900460ff16612327565b610140820181905260e0820151610815919061080f908590612376565b90612376565b610180820152600554604051632851206560e21b81526001600160a01b03898116600483015260248201899052600092169063a1448194906044016020604051808303816000875af115801561086f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108939190612e43565b905080826101a001818152505081601060008981526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548160ff02191690831515021790555060c08201518160050160016101000a81548160ff02191690831515021790555060e0820151816006015561010082015181600701556101208201518160080155610140820151816009015561016082015181600a015561018082015181600b01556101a082015181600c01559050506000600f60008981526020019081526020016000209050888160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508381600101819055508583602001516001600160a01b03167f21ba2e1eb28a604f23580912c9867fd3ab7cf6fa5284f5600a2f03e471ede77d8a8660400151876060015188608001518d8c8a604051610a379796959493929190612eb8565b60405180910390a3604080518981526020810186905260008183015290516001600160a01b038b16917f77689ebf788c0f9d9e045fa81e22903cc7a1e34686c3fa4874c9a6a4d8a239f5919081900360600190a2505050505050505050565b60005b8151811015610ad657610ac4828281518110610ab757610ab7612e2d565b6020026020010151611cbe565b80610ace81612f20565b915050610a99565b5050565b600b8160038110610aea57600080fd5b60209182820401919006915054906101000a900460ff1681565b6001546001600160a01b03163314610b2e5760405162461bcd60e51b81526004016106dc90612f39565b60075460ff600160a01b909104811690821603610bc65760405162461bcd60e51b815260206004820152604a60248201527f546f6d69444e534d61726b6574706c6163653a204d696e696d756d204269642060448201527f496e6372656d656e742050657263656e7461676520697320616c726561647920606482015269746869732076616c756560b01b608482015260a4016106dc565b6007546040805160ff600160a01b9093048316815291831660208301527f9a266de57278b8e3b6a18180ba24b44b584e1be4da9c5845a7bc4b708ace4735910160405180910390a16007805460ff909216600160a01b0260ff60a01b19909216919091179055565b6001546001600160a01b03163314610c585760405162461bcd60e51b81526004016106dc90612f39565b6004546001600160a01b0390811690821603610cd55760405162461bcd60e51b815260206004820152603660248201527f546f6d69444e534d61726b6574706c6163653a20436f6e74726163746f7220696044820152757320616c72656164792074686973206164647265737360501b60648201526084016106dc565b6004546040516001600160a01b038084169216907f7cac4ee0a0f1b01873b683f84e8b3919fa2ccd806b9f4dbd0f9fb5237b74aa4f90600090a3600480546001600160a01b0319166001600160a01b0392909216919091179055565b600260005403610d535760405162461bcd60e51b81526004016106dc90612f6e565b6002600090815581815260106020526040902080548214610d865760405162461bcd60e51b81526004016106dc90612fa5565b600581015460ff1615610dab5760405162461bcd60e51b81526004016106dc90612fe7565b8060040154421015610e145760405162461bcd60e51b815260206004820152602c60248201527f546f6d69444e534d61726b6574706c6163653a2041756374696f6e206e6f742060448201526b1e595d08199a5b9a5cda195960a21b60648201526084016106dc565b6000828152600f60209081526040808320815180830190925280546001600160a01b031682526001015491810191909152600b830154909190610e5890600261235c565b90506000610e74600285600b015461235c90919063ffffffff16565b60025460065460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101869052929350169063a9059cbb906044016020604051808303816000875af1158015610ecb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eef919061302a565b5060025460075460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810184905291169063a9059cbb906044016020604051808303816000875af1158015610f45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f69919061302a565b5060035483516040516323b872dd60e01b81523060048201526001600160a01b039182166024820152604481018890529116906323b872dd90606401600060405180830381600087803b158015610fbf57600080fd5b505af1158015610fd3573d6000803e3d6000fd5b50505060058501805460ff1916600190811790915584519086015460208601516040516001600160a01b03938416945091909216917fce3bcb6e219596cf26007ffdfaae8953bc3f76e3f36c0a79b23e28020da3222e9161103c918a8252602082015260400190565b60405180910390a350506001600055505050565b6002600054036110725760405162461bcd60e51b81526004016106dc90612f6e565b6002600055611085858786868686612391565b5060008681526010602052604090206009810154600a8201543391906110ab9089612302565b11156111045760405162461bcd60e51b815260206004820152602260248201527f546f6d69444e534d61726b6574706c6163653a20496e76616c696420616d6f756044820152611b9d60f21b60648201526084016106dc565b600a8201546111139088612302565b600a83015560025460405163a9059cbb60e01b81526001600160a01b038381166004830152602482018a90529091169063a9059cbb906044016020604051808303816000875af115801561116b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118f919061302a565b5060408051898152602081018990526001600160a01b0383168183015290517f9078433060e9bd601dcb8ae93daa38c362c4229ec712817ed4fc903fa813e67a9181900360600190a150506001600055505050505050565b600554604051637bdcb43960e11b81526004810183905260009182916001600160a01b039091169063f7b9687290602401602060405180830381865afa158015611235573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112599190612e43565b60008181526010602090815260409182902082516101c0810184528154815260018201546001600160a01b0316928101929092526002810154928201929092526003820154606082015260048201546080820152600582015460ff808216151560a08401526101009182900416151560c0830152600683015460e08301526007830154908201819052600883015461012083018190526009840154610140840152600a840154610160840152600b840154610180840152600c909301546101a08301529293509161132991612376565b949350505050565b6001546001600160a01b0316331461135b5760405162461bcd60e51b81526004016106dc90612f39565b60055460405163931688cb60e01b81526001600160a01b039091169063931688cb9061138b90849060040161304c565b600060405180830381600087803b1580156113a557600080fd5b505af11580156113b9573d6000803e3d6000fd5b5050505050565b6002600054036113e25760405162461bcd60e51b81526004016106dc90612f6e565b60026000556113f3848484846124f1565b506000848152601060205260408120600181015490916001600160a01b039091169061141e8761219f565b6000600685015560025460405163a9059cbb60e01b81526001600160a01b0385811660048301526024820184905292935091169063a9059cbb906044016020604051808303816000875af115801561147a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149e919061302a565b5060408051888152602081018390526001600160a01b0384168183015290517f91724ff61867ce92a3bf1f30c8911bb11fa862cf207cf3475fc7c81c3c5718f09181900360600190a1505060016000555050505050565b60005b84518110156113b95761157185828151811061151657611516612e2d565b602002602001015185838151811061153057611530612e2d565b602002602001015185848151811061154a5761154a612e2d565b602002602001015185858151811061156457611564612e2d565b60200260200101516113c0565b8061157b81612f20565b9150506114f8565b6002600054036115a55760405162461bcd60e51b81526004016106dc90612f6e565b60026000908155828152601060205260409020805483146115d85760405162461bcd60e51b81526004016106dc90612fa5565b600581015460ff16156115fd5760405162461bcd60e51b81526004016106dc90612fe7565b8060040154421061165c5760405162461bcd60e51b8152602060048201526024808201527f546f6d69444e534d61726b6574706c6163653a2041756374696f6e2066696e696044820152631cda195960e21b60648201526084016106dc565b6000838152600f60205260409020600754600182015461169c91611691916064916107be9190600160a01b900460ff16612327565b600183015490612302565b8310156117215760405162461bcd60e51b815260206004820152604760248201527f546f6d69444e534d61726b6574706c6163653a204269642073686f756c64206560448201527f7863656564206c617374206269642062792061206365727461696e207065726360648201526665656e7461676560c81b608482015260a4016106dc565b6002546001600160a01b03166323b872dd336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018690526064016020604051808303816000875af1158015611786573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117aa919061302a565b5060006117c482600101548561237690919063ffffffff16565b905060006117d860646107be600b846107d6565b600b549091506000906117fb906064906107be908690610100900460ff16612327565b600b5490915060009061181f906064906107be90879062010000900460ff16612327565b9050600061183a84886007015461230290919063ffffffff16565b6007880155600987015461184e9083612302565b60098801556005870154610100900460ff161561191457600254865460018801546001600160a01b039283169263a9059cbb92169061188d9087612302565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156118d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fc919061302a565b5061190d8261080f85818989612376565b90506119b1565b600254865460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810186905291169063a9059cbb906044016020604051808303816000875af1158015611968573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198c919061302a565b5060058701805461ff0019166101001790556119ae8261080f85818c89612376565b90505b600b8701546119c09082612302565b600b8801556009546004880154600091906119dc90429061305f565b1090508015611a4057600a548860040160008282546119fb9190613076565b90915550506004880154604080518c815260208101929092527f6e912a3a9105bdd2af817ba5adc14e6c127c1035b5b648faa29ca0d58ab8ff4e910160405180910390a15b86546001600160a01b031916339081178855600188018a9055604080518c8152602081018c905280820189905290517f77689ebf788c0f9d9e045fa81e22903cc7a1e34686c3fa4874c9a6a4d8a239f59181900360600190a2505060016000555050505050505050565b6001546001600160a01b03163314611ad45760405162461bcd60e51b81526004016106dc90612f39565b6004546001600160a01b0390811690821603611b4a5760405162461bcd60e51b815260206004820152602f60248201527f546f6d69444e534d61726b6574706c6163653a204e465420697320616c72656160448201526e64792074686973206164647265737360881b60648201526084016106dc565b6004546040516001600160a01b038084169216907f7cac4ee0a0f1b01873b683f84e8b3919fa2ccd806b9f4dbd0f9fb5237b74aa4f90600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314611bd05760405162461bcd60e51b81526004016106dc90612f39565b611bda60006125fd565b565b6001546001600160a01b03163314611c065760405162461bcd60e51b81526004016106dc90612f39565b600a548103611c7d5760405162461bcd60e51b815260206004820152603b60248201527f546f6d69444e534d61726b6574706c6163653a2041756374696f6e2042756d7060448201527f2054696d6520697320616c726561647920746869732076616c7565000000000060648201526084016106dc565b600a5460408051918252602082018390527f89e5c964c3daa7e36b9215a10d608130904961f3bf65ba7dac24af8d601526e5910160405180910390a1600a55565b600260005403611ce05760405162461bcd60e51b81526004016106dc90612f6e565b60026000908155611cf0826111e7565b600554604051637bdcb43960e11b8152600481018590529192506000916001600160a01b039091169063f7b9687290602401602060405180830381865afa158015611d3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d639190612e43565b6005546040516331a9108f60e11b8152600481018690529192506000916001600160a01b0390911690636352211e90602401602060405180830381865afa158015611db2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd6919061308e565b6000838152601060205260409020600881015491925090611df79085612302565b600882015560025460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018790529091169063a9059cbb906044016020604051808303816000875af1158015611e4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e73919061302a565b5060408051868152602081018590529081018590526001600160a01b03831660608201527f39d07c4702a50d295d0755a2413eb6e386618b9e17100ef630ac3ba40a7616909060800160405180910390a150506001600055505050565b6001546001600160a01b03163314611efa5760405162461bcd60e51b81526004016106dc90612f39565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314611f465760405162461bcd60e51b81526004016106dc90612f39565b6009548103611fbd5760405162461bcd60e51b815260206004820152603d60248201527f546f6d69444e534d61726b6574706c6163653a2041756374696f6e204275666660448201527f65722054696d6520697320616c726561647920746869732076616c756500000060648201526084016106dc565b60095460408051918252602082018390527f7fadb8a3557834bf2dade7479251cfaa8d25502eef02975b9744d70a3b59b6e7910160405180910390a1600955565b6001546001600160a01b031633146120285760405162461bcd60e51b81526004016106dc90612f39565b6120386040820160208301612a3d565b6120456020830183612a3d565b61204f91906130ab565b60ff166064146120c75760405162461bcd60e51b815260206004820152603c60248201527f546f6d69444e534d61726b6574706c6163653a20546f74616c2070657263656e60448201527f746167652073686f756c6420616c7761797320657175616c203130300000000060648201526084016106dc565b610ad6600b8260036126a2565b60005b8651811015612196576121848782815181106120f5576120f5612e2d565b602002602001015187838151811061210f5761210f612e2d565b602002602001015187848151811061212957612129612e2d565b602002602001015187858151811061214357612143612e2d565b602002602001015187868151811061215d5761215d612e2d565b602002602001015187878151811061217757612177612e2d565b6020026020010151611050565b8061218e81612f20565b9150506120d7565b50505050505050565b60009081526010602090815260409182902082516101c0810184528154815260018201546001600160a01b0316928101929092526002810154928201929092526003820154606082015260048201546080820152600582015460ff808216151560a08401526101009182900416151560c0830152600683015460e0830181905260078401549183019190915260088301546101208301526009830154610140830152600a830154610160830152600b830154610180830152600c909201546101a09091015290565b6001546001600160a01b031633146122915760405162461bcd60e51b81526004016106dc90612f39565b6001600160a01b0381166122f65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106dc565b6122ff816125fd565b50565b60008061230f8385613076565b90508381101561231e57600080fd5b90505b92915050565b60008260000361233957506000612321565b600061234583856130d0565b90508261235285836130ef565b1461231e57600080fd5b600080821161236a57600080fd5b600061132983856130ef565b60008282111561238557600080fd5b6000611329838561305f565b60008030336040516123ad9291908b908b908b90602001613111565b60408051601f1981840301815291815281516020928301206000818152600d90935291205490915060ff16156124175760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e4818db185a5b5959608a1b60448201526064016106dc565b60016124228261264f565b6040805160008152602081018083529290925260ff881690820152606081018690526080810185905260a0016020604051602081039080840390855afa158015612470573d6000803e3d6000fd5b5050604051601f190151600e546001600160a01b0390811691161490506124c95760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420436c61696d60981b60448201526064016106dc565b6000908152600d60205260409020805460ff1916600190811790915590509695505050505050565b60008030336040516bffffffffffffffffffffffff19606093841b811660208301529190921b16603482015260488101879052606801604051602081830303815290604052805190602001209050600161254a8261264f565b6040805160008152602081018083529290925260ff881690820152606081018690526080810185905260a0016020604051602081039080840390855afa158015612598573d6000803e3d6000fd5b5050604051601f190151600e546001600160a01b0390811691161490506125f15760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420436c61696d60981b60448201526064016106dc565b50600195945050505050565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b6001830191839082156127285791602002820160005b838211156126f957833560ff1683826101000a81548160ff021916908360ff16021790555092602001926001016020816000010492830192600103026126b8565b80156127265782816101000a81549060ff02191690556001016020816000010492830192600103026126f9565b505b50612734929150612738565b5090565b5b808211156127345760008155600101612739565b6001600160a01b03811681146122ff57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156127a1576127a1612762565b604052919050565b600082601f8301126127ba57600080fd5b813567ffffffffffffffff8111156127d4576127d4612762565b6127e7601f8201601f1916602001612778565b8181528460208386010111156127fc57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561283257600080fd5b863561283d8161274d565b955060208701359450604087013567ffffffffffffffff8082111561286157600080fd5b61286d8a838b016127a9565b955060608901359450608089013591508082111561288a57600080fd5b5061289789828a016127a9565b92505060a087013590509295509295509295565b600067ffffffffffffffff8211156128c5576128c5612762565b5060051b60200190565b600082601f8301126128e057600080fd5b813560206128f56128f0836128ab565b612778565b82815260059290921b8401810191818101908684111561291457600080fd5b8286015b8481101561292f5780358352918301918301612918565b509695505050505050565b60006020828403121561294c57600080fd5b813567ffffffffffffffff81111561296357600080fd5b611329848285016128cf565b60008060008060006080868803121561298757600080fd5b85356129928161274d565b945060208601356129a28161274d565b935060408601359250606086013567ffffffffffffffff808211156129c657600080fd5b818801915088601f8301126129da57600080fd5b8135818111156129e957600080fd5b8960208285010111156129fb57600080fd5b9699959850939650602001949392505050565b600060208284031215612a2057600080fd5b5035919050565b803560ff81168114612a3857600080fd5b919050565b600060208284031215612a4f57600080fd5b612a5882612a27565b9392505050565b600060208284031215612a7157600080fd5b813561231e8161274d565b60008060008060008060c08789031215612a9557600080fd5b8635955060208701359450604087013567ffffffffffffffff811115612aba57600080fd5b612ac689828a016127a9565b945050612ad560608801612a27565b92506080870135915060a087013590509295509295509295565b600060208284031215612b0157600080fd5b813567ffffffffffffffff811115612b1857600080fd5b611329848285016127a9565b60008060008060808587031215612b3a57600080fd5b84359350612b4a60208601612a27565b93969395505050506040820135916060013590565b600082601f830112612b7057600080fd5b81356020612b806128f0836128ab565b82815260059290921b84018101918181019086841115612b9f57600080fd5b8286015b8481101561292f57612bb481612a27565b8352918301918301612ba3565b60008060008060808587031215612bd757600080fd5b843567ffffffffffffffff80821115612bef57600080fd5b612bfb888389016128cf565b95506020870135915080821115612c1157600080fd5b612c1d88838901612b5f565b94506040870135915080821115612c3357600080fd5b612c3f888389016128cf565b93506060870135915080821115612c5557600080fd5b50612c62878288016128cf565b91505092959194509250565b60008060408385031215612c8157600080fd5b50508035926020909101359150565b600060608284031215612ca257600080fd5b82606083011115612cb257600080fd5b50919050565b600082601f830112612cc957600080fd5b81356020612cd96128f0836128ab565b82815260059290921b84018101918181019086841115612cf857600080fd5b8286015b8481101561292f57803567ffffffffffffffff811115612d1c5760008081fd5b612d2a8986838b01016127a9565b845250918301918301612cfc565b60008060008060008060c08789031215612d5157600080fd5b863567ffffffffffffffff80821115612d6957600080fd5b612d758a838b016128cf565b97506020890135915080821115612d8b57600080fd5b612d978a838b016128cf565b96506040890135915080821115612dad57600080fd5b612db98a838b01612cb8565b95506060890135915080821115612dcf57600080fd5b612ddb8a838b01612b5f565b94506080890135915080821115612df157600080fd5b612dfd8a838b016128cf565b935060a0890135915080821115612e1357600080fd5b50612e2089828a016128cf565b9150509295509295509295565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612e5557600080fd5b5051919050565b60005b83811015612e77578181015183820152602001612e5f565b83811115612e86576000848401525b50505050565b60008151808452612ea4816020860160208601612e5c565b601f01601f19169290920160200192915050565b87815286602082015285604082015284606082015260e060808201526000612ee360e0830186612e8c565b82810360a0840152612ef58186612e8c565b9150508260c083015298975050505050505050565b634e487b7160e01b600052601160045260246000fd5b600060018201612f3257612f32612f0a565b5060010190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526022908201527f546f6d69444e534d61726b6574706c6163653a204e6f74206f6e20617563746960408201526137b760f11b606082015260800190565b60208082526023908201527f546f6d69444e534d61726b6574706c6163653a20416c726561647920636c61696040820152621b595960ea1b606082015260800190565b60006020828403121561303c57600080fd5b8151801515811461231e57600080fd5b602081526000612a586020830184612e8c565b60008282101561307157613071612f0a565b500390565b6000821982111561308957613089612f0a565b500190565b6000602082840312156130a057600080fd5b815161231e8161274d565b600060ff821660ff84168060ff038211156130c8576130c8612f0a565b019392505050565b60008160001904831182151516156130ea576130ea612f0a565b500290565b60008261310c57634e487b7160e01b600052601260045260246000fd5b500490565b60006bffffffffffffffffffffffff19808860601b168352808760601b166014840152508460288301528360488301528251613154816068850160208701612e5c565b91909101606801969550505050505056fea2646970667358221220fa3b75aa779b2495fca5c6430cf3c315536452d364558fb6c752f4d965f4edcc64736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004385328cc4d643ca98dfea734360c0f596c83449000000000000000000000000893d5e7ffe6a489186fcd1ebf6bc5c83a4c42505000000000000000000000000e2096c37364d48d9292c0cef29aa27d0653c1af4000000000000000000000000ca521b7accb512cf218fe19fedecc6d8399fcbbb000000000000000000000000745dcabb8fe4e505368736f63cb15765d272d541
-----Decoded View---------------
Arg [0] : _tomi (address): 0x4385328cc4D643Ca98DfEA734360C0F596C83449
Arg [1] : _dns (address): 0x893D5e7FfE6a489186Fcd1EBF6Bc5c83a4c42505
Arg [2] : _contracter (address): 0xe2096c37364D48D9292C0cEF29Aa27D0653c1aF4
Arg [3] : _partner (address): 0xCa521b7ACCb512cf218fE19fedECC6D8399fCbbb
Arg [4] : _signerWallet (address): 0x745dcAbb8fE4e505368736f63cb15765d272d541
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000004385328cc4d643ca98dfea734360c0f596c83449
Arg [1] : 000000000000000000000000893d5e7ffe6a489186fcd1ebf6bc5c83a4c42505
Arg [2] : 000000000000000000000000e2096c37364d48d9292c0cef29aa27d0653c1af4
Arg [3] : 000000000000000000000000ca521b7accb512cf218fe19fedecc6d8399fcbbb
Arg [4] : 000000000000000000000000745dcabb8fe4e505368736f63cb15765d272d541
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.016257 | 29,998.678 | $487.7 |
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.