Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 90 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Farm Deposit | 21093216 | 40 mins ago | IN | 0 ETH | 0.00181975 | ||||
Farm Deposit | 21093178 | 48 mins ago | IN | 0 ETH | 0.00131881 | ||||
Farm Deposit | 21093052 | 1 hr ago | IN | 0 ETH | 0.00110256 | ||||
Farm Deposit | 21092827 | 1 hr ago | IN | 0 ETH | 0.00131239 | ||||
Claim Rewards | 21091464 | 6 hrs ago | IN | 0 ETH | 0.00057531 | ||||
Claim Rewards | 21091246 | 7 hrs ago | IN | 0 ETH | 0.00054215 | ||||
Farm Withdraw | 21090689 | 9 hrs ago | IN | 0 ETH | 0.00047759 | ||||
Farm Deposit | 21090484 | 9 hrs ago | IN | 0 ETH | 0.00050635 | ||||
Farm Deposit | 21089265 | 13 hrs ago | IN | 0 ETH | 0.00076008 | ||||
Farm Deposit | 21089089 | 14 hrs ago | IN | 0 ETH | 0.00107367 | ||||
Farm Deposit | 21088828 | 15 hrs ago | IN | 0 ETH | 0.00083972 | ||||
Farm Deposit | 21088493 | 16 hrs ago | IN | 0 ETH | 0.00109973 | ||||
Farm Deposit | 21087961 | 18 hrs ago | IN | 0 ETH | 0.00131496 | ||||
Farm Deposit | 21087921 | 18 hrs ago | IN | 0 ETH | 0.00132344 | ||||
Farm Deposit | 21087073 | 21 hrs ago | IN | 0 ETH | 0.00171781 | ||||
Farm Deposit | 21083993 | 31 hrs ago | IN | 0 ETH | 0.00083248 | ||||
Farm Deposit | 21083423 | 33 hrs ago | IN | 0 ETH | 0.00080279 | ||||
Claim Rewards | 21083420 | 33 hrs ago | IN | 0 ETH | 0.00069448 | ||||
Farm Deposit | 21083371 | 33 hrs ago | IN | 0 ETH | 0.00098744 | ||||
Farm Deposit | 21082149 | 37 hrs ago | IN | 0 ETH | 0.00120346 | ||||
Farm Deposit | 21081897 | 38 hrs ago | IN | 0 ETH | 0.00099079 | ||||
Farm Deposit | 21081274 | 40 hrs ago | IN | 0 ETH | 0.00132045 | ||||
Farm Deposit | 21081247 | 40 hrs ago | IN | 0 ETH | 0.00158156 | ||||
Farm Deposit | 21080454 | 43 hrs ago | IN | 0 ETH | 0.00214756 | ||||
Farm Deposit | 21079829 | 45 hrs ago | IN | 0 ETH | 0.00214734 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
DynamicRewardFarm
Compiler Version
v0.8.26+commit.8a97fa7a
Optimization Enabled:
Yes with 9999999 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: -- BCOM -- pragma solidity =0.8.26; import "./TokenWrapper.sol"; error NoRewards(); error UnknownToken(); error ExistingToken(); error InvalidAddress(); contract DynamicRewardFarm is TokenWrapper { IERC20 public stakeToken; uint256 public periodFinished; uint256 public rewardDuration; uint256 public lastUpdateTime; uint256 constant MAX_TOKENS = 20; uint256 constant PRECISIONS = 1E18; address public ownerAddress; address public proposedOwner; address public managerAddress; uint256 public tokenCount; address[] public rewardTokens; address constant DEAD_ADDRESS = address( 0x000000000000000000000000000000000000dEaD ); struct RewardData { uint256 rewardRate; uint256 perTokenStored; mapping(address => uint256) userRewards; mapping(address => uint256) perTokenPaid; } mapping(address => RewardData) public rewards; modifier onlyOwner() { _onlyOwner(); _; } modifier onlyManager() { _onlyManager(); _; } modifier updateFarm() { _updateFarm(); _; } modifier updateUser() { _updateUser(msg.sender); _; } modifier updateSender(address _sender) { _updateUser(_sender); _; } event RewardTokenAdded( address indexed rewardToken, uint256 tokenCount ); /** * @dev No modifier necessary since this contract is * cloned by the factory contract calling initialize */ function initialize( address _stakeToken, uint256 _defaultDuration, address _ownerAddress, address _managerAddress, string calldata _name, string calldata _symbol ) external // onlyFactory { require( _defaultDuration > 0, "DynamicRewardFarm: INVALID_DURATION" ); require( rewardDuration == 0, "DynamicRewardFarm: ALREADY_INITIALIZED" ); rewardDuration = _defaultDuration; name = _name; symbol = _symbol; stakeToken = IERC20( _stakeToken ); ownerAddress = _ownerAddress; managerAddress = _managerAddress; _stake( PRECISIONS, DEAD_ADDRESS ); } /** * @dev Adds a new reward token to the farm */ function addRewardToken( address _rewardToken ) external onlyOwner { require( tokenCount < MAX_TOKENS, "DynamicRewardFarm: MAX_TOKENS_REACHED" ); _validateRewardToken( _rewardToken ); rewardTokens.push( _rewardToken ); tokenCount = tokenCount + 1; emit RewardTokenAdded( _rewardToken, tokenCount ); } /** * @dev Checks if the token is already added */ function _validateRewardToken( address _tokenAddress ) private view { if (_tokenAddress == ZERO_ADDRESS) { revert InvalidAddress(); } for (uint256 i; i < rewardTokens.length; i++) { if (_tokenAddress == rewardTokens[i]) { revert ExistingToken(); } } } function getRewardTokens() external view returns (address[] memory) { address[] memory tokens = new address[]( rewardTokens.length ); for (uint256 i; i < rewardTokens.length; i++) { tokens[i] = rewardTokens[i]; } return tokens; } /** * @dev Tracks timestamp for when reward was applied last time */ function lastTimeRewardApplicable() public view returns (uint256 res) { res = block.timestamp < periodFinished ? block.timestamp : periodFinished; } /** * @dev Relative value on reward for single * staked token for a given {_rewardToken} */ function rewardPerToken( address _rewardToken ) public view returns (uint256) { RewardData storage r = rewards[ _rewardToken ]; uint256 timeFrame = lastTimeRewardApplicable() - lastUpdateTime; uint256 extraFund = timeFrame * r.rewardRate * PRECISIONS / _totalStaked; return r.perTokenStored + extraFund; } /** * @dev Returns an array of earned amounts for * all reward tokens by given {_walletAddress} */ function earned( address _walletAddress ) external view returns (uint256[] memory) { uint256[] memory earnedAmounts = new uint256[]( rewardTokens.length ); for (uint256 i; i < rewardTokens.length; i++) { earnedAmounts[i] = earnedByToken( rewardTokens[i], _walletAddress ); } return earnedAmounts; } /** * @dev Reports earned amount of a reward * token by wallet address not yet collected */ function earnedByToken( address _rewardToken, address _walletAddress ) public view returns (uint256) { RewardData storage r = rewards[ _rewardToken ]; uint256 difference = rewardPerToken(_rewardToken) - r.perTokenPaid[_walletAddress]; return _balances[_walletAddress] * difference / PRECISIONS + r.userRewards[_walletAddress]; } /** * @dev Performs deposit of staked token into the farm */ function farmDeposit( uint256 _stakeAmount ) external updateFarm() updateUser() { address senderAddress = msg.sender; _stake( _stakeAmount, senderAddress ); safeTransferFrom( stakeToken, senderAddress, address(this), _stakeAmount ); emit Staked( senderAddress, _stakeAmount ); } function farmWithdraw( uint256 _withdrawAmount ) public updateFarm() updateUser() { address senderAddress = msg.sender; _withdraw( _withdrawAmount, senderAddress ); safeTransfer( stakeToken, senderAddress, _withdrawAmount ); emit Withdrawn( senderAddress, _withdrawAmount ); } function exitFarm() external { uint256 withdrawAmount = _balances[ msg.sender ]; farmWithdraw( withdrawAmount ); claimRewards(); } function claimRewards() public updateFarm() updateUser() { address senderAddress = msg.sender; for (uint256 i; i < rewardTokens.length; i++) { address tokenAddress = rewardTokens[i]; RewardData storage r = rewards[ tokenAddress ]; uint256 rewardAmount = earnedByToken( tokenAddress, senderAddress ); if (rewardAmount > 0) { r.userRewards[senderAddress] = 0; safeTransfer( IERC20(tokenAddress), senderAddress, rewardAmount ); emit RewardPaid( senderAddress, tokenAddress, rewardAmount ); } } } function proposeNewOwner( address _newOwner ) external onlyOwner { if (_newOwner == ZERO_ADDRESS) { revert InvalidAddress(); } proposedOwner = _newOwner; emit OwnerProposed( _newOwner ); } function claimOwnership() external { require( msg.sender == proposedOwner, "DynamicRewardFarm: INVALID_CANDIDATE" ); ownerAddress = proposedOwner; emit OwnerChanged( ownerAddress ); } function changeManager( address _newManager ) external onlyOwner { if (_newManager == ZERO_ADDRESS) { revert InvalidAddress(); } managerAddress = _newManager; emit ManagerChanged( _newManager ); } function recoverToken( address _tokenAddress, uint256 _recoveryAmount ) external onlyOwner { IERC20 tokenAddress = IERC20( _tokenAddress ); if (tokenAddress == stakeToken) { revert("DynamicRewardFarm: STAKE_TOKEN"); } for (uint256 i; i < rewardTokens.length; i++) { if (_tokenAddress == rewardTokens[i]) { uint256 earnedByDead = earnedByToken( _tokenAddress, DEAD_ADDRESS ); require( _recoveryAmount <= earnedByDead, "DynamicRewardFarm: NOT_ENOUGH_REWARDS" ); _updateFarm(); _updateUser(DEAD_ADDRESS); rewards[_tokenAddress].userRewards[DEAD_ADDRESS] = rewards[_tokenAddress].userRewards[DEAD_ADDRESS] - _recoveryAmount; break; } } safeTransfer( tokenAddress, ownerAddress, _recoveryAmount ); emit Recovered( tokenAddress, _recoveryAmount ); } function setRewardDuration( uint256 _rewardDuration ) external onlyOwner { require( _rewardDuration > 0, "DynamicRewardFarm: INVALID_DURATION" ); require( block.timestamp > periodFinished, "DynamicRewardFarm: ONGOING_DISTRIBUTION" ); rewardDuration = _rewardDuration; emit RewardsDurationUpdated( _rewardDuration ); } function _onlyExistingToken( address _tokenAddress ) private view { for (uint256 i; i < rewardTokens.length; i++) { if (_tokenAddress == rewardTokens[i]) { return; } } revert UnknownToken(); } /** * @dev Internal function to set reward rate for a token */ function _setRewardRate( address _rewardToken, uint256 _newRewardRate ) private { _onlyExistingToken( _rewardToken ); IERC20 tokenAddress = IERC20( _rewardToken ); RewardData storage r = rewards[ _rewardToken ]; if (block.timestamp < periodFinished) { require( r.rewardRate <= _newRewardRate, "DynamicRewardFarm: RATE_CANT_DECREASE" ); uint256 remainingTime = periodFinished - block.timestamp; uint256 remainingRewards = remainingTime * r.rewardRate; safeTransfer( tokenAddress, managerAddress, remainingRewards ); } r.rewardRate = _newRewardRate; uint256 newRewardAmount = rewardDuration * _newRewardRate; safeTransferFrom( tokenAddress, managerAddress, address(this), newRewardAmount ); emit RewardAdded( _rewardToken, _newRewardRate, newRewardAmount ); } /** * @dev Sets the reward rates for multiple reward tokens */ function setRewardRates( address[] calldata _rewardTokens, uint256[] calldata _newRewardRates ) external onlyManager updateFarm() { require( _rewardTokens.length == _newRewardRates.length, "DynamicRewardFarm: ARRAY_LENGTH_MISMATCH" ); require( _rewardTokens.length == rewardTokens.length, "DynamicRewardFarm: TOKEN_LENGTH_MISMATCH" ); _shouldHaveSomeRewards( _newRewardRates ); for (uint256 i; i < _rewardTokens.length; i++) { require( _rewardTokens[i] == rewardTokens[i], "DynamicRewardFarm: INVALID_TOKEN_ORDER" ); _setRewardRate( _rewardTokens[i], _newRewardRates[i] ); } lastUpdateTime = block.timestamp; periodFinished = block.timestamp + rewardDuration; } /** * @dev Checks if there are any rewards to distribute */ function _shouldHaveSomeRewards( uint256[] calldata _newRewardRates ) private pure { for (uint256 i; i < _newRewardRates.length; i++) { if (_newRewardRates[i] > 0) { return; } } revert NoRewards(); } /** * @dev Allows to transfer receipt tokens */ function transfer( address _recipient, uint256 _amount ) external updateFarm() updateUser() updateSender(_recipient) returns (bool) { _transfer( msg.sender, _recipient, _amount ); return true; } /** * @dev Allows to transfer receipt tokens on owner's behalf */ function transferFrom( address _sender, address _recipient, uint256 _amount ) external updateFarm() updateSender(_sender) updateSender(_recipient) returns (bool) { if (_allowances[_sender][msg.sender] != type(uint256).max) { _allowances[_sender][msg.sender] -= _amount; } _transfer( _sender, _recipient, _amount ); return true; } function _updateFarm() private { for (uint256 i; i < rewardTokens.length; i++) { address rewardToken = rewardTokens[i]; rewards[rewardToken].perTokenStored = rewardPerToken( rewardToken ); } lastUpdateTime = lastTimeRewardApplicable(); } function _updateUser( address _user ) private { for (uint256 i; i < rewardTokens.length; i++) { address tokenAddress = rewardTokens[i]; RewardData storage r = rewards[ tokenAddress ]; r.userRewards[_user] = earnedByToken( tokenAddress, _user ); r.perTokenPaid[_user] = r.perTokenStored; } } function _onlyOwner() private view { require( msg.sender == ownerAddress, "DynamicRewardFarm: INVALID_OWNER" ); } function _onlyManager() private view { require( msg.sender == managerAddress, "DynamicRewardFarm: INVALID_MANAGER" ); } }
// SPDX-License-Identifier: -- BCOM -- pragma solidity =0.8.26; import "./SafeERC20.sol"; contract TokenWrapper is SafeERC20 { string public name; string public symbol; uint8 public constant decimals = 18; uint256 _totalStaked; mapping(address => uint256) _balances; mapping(address => mapping(address => uint256)) _allowances; address constant ZERO_ADDRESS = address(0x0); event Transfer( address indexed from, address indexed to, uint256 value ); event Approval( address indexed owner, address indexed spender, uint256 value ); event Staked( address indexed user, uint256 tokenAmount ); event Withdrawn( address indexed user, uint256 tokenAmount ); event RewardAdded( address indexed rewardToken, uint256 rewardRate, uint256 tokenAmount ); event RewardPaid( address indexed user, address indexed rewardToken, uint256 tokenAmount ); event Recovered( IERC20 indexed token, uint256 tokenAmount ); event RewardsDurationUpdated( uint256 newRewardDuration ); event OwnerProposed( address proposedOwner ); event OwnerChanged( address newOwner ); event ManagerChanged( address newManager ); /** * @dev Returns total amount of staked tokens */ function totalSupply() external view returns (uint256) { return _totalStaked; } /** * @dev Returns staked amount by wallet address */ function balanceOf( address _walletAddress ) external view returns (uint256) { return _balances[_walletAddress]; } /** * @dev Increases staked amount by wallet address */ function _stake( uint256 _amount, address _address ) internal { _totalStaked = _totalStaked + _amount; unchecked { _balances[_address] = _balances[_address] + _amount; } emit Transfer( ZERO_ADDRESS, _address, _amount ); } /** * @dev Decreases total staked amount */ function _withdraw( uint256 _amount, address _address ) internal { _burn( _amount, _address ); } /** * @dev Decreases total staked amount */ function _burn( uint256 _amount, address _address ) internal { unchecked { _totalStaked = _totalStaked - _amount; } _balances[_address] = _balances[_address] - _amount; emit Transfer( _address, ZERO_ADDRESS, _amount ); } /** * @dev Updates balances during transfer */ function _transfer( address _sender, address _recipient, uint256 _amount ) internal { _balances[_sender] = _balances[_sender] - _amount; unchecked { _balances[_recipient] = _balances[_recipient] + _amount; } emit Transfer( _sender, _recipient, _amount ); } /** * @dev Grants permission for receipt tokens transfer on owner's behalf */ function approve( address _spender, uint256 _amount ) external returns (bool) { _approve( msg.sender, _spender, _amount ); return true; } /** * @dev Checks value for receipt tokens transfer on owner's behalf */ function allowance( address _owner, address _spender ) external view returns (uint256) { return _allowances[_owner][_spender]; } /** * @dev Allowance update for receipt tokens transfer on owner's behalf */ function _approve( address _owner, address _spender, uint256 _amount ) internal { _allowances[_owner][_spender] = _amount; emit Approval( _owner, _spender, _amount ); } /** * @dev Increases value for receipt tokens transfer on owner's behalf */ function increaseAllowance( address _spender, uint256 _addedValue ) external returns (bool) { _approve( msg.sender, _spender, _allowances[msg.sender][_spender] + _addedValue ); return true; } /** * @dev Decreases value for receipt tokens transfer on owner's behalf */ function decreaseAllowance( address _spender, uint256 _subtractedValue ) external returns (bool) { _approve( msg.sender, _spender, _allowances[msg.sender][_spender] - _subtractedValue ); return true; } }
// SPDX-License-Identifier: -- BCOM -- pragma solidity =0.8.26; import "./IERC20.sol"; error SafeERC20FailedOperation( address token ); contract SafeERC20 { /** * @dev Allows to execute transfer for a token */ function safeTransfer( IERC20 _token, address _to, uint256 _value ) internal { _callOptionalReturn( _token, abi.encodeWithSelector( _token.transfer.selector, _to, _value ) ); } /** * @dev Allows to execute transferFrom for a token */ function safeTransferFrom( IERC20 _token, address _from, address _to, uint256 _value ) internal { _callOptionalReturn( _token, abi.encodeWithSelector( _token.transferFrom.selector, _from, _to, _value ) ); } function _callOptionalReturn( IERC20 _token, bytes memory _data ) private { uint256 returnSize; uint256 returnValue; assembly ("memory-safe") { let success := call( gas(), _token, 0, add(_data, 0x20), mload(_data), 0, 0x20 ) // bubble errors if iszero(success) { let ptr := mload(0x40) returndatacopy( ptr, 0, returndatasize() ) revert( ptr, returndatasize() ) } returnSize := returndatasize() returnValue := mload(0) } if (returnSize == 0 ? address(_token).code.length == 0 : returnValue != 1 ) { revert SafeERC20FailedOperation( address(_token) ); } } }
// SPDX-License-Identifier: -- BCOM -- pragma solidity =0.8.26; interface IERC20 { /** * @dev Interface fo transfer function */ function transfer( address _recipient, uint256 _amount ) external returns (bool); /** * @dev Interface for transferFrom function */ function transferFrom( address _sender, address _recipient, uint256 _amount ) external returns (bool); /** * @dev Interface for approve function */ function approve( address _spender, uint256 _amount ) external returns (bool); function balanceOf( address _account ) external view returns (uint256); function mint( address _user, uint256 _amount ) external; }
{ "remappings": [ "@chainlink/=node_modules/@chainlink/", "@ensdomains/=node_modules/@ensdomains/", "@eth-optimism/=node_modules/@eth-optimism/", "@openzeppelin/=node_modules/@openzeppelin/", "ds-test/=lib/forge-std/lib/ds-test/src/", "eth-gas-reporter/=node_modules/eth-gas-reporter/", "forge-std/=lib/forge-std/src/", "hardhat/=node_modules/hardhat/", "truffle/=node_modules/truffle/" ], "optimizer": { "enabled": true, "runs": 9999999 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "cancun", "viaIR": false, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"name":"ExistingToken","type":"error"},{"inputs":[],"name":"InvalidAddress","type":"error"},{"inputs":[],"name":"NoRewards","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[],"name":"UnknownToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newManager","type":"address"}],"name":"ManagerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnerProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"Recovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"rewardToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"rewardRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"rewardToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"RewardPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"rewardToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenCount","type":"uint256"}],"name":"RewardTokenAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newRewardDuration","type":"uint256"}],"name":"RewardsDurationUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[{"internalType":"address","name":"_rewardToken","type":"address"}],"name":"addRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_walletAddress","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newManager","type":"address"}],"name":"changeManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_walletAddress","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardToken","type":"address"},{"internalType":"address","name":"_walletAddress","type":"address"}],"name":"earnedByToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"exitFarm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakeAmount","type":"uint256"}],"name":"farmDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_withdrawAmount","type":"uint256"}],"name":"farmWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getRewardTokens","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stakeToken","type":"address"},{"internalType":"uint256","name":"_defaultDuration","type":"uint256"},{"internalType":"address","name":"_ownerAddress","type":"address"},{"internalType":"address","name":"_managerAddress","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastTimeRewardApplicable","outputs":[{"internalType":"uint256","name":"res","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"managerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodFinished","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposedOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_recoveryAmount","type":"uint256"}],"name":"recoverToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardToken","type":"address"}],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"rewardRate","type":"uint256"},{"internalType":"uint256","name":"perTokenStored","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardDuration","type":"uint256"}],"name":"setRewardDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_rewardTokens","type":"address[]"},{"internalType":"uint256[]","name":"_newRewardRates","type":"uint256[]"}],"name":"setRewardRates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakeToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052348015600e575f80fd5b50612a4b8061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610282575f3560e01c806390717dd311610157578063b29a8140116100d2578063cf73a1bc11610088578063dd62ed3e1161006e578063dd62ed3e146105a3578063f1229777146105e8578063f520e7e5146105fb575f80fd5b8063cf73a1bc14610563578063d153b60c14610583575f80fd5b8063c4f59f9b116100b8578063c4f59f9b1461053d578063c8f33c9114610552578063cddaf3581461055b575f80fd5b8063b29a814014610517578063c0ed00c91461052a575f80fd5b8063a457c2d711610127578063a9a901971161010d578063a9a90197146104de578063b1899bd6146104f1578063b1f8100d14610504575f80fd5b8063a457c2d7146104b8578063a9059cbb146104cb575f80fd5b806390717dd31461048157806395d89b41146104945780639f181b5e1461049c578063a3fbbaae146104a5575f80fd5b8063313ce5671161020157806351ed6a30116101b75780637bb7bed11161019d5780637bb7bed11461044657806380faa57d146104595780638f84aa0914610461575f80fd5b806351ed6a30146103cc57806370a0823114610411575f80fd5b806339509351116101e7578063395093511461039e5780633b9e9b45146103b15780634e71e0c8146103c4575f80fd5b8063313ce5671461037c578063372500ab14610396575f80fd5b80630962c4f9116102565780631c03e6cc1161023c5780631c03e6cc1461034157806323b872dd146103565780632b8c8a6414610369575f80fd5b80630962c4f91461032257806318160ddd14610339575f80fd5b80628cc2621461028657806306fdde03146102af5780630700037d146102c4578063095ea7b3146102ff575b5f80fd5b610299610294366004612426565b610604565b6040516102a69190612446565b60405180910390f35b6102b76106c5565b6040516102a69190612488565b6102ea6102d2366004612426565b600e6020525f90815260409020805460019091015482565b604080519283526020830191909152016102a6565b61031261030d3660046124db565b610750565b60405190151581526020016102a6565b61032b60065481565b6040519081526020016102a6565b60025461032b565b61035461034f366004612426565b610766565b005b610312610364366004612503565b6108dd565b61035461037736600461253d565b6109ac565b610384601281565b60405160ff90911681526020016102a6565b610354610a40565b6103126103ac3660046124db565b610b60565b61032b6103bf366004612554565b610ba8565b610354610c60565b6005546103ec9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102a6565b61032b61041f366004612426565b73ffffffffffffffffffffffffffffffffffffffff165f9081526003602052604090205490565b6103ec61045436600461253d565b610d81565b61032b610db6565b6009546103ec9073ffffffffffffffffffffffffffffffffffffffff1681565b61035461048f36600461253d565b610dcc565b6102b7610e55565b61032b600c5481565b6103546104b3366004612426565b610e62565b6103126104c63660046124db565b610f31565b6103126104d93660046124db565b610f74565b6103546104ec3660046125ca565b610fa5565b6103546104ff3660046126b4565b611164565b610354610512366004612426565b611412565b6103546105253660046124db565b6114da565b61035461053836600461253d565b611763565b6105456118c0565b6040516102a69190612720565b61032b60085481565b610354611998565b600b546103ec9073ffffffffffffffffffffffffffffffffffffffff1681565b600a546103ec9073ffffffffffffffffffffffffffffffffffffffff1681565b61032b6105b1366004612554565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260046020908152604080832093909416825291909152205490565b61032b6105f6366004612426565b6119bb565b61032b60075481565b600d546060905f9067ffffffffffffffff8111156106245761062461276d565b60405190808252806020026020018201604052801561064d578160200160208202803683370190505b5090505f5b600d548110156106be57610699600d82815481106106725761067261279a565b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff1685610ba8565b8282815181106106ab576106ab61279a565b6020908102919091010152600101610652565b5092915050565b5f80546106d1906127c7565b80601f01602080910402602001604051908101604052809291908181526020018280546106fd906127c7565b80156107485780601f1061071f57610100808354040283529160200191610748565b820191905f5260205f20905b81548152906001019060200180831161072b57829003601f168201915b505050505081565b5f61075c338484611a3a565b5060015b92915050565b61076e611aa8565b6014600c5410610805576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f44796e616d69635265776172644661726d3a204d41585f544f4b454e535f524560448201527f414348454400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61080e81611b2b565b600d8054600180820183555f929092527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055600c5461088a9161283f565b600c81905560405190815273ffffffffffffffffffffffffffffffffffffffff8216907f68e3e9397770d9dfa88c0953a34e1a70a05416b3895957f5b689787a920791c49060200160405180910390a250565b5f6108e6611bfc565b836108f081611c8a565b836108fa81611c8a565b73ffffffffffffffffffffffffffffffffffffffff86165f9081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146109955773ffffffffffffffffffffffffffffffffffffffff86165f9081526004602090815260408083203384529091528120805486929061098f908490612852565b90915550505b6109a0868686611d34565b50600195945050505050565b6109b4611bfc565b6109bd33611c8a565b336109c88282611dcf565b6005546109ec9073ffffffffffffffffffffffffffffffffffffffff168284611dd9565b8073ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d583604051610a3491815260200190565b60405180910390a25050565b610a48611bfc565b610a5133611c8a565b335f5b600d54811015610b5c575f600d8281548110610a7257610a7261279a565b5f91825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16808352600e9091526040822090925090610aaf8386610ba8565b90508015610b515773ffffffffffffffffffffffffffffffffffffffff85165f908152600283016020526040812055610ae9838683611dd9565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f540798df468d7b23d11f156fdb954cb19ad414d150722a7b6d55ba369dea792e83604051610b4891815260200190565b60405180910390a35b505050600101610a54565b5050565b335f81815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161075c918590610ba390869061283f565b611a3a565b73ffffffffffffffffffffffffffffffffffffffff8083165f908152600e602090815260408083209385168352600384019091528120549091908290610bed866119bb565b610bf79190612852565b73ffffffffffffffffffffffffffffffffffffffff85165f90815260028401602090815260408083205460039092529091205491925090670de0b6b3a764000090610c43908490612865565b610c4d919061287c565b610c57919061283f565b95945050505050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f44796e616d69635265776172644661726d3a20494e56414c49445f43414e444960448201527f444154450000000000000000000000000000000000000000000000000000000060648201526084016107fc565b600a54600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040519081527fa2ea9883a321a3e97b8266c2b078bfeec6d50c711ed71f874a90d500ae2eaf369060200160405180910390a1565b600d8181548110610d90575f80fd5b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b5f6006544210610dc7575060065490565b504290565b610dd4611bfc565b610ddd33611c8a565b33610de88282611eb2565b600554610e0d9073ffffffffffffffffffffffffffffffffffffffff16823085611f24565b8073ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d83604051610a3491815260200190565b600180546106d1906127c7565b610e6a611aa8565b73ffffffffffffffffffffffffffffffffffffffff8116610eb7576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f198db6e425fb8aafd1823c6ca50be2d51e5764571a5ae0f0f21c6812e45def0b906020015b60405180910390a150565b335f81815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161075c918590610ba3908690612852565b5f610f7d611bfc565b610f8633611c8a565b82610f9081611c8a565b610f9b338585611d34565b5060019392505050565b5f8711611034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f44796e616d69635265776172644661726d3a20494e56414c49445f445552415460448201527f494f4e000000000000000000000000000000000000000000000000000000000060648201526084016107fc565b600754156110c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f44796e616d69635265776172644661726d3a20414c52454144595f494e49544960448201527f414c495a4544000000000000000000000000000000000000000000000000000060648201526084016107fc565b60078790555f6110d58486836128ff565b5060016110e38284836128ff565b506005805473ffffffffffffffffffffffffffffffffffffffff808b167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560098054898416908316179055600b80549288169290911691909117905561115a670de0b6b3a764000061dead611eb2565b5050505050505050565b61116c611f88565b611174611bfc565b828114611203576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f44796e616d69635265776172644661726d3a2041525241595f4c454e4754485f60448201527f4d49534d4154434800000000000000000000000000000000000000000000000060648201526084016107fc565b600d548314611294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f44796e616d69635265776172644661726d3a20544f4b454e5f4c454e4754485f60448201527f4d49534d4154434800000000000000000000000000000000000000000000000060648201526084016107fc565b61129e828261202f565b5f5b838110156113f657600d81815481106112bb576112bb61279a565b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff168585838181106112ee576112ee61279a565b90506020020160208101906113039190612426565b73ffffffffffffffffffffffffffffffffffffffff16146113a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f44796e616d69635265776172644661726d3a20494e56414c49445f544f4b454e60448201527f5f4f52444552000000000000000000000000000000000000000000000000000060648201526084016107fc565b6113ee8585838181106113bb576113bb61279a565b90506020020160208101906113d09190612426565b8484848181106113e2576113e261279a565b90506020020135612099565b6001016112a0565b504260088190556007546114099161283f565b60065550505050565b61141a611aa8565b73ffffffffffffffffffffffffffffffffffffffff8116611467576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f35b5da26a401fdbef2e1cfabeec2c10a6121d56f136be501a393c284cdd1af5890602001610f26565b6114e2611aa8565b600554829073ffffffffffffffffffffffffffffffffffffffff90811690821603611569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f44796e616d69635265776172644661726d3a205354414b455f544f4b454e000060448201526064016107fc565b5f5b600d548110156116e857600d81815481106115885761158861279a565b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff908116908516036116e0575f6115c08561dead610ba8565b905080841115611652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f44796e616d69635265776172644661726d3a204e4f545f454e4f5547485f524560448201527f574152445300000000000000000000000000000000000000000000000000000060648201526084016107fc565b61165a611bfc565b61166561dead611c8a565b73ffffffffffffffffffffffffffffffffffffffff85165f908152600e6020908152604080832061dead84526002019091529020546116a5908590612852565b73ffffffffffffffffffffffffffffffffffffffff86165f908152600e6020908152604080832061dead8452600201909152902055506116e8565b60010161156b565b5060095461170e90829073ffffffffffffffffffffffffffffffffffffffff1684611dd9565b8073ffffffffffffffffffffffffffffffffffffffff167f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa288360405161175691815260200190565b60405180910390a2505050565b61176b611aa8565b5f81116117fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f44796e616d69635265776172644661726d3a20494e56414c49445f445552415460448201527f494f4e000000000000000000000000000000000000000000000000000000000060648201526084016107fc565b600654421161188b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f44796e616d69635265776172644661726d3a204f4e474f494e475f444953545260448201527f49425554494f4e0000000000000000000000000000000000000000000000000060648201526084016107fc565b60078190556040518181527ffb46ca5a5e06d4540d6387b930a7c978bce0db5f449ec6b3f5d07c6e1d44f2d390602001610f26565b600d546060905f9067ffffffffffffffff8111156118e0576118e061276d565b604051908082528060200260200182016040528015611909578160200160208202803683370190505b5090505f5b600d5481101561199257600d818154811061192b5761192b61279a565b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168282815181106119655761196561279a565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015260010161190e565b50919050565b335f908152600360205260409020546119b0816109ac565b6119b8610a40565b50565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600e6020526040812060085482906119ec610db6565b6119f69190612852565b90505f600254670de0b6b3a7640000845f015484611a149190612865565b611a1e9190612865565b611a28919061287c565b9050808360010154610c57919061283f565b73ffffffffffffffffffffffffffffffffffffffff8381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60095473ffffffffffffffffffffffffffffffffffffffff163314611b29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f44796e616d69635265776172644661726d3a20494e56414c49445f4f574e455260448201526064016107fc565b565b73ffffffffffffffffffffffffffffffffffffffff8116611b78576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b600d54811015610b5c57600d8181548110611b9757611b9761279a565b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff90811690831603611bf4576040517fe4ed28f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101611b7a565b5f5b600d54811015611c7c575f600d8281548110611c1c57611c1c61279a565b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff169050611c48816119bb565b73ffffffffffffffffffffffffffffffffffffffff9091165f908152600e6020526040902060019081019190915501611bfe565b50611c85610db6565b600855565b5f5b600d54811015610b5c575f600d8281548110611caa57611caa61279a565b5f91825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16808352600e9091526040909120909150611ce78285610ba8565b73ffffffffffffffffffffffffffffffffffffffff85165f908152600283016020908152604080832093909355600180850154600390950190915291902091909155919091019050611c8c565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260036020526040902054611d64908290612852565b73ffffffffffffffffffffffffffffffffffffffff8481165f8181526003602090815260408083209590955592861680825290849020805486019055925184815290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611a9b565b610b5c8282612243565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052611ead9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526122d6565b505050565b81600254611ec0919061283f565b60025573ffffffffffffffffffffffffffffffffffffffff81165f818152600360209081526040808320805487019055518581527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611f829085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611e2b565b50505050565b600b5473ffffffffffffffffffffffffffffffffffffffff163314611b29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f44796e616d69635265776172644661726d3a20494e56414c49445f4d414e414760448201527f455200000000000000000000000000000000000000000000000000000000000060648201526084016107fc565b5f5b81811015612066575f83838381811061204c5761204c61279a565b90506020020135111561205e57505050565b600101612031565b506040517f3fb087f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120a282612375565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600e602052604090206006548391904210156121af578054831015612164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f44796e616d69635265776172644661726d3a20524154455f43414e545f44454360448201527f524541534500000000000000000000000000000000000000000000000000000060648201526084016107fc565b5f426006546121739190612852565b82549091505f906121849083612865565b600b549091506121ac90859073ffffffffffffffffffffffffffffffffffffffff1683611dd9565b50505b8281556007545f906121c2908590612865565b600b549091506121eb90849073ffffffffffffffffffffffffffffffffffffffff163084611f24565b604080518581526020810183905273ffffffffffffffffffffffffffffffffffffffff8716917f6a6f77044107a33658235d41bedbbaf2fe9ccdceb313143c947a5e76e1ec8474910160405180910390a25050505050565b60028054839003905573ffffffffffffffffffffffffffffffffffffffff81165f9081526003602052604090205461227c908390612852565b73ffffffffffffffffffffffffffffffffffffffff82165f818152600360205260408082209390935591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611f189086815260200190565b5f8060205f8451602086015f885af1806122f5576040513d5f823e3d81fd5b50505f513d9150811561230c578060011415612326565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15611f82576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016107fc565b5f5b600d548110156123cb57600d81815481106123945761239461279a565b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff908116908316036123c3575050565b600101612377565b506040517f8698bf3700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114612421575f80fd5b919050565b5f60208284031215612436575f80fd5b61243f826123fe565b9392505050565b602080825282518282018190525f918401906040840190835b8181101561247d57835183526020938401939092019160010161245f565b509095945050505050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b5f80604083850312156124ec575f80fd5b6124f5836123fe565b946020939093013593505050565b5f805f60608486031215612515575f80fd5b61251e846123fe565b925061252c602085016123fe565b929592945050506040919091013590565b5f6020828403121561254d575f80fd5b5035919050565b5f8060408385031215612565575f80fd5b61256e836123fe565b915061257c602084016123fe565b90509250929050565b5f8083601f840112612595575f80fd5b50813567ffffffffffffffff8111156125ac575f80fd5b6020830191508360208285010111156125c3575f80fd5b9250929050565b5f805f805f805f8060c0898b0312156125e1575f80fd5b6125ea896123fe565b9750602089013596506125ff60408a016123fe565b955061260d60608a016123fe565b9450608089013567ffffffffffffffff811115612628575f80fd5b6126348b828c01612585565b90955093505060a089013567ffffffffffffffff811115612653575f80fd5b61265f8b828c01612585565b999c989b5096995094979396929594505050565b5f8083601f840112612683575f80fd5b50813567ffffffffffffffff81111561269a575f80fd5b6020830191508360208260051b85010111156125c3575f80fd5b5f805f80604085870312156126c7575f80fd5b843567ffffffffffffffff8111156126dd575f80fd5b6126e987828801612673565b909550935050602085013567ffffffffffffffff811115612708575f80fd5b61271487828801612673565b95989497509550505050565b602080825282518282018190525f918401906040840190835b8181101561247d57835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101612739565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b600181811c908216806127db57607f821691505b602082108103611992577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561076057610760612812565b8181038181111561076057610760612812565b808202811582820484141761076057610760612812565b5f826128af577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b601f821115611ead57805f5260205f20601f840160051c810160208510156128d95750805b601f840160051c820191505b818110156128f8575f81556001016128e5565b5050505050565b67ffffffffffffffff8311156129175761291761276d565b61292b8361292583546127c7565b836128b4565b5f601f84116001811461297b575f85156129455750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556128f8565b5f838152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08716915b828110156129c857868501358255602094850194600190920191016129a8565b5086821015612a03577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b018355505050505056fea2646970667358221220193db1e50b18e8f491ff2df84acc986d4aabf5810f8182f61b04f15f52412d6964736f6c634300081a0033
Deployed Bytecode
0x608060405234801561000f575f80fd5b5060043610610282575f3560e01c806390717dd311610157578063b29a8140116100d2578063cf73a1bc11610088578063dd62ed3e1161006e578063dd62ed3e146105a3578063f1229777146105e8578063f520e7e5146105fb575f80fd5b8063cf73a1bc14610563578063d153b60c14610583575f80fd5b8063c4f59f9b116100b8578063c4f59f9b1461053d578063c8f33c9114610552578063cddaf3581461055b575f80fd5b8063b29a814014610517578063c0ed00c91461052a575f80fd5b8063a457c2d711610127578063a9a901971161010d578063a9a90197146104de578063b1899bd6146104f1578063b1f8100d14610504575f80fd5b8063a457c2d7146104b8578063a9059cbb146104cb575f80fd5b806390717dd31461048157806395d89b41146104945780639f181b5e1461049c578063a3fbbaae146104a5575f80fd5b8063313ce5671161020157806351ed6a30116101b75780637bb7bed11161019d5780637bb7bed11461044657806380faa57d146104595780638f84aa0914610461575f80fd5b806351ed6a30146103cc57806370a0823114610411575f80fd5b806339509351116101e7578063395093511461039e5780633b9e9b45146103b15780634e71e0c8146103c4575f80fd5b8063313ce5671461037c578063372500ab14610396575f80fd5b80630962c4f9116102565780631c03e6cc1161023c5780631c03e6cc1461034157806323b872dd146103565780632b8c8a6414610369575f80fd5b80630962c4f91461032257806318160ddd14610339575f80fd5b80628cc2621461028657806306fdde03146102af5780630700037d146102c4578063095ea7b3146102ff575b5f80fd5b610299610294366004612426565b610604565b6040516102a69190612446565b60405180910390f35b6102b76106c5565b6040516102a69190612488565b6102ea6102d2366004612426565b600e6020525f90815260409020805460019091015482565b604080519283526020830191909152016102a6565b61031261030d3660046124db565b610750565b60405190151581526020016102a6565b61032b60065481565b6040519081526020016102a6565b60025461032b565b61035461034f366004612426565b610766565b005b610312610364366004612503565b6108dd565b61035461037736600461253d565b6109ac565b610384601281565b60405160ff90911681526020016102a6565b610354610a40565b6103126103ac3660046124db565b610b60565b61032b6103bf366004612554565b610ba8565b610354610c60565b6005546103ec9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102a6565b61032b61041f366004612426565b73ffffffffffffffffffffffffffffffffffffffff165f9081526003602052604090205490565b6103ec61045436600461253d565b610d81565b61032b610db6565b6009546103ec9073ffffffffffffffffffffffffffffffffffffffff1681565b61035461048f36600461253d565b610dcc565b6102b7610e55565b61032b600c5481565b6103546104b3366004612426565b610e62565b6103126104c63660046124db565b610f31565b6103126104d93660046124db565b610f74565b6103546104ec3660046125ca565b610fa5565b6103546104ff3660046126b4565b611164565b610354610512366004612426565b611412565b6103546105253660046124db565b6114da565b61035461053836600461253d565b611763565b6105456118c0565b6040516102a69190612720565b61032b60085481565b610354611998565b600b546103ec9073ffffffffffffffffffffffffffffffffffffffff1681565b600a546103ec9073ffffffffffffffffffffffffffffffffffffffff1681565b61032b6105b1366004612554565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260046020908152604080832093909416825291909152205490565b61032b6105f6366004612426565b6119bb565b61032b60075481565b600d546060905f9067ffffffffffffffff8111156106245761062461276d565b60405190808252806020026020018201604052801561064d578160200160208202803683370190505b5090505f5b600d548110156106be57610699600d82815481106106725761067261279a565b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff1685610ba8565b8282815181106106ab576106ab61279a565b6020908102919091010152600101610652565b5092915050565b5f80546106d1906127c7565b80601f01602080910402602001604051908101604052809291908181526020018280546106fd906127c7565b80156107485780601f1061071f57610100808354040283529160200191610748565b820191905f5260205f20905b81548152906001019060200180831161072b57829003601f168201915b505050505081565b5f61075c338484611a3a565b5060015b92915050565b61076e611aa8565b6014600c5410610805576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f44796e616d69635265776172644661726d3a204d41585f544f4b454e535f524560448201527f414348454400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61080e81611b2b565b600d8054600180820183555f929092527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055600c5461088a9161283f565b600c81905560405190815273ffffffffffffffffffffffffffffffffffffffff8216907f68e3e9397770d9dfa88c0953a34e1a70a05416b3895957f5b689787a920791c49060200160405180910390a250565b5f6108e6611bfc565b836108f081611c8a565b836108fa81611c8a565b73ffffffffffffffffffffffffffffffffffffffff86165f9081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146109955773ffffffffffffffffffffffffffffffffffffffff86165f9081526004602090815260408083203384529091528120805486929061098f908490612852565b90915550505b6109a0868686611d34565b50600195945050505050565b6109b4611bfc565b6109bd33611c8a565b336109c88282611dcf565b6005546109ec9073ffffffffffffffffffffffffffffffffffffffff168284611dd9565b8073ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d583604051610a3491815260200190565b60405180910390a25050565b610a48611bfc565b610a5133611c8a565b335f5b600d54811015610b5c575f600d8281548110610a7257610a7261279a565b5f91825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16808352600e9091526040822090925090610aaf8386610ba8565b90508015610b515773ffffffffffffffffffffffffffffffffffffffff85165f908152600283016020526040812055610ae9838683611dd9565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f540798df468d7b23d11f156fdb954cb19ad414d150722a7b6d55ba369dea792e83604051610b4891815260200190565b60405180910390a35b505050600101610a54565b5050565b335f81815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161075c918590610ba390869061283f565b611a3a565b73ffffffffffffffffffffffffffffffffffffffff8083165f908152600e602090815260408083209385168352600384019091528120549091908290610bed866119bb565b610bf79190612852565b73ffffffffffffffffffffffffffffffffffffffff85165f90815260028401602090815260408083205460039092529091205491925090670de0b6b3a764000090610c43908490612865565b610c4d919061287c565b610c57919061283f565b95945050505050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f44796e616d69635265776172644661726d3a20494e56414c49445f43414e444960448201527f444154450000000000000000000000000000000000000000000000000000000060648201526084016107fc565b600a54600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040519081527fa2ea9883a321a3e97b8266c2b078bfeec6d50c711ed71f874a90d500ae2eaf369060200160405180910390a1565b600d8181548110610d90575f80fd5b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b5f6006544210610dc7575060065490565b504290565b610dd4611bfc565b610ddd33611c8a565b33610de88282611eb2565b600554610e0d9073ffffffffffffffffffffffffffffffffffffffff16823085611f24565b8073ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d83604051610a3491815260200190565b600180546106d1906127c7565b610e6a611aa8565b73ffffffffffffffffffffffffffffffffffffffff8116610eb7576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f198db6e425fb8aafd1823c6ca50be2d51e5764571a5ae0f0f21c6812e45def0b906020015b60405180910390a150565b335f81815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161075c918590610ba3908690612852565b5f610f7d611bfc565b610f8633611c8a565b82610f9081611c8a565b610f9b338585611d34565b5060019392505050565b5f8711611034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f44796e616d69635265776172644661726d3a20494e56414c49445f445552415460448201527f494f4e000000000000000000000000000000000000000000000000000000000060648201526084016107fc565b600754156110c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f44796e616d69635265776172644661726d3a20414c52454144595f494e49544960448201527f414c495a4544000000000000000000000000000000000000000000000000000060648201526084016107fc565b60078790555f6110d58486836128ff565b5060016110e38284836128ff565b506005805473ffffffffffffffffffffffffffffffffffffffff808b167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560098054898416908316179055600b80549288169290911691909117905561115a670de0b6b3a764000061dead611eb2565b5050505050505050565b61116c611f88565b611174611bfc565b828114611203576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f44796e616d69635265776172644661726d3a2041525241595f4c454e4754485f60448201527f4d49534d4154434800000000000000000000000000000000000000000000000060648201526084016107fc565b600d548314611294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f44796e616d69635265776172644661726d3a20544f4b454e5f4c454e4754485f60448201527f4d49534d4154434800000000000000000000000000000000000000000000000060648201526084016107fc565b61129e828261202f565b5f5b838110156113f657600d81815481106112bb576112bb61279a565b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff168585838181106112ee576112ee61279a565b90506020020160208101906113039190612426565b73ffffffffffffffffffffffffffffffffffffffff16146113a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f44796e616d69635265776172644661726d3a20494e56414c49445f544f4b454e60448201527f5f4f52444552000000000000000000000000000000000000000000000000000060648201526084016107fc565b6113ee8585838181106113bb576113bb61279a565b90506020020160208101906113d09190612426565b8484848181106113e2576113e261279a565b90506020020135612099565b6001016112a0565b504260088190556007546114099161283f565b60065550505050565b61141a611aa8565b73ffffffffffffffffffffffffffffffffffffffff8116611467576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f35b5da26a401fdbef2e1cfabeec2c10a6121d56f136be501a393c284cdd1af5890602001610f26565b6114e2611aa8565b600554829073ffffffffffffffffffffffffffffffffffffffff90811690821603611569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f44796e616d69635265776172644661726d3a205354414b455f544f4b454e000060448201526064016107fc565b5f5b600d548110156116e857600d81815481106115885761158861279a565b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff908116908516036116e0575f6115c08561dead610ba8565b905080841115611652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f44796e616d69635265776172644661726d3a204e4f545f454e4f5547485f524560448201527f574152445300000000000000000000000000000000000000000000000000000060648201526084016107fc565b61165a611bfc565b61166561dead611c8a565b73ffffffffffffffffffffffffffffffffffffffff85165f908152600e6020908152604080832061dead84526002019091529020546116a5908590612852565b73ffffffffffffffffffffffffffffffffffffffff86165f908152600e6020908152604080832061dead8452600201909152902055506116e8565b60010161156b565b5060095461170e90829073ffffffffffffffffffffffffffffffffffffffff1684611dd9565b8073ffffffffffffffffffffffffffffffffffffffff167f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa288360405161175691815260200190565b60405180910390a2505050565b61176b611aa8565b5f81116117fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f44796e616d69635265776172644661726d3a20494e56414c49445f445552415460448201527f494f4e000000000000000000000000000000000000000000000000000000000060648201526084016107fc565b600654421161188b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f44796e616d69635265776172644661726d3a204f4e474f494e475f444953545260448201527f49425554494f4e0000000000000000000000000000000000000000000000000060648201526084016107fc565b60078190556040518181527ffb46ca5a5e06d4540d6387b930a7c978bce0db5f449ec6b3f5d07c6e1d44f2d390602001610f26565b600d546060905f9067ffffffffffffffff8111156118e0576118e061276d565b604051908082528060200260200182016040528015611909578160200160208202803683370190505b5090505f5b600d5481101561199257600d818154811061192b5761192b61279a565b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168282815181106119655761196561279a565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015260010161190e565b50919050565b335f908152600360205260409020546119b0816109ac565b6119b8610a40565b50565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600e6020526040812060085482906119ec610db6565b6119f69190612852565b90505f600254670de0b6b3a7640000845f015484611a149190612865565b611a1e9190612865565b611a28919061287c565b9050808360010154610c57919061283f565b73ffffffffffffffffffffffffffffffffffffffff8381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60095473ffffffffffffffffffffffffffffffffffffffff163314611b29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f44796e616d69635265776172644661726d3a20494e56414c49445f4f574e455260448201526064016107fc565b565b73ffffffffffffffffffffffffffffffffffffffff8116611b78576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b600d54811015610b5c57600d8181548110611b9757611b9761279a565b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff90811690831603611bf4576040517fe4ed28f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101611b7a565b5f5b600d54811015611c7c575f600d8281548110611c1c57611c1c61279a565b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff169050611c48816119bb565b73ffffffffffffffffffffffffffffffffffffffff9091165f908152600e6020526040902060019081019190915501611bfe565b50611c85610db6565b600855565b5f5b600d54811015610b5c575f600d8281548110611caa57611caa61279a565b5f91825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16808352600e9091526040909120909150611ce78285610ba8565b73ffffffffffffffffffffffffffffffffffffffff85165f908152600283016020908152604080832093909355600180850154600390950190915291902091909155919091019050611c8c565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260036020526040902054611d64908290612852565b73ffffffffffffffffffffffffffffffffffffffff8481165f8181526003602090815260408083209590955592861680825290849020805486019055925184815290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611a9b565b610b5c8282612243565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052611ead9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526122d6565b505050565b81600254611ec0919061283f565b60025573ffffffffffffffffffffffffffffffffffffffff81165f818152600360209081526040808320805487019055518581527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611f829085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611e2b565b50505050565b600b5473ffffffffffffffffffffffffffffffffffffffff163314611b29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f44796e616d69635265776172644661726d3a20494e56414c49445f4d414e414760448201527f455200000000000000000000000000000000000000000000000000000000000060648201526084016107fc565b5f5b81811015612066575f83838381811061204c5761204c61279a565b90506020020135111561205e57505050565b600101612031565b506040517f3fb087f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120a282612375565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600e602052604090206006548391904210156121af578054831015612164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f44796e616d69635265776172644661726d3a20524154455f43414e545f44454360448201527f524541534500000000000000000000000000000000000000000000000000000060648201526084016107fc565b5f426006546121739190612852565b82549091505f906121849083612865565b600b549091506121ac90859073ffffffffffffffffffffffffffffffffffffffff1683611dd9565b50505b8281556007545f906121c2908590612865565b600b549091506121eb90849073ffffffffffffffffffffffffffffffffffffffff163084611f24565b604080518581526020810183905273ffffffffffffffffffffffffffffffffffffffff8716917f6a6f77044107a33658235d41bedbbaf2fe9ccdceb313143c947a5e76e1ec8474910160405180910390a25050505050565b60028054839003905573ffffffffffffffffffffffffffffffffffffffff81165f9081526003602052604090205461227c908390612852565b73ffffffffffffffffffffffffffffffffffffffff82165f818152600360205260408082209390935591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611f189086815260200190565b5f8060205f8451602086015f885af1806122f5576040513d5f823e3d81fd5b50505f513d9150811561230c578060011415612326565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15611f82576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016107fc565b5f5b600d548110156123cb57600d81815481106123945761239461279a565b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff908116908316036123c3575050565b600101612377565b506040517f8698bf3700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114612421575f80fd5b919050565b5f60208284031215612436575f80fd5b61243f826123fe565b9392505050565b602080825282518282018190525f918401906040840190835b8181101561247d57835183526020938401939092019160010161245f565b509095945050505050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b5f80604083850312156124ec575f80fd5b6124f5836123fe565b946020939093013593505050565b5f805f60608486031215612515575f80fd5b61251e846123fe565b925061252c602085016123fe565b929592945050506040919091013590565b5f6020828403121561254d575f80fd5b5035919050565b5f8060408385031215612565575f80fd5b61256e836123fe565b915061257c602084016123fe565b90509250929050565b5f8083601f840112612595575f80fd5b50813567ffffffffffffffff8111156125ac575f80fd5b6020830191508360208285010111156125c3575f80fd5b9250929050565b5f805f805f805f8060c0898b0312156125e1575f80fd5b6125ea896123fe565b9750602089013596506125ff60408a016123fe565b955061260d60608a016123fe565b9450608089013567ffffffffffffffff811115612628575f80fd5b6126348b828c01612585565b90955093505060a089013567ffffffffffffffff811115612653575f80fd5b61265f8b828c01612585565b999c989b5096995094979396929594505050565b5f8083601f840112612683575f80fd5b50813567ffffffffffffffff81111561269a575f80fd5b6020830191508360208260051b85010111156125c3575f80fd5b5f805f80604085870312156126c7575f80fd5b843567ffffffffffffffff8111156126dd575f80fd5b6126e987828801612673565b909550935050602085013567ffffffffffffffff811115612708575f80fd5b61271487828801612673565b95989497509550505050565b602080825282518282018190525f918401906040840190835b8181101561247d57835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101612739565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b600181811c908216806127db57607f821691505b602082108103611992577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561076057610760612812565b8181038181111561076057610760612812565b808202811582820484141761076057610760612812565b5f826128af577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b601f821115611ead57805f5260205f20601f840160051c810160208510156128d95750805b601f840160051c820191505b818110156128f8575f81556001016128e5565b5050505050565b67ffffffffffffffff8311156129175761291761276d565b61292b8361292583546127c7565b836128b4565b5f601f84116001811461297b575f85156129455750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556128f8565b5f838152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08716915b828110156129c857868501358255602094850194600190920191016129a8565b5086821015612a03577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b018355505050505056fea2646970667358221220193db1e50b18e8f491ff2df84acc986d4aabf5810f8182f61b04f15f52412d6964736f6c634300081a0033
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.