Overview
POL Balance
0 POL
POL Value
$0.00Token Holdings
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 11,658 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Stake | 61869846 | 34 hrs ago | IN | 0 POL | 0.00784451 | ||||
Claim Reward | 61869730 | 34 hrs ago | IN | 0 POL | 0.0489257 | ||||
Force Unlock | 61869690 | 34 hrs ago | IN | 0 POL | 0.01757707 | ||||
Claim Reward | 61869674 | 34 hrs ago | IN | 0 POL | 0.04160349 | ||||
Unstake | 61869638 | 34 hrs ago | IN | 0 POL | 0.06957607 | ||||
Claim Reward | 61869623 | 34 hrs ago | IN | 0 POL | 0.05204475 | ||||
Stake | 61868863 | 35 hrs ago | IN | 0 POL | 0.00869359 | ||||
Stake | 61868719 | 35 hrs ago | IN | 0 POL | 0.00739251 | ||||
Unstake | 61868557 | 35 hrs ago | IN | 0 POL | 0.08256924 | ||||
Claim Reward | 61868279 | 35 hrs ago | IN | 0 POL | 0.05782146 | ||||
Unstake | 61868246 | 35 hrs ago | IN | 0 POL | 0.05377191 | ||||
Claim Reward | 61868231 | 35 hrs ago | IN | 0 POL | 0.05344113 | ||||
Unstake | 61868065 | 35 hrs ago | IN | 0 POL | 0.07320801 | ||||
Claim Reward | 61867982 | 35 hrs ago | IN | 0 POL | 0.04864324 | ||||
Unstake | 61867926 | 35 hrs ago | IN | 0 POL | 0.05365824 | ||||
Claim Reward | 61867905 | 35 hrs ago | IN | 0 POL | 0.0480348 | ||||
Update Pool | 61863868 | 38 hrs ago | IN | 0 POL | 0.00227562 | ||||
Claim Reward | 61654392 | 6 days ago | IN | 0 POL | 0.04358484 | ||||
Update Pool | 61582878 | 8 days ago | IN | 0 POL | 0.00227562 | ||||
Update Pool | 61312935 | 15 days ago | IN | 0 POL | 0.00212391 | ||||
Force Unlock | 61193063 | 18 days ago | IN | 0 POL | 0.00297576 | ||||
Claim Reward | 61099681 | 20 days ago | IN | 0 POL | 0.04641178 | ||||
Update Pool | 61035521 | 22 days ago | IN | 0 POL | 0.00189635 | ||||
Claim Reward | 60958839 | 24 days ago | IN | 0 POL | 0.06425783 | ||||
Claim Reward | 60958839 | 24 days ago | IN | 0 POL | 0.05507814 |
Loading...
Loading
Contract Name:
StakingV2
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-04-17 */ // SPDX-License-Identifier: MIT // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v3.4/contracts/utils/Address.sol pragma solidity >=0.6.2 <0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // 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); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v3.4/contracts/token/ERC20/IERC20.sol pragma solidity >=0.6.0 <0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v3.4/contracts/utils/ReentrancyGuard.sol pragma solidity >=0.6.0 <0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () internal { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v3.4/contracts/utils/Context.sol pragma solidity >=0.6.0 <0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v3.4/contracts/access/Ownable.sol pragma solidity >=0.6.0 <0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v3.4/contracts/math/SafeMath.sol pragma solidity >=0.6.0 <0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v3.4/contracts/token/ERC20/SafeERC20.sol pragma solidity >=0.6.0 <0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ 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)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length 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)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. 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"); } } } // File: contracts/Staking.sol pragma solidity 0.6.12; /** @title Staking implementation based on WiCrypt reward distribution model @author tmortred @notice implemented main interactive functions for staking */ contract StakingV2 is Ownable, ReentrancyGuard { using SafeMath for uint256; using SafeERC20 for IERC20; struct UserInfo { uint256[] stakingIds; uint256 lastStakeTime; uint256 rewardDebt; } uint256 constant MAX_BPS = 10_000; uint256 constant WEEKS_OF_ONE_YEAR = 52; uint256 constant ONE_MONTH = 30 * 24 * 60 * 60; uint256 constant ONE_WEEK = 7 * 24 * 60 * 60; uint256 constant MAX_APY = 25_000; enum LOCK_PERIOD { NO_LOCK, THREE_MONTHS, SIX_MONTHS, NINE_MONTHS, TWELVE_MONTHS } address private _government; IERC20 public token; mapping (uint256 => uint256) public rewardDrop; address[] public stakers; mapping (address => UserInfo) public userInfo; mapping (uint256 => uint256) public deposits; mapping (uint256 => LOCK_PERIOD) public lockPeriod; mapping (uint256 => address) public depositor; mapping (uint256 => uint256) public stakeTime; mapping (address => uint256) public unclaimed; uint256 public lastRewardWeek; uint256 immutable public startBlockTime; uint256[] private scoreLevels; mapping(uint256 => uint256) public rewardMultiplier; uint256 public counter; uint256 public reductionPercent = 3_000; uint256 public lockTime = ONE_WEEK; // 7 days uint256 public actionLimit = 24 * 3600; // 1 day uint256 public maxActiveStake = 30; uint256 private totalStaked; uint256 public treasury; mapping (uint256 => uint256) private totalWeightedScore; modifier onlyGovernment { require(msg.sender == _government, "!government"); _; } event Deposit(address indexed user, uint256 stakingId, uint256 amount, LOCK_PERIOD lockPeriod); event Withdraw(address indexed user, uint256 amount, LOCK_PERIOD lockPeriod, uint256 rewardAmount); event ForceUnlock(address indexed user, uint256 stakingId, uint256 amount, LOCK_PERIOD lockPeriod, uint256 offset); event RewardClaim(address indexed user, uint256 amount); event ReductionPercentChanged(uint256 oldReduction, uint256 newReduction); event GovernanceTransferred(address oldGov, address newGov); event LockTimeChanged(uint256 oldLockTime, uint256 newLockTime); event ActionLimitChanged(uint256 oldActionLimit, uint256 newActionLimit); event MaxActiveStakeUpdated(uint256 oldMaxActiveStake, uint256 newMaxActiveStake); event RewardAdded(uint256 added, uint256 treasury); constructor(address _token, uint256 _rewardDrop) public { require(_rewardDrop != 0, "reward drop can't be zero"); token = IERC20(_token); startBlockTime = block.timestamp; rewardDrop[0] = _rewardDrop; _government = msg.sender; scoreLevels.push(0); scoreLevels.push(500); scoreLevels.push(1000); scoreLevels.push(2000); scoreLevels.push(4000); scoreLevels.push(8000); scoreLevels.push(16000); scoreLevels.push(32000); scoreLevels.push(50000); scoreLevels.push(100000); rewardMultiplier[scoreLevels[0]] = 1000; rewardMultiplier[scoreLevels[1]] = 1025; rewardMultiplier[scoreLevels[2]] = 1050; rewardMultiplier[scoreLevels[3]] = 1100; rewardMultiplier[scoreLevels[4]] = 1200; rewardMultiplier[scoreLevels[5]] = 1400; rewardMultiplier[scoreLevels[6]] = 1800; rewardMultiplier[scoreLevels[7]] = 2600; rewardMultiplier[scoreLevels[8]] = 3500; rewardMultiplier[scoreLevels[9]] = 6000; } /** @notice a user can stake several times but only without lock period. locked staking is possible only one time for one wallet. locked staking and standard staking can't be combined. @param _amount the amount of token to stake @param _lockPeriod enum value for representing lock period */ function stake(uint256 _amount, LOCK_PERIOD _lockPeriod) external nonReentrant { // check if stake action valid require(_amount > 0, "zero amount"); uint256 diff = block.timestamp.sub(userInfo[msg.sender].lastStakeTime); require(diff > actionLimit, "staking too much in short period is not valid"); uint256[] memory stakingIds = userInfo[msg.sender].stakingIds; if (stakingIds.length != 0) { require(lockPeriod[stakingIds[0]] == LOCK_PERIOD.NO_LOCK && _lockPeriod == LOCK_PERIOD.NO_LOCK, "multi-staking works only for standard vault"); require(stakingIds.length < maxActiveStake, "exceed maxActiveStake"); } // update state variables counter = counter.add(1); if (stakingIds.length == 0) { stakers.push(msg.sender); } deposits[counter] = _amount; totalStaked = totalStaked.add(_amount); depositor[counter] = msg.sender; stakeTime[counter] = block.timestamp; userInfo[msg.sender].lastStakeTime = block.timestamp; lockPeriod[counter] = _lockPeriod; userInfo[msg.sender].stakingIds.push(counter); // transfer tokens token.safeTransferFrom(msg.sender, address(this), _amount); emit Deposit(msg.sender, counter, _amount, _lockPeriod); } /** * @notice * withdraw tokens with reward gain * users can't unstake partial amount */ function unstake() external nonReentrant { // check if unstake action is valid require(userInfo[msg.sender].stakingIds.length > 0, "no active staking"); uint256 diff = block.timestamp.sub(userInfo[msg.sender].lastStakeTime); require(diff > lockTime, "can't unstake within minimum lock time"); uint256 stakingId = userInfo[msg.sender].stakingIds[0]; uint256 lock = uint256(lockPeriod[stakingId]).mul(3).mul(ONE_MONTH); require(diff > lock, "locked"); // calculate the reward amount uint256 reward = _pendingReward(msg.sender).sub(userInfo[msg.sender].rewardDebt); if (reward > treasury) { unclaimed[msg.sender] = reward.sub(treasury); reward = treasury; treasury = 0; } else { treasury = treasury.sub(reward); } // transfer tokens to the msg.sender uint256 stakeAmount = _getTotalStaked(msg.sender); token.safeTransfer(msg.sender, stakeAmount.add(reward)); // update the state variables totalStaked = totalStaked.sub(stakeAmount); delete userInfo[msg.sender]; for (uint i = 0; i < stakers.length; i++) { if (stakers[i] == msg.sender) { stakers[i] = stakers[stakers.length - 1]; stakers.pop(); break; } } emit Withdraw(msg.sender, stakeAmount, lockPeriod[stakingId], reward); } /** * @notice * claim reward accumulated so far * @dev * claimed reward amount is reflected when next claim reward or standard unstake action */ function claimReward() external { uint256 claimed; if (unclaimed[msg.sender] > 0) { require(unclaimed[msg.sender] <= treasury, "insufficient"); token.safeTransfer(msg.sender, unclaimed[msg.sender]); claimed = unclaimed[msg.sender]; delete unclaimed[msg.sender]; } else { uint256 reward = _pendingReward(msg.sender).sub(userInfo[msg.sender].rewardDebt); require(reward > 0, "reward amount is zero"); if (reward >= treasury) { reward = treasury; treasury = 0; } else { treasury = treasury.sub(reward); } token.safeTransfer(msg.sender, reward); claimed = reward; userInfo[msg.sender].rewardDebt = userInfo[msg.sender].rewardDebt.add(reward); } emit RewardClaim(msg.sender, claimed); } /** * @notice * a user can unstake before lock time ends but original fund is * reducted by up to 30 percent propertional to the end of lockup * @dev can't call this function when lockup released * @param stakingId staking id to unlock */ function forceUnlock(uint256 stakingId) external nonReentrant { // check if it is valid require(msg.sender == depositor[stakingId], "!depositor"); uint256 diff = block.timestamp.sub(stakeTime[stakingId]); require(diff > lockTime, "can't unstake within minimum lock time"); uint256 lock = uint256(lockPeriod[stakingId]).mul(3).mul(ONE_MONTH); require(diff < lock, "unlocked status"); uint256 offset = lock.sub(diff); // deposits * 30% * offset / lock uint256 reduction = deposits[stakingId].mul(reductionPercent).div(MAX_BPS).mul(offset).div(lock); token.safeTransfer(msg.sender, deposits[stakingId].sub(reduction)); emit ForceUnlock(msg.sender, stakingId, deposits[stakingId], lockPeriod[stakingId], offset); // update the state variables totalStaked = totalStaked.sub(deposits[stakingId]); deposits[stakingId] = 0; delete userInfo[msg.sender]; for (uint i = 0; i < stakers.length; i++) { if (stakers[i] == msg.sender) { stakers[i] = stakers[stakers.length - 1]; stakers.pop(); break; } } } /** * @notice * reflect the total weighted score calculated from the external script(off-chain) to the contract. * this function supposed to be called every week. * only goverment can call this function * @dev * in the case of missing some weeks by accident, set the same totalWeightedScore as current week * @param _totalWeightedScore total weighted score */ function updatePool(uint256 _totalWeightedScore, uint256 weekNumber) external onlyGovernment { require(weekNumber > lastRewardWeek, "invalid call"); for (uint256 i = lastRewardWeek + 1; i <= weekNumber; i++) { rewardDrop[i] = rewardDrop[i-1].sub(rewardDrop[i-1].div(100)); totalWeightedScore[i] = _totalWeightedScore; } lastRewardWeek = weekNumber; } ////////////////////////////////////// //// View functions //// ////////////////////////////////////// /** * @notice * apy value from the staking logic model * @dev can't be over `MAX_APY` * @return _apy annual percentage yield */ function apy() external view returns (uint256) { uint256 current = block.timestamp.sub(startBlockTime).div(ONE_WEEK); uint256 _apy; if (totalStaked == 0 || current == 0) { _apy = MAX_APY; } else { _apy = rewardDrop[current - 1].mul(WEEKS_OF_ONE_YEAR).mul(MAX_BPS).div(totalStaked); } if (_apy > MAX_APY) _apy = MAX_APY; return _apy; } function getLengthOfStakers() external view returns (uint256) { return stakers.length; } function getTotalStaked() external view returns (uint256) { return totalStaked; } function getTotalStaked(address user) external view returns (uint256) { return _getTotalStaked(user); } function getStakingIds(address user) external view returns (uint256[] memory) { return userInfo[user].stakingIds; } function getStakingInfo(uint256 stakingId) external view returns (address, uint256, uint256, LOCK_PERIOD) { return (depositor[stakingId], deposits[stakingId], stakeTime[stakingId], lockPeriod[stakingId]); } function getWeightedScore(address _user, uint256 weekNumber) external view returns (uint256) { return _getWeightedScore(_user, weekNumber); } function pendingReward(address _user) external view returns (uint256) { if (unclaimed[_user] > 0) { return unclaimed[_user]; } else { return _pendingReward(_user).sub(userInfo[_user].rewardDebt); } } function government() external view returns (address) { return _government; } ////////////////////////////// //// Admin functions //// ////////////////////////////// function addReward(uint256 amount) external onlyOwner { require(IERC20(token).balanceOf(msg.sender) >= amount, "not enough tokens to deliver"); IERC20(token).safeTransferFrom(msg.sender, address(this), amount); treasury = treasury.add(amount); emit RewardAdded(amount, treasury); } function setLockTime(uint256 _lockTime) external onlyOwner { require(_lockTime != 0, "!zero"); emit LockTimeChanged(lockTime, _lockTime); lockTime = _lockTime; } function setReductionPercent(uint256 _reductionPercent) external onlyOwner { require(_reductionPercent < MAX_BPS, "overflow"); emit ReductionPercentChanged(reductionPercent, _reductionPercent); reductionPercent = _reductionPercent; } function transferGovernance(address _newGov) external onlyOwner { require(_newGov != address(0), "new governance is the zero address"); emit GovernanceTransferred(_government, _newGov); _government = _newGov; } function setActionLimit(uint256 _actionLimit) external onlyOwner { require(_actionLimit != 0, "!zero"); emit ActionLimitChanged(actionLimit, _actionLimit); actionLimit = _actionLimit; } function setMaxActiveStake(uint256 _maxActiveStake) external onlyOwner { require(_maxActiveStake !=0, "!zero"); emit MaxActiveStakeUpdated(maxActiveStake, _maxActiveStake); maxActiveStake = _maxActiveStake; } ///////////////////////////////// //// Internal functions //// ///////////////////////////////// // get the total staked amount of user function _getTotalStaked(address user) internal view returns (uint256) { uint256 _totalStaked = 0; uint256[] memory stakingIds = userInfo[user].stakingIds; for (uint i = 0; i < stakingIds.length; i++) { uint256 stakingId = stakingIds[i]; _totalStaked = _totalStaked.add(deposits[stakingId]); } return _totalStaked; } function _pendingReward(address _user) internal view returns (uint256) { uint256 reward = 0; uint256 current = block.timestamp.sub(startBlockTime).div(ONE_WEEK); for (uint i = 0; i <= current; i++) { uint256 weightedScore = _getWeightedScore(_user, i); if (totalWeightedScore[i] != 0) { reward = reward.add(rewardDrop[i].mul(weightedScore).div(totalWeightedScore[i])); } } return reward; } function _getWeightedScore(address _user, uint256 weekNumber) internal view returns (uint256) { // calculate the basic score uint256 score = 0; uint256[] memory stakingIds = userInfo[_user].stakingIds; for (uint i = 0; i < stakingIds.length; i++) { uint256 stakingId = stakingIds[i]; uint256 _score = getScore(stakingId, weekNumber); score = score.add(_score); } // calculate the weighted score if (score == 0) return 0; uint256 weightedScore = 0; for (uint i = 0; i < scoreLevels.length; i++) { if (score > scoreLevels[i]) { weightedScore = score.mul(rewardMultiplier[scoreLevels[i]]); } else { return weightedScore; } } return weightedScore; } function getScore(uint256 stakingId, uint256 weekNumber) internal view returns (uint256) { uint256 score = 0; uint256 stakeWeek = stakeTime[stakingId].sub(startBlockTime).div(ONE_WEEK); if (stakeWeek > weekNumber) return 0; uint256 diff = weekNumber.sub(stakeWeek) > WEEKS_OF_ONE_YEAR ? WEEKS_OF_ONE_YEAR : weekNumber.sub(stakeWeek); uint256 lockScore = deposits[stakingId].mul(uint256(lockPeriod[stakingId])).mul(3).div(12); score = deposits[stakingId].mul(diff).div(WEEKS_OF_ONE_YEAR).add(lockScore); if (score > deposits[stakingId]) { score = deposits[stakingId].div(1e18); } else { score = score.div(1e18); } return score; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_rewardDrop","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldActionLimit","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newActionLimit","type":"uint256"}],"name":"ActionLimitChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"stakingId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"enum StakingV2.LOCK_PERIOD","name":"lockPeriod","type":"uint8"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"stakingId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"enum StakingV2.LOCK_PERIOD","name":"lockPeriod","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"offset","type":"uint256"}],"name":"ForceUnlock","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldGov","type":"address"},{"indexed":false,"internalType":"address","name":"newGov","type":"address"}],"name":"GovernanceTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldLockTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newLockTime","type":"uint256"}],"name":"LockTimeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldMaxActiveStake","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newMaxActiveStake","type":"uint256"}],"name":"MaxActiveStakeUpdated","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":"uint256","name":"oldReduction","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newReduction","type":"uint256"}],"name":"ReductionPercentChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"added","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"treasury","type":"uint256"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardClaim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"enum StakingV2.LOCK_PERIOD","name":"lockPeriod","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"rewardAmount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"actionLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"addReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"apy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"counter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"depositor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"deposits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakingId","type":"uint256"}],"name":"forceUnlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getLengthOfStakers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getStakingIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakingId","type":"uint256"}],"name":"getStakingInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"enum StakingV2.LOCK_PERIOD","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getTotalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"weekNumber","type":"uint256"}],"name":"getWeightedScore","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"government","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRewardWeek","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lockPeriod","outputs":[{"internalType":"enum StakingV2.LOCK_PERIOD","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxActiveStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"pendingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reductionPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardDrop","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_actionLimit","type":"uint256"}],"name":"setActionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lockTime","type":"uint256"}],"name":"setLockTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxActiveStake","type":"uint256"}],"name":"setMaxActiveStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reductionPercent","type":"uint256"}],"name":"setReductionPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"enum StakingV2.LOCK_PERIOD","name":"_lockPeriod","type":"uint8"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakeTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startBlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newGov","type":"address"}],"name":"transferGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"unclaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_totalWeightedScore","type":"uint256"},{"internalType":"uint256","name":"weekNumber","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"lastStakeTime","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a0604052610bb860105562093a8060115562015180601255601e6013553480156200002a57600080fd5b5060405162002f5138038062002f51833981810160405260408110156200005057600080fd5b50805160209091015160006200006562000418565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180558062000106576040805162461bcd60e51b815260206004820152601960248201527f7265776172642064726f702063616e2774206265207a65726f00000000000000604482015290519081900360640190fd5b600380546001600160a01b0384166001600160a01b0319918216179091554260805260046020527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec8290556002805490911633179055600d80546001818101835560008381527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb5928301819055835480830185556101f490840155835480830185556103e8908401819055845480840186556107d09085015584548084018655610fa09085015584548084018655611f409085015584548084018655613e809085015584548084018655617d00908501558454808401865561c3509085015584549283018555620186a0929093019190915582549192600e9282906200022857fe5b9060005260206000200154815260200190815260200160002081905550610401600e6000600d6001815481106200025b57fe5b906000526020600020015481526020019081526020016000208190555061041a600e6000600d6002815481106200028e57fe5b906000526020600020015481526020019081526020016000208190555061044c600e6000600d600381548110620002c157fe5b90600052602060002001548152602001908152602001600020819055506104b0600e6000600d600481548110620002f457fe5b9060005260206000200154815260200190815260200160002081905550610578600e6000600d6005815481106200032757fe5b9060005260206000200154815260200190815260200160002081905550610708600e6000600d6006815481106200035a57fe5b9060005260206000200154815260200190815260200160002081905550610a28600e6000600d6007815481106200038d57fe5b9060005260206000200154815260200190815260200160002081905550610dac600e6000600d600881548110620003c057fe5b9060005260206000200154815260200190815260200160002081905550611770600e6000600d600981548110620003f357fe5b906000526020600020015481526020019081526020016000208190555050506200041c565b3390565b608051612b0b62000446600039806107085280611026528061230352806125ef5250612b0b6000f3fe608060405234801561001057600080fd5b50600436106102535760003560e01c806396ed7f8911610146578063d7744849116100c3578063f0333f7c11610087578063f0333f7c14610658578063f2fde38b14610660578063f40f0f5214610686578063f639c501146106ac578063fc0c546a146106c9578063fd5e6dd1146106d157610253565b8063d774484914610573578063dd2a8b1114610590578063dea52884146105b6578063e9c4aa6a146105be578063ef27c7731461061a57610253565b8063b7bdeaa01161010a578063b7bdeaa014610503578063b88a802f1461050b578063bf410f1214610513578063bf968a1b14610530578063d38bfff41461054d57610253565b806396ed7f8914610481578063a500317f146104a4578063a7225ee6146104ac578063ae04d45d146104c9578063b02c43d0146104e657610253565b80632def6620116101d457806361bc221a1161019857806361bc221a1461044457806361d027b31461044c578063715018a61461045457806374de4ec41461045c5780638da5cb5b1461047957610253565b80632def66201461037b5780633bcfc4b814610383578063465e92441461038b578063505bd3da146103a857806354f05a58146103ce57610253565b8063193084541161021b57806319308454146102c75780631959a002146102e45780632672f526146103235780632ae57cb4146103475780632c4338a91461034f57610253565b80630917e776146102585780630a42f049146102725780630c18d4ce1461028f5780630d6680871461029757806310087fb11461029f575b600080fd5b6102606106ee565b60408051918252519081900360200190f35b6102606004803603602081101561028857600080fd5b50356106f4565b610260610706565b61026061072a565b6102c5600480360360408110156102b557600080fd5b508035906020013560ff16610730565b005b6102c5600480360360208110156102dd57600080fd5b5035610b0b565b61030a600480360360208110156102fa57600080fd5b50356001600160a01b0316610bf0565b6040805192835260208301919091528051918290030190f35b61032b610c0c565b604080516001600160a01b039092168252519081900360200190f35b610260610c1b565b6102606004803603604081101561036557600080fd5b506001600160a01b038135169060200135610c21565b6102c5610c36565b610260611016565b6102c5600480360360208110156103a157600080fd5b50356110b8565b610260600480360360208110156103be57600080fd5b50356001600160a01b0316611196565b6103f4600480360360208110156103e457600080fd5b50356001600160a01b03166111a8565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610430578181015183820152602001610418565b505050509050019250505060405180910390f35b610260611215565b61026061121b565b6102c5611221565b6102c56004803603602081101561047257600080fd5b50356112cd565b61032b611460565b6102c56004803603604081101561049757600080fd5b508035906020013561146f565b610260611578565b610260600480360360208110156104c257600080fd5b503561157e565b6102c5600480360360208110156104df57600080fd5b5035611590565b610260600480360360208110156104fc57600080fd5b503561166e565b610260611680565b6102c5611686565b6102606004803603602081101561052957600080fd5b5035611854565b6102c56004803603602081101561054657600080fd5b5035611866565b6102c56004803603602081101561056357600080fd5b50356001600160a01b0316611c12565b6102c56004803603602081101561058957600080fd5b5035611d23565b610260600480360360208110156105a657600080fd5b50356001600160a01b0316611e01565b610260611e0c565b6105db600480360360208110156105d457600080fd5b5035611e12565b60405180856001600160a01b0316815260200184815260200183815260200182600481111561060657fe5b815260200194505050505060405180910390f35b6106376004803603602081101561063057600080fd5b5035611e52565b6040518082600481111561064757fe5b815260200191505060405180910390f35b610260611e67565b6102c56004803603602081101561067657600080fd5b50356001600160a01b0316611e6d565b6102606004803603602081101561069c57600080fd5b50356001600160a01b0316611f6f565b61032b600480360360208110156106c257600080fd5b5035611fdc565b61032b611ff7565b61032b600480360360208110156106e757600080fd5b5035612006565b60145490565b600a6020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b60115481565b60026001541415610788576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600155816107cd576040805162461bcd60e51b815260206004820152600b60248201526a1e995c9bc8185b5bdd5b9d60aa1b604482015290519081900360640190fd5b336000908152600660205260408120600101546107eb90429061202d565b9050601254811161082d5760405162461bcd60e51b815260040180806020018281038252602d815260200180612a18602d913960400191505060405180910390fd5b3360009081526006602090815260409182902080548351818402810184019094528084526060939283018282801561088457602002820191906000526020600020905b815481526020019060010190808311610870575b50505050509050805160001461097257600060086000836000815181106108a757fe5b60209081029190910181015182528101919091526040016000205460ff1660048111156108d057fe5b1480156108e8575060008360048111156108e657fe5b145b6109235760405162461bcd60e51b815260040180806020018281038252602b81526020018061297f602b913960400191505060405180910390fd5b601354815110610972576040805162461bcd60e51b8152602060048201526015602482015274657863656564206d61784163746976655374616b6560581b604482015290519081900360640190fd5b600f5461098090600161208a565b600f5580516109cc57600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b031916331790555b600f5460009081526007602052604090208490556014546109ed908561208a565b601455600f8054600090815260096020908152604080832080546001600160a01b0319163390811790915584548452600a835281842042908190559084526006835281842060019081019190915593548352600890915290208054859260ff1990911690836004811115610a5d57fe5b02179055503360008181526006602090815260408220600f5481546001810183559184529190922090910155600354610aa3916001600160a01b039091169030876120e4565b336001600160a01b03167fa7db47d395930224de3f54139208b4a958fe3747c2ad1dee5a6624643a6def93600f54868660405180848152602001838152602001826004811115610aef57fe5b8152602001935050505060405180910390a25050600180555050565b610b13612144565b6001600160a01b0316610b24611460565b6001600160a01b031614610b6d576040805162461bcd60e51b81526020600482018190526024820152600080516020612a66833981519152604482015290519081900360640190fd5b6127108110610bae576040805162461bcd60e51b81526020600482015260086024820152676f766572666c6f7760c01b604482015290519081900360640190fd5b601054604080519182526020820183905280517fa936f8aebd1ed7db5d4a99967c875cffb2e81a287a812fb449ade9ad095a27859281900390910190a1601055565b6006602052600090815260409020600181015460029091015482565b6002546001600160a01b031690565b60135481565b6000610c2d8383612148565b90505b92915050565b60026001541415610c8e576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600260015533600090815260066020526040902054610ce8576040805162461bcd60e51b81526020600482015260116024820152706e6f20616374697665207374616b696e6760781b604482015290519081900360640190fd5b33600090815260066020526040812060010154610d0690429061202d565b90506011548111610d485760405162461bcd60e51b8152600401808060200182810382526026815260200180612a866026913960400191505060405180910390fd5b33600090815260066020526040812080548290610d6157fe5b600091825260208083209091015480835260089091526040822054909250610da19062278d0090610d9b9060039060ff1660048111158357fe5b90612299565b9050808311610de0576040805162461bcd60e51b81526020600482015260066024820152651b1bd8dad95960d21b604482015290519081900360640190fd5b336000818152600660205260408120600201549091610e099190610e03906122f2565b9061202d565b9050601554811115610e4457601554610e2390829061202d565b336000908152600b6020526040812091909155601580549190559050610e55565b601554610e51908261202d565b6015555b6000610e603361239f565b9050610e8333610e70838561208a565b6003546001600160a01b0316919061245e565b601454610e90908261202d565b60145533600090815260066020526040812090610ead8282612944565b60018201600090556002820160009055505060005b600554811015610f9e57336001600160a01b031660058281548110610ee357fe5b6000918252602090912001546001600160a01b03161415610f9657600580546000198101908110610f1057fe5b600091825260209091200154600580546001600160a01b039092169183908110610f3657fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506005805480610f6f57fe5b600082815260209020810160001990810180546001600160a01b0319169055019055610f9e565b600101610ec2565b5060008481526008602090815260409182902054915183815233927fc6c74a68f89b63353b582f75a2009daefef14ef389fbf7e30edb6141f414f02892859260ff9092169187918101836004811115610ff357fe5b8152602001828152602001935050505060405180910390a2505060018055505050565b60008061105062093a8061104a427f000000000000000000000000000000000000000000000000000000000000000061202d565b906124b5565b9050600060145460001480611063575081155b1561107157506161a86110a3565b60145460001983016000908152600460205260409020546110a0919061104a9061271090610d9b906034612299565b90505b6161a88111156110b257506161a85b91505090565b6110c0612144565b6001600160a01b03166110d1611460565b6001600160a01b03161461111a576040805162461bcd60e51b81526020600482018190526024820152600080516020612a66833981519152604482015290519081900360640190fd5b80611154576040805162461bcd60e51b8152602060048201526005602482015264217a65726f60d81b604482015290519081900360640190fd5b601354604080519182526020820183905280517feb3b9c8c724e26bdf0d1d65264d2781641e04c38f629e2a60f832de11e0981ab9281900390910190a1601355565b600b6020526000908152604090205481565b6001600160a01b03811660009081526006602090815260409182902080548351818402810184019094528084526060939283018282801561120857602002820191906000526020600020905b8154815260200190600101908083116111f4575b505050505090505b919050565b600f5481565b60155481565b611229612144565b6001600160a01b031661123a611460565b6001600160a01b031614611283576040805162461bcd60e51b81526020600482018190526024820152600080516020612a66833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6112d5612144565b6001600160a01b03166112e6611460565b6001600160a01b03161461132f576040805162461bcd60e51b81526020600482018190526024820152600080516020612a66833981519152604482015290519081900360640190fd5b600354604080516370a0823160e01b8152336004820152905183926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561137957600080fd5b505afa15801561138d573d6000803e3d6000fd5b505050506040513d60208110156113a357600080fd5b505110156113f8576040805162461bcd60e51b815260206004820152601c60248201527f6e6f7420656e6f75676820746f6b656e7320746f2064656c6976657200000000604482015290519081900360640190fd5b600354611410906001600160a01b03163330846120e4565b60155461141d908261208a565b601581905560408051838152602081019290925280517f6c07ee05dcf262f13abf9d87b846ee789d2f90fe991d495acd7d7fc109ee1f559281900390910190a150565b6000546001600160a01b031690565b6002546001600160a01b031633146114bc576040805162461bcd60e51b815260206004820152600b60248201526a0859dbdd995c9b9b595b9d60aa1b604482015290519081900360640190fd5b600c548111611501576040805162461bcd60e51b815260206004820152600c60248201526b1a5b9d985b1a590818d85b1b60a21b604482015290519081900360640190fd5b600c546001015b81811161157157600019810160009081526004602052604090205461154c906115329060646124b5565b60001983016000908152600460205260409020549061202d565b6000828152600460209081526040808320939093556016905220839055600101611508565b50600c5550565b600c5481565b60046020526000908152604090205481565b611598612144565b6001600160a01b03166115a9611460565b6001600160a01b0316146115f2576040805162461bcd60e51b81526020600482018190526024820152600080516020612a66833981519152604482015290519081900360640190fd5b8061162c576040805162461bcd60e51b8152602060048201526005602482015264217a65726f60d81b604482015290519081900360640190fd5b601154604080519182526020820183905280517f3dda0257c2dd400eb1edae8815f5516b5aa39797d44f3a2afe18d6e217cefa129281900390910190a1601155565b60076020526000908152604090205481565b60055490565b336000908152600b60205260408120541561173257601554336000908152600b602052604090205411156116f0576040805162461bcd60e51b815260206004820152600c60248201526b1a5b9cdd59999a58da595b9d60a21b604482015290519081900360640190fd5b336000818152600b6020526040902054600354611718926001600160a01b039091169161245e565b50336000908152600b60205260408120805491905561181b565b3360008181526006602052604081206002015490916117559190610e03906122f2565b9050600081116117a4576040805162461bcd60e51b815260206004820152601560248201527472657761726420616d6f756e74206973207a65726f60581b604482015290519081900360640190fd5b60155481106117bc57506015805460009091556117cd565b6015546117c9908261202d565b6015555b6003546117e4906001600160a01b0316338361245e565b336000908152600660205260409020600201549091508190611806908261208a565b33600090815260066020526040902060020155505b60408051828152905133917f75690555e75b04e280e646889defdcbefd8401507e5394d1173fd84290944c29919081900360200190a250565b600e6020526000908152604090205481565b600260015414156118be576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026001556000818152600960205260409020546001600160a01b0316331461191b576040805162461bcd60e51b815260206004820152600a60248201526910b232b837b9b4ba37b960b11b604482015290519081900360640190fd5b6000818152600a602052604081205461193590429061202d565b905060115481116119775760405162461bcd60e51b8152600401808060200182810382526026815260200180612a866026913960400191505060405180910390fd5b6000828152600860205260408120546119a29062278d0090610d9b9060039060ff1660048111158357fe5b90508082106119ea576040805162461bcd60e51b815260206004820152600f60248201526e756e6c6f636b65642073746174757360881b604482015290519081900360640190fd5b60006119f6828461202d565b90506000611a308361104a84610d9b61271061104a601054600760008e81526020019081526020016000205461229990919063ffffffff16565b600086815260076020526040902054909150611a52903390610e70908461202d565b600085815260076020908152604080832054600883529281902054815189815292830184905233937f193c235e82bbb5d7c0095e9889f515f8df0e6b596a1aab8770b5bdf6629b7a16938a93919260ff16918891908101836004811115611ab557fe5b815260200182815260200194505050505060405180910390a2600085815260076020526040902054601454611ae99161202d565b60145560008581526007602090815260408083208390553383526006909152812090611b158282612944565b60018201600090556002820160009055505060005b600554811015611c0657336001600160a01b031660058281548110611b4b57fe5b6000918252602090912001546001600160a01b03161415611bfe57600580546000198101908110611b7857fe5b600091825260209091200154600580546001600160a01b039092169183908110611b9e57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506005805480611bd757fe5b600082815260209020810160001990810180546001600160a01b0319169055019055611c06565b600101611b2a565b50506001805550505050565b611c1a612144565b6001600160a01b0316611c2b611460565b6001600160a01b031614611c74576040805162461bcd60e51b81526020600482018190526024820152600080516020612a66833981519152604482015290519081900360640190fd5b6001600160a01b038116611cb95760405162461bcd60e51b81526004018080602001828103825260228152602001806129f66022913960400191505060405180910390fd5b600254604080516001600160a01b039283168152918316602083015280517f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce809281900390910190a1600280546001600160a01b0319166001600160a01b0392909216919091179055565b611d2b612144565b6001600160a01b0316611d3c611460565b6001600160a01b031614611d85576040805162461bcd60e51b81526020600482018190526024820152600080516020612a66833981519152604482015290519081900360640190fd5b80611dbf576040805162461bcd60e51b8152602060048201526005602482015264217a65726f60d81b604482015290519081900360640190fd5b601254604080519182526020820183905280517f0a2e23a036a861637e8499c0ead82a7ea74f7ecccb9eacbafcf39daa666510099281900390910190a1601255565b6000610c308261239f565b60125481565b6000908152600960209081526040808320546007835281842054600a845282852054600890945291909320546001600160a01b0390931693909260ff1690565b60086020526000908152604090205460ff1681565b60105481565b611e75612144565b6001600160a01b0316611e86611460565b6001600160a01b031614611ecf576040805162461bcd60e51b81526020600482018190526024820152600080516020612a66833981519152604482015290519081900360640190fd5b6001600160a01b038116611f145760405162461bcd60e51b81526004018080602001828103825260268152602001806129aa6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166000908152600b602052604081205415611fac57506001600160a01b0381166000908152600b6020526040902054611210565b6001600160a01b038216600090815260066020526040902060020154611fd590610e03846122f2565b9050611210565b6009602052600090815260409020546001600160a01b031681565b6003546001600160a01b031681565b6005818154811061201357fe5b6000918252602090912001546001600160a01b0316905081565b600082821115612084576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082820183811015610c2d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261213e90859061251c565b50505050565b3390565b6001600160a01b0382166000908152600660209081526040808320805482518185028101850190935280835284936060939291908301828280156121ab57602002820191906000526020600020905b815481526020019060010190808311612197575b5050505050905060005b81518110156121fa5760008282815181106121cc57fe5b6020026020010151905060006121e282886125cd565b90506121ee858261208a565b945050506001016121b5565b508161220b57600092505050610c30565b6000805b600d5481101561228f57600d818154811061222657fe5b906000526020600020015484111561227c57612275600e6000600d848154811061224c57fe5b90600052602060002001548152602001908152602001600020548561229990919063ffffffff16565b9150612287565b509250610c30915050565b60010161220f565b5095945050505050565b6000826122a857506000610c30565b828202828482816122b557fe5b0414610c2d5760405162461bcd60e51b8152600401808060200182810382526021815260200180612a456021913960400191505060405180910390fd5b6000808061232762093a8061104a427f000000000000000000000000000000000000000000000000000000000000000061202d565b905060005b81811161239657600061233f8683612148565b6000838152601660205260409020549091501561238d5760008281526016602090815260408083205460049092529091205461238a916123839161104a9085612299565b859061208a565b93505b5060010161232c565b50909392505050565b6001600160a01b03811660009081526006602090815260408083208054825181850281018501909352808352849360609392919083018282801561240257602002820191906000526020600020905b8154815260200190600101908083116123ee575b5050505050905060005b815181101561239657600082828151811061242357fe5b6020026020010151905061245360076000838152602001908152602001600020548561208a90919063ffffffff16565b93505060010161240c565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526124b090849061251c565b505050565b600080821161250b576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161251457fe5b049392505050565b6060612571826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166127259092919063ffffffff16565b8051909150156124b05780806020019051602081101561259057600080fd5b50516124b05760405162461bcd60e51b815260040180806020018281038252602a815260200180612aac602a913960400191505060405180910390fd5b6000828152600a6020526040812054819081906126139062093a809061104a907f000000000000000000000000000000000000000000000000000000000000000061202d565b90508381111561262857600092505050610c30565b60006034612636868461202d565b1161264a57612645858361202d565b61264d565b60345b6000878152600860205260408120549192509061269590600c9061104a90600390610d9b9060ff16600481111561268057fe5b60008d81526007602052604090205490612299565b6000888152600760205260409020549091506126c49082906126be9060349061104a9087612299565b9061208a565b600088815260076020526040902054909450841115612705576000878152600760205260409020546126fe90670de0b6b3a76400006124b5565b935061271a565b61271784670de0b6b3a76400006124b5565b93505b509195945050505050565b6060612734848460008561273e565b90505b9392505050565b60608247101561277f5760405162461bcd60e51b81526004018080602001828103825260268152602001806129d06026913960400191505060405180910390fd5b6127888561289a565b6127d9576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106128185780518252601f1990920191602091820191016127f9565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461287a576040519150601f19603f3d011682016040523d82523d6000602084013e61287f565b606091505b509150915061288f8282866128a0565b979650505050505050565b3b151590565b606083156128af575081612737565b8251156128bf5782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156129095781810151838201526020016128f1565b50505050905090810190601f1680156129365780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50805460008255906000526020600020908101906129629190612965565b50565b5b8082111561297a5760008155600101612966565b509056fe6d756c74692d7374616b696e6720776f726b73206f6e6c7920666f72207374616e64617264207661756c744f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c6e657720676f7665726e616e636520697320746865207a65726f20616464726573737374616b696e6720746f6f206d75636820696e2073686f727420706572696f64206973206e6f742076616c6964536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657263616e277420756e7374616b652077697468696e206d696e696d756d206c6f636b2074696d655361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220e881649fd54c7618e40c0ff363f1e538c7698d7e6edb8e5558fbf78712cd508f64736f6c634300060c003300000000000000000000000082a0e6c02b91ec9f6ff943c0a933c03dbaa196890000000000000000000000000000000000000000000005d2c72a2ac16a300000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102535760003560e01c806396ed7f8911610146578063d7744849116100c3578063f0333f7c11610087578063f0333f7c14610658578063f2fde38b14610660578063f40f0f5214610686578063f639c501146106ac578063fc0c546a146106c9578063fd5e6dd1146106d157610253565b8063d774484914610573578063dd2a8b1114610590578063dea52884146105b6578063e9c4aa6a146105be578063ef27c7731461061a57610253565b8063b7bdeaa01161010a578063b7bdeaa014610503578063b88a802f1461050b578063bf410f1214610513578063bf968a1b14610530578063d38bfff41461054d57610253565b806396ed7f8914610481578063a500317f146104a4578063a7225ee6146104ac578063ae04d45d146104c9578063b02c43d0146104e657610253565b80632def6620116101d457806361bc221a1161019857806361bc221a1461044457806361d027b31461044c578063715018a61461045457806374de4ec41461045c5780638da5cb5b1461047957610253565b80632def66201461037b5780633bcfc4b814610383578063465e92441461038b578063505bd3da146103a857806354f05a58146103ce57610253565b8063193084541161021b57806319308454146102c75780631959a002146102e45780632672f526146103235780632ae57cb4146103475780632c4338a91461034f57610253565b80630917e776146102585780630a42f049146102725780630c18d4ce1461028f5780630d6680871461029757806310087fb11461029f575b600080fd5b6102606106ee565b60408051918252519081900360200190f35b6102606004803603602081101561028857600080fd5b50356106f4565b610260610706565b61026061072a565b6102c5600480360360408110156102b557600080fd5b508035906020013560ff16610730565b005b6102c5600480360360208110156102dd57600080fd5b5035610b0b565b61030a600480360360208110156102fa57600080fd5b50356001600160a01b0316610bf0565b6040805192835260208301919091528051918290030190f35b61032b610c0c565b604080516001600160a01b039092168252519081900360200190f35b610260610c1b565b6102606004803603604081101561036557600080fd5b506001600160a01b038135169060200135610c21565b6102c5610c36565b610260611016565b6102c5600480360360208110156103a157600080fd5b50356110b8565b610260600480360360208110156103be57600080fd5b50356001600160a01b0316611196565b6103f4600480360360208110156103e457600080fd5b50356001600160a01b03166111a8565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610430578181015183820152602001610418565b505050509050019250505060405180910390f35b610260611215565b61026061121b565b6102c5611221565b6102c56004803603602081101561047257600080fd5b50356112cd565b61032b611460565b6102c56004803603604081101561049757600080fd5b508035906020013561146f565b610260611578565b610260600480360360208110156104c257600080fd5b503561157e565b6102c5600480360360208110156104df57600080fd5b5035611590565b610260600480360360208110156104fc57600080fd5b503561166e565b610260611680565b6102c5611686565b6102606004803603602081101561052957600080fd5b5035611854565b6102c56004803603602081101561054657600080fd5b5035611866565b6102c56004803603602081101561056357600080fd5b50356001600160a01b0316611c12565b6102c56004803603602081101561058957600080fd5b5035611d23565b610260600480360360208110156105a657600080fd5b50356001600160a01b0316611e01565b610260611e0c565b6105db600480360360208110156105d457600080fd5b5035611e12565b60405180856001600160a01b0316815260200184815260200183815260200182600481111561060657fe5b815260200194505050505060405180910390f35b6106376004803603602081101561063057600080fd5b5035611e52565b6040518082600481111561064757fe5b815260200191505060405180910390f35b610260611e67565b6102c56004803603602081101561067657600080fd5b50356001600160a01b0316611e6d565b6102606004803603602081101561069c57600080fd5b50356001600160a01b0316611f6f565b61032b600480360360208110156106c257600080fd5b5035611fdc565b61032b611ff7565b61032b600480360360208110156106e757600080fd5b5035612006565b60145490565b600a6020526000908152604090205481565b7f00000000000000000000000000000000000000000000000000000000625c4ff181565b60115481565b60026001541415610788576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600155816107cd576040805162461bcd60e51b815260206004820152600b60248201526a1e995c9bc8185b5bdd5b9d60aa1b604482015290519081900360640190fd5b336000908152600660205260408120600101546107eb90429061202d565b9050601254811161082d5760405162461bcd60e51b815260040180806020018281038252602d815260200180612a18602d913960400191505060405180910390fd5b3360009081526006602090815260409182902080548351818402810184019094528084526060939283018282801561088457602002820191906000526020600020905b815481526020019060010190808311610870575b50505050509050805160001461097257600060086000836000815181106108a757fe5b60209081029190910181015182528101919091526040016000205460ff1660048111156108d057fe5b1480156108e8575060008360048111156108e657fe5b145b6109235760405162461bcd60e51b815260040180806020018281038252602b81526020018061297f602b913960400191505060405180910390fd5b601354815110610972576040805162461bcd60e51b8152602060048201526015602482015274657863656564206d61784163746976655374616b6560581b604482015290519081900360640190fd5b600f5461098090600161208a565b600f5580516109cc57600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b031916331790555b600f5460009081526007602052604090208490556014546109ed908561208a565b601455600f8054600090815260096020908152604080832080546001600160a01b0319163390811790915584548452600a835281842042908190559084526006835281842060019081019190915593548352600890915290208054859260ff1990911690836004811115610a5d57fe5b02179055503360008181526006602090815260408220600f5481546001810183559184529190922090910155600354610aa3916001600160a01b039091169030876120e4565b336001600160a01b03167fa7db47d395930224de3f54139208b4a958fe3747c2ad1dee5a6624643a6def93600f54868660405180848152602001838152602001826004811115610aef57fe5b8152602001935050505060405180910390a25050600180555050565b610b13612144565b6001600160a01b0316610b24611460565b6001600160a01b031614610b6d576040805162461bcd60e51b81526020600482018190526024820152600080516020612a66833981519152604482015290519081900360640190fd5b6127108110610bae576040805162461bcd60e51b81526020600482015260086024820152676f766572666c6f7760c01b604482015290519081900360640190fd5b601054604080519182526020820183905280517fa936f8aebd1ed7db5d4a99967c875cffb2e81a287a812fb449ade9ad095a27859281900390910190a1601055565b6006602052600090815260409020600181015460029091015482565b6002546001600160a01b031690565b60135481565b6000610c2d8383612148565b90505b92915050565b60026001541415610c8e576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600260015533600090815260066020526040902054610ce8576040805162461bcd60e51b81526020600482015260116024820152706e6f20616374697665207374616b696e6760781b604482015290519081900360640190fd5b33600090815260066020526040812060010154610d0690429061202d565b90506011548111610d485760405162461bcd60e51b8152600401808060200182810382526026815260200180612a866026913960400191505060405180910390fd5b33600090815260066020526040812080548290610d6157fe5b600091825260208083209091015480835260089091526040822054909250610da19062278d0090610d9b9060039060ff1660048111158357fe5b90612299565b9050808311610de0576040805162461bcd60e51b81526020600482015260066024820152651b1bd8dad95960d21b604482015290519081900360640190fd5b336000818152600660205260408120600201549091610e099190610e03906122f2565b9061202d565b9050601554811115610e4457601554610e2390829061202d565b336000908152600b6020526040812091909155601580549190559050610e55565b601554610e51908261202d565b6015555b6000610e603361239f565b9050610e8333610e70838561208a565b6003546001600160a01b0316919061245e565b601454610e90908261202d565b60145533600090815260066020526040812090610ead8282612944565b60018201600090556002820160009055505060005b600554811015610f9e57336001600160a01b031660058281548110610ee357fe5b6000918252602090912001546001600160a01b03161415610f9657600580546000198101908110610f1057fe5b600091825260209091200154600580546001600160a01b039092169183908110610f3657fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506005805480610f6f57fe5b600082815260209020810160001990810180546001600160a01b0319169055019055610f9e565b600101610ec2565b5060008481526008602090815260409182902054915183815233927fc6c74a68f89b63353b582f75a2009daefef14ef389fbf7e30edb6141f414f02892859260ff9092169187918101836004811115610ff357fe5b8152602001828152602001935050505060405180910390a2505060018055505050565b60008061105062093a8061104a427f00000000000000000000000000000000000000000000000000000000625c4ff161202d565b906124b5565b9050600060145460001480611063575081155b1561107157506161a86110a3565b60145460001983016000908152600460205260409020546110a0919061104a9061271090610d9b906034612299565b90505b6161a88111156110b257506161a85b91505090565b6110c0612144565b6001600160a01b03166110d1611460565b6001600160a01b03161461111a576040805162461bcd60e51b81526020600482018190526024820152600080516020612a66833981519152604482015290519081900360640190fd5b80611154576040805162461bcd60e51b8152602060048201526005602482015264217a65726f60d81b604482015290519081900360640190fd5b601354604080519182526020820183905280517feb3b9c8c724e26bdf0d1d65264d2781641e04c38f629e2a60f832de11e0981ab9281900390910190a1601355565b600b6020526000908152604090205481565b6001600160a01b03811660009081526006602090815260409182902080548351818402810184019094528084526060939283018282801561120857602002820191906000526020600020905b8154815260200190600101908083116111f4575b505050505090505b919050565b600f5481565b60155481565b611229612144565b6001600160a01b031661123a611460565b6001600160a01b031614611283576040805162461bcd60e51b81526020600482018190526024820152600080516020612a66833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6112d5612144565b6001600160a01b03166112e6611460565b6001600160a01b03161461132f576040805162461bcd60e51b81526020600482018190526024820152600080516020612a66833981519152604482015290519081900360640190fd5b600354604080516370a0823160e01b8152336004820152905183926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561137957600080fd5b505afa15801561138d573d6000803e3d6000fd5b505050506040513d60208110156113a357600080fd5b505110156113f8576040805162461bcd60e51b815260206004820152601c60248201527f6e6f7420656e6f75676820746f6b656e7320746f2064656c6976657200000000604482015290519081900360640190fd5b600354611410906001600160a01b03163330846120e4565b60155461141d908261208a565b601581905560408051838152602081019290925280517f6c07ee05dcf262f13abf9d87b846ee789d2f90fe991d495acd7d7fc109ee1f559281900390910190a150565b6000546001600160a01b031690565b6002546001600160a01b031633146114bc576040805162461bcd60e51b815260206004820152600b60248201526a0859dbdd995c9b9b595b9d60aa1b604482015290519081900360640190fd5b600c548111611501576040805162461bcd60e51b815260206004820152600c60248201526b1a5b9d985b1a590818d85b1b60a21b604482015290519081900360640190fd5b600c546001015b81811161157157600019810160009081526004602052604090205461154c906115329060646124b5565b60001983016000908152600460205260409020549061202d565b6000828152600460209081526040808320939093556016905220839055600101611508565b50600c5550565b600c5481565b60046020526000908152604090205481565b611598612144565b6001600160a01b03166115a9611460565b6001600160a01b0316146115f2576040805162461bcd60e51b81526020600482018190526024820152600080516020612a66833981519152604482015290519081900360640190fd5b8061162c576040805162461bcd60e51b8152602060048201526005602482015264217a65726f60d81b604482015290519081900360640190fd5b601154604080519182526020820183905280517f3dda0257c2dd400eb1edae8815f5516b5aa39797d44f3a2afe18d6e217cefa129281900390910190a1601155565b60076020526000908152604090205481565b60055490565b336000908152600b60205260408120541561173257601554336000908152600b602052604090205411156116f0576040805162461bcd60e51b815260206004820152600c60248201526b1a5b9cdd59999a58da595b9d60a21b604482015290519081900360640190fd5b336000818152600b6020526040902054600354611718926001600160a01b039091169161245e565b50336000908152600b60205260408120805491905561181b565b3360008181526006602052604081206002015490916117559190610e03906122f2565b9050600081116117a4576040805162461bcd60e51b815260206004820152601560248201527472657761726420616d6f756e74206973207a65726f60581b604482015290519081900360640190fd5b60155481106117bc57506015805460009091556117cd565b6015546117c9908261202d565b6015555b6003546117e4906001600160a01b0316338361245e565b336000908152600660205260409020600201549091508190611806908261208a565b33600090815260066020526040902060020155505b60408051828152905133917f75690555e75b04e280e646889defdcbefd8401507e5394d1173fd84290944c29919081900360200190a250565b600e6020526000908152604090205481565b600260015414156118be576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026001556000818152600960205260409020546001600160a01b0316331461191b576040805162461bcd60e51b815260206004820152600a60248201526910b232b837b9b4ba37b960b11b604482015290519081900360640190fd5b6000818152600a602052604081205461193590429061202d565b905060115481116119775760405162461bcd60e51b8152600401808060200182810382526026815260200180612a866026913960400191505060405180910390fd5b6000828152600860205260408120546119a29062278d0090610d9b9060039060ff1660048111158357fe5b90508082106119ea576040805162461bcd60e51b815260206004820152600f60248201526e756e6c6f636b65642073746174757360881b604482015290519081900360640190fd5b60006119f6828461202d565b90506000611a308361104a84610d9b61271061104a601054600760008e81526020019081526020016000205461229990919063ffffffff16565b600086815260076020526040902054909150611a52903390610e70908461202d565b600085815260076020908152604080832054600883529281902054815189815292830184905233937f193c235e82bbb5d7c0095e9889f515f8df0e6b596a1aab8770b5bdf6629b7a16938a93919260ff16918891908101836004811115611ab557fe5b815260200182815260200194505050505060405180910390a2600085815260076020526040902054601454611ae99161202d565b60145560008581526007602090815260408083208390553383526006909152812090611b158282612944565b60018201600090556002820160009055505060005b600554811015611c0657336001600160a01b031660058281548110611b4b57fe5b6000918252602090912001546001600160a01b03161415611bfe57600580546000198101908110611b7857fe5b600091825260209091200154600580546001600160a01b039092169183908110611b9e57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506005805480611bd757fe5b600082815260209020810160001990810180546001600160a01b0319169055019055611c06565b600101611b2a565b50506001805550505050565b611c1a612144565b6001600160a01b0316611c2b611460565b6001600160a01b031614611c74576040805162461bcd60e51b81526020600482018190526024820152600080516020612a66833981519152604482015290519081900360640190fd5b6001600160a01b038116611cb95760405162461bcd60e51b81526004018080602001828103825260228152602001806129f66022913960400191505060405180910390fd5b600254604080516001600160a01b039283168152918316602083015280517f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce809281900390910190a1600280546001600160a01b0319166001600160a01b0392909216919091179055565b611d2b612144565b6001600160a01b0316611d3c611460565b6001600160a01b031614611d85576040805162461bcd60e51b81526020600482018190526024820152600080516020612a66833981519152604482015290519081900360640190fd5b80611dbf576040805162461bcd60e51b8152602060048201526005602482015264217a65726f60d81b604482015290519081900360640190fd5b601254604080519182526020820183905280517f0a2e23a036a861637e8499c0ead82a7ea74f7ecccb9eacbafcf39daa666510099281900390910190a1601255565b6000610c308261239f565b60125481565b6000908152600960209081526040808320546007835281842054600a845282852054600890945291909320546001600160a01b0390931693909260ff1690565b60086020526000908152604090205460ff1681565b60105481565b611e75612144565b6001600160a01b0316611e86611460565b6001600160a01b031614611ecf576040805162461bcd60e51b81526020600482018190526024820152600080516020612a66833981519152604482015290519081900360640190fd5b6001600160a01b038116611f145760405162461bcd60e51b81526004018080602001828103825260268152602001806129aa6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166000908152600b602052604081205415611fac57506001600160a01b0381166000908152600b6020526040902054611210565b6001600160a01b038216600090815260066020526040902060020154611fd590610e03846122f2565b9050611210565b6009602052600090815260409020546001600160a01b031681565b6003546001600160a01b031681565b6005818154811061201357fe5b6000918252602090912001546001600160a01b0316905081565b600082821115612084576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082820183811015610c2d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261213e90859061251c565b50505050565b3390565b6001600160a01b0382166000908152600660209081526040808320805482518185028101850190935280835284936060939291908301828280156121ab57602002820191906000526020600020905b815481526020019060010190808311612197575b5050505050905060005b81518110156121fa5760008282815181106121cc57fe5b6020026020010151905060006121e282886125cd565b90506121ee858261208a565b945050506001016121b5565b508161220b57600092505050610c30565b6000805b600d5481101561228f57600d818154811061222657fe5b906000526020600020015484111561227c57612275600e6000600d848154811061224c57fe5b90600052602060002001548152602001908152602001600020548561229990919063ffffffff16565b9150612287565b509250610c30915050565b60010161220f565b5095945050505050565b6000826122a857506000610c30565b828202828482816122b557fe5b0414610c2d5760405162461bcd60e51b8152600401808060200182810382526021815260200180612a456021913960400191505060405180910390fd5b6000808061232762093a8061104a427f00000000000000000000000000000000000000000000000000000000625c4ff161202d565b905060005b81811161239657600061233f8683612148565b6000838152601660205260409020549091501561238d5760008281526016602090815260408083205460049092529091205461238a916123839161104a9085612299565b859061208a565b93505b5060010161232c565b50909392505050565b6001600160a01b03811660009081526006602090815260408083208054825181850281018501909352808352849360609392919083018282801561240257602002820191906000526020600020905b8154815260200190600101908083116123ee575b5050505050905060005b815181101561239657600082828151811061242357fe5b6020026020010151905061245360076000838152602001908152602001600020548561208a90919063ffffffff16565b93505060010161240c565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526124b090849061251c565b505050565b600080821161250b576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161251457fe5b049392505050565b6060612571826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166127259092919063ffffffff16565b8051909150156124b05780806020019051602081101561259057600080fd5b50516124b05760405162461bcd60e51b815260040180806020018281038252602a815260200180612aac602a913960400191505060405180910390fd5b6000828152600a6020526040812054819081906126139062093a809061104a907f00000000000000000000000000000000000000000000000000000000625c4ff161202d565b90508381111561262857600092505050610c30565b60006034612636868461202d565b1161264a57612645858361202d565b61264d565b60345b6000878152600860205260408120549192509061269590600c9061104a90600390610d9b9060ff16600481111561268057fe5b60008d81526007602052604090205490612299565b6000888152600760205260409020549091506126c49082906126be9060349061104a9087612299565b9061208a565b600088815260076020526040902054909450841115612705576000878152600760205260409020546126fe90670de0b6b3a76400006124b5565b935061271a565b61271784670de0b6b3a76400006124b5565b93505b509195945050505050565b6060612734848460008561273e565b90505b9392505050565b60608247101561277f5760405162461bcd60e51b81526004018080602001828103825260268152602001806129d06026913960400191505060405180910390fd5b6127888561289a565b6127d9576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106128185780518252601f1990920191602091820191016127f9565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461287a576040519150601f19603f3d011682016040523d82523d6000602084013e61287f565b606091505b509150915061288f8282866128a0565b979650505050505050565b3b151590565b606083156128af575081612737565b8251156128bf5782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156129095781810151838201526020016128f1565b50505050905090810190601f1680156129365780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50805460008255906000526020600020908101906129629190612965565b50565b5b8082111561297a5760008155600101612966565b509056fe6d756c74692d7374616b696e6720776f726b73206f6e6c7920666f72207374616e64617264207661756c744f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c6e657720676f7665726e616e636520697320746865207a65726f20616464726573737374616b696e6720746f6f206d75636820696e2073686f727420706572696f64206973206e6f742076616c6964536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657263616e277420756e7374616b652077697468696e206d696e696d756d206c6f636b2074696d655361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220e881649fd54c7618e40c0ff363f1e538c7698d7e6edb8e5558fbf78712cd508f64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000082a0e6c02b91ec9f6ff943c0a933c03dbaa196890000000000000000000000000000000000000000000005d2c72a2ac16a300000
-----Decoded View---------------
Arg [0] : _token (address): 0x82a0E6c02b91eC9f6ff943C0A933c03dBaa19689
Arg [1] : _rewardDrop (uint256): 27500000000000000000000
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000082a0e6c02b91ec9f6ff943c0a933c03dbaa19689
Arg [1] : 0000000000000000000000000000000000000000000005d2c72a2ac16a300000
Deployed Bytecode Sourcemap
28749:15578:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39299:89;;;:::i;:::-;;;;;;;;;;;;;;;;29657:45;;;;;;;;;;;;;;;;-1:-1:-1;29657:45:0;;:::i;29793:39::-;;;:::i;30000:34::-;;;:::i;32541:1266::-;;;;;;;;;;;;;;;;-1:-1:-1;32541:1266:0;;;;;;;;;:::i;:::-;;40944:251;;;;;;;;;;;;;;;;-1:-1:-1;40944:251:0;;:::i;29453:45::-;;;;;;;;;;;;;;;;-1:-1:-1;29453:45:0;-1:-1:-1;;;;;29453:45:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;40252:85;;;:::i;:::-;;;;-1:-1:-1;;;;;40252:85:0;;;;;;;;;;;;;;30121:34;;;:::i;39860:149::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;39860:149:0;;;;;;;;:::i;33923:1368::-;;;:::i;38805:386::-;;;:::i;41644:226::-;;;;;;;;;;;;;;;;-1:-1:-1;41644:226:0;;:::i;29707:45::-;;;;;;;;;;;;;;;;-1:-1:-1;29707:45:0;-1:-1:-1;;;;;29707:45:0;;:::i;39511:123::-;;;;;;;;;;;;;;;;-1:-1:-1;39511:123:0;-1:-1:-1;;;;;39511:123:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29929:22;;;:::i;30192:23::-;;;:::i;16631:148::-;;;:::i;40447:306::-;;;;;;;;;;;;;;;;-1:-1:-1;40447:306:0;;:::i;15980:87::-;;;:::i;38120:395::-;;;;;;;;;;;;;;;;-1:-1:-1;38120:395:0;;;;;;;:::i;29759:29::-;;;:::i;29369:46::-;;;;;;;;;;;;;;;;-1:-1:-1;29369:46:0;;:::i;40759:179::-;;;;;;;;;;;;;;;;-1:-1:-1;40759:179:0;;:::i;29503:44::-;;;;;;;;;;;;;;;;-1:-1:-1;29503:44:0;;:::i;39197:96::-;;;:::i;35467:836::-;;;:::i;29873:51::-;;;;;;;;;;;;;;;;-1:-1:-1;29873:51:0;;:::i;36579:1136::-;;;;;;;;;;;;;;;;-1:-1:-1;36579:1136:0;;:::i;41201:228::-;;;;;;;;;;;;;;;;-1:-1:-1;41201:228:0;-1:-1:-1;;;;;41201:228:0;;:::i;41435:203::-;;;;;;;;;;;;;;;;-1:-1:-1;41435:203:0;;:::i;39394:111::-;;;;;;;;;;;;;;;;-1:-1:-1;39394:111:0;-1:-1:-1;;;;;39394:111:0;;:::i;30059:38::-;;;:::i;39640:214::-;;;;;;;;;;;;;;;;-1:-1:-1;39640:214:0;;:::i;:::-;;;;;-1:-1:-1;;;;;39640:214:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29552:50;;;;;;;;;;;;;;;;-1:-1:-1;29552:50:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;29956:39;;;:::i;16934:244::-;;;;;;;;;;;;;;;;-1:-1:-1;16934:244:0;-1:-1:-1;;;;;16934:244:0;;:::i;40015:231::-;;;;;;;;;;;;;;;;-1:-1:-1;40015:231:0;-1:-1:-1;;;;;40015:231:0;;:::i;29607:45::-;;;;;;;;;;;;;;;;-1:-1:-1;29607:45:0;;:::i;29345:19::-;;;:::i;29424:24::-;;;;;;;;;;;;;;;;-1:-1:-1;29424:24:0;;:::i;39299:89::-;39371:11;;39299:89;:::o;29657:45::-;;;;;;;;;;;;;:::o;29793:39::-;;;:::o;30000:34::-;;;;:::o;32541:1266::-;12806:1;13412:7;;:19;;13404:63;;;;;-1:-1:-1;;;13404:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12806:1;13545:7;:18;32671:11;32663:35:::1;;;::::0;;-1:-1:-1;;;32663:35:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;32663:35:0;;;;;;;;;;;;;::::1;;32749:10;32705:12;32740:20:::0;;;:8:::1;:20;::::0;;;;:34:::1;;::::0;32720:55:::1;::::0;:15:::1;::::0;:19:::1;:55::i;:::-;32705:70;;32797:11;;32790:4;:18;32782:76;;;;-1:-1:-1::0;;;32782:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32904:10;32895:20;::::0;;;:8:::1;:20;::::0;;;;;;;;32865:61;;;;;;::::1;::::0;;;;;;;;;;:27:::1;::::0;:61;;::::1;32895:20:::0;32865:61;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32937:10;:17;32958:1;32937:22;32933:264;;33007:19;32978:10;:25;32989:10;33000:1;32989:13;;;;;;;;;::::0;;::::1;::::0;;;;;;;32978:25;;;::::1;::::0;;;;;;-1:-1:-1;32978:25:0;;::::1;;:48;::::0;::::1;;;;;;;:86;;;;-1:-1:-1::0;33045:19:0::1;33030:11;:34;;;;;;;;;32978:86;32970:142;;;;-1:-1:-1::0;;;32970:142:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33149:14;;33129:10;:17;:34;33121:68;;;::::0;;-1:-1:-1;;;33121:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;33121:68:0;;;;;;;;;;;;;::::1;;33246:7;::::0;:14:::1;::::0;33258:1:::1;33246:11;:14::i;:::-;33236:7;:24:::0;33271:17;;33267:69:::1;;33304:7;:24:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;33304:24:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;33304:24:0::1;33317:10;33304:24;::::0;;33267:69:::1;33351:7;::::0;33342:17:::1;::::0;;;:8:::1;:17;::::0;;;;:27;;;33390:11:::1;::::0;:24:::1;::::0;33362:7;33390:15:::1;:24::i;:::-;33376:11;:38:::0;33431:7:::1;::::0;;33421:18:::1;::::0;;;:9:::1;:18;::::0;;;;;;;:31;;-1:-1:-1;;;;;;33421:31:0::1;33442:10;33421:31:::0;;::::1;::::0;;;33469:7;;33459:18;;:9:::1;:18:::0;;;;;33480:15:::1;33459:36:::0;;;;33502:20;;;:8:::1;:20:::0;;;;;33421:31;33502:34;;::::1;:52:::0;;;;33572:7;;33561:19;;:10:::1;:19:::0;;;;;:33;;33583:11;;-1:-1:-1;;33561:33:0;;::::1;::::0;33583:11;33561:33:::1;::::0;::::1;;;;;;;;::::0;;-1:-1:-1;33610:10:0::1;33601:20;::::0;;;:8:::1;:20;::::0;;;;;;33638:7:::1;::::0;33601:45;;::::1;::::0;::::1;::::0;;;;;;;;;;;::::1;::::0;33679:5:::1;::::0;:58:::1;::::0;-1:-1:-1;;;;;33679:5:0;;::::1;::::0;33722:4:::1;33729:7:::0;33679:22:::1;:58::i;:::-;33759:10;-1:-1:-1::0;;;;;33751:50:0::1;;33771:7;;33780;33789:11;33751:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;12762:1:0;13724:22;;-1:-1:-1;;32541:1266:0:o;40944:251::-;16211:12;:10;:12::i;:::-;-1:-1:-1;;;;;16200:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;16200:23:0;;16192:68;;;;;-1:-1:-1;;;16192:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16192:68:0;;;;;;;;;;;;;;;29000:6:::1;41034:17;:27;41026:48;;;::::0;;-1:-1:-1;;;41026:48:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;41026:48:0;;;;;;;;;;;;;::::1;;41110:16;::::0;41086:60:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;::::1;41153:16;:36:::0;40944:251::o;29453:45::-;;;;;;;;;;;;;;;;;;;;;:::o;40252:85::-;40320:11;;-1:-1:-1;;;;;40320:11:0;40252:85;:::o;30121:34::-;;;;:::o;39860:149::-;39944:7;39967:36;39985:5;39992:10;39967:17;:36::i;:::-;39960:43;;39860:149;;;;;:::o;33923:1368::-;12806:1;13412:7;;:19;;13404:63;;;;;-1:-1:-1;;;13404:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12806:1;13545:7;:18;34029:10:::1;34061:1;34020:20:::0;;;:8:::1;:20;::::0;;;;:38;34012:72:::1;;;::::0;;-1:-1:-1;;;34012:72:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;34012:72:0;;;;;;;;;;;;;::::1;;34135:10;34091:12;34126:20:::0;;;:8:::1;:20;::::0;;;;:34:::1;;::::0;34106:55:::1;::::0;:15:::1;::::0;:19:::1;:55::i;:::-;34091:70;;34183:8;;34176:4;:15;34168:66;;;;-1:-1:-1::0;;;34168:66:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34270:10;34241:17;34261:20:::0;;;:8:::1;:20;::::0;;;;:34;;34241:17;;34261:34:::1;;;;;::::0;;;::::1;::::0;;;;;::::1;::::0;34325:21;;;:10:::1;:21:::0;;;;;;;34261:34;;-1:-1:-1;34317:52:0::1;::::0;29084:17:::1;::::0;34317:37:::1;::::0;34352:1:::1;::::0;34325:21:::1;;34317:30;::::0;::::1;;:37:::0;:30:::1;;;:34:::0;::::1;:37::i;:52::-;34302:67;;34391:4;34384;:11;34376:30;;;::::0;;-1:-1:-1;;;34376:30:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;34376:30:0;;;;;;;;;;;;;::::1;;34512:10;34455:14;34503:20:::0;;;:8:::1;:20;::::0;;;;:31:::1;;::::0;34455:14;;34472:63:::1;::::0;34503:31;34472:26:::1;::::0;:14:::1;:26::i;:::-;:30:::0;::::1;:63::i;:::-;34455:80;;34555:8;;34546:6;:17;34542:185;;;34609:8;::::0;34598:20:::1;::::0;:6;;:10:::1;:20::i;:::-;34584:10;34574:21;::::0;;;:9:::1;:21;::::0;;;;:44;;;;34636:8:::1;::::0;;34653:12;;;34636:8;-1:-1:-1;34542:185:0::1;;;34699:8;::::0;:20:::1;::::0;34712:6;34699:12:::1;:20::i;:::-;34688:8;:31:::0;34542:185:::1;34781:19;34803:27;34819:10;34803:15;:27::i;:::-;34781:49:::0;-1:-1:-1;34837:55:0::1;34856:10;34868:23;34781:49:::0;34884:6;34868:15:::1;:23::i;:::-;34837:5;::::0;-1:-1:-1;;;;;34837:5:0::1;::::0;:55;:18:::1;:55::i;:::-;34950:11;::::0;:28:::1;::::0;34966:11;34950:15:::1;:28::i;:::-;34936:11;:42:::0;35001:10:::1;34992:20;::::0;;;:8:::1;:20;::::0;;;;;34985:27:::1;34992:20:::0;;34985:27:::1;:::i;:::-;;;;;;;;;;;;;;;35024:6;35019:189;35040:7;:14:::0;35036:18;::::1;35019:189;;;35088:10;-1:-1:-1::0;;;;;35074:24:0::1;:7;35082:1;35074:10;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;35074:10:0::1;:24;35070:131;;;35124:7;35132:14:::0;;-1:-1:-1;;35132:18:0;;;35124:27;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;35111:7:::1;:10:::0;;-1:-1:-1;;;;;35124:27:0;;::::1;::::0;35119:1;;35111:10;::::1;;;;;;;;;;;;;:40;;;;;-1:-1:-1::0;;;;;35111:40:0::1;;;;;-1:-1:-1::0;;;;;35111:40:0::1;;;;;;35162:7;:13;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;35162:13:0;;;;;-1:-1:-1;;;;;;35162:13:0::1;::::0;;;;;35186:5:::1;;35070:131;35056:3;;35019:189;;;-1:-1:-1::0;35255:21:0::1;::::0;;;:10:::1;:21;::::0;;;;;;;;;35221:64;;;;;35230:10:::1;::::0;35221:64:::1;::::0;35242:11;;35255:21:::1;::::0;;::::1;::::0;35278:6;;35221:64;::::1;35255:21:::0;35221:64:::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;12762:1:0;13724:22;;-1:-1:-1;;;33923:1368:0:o;38805:386::-;38843:7;;38877:49;29134:16;38877:35;:15;38897:14;38877:19;:35::i;:::-;:39;;:49::i;:::-;38859:67;;38933:12;38956:11;;38971:1;38956:16;:32;;;-1:-1:-1;38976:12:0;;38956:32;38952:175;;;-1:-1:-1;29182:6:0;38952:175;;;39107:11;;-1:-1:-1;;39054:11:0;;39043:23;;;;:10;:23;;;;;;:76;;39107:11;39043:59;;29000:6;;39043:46;;29048:2;39043:27;:46::i;:76::-;39036:83;;38952:175;29182:6;39137:4;:14;39133:34;;;-1:-1:-1;29182:6:0;39133:34;39181:4;-1:-1:-1;;38805:386:0;:::o;41644:226::-;16211:12;:10;:12::i;:::-;-1:-1:-1;;;;;16200:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;16200:23:0;;16192:68;;;;;-1:-1:-1;;;16192:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16192:68:0;;;;;;;;;;;;;;;41730:19;41722:37:::1;;;::::0;;-1:-1:-1;;;41722:37:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;41722:37:0;;;;;;;;;;;;;::::1;;41793:14;::::0;41771:54:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;::::1;41832:14;:32:::0;41644:226::o;29707:45::-;;;;;;;;;;;;;:::o;39511:123::-;-1:-1:-1;;;;;39603:14:0;;;;;;:8;:14;;;;;;;;;39596:32;;;;;;;;;;;;;;;;;39571:16;;39596:32;;;39603:14;39596:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39511:123;;;;:::o;29929:22::-;;;;:::o;30192:23::-;;;;:::o;16631:148::-;16211:12;:10;:12::i;:::-;-1:-1:-1;;;;;16200:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;16200:23:0;;16192:68;;;;;-1:-1:-1;;;16192:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16192:68:0;;;;;;;;;;;;;;;16738:1:::1;16722:6:::0;;16701:40:::1;::::0;-1:-1:-1;;;;;16722:6:0;;::::1;::::0;16701:40:::1;::::0;16738:1;;16701:40:::1;16769:1;16752:19:::0;;-1:-1:-1;;;;;;16752:19:0::1;::::0;;16631:148::o;40447:306::-;16211:12;:10;:12::i;:::-;-1:-1:-1;;;;;16200:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;16200:23:0;;16192:68;;;;;-1:-1:-1;;;16192:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16192:68:0;;;;;;;;;;;;;;;40523:5:::1;::::0;40516:35:::1;::::0;;-1:-1:-1;;;40516:35:0;;40540:10:::1;40516:35;::::0;::::1;::::0;;;40555:6;;-1:-1:-1;;;;;40523:5:0::1;::::0;40516:23:::1;::::0;:35;;;;;::::1;::::0;;;;;;;;40523:5;40516:35;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;40516:35:0;:45:::1;;40508:86;;;::::0;;-1:-1:-1;;;40508:86:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;40608:5;::::0;40601:65:::1;::::0;-1:-1:-1;;;;;40608:5:0::1;40632:10;40652:4;40659:6:::0;40601:30:::1;:65::i;:::-;40684:8;::::0;:20:::1;::::0;40697:6;40684:12:::1;:20::i;:::-;40673:8;:31:::0;;;40718:29:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;;;;;;;::::1;40447:306:::0;:::o;15980:87::-;16026:7;16053:6;-1:-1:-1;;;;;16053:6:0;15980:87;:::o;38120:395::-;30335:11;;-1:-1:-1;;;;;30335:11:0;30321:10;:25;30313:49;;;;;-1:-1:-1;;;30313:49:0;;;;;;;;;;;;-1:-1:-1;;;30313:49:0;;;;;;;;;;;;;;;38241:14:::1;;38228:10;:27;38220:52;;;::::0;;-1:-1:-1;;;38220:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;38220:52:0;;;;;;;;;;;;;::::1;;38302:14;::::0;38319:1:::1;38302:18;38285:189;38327:10;38322:1;:15;38285:189;;-1:-1:-1::0;;38400:3:0;;38389:15:::1;::::0;;;:10:::1;:15;::::0;;;;;38369:45:::1;::::0;38389:24:::1;::::0;38409:3:::1;38389:19;:24::i;:::-;-1:-1:-1::0;;38380:3:0;;38369:15:::1;::::0;;;:10:::1;:15;::::0;;;;;;:19:::1;:45::i;:::-;38353:13;::::0;;;:10:::1;:13;::::0;;;;;;;:61;;;;38423:18:::1;:21:::0;;;:43;;;38339:3:::1;;38285:189;;;-1:-1:-1::0;38482:14:0::1;:27:::0;-1:-1:-1;38120:395:0:o;29759:29::-;;;;:::o;29369:46::-;;;;;;;;;;;;;:::o;40759:179::-;16211:12;:10;:12::i;:::-;-1:-1:-1;;;;;16200:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;16200:23:0;;16192:68;;;;;-1:-1:-1;;;16192:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16192:68:0;;;;;;;;;;;;;;;40833:14;40825:32:::1;;;::::0;;-1:-1:-1;;;40825:32:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;40825:32:0;;;;;;;;;;;;;::::1;;40885:8;::::0;40869:36:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;::::1;40912:8;:20:::0;40759:179::o;29503:44::-;;;;;;;;;;;;;:::o;39197:96::-;39273:7;:14;39197:96;:::o;35467:836::-;35542:10;35506:15;35532:21;;;:9;:21;;;;;;:25;35528:720;;35601:8;;35586:10;35576:21;;;;:9;:21;;;;;;:33;;35568:58;;;;;-1:-1:-1;;;35568:58:0;;;;;;;;;;;;-1:-1:-1;;;35568:58:0;;;;;;;;;;;;;;;35654:10;35666:21;;;;:9;:21;;;;;;35635:5;;:53;;-1:-1:-1;;;;;35635:5:0;;;;:18;:53::i;:::-;-1:-1:-1;35717:10:0;35707:21;;;;:9;:21;;;;;;;35737:28;;;35528:720;;;35845:10;35788:14;35836:20;;;:8;:20;;;;;:31;;;35788:14;;35805:63;;35836:31;35805:26;;:14;:26::i;:63::-;35788:80;;35894:1;35885:6;:10;35877:44;;;;;-1:-1:-1;;;35877:44:0;;;;;;;;;;;;-1:-1:-1;;;35877:44:0;;;;;;;;;;;;;;;35946:8;;35936:6;:18;35932:143;;-1:-1:-1;35976:8:0;;;36006:1;35995:12;;;35932:143;;;36045:8;;:20;;36058:6;36045:12;:20::i;:::-;36034:8;:31;35932:143;36091:5;;:38;;-1:-1:-1;;;;;36091:5:0;36110:10;36122:6;36091:18;:38::i;:::-;36206:10;36197:20;;;;:8;:20;;;;;:31;;;36148:6;;-1:-1:-1;36148:6:0;;36197:43;;36148:6;36197:35;:43::i;:::-;36172:10;36163:20;;;;:8;:20;;;;;:31;;:77;-1:-1:-1;35528:720:0;36265:32;;;;;;;;36277:10;;36265:32;;;;;;;;;;35467:836;:::o;29873:51::-;;;;;;;;;;;;;:::o;36579:1136::-;12806:1;13412:7;;:19;;13404:63;;;;;-1:-1:-1;;;13404:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12806:1;13545:7;:18;36699:20:::1;::::0;;;:9:::1;:20;::::0;;;;;-1:-1:-1;;;;;36699:20:0::1;36685:10;:34;36677:57;;;::::0;;-1:-1:-1;;;36677:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;36677:57:0;;;;;;;;;;;;;::::1;;36741:12;36776:20:::0;;;:9:::1;:20;::::0;;;;;36756:41:::1;::::0;:15:::1;::::0;:19:::1;:41::i;:::-;36741:56;;36819:8;;36812:4;:15;36804:66;;;;-1:-1:-1::0;;;36804:66:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36879:12;36902:21:::0;;;:10:::1;:21;::::0;;;;;36894:52:::1;::::0;29084:17:::1;::::0;36894:37:::1;::::0;36929:1:::1;::::0;36902:21:::1;;36894:30;::::0;::::1;;:37:::0;:30:::1;;:52;36879:67;;36968:4;36961;:11;36953:39;;;::::0;;-1:-1:-1;;;36953:39:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;36953:39:0;;;;;;;;;;;;;::::1;;36999:14;37016;:4:::0;37025;37016:8:::1;:14::i;:::-;36999:31;;37077:17;37097:76;37168:4;37097:66;37156:6;37097:54;29000:6;37097:41;37121:16;;37097:8;:19;37106:9;37097:19;;;;;;;;;;;;:23;;:41;;;;:::i;:76::-;37217:19;::::0;;;:8:::1;:19;::::0;;;;;37077:96;;-1:-1:-1;37186:66:0::1;::::0;37205:10:::1;::::0;37217:34:::1;::::0;37077:96;37217:23:::1;:34::i;37186:66::-;37305:19;::::0;;;:8:::1;:19;::::0;;;;;;;;37326:10:::1;:21:::0;;;;;;;37270:86;;;;;;;::::1;::::0;;;37282:10:::1;::::0;37270:86:::1;::::0;37294:9;;37305:19;;37326:21:::1;;::::0;37349:6;;37270:86;;;37326:21;37270:86:::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;37430:19;::::0;;;:8:::1;:19;::::0;;;;;37414:11:::1;::::0;:36:::1;::::0;:15:::1;:36::i;:::-;37400:11;:50:::0;37479:1:::1;37457:19:::0;;;:8:::1;:19;::::0;;;;;;;:23;;;37503:10:::1;37494:20:::0;;:8:::1;:20:::0;;;;;;37487:27:::1;37494:20:::0;37479:1;37487:27:::1;:::i;:::-;;;;;;;;;;;;;;;37526:6;37521:189;37542:7;:14:::0;37538:18;::::1;37521:189;;;37590:10;-1:-1:-1::0;;;;;37576:24:0::1;:7;37584:1;37576:10;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;37576:10:0::1;:24;37572:131;;;37626:7;37634:14:::0;;-1:-1:-1;;37634:18:0;;;37626:27;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;37613:7:::1;:10:::0;;-1:-1:-1;;;;;37626:27:0;;::::1;::::0;37621:1;;37613:10;::::1;;;;;;;;;;;;;:40;;;;;-1:-1:-1::0;;;;;37613:40:0::1;;;;;-1:-1:-1::0;;;;;37613:40:0::1;;;;;;37664:7;:13;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;37664:13:0;;;;;-1:-1:-1;;;;;;37664:13:0::1;::::0;;;;;37688:5:::1;;37572:131;37558:3;;37521:189;;;-1:-1:-1::0;;12762:1:0;13724:22;;-1:-1:-1;;;;36579:1136:0:o;41201:228::-;16211:12;:10;:12::i;:::-;-1:-1:-1;;;;;16200:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;16200:23:0;;16192:68;;;;;-1:-1:-1;;;16192:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16192:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;41280:21:0;::::1;41272:68;;;;-1:-1:-1::0;;;41272:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41374:11;::::0;41352:43:::1;::::0;;-1:-1:-1;;;;;41374:11:0;;::::1;41352:43:::0;;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;::::1;41402:11;:21:::0;;-1:-1:-1;;;;;;41402:21:0::1;-1:-1:-1::0;;;;;41402:21:0;;;::::1;::::0;;;::::1;::::0;;41201:228::o;41435:203::-;16211:12;:10;:12::i;:::-;-1:-1:-1;;;;;16200:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;16200:23:0;;16192:68;;;;;-1:-1:-1;;;16192:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16192:68:0;;;;;;;;;;;;;;;41515:17;41507:35:::1;;;::::0;;-1:-1:-1;;;41507:35:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;41507:35:0;;;;;;;;;;;;;::::1;;41573:11;::::0;41554:45:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;::::1;41606:11;:26:::0;41435:203::o;39394:111::-;39455:7;39478:21;39494:4;39478:15;:21::i;30059:38::-;;;;:::o;39640:214::-;39706:7;39761:20;;;:9;:20;;;;;;;;;39783:8;:19;;;;;;39804:9;:20;;;;;;39826:10;:21;;;;;;;;-1:-1:-1;;;;;39761:20:0;;;;39783:19;;39826:21;;;39640:214::o;29552:50::-;;;;;;;;;;;;;;;:::o;29956:39::-;;;;:::o;16934:244::-;16211:12;:10;:12::i;:::-;-1:-1:-1;;;;;16200:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;16200:23:0;;16192:68;;;;;-1:-1:-1;;;16192:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16192:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;17023:22:0;::::1;17015:73;;;;-1:-1:-1::0;;;17015:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17125:6;::::0;;17104:38:::1;::::0;-1:-1:-1;;;;;17104:38:0;;::::1;::::0;17125:6;::::1;::::0;17104:38:::1;::::0;::::1;17153:6;:17:::0;;-1:-1:-1;;;;;;17153:17:0::1;-1:-1:-1::0;;;;;17153:17:0;;;::::1;::::0;;;::::1;::::0;;16934:244::o;40015:231::-;-1:-1:-1;;;;;40096:16:0;;40076:7;40096:16;;;:9;:16;;;;;;:20;40092:149;;-1:-1:-1;;;;;;40134:16:0;;;;;;:9;:16;;;;;;40127:23;;40092:149;-1:-1:-1;;;;;40206:15:0;;;;;;:8;:15;;;;;:26;;;40180:53;;:21;40215:5;40180:14;:21::i;:53::-;40173:60;;;;29607:45;;;;;;;;;;;;-1:-1:-1;;;;;29607:45:0;;:::o;29345:19::-;;;-1:-1:-1;;;;;29345:19:0;;:::o;29424:24::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29424:24:0;;-1:-1:-1;29424:24:0;:::o;20503:158::-;20561:7;20594:1;20589;:6;;20581:49;;;;;-1:-1:-1;;;20581:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20648:5:0;;;20503:158::o;20041:179::-;20099:7;20131:5;;;20155:6;;;;20147:46;;;;;-1:-1:-1;;;20147:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;25618:205;25746:68;;;-1:-1:-1;;;;;25746:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25746:68:0;-1:-1:-1;;;25746:68:0;;;25719:96;;25739:5;;25719:19;:96::i;:::-;25618:205;;;;:::o;14456:106::-;14544:10;14456:106;:::o;42850:771::-;-1:-1:-1;;;;;43039:15:0;;42935:7;43039:15;;;:8;:15;;;;;;;;43009:56;;;;;;;;;;;;;;;;;42935:7;;43009:27;;:56;43039:15;43009:56;;;43039:15;43009:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43077:6;43072:186;43093:10;:17;43089:1;:21;43072:186;;;43126:17;43146:10;43157:1;43146:13;;;;;;;;;;;;;;43126:33;;43168:14;43185:31;43194:9;43205:10;43185:8;:31::i;:::-;43168:48;-1:-1:-1;43233:17:0;:5;43168:48;43233:9;:17::i;:::-;43225:25;-1:-1:-1;;;43112:3:0;;43072:186;;;-1:-1:-1;43307:10:0;43303:24;;43326:1;43319:8;;;;;;43303:24;43336:21;43373:6;43368:217;43389:11;:18;43385:22;;43368:217;;;43435:11;43447:1;43435:14;;;;;;;;;;;;;;;;43427:5;:22;43423:155;;;43478:43;43488:16;:32;43505:11;43517:1;43505:14;;;;;;;;;;;;;;;;43488:32;;;;;;;;;;;;43478:5;:9;;:43;;;;:::i;:::-;43462:59;;43423:155;;;-1:-1:-1;43555:13:0;-1:-1:-1;43548:20:0;;-1:-1:-1;;43548:20:0;43423:155;43409:3;;43368:217;;;-1:-1:-1;43600:13:0;42850:771;-1:-1:-1;;;;;42850:771:0:o;20920:220::-;20978:7;21002:6;20998:20;;-1:-1:-1;21017:1:0;21010:8;;20998:20;21041:5;;;21045:1;21041;:5;:1;21065:5;;;;;:10;21057:56;;;;-1:-1:-1;;;21057:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42397:447;42459:7;;;42518:49;29134:16;42518:35;:15;42538:14;42518:19;:35::i;:49::-;42500:67;;42579:6;42574:245;42596:7;42591:1;:12;42574:245;;42619:21;42643:27;42661:5;42668:1;42643:17;:27::i;:::-;42683:21;;;;:18;:21;;;;;;42619:51;;-1:-1:-1;42683:26:0;42679:133;;42779:21;;;;:18;:21;;;;;;;;;42742:10;:13;;;;;;;42731:71;;42742:59;;:32;;42760:13;42742:17;:32::i;:59::-;42731:6;;:10;:71::i;:::-;42722:80;;42679:133;-1:-1:-1;42605:3:0;;42574:245;;;-1:-1:-1;42832:6:0;;42397:447;-1:-1:-1;;;42397:447:0:o;42031:360::-;-1:-1:-1;;;;;42170:14:0;;42093:7;42170:14;;;:8;:14;;;;;;;;42140:55;;;;;;;;;;;;;;;;;42093:7;;42140:27;;:55;42170:14;42140:55;;;42170:14;42140:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42207:6;42202:156;42223:10;:17;42219:1;:21;42202:156;;;42256:17;42276:10;42287:1;42276:13;;;;;;;;;;;;;;42256:33;;42313:37;42330:8;:19;42339:9;42330:19;;;;;;;;;;;;42313:12;:16;;:37;;;;:::i;:::-;42298:52;-1:-1:-1;;42242:3:0;;42202:156;;25433:177;25543:58;;;-1:-1:-1;;;;;25543:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25543:58:0;-1:-1:-1;;;25543:58:0;;;25516:86;;25536:5;;25516:19;:86::i;:::-;25433:177;;;:::o;21618:153::-;21676:7;21708:1;21704;:5;21696:44;;;;;-1:-1:-1;;;21696:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21762:1;21758;:5;;;;;;;21618:153;-1:-1:-1;;;21618:153:0:o;27738:761::-;28162:23;28188:69;28216:4;28188:69;;;;;;;;;;;;;;;;;28196:5;-1:-1:-1;;;;;28188:27:0;;;:69;;;;;:::i;:::-;28272:17;;28162:95;;-1:-1:-1;28272:21:0;28268:224;;28414:10;28403:30;;;;;;;;;;;;;;;-1:-1:-1;28403:30:0;28395:85;;;;-1:-1:-1;;;28395:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43627:697;43707:7;43767:20;;;:9;:20;;;;;;43707:7;;;;43767:54;;29134:16;;43767:40;;43792:14;43767:24;:40::i;:54::-;43747:74;;43844:10;43832:9;:22;43828:36;;;43863:1;43856:8;;;;;;43828:36;43871:12;29048:2;43886:25;:10;43901:9;43886:14;:25::i;:::-;:45;:93;;43954:25;:10;43969:9;43954:14;:25::i;:::-;43886:93;;;29048:2;43886:93;43986:17;44038:21;;;:10;:21;;;;;;43871:108;;-1:-1:-1;43986:17:0;44006:70;;44073:2;;44006:62;;44066:1;;44006:55;;44038:21;;44030:30;;;;;;;;44006:19;;;;:8;:19;;;;;;;:23;:55::i;:70::-;44091:19;;;;:8;:19;;;;;;43986:90;;-1:-1:-1;44091:67:0;;43986:90;;44091:52;;29048:2;;44091:29;;44115:4;44091:23;:29::i;:52::-;:56;;:67::i;:::-;44177:19;;;;:8;:19;;;;;;44083:75;;-1:-1:-1;44169:27:0;;44165:133;;;44215:19;;;;:8;:19;;;;;;:29;;44239:4;44215:23;:29::i;:::-;44207:37;;44165:133;;;44275:15;:5;44285:4;44275:9;:15::i;:::-;44267:23;;44165:133;-1:-1:-1;44313:5:0;;43627:697;-1:-1:-1;;;;;43627:697:0:o;3784:195::-;3887:12;3919:52;3941:6;3949:4;3955:1;3958:12;3919:21;:52::i;:::-;3912:59;;3784:195;;;;;;:::o;4836:530::-;4963:12;5021:5;4996:21;:30;;4988:81;;;;-1:-1:-1;;;4988:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5088:18;5099:6;5088:10;:18::i;:::-;5080:60;;;;;-1:-1:-1;;;5080:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5214:12;5228:23;5255:6;-1:-1:-1;;;;;5255:11:0;5275:5;5283:4;5255:33;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5255:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5213:75;;;;5306:52;5324:7;5333:10;5345:12;5306:17;:52::i;:::-;5299:59;4836:530;-1:-1:-1;;;;;;;4836:530:0:o;866:422::-;1233:20;1272:8;;;866:422::o;7376:742::-;7491:12;7520:7;7516:595;;;-1:-1:-1;7551:10:0;7544:17;;7516:595;7665:17;;:21;7661:439;;7928:10;7922:17;7989:15;7976:10;7972:2;7968:19;7961:44;7876:148;8071:12;8064:20;;-1:-1:-1;;;8064:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://e881649fd54c7618e40c0ff363f1e538c7698d7e6edb8e5558fbf78712cd508f
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
POL | 100.00% | $1 | 27.6941 | $27.72 |
[ 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.