Address Details
contract
0xe2e7BaB350B294d9AB65542dd7274A9Ba5311Fb0
- Contract Name
- AuctionSPU
- Creator
- 0x1cc0fa–12a071 at 0xee8c12–87cab5
- Balance
- 0 CELO ( )
- Locked CELO Balance
- 0.00 CELO
- Voting CELO Balance
- 0.00 CELO
- Pending Unlocked Gold
- 0.00 CELO
- Tokens
-
Fetching tokens...
- Transactions
- 20 Transactions
- Transfers
- 14 Transfers
- Gas Used
- 965,051
- Last Balance Update
- 15015242
Transactions
Token Transfers
Internal Transactions
Coin Balance History
Logs
Code
Read Contract
Write Contract
This contract has been verified via Sourcify.
View contract in Sourcify repository
- Contract name:
- AuctionSPU
- Optimization enabled
- true
- Compiler version
- v0.8.17+commit.8df45f5f
- Optimization runs
- 200
- EVM Version
- london
- Verified at
- 2023-02-05T19:57:35.857130Z
Contracts/AuctionSPU.sol
// SPDX-License-Identifier: MIT pragma solidity ^0.8.17; /* Creatd by : Gustavo Henrique Email : gustavo@useinsignia.com This auction is created to perform a NFT sell, correspondig to a government property. This code is a small part of an entire project. Any questions could be redirect to my email */ // TODO /* 1 - Criar NFT teste (+30min) ok 2 - Inserir documentação (IPFS) Leilão (+45min) 3 - Criar mintador de leilão (+2hr) 4 - Criar mintador de NFT (+1hr) ok 5 - Criar contrato de documentação (+1Dia) 6 - Criar mintador de documentação (+2hr) */ /* ERC-721 interface to acess usable functions as safeTransferFrom */ interface IERC721 { function safeTransferFrom(address from, address to, uint tokenId) external; function transferFrom(address, address, uint) external; } /* Auction contract */ contract AuctionSPU { /* Events for external reading */ event StartAuction(); event Bid(address indexed sender, uint amount); event Withdraw(address indexed bidder, uint amount); event EndAuction(address winner, uint amount); event PauseAuction(address pauser); event UnpauseAuction(address pauser); event Cashback(address indexed bidder, uint amount); event SetWhitelistByAddress(address indexed account, bool enable); event FeePayment(address indexed feeAddress ,uint totalFee); event BidPayment(address indexed seller , uint highestBid); /* ERC-721 Variables */ IERC721 public nft; uint public nftId; /* Auction parameters */ address payable public seller; address payable public feeAddress; uint public endAt; bool public started; bool public ended; bool public paused; uint public numberOfBids; uint private transactionFee; uint public constant FEE_BASE = 10000; uint public totalFee; /* Bids parameters */ address public highestBidder; uint public highestBid; struct Bidders { uint totalValue; uint portion; uint clientScore; uint downpay; } mapping(address => Bidders) public receivedBids; mapping(address => bool) private _whitelist; /* Constructor _nft -> Address of the nft _nftID -> If the nft is part of a collection, default value 0 _startingBid -> The start value of the auction _period -> Duration of the auction , timestampvalue seller -> Address of the seller, by default SPU */ constructor( address _nft, address _feeAddres, uint _nftId, uint _startingBid, uint _period, uint _transactionFee ) { nft = IERC721(_nft); nftId = _nftId; seller = payable(msg.sender); feeAddress = payable(_feeAddres); highestBid = _startingBid; endAt = _period; //timestamp transactionFee = _transactionFee; // 10 -> 0.1% } modifier onlyOwner() { require(msg.sender == seller, "Sender is not owner"); _; } modifier auctionPaused() { require(!paused, "Auction Paused"); _; } modifier auctionStarted() { require(started, "Not Started Yet"); _; } // Function to receive Ether. msg.data must be empty receive() external payable onlyOwner{} // Fallback function is called when msg.data is not empty fallback() external payable onlyOwner{} function getBalance() public view returns (uint) { return address(this).balance; } /* Start the auction */ function startAuction() external onlyOwner { require(!started, "Already Started"); nft.transferFrom(msg.sender, address(this), nftId); started = true; emit StartAuction(); } /* End the auction */ function endAuction() external onlyOwner auctionStarted { require(block.timestamp >= endAt, "Not Ended"); require(!ended, "Already Ended"); ended = true; emit EndAuction(highestBidder, highestBid); } /* Pause the auction */ function pauseAuction() external onlyOwner { require(!paused, "Already Paused"); paused = true; emit PauseAuction(msg.sender); } /* Unpause the auction */ function unpauseAuction() external onlyOwner { require(paused, "Already Running"); paused = false; emit UnpauseAuction(msg.sender); } /* Method to receive bids */ // bid -> _realvalue usar esse valor // descontar taxa é do msg.value // cashback // Adicionar whitelist pra bid function newBid( uint _totalValue, uint _portion, uint _clientScore ) external payable auctionStarted auctionPaused { require(block.timestamp < endAt, "Already ended"); require(msg.sender != seller, "Seller not allowed"); require(_isWhitelist(msg.sender), "Permission denied"); uint fee = ( msg.value / FEE_BASE) * transactionFee; totalFee += fee; require(msg.value - fee > highestBid, "Lower Bid"); cashback(highestBidder, receivedBids[highestBidder].downpay); if (receivedBids[msg.sender].totalValue != 0) { receivedBids[msg.sender].totalValue = _totalValue; receivedBids[msg.sender].downpay = msg.value - fee; receivedBids[msg.sender].portion = _portion; receivedBids[msg.sender].clientScore = _clientScore; } else { Bidders memory b; b.downpay = msg.value - fee; b.totalValue = _totalValue; b.portion = _portion; b.clientScore = _clientScore; receivedBids[msg.sender] = b; } highestBidder = msg.sender; highestBid = msg.value - fee; numberOfBids += 1; emit Bid(msg.sender, msg.value - fee); } function withdraw() external { require(!(msg.sender == highestBidder), "Your Bid is the higher"); require(receivedBids[msg.sender].downpay != 0, "No bids founded"); cashback(msg.sender, receivedBids[msg.sender].downpay); receivedBids[msg.sender].downpay = 0; receivedBids[msg.sender].totalValue = 0; receivedBids[msg.sender].portion = 0; receivedBids[msg.sender].clientScore = 0; emit Withdraw(msg.sender, receivedBids[msg.sender].downpay); } function cashback(address _receiver, uint _amount) internal{ (bool callSuccess, ) = payable(_receiver).call{value: _amount}(""); require(callSuccess, "Return funds failed"); receivedBids[msg.sender].downpay = 0; receivedBids[msg.sender].totalValue = 0; receivedBids[msg.sender].portion = 0; receivedBids[msg.sender].clientScore = 0; emit Cashback(_receiver, _amount); } function closeAuction () external onlyOwner{ require(block.timestamp >= endAt, "Not Ended"); if (highestBidder != address(0)) { nft.safeTransferFrom(address(this), highestBidder, nftId); (bool callSuccessFee, ) = payable(feeAddress).call{value: totalFee}(""); require(callSuccessFee, "Return fee funds failed"); emit FeePayment(feeAddress , totalFee); (bool callSuccess, ) = payable(seller).call{value: highestBid}(""); require(callSuccess, "Return funds failed"); emit BidPayment(seller , highestBid); } else { nft.safeTransferFrom(address(this), seller, nftId); (bool callSuccessFee, ) = payable(feeAddress).call{value: totalFee}(""); require(callSuccessFee, "Return fee funds failed"); emit FeePayment(feeAddress , totalFee); (bool callSuccess, ) = payable(seller).call{value: highestBid}(""); require(callSuccess, "Return funds failed"); emit BidPayment(seller , highestBid); } } function setWhitelist(address _account, bool enable) external onlyOwner{ _whitelist[_account] = enable; emit SetWhitelistByAddress(_account, enable); } function _isWhitelist(address _account) private view returns (bool) { return _whitelist[_account]; } function isWhitelist(address _account) public view returns (bool) { return _isWhitelist(_account); } }
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"_nft","internalType":"address"},{"type":"address","name":"_feeAddres","internalType":"address"},{"type":"uint256","name":"_nftId","internalType":"uint256"},{"type":"uint256","name":"_startingBid","internalType":"uint256"},{"type":"uint256","name":"_period","internalType":"uint256"},{"type":"uint256","name":"_transactionFee","internalType":"uint256"}]},{"type":"event","name":"Bid","inputs":[{"type":"address","name":"sender","internalType":"address","indexed":true},{"type":"uint256","name":"amount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"BidPayment","inputs":[{"type":"address","name":"seller","internalType":"address","indexed":true},{"type":"uint256","name":"highestBid","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Cashback","inputs":[{"type":"address","name":"bidder","internalType":"address","indexed":true},{"type":"uint256","name":"amount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"EndAuction","inputs":[{"type":"address","name":"winner","internalType":"address","indexed":false},{"type":"uint256","name":"amount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"FeePayment","inputs":[{"type":"address","name":"feeAddress","internalType":"address","indexed":true},{"type":"uint256","name":"totalFee","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"PauseAuction","inputs":[{"type":"address","name":"pauser","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"SetWhitelistByAddress","inputs":[{"type":"address","name":"account","internalType":"address","indexed":true},{"type":"bool","name":"enable","internalType":"bool","indexed":false}],"anonymous":false},{"type":"event","name":"StartAuction","inputs":[],"anonymous":false},{"type":"event","name":"UnpauseAuction","inputs":[{"type":"address","name":"pauser","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"Withdraw","inputs":[{"type":"address","name":"bidder","internalType":"address","indexed":true},{"type":"uint256","name":"amount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"fallback","stateMutability":"payable"},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"FEE_BASE","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"closeAuction","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"endAt","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"endAuction","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"ended","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address payable"}],"name":"feeAddress","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getBalance","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"highestBid","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"highestBidder","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isWhitelist","inputs":[{"type":"address","name":"_account","internalType":"address"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"newBid","inputs":[{"type":"uint256","name":"_totalValue","internalType":"uint256"},{"type":"uint256","name":"_portion","internalType":"uint256"},{"type":"uint256","name":"_clientScore","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IERC721"}],"name":"nft","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"nftId","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"numberOfBids","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"pauseAuction","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"paused","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"totalValue","internalType":"uint256"},{"type":"uint256","name":"portion","internalType":"uint256"},{"type":"uint256","name":"clientScore","internalType":"uint256"},{"type":"uint256","name":"downpay","internalType":"uint256"}],"name":"receivedBids","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address payable"}],"name":"seller","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setWhitelist","inputs":[{"type":"address","name":"_account","internalType":"address"},{"type":"bool","name":"enable","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"startAuction","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"started","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalFee","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"unpauseAuction","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"withdraw","inputs":[]},{"type":"receive","stateMutability":"payable"}]
Contract Creation Code
0x608060405234801561001057600080fd5b5060405161140338038061140383398101604081905261002f9161009b565b600080546001600160a01b03199081166001600160a01b03988916179091556001949094556002805433908616179055600380549094169490951693909317909155600a556004556007556100f3565b80516001600160a01b038116811461009657600080fd5b919050565b60008060008060008060c087890312156100b457600080fd5b6100bd8761007f565b95506100cb6020880161007f565b945060408701519350606087015192506080870151915060a087015190509295509295509295565b611301806101026000396000f3fe60806040526004361061014f5760003560e01c80636b64c769116100b6578063c6bc51821161006f578063c6bc51821461040e578063ceb1641914610424578063d57bde7914610439578063db15c4371461044f578063ecefc70514610462578063fe67a54b1461047857610189565b80636b64c7691461032c5780637cc3ae8c1461034157806391f901571461035757806395ecc5cc14610377578063b9ae7364146103d9578063c683630d146103ee57610189565b8063378252f211610108578063378252f2146102825780633ccfd60b1461029757806341275358146102ac57806347ccca02146102cc57806353d6fd59146102ec5780635c975abb1461030c57610189565b806308551a53146101b357806312065fe0146101f057806312fa6feb1461020d57806317d531fc1461023c5780631df4ccfc146102525780631f2698ab1461026857610189565b36610189576002546001600160a01b031633146101875760405162461bcd60e51b815260040161017e90611183565b60405180910390fd5b005b6002546001600160a01b031633146101875760405162461bcd60e51b815260040161017e90611183565b3480156101bf57600080fd5b506002546101d3906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101fc57600080fd5b50475b6040519081526020016101e7565b34801561021957600080fd5b5060055461022c90610100900460ff1681565b60405190151581526020016101e7565b34801561024857600080fd5b506101ff60065481565b34801561025e57600080fd5b506101ff60085481565b34801561027457600080fd5b5060055461022c9060ff1681565b34801561028e57600080fd5b5061018761048d565b3480156102a357600080fd5b5061018761078e565b3480156102b857600080fd5b506003546101d3906001600160a01b031681565b3480156102d857600080fd5b506000546101d3906001600160a01b031681565b3480156102f857600080fd5b506101876103073660046111cc565b6108ab565b34801561031857600080fd5b5060055461022c9062010000900460ff1681565b34801561033857600080fd5b5061018761092d565b34801561034d57600080fd5b506101ff60045481565b34801561036357600080fd5b506009546101d3906001600160a01b031681565b34801561038357600080fd5b506103b9610392366004611208565b600b6020526000908152604090208054600182015460028301546003909301549192909184565b6040805194855260208501939093529183015260608201526080016101e7565b3480156103e557600080fd5b50610187610a42565b3480156103fa57600080fd5b5061022c610409366004611208565b610afd565b34801561041a57600080fd5b506101ff60015481565b34801561043057600080fd5b50610187610b20565b34801561044557600080fd5b506101ff600a5481565b61018761045d36600461122a565b610bd0565b34801561046e57600080fd5b506101ff61271081565b34801561048457600080fd5b50610187610f30565b6002546001600160a01b031633146104b75760405162461bcd60e51b815260040161017e90611183565b6004544210156104f55760405162461bcd60e51b8152602060048201526009602482015268139bdd08115b99195960ba1b604482015260640161017e565b6009546001600160a01b03161561074957600054600954600154604051632142170760e11b81523060048201526001600160a01b03928316602482015260448101919091529116906342842e0e906064015b600060405180830381600087803b15801561056157600080fd5b505af1158015610575573d6000803e3d6000fd5b5050600354600854604051600094506001600160a01b039092169250908381818185875af1925050503d80600081146105ca576040519150601f19603f3d011682016040523d82523d6000602084013e6105cf565b606091505b50509050806106205760405162461bcd60e51b815260206004820152601760248201527f52657475726e206665652066756e6473206661696c6564000000000000000000604482015260640161017e565b6003546008546040519081526001600160a01b03909116907e57d762ad8f1734de771f2b521b2668347c0cee2d709a12254662cd5a7d41809060200160405180910390a2600254600a546040516000926001600160a01b031691908381818185875af1925050503d80600081146106b3576040519150601f19603f3d011682016040523d82523d6000602084013e6106b8565b606091505b50509050806106ff5760405162461bcd60e51b815260206004820152601360248201527214995d1d5c9b88199d5b991cc819985a5b1959606a1b604482015260640161017e565b600254600a546040519081526001600160a01b03909116907f1c1b1a7e52e22e996a7b9c93efbf98eeb6171f5ecaa8f5c1c792427b53d29e84906020015b60405180910390a25050565b600054600254600154604051632142170760e11b81523060048201526001600160a01b03928316602482015260448101919091529116906342842e0e90606401610547565b6009546001600160a01b031633036107e15760405162461bcd60e51b81526020600482015260166024820152752cb7bab9102134b21034b9903a3432903434b3b432b960511b604482015260640161017e565b336000908152600b602052604081206003015490036108345760405162461bcd60e51b815260206004820152600f60248201526e139bc8189a591cc8199bdd5b991959608a1b604482015260640161017e565b336000818152600b6020526040902060030154610851919061107a565b336000818152600b602090815260408083206003810184905583815560018101849055600201839055519182527f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364910160405180910390a2565b6002546001600160a01b031633146108d55760405162461bcd60e51b815260040161017e90611183565b6001600160a01b0382166000818152600c6020908152604091829020805460ff191685151590811790915591519182527fc2c8beffdf047b9e6c79b0e9dcd0bd71d174d84f52e013102fcc0e200dd58ee0910161073d565b6002546001600160a01b031633146109575760405162461bcd60e51b815260040161017e90611183565b60055460ff161561099c5760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e4814dd185c9d1959608a1b604482015260640161017e565b6000546001546040516323b872dd60e01b815233600482015230602482015260448101919091526001600160a01b03909116906323b872dd90606401600060405180830381600087803b1580156109f257600080fd5b505af1158015610a06573d6000803e3d6000fd5b50506005805460ff1916600117905550506040517fd295ebf0a48a9a43d600a6ecb8626baa711d5750dec13a08145013aa30cb92ea90600090a1565b6002546001600160a01b03163314610a6c5760405162461bcd60e51b815260040161017e90611183565b60055462010000900460ff1615610ab65760405162461bcd60e51b815260206004820152600e60248201526d105b1c9958591e4814185d5cd95960921b604482015260640161017e565b6005805462ff00001916620100001790556040513381527fdee06086e53b718fd5176fdaa88a207819a06a56b42087ac2cab84d32a335654906020015b60405180910390a1565b6001600160a01b0381166000908152600c602052604081205460ff165b92915050565b6002546001600160a01b03163314610b4a5760405162461bcd60e51b815260040161017e90611183565b60055462010000900460ff16610b945760405162461bcd60e51b815260206004820152600f60248201526e416c72656164792052756e6e696e6760881b604482015260640161017e565b6005805462ff0000191690556040513381527fc1a02e947cf77134ed09ac0692636f0553306db51ffe4a1d9e7b51b4dcd9c76290602001610af3565b60055460ff16610c145760405162461bcd60e51b815260206004820152600f60248201526e139bdd0814dd185c9d19590816595d608a1b604482015260640161017e565b60055462010000900460ff1615610c5e5760405162461bcd60e51b815260206004820152600e60248201526d105d58dd1a5bdb8814185d5cd95960921b604482015260640161017e565b6004544210610c9f5760405162461bcd60e51b815260206004820152600d60248201526c105b1c9958591e48195b991959609a1b604482015260640161017e565b6002546001600160a01b03163303610cee5760405162461bcd60e51b815260206004820152601260248201527114d95b1b195c881b9bdd08185b1b1bddd95960721b604482015260640161017e565b336000908152600c602052604090205460ff16610d415760405162461bcd60e51b815260206004820152601160248201527014195c9b5a5cdcda5bdb8819195b9a5959607a1b604482015260640161017e565b600754600090610d536127103461126c565b610d5d919061128e565b90508060086000828254610d7191906112a5565b9091555050600a54610d8382346112b8565b11610dbc5760405162461bcd60e51b8152602060048201526009602482015268131bddd95c88109a5960ba1b604482015260640161017e565b6009546001600160a01b03166000818152600b6020526040902060030154610de4919061107a565b336000908152600b602052604090205415610e3e57336000908152600b60205260409020849055610e1581346112b8565b336000908152600b60205260409020600381019190915560018101849055600201829055610eb2565b610e696040518060800160405280600081526020016000815260200160008152602001600081525090565b610e7382346112b8565b6060820190815285825260208083018681526040808501878152336000908152600b909452922093518455516001840155516002830155516003909101555b600980546001600160a01b03191633179055610ece81346112b8565b600a81905550600160066000828254610ee791906112a5565b909155503390507fe684a55f31b79eca403df938249029212a5925ec6be8012e099b45bc1019e5d2610f1983346112b8565b60405190815260200160405180910390a250505050565b6002546001600160a01b03163314610f5a5760405162461bcd60e51b815260040161017e90611183565b60055460ff16610f9e5760405162461bcd60e51b815260206004820152600f60248201526e139bdd0814dd185c9d19590816595d608a1b604482015260640161017e565b600454421015610fdc5760405162461bcd60e51b8152602060048201526009602482015268139bdd08115b99195960ba1b604482015260640161017e565b600554610100900460ff16156110245760405162461bcd60e51b815260206004820152600d60248201526c105b1c9958591e48115b991959609a1b604482015260640161017e565b6005805461ff001916610100179055600954600a54604080516001600160a01b03909316835260208301919091527fca09734d1fc32150404dc9252b4d991c6bee44319031b7159c03d5ae2c0627049101610af3565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146110c7576040519150601f19603f3d011682016040523d82523d6000602084013e6110cc565b606091505b50509050806111135760405162461bcd60e51b815260206004820152601360248201527214995d1d5c9b88199d5b991cc819985a5b1959606a1b604482015260640161017e565b336000908152600b6020526040808220600381018390558281556001810183905560020191909155516001600160a01b038416907fe523757eee9c213543af9b06c96e0629da383d3149173f4a03ab96d8ff526760906111769085815260200190565b60405180910390a2505050565b60208082526013908201527229b2b73232b91034b9903737ba1037bbb732b960691b604082015260600190565b80356001600160a01b03811681146111c757600080fd5b919050565b600080604083850312156111df57600080fd5b6111e8836111b0565b9150602083013580151581146111fd57600080fd5b809150509250929050565b60006020828403121561121a57600080fd5b611223826111b0565b9392505050565b60008060006060848603121561123f57600080fd5b505081359360208301359350604090920135919050565b634e487b7160e01b600052601160045260246000fd5b60008261128957634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610b1a57610b1a611256565b80820180821115610b1a57610b1a611256565b81810381811115610b1a57610b1a61125656fea26469706673582212208e73c8d19f2b6884f3253be9fab1ceaff3f6d975611aae9ad376bb27ab732a2064736f6c63430008110033000000000000000000000000d0ee011a4dc554064d47b8b9cb389896e77f549f0000000000000000000000006adb4bf285b891518cc5ccca07992a768debea90000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000b1a2bc2ec50000000000000000000000000000000000000000000000000000000000006390e2b00000000000000000000000000000000000000000000000000000000000000064
Deployed ByteCode
0x60806040526004361061014f5760003560e01c80636b64c769116100b6578063c6bc51821161006f578063c6bc51821461040e578063ceb1641914610424578063d57bde7914610439578063db15c4371461044f578063ecefc70514610462578063fe67a54b1461047857610189565b80636b64c7691461032c5780637cc3ae8c1461034157806391f901571461035757806395ecc5cc14610377578063b9ae7364146103d9578063c683630d146103ee57610189565b8063378252f211610108578063378252f2146102825780633ccfd60b1461029757806341275358146102ac57806347ccca02146102cc57806353d6fd59146102ec5780635c975abb1461030c57610189565b806308551a53146101b357806312065fe0146101f057806312fa6feb1461020d57806317d531fc1461023c5780631df4ccfc146102525780631f2698ab1461026857610189565b36610189576002546001600160a01b031633146101875760405162461bcd60e51b815260040161017e90611183565b60405180910390fd5b005b6002546001600160a01b031633146101875760405162461bcd60e51b815260040161017e90611183565b3480156101bf57600080fd5b506002546101d3906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101fc57600080fd5b50475b6040519081526020016101e7565b34801561021957600080fd5b5060055461022c90610100900460ff1681565b60405190151581526020016101e7565b34801561024857600080fd5b506101ff60065481565b34801561025e57600080fd5b506101ff60085481565b34801561027457600080fd5b5060055461022c9060ff1681565b34801561028e57600080fd5b5061018761048d565b3480156102a357600080fd5b5061018761078e565b3480156102b857600080fd5b506003546101d3906001600160a01b031681565b3480156102d857600080fd5b506000546101d3906001600160a01b031681565b3480156102f857600080fd5b506101876103073660046111cc565b6108ab565b34801561031857600080fd5b5060055461022c9062010000900460ff1681565b34801561033857600080fd5b5061018761092d565b34801561034d57600080fd5b506101ff60045481565b34801561036357600080fd5b506009546101d3906001600160a01b031681565b34801561038357600080fd5b506103b9610392366004611208565b600b6020526000908152604090208054600182015460028301546003909301549192909184565b6040805194855260208501939093529183015260608201526080016101e7565b3480156103e557600080fd5b50610187610a42565b3480156103fa57600080fd5b5061022c610409366004611208565b610afd565b34801561041a57600080fd5b506101ff60015481565b34801561043057600080fd5b50610187610b20565b34801561044557600080fd5b506101ff600a5481565b61018761045d36600461122a565b610bd0565b34801561046e57600080fd5b506101ff61271081565b34801561048457600080fd5b50610187610f30565b6002546001600160a01b031633146104b75760405162461bcd60e51b815260040161017e90611183565b6004544210156104f55760405162461bcd60e51b8152602060048201526009602482015268139bdd08115b99195960ba1b604482015260640161017e565b6009546001600160a01b03161561074957600054600954600154604051632142170760e11b81523060048201526001600160a01b03928316602482015260448101919091529116906342842e0e906064015b600060405180830381600087803b15801561056157600080fd5b505af1158015610575573d6000803e3d6000fd5b5050600354600854604051600094506001600160a01b039092169250908381818185875af1925050503d80600081146105ca576040519150601f19603f3d011682016040523d82523d6000602084013e6105cf565b606091505b50509050806106205760405162461bcd60e51b815260206004820152601760248201527f52657475726e206665652066756e6473206661696c6564000000000000000000604482015260640161017e565b6003546008546040519081526001600160a01b03909116907e57d762ad8f1734de771f2b521b2668347c0cee2d709a12254662cd5a7d41809060200160405180910390a2600254600a546040516000926001600160a01b031691908381818185875af1925050503d80600081146106b3576040519150601f19603f3d011682016040523d82523d6000602084013e6106b8565b606091505b50509050806106ff5760405162461bcd60e51b815260206004820152601360248201527214995d1d5c9b88199d5b991cc819985a5b1959606a1b604482015260640161017e565b600254600a546040519081526001600160a01b03909116907f1c1b1a7e52e22e996a7b9c93efbf98eeb6171f5ecaa8f5c1c792427b53d29e84906020015b60405180910390a25050565b600054600254600154604051632142170760e11b81523060048201526001600160a01b03928316602482015260448101919091529116906342842e0e90606401610547565b6009546001600160a01b031633036107e15760405162461bcd60e51b81526020600482015260166024820152752cb7bab9102134b21034b9903a3432903434b3b432b960511b604482015260640161017e565b336000908152600b602052604081206003015490036108345760405162461bcd60e51b815260206004820152600f60248201526e139bc8189a591cc8199bdd5b991959608a1b604482015260640161017e565b336000818152600b6020526040902060030154610851919061107a565b336000818152600b602090815260408083206003810184905583815560018101849055600201839055519182527f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364910160405180910390a2565b6002546001600160a01b031633146108d55760405162461bcd60e51b815260040161017e90611183565b6001600160a01b0382166000818152600c6020908152604091829020805460ff191685151590811790915591519182527fc2c8beffdf047b9e6c79b0e9dcd0bd71d174d84f52e013102fcc0e200dd58ee0910161073d565b6002546001600160a01b031633146109575760405162461bcd60e51b815260040161017e90611183565b60055460ff161561099c5760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e4814dd185c9d1959608a1b604482015260640161017e565b6000546001546040516323b872dd60e01b815233600482015230602482015260448101919091526001600160a01b03909116906323b872dd90606401600060405180830381600087803b1580156109f257600080fd5b505af1158015610a06573d6000803e3d6000fd5b50506005805460ff1916600117905550506040517fd295ebf0a48a9a43d600a6ecb8626baa711d5750dec13a08145013aa30cb92ea90600090a1565b6002546001600160a01b03163314610a6c5760405162461bcd60e51b815260040161017e90611183565b60055462010000900460ff1615610ab65760405162461bcd60e51b815260206004820152600e60248201526d105b1c9958591e4814185d5cd95960921b604482015260640161017e565b6005805462ff00001916620100001790556040513381527fdee06086e53b718fd5176fdaa88a207819a06a56b42087ac2cab84d32a335654906020015b60405180910390a1565b6001600160a01b0381166000908152600c602052604081205460ff165b92915050565b6002546001600160a01b03163314610b4a5760405162461bcd60e51b815260040161017e90611183565b60055462010000900460ff16610b945760405162461bcd60e51b815260206004820152600f60248201526e416c72656164792052756e6e696e6760881b604482015260640161017e565b6005805462ff0000191690556040513381527fc1a02e947cf77134ed09ac0692636f0553306db51ffe4a1d9e7b51b4dcd9c76290602001610af3565b60055460ff16610c145760405162461bcd60e51b815260206004820152600f60248201526e139bdd0814dd185c9d19590816595d608a1b604482015260640161017e565b60055462010000900460ff1615610c5e5760405162461bcd60e51b815260206004820152600e60248201526d105d58dd1a5bdb8814185d5cd95960921b604482015260640161017e565b6004544210610c9f5760405162461bcd60e51b815260206004820152600d60248201526c105b1c9958591e48195b991959609a1b604482015260640161017e565b6002546001600160a01b03163303610cee5760405162461bcd60e51b815260206004820152601260248201527114d95b1b195c881b9bdd08185b1b1bddd95960721b604482015260640161017e565b336000908152600c602052604090205460ff16610d415760405162461bcd60e51b815260206004820152601160248201527014195c9b5a5cdcda5bdb8819195b9a5959607a1b604482015260640161017e565b600754600090610d536127103461126c565b610d5d919061128e565b90508060086000828254610d7191906112a5565b9091555050600a54610d8382346112b8565b11610dbc5760405162461bcd60e51b8152602060048201526009602482015268131bddd95c88109a5960ba1b604482015260640161017e565b6009546001600160a01b03166000818152600b6020526040902060030154610de4919061107a565b336000908152600b602052604090205415610e3e57336000908152600b60205260409020849055610e1581346112b8565b336000908152600b60205260409020600381019190915560018101849055600201829055610eb2565b610e696040518060800160405280600081526020016000815260200160008152602001600081525090565b610e7382346112b8565b6060820190815285825260208083018681526040808501878152336000908152600b909452922093518455516001840155516002830155516003909101555b600980546001600160a01b03191633179055610ece81346112b8565b600a81905550600160066000828254610ee791906112a5565b909155503390507fe684a55f31b79eca403df938249029212a5925ec6be8012e099b45bc1019e5d2610f1983346112b8565b60405190815260200160405180910390a250505050565b6002546001600160a01b03163314610f5a5760405162461bcd60e51b815260040161017e90611183565b60055460ff16610f9e5760405162461bcd60e51b815260206004820152600f60248201526e139bdd0814dd185c9d19590816595d608a1b604482015260640161017e565b600454421015610fdc5760405162461bcd60e51b8152602060048201526009602482015268139bdd08115b99195960ba1b604482015260640161017e565b600554610100900460ff16156110245760405162461bcd60e51b815260206004820152600d60248201526c105b1c9958591e48115b991959609a1b604482015260640161017e565b6005805461ff001916610100179055600954600a54604080516001600160a01b03909316835260208301919091527fca09734d1fc32150404dc9252b4d991c6bee44319031b7159c03d5ae2c0627049101610af3565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146110c7576040519150601f19603f3d011682016040523d82523d6000602084013e6110cc565b606091505b50509050806111135760405162461bcd60e51b815260206004820152601360248201527214995d1d5c9b88199d5b991cc819985a5b1959606a1b604482015260640161017e565b336000908152600b6020526040808220600381018390558281556001810183905560020191909155516001600160a01b038416907fe523757eee9c213543af9b06c96e0629da383d3149173f4a03ab96d8ff526760906111769085815260200190565b60405180910390a2505050565b60208082526013908201527229b2b73232b91034b9903737ba1037bbb732b960691b604082015260600190565b80356001600160a01b03811681146111c757600080fd5b919050565b600080604083850312156111df57600080fd5b6111e8836111b0565b9150602083013580151581146111fd57600080fd5b809150509250929050565b60006020828403121561121a57600080fd5b611223826111b0565b9392505050565b60008060006060848603121561123f57600080fd5b505081359360208301359350604090920135919050565b634e487b7160e01b600052601160045260246000fd5b60008261128957634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610b1a57610b1a611256565b80820180821115610b1a57610b1a611256565b81810381811115610b1a57610b1a61125656fea26469706673582212208e73c8d19f2b6884f3253be9fab1ceaff3f6d975611aae9ad376bb27ab732a2064736f6c63430008110033