Overview
GLMR Balance
GLMR Value
$302.66 (@ $0.08/GLMR)More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 8,485 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Fulfill Listing | 10116329 | 32 days ago | IN | 350 GLMR | 0.02995185 | ||||
Fulfill Listing | 9725214 | 60 days ago | IN | 98 GLMR | 0.025471 | ||||
Delist Token | 9530283 | 73 days ago | IN | 0 GLMR | 0.037855 | ||||
Delist Token | 9530281 | 73 days ago | IN | 0 GLMR | 0.037855 | ||||
List Token | 9241241 | 94 days ago | IN | 0 GLMR | 0.129052 | ||||
List Token | 9147355 | 100 days ago | IN | 0 GLMR | 0.12466 | ||||
List Token | 9147345 | 100 days ago | IN | 0 GLMR | 0.12466 | ||||
List Token | 9082500 | 105 days ago | IN | 0 GLMR | 0.076128 | ||||
List Token | 9082475 | 105 days ago | IN | 0 GLMR | 0.076128 | ||||
List Token | 9082465 | 105 days ago | IN | 0 GLMR | 0.076128 | ||||
List Token | 9082432 | 105 days ago | IN | 0 GLMR | 0.076128 | ||||
List Token | 9082421 | 105 days ago | IN | 0 GLMR | 0.076128 | ||||
List Token | 9048702 | 107 days ago | IN | 0 GLMR | 0.152384 | ||||
List Token | 8960305 | 114 days ago | IN | 0 GLMR | 0.152384 | ||||
List Token | 8954632 | 114 days ago | IN | 0 GLMR | 0.152384 | ||||
List Token | 8954612 | 114 days ago | IN | 0 GLMR | 0.152384 | ||||
List Token | 8954592 | 114 days ago | IN | 0 GLMR | 0.152384 | ||||
List Token | 8954480 | 114 days ago | IN | 0 GLMR | 0.152384 | ||||
Fulfill Listing | 8910747 | 117 days ago | IN | 140 GLMR | 0.203768 | ||||
Fulfill Listing | 8910710 | 117 days ago | IN | 175 GLMR | 0.203768 | ||||
List Token | 8873549 | 120 days ago | IN | 0 GLMR | 0.076192 | ||||
Fulfill Listing | 8827199 | 123 days ago | IN | 40 GLMR | 0.10251964 | ||||
List Token | 8779172 | 127 days ago | IN | 0 GLMR | 0.12466 | ||||
List Token | 8731439 | 130 days ago | IN | 0 GLMR | 0.152384 | ||||
List Token | 8679993 | 134 days ago | IN | 0 GLMR | 0.06233 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
10116329 | 32 days ago | 3.5 GLMR | ||||
10116329 | 32 days ago | 3.5 GLMR | ||||
10116329 | 32 days ago | 3.5 GLMR | ||||
10116329 | 32 days ago | 339.5 GLMR | ||||
9725214 | 60 days ago | 0.98 GLMR | ||||
9725214 | 60 days ago | 4.9 GLMR | ||||
9725214 | 60 days ago | 0.98 GLMR | ||||
9725214 | 60 days ago | 0.98 GLMR | ||||
9725214 | 60 days ago | 90.16 GLMR | ||||
8910747 | 117 days ago | 1.4 GLMR | ||||
8910747 | 117 days ago | 7 GLMR | ||||
8910747 | 117 days ago | 1.4 GLMR | ||||
8910747 | 117 days ago | 1.4 GLMR | ||||
8910747 | 117 days ago | 128.8 GLMR | ||||
8910710 | 117 days ago | 1.75 GLMR | ||||
8910710 | 117 days ago | 8.75 GLMR | ||||
8910710 | 117 days ago | 1.75 GLMR | ||||
8910710 | 117 days ago | 1.75 GLMR | ||||
8910710 | 117 days ago | 161 GLMR | ||||
8827199 | 123 days ago | 0.4 GLMR | ||||
8827199 | 123 days ago | 0.8 GLMR | ||||
8827199 | 123 days ago | 0.4 GLMR | ||||
8827199 | 123 days ago | 0.4 GLMR | ||||
8827199 | 123 days ago | 38 GLMR | ||||
8670555 | 135 days ago | 2.49 GLMR |
Loading...
Loading
Contract Name:
MarketPlace
Compiler Version
v0.8.9+commit.e5eed63a
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
//Custom NFT Marketplace Contract. From your favorite beans around - MoonBeans! pragma solidity ^0.8.0; // SPDX-License-Identifier: MIT import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol"; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; contract MarketPlace is IERC721Receiver, ReentrancyGuard, Ownable { event TokenListed(address indexed token, uint256 indexed id, uint256 indexed price, uint256 timestamp); event TokenDelisted(address indexed token, uint256 indexed id, uint256 timestamp); event TokenPurchased(address indexed oldOwner, address indexed newOwner, uint256 indexed price, address collection, uint256 tokenId); event BidPlaced(address indexed token, uint256 indexed id, uint256 indexed price, address buyer, uint256 timestamp, bool escrowed); event BidCancelled(address indexed token, uint256 indexed id, uint256 indexed price, address buyer, bool escrowed, uint256 timestamp); event EscrowReturned(address indexed user, uint256 indexed price); // Fees are out of 1000, to theoretically allow for 0.1 - 0.9% fees in the future. uint256 public devFee = 10; //1% uint256 public beanieHolderFee = 10; //1% uint256 public beanBuybackFee = 10; //1% uint256 public defaultCollectionOwnerFee = 0; //0% uint256 public totalEscrowedAmount = 0; uint256 public specialTaxGas = 100000; address public TOKEN = 0xAcc15dC74880C9944775448304B263D191c6077F; //WGLMR address public devAddress = 0x24312a0b911fE2199fbea92efab55e2ECCeC637D; address public beanieHolderAddress = 0x6e0fa1dC8E3e6510aeBF14fCa3d83C77a9780ecB; address public beanBuybackAddress = 0xE9b8258668E17AFA5D09de9F10381dE5565dbDc0; struct Listing { uint256 price; uint256 timestamp; uint256 tokenId; bool accepted; } struct Offer { uint256 price; uint256 timestamp; bool accepted; address buyer; bool escrowed; } bool public tradingPaused = false; bool public useSuperGasTaxes = false; bool public feesOn = true; bool public delistAfterAcceptingOffer = true; bool public clearBidsAfterAcceptingOffer = false; bool public clearBidsAfterFulfillingListing = false; bool public collectionOwnersCanSetRoyalties = true; mapping(address => bool) collectionTradingEnabled; mapping(address => mapping(uint256 => Listing[])) listings; mapping(address => mapping(uint256 => Offer[])) offers; mapping(address => address) collectionOwners; mapping(address => uint256) totalInEscrow; mapping(address => uint256) collectionOwnerFees; mapping(address => bool) administrators; modifier onlyAdmins { require(owner() == _msgSender() || administrators[_msgSender()], "Not owner or admin."); _; } // Required in order to receive ERC 721's. function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) { return this.onERC721Received.selector; } // Required in order to receive MOVR/ETH. receive() external payable { } // LISTINGS // Public wrapper around token delisting, requiring ownership to delist. function delistToken(address ca, uint256 tokenId) public { require(msg.sender == IERC721(ca).ownerOf(tokenId) || administrators[msg.sender], "Only the owner of a token can delist it."); _delistToken(ca, tokenId); } // Returns value in the 'listings' mapping for a specific address + id to the default (0). function _delistToken(address ca, uint256 tokenId) private { listings[ca][tokenId].push(Listing(0, block.timestamp, tokenId, false)); emit TokenDelisted(ca, tokenId, block.timestamp); } // Lists a token at the specified price point. function listToken(address ca, uint256 tokenId, uint256 price) public { require(msg.sender == IERC721(ca).ownerOf(tokenId), "Only the owner of a token can list it."); require(price != 0, "Cannot set price to 0."); require(IERC721(ca).isApprovedForAll(msg.sender, address(this)), "Marketplace not approved to handle this users tokens."); listings[ca][tokenId].push(Listing(price, block.timestamp, tokenId, false)); emit TokenListed(ca, tokenId, price, block.timestamp); } // Check if a token already has any listings. function isListed(address ca, uint256 tokenId) public view returns (bool) { uint256 index = listings[ca][tokenId].length; if (index == 0) { return false; } return listings[ca][tokenId][index - 1].price != 0; } // Getter for the current asking price on a specific token. function getCurrentListingPrice(address ca, uint256 tokenId) public view returns (uint256){ return getCurrentListing(ca, tokenId).price; } // Getter for the latest listing on a specific token. function getCurrentListing(address ca, uint256 tokenId) public view returns (Listing memory){ uint256 numListings = getNumberOfListings(ca, tokenId); require(numListings != 0, "No listings for this token."); return listings[ca][tokenId][numListings-1]; } // Getter for all listings of a unique token. function getTokenListingHistory(address ca, uint256 tokenId) external view returns (Listing[] memory) { return listings[ca][tokenId]; } // Allows a buyer to buy at the listed price. function fulfillListing(address ca, uint256 tokenId) external payable nonReentrant { require(!tradingPaused, "Marketplace trading is disabled."); require(collectionTradingEnabled[ca], "Trading for this collection is not enabled."); uint256 price = getCurrentListingPrice(ca, tokenId); require(msg.value >= price, "The amount sent is less than the asking price."); require(price != 0, "This token is not currently listed."); //get current NFT owner, verify approval address payable oldOwner = payable(IERC721(ca).ownerOf(tokenId)); require(IERC721(ca).isApprovedForAll(oldOwner, address(this)), "Marketplace not approved to transfer this NFT."); //get buyer, calculate fees, store seller original balance address payable newOwner = payable(msg.sender); (uint256 devFeeAmount, uint256 beanieHolderFeeAmount, uint256 beanBuybackFeeAmount, uint256 collectionOwnerFeeAmount, uint256 remainder) = calculateAmounts(ca, price); uint256 oldOwnerMovrBalance = oldOwner.balance; //swippity swappity IERC721(ca).safeTransferFrom(oldOwner, newOwner, tokenId); oldOwner.transfer(remainder); //Check that all went swimmingly require(IERC721(ca).ownerOf(tokenId) == newOwner, "NFT was not successfully transferred."); require(oldOwner.balance >= (oldOwnerMovrBalance + remainder), "Funds were not successfully sent."); emit TokenPurchased(oldOwner, newOwner, price, ca, tokenId); //fees if (feesOn) { if (useSuperGasTaxes) { sendFeeWithExtraGas(beanieHolderAddress, beanieHolderFeeAmount); sendFeeWithExtraGas(beanBuybackAddress, beanBuybackFeeAmount); sendFeeWithExtraGas(collectionOwners[ca], collectionOwnerFeeAmount); sendFeeWithExtraGas(devAddress, devFeeAmount); } else { payable(collectionOwners[ca]).transfer(collectionOwnerFeeAmount); payable(devAddress).transfer(devFeeAmount); payable(beanieHolderAddress).transfer(beanieHolderFeeAmount); payable(beanBuybackAddress).transfer(beanBuybackFeeAmount); } } markListingAsAccepted(ca, tokenId); if (clearBidsAfterFulfillingListing) { _clearAllBids(ca, tokenId); } _delistToken(ca, tokenId); } // OFFERS // Make a standard offer (checks balance of bidder, but does not escrow). function makeOffer(address ca, uint256 tokenId, uint256 price) public { require(msg.sender != IERC721(ca).ownerOf(tokenId), "Can not bid on your own NFT."); require(price != 0, "Cannot bid a price of 0."); require(msg.sender.balance >= price, "The buyer does not have enough money to make the bid."); require(IERC20(TOKEN).allowance(msg.sender, address(this)) >= price, "Not an escrowed bid; approval required (Default: WMOVR)."); offers[ca][tokenId].push(Offer(price, block.timestamp, false, msg.sender, false)); emit BidPlaced(ca, tokenId, price, msg.sender, block.timestamp, false); } // Make an escrowed offer (checks balance of bidder, then holds the bid in the contract as an escrow). function makeEscrowedOffer(address ca, uint256 tokenId, uint256 price) public payable nonReentrant { require(msg.sender != IERC721(ca).ownerOf(tokenId), "Can not bid on your own NFT."); require(price != 0, "Cannot bid a price of 0."); require(msg.value >= price, "The buyer did not send enough money for an escrowed bid."); totalEscrowedAmount += msg.value; totalInEscrow[msg.sender] += msg.value; offers[ca][tokenId].push(Offer(price, block.timestamp, false, msg.sender, true)); emit BidPlaced(ca, tokenId, price, msg.sender, block.timestamp, true); } // Cancel an offer (escrowed or not). Could have gas issues if there's too many offers... function cancelOffer(address ca, uint256 tokenId, uint256 price, bool escrowed) external nonReentrant { Offer[] storage _offers = _getOffers(ca, tokenId); for (uint i = 0; i < _offers.length; i++) { if (escrowed) { if (_offers[i].price == price && _offers[i].buyer == msg.sender && _offers[i].escrowed && !_offers[i].accepted) { delete offers[ca][tokenId][i]; returnEscrowedFunds(msg.sender, price); emit BidCancelled(ca, tokenId, price, msg.sender, escrowed, block.timestamp); return; } } else { if (_offers[i].price == price && _offers[i].buyer == msg.sender && !_offers[i].escrowed && !_offers[i].accepted) { delete offers[ca][tokenId][i]; emit BidCancelled(ca, tokenId, price, msg.sender, escrowed, block.timestamp); return; } } } revert('No cancellable offer found.'); } // Getter for all bids on a unique token. function getOffers(address ca, uint256 tokenId) external view returns (Offer[] memory) { return offers[ca][tokenId]; } // Same as above, but for internal calls/passing offers object by reference. function _getOffers(address ca, uint256 tokenId) internal view returns (Offer[] storage) { return offers[ca][tokenId]; } // Accept an active offer. function acceptOffer(address ca, uint256 tokenId, uint256 price, address from, bool escrowedBid) external nonReentrant { IERC721 _nft = IERC721(ca); require(msg.sender == _nft.ownerOf(tokenId), "Only the owner of this NFT can accept an offer."); require(_nft.isApprovedForAll(msg.sender, address(this)), "Marketplace not approved to transfer this NFT."); require(!tradingPaused, "Marketplace trading is disabled."); require(collectionTradingEnabled[ca], "Trading for this collection is not enabled."); Offer[] storage _offers = _getOffers(ca, tokenId); uint256 correctIndex = 999999999999999999; for (uint i = _offers.length-1; i >= 0; i--) { if (_offers[i].price == price && _offers[i].buyer == from && _offers[i].accepted == false && _offers[i].escrowed == escrowedBid ) { correctIndex = i; break; } } require(correctIndex != 999999999999999999, "Matching offer not found..."); // Actually perform trade address payable oldOwner = payable(address(msg.sender)); address payable newOwner = payable(address(from)); if (escrowedBid) { escrowedPurchase(_nft, ca, tokenId, price, oldOwner, newOwner); } else { tokenPurchase(_nft, ca, tokenId, price, oldOwner, newOwner); } // Clean up data structures markOfferAsAccepted(ca, tokenId, correctIndex, _offers[correctIndex]); if (clearBidsAfterAcceptingOffer) { _clearAllBids(ca, tokenId); } if(delistAfterAcceptingOffer && isListed(ca, tokenId)) { _delistToken(ca, tokenId); } } // PUBLIC ESCROW FUNCTIONS function addMoneyToEscrow() external payable nonReentrant { require(msg.value >= 10000000 gwei, "Minimum escrow deposit is 0.01 MOVR."); totalEscrowedAmount += msg.value; totalInEscrow[msg.sender] += msg.value; } function withdrawMoneyFromEscrow(uint256 amount) external nonReentrant { require(totalInEscrow[msg.sender] >= amount, "Trying to withdraw more than deposited."); returnEscrowedFunds(msg.sender, amount); } function getEscrowedAmount(address user) external view returns (uint256) { return totalInEscrow[user]; } // OTHER PUBLIC FUNCTIONS function getCollectionOwner(address ca) external view returns (address) { return collectionOwners[ca]; } function totalFees() public view returns (uint256) { return (devFee + beanieHolderFee + beanBuybackFee + defaultCollectionOwnerFee); } function checkEscrowAmount(address user) external view returns (uint256) { return totalInEscrow[user]; } function isCollectionTrading(address ca) external view returns (bool) { return collectionTradingEnabled[ca]; } function getCollectionFee(address ca) external view returns (uint256) { return collectionOwnerFees[ca]; } // ADMIN FUNCTIONS function setAdmin(address admin, bool value) external onlyOwner { administrators[admin] = value; } function setPaymentToken(address _token) external onlyOwner { TOKEN = _token; } function clearAllBids(address ca, uint256 tokenId) external onlyAdmins { _clearAllBids(ca, tokenId); } function clearAllListings(address ca, uint256 tokenId) external onlyAdmins { delete listings[ca][tokenId]; } function setTrading(bool value) external onlyOwner { require(tradingPaused != value, "Already set to that value."); tradingPaused = value; } function setSuperGasTaxes(bool value) external onlyOwner { require(useSuperGasTaxes != value, "Already set to that value."); useSuperGasTaxes = value; } function setCollectionTrading(address ca, bool value) external onlyAdmins { require(collectionTradingEnabled[ca] != value, "Already set to that value."); collectionTradingEnabled[ca] = value; } function setCollectionOwner(address ca, address owner) external onlyAdmins { collectionOwners[ca] = owner; } function setDevFee(uint256 fee) external onlyOwner { require (fee <= 100, "Max 10% fee"); devFee = fee; } function setBeanieHolderFee(uint256 fee) external onlyOwner { require (fee <= 100, "Max 10% fee"); beanieHolderFee = fee; } function setBeanBuyBackFee(uint256 fee) external onlyOwner { require (fee <= 100, "Max 10% fee"); beanBuybackFee = fee; } function setCollectionOwnerFee(address ca, uint256 fee) external { bool verifiedCollectionOwner = collectionOwnersCanSetRoyalties && (_msgSender() == collectionOwners[ca]); require(_msgSender() == owner() || verifiedCollectionOwner); require (fee <= 100, "Max 10% fee"); collectionOwnerFees[ca] = fee; } function setDefaultCollectionOwnerFee(uint256 fee) external onlyOwner { require(fee <= 100, "Max 10% fee"); defaultCollectionOwnerFee = fee; } function setDevAddress(address _address) external onlyOwner { devAddress = _address; } function setBeanieHolderAddress(address _address) external onlyOwner { beanieHolderAddress = _address; } function setBeanBuybackAddress(address _address) external onlyOwner { beanBuybackAddress = _address; } function setSpecialGasTax(uint256 gasAmount) external onlyOwner { specialTaxGas = gasAmount; } function setFeesOn(bool _value) external onlyOwner { feesOn = _value; } function setDelistAfterAcceptingOffer(bool _value) external onlyOwner { delistAfterAcceptingOffer = _value; } function setClearBidsAfterAcceptingOffer(bool _value) external onlyOwner { clearBidsAfterAcceptingOffer = _value; } function setClearBidsAfterFulfillingListing(bool _value) external onlyOwner { clearBidsAfterFulfillingListing = _value; } function setCollectionOwnersCanSetRoyalties(bool _value) external onlyOwner { collectionOwnersCanSetRoyalties = _value; } // Emergency only - Recover Tokens function recoverToken(address _token, uint256 amount) external onlyOwner { IERC20(_token).transfer(owner(), amount); } // Emergency only - Recover NFTs function recoverNFT(address _token, uint256 tokenId) external onlyOwner { IERC721(_token).transferFrom(address(this), owner(), tokenId); } // Emergency only - Recover MOVR function RecoverMOVR(address to, uint256 amount) external onlyOwner { payable(to).transfer(amount); } // PRIVATE HELPERS function calculateAmounts(address ca, uint256 amount) private view returns (uint256, uint256, uint256, uint256, uint256){ uint256 _collectionOwnerFee = collectionOwnerFees[ca] == 0 ? defaultCollectionOwnerFee : collectionOwnerFees[ca]; uint256 devFeeAmount = amount * devFee / 1000; uint256 beanieHolderFeeAmount = amount * beanieHolderFee / 1000; uint256 beanBuybackFeeAmount = amount * beanBuybackFee / 1000; uint256 collectionOwnerFeeAmount = amount * _collectionOwnerFee / 1000; uint256 remainder = amount - (devFeeAmount + beanieHolderFeeAmount + beanBuybackFeeAmount + collectionOwnerFeeAmount); return (devFeeAmount, beanieHolderFeeAmount, beanBuybackFeeAmount, collectionOwnerFeeAmount, remainder); } function getNumberOfListings(address ca, uint256 tokenId) private view returns (uint256) { return listings[ca][tokenId].length; } function markListingAsAccepted(address ca, uint256 tokenId) private { Listing memory current = getCurrentListing(ca, tokenId); Listing memory replaced = current; replaced.accepted = true; uint256 index = getNumberOfListings(ca, tokenId); if (index != 0) { listings[ca][tokenId][index - 1] = replaced; } } function markOfferAsAccepted(address ca, uint256 tokenId, uint256 i, Offer storage offer) private { Offer memory replaced = offer; replaced.accepted = true; offers[ca][tokenId][i] = replaced; } function returnEscrowedFunds(address user, uint256 price) private { require(totalEscrowedAmount >= price, "Not enough funds to return escrow. Theoretically impossible."); require(totalInEscrow[user] >= price, "Not enough funds to return escrow. Theoretically impossible."); totalEscrowedAmount -= price; totalInEscrow[user] -= price; payable(user).transfer(price); emit EscrowReturned(user, price); } function escrowedPurchase(IERC721 _nft, address ca, uint256 tokenId, uint256 price, address payable oldOwner, address payable newOwner) private { require(totalInEscrow[newOwner] >= price, "Buyer does not have enough money in escrow."); require(totalEscrowedAmount >= price, "Escrow balance too low."); uint256 oldOwnerMovrBalance = oldOwner.balance; //calculate fees (uint256 devFeeAmount, uint256 beanieHolderFeeAmount, uint256 beanBuybackFeeAmount, uint256 collectionOwnerFeeAmount, uint256 remainder) = calculateAmounts(ca, price); totalInEscrow[newOwner] -= price; totalEscrowedAmount -= price; //swippity swappity _nft.safeTransferFrom(oldOwner, newOwner, tokenId); oldOwner.transfer(remainder); //check that all went swimmingly require(oldOwner.balance >= (oldOwnerMovrBalance + remainder), "Funds were not successfully sent."); require(_nft.ownerOf(tokenId) == newOwner, "NFT was not successfully transferred."); emit TokenPurchased(oldOwner, newOwner, price, ca, tokenId); //fees if (feesOn) { if (useSuperGasTaxes) { sendFeeWithExtraGas(beanieHolderAddress, beanieHolderFeeAmount); sendFeeWithExtraGas(beanBuybackAddress, beanBuybackFeeAmount); sendFeeWithExtraGas(collectionOwners[ca], collectionOwnerFeeAmount); sendFeeWithExtraGas(devAddress, devFeeAmount); } else { payable(collectionOwners[ca]).transfer(collectionOwnerFeeAmount); payable(devAddress).transfer(devFeeAmount); payable(beanieHolderAddress).transfer(beanieHolderFeeAmount); payable(beanBuybackAddress).transfer(beanBuybackFeeAmount); } } } function tokenPurchase(IERC721 _nft, address ca, uint256 tokenId, uint256 price, address payable oldOwner, address payable newOwner) private { IERC20 _token = IERC20(TOKEN); require(_token.balanceOf(msg.sender) >= price, "Buyer does not have enough money to purchase."); require(_token.allowance(newOwner, address(this)) >= price, "Marketplace not approved to spend buyer tokens."); (uint256 devFeeAmount, uint256 beanieHolderFeeAmount, uint256 beanBuybackFeeAmount, uint256 collectionOwnerFeeAmount, uint256 remainder) = calculateAmounts(ca, price); _nft.safeTransferFrom(oldOwner, newOwner, tokenId); _token.transferFrom(newOwner, oldOwner, remainder); require(_token.balanceOf(oldOwner) >= remainder, "Funds were not successfully sent."); require(_nft.ownerOf(tokenId) == newOwner, "NFT was not successfully transferred."); emit TokenPurchased(oldOwner, newOwner, price, ca, tokenId); //fees if (feesOn) { _token.transferFrom(address(this), collectionOwners[ca], collectionOwnerFeeAmount); _token.transferFrom(address(this), devAddress, devFeeAmount); _token.transferFrom(address(this), beanieHolderAddress, beanieHolderFeeAmount); _token.transferFrom(address(this), beanBuybackAddress, beanBuybackFeeAmount); } } function sendFeeWithExtraGas(address recipient, uint256 amount) internal { (bool success, ) = recipient.call{gas: specialTaxGas, value: amount}(""); require(success, "Transfer failed."); } function _clearAllBids(address ca, uint256 tokenId) internal { Offer[] storage _offers = _getOffers(ca, tokenId); for (uint i = _offers.length-1; i >= 0; i--) { if (_offers[i].accepted == false && _offers[i].escrowed == true) { returnEscrowedFunds(_offers[i].buyer, _offers[i].price); emit BidCancelled(ca, tokenId, _offers[i].price, _offers[i].buyer, _offers[i].escrowed, block.timestamp); } } delete offers[ca][tokenId]; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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); /** * @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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"bool","name":"escrowed","type":"bool"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"BidCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"bool","name":"escrowed","type":"bool"}],"name":"BidPlaced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"price","type":"uint256"}],"name":"EscrowReturned","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":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokenDelisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokenListed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"},{"indexed":true,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"address","name":"collection","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"TokenPurchased","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RecoverMOVR","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TOKEN","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ca","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"address","name":"from","type":"address"},{"internalType":"bool","name":"escrowedBid","type":"bool"}],"name":"acceptOffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"addMoneyToEscrow","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"beanBuybackAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beanBuybackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beanieHolderAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beanieHolderFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ca","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"bool","name":"escrowed","type":"bool"}],"name":"cancelOffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"checkEscrowAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ca","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"clearAllBids","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ca","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"clearAllListings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clearBidsAfterAcceptingOffer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearBidsAfterFulfillingListing","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collectionOwnersCanSetRoyalties","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultCollectionOwnerFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delistAfterAcceptingOffer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ca","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"delistToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feesOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ca","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"fulfillListing","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"ca","type":"address"}],"name":"getCollectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ca","type":"address"}],"name":"getCollectionOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ca","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getCurrentListing","outputs":[{"components":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bool","name":"accepted","type":"bool"}],"internalType":"struct MarketPlace.Listing","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ca","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getCurrentListingPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getEscrowedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ca","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOffers","outputs":[{"components":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bool","name":"accepted","type":"bool"},{"internalType":"address","name":"buyer","type":"address"},{"internalType":"bool","name":"escrowed","type":"bool"}],"internalType":"struct MarketPlace.Offer[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ca","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getTokenListingHistory","outputs":[{"components":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bool","name":"accepted","type":"bool"}],"internalType":"struct MarketPlace.Listing[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ca","type":"address"}],"name":"isCollectionTrading","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ca","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ca","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"listToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ca","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"makeEscrowedOffer","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"ca","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"makeOffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"recoverNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"recoverToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setBeanBuyBackFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setBeanBuybackAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setBeanieHolderAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setBeanieHolderFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setClearBidsAfterAcceptingOffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setClearBidsAfterFulfillingListing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ca","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"setCollectionOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ca","type":"address"},{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setCollectionOwnerFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setCollectionOwnersCanSetRoyalties","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ca","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setCollectionTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setDefaultCollectionOwnerFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setDelistAfterAcceptingOffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setDevFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setFeesOn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"setPaymentToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gasAmount","type":"uint256"}],"name":"setSpecialGasTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setSuperGasTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"specialTaxGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalEscrowedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"useSuperGasTaxes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawMoneyFromEscrow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600a60028190556003819055600481905560006005819055600655620186a0600755600880546001600160a01b031990811673acc15dc74880c9944775448304b263d191c6077f179091556009805482167324312a0b911fe2199fbea92efab55e2eccec637d179055815416736e0fa1dc8e3e6510aebf14fca3d83c77a9780ecb179055600b80547a01000001010000e9b8258668e17afa5d09de9f10381de5565dbdc06001600160d81b0319909116179055348015620000c457600080fd5b506001600055620000d533620000db565b6200012d565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61500d806200013d6000396000f3fe6080604052600436106103dd5760003560e01c806382ff441c116101fd578063cd653ee611610118578063dfd3da7e116100ab578063e9a7720b1161007a578063e9a7720b14610bc2578063ea98a95014610be3578063f2fde38b14610c10578063feb8840614610c30578063ff09343614610c5057600080fd5b8063dfd3da7e14610b33578063e0777a1414610b54578063e48e447314610b81578063e4c8be8c14610ba257600080fd5b8063d3810e24116100e7578063d3810e2414610abc578063d77fb11e14610ad2578063db8c96c714610af2578063dd3cfd3214610b1257600080fd5b8063cd653ee614610a45578063cdb3cd2514610a66578063d0d41fe114610a86578063d1ffa71a14610aa657600080fd5b806395483e8111610190578063b3a4f97b1161015f578063b3a4f97b146109af578063b966373a146109e5578063cbde640514610a05578063ccd6837114610a2557600080fd5b806395483e811461092f578063ab78f3691461094f578063b26a09f71461096f578063b29a81401461098f57600080fd5b80638da5cb5b116101cc5780638da5cb5b146108bb5780638f70ccf7146108d95780639011f8fe146108f9578063943816361461090f57600080fd5b806382ff441c1461084f578063846f45a0146105b957806389394ef51461086f5780638a6169ae1461088257600080fd5b80634fbcd584116102f85780636a326ab11161028b57806376dda5051161025a57806376dda505146107bc5780637b25b94a146107dc5780637de3bd07146107ef5780637e07590d1461080f57806382bfefc81461082f57600080fd5b80636a326ab11461072e5780636b872a961461074e578063715018a61461076e578063745b69ca1461078357600080fd5b80635c827858116102c75780635c827858146106b8578063675ef65c146106d85780636827e764146106f85780636a139d7a1461070e57600080fd5b80634fbcd5841461063757806353e23e2e1461065757806357ccdcf814610678578063599b0a401461069857600080fd5b80632a7b4bff116103705780633fd9d6ff1161033f5780633fd9d6ff146105b95780634a5c213c146105ef5780634ad6a3a2146105f75780634b0bddd21461061757600080fd5b80632a7b4bff146105105780632eb81fdf146105415780633319a00d146105615780633ad10ef61461058157600080fd5b806320184b11116103ac57806320184b11146104a4578063273499f0146104c45780632855ffe2146104e457806329bdfd94146104fa57600080fd5b806313114a9d146103e9578063150b7a021461041157806317c66b8c146104555780631c75b6b21461048257600080fd5b366103e457005b600080fd5b3480156103f557600080fd5b506103fe610c70565b6040519081526020015b60405180910390f35b34801561041d57600080fd5b5061043c61042c36600461484f565b630a85bd0160e11b949350505050565b6040516001600160e01b03199091168152602001610408565b34801561046157600080fd5b5061047561047036600461492f565b610ca1565b604051610408919061495b565b34801561048e57600080fd5b506104a261049d3660046149cc565b610d47565b005b3480156104b057600080fd5b506104a26104bf36600461492f565b610da0565b3480156104d057600080fd5b506104a26104df3660046149f3565b610e4c565b3480156104f057600080fd5b506103fe60035481565b34801561050657600080fd5b506103fe60075481565b34801561051c57600080fd5b50600b5461053190600160b81b900460ff1681565b6040519015158152602001610408565b34801561054d57600080fd5b506104a261055c366004614a52565b6112c2565b34801561056d57600080fd5b506104a261057c36600461492f565b61130a565b34801561058d57600080fd5b506009546105a1906001600160a01b031681565b6040516001600160a01b039091168152602001610408565b3480156105c557600080fd5b506103fe6105d4366004614a76565b6001600160a01b031660009081526010602052604090205490565b6104a26113ab565b34801561060357600080fd5b506104a26106123660046149cc565b611478565b34801561062357600080fd5b506104a2610632366004614a93565b6114a7565b34801561064357600080fd5b506104a261065236600461492f565b6114fc565b34801561066357600080fd5b50600b5461053190600160a01b900460ff1681565b34801561068457600080fd5b506104a261069336600461492f565b61154e565b3480156106a457600080fd5b506104a26106b3366004614a52565b6115b3565b3480156106c457600080fd5b50600b546105a1906001600160a01b031681565b3480156106e457600080fd5b506104a26106f3366004614a52565b6115fb565b34801561070457600080fd5b506103fe60025481565b34801561071a57600080fd5b506104a2610729366004614a76565b611643565b34801561073a57600080fd5b506104a2610749366004614a76565b61168f565b34801561075a57600080fd5b506104a26107693660046149cc565b6116db565b34801561077a57600080fd5b506104a2611783565b34801561078f57600080fd5b506105a161079e366004614a76565b6001600160a01b039081166000908152600f60205260409020541690565b3480156107c857600080fd5b506104a26107d7366004614a52565b6117b9565b6104a26107ea36600461492f565b611801565b3480156107fb57600080fd5b506104a261080a366004614acc565b611e55565b34801561081b57600080fd5b506104a261082a366004614acc565b6121e3565b34801561083b57600080fd5b506008546105a1906001600160a01b031681565b34801561085b57600080fd5b506104a261086a366004614a93565b6124ae565b6104a261087d366004614acc565b61255c565b34801561088e57600080fd5b5061053161089d366004614a76565b6001600160a01b03166000908152600c602052604090205460ff1690565b3480156108c757600080fd5b506001546001600160a01b03166105a1565b3480156108e557600080fd5b506104a26108f4366004614a52565b61285c565b34801561090557600080fd5b506103fe60065481565b34801561091b57600080fd5b506104a261092a366004614b01565b6128d5565b34801561093b57600080fd5b506104a261094a3660046149cc565b612cbd565b34801561095b57600080fd5b506104a261096a3660046149cc565b612d0d565b34801561097b57600080fd5b506104a261098a366004614a52565b612d5d565b34801561099b57600080fd5b506104a26109aa36600461492f565b612da5565b3480156109bb57600080fd5b506103fe6109ca366004614a76565b6001600160a01b031660009081526011602052604090205490565b3480156109f157600080fd5b506104a2610a00366004614a76565b612e70565b348015610a1157600080fd5b506104a2610a20366004614b4b565b612ebc565b348015610a3157600080fd5b506104a2610a40366004614a52565b612f2e565b348015610a5157600080fd5b50600b5461053190600160b01b900460ff1681565b348015610a7257600080fd5b50610531610a8136600461492f565b612fa7565b348015610a9257600080fd5b506104a2610aa1366004614a76565b613033565b348015610ab257600080fd5b506103fe60045481565b348015610ac857600080fd5b506103fe60055481565b348015610ade57600080fd5b506104a2610aed36600461492f565b61307f565b348015610afe57600080fd5b506103fe610b0d36600461492f565b6130ef565b348015610b1e57600080fd5b50600b5461053190600160d01b900460ff1681565b348015610b3f57600080fd5b50600b5461053190600160a81b900460ff1681565b348015610b6057600080fd5b50610b74610b6f36600461492f565b613103565b6040516104089190614b79565b348015610b8d57600080fd5b50600b5461053190600160c81b900460ff1681565b348015610bae57600080fd5b506104a2610bbd3660046149cc565b61322e565b348015610bce57600080fd5b50600b5461053190600160c01b900460ff1681565b348015610bef57600080fd5b50610c03610bfe36600461492f565b61327e565b6040516104089190614ba6565b348015610c1c57600080fd5b506104a2610c2b366004614a76565b613335565b348015610c3c57600080fd5b506104a2610c4b36600461492f565b6133d0565b348015610c5c57600080fd5b50600a546105a1906001600160a01b031681565b6000600554600454600354600254610c889190614c37565b610c929190614c37565b610c9c9190614c37565b905090565b6001600160a01b0382166000908152600d602090815260408083208484528252808320805482518185028101850190935280835260609492939192909184015b82821015610d3a576000848152602090819020604080516080810182526004860290920180548352600180820154848601526002820154928401929092526003015460ff16151560608301529083529092019101610ce1565b5050505090505b92915050565b6001546001600160a01b03163314610d7a5760405162461bcd60e51b8152600401610d7190614c4f565b60405180910390fd5b6064811115610d9b5760405162461bcd60e51b8152600401610d7190614c84565b600255565b600b54600090600160d01b900460ff168015610dd557506001600160a01b038381166000908152600f60205260409020541633145b9050610de96001546001600160a01b031690565b6001600160a01b0316336001600160a01b03161480610e055750805b610e0e57600080fd5b6064821115610e2f5760405162461bcd60e51b8152600401610d7190614c84565b506001600160a01b03909116600090815260116020526040902055565b60026000541415610e6f5760405162461bcd60e51b8152600401610d7190614ca9565b60026000556040516331a9108f60e11b81526004810185905285906001600160a01b03821690636352211e9060240160206040518083038186803b158015610eb657600080fd5b505afa158015610eca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eee9190614ce0565b6001600160a01b0316336001600160a01b031614610f665760405162461bcd60e51b815260206004820152602f60248201527f4f6e6c7920746865206f776e6572206f662074686973204e46542063616e206160448201526e31b1b2b83a1030b71037b33332b91760891b6064820152608401610d71565b60405163e985e9c560e01b81523360048201523060248201526001600160a01b0382169063e985e9c59060440160206040518083038186803b158015610fab57600080fd5b505afa158015610fbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe39190614cfd565b610fff5760405162461bcd60e51b8152600401610d7190614d1a565b600b54600160a01b900460ff16156110595760405162461bcd60e51b815260206004820181905260248201527f4d61726b6574706c6163652074726164696e672069732064697361626c65642e6044820152606401610d71565b6001600160a01b0386166000908152600c602052604090205460ff166110915760405162461bcd60e51b8152600401610d7190614d68565b600061109d87876134dd565b8054909150670de0b6b3a763ffff906000906110bb90600190614db3565b90505b868382815481106110d1576110d1614dca565b90600052602060002090600302016000015414801561112b5750856001600160a01b031683828154811061110757611107614dca565b600091825260209091206003909102016002015461010090046001600160a01b0316145b801561115d575082818154811061114457611144614dca565b600091825260209091206002600390920201015460ff16155b801561119c575084151583828154811061117957611179614dca565b906000526020600020906003020160020160159054906101000a900460ff161515145b156111a9578091506111bb565b806111b381614de0565b9150506110be565b5080670de0b6b3a763ffff14156112145760405162461bcd60e51b815260206004820152601b60248201527f4d61746368696e67206f66666572206e6f7420666f756e642e2e2e00000000006044820152606401610d71565b3385851561122f5761122a858b8b8b8686613504565b61123d565b61123d858b8b8b8686613994565b6112688a8a8587878154811061125557611255614dca565b906000526020600020906003020161402a565b600b54600160c01b900460ff1615611284576112848a8a61412d565b600b54600160b81b900460ff1680156112a257506112a28a8a612fa7565b156112b1576112b18a8a614321565b505060016000555050505050505050565b6001546001600160a01b031633146112ec5760405162461bcd60e51b8152600401610d7190614c4f565b600b8054911515600160c01b0260ff60c01b19909216919091179055565b6001546001600160a01b031633146113345760405162461bcd60e51b8152600401610d7190614c4f565b816001600160a01b03166323b872dd306113566001546001600160a01b031690565b846040518463ffffffff1660e01b815260040161137593929190614df7565b600060405180830381600087803b15801561138f57600080fd5b505af11580156113a3573d6000803e3d6000fd5b505050505050565b600260005414156113ce5760405162461bcd60e51b8152600401610d7190614ca9565b6002600055662386f26fc100003410156114365760405162461bcd60e51b8152602060048201526024808201527f4d696e696d756d20657363726f77206465706f73697420697320302e3031204d60448201526327ab291760e11b6064820152608401610d71565b34600660008282546114489190614c37565b9091555050336000908152601060205260408120805434929061146c908490614c37565b90915550506001600055565b6001546001600160a01b031633146114a25760405162461bcd60e51b8152600401610d7190614c4f565b600755565b6001546001600160a01b031633146114d15760405162461bcd60e51b8152600401610d7190614c4f565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6001546001600160a01b031633148061152457503360009081526012602052604090205460ff165b6115405760405162461bcd60e51b8152600401610d7190614e1b565b61154a828261412d565b5050565b6001546001600160a01b031633146115785760405162461bcd60e51b8152600401610d7190614c4f565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156115ae573d6000803e3d6000fd5b505050565b6001546001600160a01b031633146115dd5760405162461bcd60e51b8152600401610d7190614c4f565b600b8054911515600160d01b0260ff60d01b19909216919091179055565b6001546001600160a01b031633146116255760405162461bcd60e51b8152600401610d7190614c4f565b600b8054911515600160b01b0260ff60b01b19909216919091179055565b6001546001600160a01b0316331461166d5760405162461bcd60e51b8152600401610d7190614c4f565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146116b95760405162461bcd60e51b8152600401610d7190614c4f565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600260005414156116fe5760405162461bcd60e51b8152600401610d7190614ca9565b60026000908155338152601060205260409020548111156117715760405162461bcd60e51b815260206004820152602760248201527f547279696e6720746f207769746864726177206d6f7265207468616e2064657060448201526637b9b4ba32b21760c91b6064820152608401610d71565b61177b33826143dc565b506001600055565b6001546001600160a01b031633146117ad5760405162461bcd60e51b8152600401610d7190614c4f565b6117b760006144eb565b565b6001546001600160a01b031633146117e35760405162461bcd60e51b8152600401610d7190614c4f565b600b8054911515600160b81b0260ff60b81b19909216919091179055565b600260005414156118245760405162461bcd60e51b8152600401610d7190614ca9565b6002600055600b54600160a01b900460ff16156118835760405162461bcd60e51b815260206004820181905260248201527f4d61726b6574706c6163652074726164696e672069732064697361626c65642e6044820152606401610d71565b6001600160a01b0382166000908152600c602052604090205460ff166118bb5760405162461bcd60e51b8152600401610d7190614d68565b60006118c783836130ef565b9050803410156119305760405162461bcd60e51b815260206004820152602e60248201527f54686520616d6f756e742073656e74206973206c657373207468616e2074686560448201526d1030b9b5b4b73390383934b1b29760911b6064820152608401610d71565b806119895760405162461bcd60e51b815260206004820152602360248201527f5468697320746f6b656e206973206e6f742063757272656e746c79206c69737460448201526232b21760e91b6064820152608401610d71565b6040516331a9108f60e11b8152600481018390526000906001600160a01b03851690636352211e9060240160206040518083038186803b1580156119cc57600080fd5b505afa1580156119e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a049190614ce0565b60405163e985e9c560e01b81526001600160a01b0380831660048301523060248301529192509085169063e985e9c59060440160206040518083038186803b158015611a4f57600080fd5b505afa158015611a63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a879190614cfd565b611aa35760405162461bcd60e51b8152600401610d7190614d1a565b33600080808080611ab48a8961453d565b945094509450945094506000876001600160a01b03163190508a6001600160a01b03166342842e0e89898d6040518463ffffffff1660e01b8152600401611afd93929190614df7565b600060405180830381600087803b158015611b1757600080fd5b505af1158015611b2b573d6000803e3d6000fd5b50506040516001600160a01b038b16925084156108fc02915084906000818181858888f19350505050158015611b65573d6000803e3d6000fd5b506040516331a9108f60e11b8152600481018b90526001600160a01b0380891691908d1690636352211e9060240160206040518083038186803b158015611bab57600080fd5b505afa158015611bbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be39190614ce0565b6001600160a01b031614611c095760405162461bcd60e51b8152600401610d7190614e48565b611c138282614c37565b886001600160a01b0316311015611c3c5760405162461bcd60e51b8152600401610d7190614e8d565b604080516001600160a01b038d81168252602082018d90528b92818b1692918c16917fe84a930f9e56d6b1a9a6619750ca0a3827c08b1634164de2ca9b49798890486f910160405180910390a4600b54600160b01b900460ff1615611e1357600b54600160a81b900460ff1615611d1957600a54611cc3906001600160a01b031686614642565b600b54611cd9906001600160a01b031685614642565b6001600160a01b03808c166000908152600f6020526040902054611cfe911684614642565b600954611d14906001600160a01b031687614642565b611e13565b6001600160a01b03808c166000908152600f602052604080822054905192169185156108fc0291869190818181858888f19350505050158015611d60573d6000803e3d6000fd5b506009546040516001600160a01b039091169087156108fc029088906000818181858888f19350505050158015611d9b573d6000803e3d6000fd5b50600a546040516001600160a01b039091169086156108fc029087906000818181858888f19350505050158015611dd6573d6000803e3d6000fd5b50600b546040516001600160a01b039091169085156108fc029086906000818181858888f19350505050158015611e11573d6000803e3d6000fd5b505b611e1d8b8b6146dc565b600b54600160c81b900460ff1615611e3957611e398b8b61412d565b611e438b8b614321565b50506001600055505050505050505050565b6040516331a9108f60e11b8152600481018390526001600160a01b03841690636352211e9060240160206040518083038186803b158015611e9557600080fd5b505afa158015611ea9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ecd9190614ce0565b6001600160a01b0316336001600160a01b03161415611f2e5760405162461bcd60e51b815260206004820152601c60248201527f43616e206e6f7420626964206f6e20796f7572206f776e204e46542e000000006044820152606401610d71565b80611f765760405162461bcd60e51b815260206004820152601860248201527721b0b73737ba103134b2103090383934b1b29037b310181760411b6044820152606401610d71565b3331811115611fe55760405162461bcd60e51b815260206004820152603560248201527f54686520627579657220646f6573206e6f74206861766520656e6f756768206d60448201527437b732bc903a379036b0b5b2903a3432903134b21760591b6064820152608401610d71565b600854604051636eb1769f60e11b815233600482015230602482015282916001600160a01b03169063dd62ed3e9060440160206040518083038186803b15801561202e57600080fd5b505afa158015612042573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120669190614ece565b10156120da5760405162461bcd60e51b815260206004820152603860248201527f4e6f7420616e20657363726f776564206269643b20617070726f76616c20726560448201527f717569726564202844656661756c743a20574d4f5652292e00000000000000006064820152608401610d71565b6001600160a01b038381166000818152600e602090815260408083208784528252808320815160a08101835287815242818501818152828501878152336060808601828152608087018b8152885460018082018b55998d528b8d2098516003909102909801978855945197870197909755915160029095018054965193511515600160a81b0260ff60a81b1994909c1661010002610100600160a81b0319961515969096166001600160a81b03199097169690961794909417919091169890981790925582519081529283015281019190915283928592917fc04359f39c9f4a2c55808f46b81414842c7568aa3f1a7c9160c70dbf32d79a8891015b60405180910390a4505050565b6040516331a9108f60e11b8152600481018390526001600160a01b03841690636352211e9060240160206040518083038186803b15801561222357600080fd5b505afa158015612237573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225b9190614ce0565b6001600160a01b0316336001600160a01b0316146122ca5760405162461bcd60e51b815260206004820152602660248201527f4f6e6c7920746865206f776e6572206f66206120746f6b656e2063616e206c6960448201526539ba1034ba1760d11b6064820152608401610d71565b806123105760405162461bcd60e51b815260206004820152601660248201527521b0b73737ba1039b2ba10383934b1b2903a3790181760511b6044820152606401610d71565b60405163e985e9c560e01b81523360048201523060248201526001600160a01b0384169063e985e9c59060440160206040518083038186803b15801561235557600080fd5b505afa158015612369573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238d9190614cfd565b6123f75760405162461bcd60e51b815260206004820152603560248201527f4d61726b6574706c616365206e6f7420617070726f76656420746f2068616e646044820152743632903a3434b9903ab9b2b939903a37b5b2b7399760591b6064820152608401610d71565b6001600160a01b0383166000818152600d6020908152604080832086845282528083208151608081018352868152428185018181528285018a815260608401888152855460018082018855968a52988890209451600490990290940197885590519387019390935591516002860155516003909401805460ff191694151594909417909355519182528392859290917fda2d7fa13c443a4ce51bb68b8ce92f41fac2c10d9d5bdb6a9e9a91429020b7c391016121d6565b6001546001600160a01b03163314806124d657503360009081526012602052604090205460ff165b6124f25760405162461bcd60e51b8152600401610d7190614e1b565b6001600160a01b0382166000908152600c602052604090205460ff16151581151514156125315760405162461bcd60e51b8152600401610d7190614ee7565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6002600054141561257f5760405162461bcd60e51b8152600401610d7190614ca9565b60026000556040516331a9108f60e11b8152600481018390526001600160a01b03841690636352211e9060240160206040518083038186803b1580156125c457600080fd5b505afa1580156125d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125fc9190614ce0565b6001600160a01b0316336001600160a01b0316141561265d5760405162461bcd60e51b815260206004820152601c60248201527f43616e206e6f7420626964206f6e20796f7572206f776e204e46542e000000006044820152606401610d71565b806126a55760405162461bcd60e51b815260206004820152601860248201527721b0b73737ba103134b2103090383934b1b29037b310181760411b6044820152606401610d71565b8034101561271b5760405162461bcd60e51b815260206004820152603860248201527f54686520627579657220646964206e6f742073656e6420656e6f756768206d6f60448201527f6e657920666f7220616e20657363726f776564206269642e00000000000000006064820152608401610d71565b346006600082825461272d9190614c37565b90915550503360009081526010602052604081208054349290612751908490614c37565b90915550506001600160a01b038381166000818152600e602090815260408083208784528252808320815160a0810183528781524281850181815282850187815233606080860182815260016080880181815289548083018b55998d529b8b902097516003909902909701978855935187870155915160029096018054935199516001600160a81b0319909416961515610100600160a81b0319169690961761010099909b16989098029990991760ff60a81b1916600160a81b911515919091021790925582519485529284015282015283928592917fc04359f39c9f4a2c55808f46b81414842c7568aa3f1a7c9160c70dbf32d79a88910160405180910390a45050600160005550565b6001546001600160a01b031633146128865760405162461bcd60e51b8152600401610d7190614c4f565b600b5460ff600160a01b90910416151581151514156128b75760405162461bcd60e51b8152600401610d7190614ee7565b600b8054911515600160a01b0260ff60a01b19909216919091179055565b600260005414156128f85760405162461bcd60e51b8152600401610d7190614ca9565b6002600090815561290985856134dd565b905060005b8154811015612c69578215612ac4578382828154811061293057612930614dca565b90600052602060002090600302016000015414801561298a5750336001600160a01b031682828154811061296657612966614dca565b600091825260209091206003909102016002015461010090046001600160a01b0316145b80156129c357508181815481106129a3576129a3614dca565b906000526020600020906003020160020160159054906101000a900460ff165b80156129f557508181815481106129dc576129dc614dca565b600091825260209091206002600390920201015460ff16155b15612abf576001600160a01b0386166000908152600e602090815260408083208884529091529020805482908110612a2f57612a2f614dca565b600091825260208220600390910201818155600181019190915560020180546001600160b01b0319169055612a6433856143dc565b6040805133815284151560208201524291810191909152849086906001600160a01b038916907fd2c5c6bf17cda2bc1b6c61b2de68b0738dc35ca17f4cdbecd6192cf49a741f88906060015b60405180910390a45050612cb2565b612c57565b83828281548110612ad757612ad7614dca565b906000526020600020906003020160000154148015612b315750336001600160a01b0316828281548110612b0d57612b0d614dca565b600091825260209091206003909102016002015461010090046001600160a01b0316145b8015612b6b5750818181548110612b4a57612b4a614dca565b906000526020600020906003020160020160159054906101000a900460ff16155b8015612b9d5750818181548110612b8457612b84614dca565b600091825260209091206002600390920201015460ff16155b15612c57576001600160a01b0386166000908152600e602090815260408083208884529091529020805482908110612bd757612bd7614dca565b600091825260208083206003929092029091018281556001810192909255600290910180546001600160b01b031916905560408051338152851515928101929092524290820152849086906001600160a01b038916907fd2c5c6bf17cda2bc1b6c61b2de68b0738dc35ca17f4cdbecd6192cf49a741f8890606001612ab0565b80612c6181614f1e565b91505061290e565b5060405162461bcd60e51b815260206004820152601b60248201527f4e6f2063616e63656c6c61626c65206f6666657220666f756e642e00000000006044820152606401610d71565b505060016000555050565b6001546001600160a01b03163314612ce75760405162461bcd60e51b8152600401610d7190614c4f565b6064811115612d085760405162461bcd60e51b8152600401610d7190614c84565b600455565b6001546001600160a01b03163314612d375760405162461bcd60e51b8152600401610d7190614c4f565b6064811115612d585760405162461bcd60e51b8152600401610d7190614c84565b600355565b6001546001600160a01b03163314612d875760405162461bcd60e51b8152600401610d7190614c4f565b600b8054911515600160c81b0260ff60c81b19909216919091179055565b6001546001600160a01b03163314612dcf5760405162461bcd60e51b8152600401610d7190614c4f565b816001600160a01b031663a9059cbb612df06001546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b158015612e3857600080fd5b505af1158015612e4c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ae9190614cfd565b6001546001600160a01b03163314612e9a5760405162461bcd60e51b8152600401610d7190614c4f565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b0316331480612ee457503360009081526012602052604090205460ff165b612f005760405162461bcd60e51b8152600401610d7190614e1b565b6001600160a01b039182166000908152600f6020526040902080546001600160a01b03191691909216179055565b6001546001600160a01b03163314612f585760405162461bcd60e51b8152600401610d7190614c4f565b600b5460ff600160a81b9091041615158115151415612f895760405162461bcd60e51b8152600401610d7190614ee7565b600b8054911515600160a81b0260ff60a81b19909216919091179055565b6001600160a01b0382166000908152600d6020908152604080832084845290915281205480612fda576000915050610d41565b6001600160a01b0384166000908152600d602090815260408083208684529091529020613008600183614db3565b8154811061301857613018614dca565b60009182526020909120600490910201541515949350505050565b6001546001600160a01b0316331461305d5760405162461bcd60e51b8152600401610d7190614c4f565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314806130a757503360009081526012602052604090205460ff165b6130c35760405162461bcd60e51b8152600401610d7190614e1b565b6001600160a01b0382166000908152600d60209081526040808320848452909152812061154a916147aa565b60006130fb8383613103565b519392505050565b61313060405180608001604052806000815260200160008152602001600081526020016000151581525090565b6001600160a01b0383166000908152600d60209081526040808320858452909152902054806131a15760405162461bcd60e51b815260206004820152601b60248201527f4e6f206c697374696e677320666f72207468697320746f6b656e2e00000000006044820152606401610d71565b6001600160a01b0384166000908152600d6020908152604080832086845290915290206131cf600183614db3565b815481106131df576131df614dca565b60009182526020918290206040805160808101825260049093029091018054835260018101549383019390935260028301549082015260039091015460ff161515606082015291505092915050565b6001546001600160a01b031633146132585760405162461bcd60e51b8152600401610d7190614c4f565b60648111156132795760405162461bcd60e51b8152600401610d7190614c84565b600555565b6001600160a01b0382166000908152600e602090815260408083208484528252808320805482518185028101850190935280835260609492939192909184015b82821015610d3a5760008481526020908190206040805160a08101825260038602909201805483526001808201548486015260029091015460ff8082161515938501939093526001600160a01b036101008204166060850152600160a81b90049091161515608083015290835290920191016132be565b6001546001600160a01b0316331461335f5760405162461bcd60e51b8152600401610d7190614c4f565b6001600160a01b0381166133c45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d71565b6133cd816144eb565b50565b6040516331a9108f60e11b8152600481018290526001600160a01b03831690636352211e9060240160206040518083038186803b15801561341057600080fd5b505afa158015613424573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134489190614ce0565b6001600160a01b0316336001600160a01b0316148061347657503360009081526012602052604090205460ff165b6134d35760405162461bcd60e51b815260206004820152602860248201527f4f6e6c7920746865206f776e6572206f66206120746f6b656e2063616e2064656044820152673634b9ba1034ba1760c11b6064820152608401610d71565b61154a8282614321565b6001600160a01b03919091166000908152600e602090815260408083209383529290522090565b6001600160a01b0381166000908152601060205260409020548311156135805760405162461bcd60e51b815260206004820152602b60248201527f427579657220646f6573206e6f74206861766520656e6f756768206d6f6e657960448201526a1034b71032b9b1b937bb9760a91b6064820152608401610d71565b8260065410156135d25760405162461bcd60e51b815260206004820152601760248201527f457363726f772062616c616e636520746f6f206c6f772e0000000000000000006044820152606401610d71565b6001600160a01b038216316000808080806135ed8b8a61453d565b6001600160a01b038c1660009081526010602052604081208054969b5094995092975090955093508b92613622908490614db3565b92505081905550886006600082825461363b9190614db3565b9091555050604051632142170760e11b81526001600160a01b038d16906342842e0e90613670908b908b908f90600401614df7565b600060405180830381600087803b15801561368a57600080fd5b505af115801561369e573d6000803e3d6000fd5b50506040516001600160a01b038b16925083156108fc02915083906000818181858888f193505050501580156136d8573d6000803e3d6000fd5b506136e38187614c37565b886001600160a01b031631101561370c5760405162461bcd60e51b8152600401610d7190614e8d565b6040516331a9108f60e11b8152600481018b90526001600160a01b0380891691908e1690636352211e9060240160206040518083038186803b15801561375157600080fd5b505afa158015613765573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137899190614ce0565b6001600160a01b0316146137af5760405162461bcd60e51b8152600401610d7190614e48565b604080516001600160a01b038d81168252602082018d90528b92818b1692918c16917fe84a930f9e56d6b1a9a6619750ca0a3827c08b1634164de2ca9b49798890486f910160405180910390a4600b54600160b01b900460ff161561398657600b54600160a81b900460ff161561388c57600a54613836906001600160a01b031685614642565b600b5461384c906001600160a01b031684614642565b6001600160a01b03808c166000908152600f6020526040902054613871911683614642565b600954613887906001600160a01b031686614642565b613986565b6001600160a01b03808c166000908152600f602052604080822054905192169184156108fc0291859190818181858888f193505050501580156138d3573d6000803e3d6000fd5b506009546040516001600160a01b039091169086156108fc029087906000818181858888f1935050505015801561390e573d6000803e3d6000fd5b50600a546040516001600160a01b039091169085156108fc029086906000818181858888f19350505050158015613949573d6000803e3d6000fd5b50600b546040516001600160a01b039091169084156108fc029085906000818181858888f19350505050158015613984573d6000803e3d6000fd5b505b505050505050505050505050565b6008546040516370a0823160e01b81523360048201526001600160a01b0390911690849082906370a082319060240160206040518083038186803b1580156139db57600080fd5b505afa1580156139ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a139190614ece565b1015613a775760405162461bcd60e51b815260206004820152602d60248201527f427579657220646f6573206e6f74206861766520656e6f756768206d6f6e657960448201526c103a3790383ab931b430b9b29760991b6064820152608401610d71565b604051636eb1769f60e11b81526001600160a01b03838116600483015230602483015285919083169063dd62ed3e9060440160206040518083038186803b158015613ac157600080fd5b505afa158015613ad5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613af99190614ece565b1015613b5f5760405162461bcd60e51b815260206004820152602f60248201527f4d61726b6574706c616365206e6f7420617070726f76656420746f207370656e60448201526e3210313abcb2b9103a37b5b2b7399760891b6064820152608401610d71565b6000806000806000613b718b8a61453d565b945094509450945094508b6001600160a01b03166342842e0e89898d6040518463ffffffff1660e01b8152600401613bab93929190614df7565b600060405180830381600087803b158015613bc557600080fd5b505af1158015613bd9573d6000803e3d6000fd5b50506040516323b872dd60e01b81526001600160a01b03891692506323b872dd9150613c0d908a908c908690600401614df7565b602060405180830381600087803b158015613c2757600080fd5b505af1158015613c3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c5f9190614cfd565b506040516370a0823160e01b81526001600160a01b0389811660048301528291908816906370a082319060240160206040518083038186803b158015613ca457600080fd5b505afa158015613cb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cdc9190614ece565b1015613cfa5760405162461bcd60e51b8152600401610d7190614e8d565b6040516331a9108f60e11b8152600481018b90526001600160a01b0380891691908e1690636352211e9060240160206040518083038186803b158015613d3f57600080fd5b505afa158015613d53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d779190614ce0565b6001600160a01b031614613d9d5760405162461bcd60e51b8152600401610d7190614e48565b604080516001600160a01b038d81168252602082018d90528b92818b1692918c16917fe84a930f9e56d6b1a9a6619750ca0a3827c08b1634164de2ca9b49798890486f910160405180910390a4600b54600160b01b900460ff1615613986576001600160a01b038b81166000908152600f6020526040908190205490516323b872dd60e01b8152828916926323b872dd92613e4392309291909116908790600401614df7565b602060405180830381600087803b158015613e5d57600080fd5b505af1158015613e71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e959190614cfd565b506009546040516323b872dd60e01b81526001600160a01b03808916926323b872dd92613eca92309216908a90600401614df7565b602060405180830381600087803b158015613ee457600080fd5b505af1158015613ef8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f1c9190614cfd565b50600a546040516323b872dd60e01b81526001600160a01b03808916926323b872dd92613f5192309216908990600401614df7565b602060405180830381600087803b158015613f6b57600080fd5b505af1158015613f7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fa39190614cfd565b50600b546040516323b872dd60e01b81526001600160a01b03808916926323b872dd92613fd892309216908890600401614df7565b602060405180830381600087803b158015613ff257600080fd5b505af1158015614006573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139849190614cfd565b6040805160a0810182528254815260018084015460208084019190915260028501546001600160a01b03610100820481166060860152600160a81b90910460ff1615156080850152838501929092529087166000908152600e8252838120878252909152919091208054829190859081106140a7576140a7614dca565b6000918252602091829020835160039092020190815590820151600182015560408201516002909101805460608401516080909401511515600160a81b0260ff60a81b196001600160a01b0390951661010002610100600160a81b0319941515949094166001600160a81b03199092169190911792909217929092161790555050505050565b600061413983836134dd565b805490915060009061414d90600190614db3565b90505b81818154811061416257614162614dca565b600091825260209091206002600390920201015460ff161580156141ba575081818154811061419357614193614dca565b906000526020600020906003020160020160159054906101000a900460ff16151560011515145b1561430f576142228282815481106141d4576141d4614dca565b906000526020600020906003020160020160019054906101000a90046001600160a01b031683838154811061420b5761420b614dca565b9060005260206000209060030201600001546143dc565b81818154811061423457614234614dca565b90600052602060002090600302016000015483856001600160a01b03167fd2c5c6bf17cda2bc1b6c61b2de68b0738dc35ca17f4cdbecd6192cf49a741f8885858154811061428457614284614dca565b906000526020600020906003020160020160019054906101000a90046001600160a01b03168686815481106142bb576142bb614dca565b906000526020600020906003020160020160159054906101000a900460ff1642604051614306939291906001600160a01b039390931683529015156020830152604082015260600190565b60405180910390a45b8061431981614de0565b915050614150565b6001600160a01b0382166000818152600d60209081526040808320858452825280832081516080810183528481524281850181815282850189815260608401888152855460018082018855968a52988890209451600490990290940197885590519387019390935591516002860155516003909401805460ff191694151594909417909355519182528392917f1a99fed16d0c92a9f028b3f166d0aab2b85f7b731686df5d1b75d0171f450764910160405180910390a35050565b8060065410156143fe5760405162461bcd60e51b8152600401610d7190614f39565b6001600160a01b0382166000908152601060205260409020548111156144365760405162461bcd60e51b8152600401610d7190614f39565b80600660008282546144489190614db3565b90915550506001600160a01b03821660009081526010602052604081208054839290614475908490614db3565b90915550506040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156144b0573d6000803e3d6000fd5b5060405181906001600160a01b038416907fbf1a0ef092ef679427b427c6a95d51133522541e667b737b795a77f2b61c240d90600090a35050565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000908152601160205260408120548190819081908190819015614583576001600160a01b038816600090815260116020526040902054614587565b6005545b905060006103e86002548961459c9190614f96565b6145a69190614fb5565b905060006103e86003548a6145bb9190614f96565b6145c59190614fb5565b905060006103e86004548b6145da9190614f96565b6145e49190614fb5565b905060006103e86145f5868d614f96565b6145ff9190614fb5565b90506000818361460f8688614c37565b6146199190614c37565b6146239190614c37565b61462d908d614db3565b949d939c50919a509850919650945050505050565b6000826001600160a01b031660075483604051600060405180830381858888f193505050503d8060008114614693576040519150601f19603f3d011682016040523d82523d6000602084013e614698565b606091505b50509050806115ae5760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610d71565b60006146e88383613103565b600160608201526001600160a01b0384166000908152600d60209081526040808320868452909152902054909150819080156147a3576001600160a01b0385166000908152600d602090815260408083208784529091529020829061474e600184614db3565b8154811061475e5761475e614dca565b6000918252602091829020835160049290920201908155908201516001820155604082015160028201556060909101516003909101805460ff19169115159190911790555b5050505050565b50805460008255600402906000526020600020908101906133cd91905b808211156147f457600080825560018201819055600282015560038101805460ff191690556004016147c7565b5090565b808211156147f457600080825560018201556002810180546001600160b01b03191690556003016147f8565b6001600160a01b03811681146133cd57600080fd5b634e487b7160e01b600052604160045260246000fd5b6000806000806080858703121561486557600080fd5b843561487081614824565b9350602085013561488081614824565b925060408501359150606085013567ffffffffffffffff808211156148a457600080fd5b818701915087601f8301126148b857600080fd5b8135818111156148ca576148ca614839565b604051601f8201601f19908116603f011681019083821181831017156148f2576148f2614839565b816040528281528a602084870101111561490b57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561494257600080fd5b823561494d81614824565b946020939093013593505050565b6020808252825182820181905260009190848201906040850190845b818110156149c0576149ad8385518051825260208101516020830152604081015160408301526060810151151560608301525050565b9284019260809290920191600101614977565b50909695505050505050565b6000602082840312156149de57600080fd5b5035919050565b80151581146133cd57600080fd5b600080600080600060a08688031215614a0b57600080fd5b8535614a1681614824565b945060208601359350604086013592506060860135614a3481614824565b91506080860135614a44816149e5565b809150509295509295909350565b600060208284031215614a6457600080fd5b8135614a6f816149e5565b9392505050565b600060208284031215614a8857600080fd5b8135614a6f81614824565b60008060408385031215614aa657600080fd5b8235614ab181614824565b91506020830135614ac1816149e5565b809150509250929050565b600080600060608486031215614ae157600080fd5b8335614aec81614824565b95602085013595506040909401359392505050565b60008060008060808587031215614b1757600080fd5b8435614b2281614824565b935060208501359250604085013591506060850135614b40816149e5565b939692955090935050565b60008060408385031215614b5e57600080fd5b8235614b6981614824565b91506020830135614ac181614824565b81518152602080830151908201526040808301519082015260608083015115159082015260808101610d41565b602080825282518282018190526000919060409081850190868401855b82811015614c14578151805185528681015187860152858101511515868601526060808201516001600160a01b03169086015260809081015115159085015260a09093019290850190600101614bc3565b5091979650505050505050565b634e487b7160e01b600052601160045260246000fd5b60008219821115614c4a57614c4a614c21565b500190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600b908201526a4d6178203130252066656560a81b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b600060208284031215614cf257600080fd5b8151614a6f81614824565b600060208284031215614d0f57600080fd5b8151614a6f816149e5565b6020808252602e908201527f4d61726b6574706c616365206e6f7420617070726f76656420746f207472616e60408201526d39b332b9103a3434b99027232a1760911b606082015260800190565b6020808252602b908201527f54726164696e6720666f72207468697320636f6c6c656374696f6e206973206e60408201526a37ba1032b730b13632b21760a91b606082015260800190565b600082821015614dc557614dc5614c21565b500390565b634e487b7160e01b600052603260045260246000fd5b600081614def57614def614c21565b506000190190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6020808252601390820152722737ba1037bbb732b91037b91030b236b4b71760691b604082015260600190565b60208082526025908201527f4e465420776173206e6f74207375636365737366756c6c79207472616e736665604082015264393932b21760d91b606082015260800190565b60208082526021908201527f46756e64732077657265206e6f74207375636365737366756c6c792073656e746040820152601760f91b606082015260800190565b600060208284031215614ee057600080fd5b5051919050565b6020808252601a908201527f416c72656164792073657420746f20746861742076616c75652e000000000000604082015260600190565b6000600019821415614f3257614f32614c21565b5060010190565b6020808252603c908201527f4e6f7420656e6f7567682066756e647320746f2072657475726e20657363726f60408201527f772e205468656f7265746963616c6c7920696d706f737369626c652e00000000606082015260800190565b6000816000190483118215151615614fb057614fb0614c21565b500290565b600082614fd257634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220a1c07316d001d5fe5173934daca2fc180d7bb81b91be355a83aaa14c4f76e14364736f6c63430008090033
Deployed Bytecode
0x6080604052600436106103dd5760003560e01c806382ff441c116101fd578063cd653ee611610118578063dfd3da7e116100ab578063e9a7720b1161007a578063e9a7720b14610bc2578063ea98a95014610be3578063f2fde38b14610c10578063feb8840614610c30578063ff09343614610c5057600080fd5b8063dfd3da7e14610b33578063e0777a1414610b54578063e48e447314610b81578063e4c8be8c14610ba257600080fd5b8063d3810e24116100e7578063d3810e2414610abc578063d77fb11e14610ad2578063db8c96c714610af2578063dd3cfd3214610b1257600080fd5b8063cd653ee614610a45578063cdb3cd2514610a66578063d0d41fe114610a86578063d1ffa71a14610aa657600080fd5b806395483e8111610190578063b3a4f97b1161015f578063b3a4f97b146109af578063b966373a146109e5578063cbde640514610a05578063ccd6837114610a2557600080fd5b806395483e811461092f578063ab78f3691461094f578063b26a09f71461096f578063b29a81401461098f57600080fd5b80638da5cb5b116101cc5780638da5cb5b146108bb5780638f70ccf7146108d95780639011f8fe146108f9578063943816361461090f57600080fd5b806382ff441c1461084f578063846f45a0146105b957806389394ef51461086f5780638a6169ae1461088257600080fd5b80634fbcd584116102f85780636a326ab11161028b57806376dda5051161025a57806376dda505146107bc5780637b25b94a146107dc5780637de3bd07146107ef5780637e07590d1461080f57806382bfefc81461082f57600080fd5b80636a326ab11461072e5780636b872a961461074e578063715018a61461076e578063745b69ca1461078357600080fd5b80635c827858116102c75780635c827858146106b8578063675ef65c146106d85780636827e764146106f85780636a139d7a1461070e57600080fd5b80634fbcd5841461063757806353e23e2e1461065757806357ccdcf814610678578063599b0a401461069857600080fd5b80632a7b4bff116103705780633fd9d6ff1161033f5780633fd9d6ff146105b95780634a5c213c146105ef5780634ad6a3a2146105f75780634b0bddd21461061757600080fd5b80632a7b4bff146105105780632eb81fdf146105415780633319a00d146105615780633ad10ef61461058157600080fd5b806320184b11116103ac57806320184b11146104a4578063273499f0146104c45780632855ffe2146104e457806329bdfd94146104fa57600080fd5b806313114a9d146103e9578063150b7a021461041157806317c66b8c146104555780631c75b6b21461048257600080fd5b366103e457005b600080fd5b3480156103f557600080fd5b506103fe610c70565b6040519081526020015b60405180910390f35b34801561041d57600080fd5b5061043c61042c36600461484f565b630a85bd0160e11b949350505050565b6040516001600160e01b03199091168152602001610408565b34801561046157600080fd5b5061047561047036600461492f565b610ca1565b604051610408919061495b565b34801561048e57600080fd5b506104a261049d3660046149cc565b610d47565b005b3480156104b057600080fd5b506104a26104bf36600461492f565b610da0565b3480156104d057600080fd5b506104a26104df3660046149f3565b610e4c565b3480156104f057600080fd5b506103fe60035481565b34801561050657600080fd5b506103fe60075481565b34801561051c57600080fd5b50600b5461053190600160b81b900460ff1681565b6040519015158152602001610408565b34801561054d57600080fd5b506104a261055c366004614a52565b6112c2565b34801561056d57600080fd5b506104a261057c36600461492f565b61130a565b34801561058d57600080fd5b506009546105a1906001600160a01b031681565b6040516001600160a01b039091168152602001610408565b3480156105c557600080fd5b506103fe6105d4366004614a76565b6001600160a01b031660009081526010602052604090205490565b6104a26113ab565b34801561060357600080fd5b506104a26106123660046149cc565b611478565b34801561062357600080fd5b506104a2610632366004614a93565b6114a7565b34801561064357600080fd5b506104a261065236600461492f565b6114fc565b34801561066357600080fd5b50600b5461053190600160a01b900460ff1681565b34801561068457600080fd5b506104a261069336600461492f565b61154e565b3480156106a457600080fd5b506104a26106b3366004614a52565b6115b3565b3480156106c457600080fd5b50600b546105a1906001600160a01b031681565b3480156106e457600080fd5b506104a26106f3366004614a52565b6115fb565b34801561070457600080fd5b506103fe60025481565b34801561071a57600080fd5b506104a2610729366004614a76565b611643565b34801561073a57600080fd5b506104a2610749366004614a76565b61168f565b34801561075a57600080fd5b506104a26107693660046149cc565b6116db565b34801561077a57600080fd5b506104a2611783565b34801561078f57600080fd5b506105a161079e366004614a76565b6001600160a01b039081166000908152600f60205260409020541690565b3480156107c857600080fd5b506104a26107d7366004614a52565b6117b9565b6104a26107ea36600461492f565b611801565b3480156107fb57600080fd5b506104a261080a366004614acc565b611e55565b34801561081b57600080fd5b506104a261082a366004614acc565b6121e3565b34801561083b57600080fd5b506008546105a1906001600160a01b031681565b34801561085b57600080fd5b506104a261086a366004614a93565b6124ae565b6104a261087d366004614acc565b61255c565b34801561088e57600080fd5b5061053161089d366004614a76565b6001600160a01b03166000908152600c602052604090205460ff1690565b3480156108c757600080fd5b506001546001600160a01b03166105a1565b3480156108e557600080fd5b506104a26108f4366004614a52565b61285c565b34801561090557600080fd5b506103fe60065481565b34801561091b57600080fd5b506104a261092a366004614b01565b6128d5565b34801561093b57600080fd5b506104a261094a3660046149cc565b612cbd565b34801561095b57600080fd5b506104a261096a3660046149cc565b612d0d565b34801561097b57600080fd5b506104a261098a366004614a52565b612d5d565b34801561099b57600080fd5b506104a26109aa36600461492f565b612da5565b3480156109bb57600080fd5b506103fe6109ca366004614a76565b6001600160a01b031660009081526011602052604090205490565b3480156109f157600080fd5b506104a2610a00366004614a76565b612e70565b348015610a1157600080fd5b506104a2610a20366004614b4b565b612ebc565b348015610a3157600080fd5b506104a2610a40366004614a52565b612f2e565b348015610a5157600080fd5b50600b5461053190600160b01b900460ff1681565b348015610a7257600080fd5b50610531610a8136600461492f565b612fa7565b348015610a9257600080fd5b506104a2610aa1366004614a76565b613033565b348015610ab257600080fd5b506103fe60045481565b348015610ac857600080fd5b506103fe60055481565b348015610ade57600080fd5b506104a2610aed36600461492f565b61307f565b348015610afe57600080fd5b506103fe610b0d36600461492f565b6130ef565b348015610b1e57600080fd5b50600b5461053190600160d01b900460ff1681565b348015610b3f57600080fd5b50600b5461053190600160a81b900460ff1681565b348015610b6057600080fd5b50610b74610b6f36600461492f565b613103565b6040516104089190614b79565b348015610b8d57600080fd5b50600b5461053190600160c81b900460ff1681565b348015610bae57600080fd5b506104a2610bbd3660046149cc565b61322e565b348015610bce57600080fd5b50600b5461053190600160c01b900460ff1681565b348015610bef57600080fd5b50610c03610bfe36600461492f565b61327e565b6040516104089190614ba6565b348015610c1c57600080fd5b506104a2610c2b366004614a76565b613335565b348015610c3c57600080fd5b506104a2610c4b36600461492f565b6133d0565b348015610c5c57600080fd5b50600a546105a1906001600160a01b031681565b6000600554600454600354600254610c889190614c37565b610c929190614c37565b610c9c9190614c37565b905090565b6001600160a01b0382166000908152600d602090815260408083208484528252808320805482518185028101850190935280835260609492939192909184015b82821015610d3a576000848152602090819020604080516080810182526004860290920180548352600180820154848601526002820154928401929092526003015460ff16151560608301529083529092019101610ce1565b5050505090505b92915050565b6001546001600160a01b03163314610d7a5760405162461bcd60e51b8152600401610d7190614c4f565b60405180910390fd5b6064811115610d9b5760405162461bcd60e51b8152600401610d7190614c84565b600255565b600b54600090600160d01b900460ff168015610dd557506001600160a01b038381166000908152600f60205260409020541633145b9050610de96001546001600160a01b031690565b6001600160a01b0316336001600160a01b03161480610e055750805b610e0e57600080fd5b6064821115610e2f5760405162461bcd60e51b8152600401610d7190614c84565b506001600160a01b03909116600090815260116020526040902055565b60026000541415610e6f5760405162461bcd60e51b8152600401610d7190614ca9565b60026000556040516331a9108f60e11b81526004810185905285906001600160a01b03821690636352211e9060240160206040518083038186803b158015610eb657600080fd5b505afa158015610eca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eee9190614ce0565b6001600160a01b0316336001600160a01b031614610f665760405162461bcd60e51b815260206004820152602f60248201527f4f6e6c7920746865206f776e6572206f662074686973204e46542063616e206160448201526e31b1b2b83a1030b71037b33332b91760891b6064820152608401610d71565b60405163e985e9c560e01b81523360048201523060248201526001600160a01b0382169063e985e9c59060440160206040518083038186803b158015610fab57600080fd5b505afa158015610fbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe39190614cfd565b610fff5760405162461bcd60e51b8152600401610d7190614d1a565b600b54600160a01b900460ff16156110595760405162461bcd60e51b815260206004820181905260248201527f4d61726b6574706c6163652074726164696e672069732064697361626c65642e6044820152606401610d71565b6001600160a01b0386166000908152600c602052604090205460ff166110915760405162461bcd60e51b8152600401610d7190614d68565b600061109d87876134dd565b8054909150670de0b6b3a763ffff906000906110bb90600190614db3565b90505b868382815481106110d1576110d1614dca565b90600052602060002090600302016000015414801561112b5750856001600160a01b031683828154811061110757611107614dca565b600091825260209091206003909102016002015461010090046001600160a01b0316145b801561115d575082818154811061114457611144614dca565b600091825260209091206002600390920201015460ff16155b801561119c575084151583828154811061117957611179614dca565b906000526020600020906003020160020160159054906101000a900460ff161515145b156111a9578091506111bb565b806111b381614de0565b9150506110be565b5080670de0b6b3a763ffff14156112145760405162461bcd60e51b815260206004820152601b60248201527f4d61746368696e67206f66666572206e6f7420666f756e642e2e2e00000000006044820152606401610d71565b3385851561122f5761122a858b8b8b8686613504565b61123d565b61123d858b8b8b8686613994565b6112688a8a8587878154811061125557611255614dca565b906000526020600020906003020161402a565b600b54600160c01b900460ff1615611284576112848a8a61412d565b600b54600160b81b900460ff1680156112a257506112a28a8a612fa7565b156112b1576112b18a8a614321565b505060016000555050505050505050565b6001546001600160a01b031633146112ec5760405162461bcd60e51b8152600401610d7190614c4f565b600b8054911515600160c01b0260ff60c01b19909216919091179055565b6001546001600160a01b031633146113345760405162461bcd60e51b8152600401610d7190614c4f565b816001600160a01b03166323b872dd306113566001546001600160a01b031690565b846040518463ffffffff1660e01b815260040161137593929190614df7565b600060405180830381600087803b15801561138f57600080fd5b505af11580156113a3573d6000803e3d6000fd5b505050505050565b600260005414156113ce5760405162461bcd60e51b8152600401610d7190614ca9565b6002600055662386f26fc100003410156114365760405162461bcd60e51b8152602060048201526024808201527f4d696e696d756d20657363726f77206465706f73697420697320302e3031204d60448201526327ab291760e11b6064820152608401610d71565b34600660008282546114489190614c37565b9091555050336000908152601060205260408120805434929061146c908490614c37565b90915550506001600055565b6001546001600160a01b031633146114a25760405162461bcd60e51b8152600401610d7190614c4f565b600755565b6001546001600160a01b031633146114d15760405162461bcd60e51b8152600401610d7190614c4f565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6001546001600160a01b031633148061152457503360009081526012602052604090205460ff165b6115405760405162461bcd60e51b8152600401610d7190614e1b565b61154a828261412d565b5050565b6001546001600160a01b031633146115785760405162461bcd60e51b8152600401610d7190614c4f565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156115ae573d6000803e3d6000fd5b505050565b6001546001600160a01b031633146115dd5760405162461bcd60e51b8152600401610d7190614c4f565b600b8054911515600160d01b0260ff60d01b19909216919091179055565b6001546001600160a01b031633146116255760405162461bcd60e51b8152600401610d7190614c4f565b600b8054911515600160b01b0260ff60b01b19909216919091179055565b6001546001600160a01b0316331461166d5760405162461bcd60e51b8152600401610d7190614c4f565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146116b95760405162461bcd60e51b8152600401610d7190614c4f565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600260005414156116fe5760405162461bcd60e51b8152600401610d7190614ca9565b60026000908155338152601060205260409020548111156117715760405162461bcd60e51b815260206004820152602760248201527f547279696e6720746f207769746864726177206d6f7265207468616e2064657060448201526637b9b4ba32b21760c91b6064820152608401610d71565b61177b33826143dc565b506001600055565b6001546001600160a01b031633146117ad5760405162461bcd60e51b8152600401610d7190614c4f565b6117b760006144eb565b565b6001546001600160a01b031633146117e35760405162461bcd60e51b8152600401610d7190614c4f565b600b8054911515600160b81b0260ff60b81b19909216919091179055565b600260005414156118245760405162461bcd60e51b8152600401610d7190614ca9565b6002600055600b54600160a01b900460ff16156118835760405162461bcd60e51b815260206004820181905260248201527f4d61726b6574706c6163652074726164696e672069732064697361626c65642e6044820152606401610d71565b6001600160a01b0382166000908152600c602052604090205460ff166118bb5760405162461bcd60e51b8152600401610d7190614d68565b60006118c783836130ef565b9050803410156119305760405162461bcd60e51b815260206004820152602e60248201527f54686520616d6f756e742073656e74206973206c657373207468616e2074686560448201526d1030b9b5b4b73390383934b1b29760911b6064820152608401610d71565b806119895760405162461bcd60e51b815260206004820152602360248201527f5468697320746f6b656e206973206e6f742063757272656e746c79206c69737460448201526232b21760e91b6064820152608401610d71565b6040516331a9108f60e11b8152600481018390526000906001600160a01b03851690636352211e9060240160206040518083038186803b1580156119cc57600080fd5b505afa1580156119e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a049190614ce0565b60405163e985e9c560e01b81526001600160a01b0380831660048301523060248301529192509085169063e985e9c59060440160206040518083038186803b158015611a4f57600080fd5b505afa158015611a63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a879190614cfd565b611aa35760405162461bcd60e51b8152600401610d7190614d1a565b33600080808080611ab48a8961453d565b945094509450945094506000876001600160a01b03163190508a6001600160a01b03166342842e0e89898d6040518463ffffffff1660e01b8152600401611afd93929190614df7565b600060405180830381600087803b158015611b1757600080fd5b505af1158015611b2b573d6000803e3d6000fd5b50506040516001600160a01b038b16925084156108fc02915084906000818181858888f19350505050158015611b65573d6000803e3d6000fd5b506040516331a9108f60e11b8152600481018b90526001600160a01b0380891691908d1690636352211e9060240160206040518083038186803b158015611bab57600080fd5b505afa158015611bbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be39190614ce0565b6001600160a01b031614611c095760405162461bcd60e51b8152600401610d7190614e48565b611c138282614c37565b886001600160a01b0316311015611c3c5760405162461bcd60e51b8152600401610d7190614e8d565b604080516001600160a01b038d81168252602082018d90528b92818b1692918c16917fe84a930f9e56d6b1a9a6619750ca0a3827c08b1634164de2ca9b49798890486f910160405180910390a4600b54600160b01b900460ff1615611e1357600b54600160a81b900460ff1615611d1957600a54611cc3906001600160a01b031686614642565b600b54611cd9906001600160a01b031685614642565b6001600160a01b03808c166000908152600f6020526040902054611cfe911684614642565b600954611d14906001600160a01b031687614642565b611e13565b6001600160a01b03808c166000908152600f602052604080822054905192169185156108fc0291869190818181858888f19350505050158015611d60573d6000803e3d6000fd5b506009546040516001600160a01b039091169087156108fc029088906000818181858888f19350505050158015611d9b573d6000803e3d6000fd5b50600a546040516001600160a01b039091169086156108fc029087906000818181858888f19350505050158015611dd6573d6000803e3d6000fd5b50600b546040516001600160a01b039091169085156108fc029086906000818181858888f19350505050158015611e11573d6000803e3d6000fd5b505b611e1d8b8b6146dc565b600b54600160c81b900460ff1615611e3957611e398b8b61412d565b611e438b8b614321565b50506001600055505050505050505050565b6040516331a9108f60e11b8152600481018390526001600160a01b03841690636352211e9060240160206040518083038186803b158015611e9557600080fd5b505afa158015611ea9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ecd9190614ce0565b6001600160a01b0316336001600160a01b03161415611f2e5760405162461bcd60e51b815260206004820152601c60248201527f43616e206e6f7420626964206f6e20796f7572206f776e204e46542e000000006044820152606401610d71565b80611f765760405162461bcd60e51b815260206004820152601860248201527721b0b73737ba103134b2103090383934b1b29037b310181760411b6044820152606401610d71565b3331811115611fe55760405162461bcd60e51b815260206004820152603560248201527f54686520627579657220646f6573206e6f74206861766520656e6f756768206d60448201527437b732bc903a379036b0b5b2903a3432903134b21760591b6064820152608401610d71565b600854604051636eb1769f60e11b815233600482015230602482015282916001600160a01b03169063dd62ed3e9060440160206040518083038186803b15801561202e57600080fd5b505afa158015612042573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120669190614ece565b10156120da5760405162461bcd60e51b815260206004820152603860248201527f4e6f7420616e20657363726f776564206269643b20617070726f76616c20726560448201527f717569726564202844656661756c743a20574d4f5652292e00000000000000006064820152608401610d71565b6001600160a01b038381166000818152600e602090815260408083208784528252808320815160a08101835287815242818501818152828501878152336060808601828152608087018b8152885460018082018b55998d528b8d2098516003909102909801978855945197870197909755915160029095018054965193511515600160a81b0260ff60a81b1994909c1661010002610100600160a81b0319961515969096166001600160a81b03199097169690961794909417919091169890981790925582519081529283015281019190915283928592917fc04359f39c9f4a2c55808f46b81414842c7568aa3f1a7c9160c70dbf32d79a8891015b60405180910390a4505050565b6040516331a9108f60e11b8152600481018390526001600160a01b03841690636352211e9060240160206040518083038186803b15801561222357600080fd5b505afa158015612237573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225b9190614ce0565b6001600160a01b0316336001600160a01b0316146122ca5760405162461bcd60e51b815260206004820152602660248201527f4f6e6c7920746865206f776e6572206f66206120746f6b656e2063616e206c6960448201526539ba1034ba1760d11b6064820152608401610d71565b806123105760405162461bcd60e51b815260206004820152601660248201527521b0b73737ba1039b2ba10383934b1b2903a3790181760511b6044820152606401610d71565b60405163e985e9c560e01b81523360048201523060248201526001600160a01b0384169063e985e9c59060440160206040518083038186803b15801561235557600080fd5b505afa158015612369573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238d9190614cfd565b6123f75760405162461bcd60e51b815260206004820152603560248201527f4d61726b6574706c616365206e6f7420617070726f76656420746f2068616e646044820152743632903a3434b9903ab9b2b939903a37b5b2b7399760591b6064820152608401610d71565b6001600160a01b0383166000818152600d6020908152604080832086845282528083208151608081018352868152428185018181528285018a815260608401888152855460018082018855968a52988890209451600490990290940197885590519387019390935591516002860155516003909401805460ff191694151594909417909355519182528392859290917fda2d7fa13c443a4ce51bb68b8ce92f41fac2c10d9d5bdb6a9e9a91429020b7c391016121d6565b6001546001600160a01b03163314806124d657503360009081526012602052604090205460ff165b6124f25760405162461bcd60e51b8152600401610d7190614e1b565b6001600160a01b0382166000908152600c602052604090205460ff16151581151514156125315760405162461bcd60e51b8152600401610d7190614ee7565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6002600054141561257f5760405162461bcd60e51b8152600401610d7190614ca9565b60026000556040516331a9108f60e11b8152600481018390526001600160a01b03841690636352211e9060240160206040518083038186803b1580156125c457600080fd5b505afa1580156125d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125fc9190614ce0565b6001600160a01b0316336001600160a01b0316141561265d5760405162461bcd60e51b815260206004820152601c60248201527f43616e206e6f7420626964206f6e20796f7572206f776e204e46542e000000006044820152606401610d71565b806126a55760405162461bcd60e51b815260206004820152601860248201527721b0b73737ba103134b2103090383934b1b29037b310181760411b6044820152606401610d71565b8034101561271b5760405162461bcd60e51b815260206004820152603860248201527f54686520627579657220646964206e6f742073656e6420656e6f756768206d6f60448201527f6e657920666f7220616e20657363726f776564206269642e00000000000000006064820152608401610d71565b346006600082825461272d9190614c37565b90915550503360009081526010602052604081208054349290612751908490614c37565b90915550506001600160a01b038381166000818152600e602090815260408083208784528252808320815160a0810183528781524281850181815282850187815233606080860182815260016080880181815289548083018b55998d529b8b902097516003909902909701978855935187870155915160029096018054935199516001600160a81b0319909416961515610100600160a81b0319169690961761010099909b16989098029990991760ff60a81b1916600160a81b911515919091021790925582519485529284015282015283928592917fc04359f39c9f4a2c55808f46b81414842c7568aa3f1a7c9160c70dbf32d79a88910160405180910390a45050600160005550565b6001546001600160a01b031633146128865760405162461bcd60e51b8152600401610d7190614c4f565b600b5460ff600160a01b90910416151581151514156128b75760405162461bcd60e51b8152600401610d7190614ee7565b600b8054911515600160a01b0260ff60a01b19909216919091179055565b600260005414156128f85760405162461bcd60e51b8152600401610d7190614ca9565b6002600090815561290985856134dd565b905060005b8154811015612c69578215612ac4578382828154811061293057612930614dca565b90600052602060002090600302016000015414801561298a5750336001600160a01b031682828154811061296657612966614dca565b600091825260209091206003909102016002015461010090046001600160a01b0316145b80156129c357508181815481106129a3576129a3614dca565b906000526020600020906003020160020160159054906101000a900460ff165b80156129f557508181815481106129dc576129dc614dca565b600091825260209091206002600390920201015460ff16155b15612abf576001600160a01b0386166000908152600e602090815260408083208884529091529020805482908110612a2f57612a2f614dca565b600091825260208220600390910201818155600181019190915560020180546001600160b01b0319169055612a6433856143dc565b6040805133815284151560208201524291810191909152849086906001600160a01b038916907fd2c5c6bf17cda2bc1b6c61b2de68b0738dc35ca17f4cdbecd6192cf49a741f88906060015b60405180910390a45050612cb2565b612c57565b83828281548110612ad757612ad7614dca565b906000526020600020906003020160000154148015612b315750336001600160a01b0316828281548110612b0d57612b0d614dca565b600091825260209091206003909102016002015461010090046001600160a01b0316145b8015612b6b5750818181548110612b4a57612b4a614dca565b906000526020600020906003020160020160159054906101000a900460ff16155b8015612b9d5750818181548110612b8457612b84614dca565b600091825260209091206002600390920201015460ff16155b15612c57576001600160a01b0386166000908152600e602090815260408083208884529091529020805482908110612bd757612bd7614dca565b600091825260208083206003929092029091018281556001810192909255600290910180546001600160b01b031916905560408051338152851515928101929092524290820152849086906001600160a01b038916907fd2c5c6bf17cda2bc1b6c61b2de68b0738dc35ca17f4cdbecd6192cf49a741f8890606001612ab0565b80612c6181614f1e565b91505061290e565b5060405162461bcd60e51b815260206004820152601b60248201527f4e6f2063616e63656c6c61626c65206f6666657220666f756e642e00000000006044820152606401610d71565b505060016000555050565b6001546001600160a01b03163314612ce75760405162461bcd60e51b8152600401610d7190614c4f565b6064811115612d085760405162461bcd60e51b8152600401610d7190614c84565b600455565b6001546001600160a01b03163314612d375760405162461bcd60e51b8152600401610d7190614c4f565b6064811115612d585760405162461bcd60e51b8152600401610d7190614c84565b600355565b6001546001600160a01b03163314612d875760405162461bcd60e51b8152600401610d7190614c4f565b600b8054911515600160c81b0260ff60c81b19909216919091179055565b6001546001600160a01b03163314612dcf5760405162461bcd60e51b8152600401610d7190614c4f565b816001600160a01b031663a9059cbb612df06001546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b158015612e3857600080fd5b505af1158015612e4c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ae9190614cfd565b6001546001600160a01b03163314612e9a5760405162461bcd60e51b8152600401610d7190614c4f565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b0316331480612ee457503360009081526012602052604090205460ff165b612f005760405162461bcd60e51b8152600401610d7190614e1b565b6001600160a01b039182166000908152600f6020526040902080546001600160a01b03191691909216179055565b6001546001600160a01b03163314612f585760405162461bcd60e51b8152600401610d7190614c4f565b600b5460ff600160a81b9091041615158115151415612f895760405162461bcd60e51b8152600401610d7190614ee7565b600b8054911515600160a81b0260ff60a81b19909216919091179055565b6001600160a01b0382166000908152600d6020908152604080832084845290915281205480612fda576000915050610d41565b6001600160a01b0384166000908152600d602090815260408083208684529091529020613008600183614db3565b8154811061301857613018614dca565b60009182526020909120600490910201541515949350505050565b6001546001600160a01b0316331461305d5760405162461bcd60e51b8152600401610d7190614c4f565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314806130a757503360009081526012602052604090205460ff165b6130c35760405162461bcd60e51b8152600401610d7190614e1b565b6001600160a01b0382166000908152600d60209081526040808320848452909152812061154a916147aa565b60006130fb8383613103565b519392505050565b61313060405180608001604052806000815260200160008152602001600081526020016000151581525090565b6001600160a01b0383166000908152600d60209081526040808320858452909152902054806131a15760405162461bcd60e51b815260206004820152601b60248201527f4e6f206c697374696e677320666f72207468697320746f6b656e2e00000000006044820152606401610d71565b6001600160a01b0384166000908152600d6020908152604080832086845290915290206131cf600183614db3565b815481106131df576131df614dca565b60009182526020918290206040805160808101825260049093029091018054835260018101549383019390935260028301549082015260039091015460ff161515606082015291505092915050565b6001546001600160a01b031633146132585760405162461bcd60e51b8152600401610d7190614c4f565b60648111156132795760405162461bcd60e51b8152600401610d7190614c84565b600555565b6001600160a01b0382166000908152600e602090815260408083208484528252808320805482518185028101850190935280835260609492939192909184015b82821015610d3a5760008481526020908190206040805160a08101825260038602909201805483526001808201548486015260029091015460ff8082161515938501939093526001600160a01b036101008204166060850152600160a81b90049091161515608083015290835290920191016132be565b6001546001600160a01b0316331461335f5760405162461bcd60e51b8152600401610d7190614c4f565b6001600160a01b0381166133c45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d71565b6133cd816144eb565b50565b6040516331a9108f60e11b8152600481018290526001600160a01b03831690636352211e9060240160206040518083038186803b15801561341057600080fd5b505afa158015613424573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134489190614ce0565b6001600160a01b0316336001600160a01b0316148061347657503360009081526012602052604090205460ff165b6134d35760405162461bcd60e51b815260206004820152602860248201527f4f6e6c7920746865206f776e6572206f66206120746f6b656e2063616e2064656044820152673634b9ba1034ba1760c11b6064820152608401610d71565b61154a8282614321565b6001600160a01b03919091166000908152600e602090815260408083209383529290522090565b6001600160a01b0381166000908152601060205260409020548311156135805760405162461bcd60e51b815260206004820152602b60248201527f427579657220646f6573206e6f74206861766520656e6f756768206d6f6e657960448201526a1034b71032b9b1b937bb9760a91b6064820152608401610d71565b8260065410156135d25760405162461bcd60e51b815260206004820152601760248201527f457363726f772062616c616e636520746f6f206c6f772e0000000000000000006044820152606401610d71565b6001600160a01b038216316000808080806135ed8b8a61453d565b6001600160a01b038c1660009081526010602052604081208054969b5094995092975090955093508b92613622908490614db3565b92505081905550886006600082825461363b9190614db3565b9091555050604051632142170760e11b81526001600160a01b038d16906342842e0e90613670908b908b908f90600401614df7565b600060405180830381600087803b15801561368a57600080fd5b505af115801561369e573d6000803e3d6000fd5b50506040516001600160a01b038b16925083156108fc02915083906000818181858888f193505050501580156136d8573d6000803e3d6000fd5b506136e38187614c37565b886001600160a01b031631101561370c5760405162461bcd60e51b8152600401610d7190614e8d565b6040516331a9108f60e11b8152600481018b90526001600160a01b0380891691908e1690636352211e9060240160206040518083038186803b15801561375157600080fd5b505afa158015613765573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137899190614ce0565b6001600160a01b0316146137af5760405162461bcd60e51b8152600401610d7190614e48565b604080516001600160a01b038d81168252602082018d90528b92818b1692918c16917fe84a930f9e56d6b1a9a6619750ca0a3827c08b1634164de2ca9b49798890486f910160405180910390a4600b54600160b01b900460ff161561398657600b54600160a81b900460ff161561388c57600a54613836906001600160a01b031685614642565b600b5461384c906001600160a01b031684614642565b6001600160a01b03808c166000908152600f6020526040902054613871911683614642565b600954613887906001600160a01b031686614642565b613986565b6001600160a01b03808c166000908152600f602052604080822054905192169184156108fc0291859190818181858888f193505050501580156138d3573d6000803e3d6000fd5b506009546040516001600160a01b039091169086156108fc029087906000818181858888f1935050505015801561390e573d6000803e3d6000fd5b50600a546040516001600160a01b039091169085156108fc029086906000818181858888f19350505050158015613949573d6000803e3d6000fd5b50600b546040516001600160a01b039091169084156108fc029085906000818181858888f19350505050158015613984573d6000803e3d6000fd5b505b505050505050505050505050565b6008546040516370a0823160e01b81523360048201526001600160a01b0390911690849082906370a082319060240160206040518083038186803b1580156139db57600080fd5b505afa1580156139ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a139190614ece565b1015613a775760405162461bcd60e51b815260206004820152602d60248201527f427579657220646f6573206e6f74206861766520656e6f756768206d6f6e657960448201526c103a3790383ab931b430b9b29760991b6064820152608401610d71565b604051636eb1769f60e11b81526001600160a01b03838116600483015230602483015285919083169063dd62ed3e9060440160206040518083038186803b158015613ac157600080fd5b505afa158015613ad5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613af99190614ece565b1015613b5f5760405162461bcd60e51b815260206004820152602f60248201527f4d61726b6574706c616365206e6f7420617070726f76656420746f207370656e60448201526e3210313abcb2b9103a37b5b2b7399760891b6064820152608401610d71565b6000806000806000613b718b8a61453d565b945094509450945094508b6001600160a01b03166342842e0e89898d6040518463ffffffff1660e01b8152600401613bab93929190614df7565b600060405180830381600087803b158015613bc557600080fd5b505af1158015613bd9573d6000803e3d6000fd5b50506040516323b872dd60e01b81526001600160a01b03891692506323b872dd9150613c0d908a908c908690600401614df7565b602060405180830381600087803b158015613c2757600080fd5b505af1158015613c3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c5f9190614cfd565b506040516370a0823160e01b81526001600160a01b0389811660048301528291908816906370a082319060240160206040518083038186803b158015613ca457600080fd5b505afa158015613cb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cdc9190614ece565b1015613cfa5760405162461bcd60e51b8152600401610d7190614e8d565b6040516331a9108f60e11b8152600481018b90526001600160a01b0380891691908e1690636352211e9060240160206040518083038186803b158015613d3f57600080fd5b505afa158015613d53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d779190614ce0565b6001600160a01b031614613d9d5760405162461bcd60e51b8152600401610d7190614e48565b604080516001600160a01b038d81168252602082018d90528b92818b1692918c16917fe84a930f9e56d6b1a9a6619750ca0a3827c08b1634164de2ca9b49798890486f910160405180910390a4600b54600160b01b900460ff1615613986576001600160a01b038b81166000908152600f6020526040908190205490516323b872dd60e01b8152828916926323b872dd92613e4392309291909116908790600401614df7565b602060405180830381600087803b158015613e5d57600080fd5b505af1158015613e71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e959190614cfd565b506009546040516323b872dd60e01b81526001600160a01b03808916926323b872dd92613eca92309216908a90600401614df7565b602060405180830381600087803b158015613ee457600080fd5b505af1158015613ef8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f1c9190614cfd565b50600a546040516323b872dd60e01b81526001600160a01b03808916926323b872dd92613f5192309216908990600401614df7565b602060405180830381600087803b158015613f6b57600080fd5b505af1158015613f7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fa39190614cfd565b50600b546040516323b872dd60e01b81526001600160a01b03808916926323b872dd92613fd892309216908890600401614df7565b602060405180830381600087803b158015613ff257600080fd5b505af1158015614006573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139849190614cfd565b6040805160a0810182528254815260018084015460208084019190915260028501546001600160a01b03610100820481166060860152600160a81b90910460ff1615156080850152838501929092529087166000908152600e8252838120878252909152919091208054829190859081106140a7576140a7614dca565b6000918252602091829020835160039092020190815590820151600182015560408201516002909101805460608401516080909401511515600160a81b0260ff60a81b196001600160a01b0390951661010002610100600160a81b0319941515949094166001600160a81b03199092169190911792909217929092161790555050505050565b600061413983836134dd565b805490915060009061414d90600190614db3565b90505b81818154811061416257614162614dca565b600091825260209091206002600390920201015460ff161580156141ba575081818154811061419357614193614dca565b906000526020600020906003020160020160159054906101000a900460ff16151560011515145b1561430f576142228282815481106141d4576141d4614dca565b906000526020600020906003020160020160019054906101000a90046001600160a01b031683838154811061420b5761420b614dca565b9060005260206000209060030201600001546143dc565b81818154811061423457614234614dca565b90600052602060002090600302016000015483856001600160a01b03167fd2c5c6bf17cda2bc1b6c61b2de68b0738dc35ca17f4cdbecd6192cf49a741f8885858154811061428457614284614dca565b906000526020600020906003020160020160019054906101000a90046001600160a01b03168686815481106142bb576142bb614dca565b906000526020600020906003020160020160159054906101000a900460ff1642604051614306939291906001600160a01b039390931683529015156020830152604082015260600190565b60405180910390a45b8061431981614de0565b915050614150565b6001600160a01b0382166000818152600d60209081526040808320858452825280832081516080810183528481524281850181815282850189815260608401888152855460018082018855968a52988890209451600490990290940197885590519387019390935591516002860155516003909401805460ff191694151594909417909355519182528392917f1a99fed16d0c92a9f028b3f166d0aab2b85f7b731686df5d1b75d0171f450764910160405180910390a35050565b8060065410156143fe5760405162461bcd60e51b8152600401610d7190614f39565b6001600160a01b0382166000908152601060205260409020548111156144365760405162461bcd60e51b8152600401610d7190614f39565b80600660008282546144489190614db3565b90915550506001600160a01b03821660009081526010602052604081208054839290614475908490614db3565b90915550506040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156144b0573d6000803e3d6000fd5b5060405181906001600160a01b038416907fbf1a0ef092ef679427b427c6a95d51133522541e667b737b795a77f2b61c240d90600090a35050565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000908152601160205260408120548190819081908190819015614583576001600160a01b038816600090815260116020526040902054614587565b6005545b905060006103e86002548961459c9190614f96565b6145a69190614fb5565b905060006103e86003548a6145bb9190614f96565b6145c59190614fb5565b905060006103e86004548b6145da9190614f96565b6145e49190614fb5565b905060006103e86145f5868d614f96565b6145ff9190614fb5565b90506000818361460f8688614c37565b6146199190614c37565b6146239190614c37565b61462d908d614db3565b949d939c50919a509850919650945050505050565b6000826001600160a01b031660075483604051600060405180830381858888f193505050503d8060008114614693576040519150601f19603f3d011682016040523d82523d6000602084013e614698565b606091505b50509050806115ae5760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610d71565b60006146e88383613103565b600160608201526001600160a01b0384166000908152600d60209081526040808320868452909152902054909150819080156147a3576001600160a01b0385166000908152600d602090815260408083208784529091529020829061474e600184614db3565b8154811061475e5761475e614dca565b6000918252602091829020835160049290920201908155908201516001820155604082015160028201556060909101516003909101805460ff19169115159190911790555b5050505050565b50805460008255600402906000526020600020908101906133cd91905b808211156147f457600080825560018201819055600282015560038101805460ff191690556004016147c7565b5090565b808211156147f457600080825560018201556002810180546001600160b01b03191690556003016147f8565b6001600160a01b03811681146133cd57600080fd5b634e487b7160e01b600052604160045260246000fd5b6000806000806080858703121561486557600080fd5b843561487081614824565b9350602085013561488081614824565b925060408501359150606085013567ffffffffffffffff808211156148a457600080fd5b818701915087601f8301126148b857600080fd5b8135818111156148ca576148ca614839565b604051601f8201601f19908116603f011681019083821181831017156148f2576148f2614839565b816040528281528a602084870101111561490b57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561494257600080fd5b823561494d81614824565b946020939093013593505050565b6020808252825182820181905260009190848201906040850190845b818110156149c0576149ad8385518051825260208101516020830152604081015160408301526060810151151560608301525050565b9284019260809290920191600101614977565b50909695505050505050565b6000602082840312156149de57600080fd5b5035919050565b80151581146133cd57600080fd5b600080600080600060a08688031215614a0b57600080fd5b8535614a1681614824565b945060208601359350604086013592506060860135614a3481614824565b91506080860135614a44816149e5565b809150509295509295909350565b600060208284031215614a6457600080fd5b8135614a6f816149e5565b9392505050565b600060208284031215614a8857600080fd5b8135614a6f81614824565b60008060408385031215614aa657600080fd5b8235614ab181614824565b91506020830135614ac1816149e5565b809150509250929050565b600080600060608486031215614ae157600080fd5b8335614aec81614824565b95602085013595506040909401359392505050565b60008060008060808587031215614b1757600080fd5b8435614b2281614824565b935060208501359250604085013591506060850135614b40816149e5565b939692955090935050565b60008060408385031215614b5e57600080fd5b8235614b6981614824565b91506020830135614ac181614824565b81518152602080830151908201526040808301519082015260608083015115159082015260808101610d41565b602080825282518282018190526000919060409081850190868401855b82811015614c14578151805185528681015187860152858101511515868601526060808201516001600160a01b03169086015260809081015115159085015260a09093019290850190600101614bc3565b5091979650505050505050565b634e487b7160e01b600052601160045260246000fd5b60008219821115614c4a57614c4a614c21565b500190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600b908201526a4d6178203130252066656560a81b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b600060208284031215614cf257600080fd5b8151614a6f81614824565b600060208284031215614d0f57600080fd5b8151614a6f816149e5565b6020808252602e908201527f4d61726b6574706c616365206e6f7420617070726f76656420746f207472616e60408201526d39b332b9103a3434b99027232a1760911b606082015260800190565b6020808252602b908201527f54726164696e6720666f72207468697320636f6c6c656374696f6e206973206e60408201526a37ba1032b730b13632b21760a91b606082015260800190565b600082821015614dc557614dc5614c21565b500390565b634e487b7160e01b600052603260045260246000fd5b600081614def57614def614c21565b506000190190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6020808252601390820152722737ba1037bbb732b91037b91030b236b4b71760691b604082015260600190565b60208082526025908201527f4e465420776173206e6f74207375636365737366756c6c79207472616e736665604082015264393932b21760d91b606082015260800190565b60208082526021908201527f46756e64732077657265206e6f74207375636365737366756c6c792073656e746040820152601760f91b606082015260800190565b600060208284031215614ee057600080fd5b5051919050565b6020808252601a908201527f416c72656164792073657420746f20746861742076616c75652e000000000000604082015260600190565b6000600019821415614f3257614f32614c21565b5060010190565b6020808252603c908201527f4e6f7420656e6f7567682066756e647320746f2072657475726e20657363726f60408201527f772e205468656f7265746963616c6c7920696d706f737369626c652e00000000606082015260800190565b6000816000190483118215151615614fb057614fb0614c21565b500290565b600082614fd257634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220a1c07316d001d5fe5173934daca2fc180d7bb81b91be355a83aaa14c4f76e14364736f6c63430008090033
Loading...
Loading
Loading...
Loading
OVERVIEW
Moonbeans is the tastiest multi-chain NFT platform, featuring customizable experiences and automated rewards. This contract handles most trades.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.