Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 12 from a total of 12 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Close Auction | 14542419 | 953 days ago | IN | 0 ETH | 0.02704677 | ||||
Place Bid | 14314616 | 988 days ago | IN | 1 ETH | 0.01079292 | ||||
Set Extended Tim... | 14278255 | 994 days ago | IN | 0 ETH | 0.00227815 | ||||
Place Bid | 14278252 | 994 days ago | IN | 0.3 ETH | 0.00967319 | ||||
Set Extended Tim... | 14278244 | 994 days ago | IN | 0 ETH | 0.00223795 | ||||
Set Extended Tim... | 14278240 | 994 days ago | IN | 0 ETH | 0.0023097 | ||||
Set Extended Tim... | 14278238 | 994 days ago | IN | 0 ETH | 0.00201155 | ||||
Place Bid | 14256276 | 997 days ago | IN | 0.25 ETH | 0.00719684 | ||||
Place Bid | 14233602 | 1001 days ago | IN | 0.2 ETH | 0.00791045 | ||||
Place Bid | 14233129 | 1001 days ago | IN | 0.1 ETH | 0.01146048 | ||||
List Item On Auc... | 14233092 | 1001 days ago | IN | 0 ETH | 0.01696356 | ||||
0x60806040 | 14233046 | 1001 days ago | IN | 0 ETH | 0.26273484 |
Loading...
Loading
Contract Name:
DreamMarketplace
Compiler Version
v0.8.4+commit.c7e474f2
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; interface IDreamNFT { function minter(uint256 id) external returns (address); } // Not to be confused with the actual WETH contract. This is a simple // contract to keep track of ETH/BNB the user is owned by the contract. // The user can withdraw it at any moment, it's not a token, hence it's not // transferable. The marketplace will automatically try to refund the ETH to // the user (e.g outbid, NFT sold) with a gas limit. This is simply backup // when the ETH/BNB could not be sent to the user/address. For example, if // the user is a smart contract that uses a lot of gas on it's payable. contract WrappedETH is ReentrancyGuard { mapping(address => uint256) public wethBalance; function claimETH() external { uint256 refund = wethBalance[msg.sender]; wethBalance[msg.sender] = 0; (bool success,) = msg.sender.call{value: refund}(""); // If the tx failed, restore back their balance. if(!success) { wethBalance[msg.sender] = refund; } } // claimETHForUser tries to payout the user's owned balance with // a gas limit. Does not throw if it failed to send. function claimETHForUser(address user) public { uint256 refund = wethBalance[user]; wethBalance[user] = 0; (bool success,) = user.call{value: refund, gas: 3500}(""); // If the tx failed, restore back their balance. if(!success) { wethBalance[user] = refund; } } // rewardETHToUser tries to send specified amount of ETH to the user. // If it cannot, it will add it to their balance. It will NOT throw. // Used for paying out other users safely, e.g when outbidding someone. function rewardETHToUser(address user, uint256 amount) internal { (bool success,) = user.call{value: amount, gas: 3500}(""); if(!success) { wethBalance[user] += amount; } } } contract Buyback { // Uniswap V2 Router address for buyback functionality. IUniswapV2Router02 public uniswapV2Router; // Keep store of the WETH address to save on gas. address WETH; // devWalletAddress is the Dream development address for 10% fees, and buyback. address internal devWalletAddress; address public dreamTokenAddress; uint256 ethToBuybackWith = 0; event UniswapRouterUpdated( address newAddress ); event DreamBuyback( uint256 ethSpent ); function updateBuybackUniswapRouter(address newRouterAddress) internal { uniswapV2Router = IUniswapV2Router02(newRouterAddress); WETH = uniswapV2Router.WETH(); emit UniswapRouterUpdated(newRouterAddress); } function buybackDream() external { require(msg.sender == address(this), "can only be called by the contract"); address[] memory path = new address[](2); path[0] = WETH; path[1] = dreamTokenAddress; uint256 amount = ethToBuybackWith; ethToBuybackWith = 0; uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}( 0, // accept any amount of Tokens path, devWalletAddress, block.timestamp ); emit DreamBuyback(amount); } function swapETHForTokens(uint256 amount) internal { ethToBuybackWith += amount; // 500k gas is more than enough. try this.buybackDream{gas: 500000}() {} catch {} } } contract DreamMarketplace is ReentrancyGuard, Ownable, WrappedETH, Buyback { // MarketItem consists of buy-now and bid items. // Auction refers to items that can be bid on. // An item can either be buy-now or bid, or both. struct MarketItem { uint256 tokenId; address payable seller; // If purchasePrice is non-0, item can be bought out-right for that price // if bidPrice is non-0, item can be bid upon. uint256 purchasePrice; uint256 bidPrice; uint8 state; uint64 listingCreationTime; uint64 auctionStartTime; // Set when first bid is received. 0 until then. uint64 auctionEndTime; // Initially it is the DURATION of the auction. // After the first bid, it is set to the END time // of the auction. // Defaults to 0. When 0, no bid has been placed yet. address payable highestBidder; } struct BidHistory { address bidder; uint256 bidAmount; uint64 bidTime; } uint8 constant ON_MARKET = 0; uint8 constant SOLD = 1; uint8 constant CANCELLED = 2; uint256 buybackResaleFeePercentage = 5; uint256 buybackMinterFeePercentage = 10; uint256 artistFeePercentage = 5; uint256 devFeePercentage = 10; uint256 nextBidPricePercentage = 105; uint256 delistCooldown = 600; uint256 extendedTime = 300; // itemsOnMarket is a list of all items, historic and current, on the marketplace. // This includes items all of states, i.e items are never removed from this list. MarketItem[] public itemsOnMarket; mapping(uint256 => BidHistory[]) public itemsOnMarketBidHistories; // dreamNFTAddress is the address for the Dream NFT address. address public dreamNFTAddress; event AuctionItemAdded( uint256 marketId, uint256 tokenId, address tokenAddress, uint256 bidPrice, uint256 auctionDuration ); event FixedPriceItemAdded( uint256 marketId, uint256 tokenId, address tokenAddress, uint256 purchasePrice ); event ItemSold( uint256 marketId, uint256 tokenId, address buyer, uint256 purchasePrice, uint256 bidPrice ); event HighestBidIncrease( uint256 marketId, address bidder, uint256 amount, uint256 auctionEndTime ); event PriceReduction( uint256 marketId, uint256 newPurchasePrice, uint256 newBidPrice ); event ItemPulledFromMarket(uint256 id); constructor(address _dreamNFTAddress, address _uniswapRouterAddress, address _dreamTokenAddress, address _devWallet) { dreamNFTAddress = _dreamNFTAddress; updateBuybackUniswapRouter(_uniswapRouterAddress); dreamTokenAddress = _dreamTokenAddress; devWalletAddress = _devWallet; } function updateUniswapRouter(address newRouterAddress) external onlyOwner { updateBuybackUniswapRouter(newRouterAddress); } function updateDreamNFTAddress(address newAddress) external onlyOwner { dreamNFTAddress = newAddress; } function updateDreamTokenAddress(address newAddress) external onlyOwner { dreamTokenAddress = newAddress; } function isMinter(uint256 id, address target) internal returns (bool) { IDreamNFT sNFT = IDreamNFT(dreamNFTAddress); return sNFT.minter(id) == target; } function minter(uint256 id) internal returns (address) { IDreamNFT sNFT = IDreamNFT(dreamNFTAddress); return sNFT.minter(id); } function setFees(uint256 _buybackResaleFeePercentage, uint256 _buybackMinterFeePercentage, uint256 _artistFeePercentage, uint256 _devFeePercentage, uint256 _nextBidPricePercentage ) external onlyOwner { buybackResaleFeePercentage = _buybackResaleFeePercentage; buybackMinterFeePercentage = _buybackMinterFeePercentage; artistFeePercentage = _artistFeePercentage; devFeePercentage = _devFeePercentage; nextBidPricePercentage = _nextBidPricePercentage; } function changeDevWalletAddress(address newAddress) external onlyOwner{ devWalletAddress = newAddress; } function setDelistCooldown(uint256 cooldown) external onlyOwner { delistCooldown = cooldown; } function setExtendedTime(uint256 time) external onlyOwner { extendedTime = time; } function handleFees(uint256 tokenId, uint256 amount, bool isMinterSale) internal returns (uint256) { uint256 buybackFee; if(!isMinterSale) { // In resale, 5% buyback and 5% to artist. // 90% to seller. buybackFee = amount * buybackResaleFeePercentage / 100; uint256 artistFee = amount * artistFeePercentage / 100; rewardETHToUser(minter(tokenId), artistFee); amount = amount - artistFee; } else { // When it's the minter selling, they get 80% // 10% to buyback // 10% to Dream dev wallet. buybackFee = amount * buybackMinterFeePercentage / 100; uint256 devFee = amount * devFeePercentage / 100; rewardETHToUser(devWalletAddress, devFee); amount = amount - devFee; } swapETHForTokens(buybackFee); return amount - buybackFee; } function withdrawStuckETH() external onlyOwner { bool success; (success,) = address(msg.sender).call{value: address(this).balance}(""); } function withdrawStuckNFT(address nftAddress, uint256 tokenId) public onlyOwner{ IERC721(nftAddress).safeTransferFrom(address(this), msg.sender, tokenId); } function createAuctionItem( uint256 tokenId, address seller, uint256 purchasePrice, uint256 startingBidPrice, uint256 biddingTime ) internal { itemsOnMarket.push( MarketItem( tokenId, payable(seller), purchasePrice, startingBidPrice, ON_MARKET, uint64(block.timestamp), uint64(0), uint64(biddingTime), payable(address(0)) ) ); } // purchasePrice is the direct purchasing price. Starting bid price // is the starting price for bids. If purchase price is 0, item cannot // be bought directly. Similarly for startingBidPrice, if it's 0, item // cannot be bid upon. One of them must be non-zero. function listItemOnAuction( address tokenAddress, uint256 tokenId, uint256 purchasePrice, uint256 startingBidPrice, uint256 biddingTime ) external returns (uint256) { IERC721 tokenContract = IERC721(tokenAddress); require(tokenContract.ownerOf(tokenId) == msg.sender, "Missing Item Ownership"); require(tokenContract.getApproved(tokenId) == address(this), "Missing transfer approval"); require(purchasePrice > 0 || startingBidPrice > 0, "Item must have a price"); require(startingBidPrice == 0 || biddingTime > 60, "Bidding time must be above one minute"); uint256 newItemId = itemsOnMarket.length; createAuctionItem( tokenId, msg.sender, purchasePrice, startingBidPrice, biddingTime ); IERC721(dreamNFTAddress).transferFrom( msg.sender, address(this), tokenId ); if(purchasePrice > 0) { emit FixedPriceItemAdded(newItemId, tokenId, tokenAddress, purchasePrice); } if(startingBidPrice > 0) { emit AuctionItemAdded( newItemId, tokenId, dreamNFTAddress, startingBidPrice, biddingTime ); } return newItemId; } function buyFixedPriceItem(uint256 id) external payable nonReentrant { require(id < itemsOnMarket.length, "Invalid id"); MarketItem memory item = itemsOnMarket[id]; require(item.state == ON_MARKET, "Item not for sale"); require(msg.value >= item.purchasePrice, "Not enough funds sent"); require(item.purchasePrice > 0, "Item does not have a purchase price."); require(msg.sender != item.seller, "Seller can't buy"); item.state = SOLD; IERC721(dreamNFTAddress).safeTransferFrom( address(this), msg.sender, item.tokenId ); uint256 netPrice = handleFees(item.tokenId, item.purchasePrice, isMinter(item.tokenId, item.seller)); rewardETHToUser(item.seller, netPrice); emit ItemSold(id, item.tokenId, msg.sender, item.purchasePrice, item.bidPrice); itemsOnMarket[id] = item; // If the user sent excess ETH/BNB, send any extra back to the user. uint256 refundableEther = msg.value - item.purchasePrice; if(refundableEther > 0) { rewardETHToUser(msg.sender, refundableEther); } } function placeBid(uint256 id) external payable nonReentrant { require(id < itemsOnMarket.length, "Invalid id"); MarketItem memory item = itemsOnMarket[id]; require(item.state == ON_MARKET, "Item not for sale"); require(block.timestamp < item.auctionEndTime || item.highestBidder == address(0), "Auction has ended"); if (item.highestBidder != address(0)) { require(msg.value >= item.bidPrice * nextBidPricePercentage / 100, "Bid must be 5% higher than previous bid"); } else { require(msg.value >= item.bidPrice, "Too low bid"); // First bid! item.auctionStartTime = uint64(block.timestamp); // item.auctionEnd is the auction duration. Add current time to it // to set it to the end time. item.auctionEndTime += uint64(block.timestamp); } address previousBidder = item.highestBidder; // Return ETH to previous highest bidder. if (previousBidder != address(0)) { rewardETHToUser(previousBidder, item.bidPrice); } item.highestBidder = payable(msg.sender); item.bidPrice = msg.value; // Extend the auction time by 5 minutes if there is less than 5 minutes remaining. // This is to prevent snipers sniping in the last block, and give everyone a chance // to bid. if ((item.auctionEndTime - block.timestamp) < extendedTime){ item.auctionEndTime = uint64(block.timestamp + extendedTime); } emit HighestBidIncrease(id, msg.sender, msg.value, item.auctionEndTime); itemsOnMarket[id] = item; itemsOnMarketBidHistories[id].push( BidHistory( msg.sender, msg.value, uint64(block.timestamp) ) ); } function closeAuction(uint256 id) external nonReentrant { require(id < itemsOnMarket.length, "Invalid id"); MarketItem memory item = itemsOnMarket[id]; require(item.state == ON_MARKET, "Item not for sale"); require(item.bidPrice > 0, "Item is not on auction."); require(item.highestBidder != address(0), "No bids placed"); require(block.timestamp > item.auctionEndTime, "Auction is still on going"); item.state = SOLD; IERC721(dreamNFTAddress).transferFrom( address(this), item.highestBidder, item.tokenId ); uint256 netPrice = handleFees(item.tokenId, item.bidPrice, isMinter(item.tokenId, item.seller)); rewardETHToUser(item.seller, netPrice); emit ItemSold(id, item.tokenId, item.highestBidder, item.purchasePrice, item.bidPrice); itemsOnMarket[id] = item; } function reducePrice( uint256 id, uint256 reducedPrice, uint256 reducedBidPrice ) external nonReentrant { require(id < itemsOnMarket.length, "Invalid id"); MarketItem memory item = itemsOnMarket[id]; require(item.state == ON_MARKET, "Item not for sale"); require(msg.sender == item.seller, "Only the item seller can trigger a price reduction"); require(block.timestamp >= item.listingCreationTime + delistCooldown, "Must wait after listing before lowering the listing price"); require(item.highestBidder == address(0), "Cannot reduce price once a bid has been placed"); require(reducedBidPrice > 0 || reducedPrice > 0, "Must reduce price"); if (reducedPrice > 0) { require( item.purchasePrice > 0 && reducedPrice <= item.purchasePrice * 95 / 100, "Reduced price must be at least 5% less than the current price" ); item.purchasePrice = reducedPrice; } if (reducedBidPrice > 0) { require( item.bidPrice > 0 && reducedBidPrice <= item.bidPrice * 95 / 100, "Reduced price must be at least 5% less than the current price" ); item.bidPrice = reducedPrice; } itemsOnMarket[id] = item; emit PriceReduction( id, item.purchasePrice, item.bidPrice ); } function pullFromMarket(uint256 id) external nonReentrant { require(id < itemsOnMarket.length, "Invalid id"); MarketItem memory item = itemsOnMarket[id]; require(item.state == ON_MARKET, "Item not for sale"); require(msg.sender == item.seller, "Only the item seller can pull an item from the marketplace"); // Up for debate: Currently we don't allow items to be pulled if it's been bid on require(item.highestBidder == address(0), "Cannot pull from market once a bid has been placed"); require(block.timestamp >= item.listingCreationTime + 600, "Must wait ten minutes after listing before pulling from the market"); item.state = CANCELLED; IERC721(dreamNFTAddress).transferFrom( address(this), item.seller, item.tokenId ); itemsOnMarket[id] = item; emit ItemPulledFromMarket(id); } // A method for retrieve a NftMarketplaceId, given a NFTID function getMarketplaceId(uint256 tokenId) external view returns (uint256 marketplaceID) { bool result = false; for(uint256 idx = 0; idx < itemsOnMarket.length; idx++) { MarketItem memory item = itemsOnMarket[idx]; if (item.tokenId == tokenId) { result = true; marketplaceID = idx; return marketplaceID; } } require(result, "Item not found"); } function getBidHistories(uint256 id) external view returns ( BidHistory[] memory bidHistories ) { uint bidHistoryLength = itemsOnMarketBidHistories[id].length; require(0 < bidHistoryLength, "not auction item"); bidHistories = itemsOnMarketBidHistories[id]; return bidHistories; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; }
// 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 (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/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 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_dreamNFTAddress","type":"address"},{"internalType":"address","name":"_uniswapRouterAddress","type":"address"},{"internalType":"address","name":"_dreamTokenAddress","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"bidPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"auctionDuration","type":"uint256"}],"name":"AuctionItemAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"ethSpent","type":"uint256"}],"name":"DreamBuyback","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"purchasePrice","type":"uint256"}],"name":"FixedPriceItemAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketId","type":"uint256"},{"indexed":false,"internalType":"address","name":"bidder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"auctionEndTime","type":"uint256"}],"name":"HighestBidIncrease","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ItemPulledFromMarket","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"purchasePrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bidPrice","type":"uint256"}],"name":"ItemSold","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":"marketId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPurchasePrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBidPrice","type":"uint256"}],"name":"PriceReduction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"UniswapRouterUpdated","type":"event"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"buyFixedPriceItem","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"buybackDream","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"changeDevWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"claimETHForUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"closeAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dreamNFTAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dreamTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getBidHistories","outputs":[{"components":[{"internalType":"address","name":"bidder","type":"address"},{"internalType":"uint256","name":"bidAmount","type":"uint256"},{"internalType":"uint64","name":"bidTime","type":"uint64"}],"internalType":"struct DreamMarketplace.BidHistory[]","name":"bidHistories","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getMarketplaceId","outputs":[{"internalType":"uint256","name":"marketplaceID","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"itemsOnMarket","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address payable","name":"seller","type":"address"},{"internalType":"uint256","name":"purchasePrice","type":"uint256"},{"internalType":"uint256","name":"bidPrice","type":"uint256"},{"internalType":"uint8","name":"state","type":"uint8"},{"internalType":"uint64","name":"listingCreationTime","type":"uint64"},{"internalType":"uint64","name":"auctionStartTime","type":"uint64"},{"internalType":"uint64","name":"auctionEndTime","type":"uint64"},{"internalType":"address payable","name":"highestBidder","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"itemsOnMarketBidHistories","outputs":[{"internalType":"address","name":"bidder","type":"address"},{"internalType":"uint256","name":"bidAmount","type":"uint256"},{"internalType":"uint64","name":"bidTime","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"purchasePrice","type":"uint256"},{"internalType":"uint256","name":"startingBidPrice","type":"uint256"},{"internalType":"uint256","name":"biddingTime","type":"uint256"}],"name":"listItemOnAuction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"placeBid","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"pullFromMarket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"reducedPrice","type":"uint256"},{"internalType":"uint256","name":"reducedBidPrice","type":"uint256"}],"name":"reducePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"cooldown","type":"uint256"}],"name":"setDelistCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"setExtendedTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buybackResaleFeePercentage","type":"uint256"},{"internalType":"uint256","name":"_buybackMinterFeePercentage","type":"uint256"},{"internalType":"uint256","name":"_artistFeePercentage","type":"uint256"},{"internalType":"uint256","name":"_devFeePercentage","type":"uint256"},{"internalType":"uint256","name":"_nextBidPricePercentage","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateDreamNFTAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateDreamTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"updateUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wethBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nftAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"withdrawStuckNFT","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260006007556005600855600a6009556005600a55600a600b556069600c55610258600d5561012c600e553480156200003b57600080fd5b5060405162003781380380620037818339810160408190526200005e9162000240565b60016000556200006e33620000c9565b601180546001600160a01b0319166001600160a01b03861617905562000094836200011b565b600680546001600160a01b039384166001600160a01b03199182161790915560058054929093169116179055506200029c9050565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600380546001600160a01b0319166001600160a01b038316908117909155604080516315ab88c960e31b8152905163ad5c464891600480820192602092909190829003018186803b1580156200017057600080fd5b505afa15801562000185573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ab91906200021c565b600480546001600160a01b0319166001600160a01b0392831617905560405190821681527f455a5e52b7c01aa52d717db42e17b6610b0c2c96560c85b7e5adcdd254bfc17c9060200160405180910390a150565b80516001600160a01b03811681146200021757600080fd5b919050565b6000602082840312156200022e578081fd5b6200023982620001ff565b9392505050565b6000806000806080858703121562000256578283fd5b6200026185620001ff565b93506200027160208601620001ff565b92506200028160408601620001ff565b91506200029160608601620001ff565b905092959194509250565b6134d580620002ac6000396000f3fe6080604052600436106101c25760003560e01c80637d4626c5116100f7578063ae0e70ac11610095578063e2a5a3d511610064578063e2a5a3d51461056f578063f2fde38b1461058f578063f5648a4f146105af578063f9f18464146105c457600080fd5b8063ae0e70ac146104fa578063b989d6cd1461051a578063c9921f501461053a578063e122173c1461055a57600080fd5b80638da5cb5b116100d15780638da5cb5b1461047c578063908bb2ae1461049a5780639979ef45146104ba578063a5e0c44b146104cd57600080fd5b80637d4626c5146103ee5780638661edcb1461040e5780638b0619021461042e57600080fd5b80634a2a593611610164578063672729991161013e57806367272999146103915780636fbabe21146103a6578063715018a6146103b957806377666290146103ce57600080fd5b80634a2a5936146103315780634ca38c7b14610351578063574e27a61461037157600080fd5b80631fc9d27d116101a05780631fc9d27d146102a3578063236ed8f3146102c35780632e550144146102e35780633fcaeb741461031157600080fd5b806304a66b48146101c757806316756348146101e95780631694505e1461026b575b600080fd5b3480156101d357600080fd5b506101e76101e236600461314a565b6105f1565b005b3480156101f557600080fd5b506102096102043660046130e6565b61063b565b60408051998a526001600160a01b0398891660208b0152890196909652606088019490945260ff90921660808701526001600160401b0390811660a087015290811660c08601521660e084015216610100820152610120015b60405180910390f35b34801561027757600080fd5b5060035461028b906001600160a01b031681565b6040516001600160a01b039091168152602001610262565b3480156102af57600080fd5b506101e76102be366004613040565b6106b9565b3480156102cf57600080fd5b506101e76102de3660046130e6565b61074b565b3480156102ef57600080fd5b506103036102fe3660046130a3565b610b73565b604051908152602001610262565b34801561031d57600080fd5b506101e761032c366004613040565b6110c2565b34801561033d57600080fd5b506101e761034c366004613040565b61110e565b34801561035d57600080fd5b5061030361036c3660046130e6565b61115a565b34801561037d57600080fd5b506101e761038c366004613078565b611294565b34801561039d57600080fd5b506101e7611324565b6101e76103b43660046130e6565b61139e565b3480156103c557600080fd5b506101e76117e4565b3480156103da57600080fd5b506101e76103e93660046130e6565b61181a565b3480156103fa57600080fd5b506101e76104093660046130e6565b611849565b34801561041a57600080fd5b506101e7610429366004613040565b611878565b34801561043a57600080fd5b5061044e6104493660046130fe565b6118c4565b604080516001600160a01b03909416845260208401929092526001600160401b031690820152606001610262565b34801561048857600080fd5b506001546001600160a01b031661028b565b3480156104a657600080fd5b506101e76104b5366004613040565b611919565b6101e76104c83660046130e6565b61194f565b3480156104d957600080fd5b506104ed6104e83660046130e6565b611ed7565b60405161026291906131a8565b34801561050657600080fd5b506101e76105153660046130e6565b611fbc565b34801561052657600080fd5b506101e761053536600461311f565b61243b565b34801561054657600080fd5b5060115461028b906001600160a01b031681565b34801561056657600080fd5b506101e761294f565b34801561057b57600080fd5b5060065461028b906001600160a01b031681565b34801561059b57600080fd5b506101e76105aa366004613040565b612afa565b3480156105bb57600080fd5b506101e7612b92565b3480156105d057600080fd5b506103036105df366004613040565b60026020526000908152604090205481565b6001546001600160a01b031633146106245760405162461bcd60e51b815260040161061b906132fd565b60405180910390fd5b600894909455600992909255600a55600b55600c55565b600f818154811061064b57600080fd5b60009182526020909120600690910201805460018201546002830154600384015460048501546005909501549395506001600160a01b03928316949193909260ff8316926001600160401b036101008204811693600160481b8304821693600160881b909304909116911689565b6001600160a01b0381166000818152600260205260408082208054908390559051909290610dac90849084818181858888f193505050503d806000811461071c576040519150601f19603f3d011682016040523d82523d6000602084013e610721565b606091505b5050905080610746576001600160a01b03831660009081526002602052604090208290555b505050565b6002600054141561076e5760405162461bcd60e51b815260040161061b9061335d565b6002600055600f5481106107945760405162461bcd60e51b815260040161061b906132d9565b6000600f82815481106107b757634e487b7160e01b600052603260045260246000fd5b6000918252602091829020604080516101208101825260069093029091018054835260018101546001600160a01b039081169484019490945260028101549183019190915260038101546060830152600481015460ff8116608084018190526001600160401b03610100808404821660a0870152600160481b8404821660c0870152600160881b9093041660e0850152600590920154909316928201929092529150156108765760405162461bcd60e51b815260040161061b90613332565b60008160600151116108ca5760405162461bcd60e51b815260206004820152601760248201527f4974656d206973206e6f74206f6e2061756374696f6e2e000000000000000000604482015260640161061b565b6101008101516001600160a01b03166109165760405162461bcd60e51b815260206004820152600e60248201526d139bc8189a591cc81c1b1858d95960921b604482015260640161061b565b8060e001516001600160401b031642116109725760405162461bcd60e51b815260206004820152601960248201527f41756374696f6e206973207374696c6c206f6e20676f696e6700000000000000604482015260640161061b565b6001608082015260115461010082015182516040516323b872dd60e01b81526001600160a01b03909316926323b872dd926109b1923092600401613184565b600060405180830381600087803b1580156109cb57600080fd5b505af11580156109df573d6000803e3d6000fd5b505082516060840151602085015160009450610a069350610a01908390612c09565b612ca2565b9050610a16826020015182612d83565b7f2b035c354919347304dfdb0a8c6847f3604bbe5cd76dd4056b4ae9b99ead1d1a83836000015184610100015185604001518660600151604051610a5e959493929190613394565b60405180910390a181600f8481548110610a8857634e487b7160e01b600052603260045260246000fd5b600091825260208083208451600690930201918255830151600180830180546001600160a01b039384166001600160a01b0319918216179091556040860151600285015560608601516003850155608086015160048501805460a089015160c08a015160e08b01516001600160401b03908116600160881b0267ffffffffffffffff60881b19928216600160481b0292909216600160481b600160c81b03199190931661010090810268ffffffffffffffffff1990951660ff909716969096179390931792909216171790559095015160059093018054939092169290941691909117905555505050565b6040516331a9108f60e11b815260048101859052600090869033906001600160a01b03831690636352211e9060240160206040518083038186803b158015610bba57600080fd5b505afa158015610bce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf2919061305c565b6001600160a01b031614610c415760405162461bcd60e51b815260206004820152601660248201527504d697373696e67204974656d204f776e6572736869760541b604482015260640161061b565b60405163020604bf60e21b81526004810187905230906001600160a01b0383169063081812fc9060240160206040518083038186803b158015610c8357600080fd5b505afa158015610c97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbb919061305c565b6001600160a01b031614610d115760405162461bcd60e51b815260206004820152601960248201527f4d697373696e67207472616e7366657220617070726f76616c00000000000000604482015260640161061b565b6000851180610d205750600084115b610d655760405162461bcd60e51b81526020600482015260166024820152754974656d206d7573742068617665206120707269636560501b604482015260640161061b565b831580610d725750603c83115b610dcc5760405162461bcd60e51b815260206004820152602560248201527f42696464696e672074696d65206d7573742062652061626f7665206f6e65206d604482015264696e75746560d81b606482015260840161061b565b600f805460408051610120810182528981523360208201908152918101898152606082018981526000608084018181526001600160401b0342811660a0870190815260c087018481528d831660e08901908152610100808a0187815260018d018e559c909652975160068b027f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80281019190915598517f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8038a0180546001600160a01b039283166001600160a01b03199182161790915597517f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8048b015595517f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8058a015592517f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac806890180549251945198518416600160881b0267ffffffffffffffff60881b19998516600160481b0299909916600160481b600160c81b03199590941690950268ffffffffffffffffff1990921660ff909116171791909116179390931790925593517f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80790920180549290911691909316179091556011546040516323b872dd60e01b81526001600160a01b03909116906323b872dd90610fd890339030908c90600401613184565b600060405180830381600087803b158015610ff257600080fd5b505af1158015611006573d6000803e3d6000fd5b5050505060008611156110635760408051828152602081018990526001600160a01b038a16818301526060810188905290517faf185d475a485625e530f117810a6d9caf5c576634b20d4027901e5b12a47ae69181900360800190a15b84156110b7576011546040517f03fd1147a0d6ef670720403a08b582ea554c37e9e66ce27d2a59240d567b144d916110ae9184918b916001600160a01b03909116908a908a90613394565b60405180910390a15b979650505050505050565b6001546001600160a01b031633146110ec5760405162461bcd60e51b815260040161061b906132fd565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146111385760405162461bcd60e51b815260040161061b906132fd565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b600080805b600f5481101561124f576000600f828154811061118c57634e487b7160e01b600052603260045260246000fd5b600091825260209182902060408051610120810182526006909302909101805480845260018201546001600160a01b039081169585019590955260028201549284019290925260038101546060840152600481015460ff811660808501526001600160401b03610100808304821660a0870152600160481b8304821660c0870152600160881b9092041660e085015260059091015490931692820192909252915085141561123c57509392505050565b508061124781613459565b91505061115f565b508061128e5760405162461bcd60e51b815260206004820152600e60248201526d125d195b481b9bdd08199bdd5b9960921b604482015260640161061b565b50919050565b6001546001600160a01b031633146112be5760405162461bcd60e51b815260040161061b906132fd565b604051632142170760e11b81526001600160a01b038316906342842e0e906112ee90309033908690600401613184565b600060405180830381600087803b15801561130857600080fd5b505af115801561131c573d6000803e3d6000fd5b505050505050565b33600081815260026020526040808220805490839055905190929083908381818185875af1925050503d8060008114611379576040519150601f19603f3d011682016040523d82523d6000602084013e61137e565b606091505b505090508061139a573360009081526002602052604090208290555b5050565b600260005414156113c15760405162461bcd60e51b815260040161061b9061335d565b6002600055600f5481106113e75760405162461bcd60e51b815260040161061b906132d9565b6000600f828154811061140a57634e487b7160e01b600052603260045260246000fd5b6000918252602091829020604080516101208101825260069093029091018054835260018101546001600160a01b039081169484019490945260028101549183019190915260038101546060830152600481015460ff8116608084018190526001600160401b03610100808404821660a0870152600160481b8404821660c0870152600160881b9093041660e0850152600590920154909316928201929092529150156114c95760405162461bcd60e51b815260040161061b90613332565b80604001513410156115155760405162461bcd60e51b8152602060048201526015602482015274139bdd08195b9bdd59da08199d5b991cc81cd95b9d605a1b604482015260640161061b565b60008160400151116115755760405162461bcd60e51b8152602060048201526024808201527f4974656d20646f6573206e6f742068617665206120707572636861736520707260448201526334b1b29760e11b606482015260840161061b565b80602001516001600160a01b0316336001600160a01b031614156115ce5760405162461bcd60e51b815260206004820152601060248201526f53656c6c65722063616e27742062757960801b604482015260640161061b565b600160808201526011548151604051632142170760e11b81526001600160a01b03909216916342842e0e916116099130913391600401613184565b600060405180830381600087803b15801561162357600080fd5b505af1158015611637573d6000803e3d6000fd5b5050825160408401516020850151600094506116599350610a01908390612c09565b9050611669826020015182612d83565b7f2b035c354919347304dfdb0a8c6847f3604bbe5cd76dd4056b4ae9b99ead1d1a83836000015133856040015186606001516040516116ac959493929190613394565b60405180910390a181600f84815481106116d657634e487b7160e01b600052603260045260246000fd5b6000918252602080832084516006909302019182558301516001820180546001600160a01b039283166001600160a01b031991821617909155604080860151600285015560608601516003850155608086015160048501805460a089015160c08a015160e08b01516001600160401b03908116600160881b0267ffffffffffffffff60881b19928216600160481b0292909216600160481b600160c81b03199190931661010090810268ffffffffffffffffff1990951660ff909716969096179390931792909216171790559095015160059093018054939092169216919091179055908301516117c79034613442565b905080156117d9576117d93382612d83565b505060016000555050565b6001546001600160a01b0316331461180e5760405162461bcd60e51b815260040161061b906132fd565b6118186000612e15565b565b6001546001600160a01b031633146118445760405162461bcd60e51b815260040161061b906132fd565b600d55565b6001546001600160a01b031633146118735760405162461bcd60e51b815260040161061b906132fd565b600e55565b6001546001600160a01b031633146118a25760405162461bcd60e51b815260040161061b906132fd565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b601060205281600052604060002081815481106118e057600080fd5b60009182526020909120600390910201805460018201546002909201546001600160a01b0390911693509091506001600160401b031683565b6001546001600160a01b031633146119435760405162461bcd60e51b815260040161061b906132fd565b61194c81612e67565b50565b600260005414156119725760405162461bcd60e51b815260040161061b9061335d565b6002600055600f5481106119985760405162461bcd60e51b815260040161061b906132d9565b6000600f82815481106119bb57634e487b7160e01b600052603260045260246000fd5b6000918252602091829020604080516101208101825260069093029091018054835260018101546001600160a01b039081169484019490945260028101549183019190915260038101546060830152600481015460ff8116608084018190526001600160401b03610100808404821660a0870152600160481b8404821660c0870152600160881b9093041660e085015260059092015490931692820192909252915015611a7a5760405162461bcd60e51b815260040161061b90613332565b8060e001516001600160401b0316421080611aa157506101008101516001600160a01b0316155b611ae15760405162461bcd60e51b8152602060048201526011602482015270105d58dd1a5bdb881a185cc8195b991959607a1b604482015260640161061b565b6101008101516001600160a01b031615611b77576064600c548260600151611b099190613423565b611b139190613403565b341015611b725760405162461bcd60e51b815260206004820152602760248201527f426964206d75737420626520352520686967686572207468616e2070726576696044820152661bdd5cc8189a5960ca1b606482015260840161061b565b611be7565b8060600151341015611bb95760405162461bcd60e51b815260206004820152600b60248201526a151bdbc81b1bddc8189a5960aa1b604482015260640161061b565b426001600160401b03811660c083015260e082018051611bda9083906133d8565b6001600160401b03169052505b6101008101516001600160a01b03811615611c0a57611c0a818360600151612d83565b33610100830152346060830152600e5460e0830151611c339042906001600160401b0316613442565b1015611c5557600e54611c4690426133c0565b6001600160401b031660e08301525b60e08201516040805185815233602082015234818301526001600160401b039092166060830152517fec2561ca82ba6573021727f38daf8f99f0bc9b709f9eddd09d91b056f01277e39181900360800190a181600f8481548110611cc957634e487b7160e01b600052603260045260246000fd5b90600052602060002090600602016000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550604082015181600201556060820151816003015560808201518160040160006101000a81548160ff021916908360ff16021790555060a08201518160040160016101000a8154816001600160401b0302191690836001600160401b0316021790555060c08201518160040160096101000a8154816001600160401b0302191690836001600160401b0316021790555060e08201518160040160116101000a8154816001600160401b0302191690836001600160401b031602179055506101008201518160050160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550905050601060008481526020019081526020016000206040518060600160405280336001600160a01b03168152602001348152602001426001600160401b0316815250908060018154018082558091505060019003906000526020600020906003020160009091909190915060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020160006101000a8154816001600160401b0302191690836001600160401b0316021790555050505050600160008190555050565b60008181526010602052604090205460609080611f295760405162461bcd60e51b815260206004820152601060248201526f6e6f742061756374696f6e206974656d60801b604482015260640161061b565b600083815260106020908152604080832080548251818502810185019093528083529193909284015b82821015611fb0576000848152602090819020604080516060810182526003860290920180546001600160a01b03168352600180820154848601526002909101546001600160401b0316918301919091529083529092019101611f52565b50505050915050919050565b60026000541415611fdf5760405162461bcd60e51b815260040161061b9061335d565b6002600055600f5481106120055760405162461bcd60e51b815260040161061b906132d9565b6000600f828154811061202857634e487b7160e01b600052603260045260246000fd5b6000918252602091829020604080516101208101825260069093029091018054835260018101546001600160a01b039081169484019490945260028101549183019190915260038101546060830152600481015460ff8116608084018190526001600160401b03610100808404821660a0870152600160481b8404821660c0870152600160881b9093041660e0850152600590920154909316928201929092529150156120e75760405162461bcd60e51b815260040161061b90613332565b80602001516001600160a01b0316336001600160a01b0316146121725760405162461bcd60e51b815260206004820152603a60248201527f4f6e6c7920746865206974656d2073656c6c65722063616e2070756c6c20616e60448201527f206974656d2066726f6d20746865206d61726b6574706c616365000000000000606482015260840161061b565b6101008101516001600160a01b0316156121e95760405162461bcd60e51b815260206004820152603260248201527f43616e6e6f742070756c6c2066726f6d206d61726b6574206f6e6365206120626044820152711a59081a185cc81899595b881c1b1858d95960721b606482015260840161061b565b60a08101516121fa906102586133d8565b6001600160401b03164210156122835760405162461bcd60e51b815260206004820152604260248201527f4d75737420776169742074656e206d696e75746573206166746572206c69737460448201527f696e67206265666f72652070756c6c696e672066726f6d20746865206d61726b606482015261195d60f21b608482015260a40161061b565b60026080820152601154602082015182516040516323b872dd60e01b81526001600160a01b03909316926323b872dd926122c1923092600401613184565b600060405180830381600087803b1580156122db57600080fd5b505af11580156122ef573d6000803e3d6000fd5b5050505080600f838154811061231557634e487b7160e01b600052603260045260246000fd5b60009182526020918290208351600690920201908155908201516001820180546001600160a01b039283166001600160a01b031991821617909155604080850151600285015560608501516003850155608085015160048501805460a088015160c089015160e08a01516001600160401b03908116600160881b0267ffffffffffffffff60881b19928216600160481b0292909216600160481b600160c81b03199190931661010090810268ffffffffffffffffff1990951660ff909716969096179390931792909216171790559094015160059093018054939092169216919091179055517f3668304292598552a17f3dc2c36115c2df53ebf377a85a5f14ad1595cfb5a6739061242a9084815260200190565b60405180910390a150506001600055565b6002600054141561245e5760405162461bcd60e51b815260040161061b9061335d565b6002600055600f5483106124845760405162461bcd60e51b815260040161061b906132d9565b6000600f84815481106124a757634e487b7160e01b600052603260045260246000fd5b6000918252602091829020604080516101208101825260069093029091018054835260018101546001600160a01b039081169484019490945260028101549183019190915260038101546060830152600481015460ff8116608084018190526001600160401b03610100808404821660a0870152600160481b8404821660c0870152600160881b9093041660e0850152600590920154909316928201929092529150156125665760405162461bcd60e51b815260040161061b90613332565b80602001516001600160a01b0316336001600160a01b0316146125e65760405162461bcd60e51b815260206004820152603260248201527f4f6e6c7920746865206974656d2073656c6c65722063616e2074726967676572604482015271103090383934b1b2903932b23ab1ba34b7b760711b606482015260840161061b565b600d548160a001516001600160401b031661260191906133c0565b4210156126765760405162461bcd60e51b815260206004820152603960248201527f4d7573742077616974206166746572206c697374696e67206265666f7265206c60448201527f6f776572696e6720746865206c697374696e6720707269636500000000000000606482015260840161061b565b6101008101516001600160a01b0316156126e95760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f7420726564756365207072696365206f6e6365206120626964206860448201526d185cc81899595b881c1b1858d95960921b606482015260840161061b565b60008211806126f85750600083115b6127385760405162461bcd60e51b81526020600482015260116024820152704d7573742072656475636520707269636560781b604482015260640161061b565b8215612792576000816040015111801561276e575060648160400151605f6127609190613423565b61276a9190613403565b8311155b61278a5760405162461bcd60e51b815260040161061b9061327c565b604081018390525b81156127ec57600081606001511180156127c8575060648160600151605f6127ba9190613423565b6127c49190613403565b8211155b6127e45760405162461bcd60e51b815260040161061b9061327c565b606081018390525b80600f858154811061280e57634e487b7160e01b600052603260045260246000fd5b60009182526020918290208351600690920201908155908201516001820180546001600160a01b039283166001600160a01b03199182161790915560408085015160028501556060808601516003860155608086015160048601805460a089015160c08a015160e08b01516001600160401b03908116600160881b0267ffffffffffffffff60881b19928216600160481b0292909216600160481b600160c81b03199190931661010090810268ffffffffffffffffff1990951660ff9097169690961793909317929092161717905590950151600590940180549490931693909116929092179055828101519183015190517fc6890297f86f07076395471a4ac2be4ba632cb7ac8ac34ad5174b77438260ac89261293c928883526020830191909152604082015260600190565b60405180910390a1505060016000555050565b3330146129a95760405162461bcd60e51b815260206004820152602260248201527f63616e206f6e6c792062652063616c6c65642062792074686520636f6e74726160448201526118dd60f21b606482015260840161061b565b604080516002808252606082018352600092602083019080368337505060045482519293506001600160a01b0316918391506000906129f857634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600654825191169082906001908110612a3757634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526007805460009182905560035460055460405163b6f9de9560e01b815292949182169363b6f9de95938693612a8b9389929116904290600401613213565b6000604051808303818588803b158015612aa457600080fd5b505af1158015612ab8573d6000803e3d6000fd5b50505050507f9e3a2277f2d2efc712cc3df1192378e0dac5a7a1049ec04a31c87b0bd989cc0381604051612aee91815260200190565b60405180910390a15050565b6001546001600160a01b03163314612b245760405162461bcd60e51b815260040161061b906132fd565b6001600160a01b038116612b895760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161061b565b61194c81612e15565b6001546001600160a01b03163314612bbc5760405162461bcd60e51b815260040161061b906132fd565b604051600090339047908381818185875af1925050503d8060008114612bfe576040519150601f19603f3d011682016040523d82523d6000602084013e612c03565b606091505b50505050565b601154604051632b23615b60e21b8152600481018490526000916001600160a01b039081169190841690829063ac8d856c90602401602060405180830381600087803b158015612c5857600080fd5b505af1158015612c6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c90919061305c565b6001600160a01b031614949350505050565b60008082612d0857606460085485612cba9190613423565b612cc49190613403565b905060006064600a5486612cd89190613423565b612ce29190613403565b9050612cf6612cf087612f47565b82612d83565b612d008186613442565b945050612d67565b606460095485612d189190613423565b612d229190613403565b905060006064600b5486612d369190613423565b612d409190613403565b600554909150612d59906001600160a01b031682612d83565b612d638186613442565b9450505b612d7081612fcf565b612d7a8185613442565b95945050505050565b6000826001600160a01b031682610dac90604051600060405180830381858888f193505050503d8060008114612dd5576040519150601f19603f3d011682016040523d82523d6000602084013e612dda565b606091505b5050905080610746576001600160a01b03831660009081526002602052604081208054849290612e0b9084906133c0565b9091555050505050565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600380546001600160a01b0319166001600160a01b038316908117909155604080516315ab88c960e31b8152905163ad5c464891600480820192602092909190829003018186803b158015612ebb57600080fd5b505afa158015612ecf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef3919061305c565b600480546001600160a01b0319166001600160a01b0392831617905560405190821681527f455a5e52b7c01aa52d717db42e17b6610b0c2c96560c85b7e5adcdd254bfc17c9060200160405180910390a150565b601154604051632b23615b60e21b8152600481018390526000916001600160a01b031690819063ac8d856c90602401602060405180830381600087803b158015612f9057600080fd5b505af1158015612fa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc8919061305c565b9392505050565b8060076000828254612fe191906133c0565b92505081905550306001600160a01b031663e122173c6207a1206040518263ffffffff1660e01b8152600401600060405180830381600088803b15801561302757600080fd5b5087f193505050508015613039575060015b61194c5750565b600060208284031215613051578081fd5b8135612fc88161348a565b60006020828403121561306d578081fd5b8151612fc88161348a565b6000806040838503121561308a578081fd5b82356130958161348a565b946020939093013593505050565b600080600080600060a086880312156130ba578081fd5b85356130c58161348a565b97602087013597506040870135966060810135965060800135945092505050565b6000602082840312156130f7578081fd5b5035919050565b60008060408385031215613110578182fd5b50508035926020909101359150565b600080600060608486031215613133578283fd5b505081359360208301359350604090920135919050565b600080600080600060a08688031215613161578081fd5b505083359560208501359550604085013594606081013594506080013592509050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b602080825282518282018190526000919060409081850190868401855b8281101561320657815180516001600160a01b0316855286810151878601528501516001600160401b031685850152606090930192908501906001016131c5565b5091979650505050505050565b600060808201868352602060808185015281875180845260a0860191508289019350845b8181101561325c5784516001600160a01b031683529383019391830191600101613237565b50506001600160a01b039690961660408501525050506060015292915050565b6020808252603d908201527f52656475636564207072696365206d757374206265206174206c65617374203560408201527f25206c657373207468616e207468652063757272656e74207072696365000000606082015260800190565b6020808252600a9082015269125b9d985b1a59081a5960b21b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601190820152704974656d206e6f7420666f722073616c6560781b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b94855260208501939093526001600160a01b039190911660408401526060830152608082015260a00190565b600082198211156133d3576133d3613474565b500190565b60006001600160401b038083168185168083038211156133fa576133fa613474565b01949350505050565b60008261341e57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561343d5761343d613474565b500290565b60008282101561345457613454613474565b500390565b600060001982141561346d5761346d613474565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461194c57600080fdfea264697066735822122047efd1da175f9a099495bd12f1e2ada3846adb95a24fc735ba73a6ca23bee8c064736f6c6343000804003300000000000000000000000021684c6b32665922755b5d5677c2df71cd0c64dd0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000008b17fea54d85f61e71bdf161e920762898ac53da000000000000000000000000cd11d4f84e6dd5cf256e595557ebd482399087ec
Deployed Bytecode
0x6080604052600436106101c25760003560e01c80637d4626c5116100f7578063ae0e70ac11610095578063e2a5a3d511610064578063e2a5a3d51461056f578063f2fde38b1461058f578063f5648a4f146105af578063f9f18464146105c457600080fd5b8063ae0e70ac146104fa578063b989d6cd1461051a578063c9921f501461053a578063e122173c1461055a57600080fd5b80638da5cb5b116100d15780638da5cb5b1461047c578063908bb2ae1461049a5780639979ef45146104ba578063a5e0c44b146104cd57600080fd5b80637d4626c5146103ee5780638661edcb1461040e5780638b0619021461042e57600080fd5b80634a2a593611610164578063672729991161013e57806367272999146103915780636fbabe21146103a6578063715018a6146103b957806377666290146103ce57600080fd5b80634a2a5936146103315780634ca38c7b14610351578063574e27a61461037157600080fd5b80631fc9d27d116101a05780631fc9d27d146102a3578063236ed8f3146102c35780632e550144146102e35780633fcaeb741461031157600080fd5b806304a66b48146101c757806316756348146101e95780631694505e1461026b575b600080fd5b3480156101d357600080fd5b506101e76101e236600461314a565b6105f1565b005b3480156101f557600080fd5b506102096102043660046130e6565b61063b565b60408051998a526001600160a01b0398891660208b0152890196909652606088019490945260ff90921660808701526001600160401b0390811660a087015290811660c08601521660e084015216610100820152610120015b60405180910390f35b34801561027757600080fd5b5060035461028b906001600160a01b031681565b6040516001600160a01b039091168152602001610262565b3480156102af57600080fd5b506101e76102be366004613040565b6106b9565b3480156102cf57600080fd5b506101e76102de3660046130e6565b61074b565b3480156102ef57600080fd5b506103036102fe3660046130a3565b610b73565b604051908152602001610262565b34801561031d57600080fd5b506101e761032c366004613040565b6110c2565b34801561033d57600080fd5b506101e761034c366004613040565b61110e565b34801561035d57600080fd5b5061030361036c3660046130e6565b61115a565b34801561037d57600080fd5b506101e761038c366004613078565b611294565b34801561039d57600080fd5b506101e7611324565b6101e76103b43660046130e6565b61139e565b3480156103c557600080fd5b506101e76117e4565b3480156103da57600080fd5b506101e76103e93660046130e6565b61181a565b3480156103fa57600080fd5b506101e76104093660046130e6565b611849565b34801561041a57600080fd5b506101e7610429366004613040565b611878565b34801561043a57600080fd5b5061044e6104493660046130fe565b6118c4565b604080516001600160a01b03909416845260208401929092526001600160401b031690820152606001610262565b34801561048857600080fd5b506001546001600160a01b031661028b565b3480156104a657600080fd5b506101e76104b5366004613040565b611919565b6101e76104c83660046130e6565b61194f565b3480156104d957600080fd5b506104ed6104e83660046130e6565b611ed7565b60405161026291906131a8565b34801561050657600080fd5b506101e76105153660046130e6565b611fbc565b34801561052657600080fd5b506101e761053536600461311f565b61243b565b34801561054657600080fd5b5060115461028b906001600160a01b031681565b34801561056657600080fd5b506101e761294f565b34801561057b57600080fd5b5060065461028b906001600160a01b031681565b34801561059b57600080fd5b506101e76105aa366004613040565b612afa565b3480156105bb57600080fd5b506101e7612b92565b3480156105d057600080fd5b506103036105df366004613040565b60026020526000908152604090205481565b6001546001600160a01b031633146106245760405162461bcd60e51b815260040161061b906132fd565b60405180910390fd5b600894909455600992909255600a55600b55600c55565b600f818154811061064b57600080fd5b60009182526020909120600690910201805460018201546002830154600384015460048501546005909501549395506001600160a01b03928316949193909260ff8316926001600160401b036101008204811693600160481b8304821693600160881b909304909116911689565b6001600160a01b0381166000818152600260205260408082208054908390559051909290610dac90849084818181858888f193505050503d806000811461071c576040519150601f19603f3d011682016040523d82523d6000602084013e610721565b606091505b5050905080610746576001600160a01b03831660009081526002602052604090208290555b505050565b6002600054141561076e5760405162461bcd60e51b815260040161061b9061335d565b6002600055600f5481106107945760405162461bcd60e51b815260040161061b906132d9565b6000600f82815481106107b757634e487b7160e01b600052603260045260246000fd5b6000918252602091829020604080516101208101825260069093029091018054835260018101546001600160a01b039081169484019490945260028101549183019190915260038101546060830152600481015460ff8116608084018190526001600160401b03610100808404821660a0870152600160481b8404821660c0870152600160881b9093041660e0850152600590920154909316928201929092529150156108765760405162461bcd60e51b815260040161061b90613332565b60008160600151116108ca5760405162461bcd60e51b815260206004820152601760248201527f4974656d206973206e6f74206f6e2061756374696f6e2e000000000000000000604482015260640161061b565b6101008101516001600160a01b03166109165760405162461bcd60e51b815260206004820152600e60248201526d139bc8189a591cc81c1b1858d95960921b604482015260640161061b565b8060e001516001600160401b031642116109725760405162461bcd60e51b815260206004820152601960248201527f41756374696f6e206973207374696c6c206f6e20676f696e6700000000000000604482015260640161061b565b6001608082015260115461010082015182516040516323b872dd60e01b81526001600160a01b03909316926323b872dd926109b1923092600401613184565b600060405180830381600087803b1580156109cb57600080fd5b505af11580156109df573d6000803e3d6000fd5b505082516060840151602085015160009450610a069350610a01908390612c09565b612ca2565b9050610a16826020015182612d83565b7f2b035c354919347304dfdb0a8c6847f3604bbe5cd76dd4056b4ae9b99ead1d1a83836000015184610100015185604001518660600151604051610a5e959493929190613394565b60405180910390a181600f8481548110610a8857634e487b7160e01b600052603260045260246000fd5b600091825260208083208451600690930201918255830151600180830180546001600160a01b039384166001600160a01b0319918216179091556040860151600285015560608601516003850155608086015160048501805460a089015160c08a015160e08b01516001600160401b03908116600160881b0267ffffffffffffffff60881b19928216600160481b0292909216600160481b600160c81b03199190931661010090810268ffffffffffffffffff1990951660ff909716969096179390931792909216171790559095015160059093018054939092169290941691909117905555505050565b6040516331a9108f60e11b815260048101859052600090869033906001600160a01b03831690636352211e9060240160206040518083038186803b158015610bba57600080fd5b505afa158015610bce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf2919061305c565b6001600160a01b031614610c415760405162461bcd60e51b815260206004820152601660248201527504d697373696e67204974656d204f776e6572736869760541b604482015260640161061b565b60405163020604bf60e21b81526004810187905230906001600160a01b0383169063081812fc9060240160206040518083038186803b158015610c8357600080fd5b505afa158015610c97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbb919061305c565b6001600160a01b031614610d115760405162461bcd60e51b815260206004820152601960248201527f4d697373696e67207472616e7366657220617070726f76616c00000000000000604482015260640161061b565b6000851180610d205750600084115b610d655760405162461bcd60e51b81526020600482015260166024820152754974656d206d7573742068617665206120707269636560501b604482015260640161061b565b831580610d725750603c83115b610dcc5760405162461bcd60e51b815260206004820152602560248201527f42696464696e672074696d65206d7573742062652061626f7665206f6e65206d604482015264696e75746560d81b606482015260840161061b565b600f805460408051610120810182528981523360208201908152918101898152606082018981526000608084018181526001600160401b0342811660a0870190815260c087018481528d831660e08901908152610100808a0187815260018d018e559c909652975160068b027f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80281019190915598517f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8038a0180546001600160a01b039283166001600160a01b03199182161790915597517f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8048b015595517f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8058a015592517f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac806890180549251945198518416600160881b0267ffffffffffffffff60881b19998516600160481b0299909916600160481b600160c81b03199590941690950268ffffffffffffffffff1990921660ff909116171791909116179390931790925593517f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80790920180549290911691909316179091556011546040516323b872dd60e01b81526001600160a01b03909116906323b872dd90610fd890339030908c90600401613184565b600060405180830381600087803b158015610ff257600080fd5b505af1158015611006573d6000803e3d6000fd5b5050505060008611156110635760408051828152602081018990526001600160a01b038a16818301526060810188905290517faf185d475a485625e530f117810a6d9caf5c576634b20d4027901e5b12a47ae69181900360800190a15b84156110b7576011546040517f03fd1147a0d6ef670720403a08b582ea554c37e9e66ce27d2a59240d567b144d916110ae9184918b916001600160a01b03909116908a908a90613394565b60405180910390a15b979650505050505050565b6001546001600160a01b031633146110ec5760405162461bcd60e51b815260040161061b906132fd565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146111385760405162461bcd60e51b815260040161061b906132fd565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b600080805b600f5481101561124f576000600f828154811061118c57634e487b7160e01b600052603260045260246000fd5b600091825260209182902060408051610120810182526006909302909101805480845260018201546001600160a01b039081169585019590955260028201549284019290925260038101546060840152600481015460ff811660808501526001600160401b03610100808304821660a0870152600160481b8304821660c0870152600160881b9092041660e085015260059091015490931692820192909252915085141561123c57509392505050565b508061124781613459565b91505061115f565b508061128e5760405162461bcd60e51b815260206004820152600e60248201526d125d195b481b9bdd08199bdd5b9960921b604482015260640161061b565b50919050565b6001546001600160a01b031633146112be5760405162461bcd60e51b815260040161061b906132fd565b604051632142170760e11b81526001600160a01b038316906342842e0e906112ee90309033908690600401613184565b600060405180830381600087803b15801561130857600080fd5b505af115801561131c573d6000803e3d6000fd5b505050505050565b33600081815260026020526040808220805490839055905190929083908381818185875af1925050503d8060008114611379576040519150601f19603f3d011682016040523d82523d6000602084013e61137e565b606091505b505090508061139a573360009081526002602052604090208290555b5050565b600260005414156113c15760405162461bcd60e51b815260040161061b9061335d565b6002600055600f5481106113e75760405162461bcd60e51b815260040161061b906132d9565b6000600f828154811061140a57634e487b7160e01b600052603260045260246000fd5b6000918252602091829020604080516101208101825260069093029091018054835260018101546001600160a01b039081169484019490945260028101549183019190915260038101546060830152600481015460ff8116608084018190526001600160401b03610100808404821660a0870152600160481b8404821660c0870152600160881b9093041660e0850152600590920154909316928201929092529150156114c95760405162461bcd60e51b815260040161061b90613332565b80604001513410156115155760405162461bcd60e51b8152602060048201526015602482015274139bdd08195b9bdd59da08199d5b991cc81cd95b9d605a1b604482015260640161061b565b60008160400151116115755760405162461bcd60e51b8152602060048201526024808201527f4974656d20646f6573206e6f742068617665206120707572636861736520707260448201526334b1b29760e11b606482015260840161061b565b80602001516001600160a01b0316336001600160a01b031614156115ce5760405162461bcd60e51b815260206004820152601060248201526f53656c6c65722063616e27742062757960801b604482015260640161061b565b600160808201526011548151604051632142170760e11b81526001600160a01b03909216916342842e0e916116099130913391600401613184565b600060405180830381600087803b15801561162357600080fd5b505af1158015611637573d6000803e3d6000fd5b5050825160408401516020850151600094506116599350610a01908390612c09565b9050611669826020015182612d83565b7f2b035c354919347304dfdb0a8c6847f3604bbe5cd76dd4056b4ae9b99ead1d1a83836000015133856040015186606001516040516116ac959493929190613394565b60405180910390a181600f84815481106116d657634e487b7160e01b600052603260045260246000fd5b6000918252602080832084516006909302019182558301516001820180546001600160a01b039283166001600160a01b031991821617909155604080860151600285015560608601516003850155608086015160048501805460a089015160c08a015160e08b01516001600160401b03908116600160881b0267ffffffffffffffff60881b19928216600160481b0292909216600160481b600160c81b03199190931661010090810268ffffffffffffffffff1990951660ff909716969096179390931792909216171790559095015160059093018054939092169216919091179055908301516117c79034613442565b905080156117d9576117d93382612d83565b505060016000555050565b6001546001600160a01b0316331461180e5760405162461bcd60e51b815260040161061b906132fd565b6118186000612e15565b565b6001546001600160a01b031633146118445760405162461bcd60e51b815260040161061b906132fd565b600d55565b6001546001600160a01b031633146118735760405162461bcd60e51b815260040161061b906132fd565b600e55565b6001546001600160a01b031633146118a25760405162461bcd60e51b815260040161061b906132fd565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b601060205281600052604060002081815481106118e057600080fd5b60009182526020909120600390910201805460018201546002909201546001600160a01b0390911693509091506001600160401b031683565b6001546001600160a01b031633146119435760405162461bcd60e51b815260040161061b906132fd565b61194c81612e67565b50565b600260005414156119725760405162461bcd60e51b815260040161061b9061335d565b6002600055600f5481106119985760405162461bcd60e51b815260040161061b906132d9565b6000600f82815481106119bb57634e487b7160e01b600052603260045260246000fd5b6000918252602091829020604080516101208101825260069093029091018054835260018101546001600160a01b039081169484019490945260028101549183019190915260038101546060830152600481015460ff8116608084018190526001600160401b03610100808404821660a0870152600160481b8404821660c0870152600160881b9093041660e085015260059092015490931692820192909252915015611a7a5760405162461bcd60e51b815260040161061b90613332565b8060e001516001600160401b0316421080611aa157506101008101516001600160a01b0316155b611ae15760405162461bcd60e51b8152602060048201526011602482015270105d58dd1a5bdb881a185cc8195b991959607a1b604482015260640161061b565b6101008101516001600160a01b031615611b77576064600c548260600151611b099190613423565b611b139190613403565b341015611b725760405162461bcd60e51b815260206004820152602760248201527f426964206d75737420626520352520686967686572207468616e2070726576696044820152661bdd5cc8189a5960ca1b606482015260840161061b565b611be7565b8060600151341015611bb95760405162461bcd60e51b815260206004820152600b60248201526a151bdbc81b1bddc8189a5960aa1b604482015260640161061b565b426001600160401b03811660c083015260e082018051611bda9083906133d8565b6001600160401b03169052505b6101008101516001600160a01b03811615611c0a57611c0a818360600151612d83565b33610100830152346060830152600e5460e0830151611c339042906001600160401b0316613442565b1015611c5557600e54611c4690426133c0565b6001600160401b031660e08301525b60e08201516040805185815233602082015234818301526001600160401b039092166060830152517fec2561ca82ba6573021727f38daf8f99f0bc9b709f9eddd09d91b056f01277e39181900360800190a181600f8481548110611cc957634e487b7160e01b600052603260045260246000fd5b90600052602060002090600602016000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550604082015181600201556060820151816003015560808201518160040160006101000a81548160ff021916908360ff16021790555060a08201518160040160016101000a8154816001600160401b0302191690836001600160401b0316021790555060c08201518160040160096101000a8154816001600160401b0302191690836001600160401b0316021790555060e08201518160040160116101000a8154816001600160401b0302191690836001600160401b031602179055506101008201518160050160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550905050601060008481526020019081526020016000206040518060600160405280336001600160a01b03168152602001348152602001426001600160401b0316815250908060018154018082558091505060019003906000526020600020906003020160009091909190915060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015560408201518160020160006101000a8154816001600160401b0302191690836001600160401b0316021790555050505050600160008190555050565b60008181526010602052604090205460609080611f295760405162461bcd60e51b815260206004820152601060248201526f6e6f742061756374696f6e206974656d60801b604482015260640161061b565b600083815260106020908152604080832080548251818502810185019093528083529193909284015b82821015611fb0576000848152602090819020604080516060810182526003860290920180546001600160a01b03168352600180820154848601526002909101546001600160401b0316918301919091529083529092019101611f52565b50505050915050919050565b60026000541415611fdf5760405162461bcd60e51b815260040161061b9061335d565b6002600055600f5481106120055760405162461bcd60e51b815260040161061b906132d9565b6000600f828154811061202857634e487b7160e01b600052603260045260246000fd5b6000918252602091829020604080516101208101825260069093029091018054835260018101546001600160a01b039081169484019490945260028101549183019190915260038101546060830152600481015460ff8116608084018190526001600160401b03610100808404821660a0870152600160481b8404821660c0870152600160881b9093041660e0850152600590920154909316928201929092529150156120e75760405162461bcd60e51b815260040161061b90613332565b80602001516001600160a01b0316336001600160a01b0316146121725760405162461bcd60e51b815260206004820152603a60248201527f4f6e6c7920746865206974656d2073656c6c65722063616e2070756c6c20616e60448201527f206974656d2066726f6d20746865206d61726b6574706c616365000000000000606482015260840161061b565b6101008101516001600160a01b0316156121e95760405162461bcd60e51b815260206004820152603260248201527f43616e6e6f742070756c6c2066726f6d206d61726b6574206f6e6365206120626044820152711a59081a185cc81899595b881c1b1858d95960721b606482015260840161061b565b60a08101516121fa906102586133d8565b6001600160401b03164210156122835760405162461bcd60e51b815260206004820152604260248201527f4d75737420776169742074656e206d696e75746573206166746572206c69737460448201527f696e67206265666f72652070756c6c696e672066726f6d20746865206d61726b606482015261195d60f21b608482015260a40161061b565b60026080820152601154602082015182516040516323b872dd60e01b81526001600160a01b03909316926323b872dd926122c1923092600401613184565b600060405180830381600087803b1580156122db57600080fd5b505af11580156122ef573d6000803e3d6000fd5b5050505080600f838154811061231557634e487b7160e01b600052603260045260246000fd5b60009182526020918290208351600690920201908155908201516001820180546001600160a01b039283166001600160a01b031991821617909155604080850151600285015560608501516003850155608085015160048501805460a088015160c089015160e08a01516001600160401b03908116600160881b0267ffffffffffffffff60881b19928216600160481b0292909216600160481b600160c81b03199190931661010090810268ffffffffffffffffff1990951660ff909716969096179390931792909216171790559094015160059093018054939092169216919091179055517f3668304292598552a17f3dc2c36115c2df53ebf377a85a5f14ad1595cfb5a6739061242a9084815260200190565b60405180910390a150506001600055565b6002600054141561245e5760405162461bcd60e51b815260040161061b9061335d565b6002600055600f5483106124845760405162461bcd60e51b815260040161061b906132d9565b6000600f84815481106124a757634e487b7160e01b600052603260045260246000fd5b6000918252602091829020604080516101208101825260069093029091018054835260018101546001600160a01b039081169484019490945260028101549183019190915260038101546060830152600481015460ff8116608084018190526001600160401b03610100808404821660a0870152600160481b8404821660c0870152600160881b9093041660e0850152600590920154909316928201929092529150156125665760405162461bcd60e51b815260040161061b90613332565b80602001516001600160a01b0316336001600160a01b0316146125e65760405162461bcd60e51b815260206004820152603260248201527f4f6e6c7920746865206974656d2073656c6c65722063616e2074726967676572604482015271103090383934b1b2903932b23ab1ba34b7b760711b606482015260840161061b565b600d548160a001516001600160401b031661260191906133c0565b4210156126765760405162461bcd60e51b815260206004820152603960248201527f4d7573742077616974206166746572206c697374696e67206265666f7265206c60448201527f6f776572696e6720746865206c697374696e6720707269636500000000000000606482015260840161061b565b6101008101516001600160a01b0316156126e95760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f7420726564756365207072696365206f6e6365206120626964206860448201526d185cc81899595b881c1b1858d95960921b606482015260840161061b565b60008211806126f85750600083115b6127385760405162461bcd60e51b81526020600482015260116024820152704d7573742072656475636520707269636560781b604482015260640161061b565b8215612792576000816040015111801561276e575060648160400151605f6127609190613423565b61276a9190613403565b8311155b61278a5760405162461bcd60e51b815260040161061b9061327c565b604081018390525b81156127ec57600081606001511180156127c8575060648160600151605f6127ba9190613423565b6127c49190613403565b8211155b6127e45760405162461bcd60e51b815260040161061b9061327c565b606081018390525b80600f858154811061280e57634e487b7160e01b600052603260045260246000fd5b60009182526020918290208351600690920201908155908201516001820180546001600160a01b039283166001600160a01b03199182161790915560408085015160028501556060808601516003860155608086015160048601805460a089015160c08a015160e08b01516001600160401b03908116600160881b0267ffffffffffffffff60881b19928216600160481b0292909216600160481b600160c81b03199190931661010090810268ffffffffffffffffff1990951660ff9097169690961793909317929092161717905590950151600590940180549490931693909116929092179055828101519183015190517fc6890297f86f07076395471a4ac2be4ba632cb7ac8ac34ad5174b77438260ac89261293c928883526020830191909152604082015260600190565b60405180910390a1505060016000555050565b3330146129a95760405162461bcd60e51b815260206004820152602260248201527f63616e206f6e6c792062652063616c6c65642062792074686520636f6e74726160448201526118dd60f21b606482015260840161061b565b604080516002808252606082018352600092602083019080368337505060045482519293506001600160a01b0316918391506000906129f857634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600654825191169082906001908110612a3757634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526007805460009182905560035460055460405163b6f9de9560e01b815292949182169363b6f9de95938693612a8b9389929116904290600401613213565b6000604051808303818588803b158015612aa457600080fd5b505af1158015612ab8573d6000803e3d6000fd5b50505050507f9e3a2277f2d2efc712cc3df1192378e0dac5a7a1049ec04a31c87b0bd989cc0381604051612aee91815260200190565b60405180910390a15050565b6001546001600160a01b03163314612b245760405162461bcd60e51b815260040161061b906132fd565b6001600160a01b038116612b895760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161061b565b61194c81612e15565b6001546001600160a01b03163314612bbc5760405162461bcd60e51b815260040161061b906132fd565b604051600090339047908381818185875af1925050503d8060008114612bfe576040519150601f19603f3d011682016040523d82523d6000602084013e612c03565b606091505b50505050565b601154604051632b23615b60e21b8152600481018490526000916001600160a01b039081169190841690829063ac8d856c90602401602060405180830381600087803b158015612c5857600080fd5b505af1158015612c6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c90919061305c565b6001600160a01b031614949350505050565b60008082612d0857606460085485612cba9190613423565b612cc49190613403565b905060006064600a5486612cd89190613423565b612ce29190613403565b9050612cf6612cf087612f47565b82612d83565b612d008186613442565b945050612d67565b606460095485612d189190613423565b612d229190613403565b905060006064600b5486612d369190613423565b612d409190613403565b600554909150612d59906001600160a01b031682612d83565b612d638186613442565b9450505b612d7081612fcf565b612d7a8185613442565b95945050505050565b6000826001600160a01b031682610dac90604051600060405180830381858888f193505050503d8060008114612dd5576040519150601f19603f3d011682016040523d82523d6000602084013e612dda565b606091505b5050905080610746576001600160a01b03831660009081526002602052604081208054849290612e0b9084906133c0565b9091555050505050565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600380546001600160a01b0319166001600160a01b038316908117909155604080516315ab88c960e31b8152905163ad5c464891600480820192602092909190829003018186803b158015612ebb57600080fd5b505afa158015612ecf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef3919061305c565b600480546001600160a01b0319166001600160a01b0392831617905560405190821681527f455a5e52b7c01aa52d717db42e17b6610b0c2c96560c85b7e5adcdd254bfc17c9060200160405180910390a150565b601154604051632b23615b60e21b8152600481018390526000916001600160a01b031690819063ac8d856c90602401602060405180830381600087803b158015612f9057600080fd5b505af1158015612fa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc8919061305c565b9392505050565b8060076000828254612fe191906133c0565b92505081905550306001600160a01b031663e122173c6207a1206040518263ffffffff1660e01b8152600401600060405180830381600088803b15801561302757600080fd5b5087f193505050508015613039575060015b61194c5750565b600060208284031215613051578081fd5b8135612fc88161348a565b60006020828403121561306d578081fd5b8151612fc88161348a565b6000806040838503121561308a578081fd5b82356130958161348a565b946020939093013593505050565b600080600080600060a086880312156130ba578081fd5b85356130c58161348a565b97602087013597506040870135966060810135965060800135945092505050565b6000602082840312156130f7578081fd5b5035919050565b60008060408385031215613110578182fd5b50508035926020909101359150565b600080600060608486031215613133578283fd5b505081359360208301359350604090920135919050565b600080600080600060a08688031215613161578081fd5b505083359560208501359550604085013594606081013594506080013592509050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b602080825282518282018190526000919060409081850190868401855b8281101561320657815180516001600160a01b0316855286810151878601528501516001600160401b031685850152606090930192908501906001016131c5565b5091979650505050505050565b600060808201868352602060808185015281875180845260a0860191508289019350845b8181101561325c5784516001600160a01b031683529383019391830191600101613237565b50506001600160a01b039690961660408501525050506060015292915050565b6020808252603d908201527f52656475636564207072696365206d757374206265206174206c65617374203560408201527f25206c657373207468616e207468652063757272656e74207072696365000000606082015260800190565b6020808252600a9082015269125b9d985b1a59081a5960b21b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601190820152704974656d206e6f7420666f722073616c6560781b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b94855260208501939093526001600160a01b039190911660408401526060830152608082015260a00190565b600082198211156133d3576133d3613474565b500190565b60006001600160401b038083168185168083038211156133fa576133fa613474565b01949350505050565b60008261341e57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561343d5761343d613474565b500290565b60008282101561345457613454613474565b500390565b600060001982141561346d5761346d613474565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461194c57600080fdfea264697066735822122047efd1da175f9a099495bd12f1e2ada3846adb95a24fc735ba73a6ca23bee8c064736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000021684c6b32665922755b5d5677c2df71cd0c64dd0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000008b17fea54d85f61e71bdf161e920762898ac53da000000000000000000000000cd11d4f84e6dd5cf256e595557ebd482399087ec
-----Decoded View---------------
Arg [0] : _dreamNFTAddress (address): 0x21684c6b32665922755b5D5677c2Df71cD0c64dD
Arg [1] : _uniswapRouterAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [2] : _dreamTokenAddress (address): 0x8b17feA54d85F61E71BdF161e920762898AC53da
Arg [3] : _devWallet (address): 0xcD11d4f84E6dD5CF256e595557Ebd482399087ec
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000021684c6b32665922755b5d5677c2df71cd0c64dd
Arg [1] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [2] : 0000000000000000000000008b17fea54d85f61e71bdf161e920762898ac53da
Arg [3] : 000000000000000000000000cd11d4f84e6dd5cf256e595557ebd482399087ec
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ 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.