Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
18863872 | 385 days ago | 0.00355 ETH | ||||
18863872 | 385 days ago | 0.066669 ETH | ||||
18863872 | 385 days ago | 0.001562 ETH | ||||
18863872 | 385 days ago | 0.071781 ETH | ||||
16718420 | 686 days ago | 0.0034 ETH | ||||
16718420 | 686 days ago | 0.063852 ETH | ||||
16718420 | 686 days ago | 0.001496 ETH | ||||
16718420 | 686 days ago | 0.068748 ETH | ||||
15985346 | 789 days ago | 0.00355 ETH | ||||
15985346 | 789 days ago | 0.066669 ETH | ||||
15985346 | 789 days ago | 0.001562 ETH | ||||
15985346 | 789 days ago | 0.071781 ETH | ||||
15899703 | 801 days ago | 0.0017 ETH | ||||
15899703 | 801 days ago | 0.031926 ETH | ||||
15899703 | 801 days ago | 0.000748 ETH | ||||
15899703 | 801 days ago | 0.034374 ETH | ||||
15587113 | 844 days ago | 0.0017 ETH | ||||
15587113 | 844 days ago | 0.031926 ETH | ||||
15587113 | 844 days ago | 0.000748 ETH | ||||
15587113 | 844 days ago | 0.034374 ETH | ||||
15506422 | 857 days ago | 0.00355 ETH | ||||
15506422 | 857 days ago | 0.066669 ETH | ||||
15506422 | 857 days ago | 0.001562 ETH | ||||
15506422 | 857 days ago | 0.071781 ETH | ||||
15499702 | 858 days ago | 0.00355 ETH |
Loading...
Loading
Contract Name:
EpikoMarketplace
Compiler Version
v0.8.7+commit.e28d00a7
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.1; import "./interfaces/IERC721Minter.sol"; import "./interfaces/IERC1155Minter.sol"; import "./interfaces/IMarket.sol"; import "@openzeppelin/contracts/interfaces/IERC2981.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; contract EpikoMarketplace is IMarket, Ownable { IERC1155Minter private epikoErc1155; IERC721Minter private epikoErc721; uint256 private _buyTax = 110; //divide by 100 uint256 private _sellTax = 110; //divide by 100 uint256 private constant PERCENTAGE_DENOMINATOR = 10000; address private mediaContract; bytes4 private constant ERC721INTERFACEID = 0x80ac58cd; // Interface Id of ERC721 bytes4 private constant ERC1155INTERFACEID = 0xd9b67a26; // Interface Id of ERC1155 bytes4 private constant ROYALTYINTERFACEID = 0x2a55205a; // interface Id of Royalty /// @dev mapping from NFT contract to user address to tokenId is item on auction check mapping(address => mapping(address => mapping(uint256 => bool))) private itemIdOnAuction; /// @dev mapping from NFT contract to user address to tokenId is item on sale check mapping(address => mapping(address => mapping(uint256 => bool))) private itemIdOnSale; /// @dev Mapping from Nft contract to tokenId to Auction structure mapping(address => mapping(address => mapping(uint256 => Auction))) public nftAuctionItem; /// @dev Mapping from Nft contract to tokenId to Sale structure mapping(address => mapping(address => mapping(uint256 => Sale))) public nftSaleItem; /// @dev Mapping from NFT contract to tokenId to bidders address mapping(address => mapping(uint256 => address[])) private bidderList; /// @dev mapping from NFT conntract to tokenid to bidder address to bid value mapping(address => mapping(uint256 => mapping(address => uint256))) private fundsByBidder; /// @dev mapping from Nft contract to tokenId to bid array mapping(address => mapping(uint256 => Bid[])) private bidAndValue; constructor() Ownable() {} fallback() external {} receive() external payable {} function onlyMedia() internal view { require(msg.sender == mediaContract, "Market: unauthorized Access"); } function configureMedia(address _mediaContract) external onlyOwner { require( _mediaContract != address(0), "Market: Media address is invalid" ); require( mediaContract == address(0), "Market: Media is already configured" ); mediaContract = _mediaContract; } /* Places item for sale on the marketplace */ function sellitem( address nftAddress, address erc20Token, address seller, uint256 tokenId, uint256 amount, uint256 price ) external override { onlyMedia(); Sale storage sale = nftSaleItem[nftAddress][seller][tokenId]; require( !itemIdOnSale[nftAddress][seller][tokenId], "Market: Nft already on Sale" ); require( !itemIdOnAuction[nftAddress][seller][tokenId], "Market: Nft already on Auction" ); sale.tokenId = tokenId; sale.price = price; sale.seller = seller; sale.erc20Token = erc20Token; sale.quantity = amount; sale.time = block.timestamp; itemIdOnSale[nftAddress][seller][tokenId] = true; emit MarketItemCreated(nftAddress, msg.sender, price, tokenId, amount); } /* Place buy order for Multiple item on marketplace */ function buyItem( address nftAddress, address seller, address buyer, uint256 tokenId, uint256 quantity ) external payable override { onlyMedia(); Sale storage sale = nftSaleItem[nftAddress][seller][tokenId]; require( quantity <= sale.quantity, "Market: not enough quantity available" ); validSale(nftAddress, seller, tokenId); uint256 price = sale.price; // ItemForSellOrForAuction storage sellItem = _itemOnSellAuction[tokenId][seller]; if (IERC721(nftAddress).supportsInterface(ERC721INTERFACEID)) { uint256 totalNftValue = price * quantity; if (!IERC721(nftAddress).supportsInterface(ROYALTYINTERFACEID)) { _transferTokens( totalNftValue, 0, sale.seller, buyer, address(0), sale.erc20Token ); IERC721(nftAddress).transferFrom( sale.seller, buyer, sale.tokenId ); } else { (address user, uint256 royaltyAmount) = IERC2981(nftAddress) .royaltyInfo(sale.tokenId, totalNftValue); _transferTokens( totalNftValue, royaltyAmount, sale.seller, buyer, user, sale.erc20Token ); IERC721(nftAddress).transferFrom( sale.seller, buyer, sale.tokenId ); } sale.sold = true; itemIdOnSale[nftAddress][seller][tokenId] = false; delete nftSaleItem[nftAddress][seller][tokenId]; // sellItem.onSell = false; emit Buy(seller, buyer, price, tokenId, sale.quantity); } else if ( IERC1155Minter(nftAddress).supportsInterface(ERC1155INTERFACEID) ) { uint256 totalNftValue = price * quantity; if (!IERC1155(nftAddress).supportsInterface(ROYALTYINTERFACEID)) { _transferTokens( totalNftValue, 0, sale.seller, buyer, address(0), sale.erc20Token ); IERC1155(nftAddress).safeTransferFrom( sale.seller, buyer, sale.tokenId, quantity, "" ); sale.quantity -= quantity; } else { (address user, uint256 royaltyAmount) = IERC2981(nftAddress) .royaltyInfo(sale.tokenId, totalNftValue); _transferTokens( totalNftValue, royaltyAmount, sale.seller, buyer, user, sale.erc20Token ); IERC1155(nftAddress).safeTransferFrom( sale.seller, buyer, sale.tokenId, quantity, "" ); sale.quantity -= quantity; } if (sale.quantity == 0) { sale.sold = true; itemIdOnSale[nftAddress][seller][tokenId] = false; delete nftSaleItem[nftAddress][seller][tokenId]; } // sellItem.onSell = false; emit Buy(seller, buyer, price, tokenId, quantity); } else { revert("Market: Token not exist"); } } /* Create Auction for item on marketplace */ function createAuction( address nftAddress, address erc20Token, address seller, uint256 tokenId, uint256 amount, uint256 basePrice, uint256 endTime ) external override { onlyMedia(); require( !itemIdOnSale[nftAddress][seller][tokenId], "Market: NFT already on sale" ); require( !itemIdOnAuction[nftAddress][seller][tokenId], "Market: NFT already on auction" ); uint256 startTime = block.timestamp; Auction storage auction = nftAuctionItem[nftAddress][seller][tokenId]; if (IERC721(nftAddress).supportsInterface(ERC721INTERFACEID)) { require(!auction.sold, "Market: Already on sell"); require( IERC721(nftAddress).ownerOf(tokenId) == seller, "Market: not nft owner" ); require( IERC721(nftAddress).getApproved(tokenId) == address(this), "Market: nft not approved for auction" ); _addItemtoAuction( nftAddress, erc20Token, tokenId, amount, basePrice, startTime, endTime, seller ); emit AuctionCreated( nftAddress, tokenId, seller, basePrice, amount, startTime, endTime ); } else if (IERC1155(nftAddress).supportsInterface(ERC1155INTERFACEID)) { require(!auction.sold, "Market: Already on sell"); require( IERC1155(nftAddress).balanceOf(seller, tokenId) >= amount, "Market: Not enough nft Balance" ); require( IERC1155(nftAddress).isApprovedForAll(seller, address(this)), "Market: NFT not approved for auction" ); _addItemtoAuction( nftAddress, erc20Token, tokenId, amount, basePrice, startTime, endTime, seller ); emit AuctionCreated( nftAddress, tokenId, seller, basePrice, amount, startTime, endTime ); } else { revert("Market: Token not Exist"); } } /* Place bid for item on marketplace */ function placeBid( address nftAddress, address bidder, address seller, uint256 tokenId, uint256 price ) external payable override { onlyMedia(); Auction storage auction = nftAuctionItem[nftAddress][seller][tokenId]; validAuction(nftAddress, seller, tokenId); require(auction.endTime > block.timestamp, "Market: Auction ended"); require( auction.startTime < block.timestamp, "Market: Auction not started" ); require( price >= auction.basePrice && price > auction.highestBid.bid, "Market: place highest bid" ); require(auction.seller != bidder, "Market: seller not allowed"); if (auction.erc20Token != address(0)) { require( IERC20(auction.erc20Token).allowance(bidder, address(this)) >= price, "Market: please proivde asking price" ); IERC20(auction.erc20Token).transferFrom( bidder, address(this), price ); } else { require(msg.value >= price, "Market: please proivde asking price"); } auction.highestBid.bid = price; auction.highestBid.bidder = bidder; // fundsByBidder[nftAddress][tokenId][bidder] = price; // bidAndValue[nftAddress][tokenId].push(Bid(bidder, price)); auction.bids.push(Bid(bidder, price)); emit PlaceBid(nftAddress, bidder, price, tokenId); } /* To Approve bid*/ function approveBid( address nftAddress, address seller, uint256 tokenId, address bidder ) external override { onlyMedia(); Auction storage auction = nftAuctionItem[nftAddress][seller][tokenId]; validAuction(nftAddress, seller, tokenId); // require( // fundsByBidder[nftAddress][tokenId][bidder] != 0, // "Market: bidder not found" // ); require( getBidAndBidder(auction, bidder) != 0, "Market: bidder not found" ); require(auction.endTime > block.timestamp, "Market: Auction ended"); require( auction.startTime < block.timestamp, "Market: Auction not started" ); require(auction.seller == seller, "Market: not authorised"); require(auction.tokenId == tokenId, "Market: Auction not found"); uint256 bidderValue = getBidAndBidder(auction, bidder); // uint256 bidderValue = fundsByBidder[nftAddress][tokenId][bidder]; if (IERC721(nftAddress).supportsInterface(ERC721INTERFACEID)) { if (!IERC721(nftAddress).supportsInterface(ROYALTYINTERFACEID)) { _tokenDistribute( auction, bidderValue, 0, auction.seller, address(0), bidder, auction.erc20Token ); IERC721(nftAddress).transferFrom( auction.seller, bidder, auction.tokenId ); } else { (address user, uint256 amount) = IERC2981(nftAddress) .royaltyInfo(auction.tokenId, bidderValue); _tokenDistribute( auction, bidderValue, amount, auction.seller, user, bidder, auction.erc20Token ); IERC721(nftAddress).transferFrom( auction.seller, bidder, auction.tokenId ); } auction.sold = true; itemIdOnAuction[nftAddress][auction.seller][tokenId] = false; emit Buy( auction.seller, bidder, bidderValue, tokenId, auction.quantity ); delete nftAuctionItem[nftAddress][seller][tokenId]; } else if (IERC1155(nftAddress).supportsInterface(ERC1155INTERFACEID)) { if (!IERC721(nftAddress).supportsInterface(ROYALTYINTERFACEID)) { _tokenDistribute( auction, bidderValue, 0, auction.seller, address(0), bidder, auction.erc20Token ); IERC1155(nftAddress).safeTransferFrom( auction.seller, bidder, auction.tokenId, auction.quantity, "" ); } else { (address user, uint256 amount) = IERC2981(nftAddress) .royaltyInfo(auction.tokenId, bidderValue); _tokenDistribute( auction, bidderValue, amount, auction.seller, user, bidder, auction.erc20Token ); IERC1155(nftAddress).safeTransferFrom( auction.seller, bidder, auction.tokenId, auction.quantity, "" ); } auction.sold = true; itemIdOnAuction[nftAddress][auction.seller][tokenId] = false; emit Buy( auction.seller, bidder, bidderValue, tokenId, auction.quantity ); delete nftAuctionItem[nftAddress][seller][tokenId]; } else { revert("Market: NFT not supported"); } } /* To Claim NFT bid*/ function claimNft( address nftAddress, address bidder, address seller, uint256 tokenId ) external override { onlyMedia(); Auction storage auction = nftAuctionItem[nftAddress][seller][tokenId]; require(nftAddress != address(0), "Market: address zero given"); require(tokenId > 0, "Market: not valid nft id"); require(auction.endTime < block.timestamp, "Market: Auction not ended"); require( auction.highestBid.bidder == bidder, "Market: Only highest bidder can claim" ); uint256 bidderValue = getBidAndBidder(auction, bidder); // uint256 bidderValue = fundsByBidder[nftAddress][tokenId][bidder]; if (IERC721(nftAddress).supportsInterface(ERC721INTERFACEID)) { if (!IERC721(nftAddress).supportsInterface(ROYALTYINTERFACEID)) { _tokenDistribute( auction, bidderValue, 0, auction.seller, address(0), bidder, auction.erc20Token ); IERC721(nftAddress).transferFrom( auction.seller, bidder, auction.tokenId ); } else { (address user, uint256 amount) = IERC2981(nftAddress) .royaltyInfo(auction.tokenId, bidderValue); _tokenDistribute( auction, bidderValue, amount, auction.seller, user, bidder, auction.erc20Token ); IERC721(nftAddress).transferFrom( auction.seller, bidder, auction.tokenId ); } auction.sold = true; itemIdOnAuction[nftAddress][auction.seller][tokenId] = false; emit Buy( auction.seller, bidder, bidderValue, tokenId, auction.quantity ); delete nftAuctionItem[nftAddress][seller][tokenId]; } else if (IERC1155(nftAddress).supportsInterface(ERC1155INTERFACEID)) { if (!IERC721(nftAddress).supportsInterface(ROYALTYINTERFACEID)) { _tokenDistribute( auction, bidderValue, 0, auction.seller, address(0), bidder, auction.erc20Token ); IERC1155(nftAddress).safeTransferFrom( auction.seller, bidder, auction.tokenId, auction.quantity, "" ); } else { (address user, uint256 amount) = IERC2981(nftAddress) .royaltyInfo(auction.tokenId, bidderValue); _tokenDistribute( auction, bidderValue, amount, auction.seller, user, bidder, auction.erc20Token ); IERC1155(nftAddress).safeTransferFrom( auction.seller, bidder, auction.tokenId, auction.quantity, "" ); } auction.sold = true; itemIdOnAuction[nftAddress][auction.seller][tokenId] = false; emit Buy( auction.seller, bidder, bidderValue, tokenId, auction.quantity ); delete nftAuctionItem[nftAddress][seller][tokenId]; } else { revert("Market: NFT not supported"); } } /* To cancel Auction */ function cancelAuction( address nftAddress, address seller, uint256 tokenId ) external override { onlyMedia(); Auction storage auction = nftAuctionItem[nftAddress][seller][tokenId]; require( auction.seller == seller || owner() == seller, "Market: only seller or owner can cancel sell" ); validAuction(nftAddress, seller, tokenId); require(auction.endTime > block.timestamp, "Market: Auction ended"); require(!auction.sold, "Market: Already sold"); if (auction.highestBid.bid > 0) { for (uint256 index = auction.bids.length - 1; index >= 0; index--) { IERC20(auction.erc20Token).transfer( auction.bids[index].bidder, auction.bids[index].bid ); delete auction.bids[index]; // bidAndValue[nftAddress][tokenId][index] = bidAndValue[nftAddress][tokenId][bidAndValue[nftAddress][tokenId].length - 1]; auction.bids.pop(); if (index == 0) { break; } } } delete nftAuctionItem[nftAddress][seller][tokenId]; itemIdOnAuction[nftAddress][seller][tokenId] = false; } /* To cancel sell */ function cancelSell( address nftAddress, address seller, uint256 tokenId ) external override { onlyMedia(); Sale storage sale = nftSaleItem[nftAddress][seller][tokenId]; require( (sale.seller == seller) || owner() == seller, "Market: Only seller or owner can cancel sell" ); validSale(nftAddress, seller, tokenId); require( !nftSaleItem[nftAddress][seller][tokenId].sold, "Market: NFT Sold" ); delete nftSaleItem[nftAddress][seller][tokenId]; itemIdOnSale[nftAddress][seller][tokenId] = false; } // function unsafe_inc(uint256 i) private pure returns (uint256) { // unchecked { // return i + 1; // } // } /* To cancel auction bid */ function cancelBid( address nftAddress, address bidder, address seller, uint256 tokenId ) external override { onlyMedia(); Auction storage auction = nftAuctionItem[nftAddress][seller][tokenId]; require( nftAuctionItem[nftAddress][seller][tokenId].endTime > block.timestamp, "Market: Auction ended" ); require( getBidAndBidder(auction, bidder) > 0, "Market: not bided on auction" ); // require( // fundsByBidder[nftAddress][tokenId][bidder] > 0, // "Market: not bided on auction" // ); // uint256 bidLength = bidAndValue[nftAddress][tokenId].length; uint256 bidLength = auction.bids.length; for (uint256 index = 0; index < bidLength; index++) { if (auction.bids[index].bidder == bidder) { if (auction.erc20Token != address(0)) { IERC20(auction.erc20Token).transfer( auction.bids[index].bidder, auction.bids[index].bid ); } else { payable(auction.bids[index].bidder).transfer( auction.bids[index].bid ); } delete auction.bids[index]; auction.bids[index].bidder = auction.bids[bidLength - 1].bidder; auction.bids[index].bid = auction.bids[bidLength - 1].bid; auction.bids.pop(); if (auction.highestBid.bidder == bidder) { auction.highestBid.bidder = auction .bids[auction.bids.length - 1] .bidder; auction.highestBid.bid = auction .bids[auction.bids.length - 1] .bid; } // bidAndValue[nftAddress][tokenId].pop(); break; } } if (bidLength < 1) { auction.highestBid.bidder = address(0); auction.highestBid.bid = 0; } emit CancelBid(tokenId, seller, bidder); } /* To check list of bidder */ // function checkBidderList(address nftAddress, uint256 tokenId) // external // view // returns (Bid[] memory bid) // { // require(tokenId > 0, "Market: not valid id"); // return bidAndValue[nftAddress][tokenId]; // } /* To transfer nfts from `from` to `to` */ function transfer( address from, address to, uint256 tokenId, uint256 amount ) external { require(to != address(0), "Market: Transfer to zero address"); require(from != address(0), "Market: Transfer from zero address"); require(tokenId > 0, "Market: Not valid tokenId"); if (epikoErc721._isExist(tokenId)) { epikoErc721.transferFrom(from, to, tokenId); } else if (epikoErc1155._isExist(tokenId)) { epikoErc1155.safeTransferFrom(from, to, tokenId, amount, ""); } } /* owner can set selltax(fees) */ function setSellTax(uint256 percentage) external onlyOwner { require( percentage <= PERCENTAGE_DENOMINATOR, "Market: percentage must be less than 100" ); _sellTax = percentage; } /* owner can set buytax(fees) */ function setBuyTax(uint256 percentage) external onlyOwner { require( percentage <= PERCENTAGE_DENOMINATOR, "Market: percentage must be less than 100" ); _buyTax = percentage; } function getBuyTax() public view returns (uint256) { return _buyTax; } function getSellTax() public view returns (uint256) { return _sellTax; } function getBidAndBidder(Auction memory auction, address bidder) internal pure returns (uint256 bid) { for (uint256 index = 0; index < auction.bids.length; index++) { if (auction.bids[index].bidder == bidder) { return auction.bids[index].bid; } } } function _transferTokens( uint256 price, uint256 royaltyAmount, address _seller, address _buyer, address royaltyReceiver, address token ) private { uint256 amountForOwner; // uint256 buyingValue = price.add(price.mul(_sellTax)).div(PERCENTAGE_DENOMINATOR); uint256 buyingValue = price + (price * _sellTax) / PERCENTAGE_DENOMINATOR; uint256 amountForSeller = price - (price * _buyTax) / PERCENTAGE_DENOMINATOR; amountForOwner = buyingValue - amountForSeller; if (token != address(0)) { require( IERC20(token).allowance(_buyer, address(this)) >= buyingValue, "Market: please proivde asking price" ); IERC20(token).transferFrom(_buyer, address(this), buyingValue); IERC20(token).transfer(owner(), amountForOwner); IERC20(token).transfer(_seller, amountForSeller - royaltyAmount); if (royaltyReceiver != address(0)) { IERC20(token).transfer(royaltyReceiver, royaltyAmount); } } else { require(msg.value >= buyingValue, "Market: Provide asking price"); payable(owner()).transfer(amountForOwner); payable(_seller).transfer(amountForSeller - royaltyAmount); if (royaltyReceiver != address(0)) { payable(royaltyReceiver).transfer(royaltyAmount); } } } function _tokenDistribute( Auction memory auction, uint256 price, uint256 _amount, address _seller, address royaltyReceiver, address _bidder, address token ) private { uint256 amountForOwner; uint256 amountForSeller = price - ((price * (_buyTax + _sellTax)) / PERCENTAGE_DENOMINATOR); // uint256 amountForSeller = price.sub(price.mul(_buyTax.add(_sellTax))).div(PERCENTAGE_DENOMINATOR); amountForOwner = price - amountForSeller; amountForSeller = amountForSeller - _amount; if (token != address(0)) { IERC20(token).transfer(owner(), amountForOwner); IERC20(token).transfer(_seller, amountForSeller); if (royaltyReceiver != address(0)) { IERC20(token).transfer(royaltyReceiver, _amount); } } else { if (royaltyReceiver != address(0)) { payable(royaltyReceiver).transfer(_amount); } } for (uint256 index = 0; index < auction.bids.length; index++) { if (auction.bids[index].bidder != _bidder) { if (token != address(0)) { IERC20(token).transfer( auction.bids[index].bidder, auction.bids[index].bid ); } else { payable(auction.bids[index].bidder).transfer( auction.bids[index].bid ); } } } } function _addItemtoAuction( address nftAddress, address erc20Token, uint256 tokenId, uint256 _amount, uint256 basePrice, uint256 startTime, uint256 endTime, address _seller ) private { Auction storage auction = nftAuctionItem[nftAddress][_seller][tokenId]; auction.nftContract = nftAddress; auction.erc20Token = erc20Token; auction.tokenId = tokenId; auction.basePrice = basePrice; auction.seller = _seller; auction.quantity = _amount; auction.time = block.timestamp; auction.startTime = startTime; auction.endTime = endTime; itemIdOnAuction[nftAddress][_seller][tokenId] = true; } function revokeAuction( address nftAddress, address seller, uint256 tokenId ) external override { onlyMedia(); validAuction(nftAddress, seller, tokenId); require( nftAuctionItem[nftAddress][seller][tokenId].endTime < block.timestamp, "Auction is not ended" ); require( nftAuctionItem[nftAddress][seller][tokenId].highestBid.bid == 0, "Revoke not Allowed" ); itemIdOnAuction[nftAddress][seller][tokenId] = false; } function validAuction( address nftAddress, address seller, uint256 tokenId ) internal view { require( itemIdOnAuction[nftAddress][seller][tokenId], "Market: NFT not on sale" ); } function validSale( address nftAddress, address seller, uint256 tokenId ) internal view { require( itemIdOnSale[nftAddress][seller][tokenId], "Market: NFT not on sale" ); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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 (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (interfaces/IERC2981.sol) pragma solidity ^0.8.0; import "../utils/introspection/IERC165.sol"; /** * @dev Interface for the NFT Royalty Standard. * * A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal * support for royalty payments across all NFT marketplaces and ecosystem participants. * * _Available since v4.5._ */ interface IERC2981 is IERC165 { /** * @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of * exchange. The royalty amount is denominated and should be paid in that same unit of exchange. */ function royaltyInfo(uint256 tokenId, uint256 salePrice) external view returns (address receiver, uint256 royaltyAmount); }
//SPDX-License-Identifier: MIT pragma solidity ^0.8.1; interface IMarket { struct Sale { uint256 itemId; uint256 tokenId; uint256 price; uint256 quantity; uint256 time; address nftContract; address erc20Token; address buyer; address seller; bool sold; } struct Auction { uint256 itemId; uint256 tokenId; uint256 startTime; uint256 endTime; uint256 basePrice; uint256 quantity; uint256 time; Bid[] bids; address seller; address nftContract; address erc20Token; bool sold; Bid highestBid; } struct Bid { address bidder; uint256 bid; } event Mint(address from, address to, uint256 indexed tokenId); event PlaceBid( address nftAddress, address bidder, uint256 price, uint256 tokenId ); event MarketItemCreated( address indexed nftAddress, address indexed seller, uint256 price, uint256 indexed tokenId, uint256 quantity ); event Buy( address indexed seller, address bidder, uint256 indexed price, uint256 indexed tokenId, uint256 quantity ); event AuctionCreated( address indexed nftAddress, uint256 indexed tokenId, address indexed seller, uint256 price, uint256 quantity, uint256 startTime, uint256 endTime ); event CancelBid( uint256 indexed tokenId, address indexed seller, address indexed bidder ); function sellitem( address nftAddress, address erc20Token, address seller, uint256 tokenId, uint256 amount, uint256 price ) external; function buyItem( address nftAddress, address seller, address buyer, uint256 tokenId, uint256 quantity ) external payable; function createAuction( address nftAddress, address erc20Token, address seller, uint256 tokenId, uint256 amount, uint256 basePrice, uint256 endTime ) external; function placeBid( address nftAddress, address bidder, address seller, uint256 tokenId, uint256 price ) external payable; function approveBid( address nftAddress, address seller, uint256 tokenId, address bidder ) external; function claimNft( address nftAddress, address bidder, address seller, uint256 tokenId ) external; function cancelBid( address nftAddress, address _bidder, address seller, uint256 tokenId ) external; function cancelSell( address nftAddress, address seller, uint256 tokenId ) external; function cancelAuction( address nftAddress, address seller, uint256 tokenId ) external; function revokeAuction( address nftAddress, address seller, uint256 tokenId ) external; }
//SPDX-License-Identifier:MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/interfaces/IERC1155.sol"; import "@openzeppelin/contracts/interfaces/IERC2981.sol"; interface IERC1155Minter is IERC1155,IERC2981{ function getArtist(uint256 tokenId) external view returns(address); function burn(address from, uint256 id, uint256 amounts) external; function mint(address to, uint256 amount, uint256 _royaltyFraction, string memory uri,bytes memory data)external returns(uint256); function _isExist(uint256 tokenId) external returns(bool); }
//SPDX-License-Identifier:MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/interfaces/IERC721.sol"; import "@openzeppelin/contracts/interfaces/IERC2981.sol"; interface IERC721Minter is IERC721,IERC2981{ function mint(address to, uint256 royaltyFraction, string memory _uri)external returns(uint256); function burn(uint256 tokenId) external; function _isExist(uint256 tokenId)external view returns(bool); function isApprovedOrOwner(address spender, uint256 tokenId)external view returns(bool); function getArtist(uint256 tokenId)external view returns(address); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (interfaces/IERC721.sol) pragma solidity ^0.8.0; import "../token/ERC721/IERC721.sol";
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (interfaces/IERC1155.sol) pragma solidity ^0.8.0; import "../token/ERC1155/IERC1155.sol";
// 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; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; }
{ "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":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"nftAddress","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"AuctionCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"address","name":"bidder","type":"address"},{"indexed":true,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"Buy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":true,"internalType":"address","name":"bidder","type":"address"}],"name":"CancelBid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"nftAddress","type":"address"},{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"MarketItemCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Mint","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":"address","name":"nftAddress","type":"address"},{"indexed":false,"internalType":"address","name":"bidder","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"PlaceBid","type":"event"},{"stateMutability":"nonpayable","type":"fallback"},{"inputs":[{"internalType":"address","name":"nftAddress","type":"address"},{"internalType":"address","name":"seller","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"bidder","type":"address"}],"name":"approveBid","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nftAddress","type":"address"},{"internalType":"address","name":"seller","type":"address"},{"internalType":"address","name":"buyer","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"buyItem","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"nftAddress","type":"address"},{"internalType":"address","name":"seller","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"cancelAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nftAddress","type":"address"},{"internalType":"address","name":"bidder","type":"address"},{"internalType":"address","name":"seller","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"cancelBid","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nftAddress","type":"address"},{"internalType":"address","name":"seller","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"cancelSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nftAddress","type":"address"},{"internalType":"address","name":"bidder","type":"address"},{"internalType":"address","name":"seller","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"claimNft","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_mediaContract","type":"address"}],"name":"configureMedia","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nftAddress","type":"address"},{"internalType":"address","name":"erc20Token","type":"address"},{"internalType":"address","name":"seller","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"basePrice","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"createAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"nftAuctionItem","outputs":[{"internalType":"uint256","name":"itemId","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"basePrice","type":"uint256"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"},{"internalType":"address","name":"seller","type":"address"},{"internalType":"address","name":"nftContract","type":"address"},{"internalType":"address","name":"erc20Token","type":"address"},{"internalType":"bool","name":"sold","type":"bool"},{"components":[{"internalType":"address","name":"bidder","type":"address"},{"internalType":"uint256","name":"bid","type":"uint256"}],"internalType":"struct IMarket.Bid","name":"highestBid","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"nftSaleItem","outputs":[{"internalType":"uint256","name":"itemId","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"},{"internalType":"address","name":"nftContract","type":"address"},{"internalType":"address","name":"erc20Token","type":"address"},{"internalType":"address","name":"buyer","type":"address"},{"internalType":"address","name":"seller","type":"address"},{"internalType":"bool","name":"sold","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"nftAddress","type":"address"},{"internalType":"address","name":"bidder","type":"address"},{"internalType":"address","name":"seller","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"placeBid","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nftAddress","type":"address"},{"internalType":"address","name":"seller","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"revokeAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nftAddress","type":"address"},{"internalType":"address","name":"erc20Token","type":"address"},{"internalType":"address","name":"seller","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"sellitem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentage","type":"uint256"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentage","type":"uint256"}],"name":"setSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052606e600355606e6004553480156200001b57600080fd5b5062000027336200002d565b6200007d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b615920806200008d6000396000f3fe60806040526004361061012e5760003560e01c80639662e4dc116100ab578063ba45eb811161006f578063ba45eb8114610302578063c4fd5bc214610435578063c80b9f8614610455578063dc1052e214610547578063eeadfb9614610567578063f2fde38b1461058757610135565b80639662e4dc1461027a5780639ab6a3e01461029a578063a7a8f991146102ad578063af59a88a146102cd578063b0bc85de146102ed57610135565b80637a893895116100f25780637a893895146101d25780637c1f27da146101f25780638cd09d50146102125780638da5cb5b146102325780638fc912c51461025a57610135565b80630411b25214610144578063252d723a1461016657806328c3afd11461018a5780634a538b7f1461019d578063715018a6146101bd57610135565b3661013557005b34801561014157600080fd5b50005b34801561015057600080fd5b5061016461015f3660046155c5565b6105a7565b005b34801561017257600080fd5b506003545b6040519081526020015b60405180910390f35b610164610198366004615403565b610891565b3480156101a957600080fd5b506101646101b8366004615531565b611175565b3480156101c957600080fd5b50610164611545565b3480156101de57600080fd5b506101646101ed366004615572565b611559565b3480156101fe57600080fd5b5061016461020d36600461545e565b6123d3565b34801561021e57600080fd5b5061016461022d36600461565b565b6125ba565b34801561023e57600080fd5b506000546040516001600160a01b039091168152602001610181565b34801561026657600080fd5b50610164610275366004615371565b6125e9565b34801561028657600080fd5b506101646102953660046154c3565b6126ce565b6101646102a8366004615403565b612e7c565b3480156102b957600080fd5b506101646102c8366004615531565b61321a565b3480156102d957600080fd5b506101646102e83660046153b2565b61334e565b3480156102f957600080fd5b50600454610177565b34801561030e57600080fd5b506103ba61031d366004615531565b600860208181526000948552604080862082529385528385208152918452928290208054600182015460028301546003840154600485015460058601546006870154998701546009880154600a8901548b51808d01909c52600b8a01546001600160a01b039081168d52600c909a01549a8c019a909a52969a95999498939792969195949083169391831692821691600160a01b900460ff16908c565b604080519c8d526020808e019c909c528c019990995260608b019790975260808a019590955260a089019390935260c08801919091526001600160a01b0390811660e088015290811661010087015290811661012086015290151561014085015281511661016084015201516101808201526101a001610181565b34801561044157600080fd5b506101646104503660046153b2565b613984565b34801561046157600080fd5b506104e9610470366004615531565b6009602090815260009384526040808520825292845282842090528252902080546001820154600283015460038401546004850154600586015460068701546007880154600890980154969795969495939492936001600160a01b0392831693918316929081169190811690600160a01b900460ff168a565b604080519a8b5260208b019990995297890196909652606088019490945260808701929092526001600160a01b0390811660a087015290811660c086015290811660e085015216610100830152151561012082015261014001610181565b34801561055357600080fd5b5061016461056236600461565b565b61459a565b34801561057357600080fd5b50610164610582366004615531565b6145c9565b34801561059357600080fd5b506101646105a2366004615371565b6147d0565b6001600160a01b0383166106025760405162461bcd60e51b815260206004820181905260248201527f4d61726b65743a205472616e7366657220746f207a65726f206164647265737360448201526064015b60405180910390fd5b6001600160a01b0384166106635760405162461bcd60e51b815260206004820152602260248201527f4d61726b65743a205472616e736665722066726f6d207a65726f206164647265604482015261737360f01b60648201526084016105f9565b600082116106b35760405162461bcd60e51b815260206004820152601960248201527f4d61726b65743a204e6f742076616c696420746f6b656e49640000000000000060448201526064016105f9565b600254604051630985c14360e21b8152600481018490526001600160a01b0390911690632617050c9060240160206040518083038186803b1580156106f757600080fd5b505afa15801561070b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072f9190615639565b1561079f576002546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906107689087908790879060040161568d565b600060405180830381600087803b15801561078257600080fd5b505af1158015610796573d6000803e3d6000fd5b5050505061088b565b600154604051630985c14360e21b8152600481018490526001600160a01b0390911690632617050c90602401602060405180830381600087803b1580156107e557600080fd5b505af11580156107f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081d9190615639565b1561088b57600154604051637921219560e11b81526001600160a01b039091169063f242432a906108589087908790879087906004016156b1565b600060405180830381600087803b15801561087257600080fd5b505af1158015610886573d6000803e3d6000fd5b505050505b50505050565b610899614849565b6001600160a01b038086166000908152600960209081526040808320938816835292815282822085835290522060038101548211156109285760405162461bcd60e51b815260206004820152602560248201527f4d61726b65743a206e6f7420656e6f756768207175616e7469747920617661696044820152646c61626c6560d81b60648201526084016105f9565b6109338686856148a3565b60028101546040516301ffc9a760e01b81526001600160a01b038816906301ffc9a79061096b906380ac58cd60e01b90600401615702565b60206040518083038186803b15801561098357600080fd5b505afa158015610997573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bb9190615639565b15610d135760006109cc848361580b565b6040516301ffc9a760e01b81529091506001600160a01b038916906301ffc9a790610a029063152a902d60e11b90600401615702565b60206040518083038186803b158015610a1a57600080fd5b505afa158015610a2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a529190615639565b610af25760088301546006840154610a7f9183916000916001600160a01b03908116918b9184911661491f565b600883015460018401546040516323b872dd60e01b81526001600160a01b03808c16936323b872dd93610abb9391909216918b9160040161568d565b600060405180830381600087803b158015610ad557600080fd5b505af1158015610ae9573d6000803e3d6000fd5b50505050610c1a565b600183015460405163152a902d60e11b815260048101919091526024810182905260009081906001600160a01b038b1690632a55205a90604401604080518083038186803b158015610b4357600080fd5b505afa158015610b57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7b919061560b565b60088701546006880154929450909250610ba991859184916001600160a01b03918216918d9188911661491f565b600885015460018601546040516323b872dd60e01b81526001600160a01b03808e16936323b872dd93610be59391909216918d9160040161568d565b600060405180830381600087803b158015610bff57600080fd5b505af1158015610c13573d6000803e3d6000fd5b5050505050505b6008808401805460ff60a01b1916600160a01b1790556001600160a01b03808a166000818152600760208181526040808420958e168085529582528084208c85528252808420805460ff191690559383526009815283832085845281528383208b845290528282208281556001810183905560028101839055600380820184905560048201939093556005810180546001600160a01b031990811690915560068201805482169055918101805490921690915590930180546001600160a81b031916905591850154915187928592916000805160206158cb83398151915291610d05918c91906156e9565b60405180910390a45061116c565b6040516301ffc9a760e01b81526001600160a01b038816906301ffc9a790610d4690636cdb3d1360e11b90600401615702565b60206040518083038186803b158015610d5e57600080fd5b505afa158015610d72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d969190615639565b15611124576000610da7848361580b565b6040516301ffc9a760e01b81529091506001600160a01b038916906301ffc9a790610ddd9063152a902d60e11b90600401615702565b60206040518083038186803b158015610df557600080fd5b505afa158015610e09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2d9190615639565b610ee95760088301546006840154610e5a9183916000916001600160a01b03908116918b9184911661491f565b60088301546001840154604051637921219560e11b81526001600160a01b03808c169363f242432a93610e989391909216918b918a906004016156b1565b600060405180830381600087803b158015610eb257600080fd5b505af1158015610ec6573d6000803e3d6000fd5b5050505083836003016000828254610ede919061582a565b9091555061102c9050565b600183015460405163152a902d60e11b815260048101919091526024810182905260009081906001600160a01b038b1690632a55205a90604401604080518083038186803b158015610f3a57600080fd5b505afa158015610f4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f72919061560b565b60088701546006880154929450909250610fa091859184916001600160a01b03918216918d9188911661491f565b60088501546001860154604051637921219560e11b81526001600160a01b03808e169363f242432a93610fde9391909216918d918c906004016156b1565b600060405180830381600087803b158015610ff857600080fd5b505af115801561100c573d6000803e3d6000fd5b5050505085856003016000828254611024919061582a565b909155505050505b60038301546110f9576008808401805460ff60a01b1916600160a01b1790556001600160a01b03808a166000818152600760208181526040808420958e168085529582528084208c85528252808420805460ff19169055938352600981528383209483529384528282208a835290935290812081815560018101829055600281018290556003810182905560048101919091556005810180546001600160a01b03199081169091556006820180548216905591810180549092169091550180546001600160a81b03191690555b8482886001600160a01b03166000805160206158cb8339815191528988604051610d059291906156e9565b60405162461bcd60e51b815260206004820152601760248201527f4d61726b65743a20546f6b656e206e6f7420657869737400000000000000000060448201526064016105f9565b50505050505050565b61117d614849565b6001600160a01b0380841660009081526008602081815260408084208786168086529083528185208786529092529092209081015490921614806111e35750826001600160a01b03166111d86000546001600160a01b031690565b6001600160a01b0316145b6112445760405162461bcd60e51b815260206004820152602c60248201527f4d61726b65743a206f6e6c792073656c6c6572206f72206f776e65722063616e60448201526b0818d85b98d95b081cd95b1b60a21b60648201526084016105f9565b61124f848484614d7d565b428160030154116112725760405162461bcd60e51b81526004016105f990615717565b600a810154600160a01b900460ff16156112c55760405162461bcd60e51b815260206004820152601460248201527313585c9ad95d0e88105b1c9958591e481cdbdb1960621b60448201526064016105f9565b600c810154156114595760078101546000906112e39060019061582a565b90505b600a8201546007830180546001600160a01b039092169163a9059cbb9190849081106113145761131461589f565b60009182526020909120600290910201546007850180546001600160a01b0390921691859081106113475761134761589f565b9060005260206000209060020201600101546040518363ffffffff1660e01b81526004016113769291906156e9565b602060405180830381600087803b15801561139057600080fd5b505af11580156113a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c89190615639565b508160070181815481106113de576113de61589f565b60009182526020822060029091020180546001600160a01b0319168155600101556007820180548061141257611412615889565b60008281526020812060026000199093019283020180546001600160a01b03191681556001015590558061144557611457565b8061144f81615841565b9150506112e6565b505b6001600160a01b03808516600090815260086020908152604080832093871683529281528282208583529052908120818155600181018290556002810182905560038101829055600481018290556005810182905560068101829055906114c3600783018261532b565b506008810180546001600160a01b031990811690915560098201805482169055600a820180546001600160a81b0319169055600b8201805490911690556000600c9091018190556001600160a01b0394851681526006602090815260408083209590961682529384528481209281529190925291909120805460ff1916905550565b61154d614df4565b6115576000614e4e565b565b611561614849565b6001600160a01b0380851660009081526008602090815260408083209387168352928152828220858352905220611599858585614d7d565b6116d381604051806101a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201805480602002602001604051908101604052809291908181526020016000905b8282101561165c576000848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101611614565b5050509082525060088201546001600160a01b0390811660208084019190915260098401548216604080850191909152600a8501548084166060860152600160a01b900460ff16151560808501528051808201909152600b8501549092168252600c909301549281019290925260a0015283614e9e565b61171f5760405162461bcd60e51b815260206004820152601860248201527f4d61726b65743a20626964646572206e6f7420666f756e64000000000000000060448201526064016105f9565b428160030154116117425760405162461bcd60e51b81526004016105f990615717565b428160020154106117955760405162461bcd60e51b815260206004820152601b60248201527f4d61726b65743a2041756374696f6e206e6f742073746172746564000000000060448201526064016105f9565b60088101546001600160a01b038581169116146117ed5760405162461bcd60e51b815260206004820152601660248201527513585c9ad95d0e881b9bdd08185d5d1a1bdc9a5cd95960521b60448201526064016105f9565b828160010154146118405760405162461bcd60e51b815260206004820152601960248201527f4d61726b65743a2041756374696f6e206e6f7420666f756e640000000000000060448201526064016105f9565b600061197c82604051806101a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201805480602002602001604051908101604052809291908181526020016000905b82821015611905576000848152602090819020604080518082019091526002850290910180546001600160a01b031682526001908101548284015290835290920191016118bd565b5050509082525060088201546001600160a01b0390811660208084019190915260098401548216604080850191909152600a8501548084166060860152600160a01b900460ff16151560808501528051808201909152600b8501549092168252600c909301549281019290925260a0015284614e9e565b6040516301ffc9a760e01b81529091506001600160a01b038716906301ffc9a7906119b2906380ac58cd60e01b90600401615702565b60206040518083038186803b1580156119ca57600080fd5b505afa1580156119de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a029190615639565b15611fdf576040516301ffc9a760e01b81526001600160a01b038716906301ffc9a790611a3a9063152a902d60e11b90600401615702565b60206040518083038186803b158015611a5257600080fd5b505afa158015611a66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8a9190615639565b611c5557611be282604051806101a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201805480602002602001604051908101604052809291908181526020016000905b82821015611b51576000848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101611b09565b505050908252506008828101546001600160a01b0390811660208085019190915260098501548216604080860191909152600a808701548085166060880152600160a01b900460ff16151560808701528151808301909252600b87015484168252600c909601549181019190915260a0909301929092528601549186015485926000929081169183918a9116614f2e565b600882015460018301546040516323b872dd60e01b81526001600160a01b03808a16936323b872dd93611c1e939190921691889160040161568d565b600060405180830381600087803b158015611c3857600080fd5b505af1158015611c4c573d6000803e3d6000fd5b50505050611ea6565b600182015460405163152a902d60e11b815260048101919091526024810182905260009081906001600160a01b03891690632a55205a90604401604080518083038186803b158015611ca657600080fd5b505afa158015611cba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cde919061560b565b91509150611e3584604051806101a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201805480602002602001604051908101604052809291908181526020016000905b82821015611da5576000848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101611d5d565b505050908252506008828101546001600160a01b0390811660208085019190915260098501548216604080860191909152600a808701548085166060880152600160a01b900460ff16151560808701528151808301909252600b87015484168252600c909601549181019190915260a09093019290925288015491880154879286929081169188918c9116614f2e565b600884015460018501546040516323b872dd60e01b81526001600160a01b03808c16936323b872dd93611e719391909216918a9160040161568d565b600060405180830381600087803b158015611e8b57600080fd5b505af1158015611e9f573d6000803e3d6000fd5b5050505050505b600a8201805460ff60a01b1916600160a01b1790556001600160a01b0380871660009081526006602090815260408083206008870180548616855290835281842089855290925291829020805460ff191690555460058501549151879385939216916000805160206158cb83398151915291611f239189916156e9565b60405180910390a46001600160a01b0380871660009081526008602090815260408083209389168352928152828220878352905290812081815560018101829055600281018290556003810182905560048101829055600581018290556006810182905590611f95600783018261532b565b506008810180546001600160a01b031990811690915560098201805482169055600a820180546001600160a81b0319169055600b8201805490911690556000600c909101556123cb565b6040516301ffc9a760e01b81526001600160a01b038716906301ffc9a79061201290636cdb3d1360e11b90600401615702565b60206040518083038186803b15801561202a57600080fd5b505afa15801561203e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120629190615639565b15612383576040516301ffc9a760e01b81526001600160a01b038716906301ffc9a79061209a9063152a902d60e11b90600401615702565b60206040518083038186803b1580156120b257600080fd5b505afa1580156120c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ea9190615639565b6121f2576121b082604051806101a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782018054806020026020016040519081016040528092919081815260200160009082821015611b51576000848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101611b09565b600882015460018301546005840154604051637921219560e11b81526001600160a01b038a81169463f242432a94611c1e9492909116928992906004016156b1565b600182015460405163152a902d60e11b815260048101919091526024810182905260009081906001600160a01b03891690632a55205a90604401604080518083038186803b15801561224357600080fd5b505afa158015612257573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061227b919061560b565b9150915061234184604051806101a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782018054806020026020016040519081016040528092919081815260200160009082821015611da5576000848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101611d5d565b600884015460018501546005860154604051637921219560e11b81526001600160a01b038c81169463f242432a94611e719492909116928b92906004016156b1565b60405162461bcd60e51b815260206004820152601960248201527f4d61726b65743a204e4654206e6f7420737570706f727465640000000000000060448201526064016105f9565b505050505050565b6123db614849565b6001600160a01b0380871660008181526009602090815260408083209489168084529482528083208884528252808320938352600782528083209483529381528382208783529052919091205460ff16156124785760405162461bcd60e51b815260206004820152601b60248201527f4d61726b65743a204e667420616c7265616479206f6e2053616c65000000000060448201526064016105f9565b6001600160a01b03808816600090815260066020908152604080832093891683529281528282208783529052205460ff16156124f65760405162461bcd60e51b815260206004820152601e60248201527f4d61726b65743a204e667420616c7265616479206f6e2041756374696f6e000060448201526064016105f9565b6001818101859055600282018390556008820180546001600160a01b03199081166001600160a01b038981169182179093556006850180549092168a841617909155600384018690554260048501559089166000818152600760209081526040808320948352938152838220898352815290839020805460ff19169094179093558151858152928301869052869233927ff1a9e465a9fb255224a9c8d190f34e1d0b1310222b37b7307ef7c07f3c106078910160405180910390a450505050505050565b6125c2614df4565b6127108111156125e45760405162461bcd60e51b81526004016105f990615789565b600455565b6125f1614df4565b6001600160a01b0381166126475760405162461bcd60e51b815260206004820181905260248201527f4d61726b65743a204d65646961206164647265737320697320696e76616c696460448201526064016105f9565b6005546001600160a01b0316156126ac5760405162461bcd60e51b815260206004820152602360248201527f4d61726b65743a204d6564696120697320616c726561647920636f6e666967756044820152621c995960ea1b60648201526084016105f9565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6126d6614849565b6001600160a01b03808816600090815260076020908152604080832093891683529281528282208783529052205460ff16156127545760405162461bcd60e51b815260206004820152601b60248201527f4d61726b65743a204e465420616c7265616479206f6e2073616c65000000000060448201526064016105f9565b6001600160a01b03808816600090815260066020908152604080832093891683529281528282208783529052205460ff16156127d25760405162461bcd60e51b815260206004820152601e60248201527f4d61726b65743a204e465420616c7265616479206f6e2061756374696f6e000060448201526064016105f9565b6001600160a01b038088166000818152600860209081526040808320948a168352938152838220888352905282902091516301ffc9a760e01b8152429291906301ffc9a79061282c906380ac58cd60e01b90600401615702565b60206040518083038186803b15801561284457600080fd5b505afa158015612858573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061287c9190615639565b15612ba857600a810154600160a01b900460ff16156128d75760405162461bcd60e51b815260206004820152601760248201527613585c9ad95d0e88105b1c9958591e481bdb881cd95b1b604a1b60448201526064016105f9565b6040516331a9108f60e11b8152600481018790526001600160a01b0380891691908b1690636352211e9060240160206040518083038186803b15801561291c57600080fd5b505afa158015612930573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129549190615395565b6001600160a01b0316146129a25760405162461bcd60e51b815260206004820152601560248201527426b0b935b2ba1d103737ba1037333a1037bbb732b960591b60448201526064016105f9565b60405163020604bf60e21b81526004810187905230906001600160a01b038b169063081812fc9060240160206040518083038186803b1580156129e457600080fd5b505afa1580156129f8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1c9190615395565b6001600160a01b031614612a7e5760405162461bcd60e51b8152602060048201526024808201527f4d61726b65743a206e6674206e6f7420617070726f76656420666f72206175636044820152633a34b7b760e11b60648201526084016105f9565b612b4a898988888887898e6001600160a01b039788166000818152600860208181526040808420958d168085529582528084208b855282528084206009810180546001600160a01b03199081168817909155600a8201805482169e909f169d909d17909d556001808e018c905560048e0199909955918c018054909b168517909a5560058b0197909755426006808c019190915560028b01959095556003909901929092559087529085528286209086528452818520928552919092529120805460ff19169091179055565b6040805185815260208101879052908101839052606081018490526001600160a01b038089169188918c16907faad3ca328e4b762aed949db2ae4cf74d5fa0e3bc7148b580c233a0f4ea267e5c9060800160405180910390a4612e71565b6040516301ffc9a760e01b81526001600160a01b038a16906301ffc9a790612bdb90636cdb3d1360e11b90600401615702565b60206040518083038186803b158015612bf357600080fd5b505afa158015612c07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c2b9190615639565b15612e2957600a810154600160a01b900460ff1615612c865760405162461bcd60e51b815260206004820152601760248201527613585c9ad95d0e88105b1c9958591e481bdb881cd95b1b604a1b60448201526064016105f9565b604051627eeac760e11b815285906001600160a01b038b169062fdd58e90612cb4908b908b906004016156e9565b60206040518083038186803b158015612ccc57600080fd5b505afa158015612ce0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d049190615674565b1015612d525760405162461bcd60e51b815260206004820152601e60248201527f4d61726b65743a204e6f7420656e6f756768206e66742042616c616e6365000060448201526064016105f9565b60405163e985e9c560e01b81526001600160a01b0388811660048301523060248301528a169063e985e9c59060440160206040518083038186803b158015612d9957600080fd5b505afa158015612dad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd19190615639565b612a7e5760405162461bcd60e51b8152602060048201526024808201527f4d61726b65743a204e4654206e6f7420617070726f76656420666f72206175636044820152633a34b7b760e11b60648201526084016105f9565b60405162461bcd60e51b815260206004820152601760248201527f4d61726b65743a20546f6b656e206e6f7420457869737400000000000000000060448201526064016105f9565b505050505050505050565b612e84614849565b6001600160a01b0380861660009081526008602090815260408083209387168352928152828220858352905220612ebc868585614d7d565b42816003015411612edf5760405162461bcd60e51b81526004016105f990615717565b42816002015410612f325760405162461bcd60e51b815260206004820152601b60248201527f4d61726b65743a2041756374696f6e206e6f742073746172746564000000000060448201526064016105f9565b80600401548210158015612f495750600c81015482115b612f955760405162461bcd60e51b815260206004820152601960248201527f4d61726b65743a20706c6163652068696768657374206269640000000000000060448201526064016105f9565b60088101546001600160a01b0386811691161415612ff55760405162461bcd60e51b815260206004820152601a60248201527f4d61726b65743a2073656c6c6572206e6f7420616c6c6f77656400000000000060448201526064016105f9565b600a8101546001600160a01b03161561313957600a810154604051636eb1769f60e11b81526001600160a01b0387811660048301523060248301528492169063dd62ed3e9060440160206040518083038186803b15801561305557600080fd5b505afa158015613069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061308d9190615674565b10156130ab5760405162461bcd60e51b81526004016105f990615746565b600a8101546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906130e19088903090879060040161568d565b602060405180830381600087803b1580156130fb57600080fd5b505af115801561310f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131339190615639565b50613159565b813410156131595760405162461bcd60e51b81526004016105f990615746565b600c8101829055600b810180546001600160a01b03199081166001600160a01b038881169182179093556040805180820182528281526020808201888152600788018054600181810183556000928352918490209451600290910290940180549097169388169390931786555194909101939093558051938a168452918301528101839052606081018490527f3b8a018da9bfa357f1905fbda25872debe55fe7b03989d47d5b629629c358bb69060800160405180910390a1505050505050565b613222614849565b61322d838383614d7d565b6001600160a01b03808416600090815260086020908152604080832093861683529281528282208483529052206003015442116132a35760405162461bcd60e51b8152602060048201526014602482015273105d58dd1a5bdb881a5cc81b9bdd08195b99195960621b60448201526064016105f9565b6001600160a01b0380841660009081526008602090815260408083209386168352928152828220848352905220600c0154156133165760405162461bcd60e51b815260206004820152601260248201527114995d9bdad9481b9bdd08105b1b1bddd95960721b60448201526064016105f9565b6001600160a01b039283166000908152600660209081526040808320949095168252928352838120918152915220805460ff19169055565b613356614849565b6001600160a01b0384811660009081526008602090815260408083209386168352928152828220848352905220600381015442106133a65760405162461bcd60e51b81526004016105f990615717565b60006134e282604051806101a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201805480602002602001604051908101604052809291908181526020016000905b8282101561346b576000848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101613423565b5050509082525060088201546001600160a01b0390811660208084019190915260098401548216604080850191909152600a8501548084166060860152600160a01b900460ff16151560808501528051808201909152600b8501549092168252600c909301549281019290925260a0015286614e9e565b1161352f5760405162461bcd60e51b815260206004820152601c60248201527f4d61726b65743a206e6f74206269646564206f6e2061756374696f6e0000000060448201526064016105f9565b600781015460005b8181101561391757856001600160a01b031683600701828154811061355e5761355e61589f565b60009182526020909120600290910201546001600160a01b0316141561390557600a8301546001600160a01b03161561367957600a8301546007840180546001600160a01b039092169163a9059cbb9190849081106135bf576135bf61589f565b60009182526020909120600290910201546007860180546001600160a01b0390921691859081106135f2576135f261589f565b9060005260206000209060020201600101546040518363ffffffff1660e01b81526004016136219291906156e9565b602060405180830381600087803b15801561363b57600080fd5b505af115801561364f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136739190615639565b50613705565b82600701818154811061368e5761368e61589f565b60009182526020909120600290910201546007840180546001600160a01b03909216916108fc9190849081106136c6576136c661589f565b9060005260206000209060020201600101549081150290604051600060405180830381858888f19350505050158015613703573d6000803e3d6000fd5b505b82600701818154811061371a5761371a61589f565b60009182526020822060029091020180546001600160a01b0319168155600190810191909155600784019061374f908461582a565b8154811061375f5761375f61589f565b60009182526020909120600290910201546007840180546001600160a01b0390921691839081106137925761379261589f565b6000918252602090912060029091020180546001600160a01b0319166001600160a01b0392909216919091179055600783016137cf60018461582a565b815481106137df576137df61589f565b9060005260206000209060020201600101548360070182815481106138065761380661589f565b9060005260206000209060020201600101819055508260070180548061382e5761382e615889565b60008281526020812060026000199093019283020180546001600160a01b0319168155600101559055600b8301546001600160a01b039081169087161415613900576007830180546138829060019061582a565b815481106138925761389261589f565b6000918252602090912060029091020154600b840180546001600160a01b0319166001600160a01b039092169190911790556007830180546138d69060019061582a565b815481106138e6576138e661589f565b6000918252602090912060016002909202010154600c8401555b613917565b8061390f81615858565b915050613537565b50600181101561393b57600b820180546001600160a01b03191690556000600c8301555b846001600160a01b0316846001600160a01b0316847fb1ed7c62850e5b29afc688df5105e4d790006a7bb0f81513d91ac86566f354e660405160405180910390a4505050505050565b61398c614849565b6001600160a01b038085166000818152600860209081526040808320948716835293815283822085835290529190912090613a095760405162461bcd60e51b815260206004820152601a60248201527f4d61726b65743a2061646472657373207a65726f20676976656e00000000000060448201526064016105f9565b60008211613a595760405162461bcd60e51b815260206004820152601860248201527f4d61726b65743a206e6f742076616c6964206e6674206964000000000000000060448201526064016105f9565b42816003015410613aac5760405162461bcd60e51b815260206004820152601960248201527f4d61726b65743a2041756374696f6e206e6f7420656e6465640000000000000060448201526064016105f9565b600b8101546001600160a01b03858116911614613b195760405162461bcd60e51b815260206004820152602560248201527f4d61726b65743a204f6e6c792068696768657374206269646465722063616e20604482015264636c61696d60d81b60648201526084016105f9565b6000613bdd82604051806101a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201805480602002602001604051908101604052809291908181526020016000908282101561346b576000848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101613423565b6040516301ffc9a760e01b81529091506001600160a01b038716906301ffc9a790613c13906380ac58cd60e01b90600401615702565b60206040518083038186803b158015613c2b57600080fd5b505afa158015613c3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c639190615639565b156141f6576040516301ffc9a760e01b81526001600160a01b038716906301ffc9a790613c9b9063152a902d60e11b90600401615702565b60206040518083038186803b158015613cb357600080fd5b505afa158015613cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ceb9190615639565b613eb657613e4382604051806101a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201805480602002602001604051908101604052809291908181526020016000905b82821015613db2576000848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101613d6a565b505050908252506008828101546001600160a01b0390811660208085019190915260098501548216604080860191909152600a808701548085166060880152600160a01b900460ff16151560808701528151808301909252600b87015484168252600c909601549181019190915260a0909301929092528601549186015485926000929081169183918c9116614f2e565b600882015460018301546040516323b872dd60e01b81526001600160a01b03808a16936323b872dd93613e7f9391909216918a9160040161568d565b600060405180830381600087803b158015613e9957600080fd5b505af1158015613ead573d6000803e3d6000fd5b50505050614107565b600182015460405163152a902d60e11b815260048101919091526024810182905260009081906001600160a01b03891690632a55205a90604401604080518083038186803b158015613f0757600080fd5b505afa158015613f1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f3f919061560b565b9150915061409684604051806101a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201805480602002602001604051908101604052809291908181526020016000905b82821015614006576000848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101613fbe565b505050908252506008828101546001600160a01b0390811660208085019190915260098501548216604080860191909152600a808701548085166060880152600160a01b900460ff16151560808701528151808301909252600b87015484168252600c909601549181019190915260a09093019290925288015491880154879286929081169188918e9116614f2e565b600884015460018501546040516323b872dd60e01b81526001600160a01b03808c16936323b872dd936140d29391909216918c9160040161568d565b600060405180830381600087803b1580156140ec57600080fd5b505af1158015614100573d6000803e3d6000fd5b5050505050505b600a8201805460ff60a01b1916600160a01b1790556001600160a01b0380871660009081526006602090815260408083206008870180548616855290835281842088855290925291829020805460ff191690555460058501549151869385939216916000805160206158cb83398151915291614184918b916156e9565b60405180910390a46001600160a01b0380871660009081526008602090815260408083209388168352928152828220868352905290812081815560018101829055600281018290556003810182905560048101829055600581018290556006810182905590611f95600783018261532b565b6040516301ffc9a760e01b81526001600160a01b038716906301ffc9a79061422990636cdb3d1360e11b90600401615702565b60206040518083038186803b15801561424157600080fd5b505afa158015614255573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142799190615639565b15612383576040516301ffc9a760e01b81526001600160a01b038716906301ffc9a7906142b19063152a902d60e11b90600401615702565b60206040518083038186803b1580156142c957600080fd5b505afa1580156142dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143019190615639565b614409576143c782604051806101a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782018054806020026020016040519081016040528092919081815260200160009082821015613db2576000848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101613d6a565b600882015460018301546005840154604051637921219560e11b81526001600160a01b038a81169463f242432a94613e7f9492909116928b92906004016156b1565b600182015460405163152a902d60e11b815260048101919091526024810182905260009081906001600160a01b03891690632a55205a90604401604080518083038186803b15801561445a57600080fd5b505afa15801561446e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614492919061560b565b9150915061455884604051806101a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782018054806020026020016040519081016040528092919081815260200160009082821015614006576000848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101613fbe565b600884015460018501546005860154604051637921219560e11b81526001600160a01b038c81169463f242432a946140d29492909116928d92906004016156b1565b6145a2614df4565b6127108111156145c45760405162461bcd60e51b81526004016105f990615789565b600355565b6145d1614849565b6001600160a01b038084166000908152600960209081526040808320868516808552908352818420868552909252909120600881015490921614806146385750826001600160a01b031661462d6000546001600160a01b031690565b6001600160a01b0316145b6146995760405162461bcd60e51b815260206004820152602c60248201527f4d61726b65743a204f6e6c792073656c6c6572206f72206f776e65722063616e60448201526b0818d85b98d95b081cd95b1b60a21b60648201526084016105f9565b6146a48484846148a3565b6001600160a01b038481166000908152600960209081526040808320938716835292815282822085835290522060080154600160a01b900460ff161561471f5760405162461bcd60e51b815260206004820152601060248201526f13585c9ad95d0e881391950814dbdb1960821b60448201526064016105f9565b506001600160a01b039283166000818152600960209081526040808320959096168083529481528582208483528152858220828155600181018390556002810183905560038101839055600481018390556005810180546001600160a01b03199081169091556006820180548216905560078083018054909216909155600890910180546001600160a81b03191690559282529182528481209381529281528383209183525220805460ff19169055565b6147d8614df4565b6001600160a01b03811661483d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105f9565b61484681614e4e565b50565b6005546001600160a01b031633146115575760405162461bcd60e51b815260206004820152601b60248201527f4d61726b65743a20756e617574686f72697a656420416363657373000000000060448201526064016105f9565b6001600160a01b03808416600090815260076020908152604080832093861683529281528282208483529052205460ff1661491a5760405162461bcd60e51b81526020600482015260176024820152764d61726b65743a204e4654206e6f74206f6e2073616c6560481b60448201526064016105f9565b505050565b60008061271060045489614933919061580b565b61493d91906157e9565b61494790896157d1565b905060006127106003548a61495c919061580b565b61496691906157e9565b614970908a61582a565b905061497c818361582a565b92506001600160a01b03841615614c6257604051636eb1769f60e11b81526001600160a01b03878116600483015230602483015283919086169063dd62ed3e9060440160206040518083038186803b1580156149d757600080fd5b505afa1580156149eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a0f9190615674565b1015614a2d5760405162461bcd60e51b81526004016105f990615746565b6040516323b872dd60e01b81526001600160a01b038516906323b872dd90614a5d9089903090879060040161568d565b602060405180830381600087803b158015614a7757600080fd5b505af1158015614a8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614aaf9190615639565b50836001600160a01b031663a9059cbb614ad16000546001600160a01b031690565b856040518363ffffffff1660e01b8152600401614aef9291906156e9565b602060405180830381600087803b158015614b0957600080fd5b505af1158015614b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b419190615639565b506001600160a01b03841663a9059cbb88614b5c8b8561582a565b6040518363ffffffff1660e01b8152600401614b799291906156e9565b602060405180830381600087803b158015614b9357600080fd5b505af1158015614ba7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bcb9190615639565b506001600160a01b03851615614c5d5760405163a9059cbb60e01b81526001600160a01b0385169063a9059cbb90614c099088908c906004016156e9565b602060405180830381600087803b158015614c2357600080fd5b505af1158015614c37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5b9190615639565b505b612e71565b81341015614cb25760405162461bcd60e51b815260206004820152601c60248201527f4d61726b65743a2050726f766964652061736b696e672070726963650000000060448201526064016105f9565b600080546040516001600160a01b039091169185156108fc02918691818181858888f19350505050158015614ceb573d6000803e3d6000fd5b506001600160a01b0387166108fc614d038a8461582a565b6040518115909202916000818181858888f19350505050158015614d2b573d6000803e3d6000fd5b506001600160a01b03851615612e71576040516001600160a01b0386169089156108fc02908a906000818181858888f19350505050158015614d71573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b03808416600090815260066020908152604080832093861683529281528282208483529052205460ff1661491a5760405162461bcd60e51b81526020600482015260176024820152764d61726b65743a204e4654206e6f74206f6e2073616c6560481b60448201526064016105f9565b6000546001600160a01b031633146115575760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105f9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000805b8360e0015151811015614f2657826001600160a01b03168460e001518281518110614ecf57614ecf61589f565b6020026020010151600001516001600160a01b03161415614f14578360e001518181518110614f0057614f0061589f565b602002602001015160200151915050614f28565b80614f1e81615858565b915050614ea2565b505b92915050565b600080612710600454600354614f4491906157d1565b614f4e908a61580b565b614f5891906157e9565b614f62908961582a565b9050614f6e818961582a565b9150614f7a878261582a565b90506001600160a01b0383161561513457826001600160a01b031663a9059cbb614fac6000546001600160a01b031690565b846040518363ffffffff1660e01b8152600401614fca9291906156e9565b602060405180830381600087803b158015614fe457600080fd5b505af1158015614ff8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061501c9190615639565b5060405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb9061504b90899085906004016156e9565b602060405180830381600087803b15801561506557600080fd5b505af1158015615079573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061509d9190615639565b506001600160a01b0385161561512f5760405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb906150db9088908b906004016156e9565b602060405180830381600087803b1580156150f557600080fd5b505af1158015615109573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061512d9190615639565b505b61517b565b6001600160a01b0385161561517b576040516001600160a01b0386169088156108fc029089906000818181858888f19350505050158015615179573d6000803e3d6000fd5b505b60005b8960e0015151811015614d7157846001600160a01b03168a60e0015182815181106151ab576151ab61589f565b6020026020010151600001516001600160a01b031614615319576001600160a01b0384161561529c57836001600160a01b031663a9059cbb8b60e0015183815181106151f9576151f961589f565b6020026020010151600001518c60e00151848151811061521b5761521b61589f565b6020026020010151602001516040518363ffffffff1660e01b81526004016152449291906156e9565b602060405180830381600087803b15801561525e57600080fd5b505af1158015615272573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906152969190615639565b50615319565b8960e0015181815181106152b2576152b261589f565b6020026020010151600001516001600160a01b03166108fc8b60e0015183815181106152e0576152e061589f565b6020026020010151602001519081150290604051600060405180830381858888f19350505050158015615317573d6000803e3d6000fd5b505b8061532381615858565b91505061517e565b508054600082556002029060005260206000209081019061484691905b8082111561536d5780546001600160a01b031916815560006001820155600201615348565b5090565b60006020828403121561538357600080fd5b813561538e816158b5565b9392505050565b6000602082840312156153a757600080fd5b815161538e816158b5565b600080600080608085870312156153c857600080fd5b84356153d3816158b5565b935060208501356153e3816158b5565b925060408501356153f3816158b5565b9396929550929360600135925050565b600080600080600060a0868803121561541b57600080fd5b8535615426816158b5565b94506020860135615436816158b5565b93506040860135615446816158b5565b94979396509394606081013594506080013592915050565b60008060008060008060c0878903121561547757600080fd5b8635615482816158b5565b95506020870135615492816158b5565b945060408701356154a2816158b5565b959894975094956060810135955060808101359460a0909101359350915050565b600080600080600080600060e0888a0312156154de57600080fd5b87356154e9816158b5565b965060208801356154f9816158b5565b95506040880135615509816158b5565b969995985095966060810135965060808101359560a0820135955060c0909101359350915050565b60008060006060848603121561554657600080fd5b8335615551816158b5565b92506020840135615561816158b5565b929592945050506040919091013590565b6000806000806080858703121561558857600080fd5b8435615593816158b5565b935060208501356155a3816158b5565b92506040850135915060608501356155ba816158b5565b939692955090935050565b600080600080608085870312156155db57600080fd5b84356155e6816158b5565b935060208501356155f6816158b5565b93969395505050506040820135916060013590565b6000806040838503121561561e57600080fd5b8251615629816158b5565b6020939093015192949293505050565b60006020828403121561564b57600080fd5b8151801515811461538e57600080fd5b60006020828403121561566d57600080fd5b5035919050565b60006020828403121561568657600080fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b6001600160e01b031991909116815260200190565b60208082526015908201527413585c9ad95d0e88105d58dd1a5bdb88195b991959605a1b604082015260600190565b60208082526023908201527f4d61726b65743a20706c656173652070726f697664652061736b696e6720707260408201526269636560e81b606082015260800190565b60208082526028908201527f4d61726b65743a2070657263656e74616765206d757374206265206c6573732060408201526707468616e203130360c41b606082015260800190565b600082198211156157e4576157e4615873565b500190565b60008261580657634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561582557615825615873565b500290565b60008282101561583c5761583c615873565b500390565b60008161585057615850615873565b506000190190565b600060001982141561586c5761586c615873565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461484657600080fdfe00f93dbdb72854b6b6fb35433086556f2635fc83c37080c667496fecfa650fb4a2646970667358221220ae1b8204aa053d7cc16bcdd19a71d24af7d82cd3f492541a7ec07b2711f556a264736f6c63430008070033
Deployed Bytecode
0x60806040526004361061012e5760003560e01c80639662e4dc116100ab578063ba45eb811161006f578063ba45eb8114610302578063c4fd5bc214610435578063c80b9f8614610455578063dc1052e214610547578063eeadfb9614610567578063f2fde38b1461058757610135565b80639662e4dc1461027a5780639ab6a3e01461029a578063a7a8f991146102ad578063af59a88a146102cd578063b0bc85de146102ed57610135565b80637a893895116100f25780637a893895146101d25780637c1f27da146101f25780638cd09d50146102125780638da5cb5b146102325780638fc912c51461025a57610135565b80630411b25214610144578063252d723a1461016657806328c3afd11461018a5780634a538b7f1461019d578063715018a6146101bd57610135565b3661013557005b34801561014157600080fd5b50005b34801561015057600080fd5b5061016461015f3660046155c5565b6105a7565b005b34801561017257600080fd5b506003545b6040519081526020015b60405180910390f35b610164610198366004615403565b610891565b3480156101a957600080fd5b506101646101b8366004615531565b611175565b3480156101c957600080fd5b50610164611545565b3480156101de57600080fd5b506101646101ed366004615572565b611559565b3480156101fe57600080fd5b5061016461020d36600461545e565b6123d3565b34801561021e57600080fd5b5061016461022d36600461565b565b6125ba565b34801561023e57600080fd5b506000546040516001600160a01b039091168152602001610181565b34801561026657600080fd5b50610164610275366004615371565b6125e9565b34801561028657600080fd5b506101646102953660046154c3565b6126ce565b6101646102a8366004615403565b612e7c565b3480156102b957600080fd5b506101646102c8366004615531565b61321a565b3480156102d957600080fd5b506101646102e83660046153b2565b61334e565b3480156102f957600080fd5b50600454610177565b34801561030e57600080fd5b506103ba61031d366004615531565b600860208181526000948552604080862082529385528385208152918452928290208054600182015460028301546003840154600485015460058601546006870154998701546009880154600a8901548b51808d01909c52600b8a01546001600160a01b039081168d52600c909a01549a8c019a909a52969a95999498939792969195949083169391831692821691600160a01b900460ff16908c565b604080519c8d526020808e019c909c528c019990995260608b019790975260808a019590955260a089019390935260c08801919091526001600160a01b0390811660e088015290811661010087015290811661012086015290151561014085015281511661016084015201516101808201526101a001610181565b34801561044157600080fd5b506101646104503660046153b2565b613984565b34801561046157600080fd5b506104e9610470366004615531565b6009602090815260009384526040808520825292845282842090528252902080546001820154600283015460038401546004850154600586015460068701546007880154600890980154969795969495939492936001600160a01b0392831693918316929081169190811690600160a01b900460ff168a565b604080519a8b5260208b019990995297890196909652606088019490945260808701929092526001600160a01b0390811660a087015290811660c086015290811660e085015216610100830152151561012082015261014001610181565b34801561055357600080fd5b5061016461056236600461565b565b61459a565b34801561057357600080fd5b50610164610582366004615531565b6145c9565b34801561059357600080fd5b506101646105a2366004615371565b6147d0565b6001600160a01b0383166106025760405162461bcd60e51b815260206004820181905260248201527f4d61726b65743a205472616e7366657220746f207a65726f206164647265737360448201526064015b60405180910390fd5b6001600160a01b0384166106635760405162461bcd60e51b815260206004820152602260248201527f4d61726b65743a205472616e736665722066726f6d207a65726f206164647265604482015261737360f01b60648201526084016105f9565b600082116106b35760405162461bcd60e51b815260206004820152601960248201527f4d61726b65743a204e6f742076616c696420746f6b656e49640000000000000060448201526064016105f9565b600254604051630985c14360e21b8152600481018490526001600160a01b0390911690632617050c9060240160206040518083038186803b1580156106f757600080fd5b505afa15801561070b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072f9190615639565b1561079f576002546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906107689087908790879060040161568d565b600060405180830381600087803b15801561078257600080fd5b505af1158015610796573d6000803e3d6000fd5b5050505061088b565b600154604051630985c14360e21b8152600481018490526001600160a01b0390911690632617050c90602401602060405180830381600087803b1580156107e557600080fd5b505af11580156107f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081d9190615639565b1561088b57600154604051637921219560e11b81526001600160a01b039091169063f242432a906108589087908790879087906004016156b1565b600060405180830381600087803b15801561087257600080fd5b505af1158015610886573d6000803e3d6000fd5b505050505b50505050565b610899614849565b6001600160a01b038086166000908152600960209081526040808320938816835292815282822085835290522060038101548211156109285760405162461bcd60e51b815260206004820152602560248201527f4d61726b65743a206e6f7420656e6f756768207175616e7469747920617661696044820152646c61626c6560d81b60648201526084016105f9565b6109338686856148a3565b60028101546040516301ffc9a760e01b81526001600160a01b038816906301ffc9a79061096b906380ac58cd60e01b90600401615702565b60206040518083038186803b15801561098357600080fd5b505afa158015610997573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bb9190615639565b15610d135760006109cc848361580b565b6040516301ffc9a760e01b81529091506001600160a01b038916906301ffc9a790610a029063152a902d60e11b90600401615702565b60206040518083038186803b158015610a1a57600080fd5b505afa158015610a2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a529190615639565b610af25760088301546006840154610a7f9183916000916001600160a01b03908116918b9184911661491f565b600883015460018401546040516323b872dd60e01b81526001600160a01b03808c16936323b872dd93610abb9391909216918b9160040161568d565b600060405180830381600087803b158015610ad557600080fd5b505af1158015610ae9573d6000803e3d6000fd5b50505050610c1a565b600183015460405163152a902d60e11b815260048101919091526024810182905260009081906001600160a01b038b1690632a55205a90604401604080518083038186803b158015610b4357600080fd5b505afa158015610b57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7b919061560b565b60088701546006880154929450909250610ba991859184916001600160a01b03918216918d9188911661491f565b600885015460018601546040516323b872dd60e01b81526001600160a01b03808e16936323b872dd93610be59391909216918d9160040161568d565b600060405180830381600087803b158015610bff57600080fd5b505af1158015610c13573d6000803e3d6000fd5b5050505050505b6008808401805460ff60a01b1916600160a01b1790556001600160a01b03808a166000818152600760208181526040808420958e168085529582528084208c85528252808420805460ff191690559383526009815283832085845281528383208b845290528282208281556001810183905560028101839055600380820184905560048201939093556005810180546001600160a01b031990811690915560068201805482169055918101805490921690915590930180546001600160a81b031916905591850154915187928592916000805160206158cb83398151915291610d05918c91906156e9565b60405180910390a45061116c565b6040516301ffc9a760e01b81526001600160a01b038816906301ffc9a790610d4690636cdb3d1360e11b90600401615702565b60206040518083038186803b158015610d5e57600080fd5b505afa158015610d72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d969190615639565b15611124576000610da7848361580b565b6040516301ffc9a760e01b81529091506001600160a01b038916906301ffc9a790610ddd9063152a902d60e11b90600401615702565b60206040518083038186803b158015610df557600080fd5b505afa158015610e09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2d9190615639565b610ee95760088301546006840154610e5a9183916000916001600160a01b03908116918b9184911661491f565b60088301546001840154604051637921219560e11b81526001600160a01b03808c169363f242432a93610e989391909216918b918a906004016156b1565b600060405180830381600087803b158015610eb257600080fd5b505af1158015610ec6573d6000803e3d6000fd5b5050505083836003016000828254610ede919061582a565b9091555061102c9050565b600183015460405163152a902d60e11b815260048101919091526024810182905260009081906001600160a01b038b1690632a55205a90604401604080518083038186803b158015610f3a57600080fd5b505afa158015610f4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f72919061560b565b60088701546006880154929450909250610fa091859184916001600160a01b03918216918d9188911661491f565b60088501546001860154604051637921219560e11b81526001600160a01b03808e169363f242432a93610fde9391909216918d918c906004016156b1565b600060405180830381600087803b158015610ff857600080fd5b505af115801561100c573d6000803e3d6000fd5b5050505085856003016000828254611024919061582a565b909155505050505b60038301546110f9576008808401805460ff60a01b1916600160a01b1790556001600160a01b03808a166000818152600760208181526040808420958e168085529582528084208c85528252808420805460ff19169055938352600981528383209483529384528282208a835290935290812081815560018101829055600281018290556003810182905560048101919091556005810180546001600160a01b03199081169091556006820180548216905591810180549092169091550180546001600160a81b03191690555b8482886001600160a01b03166000805160206158cb8339815191528988604051610d059291906156e9565b60405162461bcd60e51b815260206004820152601760248201527f4d61726b65743a20546f6b656e206e6f7420657869737400000000000000000060448201526064016105f9565b50505050505050565b61117d614849565b6001600160a01b0380841660009081526008602081815260408084208786168086529083528185208786529092529092209081015490921614806111e35750826001600160a01b03166111d86000546001600160a01b031690565b6001600160a01b0316145b6112445760405162461bcd60e51b815260206004820152602c60248201527f4d61726b65743a206f6e6c792073656c6c6572206f72206f776e65722063616e60448201526b0818d85b98d95b081cd95b1b60a21b60648201526084016105f9565b61124f848484614d7d565b428160030154116112725760405162461bcd60e51b81526004016105f990615717565b600a810154600160a01b900460ff16156112c55760405162461bcd60e51b815260206004820152601460248201527313585c9ad95d0e88105b1c9958591e481cdbdb1960621b60448201526064016105f9565b600c810154156114595760078101546000906112e39060019061582a565b90505b600a8201546007830180546001600160a01b039092169163a9059cbb9190849081106113145761131461589f565b60009182526020909120600290910201546007850180546001600160a01b0390921691859081106113475761134761589f565b9060005260206000209060020201600101546040518363ffffffff1660e01b81526004016113769291906156e9565b602060405180830381600087803b15801561139057600080fd5b505af11580156113a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c89190615639565b508160070181815481106113de576113de61589f565b60009182526020822060029091020180546001600160a01b0319168155600101556007820180548061141257611412615889565b60008281526020812060026000199093019283020180546001600160a01b03191681556001015590558061144557611457565b8061144f81615841565b9150506112e6565b505b6001600160a01b03808516600090815260086020908152604080832093871683529281528282208583529052908120818155600181018290556002810182905560038101829055600481018290556005810182905560068101829055906114c3600783018261532b565b506008810180546001600160a01b031990811690915560098201805482169055600a820180546001600160a81b0319169055600b8201805490911690556000600c9091018190556001600160a01b0394851681526006602090815260408083209590961682529384528481209281529190925291909120805460ff1916905550565b61154d614df4565b6115576000614e4e565b565b611561614849565b6001600160a01b0380851660009081526008602090815260408083209387168352928152828220858352905220611599858585614d7d565b6116d381604051806101a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201805480602002602001604051908101604052809291908181526020016000905b8282101561165c576000848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101611614565b5050509082525060088201546001600160a01b0390811660208084019190915260098401548216604080850191909152600a8501548084166060860152600160a01b900460ff16151560808501528051808201909152600b8501549092168252600c909301549281019290925260a0015283614e9e565b61171f5760405162461bcd60e51b815260206004820152601860248201527f4d61726b65743a20626964646572206e6f7420666f756e64000000000000000060448201526064016105f9565b428160030154116117425760405162461bcd60e51b81526004016105f990615717565b428160020154106117955760405162461bcd60e51b815260206004820152601b60248201527f4d61726b65743a2041756374696f6e206e6f742073746172746564000000000060448201526064016105f9565b60088101546001600160a01b038581169116146117ed5760405162461bcd60e51b815260206004820152601660248201527513585c9ad95d0e881b9bdd08185d5d1a1bdc9a5cd95960521b60448201526064016105f9565b828160010154146118405760405162461bcd60e51b815260206004820152601960248201527f4d61726b65743a2041756374696f6e206e6f7420666f756e640000000000000060448201526064016105f9565b600061197c82604051806101a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201805480602002602001604051908101604052809291908181526020016000905b82821015611905576000848152602090819020604080518082019091526002850290910180546001600160a01b031682526001908101548284015290835290920191016118bd565b5050509082525060088201546001600160a01b0390811660208084019190915260098401548216604080850191909152600a8501548084166060860152600160a01b900460ff16151560808501528051808201909152600b8501549092168252600c909301549281019290925260a0015284614e9e565b6040516301ffc9a760e01b81529091506001600160a01b038716906301ffc9a7906119b2906380ac58cd60e01b90600401615702565b60206040518083038186803b1580156119ca57600080fd5b505afa1580156119de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a029190615639565b15611fdf576040516301ffc9a760e01b81526001600160a01b038716906301ffc9a790611a3a9063152a902d60e11b90600401615702565b60206040518083038186803b158015611a5257600080fd5b505afa158015611a66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8a9190615639565b611c5557611be282604051806101a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201805480602002602001604051908101604052809291908181526020016000905b82821015611b51576000848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101611b09565b505050908252506008828101546001600160a01b0390811660208085019190915260098501548216604080860191909152600a808701548085166060880152600160a01b900460ff16151560808701528151808301909252600b87015484168252600c909601549181019190915260a0909301929092528601549186015485926000929081169183918a9116614f2e565b600882015460018301546040516323b872dd60e01b81526001600160a01b03808a16936323b872dd93611c1e939190921691889160040161568d565b600060405180830381600087803b158015611c3857600080fd5b505af1158015611c4c573d6000803e3d6000fd5b50505050611ea6565b600182015460405163152a902d60e11b815260048101919091526024810182905260009081906001600160a01b03891690632a55205a90604401604080518083038186803b158015611ca657600080fd5b505afa158015611cba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cde919061560b565b91509150611e3584604051806101a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201805480602002602001604051908101604052809291908181526020016000905b82821015611da5576000848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101611d5d565b505050908252506008828101546001600160a01b0390811660208085019190915260098501548216604080860191909152600a808701548085166060880152600160a01b900460ff16151560808701528151808301909252600b87015484168252600c909601549181019190915260a09093019290925288015491880154879286929081169188918c9116614f2e565b600884015460018501546040516323b872dd60e01b81526001600160a01b03808c16936323b872dd93611e719391909216918a9160040161568d565b600060405180830381600087803b158015611e8b57600080fd5b505af1158015611e9f573d6000803e3d6000fd5b5050505050505b600a8201805460ff60a01b1916600160a01b1790556001600160a01b0380871660009081526006602090815260408083206008870180548616855290835281842089855290925291829020805460ff191690555460058501549151879385939216916000805160206158cb83398151915291611f239189916156e9565b60405180910390a46001600160a01b0380871660009081526008602090815260408083209389168352928152828220878352905290812081815560018101829055600281018290556003810182905560048101829055600581018290556006810182905590611f95600783018261532b565b506008810180546001600160a01b031990811690915560098201805482169055600a820180546001600160a81b0319169055600b8201805490911690556000600c909101556123cb565b6040516301ffc9a760e01b81526001600160a01b038716906301ffc9a79061201290636cdb3d1360e11b90600401615702565b60206040518083038186803b15801561202a57600080fd5b505afa15801561203e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120629190615639565b15612383576040516301ffc9a760e01b81526001600160a01b038716906301ffc9a79061209a9063152a902d60e11b90600401615702565b60206040518083038186803b1580156120b257600080fd5b505afa1580156120c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ea9190615639565b6121f2576121b082604051806101a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782018054806020026020016040519081016040528092919081815260200160009082821015611b51576000848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101611b09565b600882015460018301546005840154604051637921219560e11b81526001600160a01b038a81169463f242432a94611c1e9492909116928992906004016156b1565b600182015460405163152a902d60e11b815260048101919091526024810182905260009081906001600160a01b03891690632a55205a90604401604080518083038186803b15801561224357600080fd5b505afa158015612257573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061227b919061560b565b9150915061234184604051806101a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782018054806020026020016040519081016040528092919081815260200160009082821015611da5576000848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101611d5d565b600884015460018501546005860154604051637921219560e11b81526001600160a01b038c81169463f242432a94611e719492909116928b92906004016156b1565b60405162461bcd60e51b815260206004820152601960248201527f4d61726b65743a204e4654206e6f7420737570706f727465640000000000000060448201526064016105f9565b505050505050565b6123db614849565b6001600160a01b0380871660008181526009602090815260408083209489168084529482528083208884528252808320938352600782528083209483529381528382208783529052919091205460ff16156124785760405162461bcd60e51b815260206004820152601b60248201527f4d61726b65743a204e667420616c7265616479206f6e2053616c65000000000060448201526064016105f9565b6001600160a01b03808816600090815260066020908152604080832093891683529281528282208783529052205460ff16156124f65760405162461bcd60e51b815260206004820152601e60248201527f4d61726b65743a204e667420616c7265616479206f6e2041756374696f6e000060448201526064016105f9565b6001818101859055600282018390556008820180546001600160a01b03199081166001600160a01b038981169182179093556006850180549092168a841617909155600384018690554260048501559089166000818152600760209081526040808320948352938152838220898352815290839020805460ff19169094179093558151858152928301869052869233927ff1a9e465a9fb255224a9c8d190f34e1d0b1310222b37b7307ef7c07f3c106078910160405180910390a450505050505050565b6125c2614df4565b6127108111156125e45760405162461bcd60e51b81526004016105f990615789565b600455565b6125f1614df4565b6001600160a01b0381166126475760405162461bcd60e51b815260206004820181905260248201527f4d61726b65743a204d65646961206164647265737320697320696e76616c696460448201526064016105f9565b6005546001600160a01b0316156126ac5760405162461bcd60e51b815260206004820152602360248201527f4d61726b65743a204d6564696120697320616c726561647920636f6e666967756044820152621c995960ea1b60648201526084016105f9565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6126d6614849565b6001600160a01b03808816600090815260076020908152604080832093891683529281528282208783529052205460ff16156127545760405162461bcd60e51b815260206004820152601b60248201527f4d61726b65743a204e465420616c7265616479206f6e2073616c65000000000060448201526064016105f9565b6001600160a01b03808816600090815260066020908152604080832093891683529281528282208783529052205460ff16156127d25760405162461bcd60e51b815260206004820152601e60248201527f4d61726b65743a204e465420616c7265616479206f6e2061756374696f6e000060448201526064016105f9565b6001600160a01b038088166000818152600860209081526040808320948a168352938152838220888352905282902091516301ffc9a760e01b8152429291906301ffc9a79061282c906380ac58cd60e01b90600401615702565b60206040518083038186803b15801561284457600080fd5b505afa158015612858573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061287c9190615639565b15612ba857600a810154600160a01b900460ff16156128d75760405162461bcd60e51b815260206004820152601760248201527613585c9ad95d0e88105b1c9958591e481bdb881cd95b1b604a1b60448201526064016105f9565b6040516331a9108f60e11b8152600481018790526001600160a01b0380891691908b1690636352211e9060240160206040518083038186803b15801561291c57600080fd5b505afa158015612930573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129549190615395565b6001600160a01b0316146129a25760405162461bcd60e51b815260206004820152601560248201527426b0b935b2ba1d103737ba1037333a1037bbb732b960591b60448201526064016105f9565b60405163020604bf60e21b81526004810187905230906001600160a01b038b169063081812fc9060240160206040518083038186803b1580156129e457600080fd5b505afa1580156129f8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1c9190615395565b6001600160a01b031614612a7e5760405162461bcd60e51b8152602060048201526024808201527f4d61726b65743a206e6674206e6f7420617070726f76656420666f72206175636044820152633a34b7b760e11b60648201526084016105f9565b612b4a898988888887898e6001600160a01b039788166000818152600860208181526040808420958d168085529582528084208b855282528084206009810180546001600160a01b03199081168817909155600a8201805482169e909f169d909d17909d556001808e018c905560048e0199909955918c018054909b168517909a5560058b0197909755426006808c019190915560028b01959095556003909901929092559087529085528286209086528452818520928552919092529120805460ff19169091179055565b6040805185815260208101879052908101839052606081018490526001600160a01b038089169188918c16907faad3ca328e4b762aed949db2ae4cf74d5fa0e3bc7148b580c233a0f4ea267e5c9060800160405180910390a4612e71565b6040516301ffc9a760e01b81526001600160a01b038a16906301ffc9a790612bdb90636cdb3d1360e11b90600401615702565b60206040518083038186803b158015612bf357600080fd5b505afa158015612c07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c2b9190615639565b15612e2957600a810154600160a01b900460ff1615612c865760405162461bcd60e51b815260206004820152601760248201527613585c9ad95d0e88105b1c9958591e481bdb881cd95b1b604a1b60448201526064016105f9565b604051627eeac760e11b815285906001600160a01b038b169062fdd58e90612cb4908b908b906004016156e9565b60206040518083038186803b158015612ccc57600080fd5b505afa158015612ce0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d049190615674565b1015612d525760405162461bcd60e51b815260206004820152601e60248201527f4d61726b65743a204e6f7420656e6f756768206e66742042616c616e6365000060448201526064016105f9565b60405163e985e9c560e01b81526001600160a01b0388811660048301523060248301528a169063e985e9c59060440160206040518083038186803b158015612d9957600080fd5b505afa158015612dad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd19190615639565b612a7e5760405162461bcd60e51b8152602060048201526024808201527f4d61726b65743a204e4654206e6f7420617070726f76656420666f72206175636044820152633a34b7b760e11b60648201526084016105f9565b60405162461bcd60e51b815260206004820152601760248201527f4d61726b65743a20546f6b656e206e6f7420457869737400000000000000000060448201526064016105f9565b505050505050505050565b612e84614849565b6001600160a01b0380861660009081526008602090815260408083209387168352928152828220858352905220612ebc868585614d7d565b42816003015411612edf5760405162461bcd60e51b81526004016105f990615717565b42816002015410612f325760405162461bcd60e51b815260206004820152601b60248201527f4d61726b65743a2041756374696f6e206e6f742073746172746564000000000060448201526064016105f9565b80600401548210158015612f495750600c81015482115b612f955760405162461bcd60e51b815260206004820152601960248201527f4d61726b65743a20706c6163652068696768657374206269640000000000000060448201526064016105f9565b60088101546001600160a01b0386811691161415612ff55760405162461bcd60e51b815260206004820152601a60248201527f4d61726b65743a2073656c6c6572206e6f7420616c6c6f77656400000000000060448201526064016105f9565b600a8101546001600160a01b03161561313957600a810154604051636eb1769f60e11b81526001600160a01b0387811660048301523060248301528492169063dd62ed3e9060440160206040518083038186803b15801561305557600080fd5b505afa158015613069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061308d9190615674565b10156130ab5760405162461bcd60e51b81526004016105f990615746565b600a8101546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906130e19088903090879060040161568d565b602060405180830381600087803b1580156130fb57600080fd5b505af115801561310f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131339190615639565b50613159565b813410156131595760405162461bcd60e51b81526004016105f990615746565b600c8101829055600b810180546001600160a01b03199081166001600160a01b038881169182179093556040805180820182528281526020808201888152600788018054600181810183556000928352918490209451600290910290940180549097169388169390931786555194909101939093558051938a168452918301528101839052606081018490527f3b8a018da9bfa357f1905fbda25872debe55fe7b03989d47d5b629629c358bb69060800160405180910390a1505050505050565b613222614849565b61322d838383614d7d565b6001600160a01b03808416600090815260086020908152604080832093861683529281528282208483529052206003015442116132a35760405162461bcd60e51b8152602060048201526014602482015273105d58dd1a5bdb881a5cc81b9bdd08195b99195960621b60448201526064016105f9565b6001600160a01b0380841660009081526008602090815260408083209386168352928152828220848352905220600c0154156133165760405162461bcd60e51b815260206004820152601260248201527114995d9bdad9481b9bdd08105b1b1bddd95960721b60448201526064016105f9565b6001600160a01b039283166000908152600660209081526040808320949095168252928352838120918152915220805460ff19169055565b613356614849565b6001600160a01b0384811660009081526008602090815260408083209386168352928152828220848352905220600381015442106133a65760405162461bcd60e51b81526004016105f990615717565b60006134e282604051806101a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201805480602002602001604051908101604052809291908181526020016000905b8282101561346b576000848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101613423565b5050509082525060088201546001600160a01b0390811660208084019190915260098401548216604080850191909152600a8501548084166060860152600160a01b900460ff16151560808501528051808201909152600b8501549092168252600c909301549281019290925260a0015286614e9e565b1161352f5760405162461bcd60e51b815260206004820152601c60248201527f4d61726b65743a206e6f74206269646564206f6e2061756374696f6e0000000060448201526064016105f9565b600781015460005b8181101561391757856001600160a01b031683600701828154811061355e5761355e61589f565b60009182526020909120600290910201546001600160a01b0316141561390557600a8301546001600160a01b03161561367957600a8301546007840180546001600160a01b039092169163a9059cbb9190849081106135bf576135bf61589f565b60009182526020909120600290910201546007860180546001600160a01b0390921691859081106135f2576135f261589f565b9060005260206000209060020201600101546040518363ffffffff1660e01b81526004016136219291906156e9565b602060405180830381600087803b15801561363b57600080fd5b505af115801561364f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136739190615639565b50613705565b82600701818154811061368e5761368e61589f565b60009182526020909120600290910201546007840180546001600160a01b03909216916108fc9190849081106136c6576136c661589f565b9060005260206000209060020201600101549081150290604051600060405180830381858888f19350505050158015613703573d6000803e3d6000fd5b505b82600701818154811061371a5761371a61589f565b60009182526020822060029091020180546001600160a01b0319168155600190810191909155600784019061374f908461582a565b8154811061375f5761375f61589f565b60009182526020909120600290910201546007840180546001600160a01b0390921691839081106137925761379261589f565b6000918252602090912060029091020180546001600160a01b0319166001600160a01b0392909216919091179055600783016137cf60018461582a565b815481106137df576137df61589f565b9060005260206000209060020201600101548360070182815481106138065761380661589f565b9060005260206000209060020201600101819055508260070180548061382e5761382e615889565b60008281526020812060026000199093019283020180546001600160a01b0319168155600101559055600b8301546001600160a01b039081169087161415613900576007830180546138829060019061582a565b815481106138925761389261589f565b6000918252602090912060029091020154600b840180546001600160a01b0319166001600160a01b039092169190911790556007830180546138d69060019061582a565b815481106138e6576138e661589f565b6000918252602090912060016002909202010154600c8401555b613917565b8061390f81615858565b915050613537565b50600181101561393b57600b820180546001600160a01b03191690556000600c8301555b846001600160a01b0316846001600160a01b0316847fb1ed7c62850e5b29afc688df5105e4d790006a7bb0f81513d91ac86566f354e660405160405180910390a4505050505050565b61398c614849565b6001600160a01b038085166000818152600860209081526040808320948716835293815283822085835290529190912090613a095760405162461bcd60e51b815260206004820152601a60248201527f4d61726b65743a2061646472657373207a65726f20676976656e00000000000060448201526064016105f9565b60008211613a595760405162461bcd60e51b815260206004820152601860248201527f4d61726b65743a206e6f742076616c6964206e6674206964000000000000000060448201526064016105f9565b42816003015410613aac5760405162461bcd60e51b815260206004820152601960248201527f4d61726b65743a2041756374696f6e206e6f7420656e6465640000000000000060448201526064016105f9565b600b8101546001600160a01b03858116911614613b195760405162461bcd60e51b815260206004820152602560248201527f4d61726b65743a204f6e6c792068696768657374206269646465722063616e20604482015264636c61696d60d81b60648201526084016105f9565b6000613bdd82604051806101a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201805480602002602001604051908101604052809291908181526020016000908282101561346b576000848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101613423565b6040516301ffc9a760e01b81529091506001600160a01b038716906301ffc9a790613c13906380ac58cd60e01b90600401615702565b60206040518083038186803b158015613c2b57600080fd5b505afa158015613c3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c639190615639565b156141f6576040516301ffc9a760e01b81526001600160a01b038716906301ffc9a790613c9b9063152a902d60e11b90600401615702565b60206040518083038186803b158015613cb357600080fd5b505afa158015613cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ceb9190615639565b613eb657613e4382604051806101a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201805480602002602001604051908101604052809291908181526020016000905b82821015613db2576000848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101613d6a565b505050908252506008828101546001600160a01b0390811660208085019190915260098501548216604080860191909152600a808701548085166060880152600160a01b900460ff16151560808701528151808301909252600b87015484168252600c909601549181019190915260a0909301929092528601549186015485926000929081169183918c9116614f2e565b600882015460018301546040516323b872dd60e01b81526001600160a01b03808a16936323b872dd93613e7f9391909216918a9160040161568d565b600060405180830381600087803b158015613e9957600080fd5b505af1158015613ead573d6000803e3d6000fd5b50505050614107565b600182015460405163152a902d60e11b815260048101919091526024810182905260009081906001600160a01b03891690632a55205a90604401604080518083038186803b158015613f0757600080fd5b505afa158015613f1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f3f919061560b565b9150915061409684604051806101a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201805480602002602001604051908101604052809291908181526020016000905b82821015614006576000848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101613fbe565b505050908252506008828101546001600160a01b0390811660208085019190915260098501548216604080860191909152600a808701548085166060880152600160a01b900460ff16151560808701528151808301909252600b87015484168252600c909601549181019190915260a09093019290925288015491880154879286929081169188918e9116614f2e565b600884015460018501546040516323b872dd60e01b81526001600160a01b03808c16936323b872dd936140d29391909216918c9160040161568d565b600060405180830381600087803b1580156140ec57600080fd5b505af1158015614100573d6000803e3d6000fd5b5050505050505b600a8201805460ff60a01b1916600160a01b1790556001600160a01b0380871660009081526006602090815260408083206008870180548616855290835281842088855290925291829020805460ff191690555460058501549151869385939216916000805160206158cb83398151915291614184918b916156e9565b60405180910390a46001600160a01b0380871660009081526008602090815260408083209388168352928152828220868352905290812081815560018101829055600281018290556003810182905560048101829055600581018290556006810182905590611f95600783018261532b565b6040516301ffc9a760e01b81526001600160a01b038716906301ffc9a79061422990636cdb3d1360e11b90600401615702565b60206040518083038186803b15801561424157600080fd5b505afa158015614255573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142799190615639565b15612383576040516301ffc9a760e01b81526001600160a01b038716906301ffc9a7906142b19063152a902d60e11b90600401615702565b60206040518083038186803b1580156142c957600080fd5b505afa1580156142dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143019190615639565b614409576143c782604051806101a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782018054806020026020016040519081016040528092919081815260200160009082821015613db2576000848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101613d6a565b600882015460018301546005840154604051637921219560e11b81526001600160a01b038a81169463f242432a94613e7f9492909116928b92906004016156b1565b600182015460405163152a902d60e11b815260048101919091526024810182905260009081906001600160a01b03891690632a55205a90604401604080518083038186803b15801561445a57600080fd5b505afa15801561446e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614492919061560b565b9150915061455884604051806101a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782018054806020026020016040519081016040528092919081815260200160009082821015614006576000848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101613fbe565b600884015460018501546005860154604051637921219560e11b81526001600160a01b038c81169463f242432a946140d29492909116928d92906004016156b1565b6145a2614df4565b6127108111156145c45760405162461bcd60e51b81526004016105f990615789565b600355565b6145d1614849565b6001600160a01b038084166000908152600960209081526040808320868516808552908352818420868552909252909120600881015490921614806146385750826001600160a01b031661462d6000546001600160a01b031690565b6001600160a01b0316145b6146995760405162461bcd60e51b815260206004820152602c60248201527f4d61726b65743a204f6e6c792073656c6c6572206f72206f776e65722063616e60448201526b0818d85b98d95b081cd95b1b60a21b60648201526084016105f9565b6146a48484846148a3565b6001600160a01b038481166000908152600960209081526040808320938716835292815282822085835290522060080154600160a01b900460ff161561471f5760405162461bcd60e51b815260206004820152601060248201526f13585c9ad95d0e881391950814dbdb1960821b60448201526064016105f9565b506001600160a01b039283166000818152600960209081526040808320959096168083529481528582208483528152858220828155600181018390556002810183905560038101839055600481018390556005810180546001600160a01b03199081169091556006820180548216905560078083018054909216909155600890910180546001600160a81b03191690559282529182528481209381529281528383209183525220805460ff19169055565b6147d8614df4565b6001600160a01b03811661483d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105f9565b61484681614e4e565b50565b6005546001600160a01b031633146115575760405162461bcd60e51b815260206004820152601b60248201527f4d61726b65743a20756e617574686f72697a656420416363657373000000000060448201526064016105f9565b6001600160a01b03808416600090815260076020908152604080832093861683529281528282208483529052205460ff1661491a5760405162461bcd60e51b81526020600482015260176024820152764d61726b65743a204e4654206e6f74206f6e2073616c6560481b60448201526064016105f9565b505050565b60008061271060045489614933919061580b565b61493d91906157e9565b61494790896157d1565b905060006127106003548a61495c919061580b565b61496691906157e9565b614970908a61582a565b905061497c818361582a565b92506001600160a01b03841615614c6257604051636eb1769f60e11b81526001600160a01b03878116600483015230602483015283919086169063dd62ed3e9060440160206040518083038186803b1580156149d757600080fd5b505afa1580156149eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a0f9190615674565b1015614a2d5760405162461bcd60e51b81526004016105f990615746565b6040516323b872dd60e01b81526001600160a01b038516906323b872dd90614a5d9089903090879060040161568d565b602060405180830381600087803b158015614a7757600080fd5b505af1158015614a8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614aaf9190615639565b50836001600160a01b031663a9059cbb614ad16000546001600160a01b031690565b856040518363ffffffff1660e01b8152600401614aef9291906156e9565b602060405180830381600087803b158015614b0957600080fd5b505af1158015614b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b419190615639565b506001600160a01b03841663a9059cbb88614b5c8b8561582a565b6040518363ffffffff1660e01b8152600401614b799291906156e9565b602060405180830381600087803b158015614b9357600080fd5b505af1158015614ba7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bcb9190615639565b506001600160a01b03851615614c5d5760405163a9059cbb60e01b81526001600160a01b0385169063a9059cbb90614c099088908c906004016156e9565b602060405180830381600087803b158015614c2357600080fd5b505af1158015614c37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5b9190615639565b505b612e71565b81341015614cb25760405162461bcd60e51b815260206004820152601c60248201527f4d61726b65743a2050726f766964652061736b696e672070726963650000000060448201526064016105f9565b600080546040516001600160a01b039091169185156108fc02918691818181858888f19350505050158015614ceb573d6000803e3d6000fd5b506001600160a01b0387166108fc614d038a8461582a565b6040518115909202916000818181858888f19350505050158015614d2b573d6000803e3d6000fd5b506001600160a01b03851615612e71576040516001600160a01b0386169089156108fc02908a906000818181858888f19350505050158015614d71573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b03808416600090815260066020908152604080832093861683529281528282208483529052205460ff1661491a5760405162461bcd60e51b81526020600482015260176024820152764d61726b65743a204e4654206e6f74206f6e2073616c6560481b60448201526064016105f9565b6000546001600160a01b031633146115575760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105f9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000805b8360e0015151811015614f2657826001600160a01b03168460e001518281518110614ecf57614ecf61589f565b6020026020010151600001516001600160a01b03161415614f14578360e001518181518110614f0057614f0061589f565b602002602001015160200151915050614f28565b80614f1e81615858565b915050614ea2565b505b92915050565b600080612710600454600354614f4491906157d1565b614f4e908a61580b565b614f5891906157e9565b614f62908961582a565b9050614f6e818961582a565b9150614f7a878261582a565b90506001600160a01b0383161561513457826001600160a01b031663a9059cbb614fac6000546001600160a01b031690565b846040518363ffffffff1660e01b8152600401614fca9291906156e9565b602060405180830381600087803b158015614fe457600080fd5b505af1158015614ff8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061501c9190615639565b5060405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb9061504b90899085906004016156e9565b602060405180830381600087803b15801561506557600080fd5b505af1158015615079573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061509d9190615639565b506001600160a01b0385161561512f5760405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb906150db9088908b906004016156e9565b602060405180830381600087803b1580156150f557600080fd5b505af1158015615109573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061512d9190615639565b505b61517b565b6001600160a01b0385161561517b576040516001600160a01b0386169088156108fc029089906000818181858888f19350505050158015615179573d6000803e3d6000fd5b505b60005b8960e0015151811015614d7157846001600160a01b03168a60e0015182815181106151ab576151ab61589f565b6020026020010151600001516001600160a01b031614615319576001600160a01b0384161561529c57836001600160a01b031663a9059cbb8b60e0015183815181106151f9576151f961589f565b6020026020010151600001518c60e00151848151811061521b5761521b61589f565b6020026020010151602001516040518363ffffffff1660e01b81526004016152449291906156e9565b602060405180830381600087803b15801561525e57600080fd5b505af1158015615272573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906152969190615639565b50615319565b8960e0015181815181106152b2576152b261589f565b6020026020010151600001516001600160a01b03166108fc8b60e0015183815181106152e0576152e061589f565b6020026020010151602001519081150290604051600060405180830381858888f19350505050158015615317573d6000803e3d6000fd5b505b8061532381615858565b91505061517e565b508054600082556002029060005260206000209081019061484691905b8082111561536d5780546001600160a01b031916815560006001820155600201615348565b5090565b60006020828403121561538357600080fd5b813561538e816158b5565b9392505050565b6000602082840312156153a757600080fd5b815161538e816158b5565b600080600080608085870312156153c857600080fd5b84356153d3816158b5565b935060208501356153e3816158b5565b925060408501356153f3816158b5565b9396929550929360600135925050565b600080600080600060a0868803121561541b57600080fd5b8535615426816158b5565b94506020860135615436816158b5565b93506040860135615446816158b5565b94979396509394606081013594506080013592915050565b60008060008060008060c0878903121561547757600080fd5b8635615482816158b5565b95506020870135615492816158b5565b945060408701356154a2816158b5565b959894975094956060810135955060808101359460a0909101359350915050565b600080600080600080600060e0888a0312156154de57600080fd5b87356154e9816158b5565b965060208801356154f9816158b5565b95506040880135615509816158b5565b969995985095966060810135965060808101359560a0820135955060c0909101359350915050565b60008060006060848603121561554657600080fd5b8335615551816158b5565b92506020840135615561816158b5565b929592945050506040919091013590565b6000806000806080858703121561558857600080fd5b8435615593816158b5565b935060208501356155a3816158b5565b92506040850135915060608501356155ba816158b5565b939692955090935050565b600080600080608085870312156155db57600080fd5b84356155e6816158b5565b935060208501356155f6816158b5565b93969395505050506040820135916060013590565b6000806040838503121561561e57600080fd5b8251615629816158b5565b6020939093015192949293505050565b60006020828403121561564b57600080fd5b8151801515811461538e57600080fd5b60006020828403121561566d57600080fd5b5035919050565b60006020828403121561568657600080fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b6001600160e01b031991909116815260200190565b60208082526015908201527413585c9ad95d0e88105d58dd1a5bdb88195b991959605a1b604082015260600190565b60208082526023908201527f4d61726b65743a20706c656173652070726f697664652061736b696e6720707260408201526269636560e81b606082015260800190565b60208082526028908201527f4d61726b65743a2070657263656e74616765206d757374206265206c6573732060408201526707468616e203130360c41b606082015260800190565b600082198211156157e4576157e4615873565b500190565b60008261580657634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561582557615825615873565b500290565b60008282101561583c5761583c615873565b500390565b60008161585057615850615873565b506000190190565b600060001982141561586c5761586c615873565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461484657600080fdfe00f93dbdb72854b6b6fb35433086556f2635fc83c37080c667496fecfa650fb4a2646970667358221220ae1b8204aa053d7cc16bcdd19a71d24af7d82cd3f492541a7ec07b2711f556a264736f6c63430008070033
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.