Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00Token Holdings
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,157 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Unstake Nfts | 20137644 | 15 days ago | IN | 0 ETH | 0.0004733 | ||||
Claim Token | 19557793 | 96 days ago | IN | 0 ETH | 0.00104237 | ||||
Unstake Nfts | 19132157 | 155 days ago | IN | 0 ETH | 0.00205733 | ||||
Unstake Nfts | 19118484 | 157 days ago | IN | 0 ETH | 0.00216385 | ||||
Claim Token | 19118443 | 157 days ago | IN | 0 ETH | 0.00155481 | ||||
Stake Nfts | 18976637 | 177 days ago | IN | 0 ETH | 0.00321534 | ||||
Unstake Nfts | 18911253 | 186 days ago | IN | 0 ETH | 0.00204314 | ||||
Unstake Nfts | 18619183 | 227 days ago | IN | 0 ETH | 0.00323441 | ||||
Stake Nfts | 17918008 | 326 days ago | IN | 0 ETH | 0.00603358 | ||||
Claim Token | 17823433 | 339 days ago | IN | 0 ETH | 0.00168411 | ||||
Unstake Nfts | 17463895 | 389 days ago | IN | 0 ETH | 0.00218424 | ||||
Unstake Nfts | 17346061 | 406 days ago | IN | 0 ETH | 0.0033461 | ||||
Claim Token | 17346054 | 406 days ago | IN | 0 ETH | 0.00168869 | ||||
Unstake Nfts | 17297946 | 413 days ago | IN | 0 ETH | 0.00693338 | ||||
Claim Token | 17297943 | 413 days ago | IN | 0 ETH | 0.00339314 | ||||
Unstake Nfts | 17261556 | 418 days ago | IN | 0 ETH | 0.0080492 | ||||
Claim Token | 17261555 | 418 days ago | IN | 0 ETH | 0.0042621 | ||||
Unstake Nfts | 17009642 | 453 days ago | IN | 0 ETH | 0.00231984 | ||||
Claim Token | 17009638 | 453 days ago | IN | 0 ETH | 0.001457 | ||||
Claim Token | 16811620 | 481 days ago | IN | 0 ETH | 0.00167637 | ||||
Unstake Nfts | 16731443 | 493 days ago | IN | 0 ETH | 0.00213295 | ||||
Unstake Nfts | 16712476 | 495 days ago | IN | 0 ETH | 0.00428268 | ||||
Unstake Nfts | 16710529 | 496 days ago | IN | 0 ETH | 0.00191334 | ||||
Unstake Nfts | 16709425 | 496 days ago | IN | 0 ETH | 0.00179573 | ||||
Claim Token | 16709423 | 496 days ago | IN | 0 ETH | 0.00135741 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
TsubasaStaking
Compiler Version
v0.8.4+commit.c7e474f2
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol"; contract TsubasaStaking is IERC721Receiver { /** * admin address */ address public admin; /** * how many tokens can be rewarded per second per NFT */ uint256 public rewardRate; /** * can user stake NFTs */ bool public stakeEnabled; /** * when does the reward start */ uint256 public rewardStartTimestamp; /** * nft address */ address public nftAddress; /** * ERC20 token address */ address public tokenAddress; /** * nft id => owner */ mapping(uint256 => address) public nftOwners; /** * nft id => reward start time */ mapping(uint256 => uint256) public nftTimestamp; /** * address => staked nft ids */ mapping(address => uint256[]) public userNftIds; modifier onlyAdmin() { require(msg.sender == admin, "Caller is NOT admin"); _; } constructor( uint256 rewardRate_, address nftAddress_, address tokenAddress_ ) { admin = msg.sender; stakeEnabled = false; rewardRate = rewardRate_; rewardStartTimestamp = block.timestamp; nftAddress = nftAddress_; tokenAddress = tokenAddress_; } /** * @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 override returns (bytes4) { require(stakeEnabled, "Stake disabled"); // only specified nft contract can call this api require(msg.sender == nftAddress, "Wrong NFT"); // mint to this contract directly is not allowed require(from != address(0), "Wrong sender address"); // confirm nft received require( IERC721(nftAddress).ownerOf(tokenId) == address(this), "NFT NOT received" ); // check nft stake information is empty require(nftOwners[tokenId] == address(0), "NFT already staked"); _stakeNft(tokenId, from); return IERC721Receiver.onERC721Received.selector; } function _stakeNft(uint256 nftId, address owner) private { nftOwners[nftId] = owner; nftTimestamp[nftId] = block.timestamp; userNftIds[owner].push(nftId); } function stakeApproved() public view returns (bool) { return IERC721(nftAddress).isApprovedForAll(msg.sender, address(this)); } function stakeNfts(uint256[] calldata nftIds) public { require(stakeApproved(), "Operation unapproved"); _checkNftOwners(nftIds, msg.sender); for (uint256 i = 0; i < nftIds.length; i++) { uint256 nftId = nftIds[i]; IERC721(nftAddress).safeTransferFrom( msg.sender, address(this), nftId ); } } function getStakedNftIds(address owner) public view returns (uint256[] memory) { return userNftIds[owner]; } function unstakeNfts(uint256[] calldata nftIds) public { _checkNftOriginalOwners(nftIds, msg.sender); uint256 token = _calculateRewards(nftIds); _transferToken(msg.sender, token); _returnNfts(nftIds, msg.sender); } function claimableToken() public view returns (uint256) { uint256[] memory nftIds = userNftIds[msg.sender]; return _calculateRewards(nftIds); } function claimToken() public { uint256[] memory nftIds = userNftIds[msg.sender]; uint256 token = _calculateRewards(nftIds); _resetRewardStartTime(nftIds); _transferToken(msg.sender, token); } function setAdmin(address admin_) public onlyAdmin { admin = admin_; } function setNftAddress(address nftAddress_) public onlyAdmin { nftAddress = nftAddress_; } function setTokenAddress(address tokenAddress_) public onlyAdmin { tokenAddress = tokenAddress_; } function setStakeEnabled(bool stakeEnabled_) public onlyAdmin { stakeEnabled = stakeEnabled_; } function setRewardRate(uint256 rewardRate_) public onlyAdmin { rewardRate = rewardRate_; } function setRewardStartTimestamp(uint256 rewardStartTimestamp_) public onlyAdmin { rewardStartTimestamp = rewardStartTimestamp_; } function returnNfts(uint256[] calldata nftIds) public onlyAdmin { for (uint256 i = 0; i < nftIds.length; i++) { returnNft(nftIds[i]); } } function returnNft(uint256 nftId) public onlyAdmin { _returnNft(nftId, nftOwners[nftId]); } function returnNftToAddress(uint256 nftId, address owner) public onlyAdmin { _returnNft(nftId, owner); } function returnSpecifiedNftToAddress( address nftContract, uint256 nftId, address owner ) public onlyAdmin { _transferNft(nftContract, nftId, owner); } function withdrawEther() public onlyAdmin { uint256 balance = address(this).balance; require(balance > 0, "Balance is 0"); payable(msg.sender).transfer(balance); } function withdrawToken(uint256 amount) public onlyAdmin { _transferToken(msg.sender, amount); } function withdrawAllToken() public onlyAdmin { withdrawToken(tokenBalance()); } function tokenBalance() public view returns (uint256) { return IERC20(tokenAddress).balanceOf(address(this)); } function _checkNftOwners(uint256[] memory nftIds, address owner) private view { for (uint256 i = 0; i < nftIds.length; i++) { uint256 nftId = nftIds[i]; require( IERC721(nftAddress).ownerOf(nftId) == owner, "Wrong NFT owner" ); } } function _checkNftOriginalOwners(uint256[] memory nftIds, address owner) private view { for (uint256 i = 0; i < nftIds.length; i++) { uint256 nftId = nftIds[i]; require(nftOwners[nftId] == owner, "Wrong NFT owner"); } } function _calculateRewards(uint256[] memory nftIds) private view returns (uint256) { uint256 currentTime = block.timestamp; if (currentTime <= rewardStartTimestamp) { return 0; } uint256 rewardTime = 0; for (uint256 i = 0; i < nftIds.length; i++) { uint256 nftId = nftIds[i]; uint256 startTime = nftTimestamp[nftId]; if (startTime < rewardStartTimestamp) { startTime = rewardStartTimestamp; } if (startTime >= currentTime) continue; rewardTime = rewardTime + (currentTime - startTime); } return rewardTime * rewardRate; } function _resetRewardStartTime(uint256[] memory nftIds) private { uint256 currentTime = block.timestamp; for (uint256 i = 0; i < nftIds.length; i++) { uint256 nftId = nftIds[i]; uint256 time = nftTimestamp[nftId]; if (time >= currentTime) continue; nftTimestamp[nftId] = currentTime; } } function _transferToken(address to, uint256 amount) private { require( amount <= tokenBalance(), "Insufficient token in the pool, contact admin" ); if (amount > 0) { IERC20(tokenAddress).transfer(to, amount); } } function _returnNfts(uint256[] memory nftIds, address owner) private { for (uint256 i = 0; i < nftIds.length; i++) { uint256 nftId = nftIds[i]; _returnNft(nftId, owner); } } function _returnNft(uint256 nftId, address to) private { _removeNftIdOfUser(to, nftId); delete nftOwners[nftId]; _transferNft(nftAddress, nftId, to); } function _transferNft( address nftContract, uint256 nftId, address to ) private { IERC721(nftContract).safeTransferFrom(address(this), to, nftId); } function _removeNftIdOfUser(address owner, uint256 nftId) private { for (uint256 i = 0; i < userNftIds[owner].length; i++) { if (userNftIds[owner][i] == nftId) { userNftIds[owner][i] = userNftIds[owner][ userNftIds[owner].length - 1 ]; userNftIds[owner].pop(); return; } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"rewardRate_","type":"uint256"},{"internalType":"address","name":"nftAddress_","type":"address"},{"internalType":"address","name":"tokenAddress_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimableToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"getStakedNftIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nftOwners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nftTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"returnNft","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"returnNftToAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"nftIds","type":"uint256[]"}],"name":"returnNfts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nftContract","type":"address"},{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"returnSpecifiedNftToAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardStartTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin_","type":"address"}],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nftAddress_","type":"address"}],"name":"setNftAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rewardRate_","type":"uint256"}],"name":"setRewardRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rewardStartTimestamp_","type":"uint256"}],"name":"setRewardStartTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"stakeEnabled_","type":"bool"}],"name":"setStakeEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress_","type":"address"}],"name":"setTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakeApproved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"nftIds","type":"uint256[]"}],"name":"stakeNfts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"nftIds","type":"uint256[]"}],"name":"unstakeNfts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userNftIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAllToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620031de380380620031de833981810160405281019062000037919062000159565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260006101000a81548160ff021916908315150217905550826001819055504260038190555081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505062000221565b6000815190506200013c81620001ed565b92915050565b600081519050620001538162000207565b92915050565b6000806000606084860312156200016f57600080fd5b60006200017f8682870162000142565b935050602062000192868287016200012b565b9250506040620001a5868287016200012b565b9150509250925092565b6000620001bc82620001c3565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b620001f881620001af565b81146200020457600080fd5b50565b6200021281620001e3565b81146200021e57600080fd5b50565b612fad80620002316000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806374d5b050116101045780639e1a4d19116100a2578063f6d6d5aa11610071578063f6d6d5aa146104dd578063f851a440146104fb578063fcb685bc14610519578063fed0138a14610537576101da565b80639e1a4d19146104575780639e447fc614610475578063b33922ea14610491578063bbd94c2f146104ad576101da565b8063823c27ff116100de578063823c27ff146103e557806382461948146104015780639a36485c1461041d5780639d76ea5814610439576101da565b806374d5b0501461038d5780637b0a47ee146103ab578063822c0eab146103c9576101da565b80633a5451581161017c578063559b12fe1161014b578063559b12fe146103195780635bf8633a14610349578063704b6c02146103675780637362377b14610383576101da565b80633a545158146102b95780633b17c736146102d55780634451d89f146102f357806350baa622146102fd576101da565b806314870d2c116101b857806314870d2c14610247578063150b7a02146102515780631e5384ab1461028157806326a4e8d21461029d576101da565b806309d77f0e146101df5780630ac6fbd8146101fb5780630b102d1a1461022b575b600080fd5b6101f960048036038101906101f49190612654565b610567565b005b61021560048036038101906102109190612532565b610635565b6040516102229190612b3d565b60405180910390f35b61024560048036038101906102409190612460565b610666565b005b61024f610738565b005b61026b600480360381019061026691906124b2565b6107d8565b60405161027891906129e2565b60405180910390f35b61029b6004803603810190610296919061256e565b610b00565b005b6102b760048036038101906102b29190612460565b610b9e565b005b6102d360048036038101906102ce91906126a6565b610c70565b005b6102dd610d0c565b6040516102ea91906129c7565b60405180910390f35b6102fb610d1f565b005b61031760048036038101906103129190612654565b610dd5565b005b610333600480360381019061032e9190612460565b610e70565b60405161034091906129a5565b60405180910390f35b610351610f07565b60405161035e9190612901565b60405180910390f35b610381600480360381019061037c9190612460565b610f2d565b005b61038b610ffe565b005b61039561111e565b6040516103a291906129c7565b60405180910390f35b6103b36111d2565b6040516103c09190612b3d565b60405180910390f35b6103e360048036038101906103de91906125bd565b6111d8565b005b6103ff60048036038101906103fa9190612654565b6112cb565b005b61041b60048036038101906104169190612602565b611363565b005b610437600480360381019061043291906125bd565b61140e565b005b61044161159c565b60405161044e9190612901565b60405180910390f35b61045f6115c2565b60405161046c9190612b3d565b60405180910390f35b61048f600480360381019061048a9190612654565b611674565b005b6104ab60048036038101906104a691906125bd565b61170c565b005b6104c760048036038101906104c29190612654565b611808565b6040516104d49190612901565b60405180910390f35b6104e561183b565b6040516104f29190612b3d565b60405180910390f35b6105036118dd565b6040516105109190612901565b60405180910390f35b610521611901565b60405161052e9190612b3d565b60405180910390f35b610551600480360381019061054c9190612654565b611907565b60405161055e9190612b3d565b60405180910390f35b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ec90612add565b60405180910390fd5b610632816006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661191f565b50565b6008602052816000526040600020818154811061065157600080fd5b90600052602060002001600091509150505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106eb90612add565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bd90612add565b60405180910390fd5b6107d66107d16115c2565b610dd5565b565b6000600260009054906101000a900460ff16610829576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610820906129fd565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b090612afd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092090612a5d565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e866040518263ffffffff1660e01b815260040161099b9190612b3d565b60206040518083038186803b1580156109b357600080fd5b505afa1580156109c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109eb9190612489565b73ffffffffffffffffffffffffffffffffffffffff1614610a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3890612b1d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166006600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ada90612a1d565b60405180910390fd5b610aed8486611990565b63150b7a0260e01b905095945050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8590612add565b60405180910390fd5b610b99838383611a64565b505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2390612add565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf590612add565b60405180910390fd5b610d08828261191f565b5050565b600260009054906101000a900460ff1681565b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610daa57602002820191906000526020600020905b815481526020019060010190808311610d96575b505050505090506000610dbc82611ad8565b9050610dc782611bc1565b610dd13382611c70565b5050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5a90612add565b60405180910390fd5b610e6d3382611c70565b50565b6060600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610efb57602002820191906000526020600020905b815481526020019060010190808311610ee7575b50505050509050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb290612add565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461108c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108390612add565b60405180910390fd5b6000479050600081116110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cb90612a9d565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561111a573d6000803e3d6000fd5b5050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e985e9c533306040518363ffffffff1660e01b815260040161117d92919061291c565b60206040518083038186803b15801561119557600080fd5b505afa1580156111a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cd919061262b565b905090565b60015481565b611223828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505033611d78565b600061126f838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050611ad8565b905061127b3382611c70565b6112c6838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505033611e83565b505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090612add565b60405180910390fd5b8060038190555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e890612add565b60405180910390fd5b80600260006101000a81548160ff02191690831515021790555050565b61141661111e565b611455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144c90612a3d565b60405180910390fd5b6114a0828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505033611ef7565b60005b828290508110156115975760008383838181106114e9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201359050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3330846040518463ffffffff1660e01b815260040161155193929190612945565b600060405180830381600087803b15801561156b57600080fd5b505af115801561157f573d6000803e3d6000fd5b5050505050808061158f90612cfa565b9150506114a3565b505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161161f9190612901565b60206040518083038186803b15801561163757600080fd5b505afa15801561164b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166f919061267d565b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f990612add565b60405180910390fd5b8060018190555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461179a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179190612add565b60405180910390fd5b60005b82829050811015611803576117f08383838181106117e4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135610567565b80806117fb90612cfa565b91505061179d565b505050565b60066020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156118c757602002820191906000526020600020905b8154815260200190600101908083116118b3575b505050505090506118d781611ad8565b91505090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b60076020528060005260406000206000915090505481565b6119298183612079565b6006600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905561198c600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168383611a64565b5050565b806006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426007600084815260200190815260200160002081905550600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208290806001815401808255809150506001900390600052602060002001600090919091909150555050565b8273ffffffffffffffffffffffffffffffffffffffff166342842e0e3083856040518463ffffffff1660e01b8152600401611aa193929190612945565b600060405180830381600087803b158015611abb57600080fd5b505af1158015611acf573d6000803e3d6000fd5b50505050505050565b6000804290506003548111611af1576000915050611bbc565b6000805b8451811015611ba8576000858281518110611b39577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600060076000838152602001908152602001600020549050600354811015611b6b5760035490505b848110611b79575050611b95565b8085611b859190612c52565b84611b909190612ba2565b935050505b8080611ba090612cfa565b915050611af5565b5060015481611bb79190612bf8565b925050505b919050565b600042905060005b8251811015611c6b576000838281518110611c0d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600060076000838152602001908152602001600020549050838110611c3d575050611c58565b83600760008481526020019081526020016000208190555050505b8080611c6390612cfa565b915050611bc9565b505050565b611c786115c2565b811115611cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb190612a7d565b60405180910390fd5b6000811115611d7457600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611d2092919061297c565b602060405180830381600087803b158015611d3a57600080fd5b505af1158015611d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d72919061262b565b505b5050565b60005b8251811015611e7e576000838281518110611dbf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff166006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6190612abd565b60405180910390fd5b508080611e7690612cfa565b915050611d7b565b505050565b60005b8251811015611ef2576000838281518110611eca577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050611ede818461191f565b508080611eea90612cfa565b915050611e86565b505050565b60005b8251811015612074576000838281518110611f3e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401611fba9190612b3d565b60206040518083038186803b158015611fd257600080fd5b505afa158015611fe6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200a9190612489565b73ffffffffffffffffffffffffffffffffffffffff1614612060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205790612abd565b60405180910390fd5b50808061206c90612cfa565b915050611efa565b505050565b60005b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508110156123485781600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061213e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154141561233557600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506121dd9190612c52565b81548110612214577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110612296577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480612319577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600190038181906000526020600020016000905590555061234a565b808061234090612cfa565b91505061207c565b505b5050565b60008135905061235d81612f32565b92915050565b60008151905061237281612f32565b92915050565b60008083601f84011261238a57600080fd5b8235905067ffffffffffffffff8111156123a357600080fd5b6020830191508360208202830111156123bb57600080fd5b9250929050565b6000813590506123d181612f49565b92915050565b6000815190506123e681612f49565b92915050565b60008083601f8401126123fe57600080fd5b8235905067ffffffffffffffff81111561241757600080fd5b60208301915083600182028301111561242f57600080fd5b9250929050565b60008135905061244581612f60565b92915050565b60008151905061245a81612f60565b92915050565b60006020828403121561247257600080fd5b60006124808482850161234e565b91505092915050565b60006020828403121561249b57600080fd5b60006124a984828501612363565b91505092915050565b6000806000806000608086880312156124ca57600080fd5b60006124d88882890161234e565b95505060206124e98882890161234e565b94505060406124fa88828901612436565b935050606086013567ffffffffffffffff81111561251757600080fd5b612523888289016123ec565b92509250509295509295909350565b6000806040838503121561254557600080fd5b60006125538582860161234e565b925050602061256485828601612436565b9150509250929050565b60008060006060848603121561258357600080fd5b60006125918682870161234e565b93505060206125a286828701612436565b92505060406125b38682870161234e565b9150509250925092565b600080602083850312156125d057600080fd5b600083013567ffffffffffffffff8111156125ea57600080fd5b6125f685828601612378565b92509250509250929050565b60006020828403121561261457600080fd5b6000612622848285016123c2565b91505092915050565b60006020828403121561263d57600080fd5b600061264b848285016123d7565b91505092915050565b60006020828403121561266657600080fd5b600061267484828501612436565b91505092915050565b60006020828403121561268f57600080fd5b600061269d8482850161244b565b91505092915050565b600080604083850312156126b957600080fd5b60006126c785828601612436565b92505060206126d88582860161234e565b9150509250929050565b60006126ee83836128e3565b60208301905092915050565b61270381612c86565b82525050565b600061271482612b68565b61271e8185612b80565b935061272983612b58565b8060005b8381101561275a57815161274188826126e2565b975061274c83612b73565b92505060018101905061272d565b5085935050505092915050565b61277081612c98565b82525050565b61277f81612ca4565b82525050565b6000612792600e83612b91565b915061279d82612d72565b602082019050919050565b60006127b5601283612b91565b91506127c082612d9b565b602082019050919050565b60006127d8601483612b91565b91506127e382612dc4565b602082019050919050565b60006127fb601483612b91565b915061280682612ded565b602082019050919050565b600061281e602d83612b91565b915061282982612e16565b604082019050919050565b6000612841600c83612b91565b915061284c82612e65565b602082019050919050565b6000612864600f83612b91565b915061286f82612e8e565b602082019050919050565b6000612887601383612b91565b915061289282612eb7565b602082019050919050565b60006128aa600983612b91565b91506128b582612ee0565b602082019050919050565b60006128cd601083612b91565b91506128d882612f09565b602082019050919050565b6128ec81612cf0565b82525050565b6128fb81612cf0565b82525050565b600060208201905061291660008301846126fa565b92915050565b600060408201905061293160008301856126fa565b61293e60208301846126fa565b9392505050565b600060608201905061295a60008301866126fa565b61296760208301856126fa565b61297460408301846128f2565b949350505050565b600060408201905061299160008301856126fa565b61299e60208301846128f2565b9392505050565b600060208201905081810360008301526129bf8184612709565b905092915050565b60006020820190506129dc6000830184612767565b92915050565b60006020820190506129f76000830184612776565b92915050565b60006020820190508181036000830152612a1681612785565b9050919050565b60006020820190508181036000830152612a36816127a8565b9050919050565b60006020820190508181036000830152612a56816127cb565b9050919050565b60006020820190508181036000830152612a76816127ee565b9050919050565b60006020820190508181036000830152612a9681612811565b9050919050565b60006020820190508181036000830152612ab681612834565b9050919050565b60006020820190508181036000830152612ad681612857565b9050919050565b60006020820190508181036000830152612af68161287a565b9050919050565b60006020820190508181036000830152612b168161289d565b9050919050565b60006020820190508181036000830152612b36816128c0565b9050919050565b6000602082019050612b5260008301846128f2565b92915050565b6000819050602082019050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612bad82612cf0565b9150612bb883612cf0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612bed57612bec612d43565b5b828201905092915050565b6000612c0382612cf0565b9150612c0e83612cf0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612c4757612c46612d43565b5b828202905092915050565b6000612c5d82612cf0565b9150612c6883612cf0565b925082821015612c7b57612c7a612d43565b5b828203905092915050565b6000612c9182612cd0565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000612d0582612cf0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612d3857612d37612d43565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f5374616b652064697361626c6564000000000000000000000000000000000000600082015250565b7f4e465420616c7265616479207374616b65640000000000000000000000000000600082015250565b7f4f7065726174696f6e20756e617070726f766564000000000000000000000000600082015250565b7f57726f6e672073656e6465722061646472657373000000000000000000000000600082015250565b7f496e73756666696369656e7420746f6b656e20696e2074686520706f6f6c2c2060008201527f636f6e746163742061646d696e00000000000000000000000000000000000000602082015250565b7f42616c616e636520697320300000000000000000000000000000000000000000600082015250565b7f57726f6e67204e4654206f776e65720000000000000000000000000000000000600082015250565b7f43616c6c6572206973204e4f542061646d696e00000000000000000000000000600082015250565b7f57726f6e67204e46540000000000000000000000000000000000000000000000600082015250565b7f4e4654204e4f5420726563656976656400000000000000000000000000000000600082015250565b612f3b81612c86565b8114612f4657600080fd5b50565b612f5281612c98565b8114612f5d57600080fd5b50565b612f6981612cf0565b8114612f7457600080fd5b5056fea26469706673582212202751a77fcef2967782d4e2a8e29c80f1c4da90718987a6cfc64c28018c9bb6b864736f6c63430008040033000000000000000000000000000000000000000000000000003b363eba41aaab000000000000000000000000503d73d0008b97ad1516845ef73265e77e6d498f0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101da5760003560e01c806374d5b050116101045780639e1a4d19116100a2578063f6d6d5aa11610071578063f6d6d5aa146104dd578063f851a440146104fb578063fcb685bc14610519578063fed0138a14610537576101da565b80639e1a4d19146104575780639e447fc614610475578063b33922ea14610491578063bbd94c2f146104ad576101da565b8063823c27ff116100de578063823c27ff146103e557806382461948146104015780639a36485c1461041d5780639d76ea5814610439576101da565b806374d5b0501461038d5780637b0a47ee146103ab578063822c0eab146103c9576101da565b80633a5451581161017c578063559b12fe1161014b578063559b12fe146103195780635bf8633a14610349578063704b6c02146103675780637362377b14610383576101da565b80633a545158146102b95780633b17c736146102d55780634451d89f146102f357806350baa622146102fd576101da565b806314870d2c116101b857806314870d2c14610247578063150b7a02146102515780631e5384ab1461028157806326a4e8d21461029d576101da565b806309d77f0e146101df5780630ac6fbd8146101fb5780630b102d1a1461022b575b600080fd5b6101f960048036038101906101f49190612654565b610567565b005b61021560048036038101906102109190612532565b610635565b6040516102229190612b3d565b60405180910390f35b61024560048036038101906102409190612460565b610666565b005b61024f610738565b005b61026b600480360381019061026691906124b2565b6107d8565b60405161027891906129e2565b60405180910390f35b61029b6004803603810190610296919061256e565b610b00565b005b6102b760048036038101906102b29190612460565b610b9e565b005b6102d360048036038101906102ce91906126a6565b610c70565b005b6102dd610d0c565b6040516102ea91906129c7565b60405180910390f35b6102fb610d1f565b005b61031760048036038101906103129190612654565b610dd5565b005b610333600480360381019061032e9190612460565b610e70565b60405161034091906129a5565b60405180910390f35b610351610f07565b60405161035e9190612901565b60405180910390f35b610381600480360381019061037c9190612460565b610f2d565b005b61038b610ffe565b005b61039561111e565b6040516103a291906129c7565b60405180910390f35b6103b36111d2565b6040516103c09190612b3d565b60405180910390f35b6103e360048036038101906103de91906125bd565b6111d8565b005b6103ff60048036038101906103fa9190612654565b6112cb565b005b61041b60048036038101906104169190612602565b611363565b005b610437600480360381019061043291906125bd565b61140e565b005b61044161159c565b60405161044e9190612901565b60405180910390f35b61045f6115c2565b60405161046c9190612b3d565b60405180910390f35b61048f600480360381019061048a9190612654565b611674565b005b6104ab60048036038101906104a691906125bd565b61170c565b005b6104c760048036038101906104c29190612654565b611808565b6040516104d49190612901565b60405180910390f35b6104e561183b565b6040516104f29190612b3d565b60405180910390f35b6105036118dd565b6040516105109190612901565b60405180910390f35b610521611901565b60405161052e9190612b3d565b60405180910390f35b610551600480360381019061054c9190612654565b611907565b60405161055e9190612b3d565b60405180910390f35b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ec90612add565b60405180910390fd5b610632816006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661191f565b50565b6008602052816000526040600020818154811061065157600080fd5b90600052602060002001600091509150505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106eb90612add565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bd90612add565b60405180910390fd5b6107d66107d16115c2565b610dd5565b565b6000600260009054906101000a900460ff16610829576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610820906129fd565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b090612afd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092090612a5d565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e866040518263ffffffff1660e01b815260040161099b9190612b3d565b60206040518083038186803b1580156109b357600080fd5b505afa1580156109c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109eb9190612489565b73ffffffffffffffffffffffffffffffffffffffff1614610a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3890612b1d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166006600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ada90612a1d565b60405180910390fd5b610aed8486611990565b63150b7a0260e01b905095945050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8590612add565b60405180910390fd5b610b99838383611a64565b505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2390612add565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf590612add565b60405180910390fd5b610d08828261191f565b5050565b600260009054906101000a900460ff1681565b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610daa57602002820191906000526020600020905b815481526020019060010190808311610d96575b505050505090506000610dbc82611ad8565b9050610dc782611bc1565b610dd13382611c70565b5050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5a90612add565b60405180910390fd5b610e6d3382611c70565b50565b6060600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610efb57602002820191906000526020600020905b815481526020019060010190808311610ee7575b50505050509050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb290612add565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461108c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108390612add565b60405180910390fd5b6000479050600081116110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cb90612a9d565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561111a573d6000803e3d6000fd5b5050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e985e9c533306040518363ffffffff1660e01b815260040161117d92919061291c565b60206040518083038186803b15801561119557600080fd5b505afa1580156111a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cd919061262b565b905090565b60015481565b611223828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505033611d78565b600061126f838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050611ad8565b905061127b3382611c70565b6112c6838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505033611e83565b505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090612add565b60405180910390fd5b8060038190555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e890612add565b60405180910390fd5b80600260006101000a81548160ff02191690831515021790555050565b61141661111e565b611455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144c90612a3d565b60405180910390fd5b6114a0828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505033611ef7565b60005b828290508110156115975760008383838181106114e9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201359050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3330846040518463ffffffff1660e01b815260040161155193929190612945565b600060405180830381600087803b15801561156b57600080fd5b505af115801561157f573d6000803e3d6000fd5b5050505050808061158f90612cfa565b9150506114a3565b505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161161f9190612901565b60206040518083038186803b15801561163757600080fd5b505afa15801561164b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166f919061267d565b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f990612add565b60405180910390fd5b8060018190555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461179a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179190612add565b60405180910390fd5b60005b82829050811015611803576117f08383838181106117e4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135610567565b80806117fb90612cfa565b91505061179d565b505050565b60066020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156118c757602002820191906000526020600020905b8154815260200190600101908083116118b3575b505050505090506118d781611ad8565b91505090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b60076020528060005260406000206000915090505481565b6119298183612079565b6006600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905561198c600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168383611a64565b5050565b806006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426007600084815260200190815260200160002081905550600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208290806001815401808255809150506001900390600052602060002001600090919091909150555050565b8273ffffffffffffffffffffffffffffffffffffffff166342842e0e3083856040518463ffffffff1660e01b8152600401611aa193929190612945565b600060405180830381600087803b158015611abb57600080fd5b505af1158015611acf573d6000803e3d6000fd5b50505050505050565b6000804290506003548111611af1576000915050611bbc565b6000805b8451811015611ba8576000858281518110611b39577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600060076000838152602001908152602001600020549050600354811015611b6b5760035490505b848110611b79575050611b95565b8085611b859190612c52565b84611b909190612ba2565b935050505b8080611ba090612cfa565b915050611af5565b5060015481611bb79190612bf8565b925050505b919050565b600042905060005b8251811015611c6b576000838281518110611c0d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600060076000838152602001908152602001600020549050838110611c3d575050611c58565b83600760008481526020019081526020016000208190555050505b8080611c6390612cfa565b915050611bc9565b505050565b611c786115c2565b811115611cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb190612a7d565b60405180910390fd5b6000811115611d7457600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611d2092919061297c565b602060405180830381600087803b158015611d3a57600080fd5b505af1158015611d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d72919061262b565b505b5050565b60005b8251811015611e7e576000838281518110611dbf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff166006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6190612abd565b60405180910390fd5b508080611e7690612cfa565b915050611d7b565b505050565b60005b8251811015611ef2576000838281518110611eca577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050611ede818461191f565b508080611eea90612cfa565b915050611e86565b505050565b60005b8251811015612074576000838281518110611f3e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401611fba9190612b3d565b60206040518083038186803b158015611fd257600080fd5b505afa158015611fe6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200a9190612489565b73ffffffffffffffffffffffffffffffffffffffff1614612060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205790612abd565b60405180910390fd5b50808061206c90612cfa565b915050611efa565b505050565b60005b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508110156123485781600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061213e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154141561233557600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506121dd9190612c52565b81548110612214577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110612296577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480612319577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600190038181906000526020600020016000905590555061234a565b808061234090612cfa565b91505061207c565b505b5050565b60008135905061235d81612f32565b92915050565b60008151905061237281612f32565b92915050565b60008083601f84011261238a57600080fd5b8235905067ffffffffffffffff8111156123a357600080fd5b6020830191508360208202830111156123bb57600080fd5b9250929050565b6000813590506123d181612f49565b92915050565b6000815190506123e681612f49565b92915050565b60008083601f8401126123fe57600080fd5b8235905067ffffffffffffffff81111561241757600080fd5b60208301915083600182028301111561242f57600080fd5b9250929050565b60008135905061244581612f60565b92915050565b60008151905061245a81612f60565b92915050565b60006020828403121561247257600080fd5b60006124808482850161234e565b91505092915050565b60006020828403121561249b57600080fd5b60006124a984828501612363565b91505092915050565b6000806000806000608086880312156124ca57600080fd5b60006124d88882890161234e565b95505060206124e98882890161234e565b94505060406124fa88828901612436565b935050606086013567ffffffffffffffff81111561251757600080fd5b612523888289016123ec565b92509250509295509295909350565b6000806040838503121561254557600080fd5b60006125538582860161234e565b925050602061256485828601612436565b9150509250929050565b60008060006060848603121561258357600080fd5b60006125918682870161234e565b93505060206125a286828701612436565b92505060406125b38682870161234e565b9150509250925092565b600080602083850312156125d057600080fd5b600083013567ffffffffffffffff8111156125ea57600080fd5b6125f685828601612378565b92509250509250929050565b60006020828403121561261457600080fd5b6000612622848285016123c2565b91505092915050565b60006020828403121561263d57600080fd5b600061264b848285016123d7565b91505092915050565b60006020828403121561266657600080fd5b600061267484828501612436565b91505092915050565b60006020828403121561268f57600080fd5b600061269d8482850161244b565b91505092915050565b600080604083850312156126b957600080fd5b60006126c785828601612436565b92505060206126d88582860161234e565b9150509250929050565b60006126ee83836128e3565b60208301905092915050565b61270381612c86565b82525050565b600061271482612b68565b61271e8185612b80565b935061272983612b58565b8060005b8381101561275a57815161274188826126e2565b975061274c83612b73565b92505060018101905061272d565b5085935050505092915050565b61277081612c98565b82525050565b61277f81612ca4565b82525050565b6000612792600e83612b91565b915061279d82612d72565b602082019050919050565b60006127b5601283612b91565b91506127c082612d9b565b602082019050919050565b60006127d8601483612b91565b91506127e382612dc4565b602082019050919050565b60006127fb601483612b91565b915061280682612ded565b602082019050919050565b600061281e602d83612b91565b915061282982612e16565b604082019050919050565b6000612841600c83612b91565b915061284c82612e65565b602082019050919050565b6000612864600f83612b91565b915061286f82612e8e565b602082019050919050565b6000612887601383612b91565b915061289282612eb7565b602082019050919050565b60006128aa600983612b91565b91506128b582612ee0565b602082019050919050565b60006128cd601083612b91565b91506128d882612f09565b602082019050919050565b6128ec81612cf0565b82525050565b6128fb81612cf0565b82525050565b600060208201905061291660008301846126fa565b92915050565b600060408201905061293160008301856126fa565b61293e60208301846126fa565b9392505050565b600060608201905061295a60008301866126fa565b61296760208301856126fa565b61297460408301846128f2565b949350505050565b600060408201905061299160008301856126fa565b61299e60208301846128f2565b9392505050565b600060208201905081810360008301526129bf8184612709565b905092915050565b60006020820190506129dc6000830184612767565b92915050565b60006020820190506129f76000830184612776565b92915050565b60006020820190508181036000830152612a1681612785565b9050919050565b60006020820190508181036000830152612a36816127a8565b9050919050565b60006020820190508181036000830152612a56816127cb565b9050919050565b60006020820190508181036000830152612a76816127ee565b9050919050565b60006020820190508181036000830152612a9681612811565b9050919050565b60006020820190508181036000830152612ab681612834565b9050919050565b60006020820190508181036000830152612ad681612857565b9050919050565b60006020820190508181036000830152612af68161287a565b9050919050565b60006020820190508181036000830152612b168161289d565b9050919050565b60006020820190508181036000830152612b36816128c0565b9050919050565b6000602082019050612b5260008301846128f2565b92915050565b6000819050602082019050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612bad82612cf0565b9150612bb883612cf0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612bed57612bec612d43565b5b828201905092915050565b6000612c0382612cf0565b9150612c0e83612cf0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612c4757612c46612d43565b5b828202905092915050565b6000612c5d82612cf0565b9150612c6883612cf0565b925082821015612c7b57612c7a612d43565b5b828203905092915050565b6000612c9182612cd0565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000612d0582612cf0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612d3857612d37612d43565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f5374616b652064697361626c6564000000000000000000000000000000000000600082015250565b7f4e465420616c7265616479207374616b65640000000000000000000000000000600082015250565b7f4f7065726174696f6e20756e617070726f766564000000000000000000000000600082015250565b7f57726f6e672073656e6465722061646472657373000000000000000000000000600082015250565b7f496e73756666696369656e7420746f6b656e20696e2074686520706f6f6c2c2060008201527f636f6e746163742061646d696e00000000000000000000000000000000000000602082015250565b7f42616c616e636520697320300000000000000000000000000000000000000000600082015250565b7f57726f6e67204e4654206f776e65720000000000000000000000000000000000600082015250565b7f43616c6c6572206973204e4f542061646d696e00000000000000000000000000600082015250565b7f57726f6e67204e46540000000000000000000000000000000000000000000000600082015250565b7f4e4654204e4f5420726563656976656400000000000000000000000000000000600082015250565b612f3b81612c86565b8114612f4657600080fd5b50565b612f5281612c98565b8114612f5d57600080fd5b50565b612f6981612cf0565b8114612f7457600080fd5b5056fea26469706673582212202751a77fcef2967782d4e2a8e29c80f1c4da90718987a6cfc64c28018c9bb6b864736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000003b363eba41aaab000000000000000000000000503d73d0008b97ad1516845ef73265e77e6d498f0000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : rewardRate_ (uint256): 16666666666666667
Arg [1] : nftAddress_ (address): 0x503D73D0008B97aD1516845eF73265e77e6D498F
Arg [2] : tokenAddress_ (address): 0x0000000000000000000000000000000000000000
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000003b363eba41aaab
Arg [1] : 000000000000000000000000503d73d0008b97ad1516845ef73265e77e6d498f
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
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.