Overview
ETH Balance
0.0002 ETH
Eth Value
$0.65 (@ $3,255.25/ETH)More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 60 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Create Auction | 14480091 | 1030 days ago | IN | 0 ETH | 0.00423722 | ||||
Finalize Auction | 14443789 | 1036 days ago | IN | 0 ETH | 0.00576804 | ||||
Place Bid | 14442463 | 1036 days ago | IN | 0.0001 ETH | 0.00211669 | ||||
Create Auction | 14438099 | 1037 days ago | IN | 0 ETH | 0.00871551 | ||||
Set Wallet | 14434577 | 1037 days ago | IN | 0 ETH | 0.00056265 | ||||
Withdraw | 14410367 | 1041 days ago | IN | 0 ETH | 0.00299775 | ||||
Finalize Auction | 14406363 | 1042 days ago | IN | 0 ETH | 0.00582221 | ||||
Place Bid | 14406177 | 1042 days ago | IN | 0.0002 ETH | 0.00280418 | ||||
Place Bid | 14406160 | 1042 days ago | IN | 0.0001 ETH | 0.00753657 | ||||
Withdraw | 14406037 | 1042 days ago | IN | 0 ETH | 0.00403513 | ||||
Finalize Auction | 14406003 | 1042 days ago | IN | 0 ETH | 0.00689591 | ||||
Create Auction | 14406001 | 1042 days ago | IN | 0 ETH | 0.00874521 | ||||
Place Bid | 14405641 | 1042 days ago | IN | 0.0002 ETH | 0.00412411 | ||||
Place Bid | 14405454 | 1042 days ago | IN | 0.0001 ETH | 0.0111908 | ||||
Create Auction | 14405410 | 1042 days ago | IN | 0 ETH | 0.01973107 | ||||
Finalize Auction | 14403887 | 1042 days ago | IN | 0 ETH | 0.00450648 | ||||
Set Wallet | 14403872 | 1042 days ago | IN | 0 ETH | 0.00082471 | ||||
Finalize Auction | 14403801 | 1042 days ago | IN | 0 ETH | 0.00419037 | ||||
Finalize Auction | 14403801 | 1042 days ago | IN | 0 ETH | 0.00236991 | ||||
Finalize Auction | 14402761 | 1042 days ago | IN | 0 ETH | 0.00287359 | ||||
Finalize Auction | 14402740 | 1042 days ago | IN | 0 ETH | 0.00309023 | ||||
Finalize Auction | 14402734 | 1042 days ago | IN | 0 ETH | 0.00330722 | ||||
Finalize Auction | 14402728 | 1042 days ago | IN | 0 ETH | 0.00293609 | ||||
Finalize Auction | 14402724 | 1042 days ago | IN | 0 ETH | 0.00338156 | ||||
Finalize Auction | 14402690 | 1042 days ago | IN | 0 ETH | 0.00328624 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
14443789 | 1036 days ago | 0.000085 ETH | ||||
14443789 | 1036 days ago | 0.000005 ETH | ||||
14443789 | 1036 days ago | 0.00001 ETH | ||||
14410367 | 1041 days ago | 0.0001 ETH | ||||
14406363 | 1042 days ago | 0.00017 ETH | ||||
14406363 | 1042 days ago | 0.00001 ETH | ||||
14406363 | 1042 days ago | 0.00002 ETH | ||||
14406037 | 1042 days ago | 0.0001 ETH | ||||
14406003 | 1042 days ago | 0.00017 ETH | ||||
14406003 | 1042 days ago | 0.00001 ETH | ||||
14406003 | 1042 days ago | 0.00002 ETH | ||||
14403887 | 1042 days ago | 0.000255 ETH | ||||
14403887 | 1042 days ago | 0.000015 ETH | ||||
14403887 | 1042 days ago | 0.00003 ETH | ||||
14403801 | 1042 days ago | 0.000015 ETH | ||||
14403801 | 1042 days ago | 0.00003 ETH | ||||
14403801 | 1042 days ago | 0.000015 ETH | ||||
14403801 | 1042 days ago | 0.00003 ETH | ||||
14402761 | 1042 days ago | 0.000015 ETH | ||||
14402761 | 1042 days ago | 0.00003 ETH | ||||
14402740 | 1042 days ago | 0.000015 ETH | ||||
14402740 | 1042 days ago | 0.00003 ETH | ||||
14402734 | 1042 days ago | 0.000015 ETH | ||||
14402734 | 1042 days ago | 0.00003 ETH | ||||
14402728 | 1042 days ago | 0.000015 ETH |
Loading...
Loading
Contract Name:
ExchangeVcgAuction
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; //pragma experimental ABIEncoderV2; import "./VcgBase.sol"; contract ExchangeVcgAuction is Ownable,Commission { using Strings for string; using Address for address; using SafeMath for uint256; enum State {Pending, Started, Ended, Cancelled} struct auctionInfo { address _nftContractAddress; uint256 _nftId; address _beneficiaryAddress; uint256 _initialPrice; uint256 _bidIncrement; uint _startTime; uint _stopTime; address highestBidder; mapping(address => uint256) fundsByBidder; State _state; uint256 _totalBalance; bool isUsed; } mapping(uint256 => auctionInfo) private _auctionInfos; // Interface to halt all auctions. bool public IsHalted; // Admin withdrawal event WithDrawal(uint256 auctionid,address bidder,uint256 amount); // Pause and resume event Pause(); event Resume(); // New Bidding Event event NewBid(uint256 auctionid, uint256 price, address bidder); // Auction Finish Event event AuctionMade(uint256 auctionid, address oper ,State s); event AuctionAmountDetail(uint256 indexed auctionId, uint256 indexed beneficiaryReceived, uint256 indexed creatorReceived, uint256 platformReceived); // Halt transactions function halt() public onlyOwner { //require(_privilleged_operators[msg.sender] == true, "Operator only"); IsHalted = true; emit Pause(); } // Resume transactions function resume() public onlyOwner { IsHalted = false; emit Resume(); } modifier onlyAuctionExist(uint256 auctionID) { require(_auctionInfos[auctionID].isUsed,"auctionID not existed..."); _; } modifier onlyOwnerOrBeneficiary(uint256 auctionID) { require(msg.sender == owner() || msg.sender == _auctionInfos[auctionID]._beneficiaryAddress, "only Owner Or Beneficiary allow to do this."); _; } modifier notBeneficiary(uint256 auctionID, address bider) { //if (bider == _auctionInfos[auctionid].beneficiaryAddress) throw; require(bider != _auctionInfos[auctionID]._beneficiaryAddress, "Bider Must not the beneficiary"); _; } modifier onlyAfterStart(uint256 auctionID) { require(block.timestamp > _auctionInfos[auctionID]._startTime, "only After Start"); _; } modifier onlyBeforeEnd(uint256 auctionID) { require(block.timestamp < _auctionInfos[auctionID]._stopTime, "only Before End"); _; } modifier onlyEndedOrCanceled(uint256 auctionID) { require(_auctionInfos[auctionID]._state == State.Ended || _auctionInfos[auctionID]._state == State.Cancelled, "The nft is still on auction, pls claim it or wait for finish"); _; } function hasRightToAuction(address nftContractaddr,uint256 tokenId) public view returns(bool) { return (IERC721(nftContractaddr).getApproved(tokenId) == address(this)); } function isTokenOwner(address nftContractaddr,address targetAddr, uint256 tokenId) internal view returns(bool) { return (targetAddr == IERC721(nftContractaddr).ownerOf(tokenId) ); } function isOnAuction(uint256 auctionID) public view returns(bool) { require(_auctionInfos[auctionID].isUsed,"auctionID not existed..."); return (block.timestamp > _auctionInfos[auctionID]._startTime && block.timestamp < _auctionInfos[auctionID]._stopTime); } function createAuction(uint256 auctionID, address nftContractAddress, uint256 nftId, uint256 initialPrice, uint256 bidIncrement, uint startTime, uint stopTime) public { require(!_auctionInfos[auctionID].isUsed,"auctionID existed..."); require(!Address.isContract(msg.sender),"the sender should be a person, not a contract!"); require(startTime < stopTime, "stopTime must greater than startTime"); require(stopTime > block.timestamp + 600 , "stopTime must greater than current Time after 10 min"); require(isTokenOwner(nftContractAddress, msg.sender, nftId), "the sender isn't the owner of the token id nft!"); require(hasRightToAuction(nftContractAddress,nftId), "the exchange contracct is not the approved of the token."); require(initialPrice > 0 && initialPrice >= bidIncrement ,"need a vaild initial price"); auctionInfo storage ainfo = _auctionInfos[auctionID]; ainfo._nftContractAddress=nftContractAddress; ainfo._nftId=nftId; ainfo._beneficiaryAddress=msg.sender; ainfo._initialPrice=initialPrice; ainfo._bidIncrement=bidIncrement; ainfo._totalBalance = 0; ainfo._startTime=startTime; ainfo._stopTime=stopTime; ainfo._state=State.Pending; ainfo.isUsed=true; emit AuctionMade(auctionID, address(this) ,State.Pending); } function getAuctionInfo(uint256 auctionID) external view returns (address,uint256,address,uint256,uint256, uint,uint,address,uint256,State,uint256){ auctionInfo storage info = _auctionInfos[auctionID]; return ( info._nftContractAddress, info._nftId, info._beneficiaryAddress, info._initialPrice, info._bidIncrement, info._startTime, info._stopTime, info.highestBidder, info.fundsByBidder[info.highestBidder], info._state, info._totalBalance ); } function clearAuctionInfo(uint256 auctionID) internal onlyAuctionExist(auctionID) { require(_auctionInfos[auctionID]._totalBalance == 0 , "only zero balance to be claered."); /* auctionInfo storage ainfo = _auctionInfos[auctionID]; ainfo._nftContractAddress=address(0); ainfo._nftId=0; ainfo._beneficiaryAddress=address(0); ainfo._initialPrice=0; ainfo._bidIncrement=0; ainfo._totalBalance = 0; ainfo._startTime=0; ainfo._stopTime=0; ainfo._state=State.Pending; ainfo.highestBidder=address(0); ainfo.isUsed=false; */ delete _auctionInfos[auctionID]; } function cancelAuction(uint256 auctionID) public onlyAuctionExist(auctionID) onlyOwnerOrBeneficiary(auctionID){ _auctionInfos[auctionID]._state = State.Cancelled; } function getHighestBid(uint256 auctionID) public view returns (address,uint256) { require(_auctionInfos[auctionID].isUsed,"auctionID not existed..."); if(_auctionInfos[auctionID].highestBidder == address(0)) { return (address(0),0); } return (_auctionInfos[auctionID].highestBidder, _auctionInfos[auctionID].fundsByBidder[ _auctionInfos[auctionID].highestBidder]); } function placeBid(uint256 auctionID) public payable onlyAuctionExist(auctionID) notBeneficiary(auctionID,msg.sender) onlyAfterStart(auctionID) onlyBeforeEnd(auctionID) { // to place a bid auction should be running require(_auctionInfos[auctionID]._state == State.Pending || _auctionInfos[auctionID]._state == State.Started,"Invaild Auction State"); // minimum value allowed to be sent require(msg.value >= _auctionInfos[auctionID]._bidIncrement || _auctionInfos[auctionID]._bidIncrement == 0, "bid should be greater bid Increment"); uint256 currentBid = _auctionInfos[auctionID].fundsByBidder[msg.sender] + msg.value; // the currentBid should be greater than the highestBid. // Otherwise there's nothing to do. require((address(0) == _auctionInfos[auctionID].highestBidder && currentBid >= _auctionInfos[auctionID]._initialPrice)//first bid || (currentBid > _auctionInfos[auctionID].fundsByBidder[ _auctionInfos[auctionID].highestBidder]), "the currentBid should be greater than the highestBid."); //set state to started,when first vaild bid if (_auctionInfos[auctionID]._state == State.Pending) { _auctionInfos[auctionID]._state = State.Started; emit AuctionMade(auctionID, msg.sender ,State.Started); } // updating the mapping variable _auctionInfos[auctionID].fundsByBidder[msg.sender] = currentBid; _auctionInfos[auctionID]._totalBalance = _auctionInfos[auctionID]._totalBalance.add(msg.value); if (_auctionInfos[auctionID].highestBidder != msg.sender){ // highestBidder is another bidder _auctionInfos[auctionID].highestBidder = payable(msg.sender); } emit NewBid(auctionID, currentBid, msg.sender); } function finalizeAuction(uint256 auctionID) public // onlyAuctionExist(auctionID) onlyOwner { // support multi finalizeAuction call--2021.12.29 if (!_auctionInfos[auctionID].isUsed || _auctionInfos[auctionID]._state == State.Ended) { return; } // the auction has been Cancelled or Ended require((_auctionInfos[auctionID]._state == State.Cancelled || _auctionInfos[auctionID]._state == State.Started || _auctionInfos[auctionID]._state == State.Pending) && block.timestamp > _auctionInfos[auctionID]._stopTime, "the auction may be Cancelled or Ended"); if(_auctionInfos[auctionID]._state == State.Started) { address payable recipient; uint256 value; recipient = payable(_auctionInfos[auctionID]._beneficiaryAddress); value = _auctionInfos[auctionID].fundsByBidder[ _auctionInfos[auctionID].highestBidder]; // resetting the bids of the recipient to avoid multiple transfers to the same recipient _auctionInfos[auctionID].fundsByBidder[ _auctionInfos[auctionID].highestBidder] = 0; _auctionInfos[auctionID]._totalBalance = _auctionInfos[auctionID]._totalBalance.sub(value); // IERC721(_auctionInfos[auctionID]._nftContractAddress).safeTransferFrom( _auctionInfos[auctionID]._beneficiaryAddress, _auctionInfos[auctionID].highestBidder, _auctionInfos[auctionID]._nftId ); (address creator,uint256 royalty) = IVcgERC721TokenWithRoyalty(_auctionInfos[auctionID]._nftContractAddress).royaltyInfo(_auctionInfos[auctionID]._nftId,value); (address platform,uint256 fee) = calculateFee(value); require(value > royalty + fee,"No enough Amount to pay except royalty and platform service fee"); if(creator != address(0) && royalty >0 && royalty < value) { payable(creator).transfer(royalty); value = value.sub(royalty); } if(fee > 0 && fee < value) { payable(platform).transfer(fee); value = value.sub(fee); } //sends value to the recipient recipient.transfer(value); emit AuctionAmountDetail(auctionID,value,royalty,fee); } _auctionInfos[auctionID]._state = State.Ended; emit AuctionMade(auctionID, msg.sender ,State.Ended); if(_auctionInfos[auctionID]._totalBalance == 0){ clearAuctionInfo(auctionID); } } function withdraw(uint256 auctionID) public onlyAuctionExist(auctionID) onlyEndedOrCanceled(auctionID) returns (bool success) { address payable withdrawalAccount; uint withdrawalAmount; if (_auctionInfos[auctionID]._state == State.Cancelled) { // if the auction was canceled, everyone should simply be allowed to withdraw their funds withdrawalAccount = payable(msg.sender); withdrawalAmount = _auctionInfos[auctionID].fundsByBidder[withdrawalAccount]; } else { require(msg.sender != _auctionInfos[auctionID].highestBidder , "highestBidder does not allow to withdraw."); // anyone who participated but did not win the auction should be allowed to withdraw // the full amount of their funds withdrawalAccount = payable(msg.sender); withdrawalAmount = _auctionInfos[auctionID].fundsByBidder[withdrawalAccount]; } if (withdrawalAmount == 0) { revert(); } delete _auctionInfos[auctionID].fundsByBidder[withdrawalAccount]; /* _auctionInfos[auctionID].fundsByBidder[withdrawalAccount] = _auctionInfos[auctionID].fundsByBidder[withdrawalAccount].sub(withdrawalAmount); */ // send the funds if (!withdrawalAccount.send(withdrawalAmount)){ revert(); } _auctionInfos[auctionID]._totalBalance = _auctionInfos[auctionID]._totalBalance.sub(withdrawalAmount); if(_auctionInfos[auctionID]._totalBalance == 0){ clearAuctionInfo(auctionID); } emit WithDrawal(auctionID,withdrawalAccount,withdrawalAmount); return true; } function getBalance(uint256 auctionID,address target) public view onlyAuctionExist(auctionID) returns (uint256) { if(address(0) == target){ return _auctionInfos[auctionID].fundsByBidder[msg.sender]; } return _auctionInfos[auctionID].fundsByBidder[target]; } function destroyContract() external onlyOwner { selfdestruct(payable(owner())); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; //pragma experimental ABIEncoderV2; /* * @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; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor () { _owner = msg.sender; emit OwnershipTransferred(address(0), _owner); } /** * @return the address of the owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner()); _; } /** * @return true if `msg.sender` is the owner of the contract. */ function isOwner() public view returns (bool) { return msg.sender == _owner; } /** * @dev Allows the current owner to relinquish control of the contract. * It will not be possible to call the functions with the `onlyOwner` * modifier anymore. * @notice Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ /* function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); }*/ /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0)); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @title Authentication * Authentication * @author duncanwang */ contract Authentication is Ownable { address private _owner; mapping(address=>bool) _managers; /** * @dev constructor */ constructor() { _owner = msg.sender; } modifier onlyAuthorized(address target) { require(isOwner()||isManager(target),"Only for manager or owner!"); _; } function addManager(address manager) public onlyOwner{ _managers[manager] = true; } function removeManager(address manager) public onlyOwner{ _managers[manager] = false; } function isManager(address manager) public view returns (bool) { return(_managers[manager]); } } /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } 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); } /** * @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; } /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } /** * @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); } /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } interface IVcgERC721Token is IERC721Enumerable { function getBaseTokenURI() external view returns (string memory); function setBaseTokenURI(string memory url) external; function tokenURI(uint256 tokenId) external view returns (string memory); function isVcgNftToken(address tokenAddress) external view returns(bool); function isApprovedOrOwner(address spender, uint256 tokenId) external view returns (bool); function exists(uint256 tokenId) external view returns (bool); } /** * @dev Implementation of royalties for 721s * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-2981.md */ interface IERC2981 { // ERC165 bytes to add to interface array - set in parent contract // implementing this standard // // bytes4(keccak256("royaltyInfo(uint256)")) == 0xcef6d368 // bytes4(keccak256("onRoyaltiesReceived(address,address,uint256,address,uint256,bytes32)")) == 0xe8cb9d99 // bytes4(0xcef6d368) ^ bytes4(0xe8cb9d99) == 0x263d4ef1 // bytes4 private constant _INTERFACE_ID_ERC721ROYALTIES = 0x263d4ef1; // _registerInterface(_INTERFACE_ID_ERC721ROYALTIES); // @notice Called to return both the creator's address and the royalty percentage // @param _tokenId - the NFT asset queried for royalty information // @return receiver - address of who should be sent the royalty payment // @return amount - a percentage calculated as a fixed point // with a scaling factor of 100000 (5 decimals), such that // 100% would be the value 10000000, as 10000000/100000 = 100. // 1% would be the value 100000, as 100000/100000 = 1 function royaltyInfo(uint256 _tokenId) external view returns (address receiver, uint256 amount); /// @notice Called with the sale price to determine how much royalty // is owed and to whom. /// @param _tokenId - the NFT asset queried for royalty information /// @param _salePrice - the sale price of the NFT asset specified by _tokenId /// @return receiver - address of who should be sent the royalty payment /// @return royaltyAmount - the royalty payment amount for _salePrice function royaltyInfo( uint256 _tokenId, uint256 _salePrice ) external view returns ( address receiver, uint256 royaltyAmount ); // @notice Called when royalty is transferred to the receiver. This // emits the RoyaltiesReceived event as we want the NFT contract // itself to contain the event for easy tracking by royalty receivers. // @param _royaltyRecipient - The address of who is entitled to the // royalties as specified by royaltyInfo(). // @param _buyer - If known, the address buying the NFT on a secondary // sale. 0x0 if not known. // @param _tokenId - the ID of the ERC-721 token that was sold // @param _tokenPaid - The address of the ERC-20 token used to pay the // royalty fee amount. Set to 0x0 if paid in the // native asset (ETH). // @param _amount - The amount being paid to the creator using the // correct decimals from _tokenPaid's ERC-20 contract // (i.e. if 7 decimals, 10000000 for 1 token paid) // @param _metadata - Arbitrary data attached to this payment // @return `bytes4(keccak256("onRoyaltiesReceived(address,address,uint256,address,uint256,bytes32)"))` function onRoyaltiesReceived(address _royaltyRecipient, address _buyer, uint256 _tokenId, address _tokenPaid, uint256 _amount, bytes32 _metadata) external returns (bytes4); // @dev This event MUST be emitted by `onRoyaltiesReceived()`. event RoyaltiesReceived( address indexed _royaltyRecipient, address indexed _buyer, uint256 indexed _tokenId, address _tokenPaid, uint256 _amount, bytes32 _metadata ); } interface IVcgERC721TokenWithRoyalty is IVcgERC721Token,IERC2981 { } /** * @title Commission * Commission with Auction * @author Alan */ contract Commission is Ownable { address private _wallet; uint32 private _commissionRate; uint256 private _scaling_factor = 100000;//5 decimals event WalletChanged(address indexed previousWallet,address indexed currentWallet); event CommissionRateChanged(uint32 indexed previousCommissionRate, uint32 indexed currentCommissionRate); /** * @dev constructor */ constructor() { //_wallet = msg.sender;// //_commissionRate = 0; _wallet = 0xEA5320a1a80705c81d72d3DD30c483f2a09CeB6c; _commissionRate = 5000; } modifier _validateCommission( uint32 comm ) { require(comm >= 0 && comm <= 30000, "wrong Commission"); _; } function setWallet(address payable wallet) public onlyOwner{ require(address(0) != wallet, "It's not an invalid wallet address."); emit WalletChanged(_wallet,wallet); _wallet = wallet; } function setCommissionRate(uint32 commissionRate) public onlyOwner _validateCommission(commissionRate){ emit CommissionRateChanged(_commissionRate,commissionRate); _commissionRate = commissionRate; } function commissionInfo() public view returns ( address walletAddr, uint32 commissionRate ){ return (_wallet,_commissionRate); } function calculateFee(uint256 _num) public view returns (address receiver,uint256 fee){ if (_num == 0 || _commissionRate == 0){ return (_wallet,0); } fee = SafeMath.div(SafeMath.mul(_num, _commissionRate),_scaling_factor); return (_wallet,fee); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"auctionId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"beneficiaryReceived","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"creatorReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"platformReceived","type":"uint256"}],"name":"AuctionAmountDetail","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"auctionid","type":"uint256"},{"indexed":false,"internalType":"address","name":"oper","type":"address"},{"indexed":false,"internalType":"enum ExchangeVcgAuction.State","name":"s","type":"uint8"}],"name":"AuctionMade","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"previousCommissionRate","type":"uint32"},{"indexed":true,"internalType":"uint32","name":"currentCommissionRate","type":"uint32"}],"name":"CommissionRateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"auctionid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"address","name":"bidder","type":"address"}],"name":"NewBid","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":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Resume","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousWallet","type":"address"},{"indexed":true,"internalType":"address","name":"currentWallet","type":"address"}],"name":"WalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"auctionid","type":"uint256"},{"indexed":false,"internalType":"address","name":"bidder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithDrawal","type":"event"},{"inputs":[],"name":"IsHalted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_num","type":"uint256"}],"name":"calculateFee","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"fee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"auctionID","type":"uint256"}],"name":"cancelAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"commissionInfo","outputs":[{"internalType":"address","name":"walletAddr","type":"address"},{"internalType":"uint32","name":"commissionRate","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"auctionID","type":"uint256"},{"internalType":"address","name":"nftContractAddress","type":"address"},{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint256","name":"initialPrice","type":"uint256"},{"internalType":"uint256","name":"bidIncrement","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"stopTime","type":"uint256"}],"name":"createAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"destroyContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"auctionID","type":"uint256"}],"name":"finalizeAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"auctionID","type":"uint256"}],"name":"getAuctionInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"enum ExchangeVcgAuction.State","name":"","type":"uint8"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"auctionID","type":"uint256"},{"internalType":"address","name":"target","type":"address"}],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"auctionID","type":"uint256"}],"name":"getHighestBid","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"halt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nftContractaddr","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"hasRightToAuction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"auctionID","type":"uint256"}],"name":"isOnAuction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"auctionID","type":"uint256"}],"name":"placeBid","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"resume","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"commissionRate","type":"uint32"}],"name":"setCommissionRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wallet","type":"address"}],"name":"setWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"auctionID","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052620186a060025534801561001757600080fd5b50600080546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600180546001600160c01b031916751388ea5320a1a80705c81d72d3dd30c483f2a09ceb6c1790556120c08061008e6000396000f3fe60806040526004361061012a5760003560e01c80638f288644116100ab578063b0a794591161006f578063b0a7945914610332578063becffebd14610360578063deaa59df14610380578063e8083863146103a0578063f2fde38b146103c0578063fc3fc4ed146103e057600080fd5b80638f288644146102805780638f32d59b146102bf57806396b5a755146102df5780639979ef45146102ff57806399a5d7471461031257600080fd5b806337e246ad116100f257806337e246ad146101e95780635ed7ca5b1461020957806360eab2f81461021e5780636417a6ec146102385780638da5cb5b1461025857600080fd5b8063046f7da21461012f578063092a5cce146101465780632a997dbc1461015b5780632d54da73146101995780632e1a7d4d146101b9575b600080fd5b34801561013b57600080fd5b5061014461048a565b005b34801561015257600080fd5b506101446104d6565b34801561016757600080fd5b50600154604080516001600160a01b0383168152600160a01b90920463ffffffff166020830152015b60405180910390f35b3480156101a557600080fd5b506101446101b4366004611ebe565b6104fb565b3480156101c557600080fd5b506101d96101d4366004611e1c565b6105c8565b6040519015158152602001610190565b3480156101f557600080fd5b506101d9610204366004611e1c565b6108aa565b34801561021557600080fd5b50610144610911565b34801561022a57600080fd5b506004546101d99060ff1681565b34801561024457600080fd5b506101d9610253366004611dc2565b610960565b34801561026457600080fd5b506000546040516001600160a01b039091168152602001610190565b34801561028c57600080fd5b506102a061029b366004611e1c565b6109ee565b604080516001600160a01b039093168352602083019190915201610190565b3480156102cb57600080fd5b506000546001600160a01b031633146101d9565b3480156102eb57600080fd5b506101446102fa366004611e1c565b610a7f565b61014461030d366004611e1c565b610b80565b34801561031e57600080fd5b506102a061032d366004611e1c565b61103f565b34801561033e57600080fd5b5061035261034d366004611e35565b6110b2565b604051908152602001610190565b34801561036c57600080fd5b5061014461037b366004611e65565b611147565b34801561038c57600080fd5b5061014461039b366004611d88565b6114e6565b3480156103ac57600080fd5b506101446103bb366004611e1c565b6115bb565b3480156103cc57600080fd5b506101446103db366004611d88565b611b1d565b3480156103ec57600080fd5b506104736103fb366004611e1c565b60009081526003602081815260408084208054600182015460028301549583015460048401546005850154600686015460078701546001600160a01b03908116808d5260088901909a5297909a20546009870154600a909701549588169b949a97909916989297919690959094919360ff9091169190565b6040516101909b9a99989796959493929190611f06565b6000546001600160a01b031633146104a157600080fd5b6004805460ff191690556040517f490d6d11e278f168be9be39e46297f72ea877136d5bccad9cf4993e63a29568f90600090a1565b6000546001600160a01b031633146104ed57600080fd5b6000546001600160a01b0316ff5b6000546001600160a01b0316331461051257600080fd5b806175308163ffffffff1611156105635760405162461bcd60e51b815260206004820152601060248201526f3bb937b7339021b7b6b6b4b9b9b4b7b760811b60448201526064015b60405180910390fd5b60015460405163ffffffff80851692600160a01b900416907faa6489da29d9e526b7c1f2fda0a46003a5831d202fb585f085406b474dc0889190600090a3506001805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b6000818152600360205260408120600b0154829060ff166105fb5760405162461bcd60e51b815260040161055a90611f77565b82600260008281526003602081905260409091206009015460ff16908111156106265761062661205f565b1480610657575060008181526003602081905260409091206009015460ff16818111156106555761065561205f565b145b6106c95760405162461bcd60e51b815260206004820152603c60248201527f546865206e6674206973207374696c6c206f6e2061756374696f6e2c20706c7360448201527f20636c61696d206974206f72207761697420666f722066696e69736800000000606482015260840161055a565b600084815260036020819052604082206009015482919060ff16818111156106f3576106f361205f565b14156107215750506000848152600360209081526040808320338085526008909101909252909120546107c1565b6000868152600360205260409020600701546001600160a01b031633141561079d5760405162461bcd60e51b815260206004820152602960248201527f6869676865737442696464657220646f6573206e6f7420616c6c6f7720746f206044820152683bb4ba34323930bb9760b91b606482015260840161055a565b50506000848152600360209081526040808320338085526008909101909252909120545b806107cb57600080fd5b60008681526003602090815260408083206001600160a01b038616808552600890910190925280832083905551909183156108fc02918491818181858888f1935050505061081857600080fd5b6000868152600360205260409020600a01546108349082611b3d565b6000878152600360205260409020600a018190556108555761085586611b50565b604080518781526001600160a01b03841660208201529081018290527ff147dea08df157c98be9a1d7694fa0ce6a05ae6123316357a2c35990a12d2ed39060600160405180910390a150600195945050505050565b6000818152600360205260408120600b015460ff166108db5760405162461bcd60e51b815260040161055a90611f77565b6000828152600360205260409020600501544211801561090b575060008281526003602052604090206006015442105b92915050565b6000546001600160a01b0316331461092857600080fd5b6004805460ff191660011790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b60405163020604bf60e21b81526004810182905260009030906001600160a01b0385169063081812fc9060240160206040518083038186803b1580156109a557600080fd5b505afa1580156109b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109dd9190611da5565b6001600160a01b0316149392505050565b6000818152600360205260408120600b0154819060ff16610a215760405162461bcd60e51b815260040161055a90611f77565b6000838152600360205260409020600701546001600160a01b0316610a4b57506000928392509050565b5050600090815260036020908152604080832060078101546001600160a01b03168085526008909101909252909120549091565b6000818152600360205260409020600b0154819060ff16610ab25760405162461bcd60e51b815260040161055a90611f77565b81610ac56000546001600160a01b031690565b6001600160a01b0316336001600160a01b03161480610afd57506000818152600360205260409020600201546001600160a01b031633145b610b5d5760405162461bcd60e51b815260206004820152602b60248201527f6f6e6c79204f776e6572204f722042656e656669636961727920616c6c6f772060448201526a3a37903237903a3434b99760a91b606482015260840161055a565b50506000908152600360208190526040909120600901805460ff19169091179055565b6000818152600360205260409020600b0154819060ff16610bb35760405162461bcd60e51b815260040161055a90611f77565b600082815260036020526040902060020154829033906001600160a01b0316811415610c215760405162461bcd60e51b815260206004820152601e60248201527f4269646572204d757374206e6f74207468652062656e65666963696172790000604482015260640161055a565b60008481526003602052604090206005015484904211610c765760405162461bcd60e51b815260206004820152601060248201526f1bdb9b1e4810599d195c8814dd185c9d60821b604482015260640161055a565b60008581526003602052604090206006015485904210610cca5760405162461bcd60e51b815260206004820152600f60248201526e1bdb9b1e481099599bdc9948115b99608a1b604482015260640161055a565b600086815260036020819052604082206009015460ff1690811115610cf157610cf161205f565b1480610d245750600160008781526003602081905260409091206009015460ff1690811115610d2257610d2261205f565b145b610d685760405162461bcd60e51b8152602060048201526015602482015274496e7661696c642041756374696f6e20537461746560581b604482015260640161055a565b60008681526003602052604090206004015434101580610d975750600086815260036020526040902060040154155b610def5760405162461bcd60e51b815260206004820152602360248201527f6269642073686f756c6420626520677265617465722062696420496e6372656d604482015262195b9d60ea1b606482015260840161055a565b6000868152600360209081526040808320338452600801909152812054610e17903490611fd9565b6000888152600360205260409020600701549091506001600160a01b0316158015610e545750600087815260036020819052604090912001548110155b80610e875750600087815260036020908152604080832060078101546001600160a01b0316845260080190915290205481115b610ef15760405162461bcd60e51b815260206004820152603560248201527f7468652063757272656e744269642073686f756c642062652067726561746572604482015274103a3430b7103a3432903434b3b432b9ba2134b21760591b606482015260840161055a565b600087815260036020819052604082206009015460ff1690811115610f1857610f1861205f565b1415610f795760008781526003602052604090819020600901805460ff1916600190811790915590517f97c437dca0cd20ad245fe92ec76f25817b1438b99d717b41615ca2832e0b1ac591610f70918a913391611fae565b60405180910390a15b6000878152600360208181526040808420338552600881018352908420859055928a905252600a0154610fac9034611c5e565b6000888152600360205260409020600a810191909155600701546001600160a01b03163314610ff757600087815260036020526040902060070180546001600160a01b031916331790555b6040805188815260208101839052338183015290517f0b946a7d9cbd47da0dd592970ef1259349c40f44b231f11da4babeb56c07dd2d9181900360600190a150505050505050565b60008082158061105c5750600154600160a01b900463ffffffff16155b156110765750506001546001600160a01b03169160009150565b60015461109d90611095908590600160a01b900463ffffffff16611c6a565b600254611c76565b6001546001600160a01b031694909350915050565b6000828152600360205260408120600b0154839060ff166110e55760405162461bcd60e51b815260040161055a90611f77565b6001600160a01b0383166111175760008481526003602090815260408083203384526008019091529020549150611140565b60008481526003602090815260408083206001600160a01b038716845260080190915290205491505b5092915050565b6000878152600360205260409020600b015460ff16156111a05760405162461bcd60e51b815260206004820152601460248201527330bab1ba34b7b724a21032bc34b9ba32b217171760611b604482015260640161055a565b333b156112065760405162461bcd60e51b815260206004820152602e60248201527f7468652073656e6465722073686f756c64206265206120706572736f6e2c206e60448201526d6f74206120636f6e74726163742160901b606482015260840161055a565b8082106112615760405162461bcd60e51b8152602060048201526024808201527f73746f7054696d65206d7573742067726561746572207468616e20737461727460448201526354696d6560e01b606482015260840161055a565b61126d42610258611fd9565b81116112d85760405162461bcd60e51b815260206004820152603460248201527f73746f7054696d65206d7573742067726561746572207468616e206375727265604482015273373a102a34b6b29030b33a32b91018981036b4b760611b606482015260840161055a565b6112e3863387611c82565b6113475760405162461bcd60e51b815260206004820152602f60248201527f7468652073656e6465722069736e277420746865206f776e6572206f6620746860448201526e6520746f6b656e206964206e66742160881b606482015260840161055a565b6113518686610960565b6113c35760405162461bcd60e51b815260206004820152603860248201527f7468652065786368616e676520636f6e747261636374206973206e6f7420746860448201527f6520617070726f766564206f662074686520746f6b656e2e0000000000000000606482015260840161055a565b6000841180156113d35750828410155b61141f5760405162461bcd60e51b815260206004820152601a60248201527f6e6565642061207661696c6420696e697469616c207072696365000000000000604482015260640161055a565b600087815260036020819052604080832080546001600160a01b038b166001600160a01b031991821617825560018083018b9055600283018054909216331790915592810188905560048101879055600a8101849055600581018690556006810185905560098101805460ff19908116909155600b820180549091169093179092555190917f97c437dca0cd20ad245fe92ec76f25817b1438b99d717b41615ca2832e0b1ac5916114d4918b91309190611fae565b60405180910390a15050505050505050565b6000546001600160a01b031633146114fd57600080fd5b6001600160a01b03811661155f5760405162461bcd60e51b815260206004820152602360248201527f49742773206e6f7420616e20696e76616c69642077616c6c657420616464726560448201526239b99760e91b606482015260840161055a565b6001546040516001600160a01b038084169216907f64cbbd34f3faebfd04eff088ae5832f6d254dbb81820b0055e9d85c534aa700d90600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146115d257600080fd5b6000818152600360205260409020600b015460ff16158061161a5750600260008281526003602081905260409091206009015460ff16908111156116185761161861205f565b145b156116225750565b60008181526003602081905260409091206009015460ff168181111561164a5761164a61205f565b148061167d5750600160008281526003602081905260409091206009015460ff169081111561167b5761167b61205f565b145b806116ac5750600081815260036020819052604082206009015460ff16908111156116aa576116aa61205f565b145b80156116c8575060008181526003602052604090206006015442115b6117225760405162461bcd60e51b815260206004820152602560248201527f7468652061756374696f6e206d61792062652043616e63656c6c6564206f7220604482015264115b99195960da1b606482015260840161055a565b600160008281526003602081905260409091206009015460ff169081111561174c5761174c61205f565b1415611aa1576000818152600360208181526040808420600281015460078201546001600160a01b0390811687526008830185529286208054908790559587905293909252600a90910154911691906117a59082611b3d565b60008481526003602052604090819020600a8101929092558154600283015460078401546001909401549251632142170760e11b81526001600160a01b0391821660048201529381166024850152604484019290925216906342842e0e90606401600060405180830381600087803b15801561182057600080fd5b505af1158015611834573d6000803e3d6000fd5b5050506000848152600360205260408082208054600190910154915163152a902d60e11b815260048101929092526024820185905291925082916001600160a01b031690632a55205a90604401604080518083038186803b15801561189857600080fd5b505afa1580156118ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d09190611dee565b915091506000806118e08561103f565b90925090506118ef8184611fd9565b85116119635760405162461bcd60e51b815260206004820152603f60248201527f4e6f20656e6f75676820416d6f756e7420746f2070617920657863657074207260448201527f6f79616c747920616e6420706c6174666f726d20736572766963652066656500606482015260840161055a565b6001600160a01b0384161580159061197b5750600083115b801561198657508483105b156119cf576040516001600160a01b0385169084156108fc029085906000818181858888f193505050501580156119c1573d6000803e3d6000fd5b506119cc8584611b3d565b94505b6000811180156119de57508481105b15611a27576040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611a19573d6000803e3d6000fd5b50611a248582611b3d565b94505b6040516001600160a01b0387169086156108fc029087906000818181858888f19350505050158015611a5d573d6000803e3d6000fd5b508285887ff7023cee5e18b2b411daa606b98df12ef046a06d7f700cbf341152ae23f36c4484604051611a9291815260200190565b60405180910390a45050505050505b60008181526003602052604090819020600901805460ff1916600290811790915590517f97c437dca0cd20ad245fe92ec76f25817b1438b99d717b41615ca2832e0b1ac591611af39184913391611fae565b60405180910390a16000818152600360205260409020600a0154611b1a57611b1a81611b50565b50565b6000546001600160a01b03163314611b3457600080fd5b611b1a81611d1a565b6000611b498284612032565b9392505050565b6000818152600360205260409020600b0154819060ff16611b835760405162461bcd60e51b815260040161055a90611f77565b6000828152600360205260409020600a015415611be25760405162461bcd60e51b815260206004820181905260248201527f6f6e6c79207a65726f2062616c616e636520746f20626520636c61657265642e604482015260640161055a565b506000908152600360208190526040822080546001600160a01b03199081168255600182018490556002820180548216905591810183905560048101839055600581018390556006810183905560078101805490921690915560098101805460ff19908116909155600a820192909255600b0180549091169055565b6000611b498284611fd9565b6000611b498284612013565b6000611b498284611ff1565b6040516331a9108f60e11b8152600481018290526000906001600160a01b03851690636352211e9060240160206040518083038186803b158015611cc557600080fd5b505afa158015611cd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfd9190611da5565b6001600160a01b0316836001600160a01b03161490509392505050565b6001600160a01b038116611d2d57600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600060208284031215611d9a57600080fd5b8135611b4981612075565b600060208284031215611db757600080fd5b8151611b4981612075565b60008060408385031215611dd557600080fd5b8235611de081612075565b946020939093013593505050565b60008060408385031215611e0157600080fd5b8251611e0c81612075565b6020939093015192949293505050565b600060208284031215611e2e57600080fd5b5035919050565b60008060408385031215611e4857600080fd5b823591506020830135611e5a81612075565b809150509250929050565b600080600080600080600060e0888a031215611e8057600080fd5b873596506020880135611e9281612075565b96999698505050506040850135946060810135946080820135945060a0820135935060c0909101359150565b600060208284031215611ed057600080fd5b813563ffffffff81168114611b4957600080fd5b60048110611f0257634e487b7160e01b600052602160045260246000fd5b9052565b6001600160a01b038c81168252602082018c90528a81166040830152606082018a90526080820189905260a0820188905260c08201879052851660e082015261010081018490526101608101611f60610120830185611ee4565b826101408301529c9b505050505050505050505050565b60208082526018908201527f61756374696f6e4944206e6f7420657869737465642e2e2e0000000000000000604082015260600190565b8381526001600160a01b038316602082015260608101611fd16040830184611ee4565b949350505050565b60008219821115611fec57611fec612049565b500190565b60008261200e57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561202d5761202d612049565b500290565b60008282101561204457612044612049565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6001600160a01b0381168114611b1a57600080fdfea26469706673582212204ef1bc12a55cb5d159d49a5dbbb3aaf2bc4ba73e3bb30f204a2fed30db5b31af64736f6c63430008070033
Deployed Bytecode
0x60806040526004361061012a5760003560e01c80638f288644116100ab578063b0a794591161006f578063b0a7945914610332578063becffebd14610360578063deaa59df14610380578063e8083863146103a0578063f2fde38b146103c0578063fc3fc4ed146103e057600080fd5b80638f288644146102805780638f32d59b146102bf57806396b5a755146102df5780639979ef45146102ff57806399a5d7471461031257600080fd5b806337e246ad116100f257806337e246ad146101e95780635ed7ca5b1461020957806360eab2f81461021e5780636417a6ec146102385780638da5cb5b1461025857600080fd5b8063046f7da21461012f578063092a5cce146101465780632a997dbc1461015b5780632d54da73146101995780632e1a7d4d146101b9575b600080fd5b34801561013b57600080fd5b5061014461048a565b005b34801561015257600080fd5b506101446104d6565b34801561016757600080fd5b50600154604080516001600160a01b0383168152600160a01b90920463ffffffff166020830152015b60405180910390f35b3480156101a557600080fd5b506101446101b4366004611ebe565b6104fb565b3480156101c557600080fd5b506101d96101d4366004611e1c565b6105c8565b6040519015158152602001610190565b3480156101f557600080fd5b506101d9610204366004611e1c565b6108aa565b34801561021557600080fd5b50610144610911565b34801561022a57600080fd5b506004546101d99060ff1681565b34801561024457600080fd5b506101d9610253366004611dc2565b610960565b34801561026457600080fd5b506000546040516001600160a01b039091168152602001610190565b34801561028c57600080fd5b506102a061029b366004611e1c565b6109ee565b604080516001600160a01b039093168352602083019190915201610190565b3480156102cb57600080fd5b506000546001600160a01b031633146101d9565b3480156102eb57600080fd5b506101446102fa366004611e1c565b610a7f565b61014461030d366004611e1c565b610b80565b34801561031e57600080fd5b506102a061032d366004611e1c565b61103f565b34801561033e57600080fd5b5061035261034d366004611e35565b6110b2565b604051908152602001610190565b34801561036c57600080fd5b5061014461037b366004611e65565b611147565b34801561038c57600080fd5b5061014461039b366004611d88565b6114e6565b3480156103ac57600080fd5b506101446103bb366004611e1c565b6115bb565b3480156103cc57600080fd5b506101446103db366004611d88565b611b1d565b3480156103ec57600080fd5b506104736103fb366004611e1c565b60009081526003602081815260408084208054600182015460028301549583015460048401546005850154600686015460078701546001600160a01b03908116808d5260088901909a5297909a20546009870154600a909701549588169b949a97909916989297919690959094919360ff9091169190565b6040516101909b9a99989796959493929190611f06565b6000546001600160a01b031633146104a157600080fd5b6004805460ff191690556040517f490d6d11e278f168be9be39e46297f72ea877136d5bccad9cf4993e63a29568f90600090a1565b6000546001600160a01b031633146104ed57600080fd5b6000546001600160a01b0316ff5b6000546001600160a01b0316331461051257600080fd5b806175308163ffffffff1611156105635760405162461bcd60e51b815260206004820152601060248201526f3bb937b7339021b7b6b6b4b9b9b4b7b760811b60448201526064015b60405180910390fd5b60015460405163ffffffff80851692600160a01b900416907faa6489da29d9e526b7c1f2fda0a46003a5831d202fb585f085406b474dc0889190600090a3506001805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b6000818152600360205260408120600b0154829060ff166105fb5760405162461bcd60e51b815260040161055a90611f77565b82600260008281526003602081905260409091206009015460ff16908111156106265761062661205f565b1480610657575060008181526003602081905260409091206009015460ff16818111156106555761065561205f565b145b6106c95760405162461bcd60e51b815260206004820152603c60248201527f546865206e6674206973207374696c6c206f6e2061756374696f6e2c20706c7360448201527f20636c61696d206974206f72207761697420666f722066696e69736800000000606482015260840161055a565b600084815260036020819052604082206009015482919060ff16818111156106f3576106f361205f565b14156107215750506000848152600360209081526040808320338085526008909101909252909120546107c1565b6000868152600360205260409020600701546001600160a01b031633141561079d5760405162461bcd60e51b815260206004820152602960248201527f6869676865737442696464657220646f6573206e6f7420616c6c6f7720746f206044820152683bb4ba34323930bb9760b91b606482015260840161055a565b50506000848152600360209081526040808320338085526008909101909252909120545b806107cb57600080fd5b60008681526003602090815260408083206001600160a01b038616808552600890910190925280832083905551909183156108fc02918491818181858888f1935050505061081857600080fd5b6000868152600360205260409020600a01546108349082611b3d565b6000878152600360205260409020600a018190556108555761085586611b50565b604080518781526001600160a01b03841660208201529081018290527ff147dea08df157c98be9a1d7694fa0ce6a05ae6123316357a2c35990a12d2ed39060600160405180910390a150600195945050505050565b6000818152600360205260408120600b015460ff166108db5760405162461bcd60e51b815260040161055a90611f77565b6000828152600360205260409020600501544211801561090b575060008281526003602052604090206006015442105b92915050565b6000546001600160a01b0316331461092857600080fd5b6004805460ff191660011790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b60405163020604bf60e21b81526004810182905260009030906001600160a01b0385169063081812fc9060240160206040518083038186803b1580156109a557600080fd5b505afa1580156109b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109dd9190611da5565b6001600160a01b0316149392505050565b6000818152600360205260408120600b0154819060ff16610a215760405162461bcd60e51b815260040161055a90611f77565b6000838152600360205260409020600701546001600160a01b0316610a4b57506000928392509050565b5050600090815260036020908152604080832060078101546001600160a01b03168085526008909101909252909120549091565b6000818152600360205260409020600b0154819060ff16610ab25760405162461bcd60e51b815260040161055a90611f77565b81610ac56000546001600160a01b031690565b6001600160a01b0316336001600160a01b03161480610afd57506000818152600360205260409020600201546001600160a01b031633145b610b5d5760405162461bcd60e51b815260206004820152602b60248201527f6f6e6c79204f776e6572204f722042656e656669636961727920616c6c6f772060448201526a3a37903237903a3434b99760a91b606482015260840161055a565b50506000908152600360208190526040909120600901805460ff19169091179055565b6000818152600360205260409020600b0154819060ff16610bb35760405162461bcd60e51b815260040161055a90611f77565b600082815260036020526040902060020154829033906001600160a01b0316811415610c215760405162461bcd60e51b815260206004820152601e60248201527f4269646572204d757374206e6f74207468652062656e65666963696172790000604482015260640161055a565b60008481526003602052604090206005015484904211610c765760405162461bcd60e51b815260206004820152601060248201526f1bdb9b1e4810599d195c8814dd185c9d60821b604482015260640161055a565b60008581526003602052604090206006015485904210610cca5760405162461bcd60e51b815260206004820152600f60248201526e1bdb9b1e481099599bdc9948115b99608a1b604482015260640161055a565b600086815260036020819052604082206009015460ff1690811115610cf157610cf161205f565b1480610d245750600160008781526003602081905260409091206009015460ff1690811115610d2257610d2261205f565b145b610d685760405162461bcd60e51b8152602060048201526015602482015274496e7661696c642041756374696f6e20537461746560581b604482015260640161055a565b60008681526003602052604090206004015434101580610d975750600086815260036020526040902060040154155b610def5760405162461bcd60e51b815260206004820152602360248201527f6269642073686f756c6420626520677265617465722062696420496e6372656d604482015262195b9d60ea1b606482015260840161055a565b6000868152600360209081526040808320338452600801909152812054610e17903490611fd9565b6000888152600360205260409020600701549091506001600160a01b0316158015610e545750600087815260036020819052604090912001548110155b80610e875750600087815260036020908152604080832060078101546001600160a01b0316845260080190915290205481115b610ef15760405162461bcd60e51b815260206004820152603560248201527f7468652063757272656e744269642073686f756c642062652067726561746572604482015274103a3430b7103a3432903434b3b432b9ba2134b21760591b606482015260840161055a565b600087815260036020819052604082206009015460ff1690811115610f1857610f1861205f565b1415610f795760008781526003602052604090819020600901805460ff1916600190811790915590517f97c437dca0cd20ad245fe92ec76f25817b1438b99d717b41615ca2832e0b1ac591610f70918a913391611fae565b60405180910390a15b6000878152600360208181526040808420338552600881018352908420859055928a905252600a0154610fac9034611c5e565b6000888152600360205260409020600a810191909155600701546001600160a01b03163314610ff757600087815260036020526040902060070180546001600160a01b031916331790555b6040805188815260208101839052338183015290517f0b946a7d9cbd47da0dd592970ef1259349c40f44b231f11da4babeb56c07dd2d9181900360600190a150505050505050565b60008082158061105c5750600154600160a01b900463ffffffff16155b156110765750506001546001600160a01b03169160009150565b60015461109d90611095908590600160a01b900463ffffffff16611c6a565b600254611c76565b6001546001600160a01b031694909350915050565b6000828152600360205260408120600b0154839060ff166110e55760405162461bcd60e51b815260040161055a90611f77565b6001600160a01b0383166111175760008481526003602090815260408083203384526008019091529020549150611140565b60008481526003602090815260408083206001600160a01b038716845260080190915290205491505b5092915050565b6000878152600360205260409020600b015460ff16156111a05760405162461bcd60e51b815260206004820152601460248201527330bab1ba34b7b724a21032bc34b9ba32b217171760611b604482015260640161055a565b333b156112065760405162461bcd60e51b815260206004820152602e60248201527f7468652073656e6465722073686f756c64206265206120706572736f6e2c206e60448201526d6f74206120636f6e74726163742160901b606482015260840161055a565b8082106112615760405162461bcd60e51b8152602060048201526024808201527f73746f7054696d65206d7573742067726561746572207468616e20737461727460448201526354696d6560e01b606482015260840161055a565b61126d42610258611fd9565b81116112d85760405162461bcd60e51b815260206004820152603460248201527f73746f7054696d65206d7573742067726561746572207468616e206375727265604482015273373a102a34b6b29030b33a32b91018981036b4b760611b606482015260840161055a565b6112e3863387611c82565b6113475760405162461bcd60e51b815260206004820152602f60248201527f7468652073656e6465722069736e277420746865206f776e6572206f6620746860448201526e6520746f6b656e206964206e66742160881b606482015260840161055a565b6113518686610960565b6113c35760405162461bcd60e51b815260206004820152603860248201527f7468652065786368616e676520636f6e747261636374206973206e6f7420746860448201527f6520617070726f766564206f662074686520746f6b656e2e0000000000000000606482015260840161055a565b6000841180156113d35750828410155b61141f5760405162461bcd60e51b815260206004820152601a60248201527f6e6565642061207661696c6420696e697469616c207072696365000000000000604482015260640161055a565b600087815260036020819052604080832080546001600160a01b038b166001600160a01b031991821617825560018083018b9055600283018054909216331790915592810188905560048101879055600a8101849055600581018690556006810185905560098101805460ff19908116909155600b820180549091169093179092555190917f97c437dca0cd20ad245fe92ec76f25817b1438b99d717b41615ca2832e0b1ac5916114d4918b91309190611fae565b60405180910390a15050505050505050565b6000546001600160a01b031633146114fd57600080fd5b6001600160a01b03811661155f5760405162461bcd60e51b815260206004820152602360248201527f49742773206e6f7420616e20696e76616c69642077616c6c657420616464726560448201526239b99760e91b606482015260840161055a565b6001546040516001600160a01b038084169216907f64cbbd34f3faebfd04eff088ae5832f6d254dbb81820b0055e9d85c534aa700d90600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146115d257600080fd5b6000818152600360205260409020600b015460ff16158061161a5750600260008281526003602081905260409091206009015460ff16908111156116185761161861205f565b145b156116225750565b60008181526003602081905260409091206009015460ff168181111561164a5761164a61205f565b148061167d5750600160008281526003602081905260409091206009015460ff169081111561167b5761167b61205f565b145b806116ac5750600081815260036020819052604082206009015460ff16908111156116aa576116aa61205f565b145b80156116c8575060008181526003602052604090206006015442115b6117225760405162461bcd60e51b815260206004820152602560248201527f7468652061756374696f6e206d61792062652043616e63656c6c6564206f7220604482015264115b99195960da1b606482015260840161055a565b600160008281526003602081905260409091206009015460ff169081111561174c5761174c61205f565b1415611aa1576000818152600360208181526040808420600281015460078201546001600160a01b0390811687526008830185529286208054908790559587905293909252600a90910154911691906117a59082611b3d565b60008481526003602052604090819020600a8101929092558154600283015460078401546001909401549251632142170760e11b81526001600160a01b0391821660048201529381166024850152604484019290925216906342842e0e90606401600060405180830381600087803b15801561182057600080fd5b505af1158015611834573d6000803e3d6000fd5b5050506000848152600360205260408082208054600190910154915163152a902d60e11b815260048101929092526024820185905291925082916001600160a01b031690632a55205a90604401604080518083038186803b15801561189857600080fd5b505afa1580156118ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d09190611dee565b915091506000806118e08561103f565b90925090506118ef8184611fd9565b85116119635760405162461bcd60e51b815260206004820152603f60248201527f4e6f20656e6f75676820416d6f756e7420746f2070617920657863657074207260448201527f6f79616c747920616e6420706c6174666f726d20736572766963652066656500606482015260840161055a565b6001600160a01b0384161580159061197b5750600083115b801561198657508483105b156119cf576040516001600160a01b0385169084156108fc029085906000818181858888f193505050501580156119c1573d6000803e3d6000fd5b506119cc8584611b3d565b94505b6000811180156119de57508481105b15611a27576040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611a19573d6000803e3d6000fd5b50611a248582611b3d565b94505b6040516001600160a01b0387169086156108fc029087906000818181858888f19350505050158015611a5d573d6000803e3d6000fd5b508285887ff7023cee5e18b2b411daa606b98df12ef046a06d7f700cbf341152ae23f36c4484604051611a9291815260200190565b60405180910390a45050505050505b60008181526003602052604090819020600901805460ff1916600290811790915590517f97c437dca0cd20ad245fe92ec76f25817b1438b99d717b41615ca2832e0b1ac591611af39184913391611fae565b60405180910390a16000818152600360205260409020600a0154611b1a57611b1a81611b50565b50565b6000546001600160a01b03163314611b3457600080fd5b611b1a81611d1a565b6000611b498284612032565b9392505050565b6000818152600360205260409020600b0154819060ff16611b835760405162461bcd60e51b815260040161055a90611f77565b6000828152600360205260409020600a015415611be25760405162461bcd60e51b815260206004820181905260248201527f6f6e6c79207a65726f2062616c616e636520746f20626520636c61657265642e604482015260640161055a565b506000908152600360208190526040822080546001600160a01b03199081168255600182018490556002820180548216905591810183905560048101839055600581018390556006810183905560078101805490921690915560098101805460ff19908116909155600a820192909255600b0180549091169055565b6000611b498284611fd9565b6000611b498284612013565b6000611b498284611ff1565b6040516331a9108f60e11b8152600481018290526000906001600160a01b03851690636352211e9060240160206040518083038186803b158015611cc557600080fd5b505afa158015611cd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfd9190611da5565b6001600160a01b0316836001600160a01b03161490509392505050565b6001600160a01b038116611d2d57600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600060208284031215611d9a57600080fd5b8135611b4981612075565b600060208284031215611db757600080fd5b8151611b4981612075565b60008060408385031215611dd557600080fd5b8235611de081612075565b946020939093013593505050565b60008060408385031215611e0157600080fd5b8251611e0c81612075565b6020939093015192949293505050565b600060208284031215611e2e57600080fd5b5035919050565b60008060408385031215611e4857600080fd5b823591506020830135611e5a81612075565b809150509250929050565b600080600080600080600060e0888a031215611e8057600080fd5b873596506020880135611e9281612075565b96999698505050506040850135946060810135946080820135945060a0820135935060c0909101359150565b600060208284031215611ed057600080fd5b813563ffffffff81168114611b4957600080fd5b60048110611f0257634e487b7160e01b600052602160045260246000fd5b9052565b6001600160a01b038c81168252602082018c90528a81166040830152606082018a90526080820189905260a0820188905260c08201879052851660e082015261010081018490526101608101611f60610120830185611ee4565b826101408301529c9b505050505050505050505050565b60208082526018908201527f61756374696f6e4944206e6f7420657869737465642e2e2e0000000000000000604082015260600190565b8381526001600160a01b038316602082015260608101611fd16040830184611ee4565b949350505050565b60008219821115611fec57611fec612049565b500190565b60008261200e57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561202d5761202d612049565b500290565b60008282101561204457612044612049565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6001600160a01b0381168114611b1a57600080fdfea26469706673582212204ef1bc12a55cb5d159d49a5dbbb3aaf2bc4ba73e3bb30f204a2fed30db5b31af64736f6c63430008070033
Deployed Bytecode Sourcemap
130:14297:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1684:94;;;;;;;;;;;;;:::i;:::-;;14328:95;;;;;;;;;;;;;:::i;34408:163:1:-;;;;;;;;;;-1:-1:-1;34539:7:1;;34408:163;;;-1:-1:-1;;;;;34539:7:1;;5134:51:2;;-1:-1:-1;;;34547:15:1;;;;;5216:2:2;5201:18;;5194:51;5107:18;34408:163:1;;;;;;;;34156:242;;;;;;;;;;-1:-1:-1;34156:242:1;;;;;:::i;:::-;;:::i;12170:1808:0:-;;;;;;;;;;-1:-1:-1;12170:1808:0;;;;;:::i;:::-;;:::i;:::-;;;5421:14:2;;5414:22;5396:41;;5384:2;5369:18;12170:1808:0;5256:187:2;3472:294:0;;;;;;;;;;-1:-1:-1;3472:294:0;;;;;:::i;:::-;;:::i;1473:171::-;;;;;;;;;;;;;:::i;868:20::-;;;;;;;;;;-1:-1:-1;868:20:0;;;;;;;;3072:184;;;;;;;;;;-1:-1:-1;3072:184:0;;;;;:::i;:::-;;:::i;1499:79:1:-;;;;;;;;;;-1:-1:-1;1537:7:1;1564:6;1499:79;;-1:-1:-1;;;;;1564:6:1;;;3253:51:2;;3241:2;3226:18;1499:79:1;3107:203:2;6892:482:0;;;;;;;;;;-1:-1:-1;6892:482:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;3887:32:2;;;3869:51;;3951:2;3936:18;;3929:34;;;;3842:18;6892:482:0;3695:274:2;1834:92:1;;;;;;;;;;-1:-1:-1;1874:4:1;1912:6;-1:-1:-1;;;;;1912:6:1;1898:10;:20;1834:92;;6692:188:0;;;;;;;;;;-1:-1:-1;6692:188:0;;;;;:::i;:::-;;:::i;7388:1976::-;;;;;;:::i;:::-;;:::i;34590:308:1:-;;;;;;;;;;-1:-1:-1;34590:308:1;;;;;:::i;:::-;;:::i;13986:334:0:-;;;;;;;;;;-1:-1:-1;13986:334:0;;;;;:::i;:::-;;:::i;:::-;;;14156:25:2;;;14144:2;14129:18;13986:334:0;14010:177:2;3777:1509:0;;;;;;;;;;-1:-1:-1;3777:1509:0;;;;;:::i;:::-;;:::i;33921:223:1:-;;;;;;;;;;-1:-1:-1;33921:223:1;;;;;:::i;:::-;;:::i;9378:2784:0:-;;;;;;;;;;-1:-1:-1;9378:2784:0;;;;;:::i;:::-;;:::i;2617:109:1:-;;;;;;;;;;-1:-1:-1;2617:109:1;;;;;:::i;:::-;;:::i;5294:648:0:-;;;;;;;;;;-1:-1:-1;5294:648:0;;;;;:::i;:::-;5379:7;5507:24;;;:13;:24;;;;;;;;5564;;;5603:11;;;5629:24;;;;5668:18;;;;5701;;;;5734:15;;;;5764:14;;;;5793:18;;;;-1:-1:-1;;;;;5793:18:0;;;5826:38;;;:18;;;:38;;;;;;;;5879:11;;;;5905:18;;;;;5564:24;;;;5603:11;;5629:24;;;;;5668:18;;5701;;5734:15;;5764:14;;5793:18;;5879:11;;;;;5905:18;5294:648;;;;;;;;;;;;;;;;;;:::i;1684:94::-;1874:4:1;1912:6;-1:-1:-1;;;;;1912:6:1;1898:10;:20;1703:18;;;;;;1730:8:0::1;:16:::0;;-1:-1:-1;;1730:16:0::1;::::0;;1762:8:::1;::::0;::::1;::::0;1741:5:::1;::::0;1762:8:::1;1684:94::o:0;14328:95::-;1874:4:1;1912:6;-1:-1:-1;;;;;1912:6:1;1898:10;:20;1703:18;;;;;;1537:7;1564:6;-1:-1:-1;;;;;1564:6:1;14385:30:0::1;34156:242:1::0;1874:4;1912:6;-1:-1:-1;;;;;1912:6:1;1898:10;:20;1703:18;;;;;;34253:14;33867:5:::1;33859:4;:13;;;;33838:55;;;::::0;-1:-1:-1;;;33838:55:1;;5650:2:2;33838:55:1::1;::::0;::::1;5632:21:2::0;5689:2;5669:18;;;5662:30;-1:-1:-1;;;5708:18:2;;;5701:46;5764:18;;33838:55:1::1;;;;;;;;;34310:15:::2;::::0;34288:53:::2;::::0;::::2;::::0;;::::2;::::0;-1:-1:-1;;;34310:15:1;::::2;;::::0;34288:53:::2;::::0;;;::::2;-1:-1:-1::0;34352:15:1::2;:32:::0;;::::2;::::0;;::::2;-1:-1:-1::0;;;34352:32:1::2;-1:-1:-1::0;;;;34352:32:1;;::::2;::::0;;;::::2;::::0;;34156:242::o;12170:1808:0:-;12300:12;1850:24;;;:13;:24;;;;;:31;;;12240:9;;1850:31;;1842:67;;;;-1:-1:-1;;;1842:67:0;;;;;;;:::i;:::-;12271:9;2886:11:::1;2851:24;::::0;;;:13:::1;:24;::::0;;;;;;;:31:::1;;::::0;::::1;;::::0;:46;::::1;;;;;;:::i;:::-;;:114;;;-1:-1:-1::0;2915:24:0::1;::::0;;;2950:15:::1;2915:24;::::0;;;;;;;:31:::1;;::::0;::::1;;:50:::0;;::::1;;;;;;:::i;:::-;;2851:114;2843:201;;;::::0;-1:-1:-1;;;2843:201:0;;5995:2:2;2843:201:0::1;::::0;::::1;5977:21:2::0;6034:2;6014:18;;;6007:30;6073:34;6053:18;;;6046:62;6144:30;6124:18;;;6117:58;6192:19;;2843:201:0::1;5793:424:2::0;2843:201:0::1;12330:33:::2;12412:24:::0;;;12447:15:::2;12412:24;::::0;;;;;;:31:::2;;::::0;12330:33;;12447:15;12412:31:::2;;:50:::0;;::::2;;;;;;:::i;:::-;;12408:765;;;-1:-1:-1::0;;12655:24:0::2;::::0;;;:13:::2;:24;::::0;;;;;;;12610:10:::2;12655:57:::0;;;:38:::2;::::0;;::::2;:57:::0;;;;;;;12408:765:::2;;;12769:24;::::0;;;:13:::2;:24;::::0;;;;:38:::2;;::::0;-1:-1:-1;;;;;12769:38:0::2;12755:10;:52;;12747:124;;;::::0;-1:-1:-1;;;12747:124:0;;13452:2:2;12747:124:0::2;::::0;::::2;13434:21:2::0;13491:2;13471:18;;;13464:30;13530:34;13510:18;;;13503:62;-1:-1:-1;;;13581:18:2;;;13574:39;13630:19;;12747:124:0::2;13250:405:2::0;12747:124:0::2;-1:-1:-1::0;;13104:24:0::2;::::0;;;:13:::2;:24;::::0;;;;;;;13059:10:::2;13104:57:::0;;;:38:::2;::::0;;::::2;:57:::0;;;;;;;12408:765:::2;13189:21:::0;13185:62:::2;;13227:8;::::0;::::2;13185:62;13264:24;::::0;;;:13:::2;:24;::::0;;;;;;;-1:-1:-1;;;;;13264:57:0;::::2;::::0;;;:38:::2;::::0;;::::2;:57:::0;;;;;;13257:64;;;13548:40;13264:57;;13548:40;::::2;;;::::0;13571:16;;13548:40;13264:24;13548:40;13571:16;13264:57;13548:40;::::2;;;;;;13543:81;;13604:8;::::0;::::2;13543:81;13703:24;::::0;;;:13:::2;:24;::::0;;;;:38:::2;;::::0;:60:::2;::::0;13746:16;13703:42:::2;:60::i;:::-;13644:24;::::0;;;:13:::2;:24;::::0;;;;:38:::2;;:119:::0;;;13774:101:::2;;13836:27;13853:9;13836:16;:27::i;:::-;13892:56;::::0;;14402:25:2;;;-1:-1:-1;;;;;14463:32:2;;14458:2;14443:18;;14436:60;14512:18;;;14505:34;;;13892:56:0::2;::::0;14390:2:2;14375:18;13892:56:0::2;;;;;;;-1:-1:-1::0;13966:4:0::2;::::0;12170:1808;-1:-1:-1;;;;;12170:1808:0:o;3472:294::-;3532:4;3557:24;;;:13;:24;;;;;:31;;;;;3549:67;;;;-1:-1:-1;;;3549:67:0;;;;;;;:::i;:::-;3653:24;;;;:13;:24;;;;;:35;;;3635:15;:53;:122;;;;-1:-1:-1;3723:24:0;;;;:13;:24;;;;;:34;;;3705:15;:52;3635:122;3627:131;3472:294;-1:-1:-1;;3472:294:0:o;1473:171::-;1874:4:1;1912:6;-1:-1:-1;;;;;1912:6:1;1898:10;:20;1703:18;;;;;;1598:8:0::1;:15:::0;;-1:-1:-1;;1598:15:0::1;1609:4;1598:15;::::0;;1629:7:::1;::::0;::::1;::::0;1598:8:::1;::::0;1629:7:::1;1473:171::o:0;3072:184::-;3185:45;;-1:-1:-1;;;3185:45:0;;;;;14156:25:2;;;3160:4:0;;3242;;-1:-1:-1;;;;;3185:36:0;;;;;14129:18:2;;3185:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3185:62:0;;;3072:184;-1:-1:-1;;;3072:184:0:o;6892:482::-;6973:7;7014:24;;;:13;:24;;;;;:31;;;6973:7;;7014:31;;7006:67;;;;-1:-1:-1;;;7006:67:0;;;;;;;:::i;:::-;7137:1;7087:24;;;:13;:24;;;;;:38;;;-1:-1:-1;;;;;7087:38:0;7084:114;;-1:-1:-1;7181:1:0;;;;-1:-1:-1;6892:482:0;-1:-1:-1;6892:482:0:o;7084:114::-;-1:-1:-1;;7216:24:0;;;;:13;:24;;;;;;;;:38;;;;-1:-1:-1;;;;;7216:38:0;7269:96;;;:38;;;;:96;;;;;;;7216:38;;6892:482::o;6692:188::-;1850:24;;;;:13;:24;;;;;:31;;;6768:9;;1850:31;;1842:67;;;;-1:-1:-1;;;1842:67:0;;;;;;;:::i;:::-;6802:9:::1;2021:7;1537::1::0;1564:6;-1:-1:-1;;;;;1564:6:1;;1499:79;2021:7:0::1;-1:-1:-1::0;;;;;2007:21:0::1;:10;-1:-1:-1::0;;;;;2007:21:0::1;;:95;;;-1:-1:-1::0;2058:24:0::1;::::0;;;:13:::1;:24;::::0;;;;:44:::1;;::::0;-1:-1:-1;;;;;2058:44:0::1;2044:10;:58;2007:95;1999:163;;;::::0;-1:-1:-1;;;1999:163:0;;10325:2:2;1999:163:0::1;::::0;::::1;10307:21:2::0;10364:2;10344:18;;;10337:30;10403:34;10383:18;;;10376:62;-1:-1:-1;;;10454:18:2;;;10447:41;10505:19;;1999:163:0::1;10123:407:2::0;1999:163:0::1;-1:-1:-1::0;;6823:24:0::2;::::0;;;6857:15:::2;6823:24;::::0;;;;;;;:31:::2;;:49:::0;;-1:-1:-1;;6823:49:0::2;::::0;;::::2;::::0;;6692:188::o;7388:1976::-;1850:24;;;;:13;:24;;;;;:31;;;7471:9;;1850:31;;1842:67;;;;-1:-1:-1;;;1842:67:0;;;;;;;:::i;:::-;2352:24:::1;::::0;;;:13:::1;:24;::::0;;;;:44:::1;;::::0;7510:9;;7520:10:::1;::::0;-1:-1:-1;;;;;2352:44:0::1;2343:53:::0;::::1;;2335:96;;;::::0;-1:-1:-1;;;2335:96:0;;8008:2:2;2335:96:0::1;::::0;::::1;7990:21:2::0;8047:2;8027:18;;;8020:30;8086:32;8066:18;;;8059:60;8136:18;;2335:96:0::1;7806:354:2::0;2335:96:0::1;2539:24:::2;::::0;;;:13:::2;:24;::::0;;;;:35:::2;;::::0;7547:9;;2521:15:::2;:53;2513:82;;;::::0;-1:-1:-1;;;2513:82:0;;8720:2:2;2513:82:0::2;::::0;::::2;8702:21:2::0;8759:2;8739:18;;;8732:30;-1:-1:-1;;;8778:18:2;;;8771:46;8834:18;;2513:82:0::2;8518:340:2::0;2513:82:0::2;2702:24:::3;::::0;;;:13:::3;:24;::::0;;;;:34:::3;;::::0;7572:9;;2684:15:::3;:52;2676:80;;;::::0;-1:-1:-1;;;2676:80:0;;7243:2:2;2676:80:0::3;::::0;::::3;7225:21:2::0;7282:2;7262:18;;;7255:30;-1:-1:-1;;;7301:18:2;;;7294:45;7356:18;;2676:80:0::3;7041:339:2::0;2676:80:0::3;7690:13:::4;7655:24:::0;;;:13:::4;:24;::::0;;;;;;:31:::4;;::::0;::::4;;::::0;:48;::::4;;;;;;:::i;:::-;;:113;;;-1:-1:-1::0;7755:13:0::4;7720:24;::::0;;;:13:::4;:24;::::0;;;;;;;:31:::4;;::::0;::::4;;::::0;:48;::::4;;;;;;:::i;:::-;;7655:113;7647:146;;;::::0;-1:-1:-1;;;7647:146:0;;13862:2:2;7647:146:0::4;::::0;::::4;13844:21:2::0;13901:2;13881:18;;;13874:30;-1:-1:-1;;;13920:18:2;;;13913:51;13981:18;;7647:146:0::4;13660:345:2::0;7647:146:0::4;7870:24;::::0;;;:13:::4;:24;::::0;;;;:38:::4;;::::0;7857:9:::4;:51;;::::0;:98:::4;;-1:-1:-1::0;7912:24:0::4;::::0;;;:13:::4;:24;::::0;;;;:38:::4;;::::0;:43;7857:98:::4;7849:155;;;::::0;-1:-1:-1;;;7849:155:0;;10737:2:2;7849:155:0::4;::::0;::::4;10719:21:2::0;10776:2;10756:18;;;10749:30;10815:34;10795:18;;;10788:62;-1:-1:-1;;;10866:18:2;;;10859:33;10909:19;;7849:155:0::4;10535:399:2::0;7849:155:0::4;8025:18;8046:24:::0;;;:13:::4;:24;::::0;;;;;;;8085:10:::4;8046:50:::0;;:38:::4;;:50:::0;;;;;;:62:::4;::::0;8099:9:::4;::::0;8046:62:::4;:::i;:::-;8264:24;::::0;;;:13:::4;:24;::::0;;;;:38:::4;;::::0;8025:83;;-1:-1:-1;;;;;;8264:38:0::4;8250:52:::0;:124;::::4;;;-1:-1:-1::0;8336:24:0::4;::::0;;;:13:::4;:24;::::0;;;;;;;:38:::4;::::0;8322:52;::::4;;8250:124;8249:275;;;-1:-1:-1::0;8431:24:0::4;::::0;;;:13:::4;:24;::::0;;;;;;;8484:38:::4;::::0;::::4;::::0;-1:-1:-1;;;;;8484:38:0::4;8431:92:::0;;:38:::4;;:92:::0;;;;;;8418:105;::::4;8249:275;8241:354;;;::::0;-1:-1:-1;;;8241:354:0;;9903:2:2;8241:354:0::4;::::0;::::4;9885:21:2::0;9942:2;9922:18;;;9915:30;9981:34;9961:18;;;9954:62;-1:-1:-1;;;10032:18:2;;;10025:51;10093:19;;8241:354:0::4;9701:417:2::0;8241:354:0::4;8708:13;8673:24:::0;;;:13:::4;:24;::::0;;;;;;:31:::4;;::::0;::::4;;::::0;:48;::::4;;;;;;:::i;:::-;;8669:206;;;8747:24;::::0;;;:13:::4;:24;::::0;;;;;;:31:::4;;:47:::0;;-1:-1:-1;;8747:47:0::4;8781:13;8747:47:::0;;::::4;::::0;;;8814:49;;::::4;::::0;::::4;::::0;8747:24;;8837:10:::4;::::0;8814:49:::4;:::i;:::-;;;;;;;;8669:206;8929:24;::::0;;;:13:::4;:24;::::0;;;;;;;8968:10:::4;8929:50:::0;;:38:::4;::::0;::::4;:50:::0;;;;;:63;;;9054:24;;;;;:38:::4;;::::0;:53:::4;::::0;9097:9:::4;9054:42;:53::i;:::-;9003:24;::::0;;;:13:::4;:24;::::0;;;;:38:::4;::::0;::::4;:104:::0;;;;9124:38:::4;;::::0;-1:-1:-1;;;;;9124:38:0::4;9166:10;9124:52;9120:180;;9228:24;::::0;;;:13:::4;:24;::::0;;;;:38:::4;;:60:::0;;-1:-1:-1;;;;;;9228:60:0::4;9277:10;9228:60;::::0;;9120:180:::4;9315:41;::::0;;15376:25:2;;;15432:2;15417:18;;15410:34;;;9345:10:0::4;15460:18:2::0;;;15453:60;9315:41:0;;::::4;::::0;;;;15364:2:2;9315:41:0;;::::4;7583:1781;2606:1:::3;2442::::2;1920::::1;;7388:1976:::0;;:::o;34590:308:1:-;34657:16;;34701:9;;;:33;;-1:-1:-1;34714:15:1;;-1:-1:-1;;;34714:15:1;;;;:20;34701:33;34697:81;;;-1:-1:-1;;34756:7:1;;-1:-1:-1;;;;;34756:7:1;;;;-1:-1:-1;34590:308:1:o;34697:81::-;34826:15;;34794:65;;34807:35;;34820:4;;-1:-1:-1;;;34826:15:1;;;;34807:12;:35::i;:::-;34843:15;;34794:12;:65::i;:::-;34878:7;;-1:-1:-1;;;;;34878:7:1;;34788:71;;-1:-1:-1;34590:308:1;-1:-1:-1;;34590:308:1:o;13986:334:0:-;14116:7;1850:24;;;:13;:24;;;;;:31;;;14087:9;;1850:31;;1842:67;;;;-1:-1:-1;;;1842:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14144:20:0;::::1;14141:108;;14187:24;::::0;;;:13:::1;:24;::::0;;;;;;;14226:10:::1;14187:50:::0;;:38:::1;;:50:::0;;;;;;;-1:-1:-1;14180:57:0::1;;14141:108;14266:24;::::0;;;:13:::1;:24;::::0;;;;;;;-1:-1:-1;;;;;14266:46:0;::::1;::::0;;:38:::1;;:46:::0;;;;;;;-1:-1:-1;1920:1:0::1;13986:334:::0;;;;;:::o;3777:1509::-;4025:24;;;;:13;:24;;;;;:31;;;;;4024:32;4016:64;;;;-1:-1:-1;;;4016:64:0;;12748:2:2;4016:64:0;;;12730:21:2;12787:2;12767:18;;;12760:30;-1:-1:-1;;;12806:18:2;;;12799:50;12866:18;;4016:64:0;12546:344:2;4016:64:0;4121:10;6896:20:1;6944:8;4093:89:0;;;;-1:-1:-1;;;4093:89:0;;6424:2:2;4093:89:0;;;6406:21:2;6463:2;6443:18;;;6436:30;6502:34;6482:18;;;6475:62;-1:-1:-1;;;6553:18:2;;;6546:44;6607:19;;4093:89:0;6222:410:2;4093:89:0;4216:8;4203:9;:21;4195:70;;;;-1:-1:-1;;;4195:70:0;;11557:2:2;4195:70:0;;;11539:21:2;11596:2;11576:18;;;11569:30;11635:34;11615:18;;;11608:62;-1:-1:-1;;;11686:18:2;;;11679:34;11730:19;;4195:70:0;11355:400:2;4195:70:0;4295:21;:15;4313:3;4295:21;:::i;:::-;4284:8;:32;4276:98;;;;-1:-1:-1;;;4276:98:0;;7587:2:2;4276:98:0;;;7569:21:2;7626:2;7606:18;;;7599:30;7665:34;7645:18;;;7638:62;-1:-1:-1;;;7716:18:2;;;7709:50;7776:19;;4276:98:0;7385:416:2;4276:98:0;4395:51;4408:18;4428:10;4440:5;4395:12;:51::i;:::-;4387:120;;;;-1:-1:-1;;;4387:120:0;;11141:2:2;4387:120:0;;;11123:21:2;11180:2;11160:18;;;11153:30;11219:34;11199:18;;;11192:62;-1:-1:-1;;;11270:18:2;;;11263:45;11325:19;;4387:120:0;10939:411:2;4387:120:0;4528:43;4546:18;4565:5;4528:17;:43::i;:::-;4520:125;;;;-1:-1:-1;;;4520:125:0;;11962:2:2;4520:125:0;;;11944:21:2;12001:2;11981:18;;;11974:30;12040:34;12020:18;;;12013:62;12111:26;12091:18;;;12084:54;12155:19;;4520:125:0;11760:420:2;4520:125:0;4689:1;4674:12;:16;:48;;;;;4710:12;4694;:28;;4674:48;4666:87;;;;-1:-1:-1;;;4666:87:0;;13097:2:2;4666:87:0;;;13079:21:2;13136:2;13116:18;;;13109:30;13175:28;13155:18;;;13148:56;13221:18;;4666:87:0;12895:350:2;4666:87:0;4766:25;4794:24;;;:13;:24;;;;;;;;4829:44;;-1:-1:-1;;;;;4829:44:0;;-1:-1:-1;;;;;;4829:44:0;;;;;;-1:-1:-1;4884:12:0;;;:18;;;4913:25;;;:36;;;;;4939:10;4913:36;;;;4960:19;;;:32;;;5003:19;;;:32;;;5046:19;;;:23;;;5080:16;;;:26;;;5117:15;;;:24;;;5154:12;;;:26;;-1:-1:-1;;5154:26:0;;;;;;5191:12;;;:17;;;;;;;;;;;5226:52;4794:24;;5226:52;;;;4794:24;;5257:4;;4766:25;5226:52;:::i;:::-;;;;;;;;4005:1281;3777:1509;;;;;;;:::o;33921:223:1:-;1874:4;1912:6;-1:-1:-1;;;;;1912:6:1;1898:10;:20;1703:18;;;;;;-1:-1:-1;;;;;34003:20:1;::::1;33995:68;;;::::0;-1:-1:-1;;;33995:68:1;;6839:2:2;33995:68:1::1;::::0;::::1;6821:21:2::0;6878:2;6858:18;;;6851:30;6917:34;6897:18;;;6890:62;-1:-1:-1;;;6968:18:2;;;6961:33;7011:19;;33995:68:1::1;6637:399:2::0;33995:68:1::1;34093:7;::::0;34079:29:::1;::::0;-1:-1:-1;;;;;34079:29:1;;::::1;::::0;34093:7:::1;::::0;34079:29:::1;::::0;34093:7:::1;::::0;34079:29:::1;34119:7;:16:::0;;-1:-1:-1;;;;;;34119:16:1::1;-1:-1:-1::0;;;;;34119:16:1;;;::::1;::::0;;;::::1;::::0;;33921:223::o;9378:2784:0:-;1874:4:1;1912:6;-1:-1:-1;;;;;1912:6:1;1898:10;:20;1703:18;;;;;;9564:24:0::1;::::0;;;:13:::1;:24;::::0;;;;:31:::1;;::::0;::::1;;9563:32;::::0;:92:::1;;-1:-1:-1::0;9644:11:0::1;9609:24;::::0;;;:13:::1;:24;::::0;;;;;;;:31:::1;;::::0;::::1;;::::0;:46;::::1;;;;;;:::i;:::-;;9563:92;9559:140;;;9378:2784:::0;:::o;9559:140::-:1;9768:24;::::0;;;9803:15:::1;9768:24;::::0;;;;;;;:31:::1;;::::0;::::1;;:50:::0;;::::1;;;;;;:::i;:::-;;:112;;;-1:-1:-1::0;9867:13:0::1;9832:24;::::0;;;:13:::1;:24;::::0;;;;;;;:31:::1;;::::0;::::1;;::::0;:48;::::1;;;;;;:::i;:::-;;9768:112;:173;;;-1:-1:-1::0;9928:13:0::1;9893:24:::0;;;:13:::1;:24;::::0;;;;;;:31:::1;;::::0;::::1;;::::0;:48;::::1;;;;;;:::i;:::-;;9768:173;9767:249;;;;-1:-1:-1::0;9982:24:0::1;::::0;;;:13:::1;:24;::::0;;;;:34:::1;;::::0;9964:15:::1;:52;9767:249;9759:308;;;::::0;-1:-1:-1;;;9759:308:0;;9497:2:2;9759:308:0::1;::::0;::::1;9479:21:2::0;9536:2;9516:18;;;9509:30;9575:34;9555:18;;;9548:62;-1:-1:-1;;;9626:18:2;;;9619:35;9671:19;;9759:308:0::1;9295:401:2::0;9759:308:0::1;10125:13;10090:24;::::0;;;:13:::1;:24;::::0;;;;;;;:31:::1;;::::0;::::1;;::::0;:48;::::1;;;;;;:::i;:::-;;10087:1838;;;10163:25;10251:24:::0;;;:13:::1;:24;::::0;;;;;;;:44:::1;::::0;::::1;::::0;10372:38:::1;::::0;::::1;::::0;-1:-1:-1;;;;;10372:38:0;;::::1;10319:92:::0;;:38:::1;::::0;::::1;:92:::0;;;;;;;10542:96;;;;10712:24;;;;;;;;:38:::1;::::0;;::::1;::::0;10251:44;::::1;::::0;10319:92;10712:49:::1;::::0;10319:92;10712:42:::1;:49::i;:::-;10653:24;::::0;;;:13:::1;:24;::::0;;;;;;:38:::1;::::0;::::1;:108:::0;;;;10800:44;;10881::::1;::::0;::::1;::::0;10944:38:::1;::::0;::::1;::::0;10800:44;11001:31;;::::1;::::0;10792:255;;-1:-1:-1;;;10792:255:0;;-1:-1:-1;;;;;10881:44:0;;::::1;10792:255;::::0;::::1;3555:34:2::0;10944:38:0;;::::1;3605:18:2::0;;;3598:43;3657:18;;;3650:34;;;;10800:44:0::1;::::0;10792:70:::1;::::0;3490:18:2;;10792:255:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;11063:15:0::1;11125:24:::0;;;:13:::1;:24;::::0;;;;;:44;;;11183:31;;::::1;::::0;11098:123;;-1:-1:-1;;;11098:123:0;;::::1;::::0;::::1;15095:25:2::0;;;;15136:18;;;15129:34;;;11063:15:0;;-1:-1:-1;11063:15:0;;-1:-1:-1;;;;;11125:44:0::1;::::0;11098:84:::1;::::0;15068:18:2;;11098:123:0::1;::::0;::::1;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11062:159;;;;11237:16;11254:11:::0;11269:19:::1;11282:5;11269:12;:19::i;:::-;11236:52:::0;;-1:-1:-1;11236:52:0;-1:-1:-1;11319:13:0::1;11236:52:::0;11319:7;:13:::1;:::i;:::-;11311:5;:21;11303:96;;;::::0;-1:-1:-1;;;11303:96:0;;9065:2:2;11303:96:0::1;::::0;::::1;9047:21:2::0;9104:2;9084:18;;;9077:30;9143:34;9123:18;;;9116:62;9214:33;9194:18;;;9187:61;9265:19;;11303:96:0::1;8863:427:2::0;11303:96:0::1;-1:-1:-1::0;;;;;11417:21:0;::::1;::::0;;::::1;::::0;:35:::1;;;11451:1;11442:7;:10;11417:35;:54;;;;;11466:5;11456:7;:15;11417:54;11414:186;;;11505:34;::::0;-1:-1:-1;;;;;11505:25:0;::::1;::::0;:34;::::1;;;::::0;11531:7;;11505:34:::1;::::0;;;11531:7;11505:25;:34;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;11566:18:0::1;:5:::0;11576:7;11566:9:::1;:18::i;:::-;11558:26;;11414:186;11624:1;11618:3;:7;:22;;;;;11635:5;11629:3;:11;11618:22;11615:147;;;11674:31;::::0;-1:-1:-1;;;;;11674:26:0;::::1;::::0;:31;::::1;;;::::0;11701:3;;11674:31:::1;::::0;;;11701:3;11674:26;:31;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;11732:14:0::1;:5:::0;11742:3;11732:9:::1;:14::i;:::-;11724:22;;11615:147;11820:25;::::0;-1:-1:-1;;;;;11820:18:0;::::1;::::0;:25;::::1;;;::::0;11839:5;;11820:25:::1;::::0;;;11839:5;11820:18;:25;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;11901:7;11895:5;11885:9;11865:48;11909:3;11865:48;;;;14156:25:2::0;;14144:2;14129:18;;14010:177;11865:48:0::1;;;;;;;;10148:1777;;;;;;10087:1838;11935:24;::::0;;;:13:::1;:24;::::0;;;;;;:31:::1;;:45:::0;;-1:-1:-1;;11935:45:0::1;11969:11;11935:45:::0;;::::1;::::0;;;11996:47;;::::1;::::0;::::1;::::0;11935:24;;12019:10:::1;::::0;11996:47:::1;:::i;:::-;;;;;;;;12057:24;::::0;;;:13:::1;:24;::::0;;;;:38:::1;;::::0;12054:101:::1;;12116:27;12133:9;12116:16;:27::i;:::-;9378:2784:::0;:::o;2617:109:1:-;1874:4;1912:6;-1:-1:-1;;;;;1912:6:1;1898:10;:20;1703:18;;;;;;2690:28:::1;2709:8;2690:18;:28::i;16773:98::-:0;16831:7;16858:5;16862:1;16858;:5;:::i;:::-;16851:12;16773:98;-1:-1:-1;;;16773:98:1:o;5950:734:0:-;1850:24;;;;:13;:24;;;;;:31;;;6030:9;;1850:31;;1842:67;;;;-1:-1:-1;;;1842:67:0;;;;;;;:::i;:::-;6060:24:::1;::::0;;;:13:::1;:24;::::0;;;;:38:::1;;::::0;:43;6052:102:::1;;;::::0;-1:-1:-1;;;6052:102:0;;12387:2:2;6052:102:0::1;::::0;::::1;12369:21:2::0;;;12406:18;;;12399:30;12465:34;12445:18;;;12438:62;12517:18;;6052:102:0::1;12185:356:2::0;6052:102:0::1;-1:-1:-1::0;6652:24:0::1;::::0;;;:13:::1;:24;::::0;;;;;;6645:31;;-1:-1:-1;;;;;;6645:31:0;;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;-1:-1:-1;;6645:31:0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;::::1;;::::0;;;;::::1;::::0;;5950:734::o;16392:98:1:-;16450:7;16477:5;16481:1;16477;:5;:::i;17130:98::-;17188:7;17215:5;17219:1;17215;:5;:::i;17529:98::-;17587:7;17614:5;17618:1;17614;:5;:::i;3264:200:0:-;3410:41;;-1:-1:-1;;;3410:41:0;;;;;14156:25:2;;;3369:4:0;;-1:-1:-1;;;;;3410:32:0;;;;;14129:18:2;;3410:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3396:55:0;:10;-1:-1:-1;;;;;3396:55:0;;3388:65;;3264:200;;;;;:::o;2876:187:1:-;-1:-1:-1;;;;;2950:22:1;;2942:31;;;;;;3010:6;;;2989:38;;-1:-1:-1;;;;;2989:38:1;;;;3010:6;;;2989:38;;;3038:6;:17;;-1:-1:-1;;;;;;3038:17:1;-1:-1:-1;;;;;3038:17:1;;;;;;;;;;2876:187::o;14:247:2:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;266:251::-;336:6;389:2;377:9;368:7;364:23;360:32;357:52;;;405:1;402;395:12;357:52;437:9;431:16;456:31;481:5;456:31;:::i;782:315::-;850:6;858;911:2;899:9;890:7;886:23;882:32;879:52;;;927:1;924;917:12;879:52;966:9;953:23;985:31;1010:5;985:31;:::i;:::-;1035:5;1087:2;1072:18;;;;1059:32;;-1:-1:-1;;;782:315:2:o;1102:312::-;1181:6;1189;1242:2;1230:9;1221:7;1217:23;1213:32;1210:52;;;1258:1;1255;1248:12;1210:52;1290:9;1284:16;1309:31;1334:5;1309:31;:::i;:::-;1404:2;1389:18;;;;1383:25;1359:5;;1383:25;;-1:-1:-1;;;1102:312:2:o;1419:180::-;1478:6;1531:2;1519:9;1510:7;1506:23;1502:32;1499:52;;;1547:1;1544;1537:12;1499:52;-1:-1:-1;1570:23:2;;1419:180;-1:-1:-1;1419:180:2:o;1604:315::-;1672:6;1680;1733:2;1721:9;1712:7;1708:23;1704:32;1701:52;;;1749:1;1746;1739:12;1701:52;1785:9;1772:23;1762:33;;1845:2;1834:9;1830:18;1817:32;1858:31;1883:5;1858:31;:::i;:::-;1908:5;1898:15;;;1604:315;;;;;:::o;1924:659::-;2037:6;2045;2053;2061;2069;2077;2085;2138:3;2126:9;2117:7;2113:23;2109:33;2106:53;;;2155:1;2152;2145:12;2106:53;2191:9;2178:23;2168:33;;2251:2;2240:9;2236:18;2223:32;2264:31;2289:5;2264:31;:::i;:::-;1924:659;;2314:5;;-1:-1:-1;;;;2366:2:2;2351:18;;2338:32;;2417:2;2402:18;;2389:32;;2468:3;2453:19;;2440:33;;-1:-1:-1;2520:3:2;2505:19;;2492:33;;-1:-1:-1;2572:3:2;2557:19;;;2544:33;;-1:-1:-1;1924:659:2:o;2588:276::-;2646:6;2699:2;2687:9;2678:7;2674:23;2670:32;2667:52;;;2715:1;2712;2705:12;2667:52;2754:9;2741:23;2804:10;2797:5;2793:22;2786:5;2783:33;2773:61;;2830:1;2827;2820:12;2869:233;2946:1;2939:5;2936:12;2926:143;;2991:10;2986:3;2982:20;2979:1;2972:31;3026:4;3023:1;3016:15;3054:4;3051:1;3044:15;2926:143;3078:18;;2869:233::o;3974:983::-;-1:-1:-1;;;;;4464:15:2;;;4446:34;;4511:2;4496:18;;4489:34;;;4559:15;;;4554:2;4539:18;;4532:43;4606:2;4591:18;;4584:34;;;4649:3;4634:19;;4627:35;;;4426:3;4678:19;;4671:35;;;4737:3;4722:19;;4715:35;;;4787:15;;4781:3;4766:19;;4759:44;4834:3;4819:19;;4812:35;;;4395:3;4380:19;;4856:50;4901:3;4886:19;;4878:6;4856:50;:::i;:::-;4943:7;4937:3;4926:9;4922:19;4915:36;3974:983;;;;;;;;;;;;;;:::o;8165:348::-;8367:2;8349:21;;;8406:2;8386:18;;;8379:30;8445:26;8440:2;8425:18;;8418:54;8504:2;8489:18;;8165:348::o;14550:366::-;14758:25;;;-1:-1:-1;;;;;14819:32:2;;14814:2;14799:18;;14792:60;14746:2;14731:18;;14861:49;14906:2;14891:18;;14883:6;14861:49;:::i;:::-;14550:366;;;;;;:::o;15524:128::-;15564:3;15595:1;15591:6;15588:1;15585:13;15582:39;;;15601:18;;:::i;:::-;-1:-1:-1;15637:9:2;;15524:128::o;15657:217::-;15697:1;15723;15713:132;;15767:10;15762:3;15758:20;15755:1;15748:31;15802:4;15799:1;15792:15;15830:4;15827:1;15820:15;15713:132;-1:-1:-1;15859:9:2;;15657:217::o;15879:168::-;15919:7;15985:1;15981;15977:6;15973:14;15970:1;15967:21;15962:1;15955:9;15948:17;15944:45;15941:71;;;15992:18;;:::i;:::-;-1:-1:-1;16032:9:2;;15879:168::o;16052:125::-;16092:4;16120:1;16117;16114:8;16111:34;;;16125:18;;:::i;:::-;-1:-1:-1;16162:9:2;;16052:125::o;16182:127::-;16243:10;16238:3;16234:20;16231:1;16224:31;16274:4;16271:1;16264:15;16298:4;16295:1;16288:15;16314:127;16375:10;16370:3;16366:20;16363:1;16356:31;16406:4;16403:1;16396:15;16430:4;16427:1;16420:15;16446:131;-1:-1:-1;;;;;16521:31:2;;16511:42;;16501:70;;16567:1;16564;16557:12
Swarm Source
ipfs://4ef1bc12a55cb5d159d49a5dbbb3aaf2bc4ba73e3bb30f204a2fed30db5b31af
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,255.25 | 0.0002 | $0.65105 |
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.