Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 224 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
End Auction | 13248770 | 1230 days ago | IN | 0 ETH | 0.00580535 | ||||
Bid | 13248613 | 1230 days ago | IN | 0 ETH | 0.00151109 | ||||
Bid | 13248613 | 1230 days ago | IN | 0 ETH | 0.00137568 | ||||
Bid | 13248613 | 1230 days ago | IN | 0 ETH | 0.012508 | ||||
End Auction | 13248524 | 1230 days ago | IN | 0 ETH | 0.00526942 | ||||
Bid | 13248465 | 1230 days ago | IN | 0 ETH | 0.01214634 | ||||
End Auction | 13248218 | 1230 days ago | IN | 0 ETH | 0.00747192 | ||||
Bid | 13248208 | 1230 days ago | IN | 0 ETH | 0.00142912 | ||||
Bid | 13248204 | 1230 days ago | IN | 0 ETH | 0.00160629 | ||||
Bid | 13248204 | 1230 days ago | IN | 0 ETH | 0.008912 | ||||
Bid | 13248199 | 1230 days ago | IN | 0 ETH | 0.04578135 | ||||
Bid | 13248198 | 1230 days ago | IN | 0 ETH | 0.01215657 | ||||
Bid | 13248196 | 1230 days ago | IN | 0 ETH | 0.00188114 | ||||
Bid | 13248192 | 1230 days ago | IN | 0 ETH | 0.01262088 | ||||
Bid | 13248126 | 1230 days ago | IN | 0 ETH | 0.01395066 | ||||
Bid | 13248088 | 1230 days ago | IN | 0 ETH | 0.00187658 | ||||
Bid | 13248087 | 1230 days ago | IN | 0 ETH | 0.01324983 | ||||
Bid | 13248078 | 1230 days ago | IN | 0 ETH | 0.01238003 | ||||
Bid | 13247997 | 1230 days ago | IN | 0 ETH | 0.01262443 | ||||
End Auction | 13247962 | 1230 days ago | IN | 0 ETH | 0.00802994 | ||||
Bid | 13247950 | 1230 days ago | IN | 0 ETH | 0.01306168 | ||||
Bid | 13247913 | 1230 days ago | IN | 0 ETH | 0.01148102 | ||||
Bid | 13247826 | 1230 days ago | IN | 0 ETH | 0.01267547 | ||||
End Auction | 13247818 | 1230 days ago | IN | 0 ETH | 0.00642479 | ||||
Bid | 13247670 | 1230 days ago | IN | 0 ETH | 0.00268772 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
BWPAuction
Compiler Version
v0.8.6+commit.11564f7e
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; import "openzeppelin-solidity/contracts/interfaces/IERC20.sol"; import "openzeppelin-solidity/contracts/utils/math/SafeMath.sol"; import "./utils/OwnerPausable.sol"; import "openzeppelin-solidity/contracts/interfaces/IERC721.sol"; import "openzeppelin-solidity/contracts/interfaces/IERC721Receiver.sol"; contract BWPAuction is OwnerPausable, IERC721Receiver { using SafeMath for uint256; enum AuctionStatus { Normal, Ended, Canceled } struct AuctionInfo { address seller; address nft; uint itemId; uint price; address bidder; uint createdAt; uint updatedAt; uint start; uint end; AuctionStatus status; } struct BidInfo { uint auctionId; uint itemId; uint price; address bidder; uint bidAt; } AuctionInfo[] public auctions; BidInfo[] public bids; uint256 public bidPricePercent; mapping(uint256 => uint256[]) public bidsOfAuction; mapping(address => uint256[]) public bidsOfUser; mapping(address => uint256) public bidCount; mapping(address => uint256) public wonCount; address private immutable _bwp; // Equals to `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector` uint private constant MIN_BID_PRICE_PERCENT = 101; uint private constant MAX_BID_PRICE_PERCNET = 120; bytes4 private constant _ERC721_RECEIVED = 0x150b7a02; event CreateAuction(address indexed sender, uint itemId, uint start, uint end); event Bid(address indexed sender, uint auctionId, uint price, uint bidAt); event CancelAuction(address indexed sender, uint auctionId); event EndAuction(address indexed sender, uint auctionId); event SetBidPricePercent(address indexed sender, uint _bidPricePercent); constructor (address __bwp, uint256 _bidPricePercent) { require(__bwp != address(0), "Auction: Invalid address"); require(_bidPricePercent >= MIN_BID_PRICE_PERCENT && _bidPricePercent <= MAX_BID_PRICE_PERCNET, "Auction: Invalid Bid Price Percent"); _bwp = __bwp; bidPricePercent = _bidPricePercent; } modifier validId(uint _auctionId) { require(_auctionId < auctions.length, "Auction: Invalid Auction Id"); _; } modifier validSeller(uint _auctionId) { AuctionInfo storage auction = auctions[_auctionId]; require(auction.seller == _msgSender(), "Auction: Invalid Permission"); _; } /** * Create a new auction * * @param _nft address of nft * @param _itemId token id of nft * @param _price start price * @param _start start date * @param _end end date */ function createAuction(address _nft, uint _itemId, uint _price, uint _start, uint _end) external whenNotPaused { require(_start < _end, "Auction: Period is not valid"); AuctionInfo memory newAuction = AuctionInfo( _msgSender(), _nft, _itemId, _price, address(0), block.timestamp, block.timestamp, _start, _end, AuctionStatus.Normal ); auctions.push(newAuction); IERC721(_nft).safeTransferFrom(_msgSender(), address(this), _itemId); emit CreateAuction(_msgSender(), _itemId, _start, _end); } /** * Bid to an auction * * @param _auctionId auction id to bid * @param _price auction price to bid */ function bid(uint _auctionId, uint _price) external validId(_auctionId) whenNotPaused { AuctionInfo storage auction = auctions[_auctionId]; require(_msgSender() != auction.seller, "Auction: Invalid Bidder"); require(_msgSender() != auction.bidder, "Auction: Invalid Bidder"); require(block.timestamp >= auction.start, "Auction: Auction is not started"); require(block.timestamp <= auction.end, "Auction: Auction is Over"); require(_price > auction.price.mul(bidPricePercent).div(100), "Auction: Price is low"); require(auction.status == AuctionStatus.Normal, "Auction: Bid is not allowed"); // Require bidder is not highest bidder on another auction // require(bidCount[_msgSender()] == 0, "Auction: Bidder can only win 1 shop at a time"); if (auction.bidder != address(0)) { bidCount[auction.bidder] = bidCount[auction.bidder].sub(1); require(IERC20(_bwp).transfer(auction.bidder, auction.price), "Auction: BWP transfer failed"); } bidCount[_msgSender()] = bidCount[_msgSender()].add(1); auction.bidder = _msgSender(); auction.price = _price; auction.updatedAt = block.timestamp; BidInfo memory newBid = BidInfo(_auctionId, auction.itemId, _price, _msgSender(), block.timestamp); bids.push(newBid); bidsOfAuction[_auctionId].push(bids.length - 1); bidsOfUser[_msgSender()].push(bids.length - 1); require(IERC20(_bwp).transferFrom(_msgSender(), address(this), _price), "Auction: BWP transfer failed"); emit Bid(_msgSender(), _auctionId, _price, block.timestamp); } /** * Cancel an auction * * @param _auctionId auction id to cancel */ function cancelAuction(uint _auctionId) external validId(_auctionId) validSeller(_auctionId) whenNotPaused { AuctionInfo storage auction = auctions[_auctionId]; require(auction.start > block.timestamp, "Auction: Not Cancelable"); require(bidsOfAuction[_auctionId].length == 0, "Auction: There are bids already"); auction.status = AuctionStatus.Canceled; IERC721(auction.nft).safeTransferFrom(address(this), _msgSender(), auction.itemId); emit CancelAuction(_msgSender(), _auctionId); } /** * Set percent of price to bid higher than current price * * @param _bidPricePercent percent */ function setBidPricePercent(uint _bidPricePercent) external onlyOwner { bidPricePercent = _bidPricePercent; emit SetBidPricePercent(_msgSender(), _bidPricePercent); } /** * Return BWP token address * * @return bwp token address */ function bwp() external view returns (address) { return _bwp; } /** * Return total number of auctions * * @return number of auctions */ function getAuctionCount() external view returns (uint256) { return auctions.length; } /** * Return total number of auctions * * @return number of auctions */ function getTotalBidCount() external view returns (uint256) { return bids.length; } /** * End an auction * * @param _auctionId auction id to end */ function endAuction(uint _auctionId) external validId(_auctionId) validSeller(_auctionId) { AuctionInfo storage auction = auctions[_auctionId]; require(auction.end < block.timestamp, "Auction: Not ended yet"); auction.status = AuctionStatus.Ended; if(auction.bidder != address(0)) { require(IERC20(_bwp).transfer(auction.seller, auction.price), "Auction: BWP transfer failed"); IERC721(auction.nft).safeTransferFrom(address(this), auction.bidder, auction.itemId); } wonCount[auction.bidder] = wonCount[auction.bidder].add(1); emit EndAuction(_msgSender(), _auctionId); } /** * Get auction ids on which user won * * @param account address of user * * @return auctions ids */ function getAuctionIdsWon(address account) external view returns (uint256[] memory) { uint256 _wonCount = wonCount[account]; if (_wonCount == 0) { // Return an empty array return new uint256[](0); } else { uint256[] memory _auctionIds = new uint256[](_wonCount); uint256 wonIndex = 0; uint256 _auctionId; uint256 auctionLength = auctions.length; for (_auctionId = 0; _auctionId <= auctionLength-1; _auctionId++) { if ((auctions[_auctionId].bidder == account) && (auctions[_auctionId].status == AuctionStatus.Ended)) { _auctionIds[wonIndex] = _auctionId; wonIndex++; } } return _auctionIds; } } /** * Get auction ids on which user bid * * @param account address of user * * @return auctions ids */ function getAuctionIdsBid(address account) external view returns (uint256[] memory) { uint256 _bidCount = bidCount[account]; if (_bidCount == 0) { // Return an empty array return new uint256[](0); } else { uint256[] memory _auctionIds = new uint256[](_bidCount); uint256 bidIndex = 0; uint256 _auctionId; uint256 auctionLength = auctions.length; for (_auctionId = 0; _auctionId <= auctionLength - 1; _auctionId++) { if ((auctions[_auctionId].bidder == account) && (auctions[_auctionId].status == AuctionStatus.Normal)) { _auctionIds[bidIndex] = _auctionId; bidIndex++; } } return _auctionIds; } } /** * Get token ids on which user won * * @param account address of user * * @return auctions ids */ function getItemIdsWon(address account) external view returns (uint256[] memory) { uint256 _wonCount = wonCount[account]; if (_wonCount == 0) { // Return an empty array return new uint256[](0); } else { uint256[] memory _itemIds = new uint256[](_wonCount); uint256 wonIndex = 0; uint256 _auctionId; uint256 auctionLength = auctions.length; for (_auctionId = 0; _auctionId <= auctionLength - 1; _auctionId++) { if ((auctions[_auctionId].bidder == account) && (auctions[_auctionId].status == AuctionStatus.Ended)) { _itemIds[wonIndex] = auctions[_auctionId].itemId; wonIndex++; } } return _itemIds; } } /** * Get token ids on which user bid * * @param account address of user * * @return auctions ids */ function getItemIdsBid(address account) external view returns (uint256[] memory) { uint256 _bidCount = bidCount[account]; if (_bidCount == 0) { // Return an empty array return new uint256[](0); } else { uint256[] memory _itemIds = new uint256[](_bidCount); uint256 bidIndex = 0; uint256 _auctionId; uint256 auctionLength = auctions.length; for (_auctionId = 0; _auctionId <= auctionLength - 1; _auctionId++) { if ((auctions[_auctionId].bidder == account) && (auctions[_auctionId].status == AuctionStatus.Normal)) { _itemIds[bidIndex] = auctions[_auctionId].itemId; bidIndex++; } } return _itemIds; } } /** * Get bids of an auction * * @param _auctionId auction id * * @return bids */ function getAuctionActivities(uint256 _auctionId) external view returns (uint256[] memory) { return bidsOfAuction[_auctionId]; } /** * Get bids of user * * @param account address of user * * @return bids */ function getUserBidding(address account) external view returns (uint256[] memory) { return bidsOfUser[account]; } function onERC721Received(address, address, uint256, bytes calldata) external override pure returns (bytes4) { return _ERC721_RECEIVED; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../token/ERC20/IERC20.sol";
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../token/ERC721/IERC721.sol";
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../token/ERC721/IERC721Receiver.sol";
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // 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; } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "openzeppelin-solidity/contracts/access/Ownable.sol"; import "openzeppelin-solidity/contracts/security/Pausable.sol"; /** * @title OwnerPausable * @notice An ownable contract allows the owner to pause and unpause the * contract without a delay. * @dev Only methods using the provided modifiers will be paused. */ contract OwnerPausable is Ownable, Pausable { /** * @notice Pause the contract. Revert if already paused. */ function pause() external onlyOwner { Pausable._pause(); } /** * @notice Unpause the contract. Revert if already unpaused. */ function unpause() external onlyOwner { Pausable._unpause(); } }
{ "remappings": [], "optimizer": { "enabled": false, "runs": 200 }, "evmVersion": "berlin", "libraries": {}, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"__bwp","type":"address"},{"internalType":"uint256","name":"_bidPricePercent","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"auctionId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bidAt","type":"uint256"}],"name":"Bid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"auctionId","type":"uint256"}],"name":"CancelAuction","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"itemId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"start","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"end","type":"uint256"}],"name":"CreateAuction","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"auctionId","type":"uint256"}],"name":"EndAuction","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"_bidPricePercent","type":"uint256"}],"name":"SetBidPricePercent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"auctions","outputs":[{"internalType":"address","name":"seller","type":"address"},{"internalType":"address","name":"nft","type":"address"},{"internalType":"uint256","name":"itemId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"address","name":"bidder","type":"address"},{"internalType":"uint256","name":"createdAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"},{"internalType":"enum BWPAuction.AuctionStatus","name":"status","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_auctionId","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"bid","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bidCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bidPricePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"bids","outputs":[{"internalType":"uint256","name":"auctionId","type":"uint256"},{"internalType":"uint256","name":"itemId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"address","name":"bidder","type":"address"},{"internalType":"uint256","name":"bidAt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"bidsOfAuction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"bidsOfUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bwp","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_auctionId","type":"uint256"}],"name":"cancelAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_nft","type":"address"},{"internalType":"uint256","name":"_itemId","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_start","type":"uint256"},{"internalType":"uint256","name":"_end","type":"uint256"}],"name":"createAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_auctionId","type":"uint256"}],"name":"endAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_auctionId","type":"uint256"}],"name":"getAuctionActivities","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuctionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAuctionIdsBid","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAuctionIdsWon","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getItemIdsBid","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getItemIdsWon","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalBidCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getUserBidding","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bidPricePercent","type":"uint256"}],"name":"setBidPricePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wonCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a06040523480156200001157600080fd5b506040516200425e3803806200425e833981810160405281019062000037919062000279565b620000576200004b6200017f60201b60201c565b6200018760201b60201c565b60008060146101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620000e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000db9062000330565b60405180910390fd5b60658110158015620000f7575060788111155b62000139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000130906200030e565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505080600381905550505062000452565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000815190506200025c816200041e565b92915050565b600081519050620002738162000438565b92915050565b60008060408385031215620002935762000292620003a1565b5b6000620002a3858286016200024b565b9250506020620002b68582860162000262565b9150509250929050565b6000620002cf60228362000352565b9150620002dc82620003a6565b604082019050919050565b6000620002f660188362000352565b91506200030382620003f5565b602082019050919050565b600060208201905081810360008301526200032981620002c0565b9050919050565b600060208201905081810360008301526200034b81620002e7565b9050919050565b600082825260208201905092915050565b6000620003708262000377565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600080fd5b7f41756374696f6e3a20496e76616c69642042696420507269636520506572636560008201527f6e74000000000000000000000000000000000000000000000000000000000000602082015250565b7f41756374696f6e3a20496e76616c696420616464726573730000000000000000600082015250565b620004298162000363565b81146200043557600080fd5b50565b620004438162000397565b81146200044f57600080fd5b50565b60805160601c613dd86200048660003960008181610b7b015281816110650152818161142c01526127260152613dd86000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80635c975abb116100f95780638da5cb5b116100975780639873a714116100715780639873a7141461053a578063b9a2de3a1461056a578063c44e664014610586578063f2fde38b146105a4576101c4565b80638da5cb5b146104e4578063961c9ae41461050257806396b5a7551461051e576101c4565b80637fb04d4e116100d35780637fb04d4e1461045c578063829f566c1461047a5780638456cb59146104aa578063892434c9146104b4576101c4565b80635c975abb14610404578063715018a614610422578063728f09991461042c576101c4565b80634e22b965116101665780635753d4b7116101405780635753d4b71461036a5780635919db7c14610388578063598647f8146103b85780635c4d4e1c146103d4576101c4565b80634e22b965146102d1578063538d91aa14610301578063571a26a014610331576101c4565b806335311515116101a257806335311515146102475780633f4ba83a14610277578063408169b2146102815780634423c5f11461029d576101c4565b8063077853b1146101c9578063150b7a02146101e75780632fbe693614610217575b600080fd5b6101d16105c0565b6040516101de91906136a9565b60405180910390f35b61020160048036038101906101fc9190612e5d565b6105cd565b60405161020e919061348e565b60405180910390f35b610231600480360381019061022c9190612e30565b6105e2565b60405161023e9190613451565b60405180910390f35b610261600480360381019061025c9190612e30565b610844565b60405161026e91906136a9565b60405180910390f35b61027f61085c565b005b61029b60048036038101906102969190612fcd565b6108e2565b005b6102b760048036038101906102b29190612fcd565b6109bd565b6040516102c89594939291906136fb565b60405180910390f35b6102eb60048036038101906102e69190612e30565b610a23565b6040516102f891906136a9565b60405180910390f35b61031b60048036038101906103169190612fcd565b610a3b565b6040516103289190613451565b60405180910390f35b61034b60048036038101906103469190612fcd565b610aa6565b6040516103619a9998979695949392919061338c565b60405180910390f35b610372610b77565b60405161037f919061333a565b60405180910390f35b6103a2600480360381019061039d9190612ee5565b610b9f565b6040516103af91906136a9565b60405180910390f35b6103d260048036038101906103cd9190612ffa565b610bd0565b005b6103ee60048036038101906103e99190612e30565b61157f565b6040516103fb9190613451565b60405180910390f35b61040c6117e1565b6040516104199190613473565b60405180910390f35b61042a6117f7565b005b61044660048036038101906104419190612ffa565b61187f565b60405161045391906136a9565b60405180910390f35b6104646118b0565b60405161047191906136a9565b60405180910390f35b610494600480360381019061048f9190612e30565b6118b6565b6040516104a19190613451565b60405180910390f35b6104b2611af3565b005b6104ce60048036038101906104c99190612e30565b611b79565b6040516104db9190613451565b60405180910390f35b6104ec611c10565b6040516104f9919061333a565b60405180910390f35b61051c60048036038101906105179190612f25565b611c39565b005b61053860048036038101906105339190612fcd565b611fb2565b005b610554600480360381019061054f9190612e30565b6122ee565b6040516105619190613451565b60405180910390f35b610584600480360381019061057f9190612fcd565b61252b565b005b61058e612a2e565b60405161059b91906136a9565b60405180910390f35b6105be60048036038101906105b99190612e30565b612a3b565b005b6000600280549050905090565b600063150b7a0260e01b905095945050505050565b60606000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081141561068357600067ffffffffffffffff81111561064c5761064b613a4b565b5b60405190808252806020026020018201604052801561067a5781602001602082028036833780820191505090505b5091505061083f565b60008167ffffffffffffffff81111561069f5761069e613a4b565b5b6040519080825280602002602001820160405280156106cd5781602001602082028036833780820191505090505b509050600080806001805490509050600091505b6001816106ee9190613879565b8211610836578673ffffffffffffffffffffffffffffffffffffffff166001838154811061071f5761071e613a1c565b5b90600052602060002090600a020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480156107ca575060006002811115610783576107826139ed565b5b6001838154811061079757610796613a1c565b5b90600052602060002090600a020160090160009054906101000a900460ff1660028111156107c8576107c76139ed565b5b145b1561082357600182815481106107e3576107e2613a1c565b5b90600052602060002090600a02016002015484848151811061080857610807613a1c565b5b602002602001018181525050828061081f90613946565b9350505b818061082e90613946565b9250506106e1565b83955050505050505b919050565b60076020528060005260406000206000915090505481565b610864612b33565b73ffffffffffffffffffffffffffffffffffffffff16610882611c10565b73ffffffffffffffffffffffffffffffffffffffff16146108d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cf90613629565b60405180910390fd5b6108e0612b3b565b565b6108ea612b33565b73ffffffffffffffffffffffffffffffffffffffff16610908611c10565b73ffffffffffffffffffffffffffffffffffffffff161461095e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095590613629565b60405180910390fd5b8060038190555061096d612b33565b73ffffffffffffffffffffffffffffffffffffffff167fbab595ca813814cb14c6650cd91702d64e1260196fec8df6528ebab89c336c44826040516109b291906136a9565b60405180910390a250565b600281815481106109cd57600080fd5b90600052602060002090600502016000915090508060000154908060010154908060020154908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040154905085565b60066020528060005260406000206000915090505481565b606060046000838152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610a9a57602002820191906000526020600020905b815481526020019060010190808311610a86575b50505050509050919050565b60018181548110610ab657600080fd5b90600052602060002090600a02016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030154908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060050154908060060154908060070154908060080154908060090160009054906101000a900460ff1690508a565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b60056020528160005260406000208181548110610bbb57600080fd5b90600052602060002001600091509150505481565b816001805490508110610c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0f906134e9565b60405180910390fd5b610c206117e1565b15610c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5790613589565b60405180910390fd5b600060018481548110610c7657610c75613a1c565b5b90600052602060002090600a020190508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610cc9612b33565b73ffffffffffffffffffffffffffffffffffffffff161415610d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1790613689565b60405180910390fd5b8060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610d63612b33565b73ffffffffffffffffffffffffffffffffffffffff161415610dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db190613689565b60405180910390fd5b8060070154421015610e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df890613649565b60405180910390fd5b8060080154421115610e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3f90613609565b60405180910390fd5b610e746064610e666003548460030154612bdc90919063ffffffff16565b612bf290919063ffffffff16565b8311610eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eac906135c9565b60405180910390fd5b60006002811115610ec957610ec86139ed565b5b8160090160009054906101000a900460ff166002811115610eed57610eec6139ed565b5b14610f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f24906135e9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461117857610ffc6001600660008460040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c0890919063ffffffff16565b600660008360040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8260040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683600301546040518363ffffffff1660e01b81526004016110e6929190613428565b602060405180830381600087803b15801561110057600080fd5b505af1158015611114573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111389190612fa0565b611177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116e90613569565b60405180910390fd5b5b6111d2600160066000611189612b33565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c1e90919063ffffffff16565b600660006111de612b33565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611224612b33565b8160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082816003018190555042816006018190555060006040518060a00160405280868152602001836002015481526020018581526020016112a3612b33565b73ffffffffffffffffffffffffffffffffffffffff168152602001428152509050600281908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506080820151816004015550506004600086815260200190815260200160002060016002805490506113869190613879565b9080600181540180825580915050600190039060005260206000200160009091909190915055600560006113b8612b33565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060016002805490506114049190613879565b90806001815401808255809150506001900390600052602060002001600090919091909150557f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166323b872dd61146e612b33565b30876040518463ffffffff1660e01b815260040161148e93929190613355565b602060405180830381600087803b1580156114a857600080fd5b505af11580156114bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e09190612fa0565b61151f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151690613569565b60405180910390fd5b611527612b33565b73ffffffffffffffffffffffffffffffffffffffff167f4dcc013473324698bfbe263facec4ea4b1bc43624236542deabec62c2122b305868642604051611570939291906136c4565b60405180910390a25050505050565b60606000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081141561162057600067ffffffffffffffff8111156115e9576115e8613a4b565b5b6040519080825280602002602001820160405280156116175781602001602082028036833780820191505090505b509150506117dc565b60008167ffffffffffffffff81111561163c5761163b613a4b565b5b60405190808252806020026020018201604052801561166a5781602001602082028036833780820191505090505b509050600080806001805490509050600091505b60018161168b9190613879565b82116117d3578673ffffffffffffffffffffffffffffffffffffffff16600183815481106116bc576116bb613a1c565b5b90600052602060002090600a020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480156117675750600160028111156117205761171f6139ed565b5b6001838154811061173457611733613a1c565b5b90600052602060002090600a020160090160009054906101000a900460ff166002811115611765576117646139ed565b5b145b156117c057600182815481106117805761177f613a1c565b5b90600052602060002090600a0201600201548484815181106117a5576117a4613a1c565b5b60200260200101818152505082806117bc90613946565b9350505b81806117cb90613946565b92505061167e565b83955050505050505b919050565b60008060149054906101000a900460ff16905090565b6117ff612b33565b73ffffffffffffffffffffffffffffffffffffffff1661181d611c10565b73ffffffffffffffffffffffffffffffffffffffff1614611873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186a90613629565b60405180910390fd5b61187d6000612c34565b565b6004602052816000526040600020818154811061189b57600080fd5b90600052602060002001600091509150505481565b60035481565b60606000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081141561195757600067ffffffffffffffff8111156119205761191f613a4b565b5b60405190808252806020026020018201604052801561194e5781602001602082028036833780820191505090505b50915050611aee565b60008167ffffffffffffffff81111561197357611972613a4b565b5b6040519080825280602002602001820160405280156119a15781602001602082028036833780820191505090505b509050600080806001805490509050600091505b6001816119c29190613879565b8211611ae5578673ffffffffffffffffffffffffffffffffffffffff16600183815481106119f3576119f2613a1c565b5b90600052602060002090600a020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148015611a9e575060006002811115611a5757611a566139ed565b5b60018381548110611a6b57611a6a613a1c565b5b90600052602060002090600a020160090160009054906101000a900460ff166002811115611a9c57611a9b6139ed565b5b145b15611ad25781848481518110611ab757611ab6613a1c565b5b6020026020010181815250508280611ace90613946565b9350505b8180611add90613946565b9250506119b5565b83955050505050505b919050565b611afb612b33565b73ffffffffffffffffffffffffffffffffffffffff16611b19611c10565b73ffffffffffffffffffffffffffffffffffffffff1614611b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6690613629565b60405180910390fd5b611b77612cf8565b565b6060600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611c0457602002820191906000526020600020905b815481526020019060010190808311611bf0575b50505050509050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c416117e1565b15611c81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7890613589565b60405180910390fd5b808210611cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cba906135a9565b60405180910390fd5b6000604051806101400160405280611cd9612b33565b73ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff168152602001868152602001858152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200142815260200142815260200184815260200183815260200160006002811115611d6557611d646139ed565b5b815250905060018190806001815401808255809150506001900390600052602060002090600a020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604082015181600201556060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a0820151816005015560c0820151816006015560e0820151816007015561010082015181600801556101208201518160090160006101000a81548160ff02191690836002811115611ed457611ed36139ed565b5b021790555050508573ffffffffffffffffffffffffffffffffffffffff166342842e0e611eff612b33565b30886040518463ffffffff1660e01b8152600401611f1f93929190613355565b600060405180830381600087803b158015611f3957600080fd5b505af1158015611f4d573d6000803e3d6000fd5b50505050611f59612b33565b73ffffffffffffffffffffffffffffffffffffffff167f5e4dbe799442580e0983dedea209e02d0497b6e3383338a9e1ac3aa117b491ec868585604051611fa2939291906136c4565b60405180910390a2505050505050565b806001805490508110611ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff1906134e9565b60405180910390fd5b8160006001828154811061201157612010613a1c565b5b90600052602060002090600a02019050612029612b33565b73ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b190613529565b60405180910390fd5b6120c26117e1565b15612102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f990613589565b60405180910390fd5b60006001858154811061211857612117613a1c565b5b90600052602060002090600a020190504281600701541161216e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612165906134a9565b60405180910390fd5b60006004600087815260200190815260200160002080549050146121c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121be90613549565b60405180910390fd5b60028160090160006101000a81548160ff021916908360028111156121ef576121ee6139ed565b5b02179055508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3061223d612b33565b84600201546040518463ffffffff1660e01b815260040161226093929190613355565b600060405180830381600087803b15801561227a57600080fd5b505af115801561228e573d6000803e3d6000fd5b5050505061229a612b33565b73ffffffffffffffffffffffffffffffffffffffff167f2c25d24dfe9658b516c1350cfc2a18f745a8d59f68ff5ec62bda4cc2a0e2b17f866040516122df91906136a9565b60405180910390a25050505050565b60606000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081141561238f57600067ffffffffffffffff81111561235857612357613a4b565b5b6040519080825280602002602001820160405280156123865781602001602082028036833780820191505090505b50915050612526565b60008167ffffffffffffffff8111156123ab576123aa613a4b565b5b6040519080825280602002602001820160405280156123d95781602001602082028036833780820191505090505b509050600080806001805490509050600091505b6001816123fa9190613879565b821161251d578673ffffffffffffffffffffffffffffffffffffffff166001838154811061242b5761242a613a1c565b5b90600052602060002090600a020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480156124d657506001600281111561248f5761248e6139ed565b5b600183815481106124a3576124a2613a1c565b5b90600052602060002090600a020160090160009054906101000a900460ff1660028111156124d4576124d36139ed565b5b145b1561250a57818484815181106124ef576124ee613a1c565b5b602002602001018181525050828061250690613946565b9350505b818061251590613946565b9250506123ed565b83955050505050505b919050565b806001805490508110612573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256a906134e9565b60405180910390fd5b8160006001828154811061258a57612589613a1c565b5b90600052602060002090600a020190506125a2612b33565b73ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262a90613529565b60405180910390fd5b60006001858154811061264957612648613a1c565b5b90600052602060002090600a020190504281600801541061269f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269690613669565b60405180910390fd5b60018160090160006101000a81548160ff021916908360028111156126c7576126c66139ed565b5b0217905550600073ffffffffffffffffffffffffffffffffffffffff168160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128f4577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683600301546040518363ffffffff1660e01b81526004016127a7929190613428565b602060405180830381600087803b1580156127c157600080fd5b505af11580156127d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127f99190612fa0565b612838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282f90613569565b60405180910390fd5b8060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e308360040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600201546040518463ffffffff1660e01b81526004016128c193929190613355565b600060405180830381600087803b1580156128db57600080fd5b505af11580156128ef573d6000803e3d6000fd5b505050505b61296b6001600760008460040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c1e90919063ffffffff16565b600760008360040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506129da612b33565b73ffffffffffffffffffffffffffffffffffffffff167fca09734d1fc32150404dc9252b4d991c6bee44319031b7159c03d5ae2c06270486604051612a1f91906136a9565b60405180910390a25050505050565b6000600180549050905090565b612a43612b33565b73ffffffffffffffffffffffffffffffffffffffff16612a61611c10565b73ffffffffffffffffffffffffffffffffffffffff1614612ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aae90613629565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1e90613509565b60405180910390fd5b612b3081612c34565b50565b600033905090565b612b436117e1565b612b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b79906134c9565b60405180910390fd5b60008060146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612bc5612b33565b604051612bd2919061333a565b60405180910390a1565b60008183612bea919061381f565b905092915050565b60008183612c0091906137ee565b905092915050565b60008183612c169190613879565b905092915050565b60008183612c2c9190613798565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612d006117e1565b15612d40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3790613589565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612d84612b33565b604051612d91919061333a565b60405180910390a1565b600081359050612daa81613d5d565b92915050565b600081519050612dbf81613d74565b92915050565b60008083601f840112612ddb57612dda613a7f565b5b8235905067ffffffffffffffff811115612df857612df7613a7a565b5b602083019150836001820283011115612e1457612e13613a84565b5b9250929050565b600081359050612e2a81613d8b565b92915050565b600060208284031215612e4657612e45613a8e565b5b6000612e5484828501612d9b565b91505092915050565b600080600080600060808688031215612e7957612e78613a8e565b5b6000612e8788828901612d9b565b9550506020612e9888828901612d9b565b9450506040612ea988828901612e1b565b935050606086013567ffffffffffffffff811115612eca57612ec9613a89565b5b612ed688828901612dc5565b92509250509295509295909350565b60008060408385031215612efc57612efb613a8e565b5b6000612f0a85828601612d9b565b9250506020612f1b85828601612e1b565b9150509250929050565b600080600080600060a08688031215612f4157612f40613a8e565b5b6000612f4f88828901612d9b565b9550506020612f6088828901612e1b565b9450506040612f7188828901612e1b565b9350506060612f8288828901612e1b565b9250506080612f9388828901612e1b565b9150509295509295909350565b600060208284031215612fb657612fb5613a8e565b5b6000612fc484828501612db0565b91505092915050565b600060208284031215612fe357612fe2613a8e565b5b6000612ff184828501612e1b565b91505092915050565b6000806040838503121561301157613010613a8e565b5b600061301f85828601612e1b565b925050602061303085828601612e1b565b9150509250929050565b6000613046838361331c565b60208301905092915050565b61305b816138ad565b82525050565b600061306c8261375e565b6130768185613776565b93506130818361374e565b8060005b838110156130b2578151613099888261303a565b97506130a483613769565b925050600181019050613085565b5085935050505092915050565b6130c8816138bf565b82525050565b6130d7816138cb565b82525050565b6130e681613934565b82525050565b60006130f9601783613787565b915061310482613a93565b602082019050919050565b600061311c601483613787565b915061312782613abc565b602082019050919050565b600061313f601b83613787565b915061314a82613ae5565b602082019050919050565b6000613162602683613787565b915061316d82613b0e565b604082019050919050565b6000613185601b83613787565b915061319082613b5d565b602082019050919050565b60006131a8601f83613787565b91506131b382613b86565b602082019050919050565b60006131cb601c83613787565b91506131d682613baf565b602082019050919050565b60006131ee601083613787565b91506131f982613bd8565b602082019050919050565b6000613211601c83613787565b915061321c82613c01565b602082019050919050565b6000613234601583613787565b915061323f82613c2a565b602082019050919050565b6000613257601b83613787565b915061326282613c53565b602082019050919050565b600061327a601883613787565b915061328582613c7c565b602082019050919050565b600061329d602083613787565b91506132a882613ca5565b602082019050919050565b60006132c0601f83613787565b91506132cb82613cce565b602082019050919050565b60006132e3601683613787565b91506132ee82613cf7565b602082019050919050565b6000613306601783613787565b915061331182613d20565b602082019050919050565b6133258161392a565b82525050565b6133348161392a565b82525050565b600060208201905061334f6000830184613052565b92915050565b600060608201905061336a6000830186613052565b6133776020830185613052565b613384604083018461332b565b949350505050565b6000610140820190506133a2600083018d613052565b6133af602083018c613052565b6133bc604083018b61332b565b6133c9606083018a61332b565b6133d66080830189613052565b6133e360a083018861332b565b6133f060c083018761332b565b6133fd60e083018661332b565b61340b61010083018561332b565b6134196101208301846130dd565b9b9a5050505050505050505050565b600060408201905061343d6000830185613052565b61344a602083018461332b565b9392505050565b6000602082019050818103600083015261346b8184613061565b905092915050565b600060208201905061348860008301846130bf565b92915050565b60006020820190506134a360008301846130ce565b92915050565b600060208201905081810360008301526134c2816130ec565b9050919050565b600060208201905081810360008301526134e28161310f565b9050919050565b6000602082019050818103600083015261350281613132565b9050919050565b6000602082019050818103600083015261352281613155565b9050919050565b6000602082019050818103600083015261354281613178565b9050919050565b600060208201905081810360008301526135628161319b565b9050919050565b60006020820190508181036000830152613582816131be565b9050919050565b600060208201905081810360008301526135a2816131e1565b9050919050565b600060208201905081810360008301526135c281613204565b9050919050565b600060208201905081810360008301526135e281613227565b9050919050565b600060208201905081810360008301526136028161324a565b9050919050565b600060208201905081810360008301526136228161326d565b9050919050565b6000602082019050818103600083015261364281613290565b9050919050565b60006020820190508181036000830152613662816132b3565b9050919050565b60006020820190508181036000830152613682816132d6565b9050919050565b600060208201905081810360008301526136a2816132f9565b9050919050565b60006020820190506136be600083018461332b565b92915050565b60006060820190506136d9600083018661332b565b6136e6602083018561332b565b6136f3604083018461332b565b949350505050565b600060a082019050613710600083018861332b565b61371d602083018761332b565b61372a604083018661332b565b6137376060830185613052565b613744608083018461332b565b9695505050505050565b6000819050602082019050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006137a38261392a565b91506137ae8361392a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137e3576137e261398f565b5b828201905092915050565b60006137f98261392a565b91506138048361392a565b925082613814576138136139be565b5b828204905092915050565b600061382a8261392a565b91506138358361392a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561386e5761386d61398f565b5b828202905092915050565b60006138848261392a565b915061388f8361392a565b9250828210156138a2576138a161398f565b5b828203905092915050565b60006138b88261390a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600081905061390582613d49565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061393f826138f7565b9050919050565b60006139518261392a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156139845761398361398f565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b7f41756374696f6e3a204e6f742043616e63656c61626c65000000000000000000600082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f41756374696f6e3a20496e76616c69642041756374696f6e2049640000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f41756374696f6e3a20496e76616c6964205065726d697373696f6e0000000000600082015250565b7f41756374696f6e3a20546865726520617265206269647320616c726561647900600082015250565b7f41756374696f6e3a20425750207472616e73666572206661696c656400000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f41756374696f6e3a20506572696f64206973206e6f742076616c696400000000600082015250565b7f41756374696f6e3a205072696365206973206c6f770000000000000000000000600082015250565b7f41756374696f6e3a20426964206973206e6f7420616c6c6f7765640000000000600082015250565b7f41756374696f6e3a2041756374696f6e206973204f7665720000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f41756374696f6e3a2041756374696f6e206973206e6f74207374617274656400600082015250565b7f41756374696f6e3a204e6f7420656e6465642079657400000000000000000000600082015250565b7f41756374696f6e3a20496e76616c696420426964646572000000000000000000600082015250565b60038110613d5a57613d596139ed565b5b50565b613d66816138ad565b8114613d7157600080fd5b50565b613d7d816138bf565b8114613d8857600080fd5b50565b613d948161392a565b8114613d9f57600080fd5b5056fea2646970667358221220408a769ef966a525a971ae7264d7ed7efc1c80cccdc57ed8889233c934e0e77464736f6c63430008060033000000000000000000000000a1d6df714f91debf4e0802a542e13067f31b82620000000000000000000000000000000000000000000000000000000000000067
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101c45760003560e01c80635c975abb116100f95780638da5cb5b116100975780639873a714116100715780639873a7141461053a578063b9a2de3a1461056a578063c44e664014610586578063f2fde38b146105a4576101c4565b80638da5cb5b146104e4578063961c9ae41461050257806396b5a7551461051e576101c4565b80637fb04d4e116100d35780637fb04d4e1461045c578063829f566c1461047a5780638456cb59146104aa578063892434c9146104b4576101c4565b80635c975abb14610404578063715018a614610422578063728f09991461042c576101c4565b80634e22b965116101665780635753d4b7116101405780635753d4b71461036a5780635919db7c14610388578063598647f8146103b85780635c4d4e1c146103d4576101c4565b80634e22b965146102d1578063538d91aa14610301578063571a26a014610331576101c4565b806335311515116101a257806335311515146102475780633f4ba83a14610277578063408169b2146102815780634423c5f11461029d576101c4565b8063077853b1146101c9578063150b7a02146101e75780632fbe693614610217575b600080fd5b6101d16105c0565b6040516101de91906136a9565b60405180910390f35b61020160048036038101906101fc9190612e5d565b6105cd565b60405161020e919061348e565b60405180910390f35b610231600480360381019061022c9190612e30565b6105e2565b60405161023e9190613451565b60405180910390f35b610261600480360381019061025c9190612e30565b610844565b60405161026e91906136a9565b60405180910390f35b61027f61085c565b005b61029b60048036038101906102969190612fcd565b6108e2565b005b6102b760048036038101906102b29190612fcd565b6109bd565b6040516102c89594939291906136fb565b60405180910390f35b6102eb60048036038101906102e69190612e30565b610a23565b6040516102f891906136a9565b60405180910390f35b61031b60048036038101906103169190612fcd565b610a3b565b6040516103289190613451565b60405180910390f35b61034b60048036038101906103469190612fcd565b610aa6565b6040516103619a9998979695949392919061338c565b60405180910390f35b610372610b77565b60405161037f919061333a565b60405180910390f35b6103a2600480360381019061039d9190612ee5565b610b9f565b6040516103af91906136a9565b60405180910390f35b6103d260048036038101906103cd9190612ffa565b610bd0565b005b6103ee60048036038101906103e99190612e30565b61157f565b6040516103fb9190613451565b60405180910390f35b61040c6117e1565b6040516104199190613473565b60405180910390f35b61042a6117f7565b005b61044660048036038101906104419190612ffa565b61187f565b60405161045391906136a9565b60405180910390f35b6104646118b0565b60405161047191906136a9565b60405180910390f35b610494600480360381019061048f9190612e30565b6118b6565b6040516104a19190613451565b60405180910390f35b6104b2611af3565b005b6104ce60048036038101906104c99190612e30565b611b79565b6040516104db9190613451565b60405180910390f35b6104ec611c10565b6040516104f9919061333a565b60405180910390f35b61051c60048036038101906105179190612f25565b611c39565b005b61053860048036038101906105339190612fcd565b611fb2565b005b610554600480360381019061054f9190612e30565b6122ee565b6040516105619190613451565b60405180910390f35b610584600480360381019061057f9190612fcd565b61252b565b005b61058e612a2e565b60405161059b91906136a9565b60405180910390f35b6105be60048036038101906105b99190612e30565b612a3b565b005b6000600280549050905090565b600063150b7a0260e01b905095945050505050565b60606000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081141561068357600067ffffffffffffffff81111561064c5761064b613a4b565b5b60405190808252806020026020018201604052801561067a5781602001602082028036833780820191505090505b5091505061083f565b60008167ffffffffffffffff81111561069f5761069e613a4b565b5b6040519080825280602002602001820160405280156106cd5781602001602082028036833780820191505090505b509050600080806001805490509050600091505b6001816106ee9190613879565b8211610836578673ffffffffffffffffffffffffffffffffffffffff166001838154811061071f5761071e613a1c565b5b90600052602060002090600a020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480156107ca575060006002811115610783576107826139ed565b5b6001838154811061079757610796613a1c565b5b90600052602060002090600a020160090160009054906101000a900460ff1660028111156107c8576107c76139ed565b5b145b1561082357600182815481106107e3576107e2613a1c565b5b90600052602060002090600a02016002015484848151811061080857610807613a1c565b5b602002602001018181525050828061081f90613946565b9350505b818061082e90613946565b9250506106e1565b83955050505050505b919050565b60076020528060005260406000206000915090505481565b610864612b33565b73ffffffffffffffffffffffffffffffffffffffff16610882611c10565b73ffffffffffffffffffffffffffffffffffffffff16146108d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cf90613629565b60405180910390fd5b6108e0612b3b565b565b6108ea612b33565b73ffffffffffffffffffffffffffffffffffffffff16610908611c10565b73ffffffffffffffffffffffffffffffffffffffff161461095e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095590613629565b60405180910390fd5b8060038190555061096d612b33565b73ffffffffffffffffffffffffffffffffffffffff167fbab595ca813814cb14c6650cd91702d64e1260196fec8df6528ebab89c336c44826040516109b291906136a9565b60405180910390a250565b600281815481106109cd57600080fd5b90600052602060002090600502016000915090508060000154908060010154908060020154908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040154905085565b60066020528060005260406000206000915090505481565b606060046000838152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610a9a57602002820191906000526020600020905b815481526020019060010190808311610a86575b50505050509050919050565b60018181548110610ab657600080fd5b90600052602060002090600a02016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030154908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060050154908060060154908060070154908060080154908060090160009054906101000a900460ff1690508a565b60007f000000000000000000000000a1d6df714f91debf4e0802a542e13067f31b8262905090565b60056020528160005260406000208181548110610bbb57600080fd5b90600052602060002001600091509150505481565b816001805490508110610c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0f906134e9565b60405180910390fd5b610c206117e1565b15610c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5790613589565b60405180910390fd5b600060018481548110610c7657610c75613a1c565b5b90600052602060002090600a020190508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610cc9612b33565b73ffffffffffffffffffffffffffffffffffffffff161415610d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1790613689565b60405180910390fd5b8060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610d63612b33565b73ffffffffffffffffffffffffffffffffffffffff161415610dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db190613689565b60405180910390fd5b8060070154421015610e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df890613649565b60405180910390fd5b8060080154421115610e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3f90613609565b60405180910390fd5b610e746064610e666003548460030154612bdc90919063ffffffff16565b612bf290919063ffffffff16565b8311610eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eac906135c9565b60405180910390fd5b60006002811115610ec957610ec86139ed565b5b8160090160009054906101000a900460ff166002811115610eed57610eec6139ed565b5b14610f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f24906135e9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461117857610ffc6001600660008460040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c0890919063ffffffff16565b600660008360040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f000000000000000000000000a1d6df714f91debf4e0802a542e13067f31b826273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8260040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683600301546040518363ffffffff1660e01b81526004016110e6929190613428565b602060405180830381600087803b15801561110057600080fd5b505af1158015611114573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111389190612fa0565b611177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116e90613569565b60405180910390fd5b5b6111d2600160066000611189612b33565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c1e90919063ffffffff16565b600660006111de612b33565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611224612b33565b8160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082816003018190555042816006018190555060006040518060a00160405280868152602001836002015481526020018581526020016112a3612b33565b73ffffffffffffffffffffffffffffffffffffffff168152602001428152509050600281908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506080820151816004015550506004600086815260200190815260200160002060016002805490506113869190613879565b9080600181540180825580915050600190039060005260206000200160009091909190915055600560006113b8612b33565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060016002805490506114049190613879565b90806001815401808255809150506001900390600052602060002001600090919091909150557f000000000000000000000000a1d6df714f91debf4e0802a542e13067f31b826273ffffffffffffffffffffffffffffffffffffffff166323b872dd61146e612b33565b30876040518463ffffffff1660e01b815260040161148e93929190613355565b602060405180830381600087803b1580156114a857600080fd5b505af11580156114bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e09190612fa0565b61151f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151690613569565b60405180910390fd5b611527612b33565b73ffffffffffffffffffffffffffffffffffffffff167f4dcc013473324698bfbe263facec4ea4b1bc43624236542deabec62c2122b305868642604051611570939291906136c4565b60405180910390a25050505050565b60606000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081141561162057600067ffffffffffffffff8111156115e9576115e8613a4b565b5b6040519080825280602002602001820160405280156116175781602001602082028036833780820191505090505b509150506117dc565b60008167ffffffffffffffff81111561163c5761163b613a4b565b5b60405190808252806020026020018201604052801561166a5781602001602082028036833780820191505090505b509050600080806001805490509050600091505b60018161168b9190613879565b82116117d3578673ffffffffffffffffffffffffffffffffffffffff16600183815481106116bc576116bb613a1c565b5b90600052602060002090600a020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480156117675750600160028111156117205761171f6139ed565b5b6001838154811061173457611733613a1c565b5b90600052602060002090600a020160090160009054906101000a900460ff166002811115611765576117646139ed565b5b145b156117c057600182815481106117805761177f613a1c565b5b90600052602060002090600a0201600201548484815181106117a5576117a4613a1c565b5b60200260200101818152505082806117bc90613946565b9350505b81806117cb90613946565b92505061167e565b83955050505050505b919050565b60008060149054906101000a900460ff16905090565b6117ff612b33565b73ffffffffffffffffffffffffffffffffffffffff1661181d611c10565b73ffffffffffffffffffffffffffffffffffffffff1614611873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186a90613629565b60405180910390fd5b61187d6000612c34565b565b6004602052816000526040600020818154811061189b57600080fd5b90600052602060002001600091509150505481565b60035481565b60606000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081141561195757600067ffffffffffffffff8111156119205761191f613a4b565b5b60405190808252806020026020018201604052801561194e5781602001602082028036833780820191505090505b50915050611aee565b60008167ffffffffffffffff81111561197357611972613a4b565b5b6040519080825280602002602001820160405280156119a15781602001602082028036833780820191505090505b509050600080806001805490509050600091505b6001816119c29190613879565b8211611ae5578673ffffffffffffffffffffffffffffffffffffffff16600183815481106119f3576119f2613a1c565b5b90600052602060002090600a020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148015611a9e575060006002811115611a5757611a566139ed565b5b60018381548110611a6b57611a6a613a1c565b5b90600052602060002090600a020160090160009054906101000a900460ff166002811115611a9c57611a9b6139ed565b5b145b15611ad25781848481518110611ab757611ab6613a1c565b5b6020026020010181815250508280611ace90613946565b9350505b8180611add90613946565b9250506119b5565b83955050505050505b919050565b611afb612b33565b73ffffffffffffffffffffffffffffffffffffffff16611b19611c10565b73ffffffffffffffffffffffffffffffffffffffff1614611b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6690613629565b60405180910390fd5b611b77612cf8565b565b6060600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611c0457602002820191906000526020600020905b815481526020019060010190808311611bf0575b50505050509050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c416117e1565b15611c81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7890613589565b60405180910390fd5b808210611cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cba906135a9565b60405180910390fd5b6000604051806101400160405280611cd9612b33565b73ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff168152602001868152602001858152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200142815260200142815260200184815260200183815260200160006002811115611d6557611d646139ed565b5b815250905060018190806001815401808255809150506001900390600052602060002090600a020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604082015181600201556060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a0820151816005015560c0820151816006015560e0820151816007015561010082015181600801556101208201518160090160006101000a81548160ff02191690836002811115611ed457611ed36139ed565b5b021790555050508573ffffffffffffffffffffffffffffffffffffffff166342842e0e611eff612b33565b30886040518463ffffffff1660e01b8152600401611f1f93929190613355565b600060405180830381600087803b158015611f3957600080fd5b505af1158015611f4d573d6000803e3d6000fd5b50505050611f59612b33565b73ffffffffffffffffffffffffffffffffffffffff167f5e4dbe799442580e0983dedea209e02d0497b6e3383338a9e1ac3aa117b491ec868585604051611fa2939291906136c4565b60405180910390a2505050505050565b806001805490508110611ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff1906134e9565b60405180910390fd5b8160006001828154811061201157612010613a1c565b5b90600052602060002090600a02019050612029612b33565b73ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b190613529565b60405180910390fd5b6120c26117e1565b15612102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f990613589565b60405180910390fd5b60006001858154811061211857612117613a1c565b5b90600052602060002090600a020190504281600701541161216e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612165906134a9565b60405180910390fd5b60006004600087815260200190815260200160002080549050146121c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121be90613549565b60405180910390fd5b60028160090160006101000a81548160ff021916908360028111156121ef576121ee6139ed565b5b02179055508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3061223d612b33565b84600201546040518463ffffffff1660e01b815260040161226093929190613355565b600060405180830381600087803b15801561227a57600080fd5b505af115801561228e573d6000803e3d6000fd5b5050505061229a612b33565b73ffffffffffffffffffffffffffffffffffffffff167f2c25d24dfe9658b516c1350cfc2a18f745a8d59f68ff5ec62bda4cc2a0e2b17f866040516122df91906136a9565b60405180910390a25050505050565b60606000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081141561238f57600067ffffffffffffffff81111561235857612357613a4b565b5b6040519080825280602002602001820160405280156123865781602001602082028036833780820191505090505b50915050612526565b60008167ffffffffffffffff8111156123ab576123aa613a4b565b5b6040519080825280602002602001820160405280156123d95781602001602082028036833780820191505090505b509050600080806001805490509050600091505b6001816123fa9190613879565b821161251d578673ffffffffffffffffffffffffffffffffffffffff166001838154811061242b5761242a613a1c565b5b90600052602060002090600a020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480156124d657506001600281111561248f5761248e6139ed565b5b600183815481106124a3576124a2613a1c565b5b90600052602060002090600a020160090160009054906101000a900460ff1660028111156124d4576124d36139ed565b5b145b1561250a57818484815181106124ef576124ee613a1c565b5b602002602001018181525050828061250690613946565b9350505b818061251590613946565b9250506123ed565b83955050505050505b919050565b806001805490508110612573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256a906134e9565b60405180910390fd5b8160006001828154811061258a57612589613a1c565b5b90600052602060002090600a020190506125a2612b33565b73ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262a90613529565b60405180910390fd5b60006001858154811061264957612648613a1c565b5b90600052602060002090600a020190504281600801541061269f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269690613669565b60405180910390fd5b60018160090160006101000a81548160ff021916908360028111156126c7576126c66139ed565b5b0217905550600073ffffffffffffffffffffffffffffffffffffffff168160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128f4577f000000000000000000000000a1d6df714f91debf4e0802a542e13067f31b826273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683600301546040518363ffffffff1660e01b81526004016127a7929190613428565b602060405180830381600087803b1580156127c157600080fd5b505af11580156127d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127f99190612fa0565b612838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282f90613569565b60405180910390fd5b8060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e308360040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600201546040518463ffffffff1660e01b81526004016128c193929190613355565b600060405180830381600087803b1580156128db57600080fd5b505af11580156128ef573d6000803e3d6000fd5b505050505b61296b6001600760008460040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c1e90919063ffffffff16565b600760008360040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506129da612b33565b73ffffffffffffffffffffffffffffffffffffffff167fca09734d1fc32150404dc9252b4d991c6bee44319031b7159c03d5ae2c06270486604051612a1f91906136a9565b60405180910390a25050505050565b6000600180549050905090565b612a43612b33565b73ffffffffffffffffffffffffffffffffffffffff16612a61611c10565b73ffffffffffffffffffffffffffffffffffffffff1614612ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aae90613629565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1e90613509565b60405180910390fd5b612b3081612c34565b50565b600033905090565b612b436117e1565b612b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b79906134c9565b60405180910390fd5b60008060146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612bc5612b33565b604051612bd2919061333a565b60405180910390a1565b60008183612bea919061381f565b905092915050565b60008183612c0091906137ee565b905092915050565b60008183612c169190613879565b905092915050565b60008183612c2c9190613798565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612d006117e1565b15612d40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3790613589565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612d84612b33565b604051612d91919061333a565b60405180910390a1565b600081359050612daa81613d5d565b92915050565b600081519050612dbf81613d74565b92915050565b60008083601f840112612ddb57612dda613a7f565b5b8235905067ffffffffffffffff811115612df857612df7613a7a565b5b602083019150836001820283011115612e1457612e13613a84565b5b9250929050565b600081359050612e2a81613d8b565b92915050565b600060208284031215612e4657612e45613a8e565b5b6000612e5484828501612d9b565b91505092915050565b600080600080600060808688031215612e7957612e78613a8e565b5b6000612e8788828901612d9b565b9550506020612e9888828901612d9b565b9450506040612ea988828901612e1b565b935050606086013567ffffffffffffffff811115612eca57612ec9613a89565b5b612ed688828901612dc5565b92509250509295509295909350565b60008060408385031215612efc57612efb613a8e565b5b6000612f0a85828601612d9b565b9250506020612f1b85828601612e1b565b9150509250929050565b600080600080600060a08688031215612f4157612f40613a8e565b5b6000612f4f88828901612d9b565b9550506020612f6088828901612e1b565b9450506040612f7188828901612e1b565b9350506060612f8288828901612e1b565b9250506080612f9388828901612e1b565b9150509295509295909350565b600060208284031215612fb657612fb5613a8e565b5b6000612fc484828501612db0565b91505092915050565b600060208284031215612fe357612fe2613a8e565b5b6000612ff184828501612e1b565b91505092915050565b6000806040838503121561301157613010613a8e565b5b600061301f85828601612e1b565b925050602061303085828601612e1b565b9150509250929050565b6000613046838361331c565b60208301905092915050565b61305b816138ad565b82525050565b600061306c8261375e565b6130768185613776565b93506130818361374e565b8060005b838110156130b2578151613099888261303a565b97506130a483613769565b925050600181019050613085565b5085935050505092915050565b6130c8816138bf565b82525050565b6130d7816138cb565b82525050565b6130e681613934565b82525050565b60006130f9601783613787565b915061310482613a93565b602082019050919050565b600061311c601483613787565b915061312782613abc565b602082019050919050565b600061313f601b83613787565b915061314a82613ae5565b602082019050919050565b6000613162602683613787565b915061316d82613b0e565b604082019050919050565b6000613185601b83613787565b915061319082613b5d565b602082019050919050565b60006131a8601f83613787565b91506131b382613b86565b602082019050919050565b60006131cb601c83613787565b91506131d682613baf565b602082019050919050565b60006131ee601083613787565b91506131f982613bd8565b602082019050919050565b6000613211601c83613787565b915061321c82613c01565b602082019050919050565b6000613234601583613787565b915061323f82613c2a565b602082019050919050565b6000613257601b83613787565b915061326282613c53565b602082019050919050565b600061327a601883613787565b915061328582613c7c565b602082019050919050565b600061329d602083613787565b91506132a882613ca5565b602082019050919050565b60006132c0601f83613787565b91506132cb82613cce565b602082019050919050565b60006132e3601683613787565b91506132ee82613cf7565b602082019050919050565b6000613306601783613787565b915061331182613d20565b602082019050919050565b6133258161392a565b82525050565b6133348161392a565b82525050565b600060208201905061334f6000830184613052565b92915050565b600060608201905061336a6000830186613052565b6133776020830185613052565b613384604083018461332b565b949350505050565b6000610140820190506133a2600083018d613052565b6133af602083018c613052565b6133bc604083018b61332b565b6133c9606083018a61332b565b6133d66080830189613052565b6133e360a083018861332b565b6133f060c083018761332b565b6133fd60e083018661332b565b61340b61010083018561332b565b6134196101208301846130dd565b9b9a5050505050505050505050565b600060408201905061343d6000830185613052565b61344a602083018461332b565b9392505050565b6000602082019050818103600083015261346b8184613061565b905092915050565b600060208201905061348860008301846130bf565b92915050565b60006020820190506134a360008301846130ce565b92915050565b600060208201905081810360008301526134c2816130ec565b9050919050565b600060208201905081810360008301526134e28161310f565b9050919050565b6000602082019050818103600083015261350281613132565b9050919050565b6000602082019050818103600083015261352281613155565b9050919050565b6000602082019050818103600083015261354281613178565b9050919050565b600060208201905081810360008301526135628161319b565b9050919050565b60006020820190508181036000830152613582816131be565b9050919050565b600060208201905081810360008301526135a2816131e1565b9050919050565b600060208201905081810360008301526135c281613204565b9050919050565b600060208201905081810360008301526135e281613227565b9050919050565b600060208201905081810360008301526136028161324a565b9050919050565b600060208201905081810360008301526136228161326d565b9050919050565b6000602082019050818103600083015261364281613290565b9050919050565b60006020820190508181036000830152613662816132b3565b9050919050565b60006020820190508181036000830152613682816132d6565b9050919050565b600060208201905081810360008301526136a2816132f9565b9050919050565b60006020820190506136be600083018461332b565b92915050565b60006060820190506136d9600083018661332b565b6136e6602083018561332b565b6136f3604083018461332b565b949350505050565b600060a082019050613710600083018861332b565b61371d602083018761332b565b61372a604083018661332b565b6137376060830185613052565b613744608083018461332b565b9695505050505050565b6000819050602082019050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006137a38261392a565b91506137ae8361392a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137e3576137e261398f565b5b828201905092915050565b60006137f98261392a565b91506138048361392a565b925082613814576138136139be565b5b828204905092915050565b600061382a8261392a565b91506138358361392a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561386e5761386d61398f565b5b828202905092915050565b60006138848261392a565b915061388f8361392a565b9250828210156138a2576138a161398f565b5b828203905092915050565b60006138b88261390a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600081905061390582613d49565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061393f826138f7565b9050919050565b60006139518261392a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156139845761398361398f565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b7f41756374696f6e3a204e6f742043616e63656c61626c65000000000000000000600082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f41756374696f6e3a20496e76616c69642041756374696f6e2049640000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f41756374696f6e3a20496e76616c6964205065726d697373696f6e0000000000600082015250565b7f41756374696f6e3a20546865726520617265206269647320616c726561647900600082015250565b7f41756374696f6e3a20425750207472616e73666572206661696c656400000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f41756374696f6e3a20506572696f64206973206e6f742076616c696400000000600082015250565b7f41756374696f6e3a205072696365206973206c6f770000000000000000000000600082015250565b7f41756374696f6e3a20426964206973206e6f7420616c6c6f7765640000000000600082015250565b7f41756374696f6e3a2041756374696f6e206973204f7665720000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f41756374696f6e3a2041756374696f6e206973206e6f74207374617274656400600082015250565b7f41756374696f6e3a204e6f7420656e6465642079657400000000000000000000600082015250565b7f41756374696f6e3a20496e76616c696420426964646572000000000000000000600082015250565b60038110613d5a57613d596139ed565b5b50565b613d66816138ad565b8114613d7157600080fd5b50565b613d7d816138bf565b8114613d8857600080fd5b50565b613d948161392a565b8114613d9f57600080fd5b5056fea2646970667358221220408a769ef966a525a971ae7264d7ed7efc1c80cccdc57ed8889233c934e0e77464736f6c63430008060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a1d6df714f91debf4e0802a542e13067f31b82620000000000000000000000000000000000000000000000000000000000000067
-----Decoded View---------------
Arg [0] : __bwp (address): 0xa1d6Df714F91DeBF4e0802A542E13067f31b8262
Arg [1] : _bidPricePercent (uint256): 103
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000a1d6df714f91debf4e0802a542e13067f31b8262
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000067
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.