More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 534 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Stake | 20568360 | 126 days ago | IN | 0 ETH | 0.00017134 | ||||
Get Reward | 20568314 | 126 days ago | IN | 0 ETH | 0.00009032 | ||||
Get Reward | 20406698 | 149 days ago | IN | 0 ETH | 0.00014982 | ||||
Withdraw | 20406694 | 149 days ago | IN | 0 ETH | 0.00025955 | ||||
Get Reward | 20352907 | 156 days ago | IN | 0 ETH | 0.00019046 | ||||
Stake | 20304231 | 163 days ago | IN | 0 ETH | 0.00023413 | ||||
Get Reward | 20304226 | 163 days ago | IN | 0 ETH | 0.00018794 | ||||
Stake | 20304190 | 163 days ago | IN | 0 ETH | 0.00027733 | ||||
Get Reward | 20304182 | 163 days ago | IN | 0 ETH | 0.00020729 | ||||
Stake | 20249711 | 171 days ago | IN | 0 ETH | 0.00020746 | ||||
Get Reward | 20249705 | 171 days ago | IN | 0 ETH | 0.00014453 | ||||
Stake | 20166845 | 182 days ago | IN | 0 ETH | 0.0004404 | ||||
Get Reward | 20166839 | 182 days ago | IN | 0 ETH | 0.00027909 | ||||
Stake | 20088325 | 193 days ago | IN | 0 ETH | 0.000758 | ||||
Get Reward | 20088322 | 193 days ago | IN | 0 ETH | 0.00052209 | ||||
Get Reward | 19902976 | 219 days ago | IN | 0 ETH | 0.00022885 | ||||
Stake | 19854088 | 226 days ago | IN | 0 ETH | 0.00038417 | ||||
Get Reward | 19854085 | 226 days ago | IN | 0 ETH | 0.00026478 | ||||
Stake | 19812898 | 232 days ago | IN | 0 ETH | 0.00066862 | ||||
Get Reward | 19812894 | 232 days ago | IN | 0 ETH | 0.00046867 | ||||
Get Reward | 19812891 | 232 days ago | IN | 0 ETH | 0.00044365 | ||||
Withdraw | 19809535 | 232 days ago | IN | 0 ETH | 0.00050022 | ||||
Get Reward | 19809533 | 232 days ago | IN | 0 ETH | 0.00033074 | ||||
Stake | 19746106 | 241 days ago | IN | 0 ETH | 0.00066714 | ||||
Get Reward | 19746101 | 241 days ago | IN | 0 ETH | 0.00044176 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
Staking
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-10-29 */ //SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.18; library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor () { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!_paused, "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(_paused, "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove(IERC20 token, address spender, uint256 value) internal { require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function _callOptionalReturn(IERC20 token, bytes memory data) private { bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract Staking is Pausable, Ownable { using SafeMath for uint256; using SafeERC20 for IERC20; IERC20 public rewardsToken; IERC20 public stakingToken; uint256 public periodFinish = 0; uint256 public rewardRate = 0; uint256 public rewardsDuration; uint256 public lastUpdateTime; uint256 public rewardPerTokenStored; uint256 public stakingTokensDecimalRate; address public stakeAdmin; uint256 public lockDuration; bool private initialised; bool public locked = false; uint256 public constant MAX_UNSTAKE_FEE = 2000; uint256 public earlyUnstakeFee = 2500; mapping(address => uint256) public userRewardPerTokenPaid; mapping(address => uint256) public rewards; uint256 private _totalSupply; mapping(address => uint256) private _balances; modifier notContract() { require(!_isContract(msg.sender), "contract not allowed"); require(msg.sender == tx.origin, "proxy contract not allowed"); _; } function _isContract(address addr) internal view returns (bool) { uint256 size; assembly { size := extcodesize(addr) } return size > 0; } /* ========== CONSTRUCTOR ========== */ constructor () { stakingTokensDecimalRate = pow(10, 18); rewardsToken = IERC20(0x2FcBD5a6eb694d573D280664393681cB52b9a98b); stakingToken = IERC20(0x2FcBD5a6eb694d573D280664393681cB52b9a98b); rewardsDuration = 31557600; stakeAdmin = msg.sender; } function setStakeAdmin( address newAdmin) public onlyOwner{ stakeAdmin = newAdmin; } /* ========== VIEWS ========== */ function totalSupply() external view returns (uint256) { return _totalSupply; } function pow(uint n, uint e) public pure returns (uint) { if (e == 0) { return 1; } else if (e == 1) { return n; } else { uint p = pow(n, e.div(2)); p = p.mul(p); if (e.mod(2) == 1) { p = p.mul(n); } return p; } } function balanceOf(address account) external view returns (uint256) { return _balances[account]; } function lastTimeRewardApplicable() public view returns (uint256) { return min(block.timestamp, periodFinish); } function rewardPerToken() public view returns (uint256) { if (_totalSupply == 0) { return rewardPerTokenStored; } return rewardPerTokenStored.add( lastTimeRewardApplicable() .sub(lastUpdateTime) .mul(rewardRate) .mul(stakingTokensDecimalRate) .div(_totalSupply) ); } function earned(address account) public view returns (uint256) { return _balances[account] .mul(rewardPerToken().sub(userRewardPerTokenPaid[account])) .div(stakingTokensDecimalRate) .add(rewards[account]); } function getRewardForDuration() external view returns (uint256) { return rewardRate.mul(rewardsDuration); } function min(uint256 a, uint256 b) public pure returns (uint256) { return a < b ? a : b; } function getStakedBalances(address[] memory accounts) public view returns (uint256[] memory) { uint256[] memory balances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; i++) { balances[i] = _balances[accounts[i]]; } return balances; } function PoolInfo() public view returns(uint256 _periodFinish, uint256 _rewardRate, uint256 _rewardsDuration, uint256 _lastUpdateTime, uint256 _rewardPerToken, uint256 _getRewardForDuration, uint256 _lockDuration, uint256 _earlyUnstakeFee, uint256 _totSupply){ _periodFinish = periodFinish; _rewardRate = rewardRate; _rewardsDuration = rewardsDuration; _lastUpdateTime = lastUpdateTime; _rewardPerToken = rewardPerToken(); _getRewardForDuration = rewardRate.mul(rewardsDuration); _lockDuration = lockDuration; _earlyUnstakeFee = earlyUnstakeFee; _totSupply = _totalSupply; } function UserInfo(address account) public view returns(uint256 _balanceOf, uint256 _earned, uint256 _rewards ){ _balanceOf = _balances[account]; _earned = earned(account); _rewards = rewards[account]; } /* ========== MUTATIVE FUNCTIONS ========== */ function stake(uint256 amount) external notContract whenNotPaused updateReward(msg.sender) { require(amount > 0, "Cannot stake 0"); _totalSupply = _totalSupply.add(amount); _balances[msg.sender] = _balances[msg.sender].add(amount); stakingToken.safeTransferFrom(msg.sender, address(this), amount); emit Staked(msg.sender, amount); } function withdraw(uint256 amount) public notContract updateReward(msg.sender) { require(amount > 0, "Cannot withdraw 0"); if(locked){ require(block.timestamp >= periodFinish, "Lock Time is not over"); } _totalSupply = _totalSupply.sub(amount); _balances[msg.sender] = _balances[msg.sender].sub(amount); stakingToken.safeTransfer(msg.sender, amount); emit Withdrawn(msg.sender, amount); } function getReward() public notContract updateReward(msg.sender) { uint256 reward = rewards[msg.sender]; if (reward > 0) { rewards[msg.sender] = 0; rewardsToken.safeTransfer(msg.sender, reward); emit RewardPaid(msg.sender, reward); } } function emergencyWithdraw(uint256 amount) public notContract updateReward(msg.sender) { require(amount > 0, "Cannot withdraw 0"); getReward(); _totalSupply = _totalSupply.sub(amount); _balances[msg.sender] = _balances[msg.sender].sub(amount); if (earlyUnstakeFee > 0){ uint256 adminFee = amount.mul(earlyUnstakeFee).div(10000); amount -= adminFee; stakingToken.safeTransfer(stakeAdmin, adminFee); } stakingToken.safeTransfer(msg.sender, amount); emit Withdrawn(msg.sender, amount); } function exit() external { withdraw(_balances[msg.sender]); getReward(); } /* ========== RESTRICTED FUNCTIONS ========== */ function notifyRewardAmount(uint256 reward) external onlyOwner updateReward(address(0)) { if (block.timestamp >= periodFinish) { rewardRate = reward.div(rewardsDuration); } else { uint256 remaining = periodFinish.sub(block.timestamp); uint256 leftover = remaining.mul(rewardRate); rewardRate = reward.add(leftover).div(rewardsDuration); } // Ensure the provided reward amount is not more than the balance in the contract. // This keeps the reward rate in the right range, preventing overflows due to // very high values of rewardRate in the earned and rewardsPerToken functions; // Reward + leftover must be less than 2^256 / 10^18 to avoid overflow. uint256 balance = rewardsToken.balanceOf(address(this)); require( rewardRate <= balance.div(rewardsDuration), "Provided reward too high" ); lastUpdateTime = block.timestamp; periodFinish = block.timestamp.add(rewardsDuration); emit RewardAdded(reward); } function setEarlyUnstakeFee(uint256 _earlyUnstakeFee) external onlyOwner { require(_earlyUnstakeFee <= MAX_UNSTAKE_FEE, "earlyUnstakeFee cannot be more than MAX_UNSTAKE_FEE"); earlyUnstakeFee = _earlyUnstakeFee; } // function setTokenInternalFee(uint256 _tokenInternalFess) external onlyOwner { // tokenInternalFess = _tokenInternalFess; // } function manualUnlock() external onlyOwner{ locked = false; } function removeTokens(address tokenAddress, uint256 tokenAmount) external onlyOwner { require(block.timestamp >= periodFinish + 2 hours, "Lock Time is not over"); IERC20(tokenAddress).safeTransfer(msg.sender, tokenAmount); emit Recovered(tokenAddress, tokenAmount); } function setRewardsDuration(uint256 _rewardsDuration) external onlyOwner { require( block.timestamp > periodFinish, "Previous rewards period must be complete before changing the duration for the new period" ); rewardsDuration = _rewardsDuration; emit RewardsDurationUpdated(rewardsDuration); } /* ========== MODIFIERS ========== */ modifier updateReward(address account) { rewardPerTokenStored = rewardPerToken(); lastUpdateTime = lastTimeRewardApplicable(); if (account != address(0)) { rewards[account] = earned(account); userRewardPerTokenPaid[account] = rewardPerTokenStored; } _; } /* ========== EVENTS ========== */ event RewardAdded(uint256 reward); event Staked(address indexed user, uint256 amount); event Withdrawn(address indexed user, uint256 amount); event RewardPaid(address indexed user, uint256 reward); event RewardsDurationUpdated(uint256 newDuration); event Recovered(address token, uint256 amount); event Compounded(address indexed user, uint256 amount); }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Compounded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Recovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newDuration","type":"uint256"}],"name":"RewardsDurationUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[],"name":"MAX_UNSTAKE_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PoolInfo","outputs":[{"internalType":"uint256","name":"_periodFinish","type":"uint256"},{"internalType":"uint256","name":"_rewardRate","type":"uint256"},{"internalType":"uint256","name":"_rewardsDuration","type":"uint256"},{"internalType":"uint256","name":"_lastUpdateTime","type":"uint256"},{"internalType":"uint256","name":"_rewardPerToken","type":"uint256"},{"internalType":"uint256","name":"_getRewardForDuration","type":"uint256"},{"internalType":"uint256","name":"_lockDuration","type":"uint256"},{"internalType":"uint256","name":"_earlyUnstakeFee","type":"uint256"},{"internalType":"uint256","name":"_totSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"UserInfo","outputs":[{"internalType":"uint256","name":"_balanceOf","type":"uint256"},{"internalType":"uint256","name":"_earned","type":"uint256"},{"internalType":"uint256","name":"_rewards","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlyUnstakeFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"exit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getRewardForDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"getStakedBalances","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastTimeRewardApplicable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"locked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualUnlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256","name":"b","type":"uint256"}],"name":"min","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"}],"name":"notifyRewardAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodFinish","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"n","type":"uint256"},{"internalType":"uint256","name":"e","type":"uint256"}],"name":"pow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"removeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerTokenStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_earlyUnstakeFee","type":"uint256"}],"name":"setEarlyUnstakeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardsDuration","type":"uint256"}],"name":"setRewardsDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"setStakeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakeAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingTokensDecimalRate","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":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userRewardPerTokenPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260006003819055600455600b805461ff00191690556109c4600c553480156200002c57600080fd5b50600080546001600160a81b031916336101008102919091178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35062000082600a6012620000d5565b600855600180546001600160a01b0319908116732fcbd5a6eb694d573d280664393681cb52b9a98b9081179092556002805482169092179091556301e187e06005556009805490911633179055620001e5565b600081600003620000e9575060016200014b565b81600103620000fa5750816200014b565b600062000114846200010e85600262000151565b620000d5565b90506200012281806200015f565b9050620001318360026200016d565b60010362000148576200014581856200015f565b90505b90505b92915050565b600062000148828462000191565b6000620001488284620001a8565b6000620001488284620001ce565b634e487b7160e01b600052601260045260246000fd5b600082620001a357620001a36200017b565b500490565b80820281158282048414176200014b57634e487b7160e01b600052601160045260246000fd5b600082620001e057620001e06200017b565b500690565b611bc780620001f56000396000f3fe608060405234801561001057600080fd5b50600436106102525760003560e01c80637b0a47ee11610146578063cc1a378f116100c3578063e120343c11610087578063e120343c146104fa578063e377ee1b14610502578063e94eab5b14610530578063e9fad8ee14610550578063ebe2b12b14610558578063f2fde38b1461056157600080fd5b8063cc1a378f146104b1578063cd3daf9d146104c4578063cf309012146104cc578063d1af0c7d146104de578063df136d65146104f157600080fd5b8063a694fc3a1161010a578063a694fc3a14610470578063a85fe3b714610483578063ada929201461048c578063b12dbd2214610495578063c8f33c91146104a857600080fd5b80637b0a47ee146103dd57806380faa57d146103e65780638b876347146103ee5780638da5cb5b1461040e578063a3e43ab21461042457600080fd5b80633c6b16ab116101d45780635c975abb116101985780635c975abb1461035757806370a082311461036e578063715018a61461039757806372f702f31461039f5780637ae2b5c7146103ca57600080fd5b80633c6b16ab146103035780633d18b912146103165780634e6cd3fa1461031e5780635312ea8e1461033157806359d6c3c41461034457600080fd5b80631c1f78eb1161021b5780631c1f78eb146102b75780631e10eeaf146102bf5780632e1a7d4d146102d45780632e4c697f146102e7578063386a9525146102fa57600080fd5b80628cc26214610257578063045544431461027d5780630700037d146102865780630711306d146102a657806318160ddd146102af575b600080fd5b61026a6102653660046117ea565b610574565b6040519081526020015b60405180910390f35b61026a600a5481565b61026a6102943660046117ea565b600e6020526000908152604090205481565b61026a600c5481565b600f5461026a565b61026a6105eb565b6102d26102cd366004611805565b610609565b005b6102d26102e236600461182f565b6106f2565b61026a6102f5366004611848565b6108b9565b61026a60055481565b6102d261031136600461182f565b61091f565b6102d2610b30565b6102d261032c3660046117ea565b610c3e565b6102d261033f36600461182f565b610c90565b6102d261035236600461182f565b610e19565b60005460ff165b6040519015158152602001610274565b61026a61037c3660046117ea565b6001600160a01b031660009081526010602052604090205490565b6102d2610ebc565b6002546103b2906001600160a01b031681565b6040516001600160a01b039091168152602001610274565b61026a6103d8366004611848565b610f3b565b61026a60045481565b61026a610f51565b61026a6103fc3660046117ea565b600d6020526000908152604090205481565b60005461010090046001600160a01b03166103b2565b61042c610f5f565b60408051998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c084015260e083015261010082015261012001610274565b6102d261047e36600461182f565b610fae565b61026a60085481565b61026a6107d081565b6009546103b2906001600160a01b031681565b61026a60065481565b6102d26104bf36600461182f565b611157565b61026a61125f565b600b5461035e90610100900460ff1681565b6001546103b2906001600160a01b031681565b61026a60075481565b6102d26112a4565b6105156105103660046117ea565b6112e1565b60408051938452602084019290925290820152606001610274565b61054361053e366004611880565b611326565b6040516102749190611945565b6102d26113f1565b61026a60035481565b6102d261056f3660046117ea565b611414565b6001600160a01b0381166000908152600e6020908152604080832054600854600d909352908320546105e5926105df916105d9906105ba906105b461125f565b9061150f565b6001600160a01b0388166000908152601060205260409020549061151b565b90611527565b90611533565b92915050565b600061060460055460045461151b90919063ffffffff16565b905090565b6000546001600160a01b036101009091041633146106425760405162461bcd60e51b815260040161063990611989565b60405180910390fd5b60035461065190611c206119d4565b4210156106985760405162461bcd60e51b81526020600482015260156024820152742637b1b5902a34b6b29034b9903737ba1037bb32b960591b6044820152606401610639565b6106ac6001600160a01b038316338361153f565b604080516001600160a01b0384168152602081018390527f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28910160405180910390a15050565b333b156107115760405162461bcd60e51b8152600401610639906119e7565b3332146107305760405162461bcd60e51b815260040161063990611a15565b3361073961125f565b600755610744610f51565b6006556001600160a01b0381161561078b5761075f81610574565b6001600160a01b0382166000908152600e6020908152604080832093909355600754600d909152919020555b600082116107cf5760405162461bcd60e51b8152602060048201526011602482015270043616e6e6f74207769746864726177203607c1b6044820152606401610639565b600b54610100900460ff1615610829576003544210156108295760405162461bcd60e51b81526020600482015260156024820152742637b1b5902a34b6b29034b9903737ba1037bb32b960591b6044820152606401610639565b600f54610836908361150f565b600f5533600090815260106020526040902054610853908361150f565b3360008181526010602052604090209190915560025461087f916001600160a01b03909116908461153f565b60405182815233907f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5906020015b60405180910390a25050565b6000816000036108cb575060016105e5565b816001036108da5750816105e5565b60006108eb846102f5856002611527565b90506108f7818061151b565b90506109048360026115a7565b60010361091857610915818561151b565b90505b9392505050565b6000546001600160a01b0361010090910416331461094f5760405162461bcd60e51b815260040161063990611989565b600061095961125f565b600755610964610f51565b6006556001600160a01b038116156109ab5761097f81610574565b6001600160a01b0382166000908152600e6020908152604080832093909355600754600d909152919020555b60035442106109ca576005546109c2908390611527565b600455610a0d565b6003546000906109da904261150f565b905060006109f36004548361151b90919063ffffffff16565b600554909150610a07906105d98684611533565b60045550505b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610a56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7a9190611a4c565b9050610a916005548261152790919063ffffffff16565b6004541115610ae25760405162461bcd60e51b815260206004820152601860248201527f50726f76696465642072657761726420746f6f206869676800000000000000006044820152606401610639565b426006819055600554610af59190611533565b6003556040518381527fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9060200160405180910390a1505050565b333b15610b4f5760405162461bcd60e51b8152600401610639906119e7565b333214610b6e5760405162461bcd60e51b815260040161063990611a15565b33610b7761125f565b600755610b82610f51565b6006556001600160a01b03811615610bc957610b9d81610574565b6001600160a01b0382166000908152600e6020908152604080832093909355600754600d909152919020555b336000908152600e60205260409020548015610c3a57336000818152600e6020526040812055600154610c08916001600160a01b03909116908361153f565b60405181815233907fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486906020016108ad565b5050565b6000546001600160a01b03610100909104163314610c6e5760405162461bcd60e51b815260040161063990611989565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b333b15610caf5760405162461bcd60e51b8152600401610639906119e7565b333214610cce5760405162461bcd60e51b815260040161063990611a15565b33610cd761125f565b600755610ce2610f51565b6006556001600160a01b03811615610d2957610cfd81610574565b6001600160a01b0382166000908152600e6020908152604080832093909355600754600d909152919020555b60008211610d6d5760405162461bcd60e51b8152602060048201526011602482015270043616e6e6f74207769746864726177203607c1b6044820152606401610639565b610d75610b30565b600f54610d82908361150f565b600f5533600090815260106020526040902054610d9f908361150f565b33600090815260106020526040902055600c5415610e02576000610dd46127106105d9600c548661151b90919063ffffffff16565b9050610de08184611a65565b600954600254919450610e00916001600160a01b0390811691168361153f565b505b60025461087f906001600160a01b0316338461153f565b6000546001600160a01b03610100909104163314610e495760405162461bcd60e51b815260040161063990611989565b6107d0811115610eb75760405162461bcd60e51b815260206004820152603360248201527f6561726c79556e7374616b654665652063616e6e6f74206265206d6f7265207460448201527268616e204d41585f554e5354414b455f46454560681b6064820152608401610639565b600c55565b6000546001600160a01b03610100909104163314610eec5760405162461bcd60e51b815260040161063990611989565b600080546040516101009091046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360008054610100600160a81b0319169055565b6000818310610f4a5781610918565b5090919050565b600061060442600354610f3b565b600354600454600554600654600080808080610f7961125f565b9450610f9260055460045461151b90919063ffffffff16565b9350600a549250600c549150600f549050909192939495969798565b333b15610fcd5760405162461bcd60e51b8152600401610639906119e7565b333214610fec5760405162461bcd60e51b815260040161063990611a15565b60005460ff16156110325760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610639565b3361103b61125f565b600755611046610f51565b6006556001600160a01b0381161561108d5761106181610574565b6001600160a01b0382166000908152600e6020908152604080832093909355600754600d909152919020555b600082116110ce5760405162461bcd60e51b815260206004820152600e60248201526d043616e6e6f74207374616b6520360941b6044820152606401610639565b600f546110db9083611533565b600f55336000908152601060205260409020546110f89083611533565b33600081815260106020526040902091909155600254611125916001600160a01b039091169030856115b3565b60405182815233907f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d906020016108ad565b6000546001600160a01b036101009091041633146111875760405162461bcd60e51b815260040161063990611989565b60035442116112245760405162461bcd60e51b815260206004820152605860248201527f50726576696f7573207265776172647320706572696f64206d7573742062652060448201527f636f6d706c657465206265666f7265206368616e67696e67207468652064757260648201527f6174696f6e20666f7220746865206e657720706572696f640000000000000000608482015260a401610639565b60058190556040518181527ffb46ca5a5e06d4540d6387b930a7c978bce0db5f449ec6b3f5d07c6e1d44f2d39060200160405180910390a150565b6000600f54600003611272575060075490565b61060461129b600f546105d96008546112956004546112956006546105b4610f51565b9061151b565b60075490611533565b6000546001600160a01b036101009091041633146112d45760405162461bcd60e51b815260040161063990611989565b600b805461ff0019169055565b6001600160a01b038116600090815260106020526040812054908061130584610574565b6001600160a01b039094166000908152600e60205260409020549294915050565b60606000825167ffffffffffffffff8111156113445761134461186a565b60405190808252806020026020018201604052801561136d578160200160208202803683370190505b50905060005b83518110156113ea576010600085838151811061139257611392611a78565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020548282815181106113cd576113cd611a78565b6020908102919091010152806113e281611a8e565b915050611373565b5092915050565b3360009081526010602052604090205461140a906106f2565b611412610b30565b565b6000546001600160a01b036101009091041633146114445760405162461bcd60e51b815260040161063990611989565b6001600160a01b0381166114a95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610639565b600080546040516001600160a01b038085169361010090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60006109188284611a65565b60006109188284611aa7565b60006109188284611ad4565b600061091882846119d4565b6040516001600160a01b0383166024820152604481018290526115a290849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526115f1565b505050565b60006109188284611ae8565b6040516001600160a01b03808516602483015283166044820152606481018290526115eb9085906323b872dd60e01b9060840161156b565b50505050565b6000611646826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166116c39092919063ffffffff16565b8051909150156115a257808060200190518101906116649190611afc565b6115a25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610639565b6060610915848460008585843b61171c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610639565b600080866001600160a01b031685876040516117389190611b42565b60006040518083038185875af1925050503d8060008114611775576040519150601f19603f3d011682016040523d82523d6000602084013e61177a565b606091505b509150915061178a828286611795565b979650505050505050565b606083156117a4575081610918565b8251156117b45782518084602001fd5b8160405162461bcd60e51b81526004016106399190611b5e565b80356001600160a01b03811681146117e557600080fd5b919050565b6000602082840312156117fc57600080fd5b610918826117ce565b6000806040838503121561181857600080fd5b611821836117ce565b946020939093013593505050565b60006020828403121561184157600080fd5b5035919050565b6000806040838503121561185b57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561189357600080fd5b823567ffffffffffffffff808211156118ab57600080fd5b818501915085601f8301126118bf57600080fd5b8135818111156118d1576118d161186a565b8060051b604051601f19603f830116810181811085821117156118f6576118f661186a565b60405291825284820192508381018501918883111561191457600080fd5b938501935b828510156119395761192a856117ce565b84529385019392850192611919565b98975050505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561197d57835183529284019291840191600101611961565b50909695505050505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808201808211156105e5576105e56119be565b60208082526014908201527318dbdb9d1c9858dd081b9bdd08185b1b1bddd95960621b604082015260600190565b6020808252601a908201527f70726f787920636f6e7472616374206e6f7420616c6c6f776564000000000000604082015260600190565b600060208284031215611a5e57600080fd5b5051919050565b818103818111156105e5576105e56119be565b634e487b7160e01b600052603260045260246000fd5b600060018201611aa057611aa06119be565b5060010190565b80820281158282048414176105e5576105e56119be565b634e487b7160e01b600052601260045260246000fd5b600082611ae357611ae3611abe565b500490565b600082611af757611af7611abe565b500690565b600060208284031215611b0e57600080fd5b8151801515811461091857600080fd5b60005b83811015611b39578181015183820152602001611b21565b50506000910152565b60008251611b54818460208701611b1e565b9190910192915050565b6020815260008251806020840152611b7d816040850160208701611b1e565b601f01601f1916919091016040019291505056fea264697066735822122014a6d1ac023ab19770b3d28c7935527e71551d1195959cc83547a4f2c6e5f52e64736f6c63430008130033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102525760003560e01c80637b0a47ee11610146578063cc1a378f116100c3578063e120343c11610087578063e120343c146104fa578063e377ee1b14610502578063e94eab5b14610530578063e9fad8ee14610550578063ebe2b12b14610558578063f2fde38b1461056157600080fd5b8063cc1a378f146104b1578063cd3daf9d146104c4578063cf309012146104cc578063d1af0c7d146104de578063df136d65146104f157600080fd5b8063a694fc3a1161010a578063a694fc3a14610470578063a85fe3b714610483578063ada929201461048c578063b12dbd2214610495578063c8f33c91146104a857600080fd5b80637b0a47ee146103dd57806380faa57d146103e65780638b876347146103ee5780638da5cb5b1461040e578063a3e43ab21461042457600080fd5b80633c6b16ab116101d45780635c975abb116101985780635c975abb1461035757806370a082311461036e578063715018a61461039757806372f702f31461039f5780637ae2b5c7146103ca57600080fd5b80633c6b16ab146103035780633d18b912146103165780634e6cd3fa1461031e5780635312ea8e1461033157806359d6c3c41461034457600080fd5b80631c1f78eb1161021b5780631c1f78eb146102b75780631e10eeaf146102bf5780632e1a7d4d146102d45780632e4c697f146102e7578063386a9525146102fa57600080fd5b80628cc26214610257578063045544431461027d5780630700037d146102865780630711306d146102a657806318160ddd146102af575b600080fd5b61026a6102653660046117ea565b610574565b6040519081526020015b60405180910390f35b61026a600a5481565b61026a6102943660046117ea565b600e6020526000908152604090205481565b61026a600c5481565b600f5461026a565b61026a6105eb565b6102d26102cd366004611805565b610609565b005b6102d26102e236600461182f565b6106f2565b61026a6102f5366004611848565b6108b9565b61026a60055481565b6102d261031136600461182f565b61091f565b6102d2610b30565b6102d261032c3660046117ea565b610c3e565b6102d261033f36600461182f565b610c90565b6102d261035236600461182f565b610e19565b60005460ff165b6040519015158152602001610274565b61026a61037c3660046117ea565b6001600160a01b031660009081526010602052604090205490565b6102d2610ebc565b6002546103b2906001600160a01b031681565b6040516001600160a01b039091168152602001610274565b61026a6103d8366004611848565b610f3b565b61026a60045481565b61026a610f51565b61026a6103fc3660046117ea565b600d6020526000908152604090205481565b60005461010090046001600160a01b03166103b2565b61042c610f5f565b60408051998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c084015260e083015261010082015261012001610274565b6102d261047e36600461182f565b610fae565b61026a60085481565b61026a6107d081565b6009546103b2906001600160a01b031681565b61026a60065481565b6102d26104bf36600461182f565b611157565b61026a61125f565b600b5461035e90610100900460ff1681565b6001546103b2906001600160a01b031681565b61026a60075481565b6102d26112a4565b6105156105103660046117ea565b6112e1565b60408051938452602084019290925290820152606001610274565b61054361053e366004611880565b611326565b6040516102749190611945565b6102d26113f1565b61026a60035481565b6102d261056f3660046117ea565b611414565b6001600160a01b0381166000908152600e6020908152604080832054600854600d909352908320546105e5926105df916105d9906105ba906105b461125f565b9061150f565b6001600160a01b0388166000908152601060205260409020549061151b565b90611527565b90611533565b92915050565b600061060460055460045461151b90919063ffffffff16565b905090565b6000546001600160a01b036101009091041633146106425760405162461bcd60e51b815260040161063990611989565b60405180910390fd5b60035461065190611c206119d4565b4210156106985760405162461bcd60e51b81526020600482015260156024820152742637b1b5902a34b6b29034b9903737ba1037bb32b960591b6044820152606401610639565b6106ac6001600160a01b038316338361153f565b604080516001600160a01b0384168152602081018390527f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28910160405180910390a15050565b333b156107115760405162461bcd60e51b8152600401610639906119e7565b3332146107305760405162461bcd60e51b815260040161063990611a15565b3361073961125f565b600755610744610f51565b6006556001600160a01b0381161561078b5761075f81610574565b6001600160a01b0382166000908152600e6020908152604080832093909355600754600d909152919020555b600082116107cf5760405162461bcd60e51b8152602060048201526011602482015270043616e6e6f74207769746864726177203607c1b6044820152606401610639565b600b54610100900460ff1615610829576003544210156108295760405162461bcd60e51b81526020600482015260156024820152742637b1b5902a34b6b29034b9903737ba1037bb32b960591b6044820152606401610639565b600f54610836908361150f565b600f5533600090815260106020526040902054610853908361150f565b3360008181526010602052604090209190915560025461087f916001600160a01b03909116908461153f565b60405182815233907f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5906020015b60405180910390a25050565b6000816000036108cb575060016105e5565b816001036108da5750816105e5565b60006108eb846102f5856002611527565b90506108f7818061151b565b90506109048360026115a7565b60010361091857610915818561151b565b90505b9392505050565b6000546001600160a01b0361010090910416331461094f5760405162461bcd60e51b815260040161063990611989565b600061095961125f565b600755610964610f51565b6006556001600160a01b038116156109ab5761097f81610574565b6001600160a01b0382166000908152600e6020908152604080832093909355600754600d909152919020555b60035442106109ca576005546109c2908390611527565b600455610a0d565b6003546000906109da904261150f565b905060006109f36004548361151b90919063ffffffff16565b600554909150610a07906105d98684611533565b60045550505b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610a56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7a9190611a4c565b9050610a916005548261152790919063ffffffff16565b6004541115610ae25760405162461bcd60e51b815260206004820152601860248201527f50726f76696465642072657761726420746f6f206869676800000000000000006044820152606401610639565b426006819055600554610af59190611533565b6003556040518381527fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9060200160405180910390a1505050565b333b15610b4f5760405162461bcd60e51b8152600401610639906119e7565b333214610b6e5760405162461bcd60e51b815260040161063990611a15565b33610b7761125f565b600755610b82610f51565b6006556001600160a01b03811615610bc957610b9d81610574565b6001600160a01b0382166000908152600e6020908152604080832093909355600754600d909152919020555b336000908152600e60205260409020548015610c3a57336000818152600e6020526040812055600154610c08916001600160a01b03909116908361153f565b60405181815233907fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486906020016108ad565b5050565b6000546001600160a01b03610100909104163314610c6e5760405162461bcd60e51b815260040161063990611989565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b333b15610caf5760405162461bcd60e51b8152600401610639906119e7565b333214610cce5760405162461bcd60e51b815260040161063990611a15565b33610cd761125f565b600755610ce2610f51565b6006556001600160a01b03811615610d2957610cfd81610574565b6001600160a01b0382166000908152600e6020908152604080832093909355600754600d909152919020555b60008211610d6d5760405162461bcd60e51b8152602060048201526011602482015270043616e6e6f74207769746864726177203607c1b6044820152606401610639565b610d75610b30565b600f54610d82908361150f565b600f5533600090815260106020526040902054610d9f908361150f565b33600090815260106020526040902055600c5415610e02576000610dd46127106105d9600c548661151b90919063ffffffff16565b9050610de08184611a65565b600954600254919450610e00916001600160a01b0390811691168361153f565b505b60025461087f906001600160a01b0316338461153f565b6000546001600160a01b03610100909104163314610e495760405162461bcd60e51b815260040161063990611989565b6107d0811115610eb75760405162461bcd60e51b815260206004820152603360248201527f6561726c79556e7374616b654665652063616e6e6f74206265206d6f7265207460448201527268616e204d41585f554e5354414b455f46454560681b6064820152608401610639565b600c55565b6000546001600160a01b03610100909104163314610eec5760405162461bcd60e51b815260040161063990611989565b600080546040516101009091046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360008054610100600160a81b0319169055565b6000818310610f4a5781610918565b5090919050565b600061060442600354610f3b565b600354600454600554600654600080808080610f7961125f565b9450610f9260055460045461151b90919063ffffffff16565b9350600a549250600c549150600f549050909192939495969798565b333b15610fcd5760405162461bcd60e51b8152600401610639906119e7565b333214610fec5760405162461bcd60e51b815260040161063990611a15565b60005460ff16156110325760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610639565b3361103b61125f565b600755611046610f51565b6006556001600160a01b0381161561108d5761106181610574565b6001600160a01b0382166000908152600e6020908152604080832093909355600754600d909152919020555b600082116110ce5760405162461bcd60e51b815260206004820152600e60248201526d043616e6e6f74207374616b6520360941b6044820152606401610639565b600f546110db9083611533565b600f55336000908152601060205260409020546110f89083611533565b33600081815260106020526040902091909155600254611125916001600160a01b039091169030856115b3565b60405182815233907f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d906020016108ad565b6000546001600160a01b036101009091041633146111875760405162461bcd60e51b815260040161063990611989565b60035442116112245760405162461bcd60e51b815260206004820152605860248201527f50726576696f7573207265776172647320706572696f64206d7573742062652060448201527f636f6d706c657465206265666f7265206368616e67696e67207468652064757260648201527f6174696f6e20666f7220746865206e657720706572696f640000000000000000608482015260a401610639565b60058190556040518181527ffb46ca5a5e06d4540d6387b930a7c978bce0db5f449ec6b3f5d07c6e1d44f2d39060200160405180910390a150565b6000600f54600003611272575060075490565b61060461129b600f546105d96008546112956004546112956006546105b4610f51565b9061151b565b60075490611533565b6000546001600160a01b036101009091041633146112d45760405162461bcd60e51b815260040161063990611989565b600b805461ff0019169055565b6001600160a01b038116600090815260106020526040812054908061130584610574565b6001600160a01b039094166000908152600e60205260409020549294915050565b60606000825167ffffffffffffffff8111156113445761134461186a565b60405190808252806020026020018201604052801561136d578160200160208202803683370190505b50905060005b83518110156113ea576010600085838151811061139257611392611a78565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020548282815181106113cd576113cd611a78565b6020908102919091010152806113e281611a8e565b915050611373565b5092915050565b3360009081526010602052604090205461140a906106f2565b611412610b30565b565b6000546001600160a01b036101009091041633146114445760405162461bcd60e51b815260040161063990611989565b6001600160a01b0381166114a95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610639565b600080546040516001600160a01b038085169361010090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60006109188284611a65565b60006109188284611aa7565b60006109188284611ad4565b600061091882846119d4565b6040516001600160a01b0383166024820152604481018290526115a290849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526115f1565b505050565b60006109188284611ae8565b6040516001600160a01b03808516602483015283166044820152606481018290526115eb9085906323b872dd60e01b9060840161156b565b50505050565b6000611646826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166116c39092919063ffffffff16565b8051909150156115a257808060200190518101906116649190611afc565b6115a25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610639565b6060610915848460008585843b61171c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610639565b600080866001600160a01b031685876040516117389190611b42565b60006040518083038185875af1925050503d8060008114611775576040519150601f19603f3d011682016040523d82523d6000602084013e61177a565b606091505b509150915061178a828286611795565b979650505050505050565b606083156117a4575081610918565b8251156117b45782518084602001fd5b8160405162461bcd60e51b81526004016106399190611b5e565b80356001600160a01b03811681146117e557600080fd5b919050565b6000602082840312156117fc57600080fd5b610918826117ce565b6000806040838503121561181857600080fd5b611821836117ce565b946020939093013593505050565b60006020828403121561184157600080fd5b5035919050565b6000806040838503121561185b57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561189357600080fd5b823567ffffffffffffffff808211156118ab57600080fd5b818501915085601f8301126118bf57600080fd5b8135818111156118d1576118d161186a565b8060051b604051601f19603f830116810181811085821117156118f6576118f661186a565b60405291825284820192508381018501918883111561191457600080fd5b938501935b828510156119395761192a856117ce565b84529385019392850192611919565b98975050505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561197d57835183529284019291840191600101611961565b50909695505050505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808201808211156105e5576105e56119be565b60208082526014908201527318dbdb9d1c9858dd081b9bdd08185b1b1bddd95960621b604082015260600190565b6020808252601a908201527f70726f787920636f6e7472616374206e6f7420616c6c6f776564000000000000604082015260600190565b600060208284031215611a5e57600080fd5b5051919050565b818103818111156105e5576105e56119be565b634e487b7160e01b600052603260045260246000fd5b600060018201611aa057611aa06119be565b5060010190565b80820281158282048414176105e5576105e56119be565b634e487b7160e01b600052601260045260246000fd5b600082611ae357611ae3611abe565b500490565b600082611af757611af7611abe565b500690565b600060208284031215611b0e57600080fd5b8151801515811461091857600080fd5b60005b83811015611b39578181015183820152602001611b21565b50506000910152565b60008251611b54818460208701611b1e565b9190910192915050565b6020815260008251806020840152611b7d816040850160208701611b1e565b601f01601f1916919091016040019291505056fea264697066735822122014a6d1ac023ab19770b3d28c7935527e71551d1195959cc83547a4f2c6e5f52e64736f6c63430008130033
Deployed Bytecode Sourcemap
16800:9803:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19670:257;;;;;;:::i;:::-;;:::i;:::-;;;529:25:1;;;517:2;502:18;19670:257:0;;;;;;;;17248:27;;;;;;17515:42;;;;;;:::i;:::-;;;;;;;;;;;;;;17405:37;;;;;;18541:93;18614:12;;18541:93;;19935:121;;;:::i;25101:316::-;;;;;;:::i;:::-;;:::i;:::-;;21885:488;;;;;;:::i;:::-;;:::i;18642:364::-;;;;;;:::i;:::-;;:::i;17055:30::-;;;;;;23485:1129;;;;;;:::i;:::-;;:::i;22381:306::-;;;:::i;18394:98::-;;;;;;:::i;:::-;;:::i;22695:621::-;;;;;;:::i;:::-;;:::i;24622:236::-;;;;;;:::i;:::-;;:::i;10353:78::-;10392:4;10416:7;;;10353:78;;;1427:14:1;;1420:22;1402:41;;1390:2;1375:18;10353:78:0;1262:187:1;19014:112:0;;;;;;:::i;:::-;-1:-1:-1;;;;;19100:18:0;19073:7;19100:18;;;:9;:18;;;;;;;19014:112;16393:148;;;:::i;16946:26::-;;;;;-1:-1:-1;;;;;16946:26:0;;;;;;-1:-1:-1;;;;;1632:32:1;;;1614:51;;1602:2;1587:18;16946:26:0;1454:217:1;20064:104:0;;;;;;:::i;:::-;;:::i;17019:29::-;;;;;;19134:126;;;:::i;17451:57::-;;;;;;:::i;:::-;;;;;;;;;;;;;;16179:79;16217:7;16244:6;;;;-1:-1:-1;;;;;16244:6:0;16179:79;;20503:660;;;:::i;:::-;;;;2255:25:1;;;2311:2;2296:18;;2289:34;;;;2339:18;;;2332:34;;;;2397:2;2382:18;;2375:34;;;;2440:3;2425:19;;2418:35;;;;2484:3;2469:19;;2462:35;2528:3;2513:19;;2506:35;2572:3;2557:19;;2550:35;2616:3;2601:19;;2594:35;2242:3;2227:19;20503:660:0;1884:751:1;21469:408:0;;;;;;:::i;:::-;;:::i;17170:39::-;;;;;;17350:46;;17392:4;17350:46;;17216:25;;;;;-1:-1:-1;;;;;17216:25:0;;;17092:29;;;;;;25425:360;;;;;;:::i;:::-;;:::i;19268:394::-;;;:::i;17315:26::-;;;;;;;;;;;;16913;;;;;-1:-1:-1;;;;;16913:26:0;;;17128:35;;;;;;25018:75;;;:::i;21171:234::-;;;;;;:::i;:::-;;:::i;:::-;;;;2842:25:1;;;2898:2;2883:18;;2876:34;;;;2926:18;;;2919:34;2830:2;2815:18;21171:234:0;2640:319:1;20180:315:0;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;23324:97::-;;;:::i;16981:31::-;;;;;;16549:244;;;;;;:::i;:::-;;:::i;19670:257::-;-1:-1:-1;;;;;19902:16:0;;19724:7;19902:16;;;:7;:16;;;;;;;;;19862:24;;19814:22;:31;;;;;;;19760:159;;:127;;:87;;19793:53;;:16;:14;:16::i;:::-;:20;;:53::i;:::-;-1:-1:-1;;;;;19760:18:0;;;;;;:9;:18;;;;;;;:32;:87::i;:::-;:101;;:127::i;:::-;:141;;:159::i;:::-;19744:175;19670:257;-1:-1:-1;;19670:257:0:o;19935:121::-;19990:7;20017:31;20032:15;;20017:10;;:14;;:31;;;;:::i;:::-;20010:38;;19935:121;:::o;25101:316::-;16306:6;;-1:-1:-1;;;;;16306:6:0;;;;;9684:10;16306:22;16298:67;;;;-1:-1:-1;;;16298:67:0;;;;;;;:::i;:::-;;;;;;;;;25238:12:::1;::::0;:22:::1;::::0;25253:7:::1;25238:22;:::i;:::-;25219:15;:41;;25211:75;;;::::0;-1:-1:-1;;;25211:75:0;;5684:2:1;25211:75:0::1;::::0;::::1;5666:21:1::0;5723:2;5703:18;;;5696:30;-1:-1:-1;;;5742:18:1;;;5735:51;5803:18;;25211:75:0::1;5482:345:1::0;25211:75:0::1;25299:58;-1:-1:-1::0;;;;;25299:33:0;::::1;25333:10;25345:11:::0;25299:33:::1;:58::i;:::-;25373:36;::::0;;-1:-1:-1;;;;;6024:32:1;;6006:51;;6088:2;6073:18;;6066:34;;;25373:36:0::1;::::0;5979:18:1;25373:36:0::1;;;;;;;25101:316:::0;;:::o;21885:488::-;17710:10;17977:17;18022:8;17689:57;;;;-1:-1:-1;;;17689:57:0;;;;;;;:::i;:::-;17765:10;17779:9;17765:23;17757:62;;;;-1:-1:-1;;;17757:62:0;;;;;;;:::i;:::-;21966:10:::1;25911:16;:14;:16::i;:::-;25888:20;:39:::0;25955:26:::1;:24;:26::i;:::-;25938:14;:43:::0;-1:-1:-1;;;;;25996:21:0;::::1;::::0;25992:157:::1;;26053:15;26060:7;26053:6;:15::i;:::-;-1:-1:-1::0;;;;;26034:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:34;;;;26117:20:::1;::::0;26083:22:::1;:31:::0;;;;;;:54;25992:157:::1;22011:1:::2;22002:6;:10;21994:40;;;::::0;-1:-1:-1;;;21994:40:0;;7017:2:1;21994:40:0::2;::::0;::::2;6999:21:1::0;7056:2;7036:18;;;7029:30;-1:-1:-1;;;7075:18:1;;;7068:47;7132:18;;21994:40:0::2;6815:341:1::0;21994:40:0::2;22048:6;::::0;::::2;::::0;::::2;;;22045:102;;;22097:12;;22078:15;:31;;22070:65;;;::::0;-1:-1:-1;;;22070:65:0;;5684:2:1;22070:65:0::2;::::0;::::2;5666:21:1::0;5723:2;5703:18;;;5696:30;-1:-1:-1;;;5742:18:1;;;5735:51;5803:18;;22070:65:0::2;5482:345:1::0;22070:65:0::2;22172:12;::::0;:24:::2;::::0;22189:6;22172:16:::2;:24::i;:::-;22157:12;:39:::0;22241:10:::2;22231:21;::::0;;;:9:::2;:21;::::0;;;;;:33:::2;::::0;22257:6;22231:25:::2;:33::i;:::-;22217:10;22207:21;::::0;;;:9:::2;:21;::::0;;;;:57;;;;22275:12:::2;::::0;:45:::2;::::0;-1:-1:-1;;;;;22275:12:0;;::::2;::::0;22313:6;22275:25:::2;:45::i;:::-;22336:29;::::0;529:25:1;;;22346:10:0::2;::::0;22336:29:::2;::::0;517:2:1;502:18;22336:29:0::2;;;;;;;;17830:1:::1;21885:488:::0;:::o;18642:364::-;18692:4;18715:1;18720;18715:6;18711:288;;-1:-1:-1;18745:1:0;18738:8;;18711:288;18768:1;18773;18768:6;18764:235;;-1:-1:-1;18798:1:0;18791:8;;18764:235;18832:6;18841:16;18845:1;18848:8;:1;18854;18848:5;:8::i;18841:16::-;18832:25;-1:-1:-1;18876:8:0;18832:25;;18876:5;:8::i;:::-;18872:12;-1:-1:-1;18903:8:0;:1;18909;18903:5;:8::i;:::-;18915:1;18903:13;18899:66;;18941:8;:1;18947;18941:5;:8::i;:::-;18937:12;;18899:66;18986:1;18642:364;-1:-1:-1;;;18642:364:0:o;23485:1129::-;16306:6;;-1:-1:-1;;;;;16306:6:0;;;;;9684:10;16306:22;16298:67;;;;-1:-1:-1;;;16298:67:0;;;;;;;:::i;:::-;23584:1:::1;25911:16;:14;:16::i;:::-;25888:20;:39:::0;25955:26:::1;:24;:26::i;:::-;25938:14;:43:::0;-1:-1:-1;;;;;25996:21:0;::::1;::::0;25992:157:::1;;26053:15;26060:7;26053:6;:15::i;:::-;-1:-1:-1::0;;;;;26034:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:34;;;;26117:20:::1;::::0;26083:22:::1;:31:::0;;;;;;:54;25992:157:::1;23627:12:::2;;23608:15;:31;23604:318;;23680:15;::::0;23669:27:::2;::::0;:6;;:10:::2;:27::i;:::-;23656:10;:40:::0;23604:318:::2;;;23749:12;::::0;23729:17:::2;::::0;23749:33:::2;::::0;23766:15:::2;23749:16;:33::i;:::-;23729:53;;23797:16;23816:25;23830:10;;23816:9;:13;;:25;;;;:::i;:::-;23894:15;::::0;23797:44;;-1:-1:-1;23869:41:0::2;::::0;:20:::2;:6:::0;23797:44;23869:10:::2;:20::i;:41::-;23856:10;:54:::0;-1:-1:-1;;23604:318:0::2;24300:12;::::0;:37:::2;::::0;-1:-1:-1;;;24300:37:0;;24331:4:::2;24300:37;::::0;::::2;1614:51:1::0;24282:15:0::2;::::0;-1:-1:-1;;;;;24300:12:0::2;::::0;:22:::2;::::0;1587:18:1;;24300:37:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24282:55;;24384:28;24396:15;;24384:7;:11;;:28;;;;:::i;:::-;24370:10;;:42;;24348:116;;;::::0;-1:-1:-1;;;24348:116:0;;7552:2:1;24348:116:0::2;::::0;::::2;7534:21:1::0;7591:2;7571:18;;;7564:30;7630:26;7610:18;;;7603:54;7674:18;;24348:116:0::2;7350:348:1::0;24348:116:0::2;24494:15;24477:14;:32:::0;;;24555:15:::2;::::0;24535:36:::2;::::0;24494:15;24535:19:::2;:36::i;:::-;24520:12;:51:::0;24587:19:::2;::::0;529:25:1;;;24587:19:0::2;::::0;517:2:1;502:18;24587:19:0::2;;;;;;;23593:1021;16376:1:::1;23485:1129:::0;:::o;22381:306::-;17710:10;17977:17;18022:8;17689:57;;;;-1:-1:-1;;;17689:57:0;;;;;;;:::i;:::-;17765:10;17779:9;17765:23;17757:62;;;;-1:-1:-1;;;17757:62:0;;;;;;;:::i;:::-;22434:10:::1;25911:16;:14;:16::i;:::-;25888:20;:39:::0;25955:26:::1;:24;:26::i;:::-;25938:14;:43:::0;-1:-1:-1;;;;;25996:21:0;::::1;::::0;25992:157:::1;;26053:15;26060:7;26053:6;:15::i;:::-;-1:-1:-1::0;;;;;26034:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:34;;;;26117:20:::1;::::0;26083:22:::1;:31:::0;;;;;;:54;25992:157:::1;22482:10:::2;22457:14;22474:19:::0;;;:7:::2;:19;::::0;;;;;22508:10;;22504:176:::2;;22543:10;22557:1;22535:19:::0;;;:7:::2;:19;::::0;;;;:23;22573:12:::2;::::0;:45:::2;::::0;-1:-1:-1;;;;;22573:12:0;;::::2;::::0;22611:6;22573:25:::2;:45::i;:::-;22638:30;::::0;529:25:1;;;22649:10:0::2;::::0;22638:30:::2;::::0;517:2:1;502:18;22638:30:0::2;383:177:1::0;22504:176:0::2;22446:241;17830:1:::1;22381:306::o:0;18394:98::-;16306:6;;-1:-1:-1;;;;;16306:6:0;;;;;9684:10;16306:22;16298:67;;;;-1:-1:-1;;;16298:67:0;;;;;;;:::i;:::-;18463:10:::1;:21:::0;;-1:-1:-1;;;;;;18463:21:0::1;-1:-1:-1::0;;;;;18463:21:0;;;::::1;::::0;;;::::1;::::0;;18394:98::o;22695:621::-;17710:10;17977:17;18022:8;17689:57;;;;-1:-1:-1;;;17689:57:0;;;;;;;:::i;:::-;17765:10;17779:9;17765:23;17757:62;;;;-1:-1:-1;;;17757:62:0;;;;;;;:::i;:::-;22786:10:::1;25911:16;:14;:16::i;:::-;25888:20;:39:::0;25955:26:::1;:24;:26::i;:::-;25938:14;:43:::0;-1:-1:-1;;;;;25996:21:0;::::1;::::0;25992:157:::1;;26053:15;26060:7;26053:6;:15::i;:::-;-1:-1:-1::0;;;;;26034:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:34;;;;26117:20:::1;::::0;26083:22:::1;:31:::0;;;;;;:54;25992:157:::1;22831:1:::2;22822:6;:10;22814:40;;;::::0;-1:-1:-1;;;22814:40:0;;7017:2:1;22814:40:0::2;::::0;::::2;6999:21:1::0;7056:2;7036:18;;;7029:30;-1:-1:-1;;;7075:18:1;;;7068:47;7132:18;;22814:40:0::2;6815:341:1::0;22814:40:0::2;22865:11;:9;:11::i;:::-;22902:12;::::0;:24:::2;::::0;22919:6;22902:16:::2;:24::i;:::-;22887:12;:39:::0;22971:10:::2;22961:21;::::0;;;:9:::2;:21;::::0;;;;;:33:::2;::::0;22987:6;22961:25:::2;:33::i;:::-;22947:10;22937:21;::::0;;;:9:::2;:21;::::0;;;;:57;23009:15:::2;::::0;:19;23005:203:::2;;23044:16;23063:38;23095:5;23063:27;23074:15;;23063:6;:10;;:27;;;;:::i;:38::-;23044:57:::0;-1:-1:-1;23116:18:0::2;23044:57:::0;23116:18;::::2;:::i;:::-;23175:10;::::0;23149:12:::2;::::0;23116:18;;-1:-1:-1;23149:47:0::2;::::0;-1:-1:-1;;;;;23149:12:0;;::::2;::::0;23175:10:::2;23187:8:::0;23149:25:::2;:47::i;:::-;23029:179;23005:203;23218:12;::::0;:45:::2;::::0;-1:-1:-1;;;;;23218:12:0::2;23244:10;23256:6:::0;23218:25:::2;:45::i;24622:236::-:0;16306:6;;-1:-1:-1;;;;;16306:6:0;;;;;9684:10;16306:22;16298:67;;;;-1:-1:-1;;;16298:67:0;;;;;;;:::i;:::-;17392:4:::1;24714:16;:35;;24706:99;;;::::0;-1:-1:-1;;;24706:99:0;;8038:2:1;24706:99:0::1;::::0;::::1;8020:21:1::0;8077:2;8057:18;;;8050:30;8116:34;8096:18;;;8089:62;-1:-1:-1;;;8167:18:1;;;8160:49;8226:19;;24706:99:0::1;7836:415:1::0;24706:99:0::1;24816:15;:34:::0;24622:236::o;16393:148::-;16306:6;;-1:-1:-1;;;;;16306:6:0;;;;;9684:10;16306:22;16298:67;;;;-1:-1:-1;;;16298:67:0;;;;;;;:::i;:::-;16500:1:::1;16484:6:::0;;16463:40:::1;::::0;16484:6:::1;::::0;;::::1;-1:-1:-1::0;;;;;16484:6:0::1;::::0;16463:40:::1;::::0;16500:1;;16463:40:::1;16531:1;16514:19:::0;;-1:-1:-1;;;;;;16514:19:0::1;::::0;;16393:148::o;20064:104::-;20120:7;20151:1;20147;:5;:13;;20159:1;20147:13;;;-1:-1:-1;20155:1:0;;20140:20;-1:-1:-1;20064:104:0:o;19134:126::-;19191:7;19218:34;19222:15;19239:12;;19218:3;:34::i;20503:660::-;20789:12;;20826:10;;20866:15;;20910:14;;20543:21;;;;;20953:16;:14;:16::i;:::-;20935:34;;21004:31;21019:15;;21004:10;;:14;;:31;;;;:::i;:::-;20980:55;;21062:12;;21046:28;;21104:15;;21085:34;;21143:12;;21130:25;;20503:660;;;;;;;;;:::o;21469:408::-;17710:10;17977:17;18022:8;17689:57;;;;-1:-1:-1;;;17689:57:0;;;;;;;:::i;:::-;17765:10;17779:9;17765:23;17757:62;;;;-1:-1:-1;;;17757:62:0;;;;;;;:::i;:::-;10671:7:::1;::::0;::::1;;10670:8;10662:37;;;::::0;-1:-1:-1;;;10662:37:0;;8458:2:1;10662:37:0::1;::::0;::::1;8440:21:1::0;8497:2;8477:18;;;8470:30;-1:-1:-1;;;8516:18:1;;;8509:46;8572:18;;10662:37:0::1;8256:340:1::0;10662:37:0::1;21568:10:::2;25911:16;:14;:16::i;:::-;25888:20;:39:::0;25955:26:::2;:24;:26::i;:::-;25938:14;:43:::0;-1:-1:-1;;;;;25996:21:0;::::2;::::0;25992:157:::2;;26053:15;26060:7;26053:6;:15::i;:::-;-1:-1:-1::0;;;;;26034:16:0;::::2;;::::0;;;:7:::2;:16;::::0;;;;;;;:34;;;;26117:20:::2;::::0;26083:22:::2;:31:::0;;;;;;:54;25992:157:::2;21613:1:::3;21604:6;:10;21596:37;;;::::0;-1:-1:-1;;;21596:37:0;;8803:2:1;21596:37:0::3;::::0;::::3;8785:21:1::0;8842:2;8822:18;;;8815:30;-1:-1:-1;;;8861:18:1;;;8854:44;8915:18;;21596:37:0::3;8601:338:1::0;21596:37:0::3;21660:12;::::0;:24:::3;::::0;21677:6;21660:16:::3;:24::i;:::-;21645:12;:39:::0;21729:10:::3;21719:21;::::0;;;:9:::3;:21;::::0;;;;;:33:::3;::::0;21745:6;21719:25:::3;:33::i;:::-;21705:10;21695:21;::::0;;;:9:::3;:21;::::0;;;;:57;;;;21763:12:::3;::::0;:64:::3;::::0;-1:-1:-1;;;;;21763:12:0;;::::3;::::0;21813:4:::3;21820:6:::0;21763:29:::3;:64::i;:::-;21843:26;::::0;529:25:1;;;21850:10:0::3;::::0;21843:26:::3;::::0;517:2:1;502:18;21843:26:0::3;383:177:1::0;25425:360:0;16306:6;;-1:-1:-1;;;;;16306:6:0;;;;;9684:10;16306:22;16298:67;;;;-1:-1:-1;;;16298:67:0;;;;;;;:::i;:::-;25549:12:::1;;25531:15;:30;25509:168;;;::::0;-1:-1:-1;;;25509:168:0;;9146:2:1;25509:168:0::1;::::0;::::1;9128:21:1::0;9185:2;9165:18;;;9158:30;9224:34;9204:18;;;9197:62;9295:34;9275:18;;;9268:62;9367:26;9346:19;;;9339:55;9411:19;;25509:168:0::1;8944:492:1::0;25509:168:0::1;25688:15;:34:::0;;;25738:39:::1;::::0;529:25:1;;;25738:39:0::1;::::0;517:2:1;502:18;25738:39:0::1;;;;;;;25425:360:::0;:::o;19268:394::-;19315:7;19339:12;;19355:1;19339:17;19335:77;;-1:-1:-1;19380:20:0;;;19268:394::o;19335:77::-;19438:216;19477:166;19630:12;;19477:134;19586:24;;19477:90;19556:10;;19477:60;19522:14;;19477:26;:24;:26::i;:60::-;:78;;:90::i;:166::-;19438:20;;;:24;:216::i;25018:75::-;16306:6;;-1:-1:-1;;;;;16306:6:0;;;;;9684:10;16306:22;16298:67;;;;-1:-1:-1;;;16298:67:0;;;;;;;:::i;:::-;25071:6:::1;:14:::0;;-1:-1:-1;;25071:14:0::1;::::0;;25018:75::o;21171:234::-;-1:-1:-1;;;;;21305:18:0;;21226;21305;;;:9;:18;;;;;;;21226;21344:15;21315:7;21344:6;:15::i;:::-;-1:-1:-1;;;;;21381:16:0;;;;;;;:7;:16;;;;;;21171:234;;;-1:-1:-1;;21171:234:0:o;20180:315::-;20255:16;20284:25;20326:8;:15;20312:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20312:30:0;;20284:58;;20358:9;20353:109;20377:8;:15;20373:1;:19;20353:109;;;20428:9;:22;20438:8;20447:1;20438:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;20428:22:0;-1:-1:-1;;;;;20428:22:0;;;;;;;;;;;;;20414:8;20423:1;20414:11;;;;;;;;:::i;:::-;;;;;;;;;;:36;20394:3;;;;:::i;:::-;;;;20353:109;;;-1:-1:-1;20479:8:0;20180:315;-1:-1:-1;;20180:315:0:o;23324:97::-;23379:10;23369:21;;;;:9;:21;;;;;;23360:31;;:8;:31::i;:::-;23402:11;:9;:11::i;:::-;23324:97::o;16549:244::-;16306:6;;-1:-1:-1;;;;;16306:6:0;;;;;9684:10;16306:22;16298:67;;;;-1:-1:-1;;;16298:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16638:22:0;::::1;16630:73;;;::::0;-1:-1:-1;;;16630:73:0;;9915:2:1;16630:73:0::1;::::0;::::1;9897:21:1::0;9954:2;9934:18;;;9927:30;9993:34;9973:18;;;9966:62;-1:-1:-1;;;10044:18:1;;;10037:36;10090:19;;16630:73:0::1;9713:402:1::0;16630:73:0::1;16740:6;::::0;;16719:38:::1;::::0;-1:-1:-1;;;;;16719:38:0;;::::1;::::0;16740:6:::1;::::0;;::::1;;::::0;16719:38:::1;::::0;::::1;16768:6;:17:::0;;-1:-1:-1;;;;;16768:17:0;;::::1;;;-1:-1:-1::0;;;;;;16768:17:0;;::::1;::::0;;;::::1;::::0;;16549:244::o;12779:98::-;12837:7;12864:5;12868:1;12864;:5;:::i;12885:98::-;12943:7;12970:5;12974:1;12970;:5;:::i;12991:98::-;13049:7;13076:5;13080:1;13076;:5;:::i;12673:98::-;12731:7;12758:5;12762:1;12758;:5;:::i;14036:177::-;14146:58;;-1:-1:-1;;;;;6024:32:1;;14146:58:0;;;6006:51:1;6073:18;;;6066:34;;;14119:86:0;;14139:5;;-1:-1:-1;;;14169:23:0;5979:18:1;;14146:58:0;;;;-1:-1:-1;;14146:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;14146:58:0;-1:-1:-1;;;;;;14146:58:0;;;;;;;;;;14119:19;:86::i;:::-;14036:177;;;:::o;13097:98::-;13155:7;13182:5;13186:1;13182;:5;:::i;14221:205::-;14349:68;;-1:-1:-1;;;;;10925:15:1;;;14349:68:0;;;10907:34:1;10977:15;;10957:18;;;10950:43;11009:18;;;11002:34;;;14322:96:0;;14342:5;;-1:-1:-1;;;14372:27:0;10842:18:1;;14349:68:0;10667:375:1;14322:96:0;14221:205;;;;:::o;15423:420::-;15506:23;15532:69;15560:4;15532:69;;;;;;;;;;;;;;;;;15540:5;-1:-1:-1;;;;;15532:27:0;;;:69;;;;;:::i;:::-;15616:17;;15506:95;;-1:-1:-1;15616:21:0;15612:224;;15758:10;15747:30;;;;;;;;;;;;:::i;:::-;15739:85;;;;-1:-1:-1;;;15739:85:0;;11531:2:1;15739:85:0;;;11513:21:1;11570:2;11550:18;;;11543:30;11609:34;11589:18;;;11582:62;-1:-1:-1;;;11660:18:1;;;11653:40;11710:19;;15739:85:0;11329:406:1;3595:195:0;3698:12;3730:52;3752:6;3760:4;3766:1;3769:12;3698;17977:17;;4891:60;;;;-1:-1:-1;;;4891:60:0;;12349:2:1;4891:60:0;;;12331:21:1;12388:2;12368:18;;;12361:30;12427:31;12407:18;;;12400:59;12476:18;;4891:60:0;12147:353:1;4891:60:0;5025:12;5039:23;5066:6;-1:-1:-1;;;;;5066:11:0;5086:5;5094:4;5066:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5024:75;;;;5117:52;5135:7;5144:10;5156:12;5117:17;:52::i;:::-;5110:59;4647:530;-1:-1:-1;;;;;;;4647:530:0:o;6183:742::-;6298:12;6327:7;6323:595;;;-1:-1:-1;6358:10:0;6351:17;;6323:595;6472:17;;:21;6468:439;;6735:10;6729:17;6796:15;6783:10;6779:2;6775:19;6768:44;6468:439;6878:12;6871:20;;-1:-1:-1;;;6871:20:0;;;;;;;;:::i;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;565:254::-;633:6;641;694:2;682:9;673:7;669:23;665:32;662:52;;;710:1;707;700:12;662:52;733:29;752:9;733:29;:::i;:::-;723:39;809:2;794:18;;;;781:32;;-1:-1:-1;;;565:254:1:o;824:180::-;883:6;936:2;924:9;915:7;911:23;907:32;904:52;;;952:1;949;942:12;904:52;-1:-1:-1;975:23:1;;824:180;-1:-1:-1;824:180:1:o;1009:248::-;1077:6;1085;1138:2;1126:9;1117:7;1113:23;1109:32;1106:52;;;1154:1;1151;1144:12;1106:52;-1:-1:-1;;1177:23:1;;;1247:2;1232:18;;;1219:32;;-1:-1:-1;1009:248:1:o;2964:127::-;3025:10;3020:3;3016:20;3013:1;3006:31;3056:4;3053:1;3046:15;3080:4;3077:1;3070:15;3096:1121;3180:6;3211:2;3254;3242:9;3233:7;3229:23;3225:32;3222:52;;;3270:1;3267;3260:12;3222:52;3310:9;3297:23;3339:18;3380:2;3372:6;3369:14;3366:34;;;3396:1;3393;3386:12;3366:34;3434:6;3423:9;3419:22;3409:32;;3479:7;3472:4;3468:2;3464:13;3460:27;3450:55;;3501:1;3498;3491:12;3450:55;3537:2;3524:16;3559:2;3555;3552:10;3549:36;;;3565:18;;:::i;:::-;3611:2;3608:1;3604:10;3643:2;3637:9;3706:2;3702:7;3697:2;3693;3689:11;3685:25;3677:6;3673:38;3761:6;3749:10;3746:22;3741:2;3729:10;3726:18;3723:46;3720:72;;;3772:18;;:::i;:::-;3808:2;3801:22;3858:18;;;3892:15;;;;-1:-1:-1;3934:11:1;;;3930:20;;;3962:19;;;3959:39;;;3994:1;3991;3984:12;3959:39;4018:11;;;;4038:148;4054:6;4049:3;4046:15;4038:148;;;4120:23;4139:3;4120:23;:::i;:::-;4108:36;;4071:12;;;;4164;;;;4038:148;;;4205:6;3096:1121;-1:-1:-1;;;;;;;;3096:1121:1:o;4222:632::-;4393:2;4445:21;;;4515:13;;4418:18;;;4537:22;;;4364:4;;4393:2;4616:15;;;;4590:2;4575:18;;;4364:4;4659:169;4673:6;4670:1;4667:13;4659:169;;;4734:13;;4722:26;;4803:15;;;;4768:12;;;;4695:1;4688:9;4659:169;;;-1:-1:-1;4845:3:1;;4222:632;-1:-1:-1;;;;;;4222:632:1:o;4859:356::-;5061:2;5043:21;;;5080:18;;;5073:30;5139:34;5134:2;5119:18;;5112:62;5206:2;5191:18;;4859:356::o;5220:127::-;5281:10;5276:3;5272:20;5269:1;5262:31;5312:4;5309:1;5302:15;5336:4;5333:1;5326:15;5352:125;5417:9;;;5438:10;;;5435:36;;;5451:18;;:::i;6111:344::-;6313:2;6295:21;;;6352:2;6332:18;;;6325:30;-1:-1:-1;;;6386:2:1;6371:18;;6364:50;6446:2;6431:18;;6111:344::o;6460:350::-;6662:2;6644:21;;;6701:2;6681:18;;;6674:30;6740:28;6735:2;6720:18;;6713:56;6801:2;6786:18;;6460:350::o;7161:184::-;7231:6;7284:2;7272:9;7263:7;7259:23;7255:32;7252:52;;;7300:1;7297;7290:12;7252:52;-1:-1:-1;7323:16:1;;7161:184;-1:-1:-1;7161:184:1:o;7703:128::-;7770:9;;;7791:11;;;7788:37;;;7805:18;;:::i;9441:127::-;9502:10;9497:3;9493:20;9490:1;9483:31;9533:4;9530:1;9523:15;9557:4;9554:1;9547:15;9573:135;9612:3;9633:17;;;9630:43;;9653:18;;:::i;:::-;-1:-1:-1;9700:1:1;9689:13;;9573:135::o;10120:168::-;10193:9;;;10224;;10241:15;;;10235:22;;10221:37;10211:71;;10262:18;;:::i;10293:127::-;10354:10;10349:3;10345:20;10342:1;10335:31;10385:4;10382:1;10375:15;10409:4;10406:1;10399:15;10425:120;10465:1;10491;10481:35;;10496:18;;:::i;:::-;-1:-1:-1;10530:9:1;;10425:120::o;10550:112::-;10582:1;10608;10598:35;;10613:18;;:::i;:::-;-1:-1:-1;10647:9:1;;10550:112::o;11047:277::-;11114:6;11167:2;11155:9;11146:7;11142:23;11138:32;11135:52;;;11183:1;11180;11173:12;11135:52;11215:9;11209:16;11268:5;11261:13;11254:21;11247:5;11244:32;11234:60;;11290:1;11287;11280:12;12505:250;12590:1;12600:113;12614:6;12611:1;12608:13;12600:113;;;12690:11;;;12684:18;12671:11;;;12664:39;12636:2;12629:10;12600:113;;;-1:-1:-1;;12747:1:1;12729:16;;12722:27;12505:250::o;12760:287::-;12889:3;12927:6;12921:13;12943:66;13002:6;12997:3;12990:4;12982:6;12978:17;12943:66;:::i;:::-;13025:16;;;;;12760:287;-1:-1:-1;;12760:287:1:o;13052:396::-;13201:2;13190:9;13183:21;13164:4;13233:6;13227:13;13276:6;13271:2;13260:9;13256:18;13249:34;13292:79;13364:6;13359:2;13348:9;13344:18;13339:2;13331:6;13327:15;13292:79;:::i;:::-;13432:2;13411:15;-1:-1:-1;;13407:29:1;13392:45;;;;13439:2;13388:54;;13052:396;-1:-1:-1;;13052:396:1:o
Swarm Source
ipfs://14a6d1ac023ab19770b3d28c7935527e71551d1195959cc83547a4f2c6e5f52e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.