More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 168 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 17163308 | 6 hrs ago | IN | 0 CRO | 0.5003843 | ||||
Claim Rewards | 17163248 | 6 hrs ago | IN | 0 CRO | 0.40747945 | ||||
Claim Rewards | 17159318 | 12 hrs ago | IN | 0 CRO | 0.40747945 | ||||
Deposit | 17138676 | 45 hrs ago | IN | 0 CRO | 0.5501369 | ||||
Withdraw | 17125779 | 2 days ago | IN | 0 CRO | 0.50023567 | ||||
Claim Rewards | 17125775 | 2 days ago | IN | 0 CRO | 0.40735841 | ||||
Update Apr | 17116543 | 3 days ago | IN | 0 CRO | 0.24956595 | ||||
Withdraw | 17108443 | 3 days ago | IN | 0 CRO | 0.2992832 | ||||
Withdraw | 17108442 | 3 days ago | IN | 0 CRO | 0.2992832 | ||||
Withdraw | 17108436 | 3 days ago | IN | 0 CRO | 0.5003843 | ||||
Deposit | 17100927 | 4 days ago | IN | 0 CRO | 0.5501369 | ||||
Update Apr | 17097498 | 4 days ago | IN | 0 CRO | 0.24950535 | ||||
Claim Rewards | 17096927 | 4 days ago | IN | 0 CRO | 0.40747945 | ||||
Deposit | 17089214 | 5 days ago | IN | 0 CRO | 0.5501369 | ||||
Deposit | 17089180 | 5 days ago | IN | 0 CRO | 0.79812725 | ||||
Deposit | 17087374 | 5 days ago | IN | 0 CRO | 0.79806665 | ||||
Withdraw | 17087225 | 5 days ago | IN | 0 CRO | 0.5003843 | ||||
Withdraw | 17063493 | 6 days ago | IN | 0 CRO | 0.5003843 | ||||
Deposit | 17063060 | 6 days ago | IN | 0 CRO | 0.79806665 | ||||
Deposit | 17034331 | 8 days ago | IN | 0 CRO | 0.5501975 | ||||
Deposit | 17033849 | 8 days ago | IN | 0 CRO | 0.5501369 | ||||
Deposit | 17033838 | 8 days ago | IN | 0 CRO | 0.5501369 | ||||
Deposit | 17031559 | 9 days ago | IN | 0 CRO | 0.79806665 | ||||
Deposit | 17014552 | 10 days ago | IN | 0 CRO | 0.79806665 | ||||
Claim Rewards | 17013238 | 10 days ago | IN | 0 CRO | 0.40747945 |
Loading...
Loading
Contract Name:
FixedAPRSoloStaking
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2024-09-27 */ //SPDX-License-Identifier: MIT pragma solidity 0.8.16; //import "@nomiclabs/buidler/console.sol"; /* * @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. */ contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor() {} function _msgSender() internal view returns (address payable) { return payable(msg.sender); } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @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. */ 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() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view 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 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 onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), 'Ownable: new owner is the zero address'); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @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, 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) { return sub(a, b, 'SafeMath: subtraction overflow'); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * 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); uint256 c = a - b; return c; } /** * @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) { // 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 0; } uint256 c = a * b; require(c / a == b, 'SafeMath: multiplication overflow'); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts 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) { return div(a, b, 'SafeMath: division by zero'); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, 'SafeMath: modulo by zero'); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message 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, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } function min(uint256 x, uint256 y) internal pure returns (uint256 z) { z = x < y ? x : y; } // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method) function sqrt(uint256 y) internal pure returns (uint256 z) { if (y > 3) { z = y; uint256 x = y / 2 + 1; while (x < z) { z = x; x = (y / x + x) / 2; } } else if (y != 0) { z = 1; } } } interface IBEP20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the token decimals. */ function decimals() external view returns (uint8); /** * @dev Returns the token symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the token name. */ function name() external view returns (string memory); /** * @dev Returns the bep token owner. */ function getOwner() external view returns (address); /** * @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); } /** * @title SafeBEP20 * @dev Wrappers around BEP20 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 SafeBEP20 for IBEP20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeBEP20 { using SafeMath for uint256; using Address for address; function safeTransfer( IBEP20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IBEP20 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 * {IBEP20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IBEP20 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), 'SafeBEP20: approve from non-zero to non-zero allowance' ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IBEP20 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( IBEP20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender).sub( value, 'SafeBEP20: 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(IBEP20 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, 'SafeBEP20: low-level call failed'); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), 'SafeBEP20: BEP20 operation did not succeed'); } } } /** * @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) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @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'); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue( address target, bytes memory data, uint256 weiValue, string memory errorMessage ) private returns (bytes memory) { require(isContract(target), 'Address: call to non-contract'); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{value: weiValue}(data); 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); } } } } 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() { _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 making 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; } } contract FixedAPRSoloStaking is Ownable, ReentrancyGuard { using SafeMath for uint256; using SafeBEP20 for IBEP20; // Info of each user. struct UserInfo { uint256 amount; // How many LP tokens the user has provided. uint256 rewardDebt; // Reward debt. See explanation below. } // Info of each pool. struct PoolInfo { IBEP20 lpToken; // Address of LP token contract. uint256 allocPoint; // How many allocation points assigned to this pool. Tokens to distribute per block. uint256 lastRewardTimestamp; // Last block number that Tokens distribution occurs. uint256 accTokensPerShare; // Accumulated Tokens per share, times 1e12. See below. } IBEP20 public immutable stakingToken; IBEP20 public immutable rewardToken; mapping (address => uint256) public holderUnlockTime; uint256 public totalStaked; uint256 public apr; uint256 public lockDuration; uint256 public exitPenaltyPerc; bool public canCompoundOrStakeMore; // Info of each pool. PoolInfo[] public poolInfo; // Info of each user that stakes LP tokens. mapping (address => UserInfo) public userInfo; // Total allocation poitns. Must be the sum of all allocation points in all pools. uint256 private totalAllocPoint = 0; event Deposit(address indexed user, uint256 amount); event Withdraw(address indexed user, uint256 amount); event Compound(address indexed user); event EmergencyWithdraw(address indexed user, uint256 amount); event Claim(address indexed user, uint256 amount); constructor(address _tokenAddress, uint256 _apr, uint256 _lockDurationInDays, uint256 _exitPenaltyPerc, bool _canCompoundOrStakeMore) { stakingToken = IBEP20(_tokenAddress); rewardToken = IBEP20(_tokenAddress); canCompoundOrStakeMore = _canCompoundOrStakeMore; apr = _apr; lockDuration = _lockDurationInDays * 1 days; exitPenaltyPerc = _exitPenaltyPerc; // staking pool poolInfo.push(PoolInfo({ lpToken: stakingToken, allocPoint: 1000, lastRewardTimestamp: 99999999999, accTokensPerShare: 0 })); totalAllocPoint = 1000; } function stopReward() external onlyOwner { updatePool(0); apr = 0; } function startReward() external onlyOwner { require(poolInfo[0].lastRewardTimestamp == 99999999999, "Can only start rewards once"); poolInfo[0].lastRewardTimestamp = block.timestamp; } // View function to see pending Reward on frontend. function pendingReward(address _user) external view returns (uint256) { PoolInfo storage pool = poolInfo[0]; UserInfo storage user = userInfo[_user]; if(pool.lastRewardTimestamp == 99999999999){ return 0; } uint256 accTokensPerShare = pool.accTokensPerShare; uint256 lpSupply = totalStaked; if (block.timestamp > pool.lastRewardTimestamp && lpSupply != 0) { uint256 tokenReward = calculateNewRewards().mul(pool.allocPoint).div(totalAllocPoint); accTokensPerShare = accTokensPerShare.add(tokenReward.mul(1e12).div(lpSupply)); } return user.amount.mul(accTokensPerShare).div(1e12).sub(user.rewardDebt); } // Update reward variables of the given pool to be up-to-date. function updatePool(uint256 _pid) internal { PoolInfo storage pool = poolInfo[_pid]; if (block.timestamp <= pool.lastRewardTimestamp) { return; } uint256 lpSupply = totalStaked; if (lpSupply == 0) { pool.lastRewardTimestamp = block.timestamp; return; } uint256 tokenReward = calculateNewRewards().mul(pool.allocPoint).div(totalAllocPoint); pool.accTokensPerShare = pool.accTokensPerShare.add(tokenReward.mul(1e12).div(lpSupply)); pool.lastRewardTimestamp = block.timestamp; } // Update reward variables for all pools. Be careful of gas spending! function massUpdatePools() public onlyOwner { uint256 length = poolInfo.length; for (uint256 pid = 0; pid < length; ++pid) { updatePool(pid); } } // Stake primary tokens function deposit(uint256 _amount) external nonReentrant { if(holderUnlockTime[msg.sender] == 0){ holderUnlockTime[msg.sender] = block.timestamp + lockDuration; } PoolInfo storage pool = poolInfo[0]; UserInfo storage user = userInfo[msg.sender]; if(!canCompoundOrStakeMore && _amount > 0){ require(user.amount == 0, "Cannot stake more"); } updatePool(0); if (user.amount > 0) { uint256 pending = user.amount.mul(pool.accTokensPerShare).div(1e12).sub(user.rewardDebt); if(pending > 0) { require(pending <= rewardsRemaining(), "Cannot withdraw other people's staked tokens. Contact an admin."); rewardToken.safeTransfer(address(msg.sender), pending); } } uint256 amountTransferred = 0; if(_amount > 0) { uint256 initialBalance = pool.lpToken.balanceOf(address(this)); pool.lpToken.safeTransferFrom(address(msg.sender), address(this), _amount); amountTransferred = pool.lpToken.balanceOf(address(this)) - initialBalance; user.amount = user.amount.add(amountTransferred); totalStaked += amountTransferred; } user.rewardDebt = user.amount.mul(pool.accTokensPerShare).div(1e12); emit Deposit(msg.sender, _amount); } function compound() external nonReentrant { require(canCompoundOrStakeMore, "Cannot compound"); PoolInfo storage pool = poolInfo[0]; UserInfo storage user = userInfo[msg.sender]; updatePool(0); if (user.amount > 0) { uint256 pending = user.amount.mul(pool.accTokensPerShare).div(1e12).sub(user.rewardDebt); if(pending > 0) { require(pending <= rewardsRemaining(), "Cannot withdraw other people's staked tokens. Contact an admin."); user.amount += pending; totalStaked += pending; } } user.rewardDebt = user.amount.mul(pool.accTokensPerShare).div(1e12); emit Compound(msg.sender); } // Withdraw primary tokens from STAKING. function withdraw() external nonReentrant { require(holderUnlockTime[msg.sender] <= block.timestamp, "May not do normal withdraw early"); PoolInfo storage pool = poolInfo[0]; UserInfo storage user = userInfo[msg.sender]; uint256 _amount = user.amount; updatePool(0); uint256 pending = user.amount.mul(pool.accTokensPerShare).div(1e12).sub(user.rewardDebt); if(pending > 0){ require(pending <= rewardsRemaining(), "Cannot withdraw other people's staked tokens. Contact an admin."); rewardToken.safeTransfer(address(msg.sender), pending); } if(_amount > 0) { user.amount = 0; totalStaked -= _amount; pool.lpToken.safeTransfer(address(msg.sender), _amount); } user.rewardDebt = user.amount.mul(pool.accTokensPerShare).div(1e12); if(user.amount > 0){ holderUnlockTime[msg.sender] = block.timestamp + lockDuration; } else { holderUnlockTime[msg.sender] = 0; } emit Withdraw(msg.sender, _amount); } function claimRewards() external nonReentrant { PoolInfo storage pool = poolInfo[0]; UserInfo storage user = userInfo[msg.sender]; updatePool(0); uint256 pending = user.amount.mul(pool.accTokensPerShare).div(1e12).sub(user.rewardDebt); if(pending > 0) { require(pending <= rewardsRemaining(), "Cannot withdraw other people's staked tokens. Contact an admin."); rewardToken.safeTransfer(address(msg.sender), pending); user.rewardDebt = user.amount.mul(pool.accTokensPerShare).div(1e12); emit Claim(msg.sender, pending); } } // Withdraw without caring about rewards. EMERGENCY ONLY. function emergencyWithdraw() external nonReentrant { PoolInfo storage pool = poolInfo[0]; UserInfo storage user = userInfo[msg.sender]; uint256 _amount = user.amount; totalStaked -= _amount; // exit penalty for early unstakers, penalty held on contract as rewards. if(holderUnlockTime[msg.sender] >= block.timestamp){ _amount -= _amount * exitPenaltyPerc / 100; } holderUnlockTime[msg.sender] = 0; pool.lpToken.safeTransfer(address(msg.sender), _amount); user.amount = 0; user.rewardDebt = 0; emit EmergencyWithdraw(msg.sender, _amount); } // Withdraw reward. EMERGENCY ONLY. This allows the owner to migrate rewards to a new staking pool since we are not minting new tokens. function emergencyRewardWithdraw(uint256 _amount) external onlyOwner { require(_amount <= rewardToken.balanceOf(address(this)) - totalStaked, 'not enough tokens to take out'); rewardToken.safeTransfer(address(msg.sender), _amount); } function calculateNewRewards() public view returns (uint256) { PoolInfo storage pool = poolInfo[0]; if (pool.lastRewardTimestamp > block.timestamp) { return 0; } uint256 timeDifference = block.timestamp - pool.lastRewardTimestamp; uint256 reward = (timeDifference * totalStaked * apr) / 10000 / 365 days; return reward; } function rewardsRemaining() public view returns (uint256){ return rewardToken.balanceOf(address(this)) - totalStaked; } function updateApr(uint256 newApr) external onlyOwner { require(newApr <= 10000, "APR must be below or equal to 100%"); updatePool(0); apr = newApr; } function updateLockDuration(uint256 daysForLock) external onlyOwner { require(daysForLock <= 365, "Lock must be 365 days or less."); lockDuration = daysForLock * 1 days; } function updateExitPenalty(uint256 newPenaltyPerc) external onlyOwner { require(newPenaltyPerc <= 20, "May not set higher than 20%"); exitPenaltyPerc = newPenaltyPerc; } function updateCanCompoundOrStakeMore(bool compoundEnabled) external onlyOwner { canCompoundOrStakeMore = compoundEnabled; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_apr","type":"uint256"},{"internalType":"uint256","name":"_lockDurationInDays","type":"uint256"},{"internalType":"uint256","name":"_exitPenaltyPerc","type":"uint256"},{"internalType":"bool","name":"_canCompoundOrStakeMore","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"Compound","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","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":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"apr","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calculateNewRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"canCompoundOrStakeMore","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"compound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"emergencyRewardWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"exitPenaltyPerc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"holderUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IBEP20","name":"lpToken","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardTimestamp","type":"uint256"},{"internalType":"uint256","name":"accTokensPerShare","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"contract IBEP20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsRemaining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingToken","outputs":[{"internalType":"contract IBEP20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newApr","type":"uint256"}],"name":"updateApr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"compoundEnabled","type":"bool"}],"name":"updateCanCompoundOrStakeMore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPenaltyPerc","type":"uint256"}],"name":"updateExitPenalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"daysForLock","type":"uint256"}],"name":"updateLockDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c06040526000600a553480156200001657600080fd5b50604051620020ad380380620020ad8339810160408190526200003991620001ba565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180556001600160a01b038516608081905260a0526007805460ff19168215151790556004849055620000b2836201518062000226565b6005555060065550506040805160808082018352516001600160a01b0390811682526103e86020830181815264174876e7ff94840194855260006060850181815260088054600181018255925294517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3600490920291820180546001600160a01b0319169190951617909355517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee483015592517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee582015590517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee690910155600a555062000254565b600080600080600060a08688031215620001d357600080fd5b85516001600160a01b0381168114620001eb57600080fd5b80955050602086015193506040860151925060608601519150608086015180151581146200021857600080fd5b809150509295509295909350565b60008160001904831182151516156200024f57634e487b7160e01b600052601160045260246000fd5b500290565b60805160a051611e09620002a460003960008181610400015281816104ee015281816105c701528181610725015281816108e101528181610b960152610f5c015260006102dc0152611e096000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80637b280def11610104578063a913a5f7116100a2578063f2fde38b11610071578063f2fde38b146103cd578063f40f0f52146103e0578063f69e2046146103f3578063f7c618c1146103fb57600080fd5b8063a913a5f71461037f578063b6b55f251461039f578063d477edf4146103b2578063db2e21bc146103c557600080fd5b80638552bf90116100de5780638552bf90146103405780638da5cb5b146103535780638e0b019814610364578063999e2f751461037757600080fd5b80637b280def1461032657806380dc06721461032f578063817b1cd21461033757600080fd5b806357ded9c911610171578063715018a61161014b578063715018a6146102cf57806372f702f3146102d7578063746c8ae11461031657806378c196f31461031e57600080fd5b806357ded9c9146102a1578063630b5ba1146102aa57806368365d03146102b257600080fd5b80631959a002116101ad5780631959a002146102425780633279beab1461027e578063372500ab146102915780633ccfd60b1461029957600080fd5b806304554443146101d45780630698260f146101f05780631526fe2714610205575b600080fd5b6101dd60055481565b6040519081526020015b60405180910390f35b6102036101fe366004611b55565b610422565b005b610218610213366004611b72565b610468565b604080516001600160a01b03909516855260208501939093529183015260608201526080016101e7565b610269610250366004611b8b565b6009602052600090815260409020805460019091015482565b604080519283526020830191909152016101e7565b61020361028c366004611b72565b6104ac565b6102036105f1565b6102036107ac565b6101dd60045481565b6102036109da565b6007546102bf9060ff1681565b60405190151581526020016101e7565b610203610a2f565b6102fe7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101e7565b610203610aa3565b6101dd610b72565b6101dd60065481565b610203610c10565b6101dd60035481565b61020361034e366004611b72565b610c4b565b6000546001600160a01b03166102fe565b610203610372366004611b72565b610ce1565b6101dd610d61565b6101dd61038d366004611b8b565b60026020526000908152604090205481565b6102036103ad366004611b72565b610df1565b6102036103c0366004611b72565b611107565b610203611196565b6102036103db366004611b8b565b6112b5565b6101dd6103ee366004611b8b565b6112e8565b6102036113d7565b6102fe7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b031633146104555760405162461bcd60e51b815260040161044c90611bb4565b60405180910390fd5b6007805460ff1916911515919091179055565b6008818154811061047857600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169350919084565b6000546001600160a01b031633146104d65760405162461bcd60e51b815260040161044c90611bb4565b6003546040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561053d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105619190611be9565b61056b9190611c18565b8111156105ba5760405162461bcd60e51b815260206004820152601d60248201527f6e6f7420656e6f75676820746f6b656e7320746f2074616b65206f7574000000604482015260640161044c565b6105ee6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016338361156c565b50565b6002600154036106135760405162461bcd60e51b815260040161044c90611c2b565b60026001819055506000600860008154811061063157610631611c62565b60009182526020808320338452600990915260408320600490920201925090610659906115d4565b6000610693826001015461068d64e8d4a510006106878760030154876000015461166b90919063ffffffff16565b906116f6565b90611738565b905080156107a3576106a3610b72565b8111156107185760405162461bcd60e51b815260206004820152603f60248201527f43616e6e6f74207769746864726177206f746865722070656f706c652773207360448201527f74616b656420746f6b656e732e20436f6e7461637420616e2061646d696e2e00606482015260840161044c565b61074c6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016338361156c565b600383015482546107679164e8d4a51000916106879161166b565b600183015560405181815233907f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d4906020015b60405180910390a25b50506001805550565b6002600154036107ce5760405162461bcd60e51b815260040161044c90611c2b565b6002600181905533600090815260209190915260409020544210156108355760405162461bcd60e51b815260206004820181905260248201527f4d6179206e6f7420646f206e6f726d616c207769746864726177206561726c79604482015260640161044c565b6000600860008154811061084b5761084b611c62565b6000918252602080832033845260099091526040832080546004909302909101935091610877906115d4565b60006108a5836001015461068d64e8d4a510006106878860030154886000015461166b90919063ffffffff16565b90508015610908576108b5610b72565b8111156108d45760405162461bcd60e51b815260040161044c90611c78565b6109086001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016338361156c565b811561094057600080845560038054849290610925908490611c18565b90915550508354610940906001600160a01b0316338461156c565b6003840154835461095b9164e8d4a51000916106879161166b565b6001840155825415610989576005546109749042611cd6565b3360009081526002602052604090205561099a565b336000908152600260205260408120555b60405182815233907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364906020015b60405180910390a25050600180555050565b6000546001600160a01b03163314610a045760405162461bcd60e51b815260040161044c90611bb4565b60085460005b81811015610a2b57610a1b816115d4565b610a2481611ce9565b9050610a0a565b5050565b6000546001600160a01b03163314610a595760405162461bcd60e51b815260040161044c90611bb4565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610acd5760405162461bcd60e51b815260040161044c90611bb4565b6008600081548110610ae157610ae1611c62565b90600052602060002090600402016002015464174876e7ff14610b465760405162461bcd60e51b815260206004820152601b60248201527f43616e206f6e6c792073746172742072657761726473206f6e63650000000000604482015260640161044c565b426008600081548110610b5b57610b5b611c62565b906000526020600020906004020160020181905550565b6003546040516370a0823160e01b8152306004820152600091906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610bdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c019190611be9565b610c0b9190611c18565b905090565b6000546001600160a01b03163314610c3a5760405162461bcd60e51b815260040161044c90611bb4565b610c4460006115d4565b6000600455565b6000546001600160a01b03163314610c755760405162461bcd60e51b815260040161044c90611bb4565b612710811115610cd25760405162461bcd60e51b815260206004820152602260248201527f415052206d7573742062652062656c6f77206f7220657175616c20746f203130604482015261302560f01b606482015260840161044c565b610cdc60006115d4565b600455565b6000546001600160a01b03163314610d0b5760405162461bcd60e51b815260040161044c90611bb4565b6014811115610d5c5760405162461bcd60e51b815260206004820152601b60248201527f4d6179206e6f742073657420686967686572207468616e203230250000000000604482015260640161044c565b600655565b6000806008600081548110610d7857610d78611c62565b906000526020600020906004020190504281600201541115610d9c57600091505090565b6000816002015442610dae9190611c18565b905060006301e1338061271060045460035485610dcb9190611d02565b610dd59190611d02565b610ddf9190611d21565b610de99190611d21565b949350505050565b600260015403610e135760405162461bcd60e51b815260040161044c90611c2b565b6002600181905533600090815260209190915260408120549003610e4f57600554610e3e9042611cd6565b336000908152600260205260409020555b60006008600081548110610e6557610e65611c62565b60009182526020808320338452600990915260409092206007546004909202909201925060ff16158015610e995750600083115b15610ee157805415610ee15760405162461bcd60e51b815260206004820152601160248201527043616e6e6f74207374616b65206d6f726560781b604482015260640161044c565b610eeb60006115d4565b805415610f85576000610f20826001015461068d64e8d4a510006106878760030154876000015461166b90919063ffffffff16565b90508015610f8357610f30610b72565b811115610f4f5760405162461bcd60e51b815260040161044c90611c78565b610f836001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016338361156c565b505b600083156110b55782546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610fd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff99190611be9565b8454909150611013906001600160a01b031633308861177a565b83546040516370a0823160e01b815230600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa15801561105a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107e9190611be9565b6110889190611c18565b835490925061109790836117b8565b8355600380548391906000906110ae908490611cd6565b9091555050505b600383015482546110d09164e8d4a51000916106879161166b565b600183015560405184815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c906020016109c8565b6000546001600160a01b031633146111315760405162461bcd60e51b815260040161044c90611bb4565b61016d8111156111835760405162461bcd60e51b815260206004820152601e60248201527f4c6f636b206d757374206265203336352064617973206f72206c6573732e0000604482015260640161044c565b6111908162015180611d02565b60055550565b6002600154036111b85760405162461bcd60e51b815260040161044c90611c2b565b6002600181905550600060086000815481106111d6576111d6611c62565b6000918252602080832033845260099091526040832080546003805460049095029093019550909390928392919061120f908490611c18565b90915550503360009081526002602052604090205442116112515760646006548261123a9190611d02565b6112449190611d21565b61124e9082611c18565b90505b336000818152600260205260408120558354611279916001600160a01b03909116908361156c565b6000808355600183015560405181815233907f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd96959060200161079a565b6000546001600160a01b031633146112df5760405162461bcd60e51b815260040161044c90611bb4565b6105ee81611817565b60008060086000815481106112ff576112ff611c62565b600091825260208083206001600160a01b038716845260099091526040909220600260049092029092019081015490925064174876e7ff03611345575060009392505050565b600380830154905460028401544211801561135f57508015155b156113a5576000611382600a54610687876001015461137c610d61565b9061166b565b90506113a161139a836106878464e8d4a5100061166b565b84906117b8565b9250505b6113cd836001015461068d64e8d4a5100061068786886000015461166b90919063ffffffff16565b9695505050505050565b6002600154036113f95760405162461bcd60e51b815260040161044c90611c2b565b600260015560075460ff166114425760405162461bcd60e51b815260206004820152600f60248201526e10d85b9b9bdd0818dbdb5c1bdd5b99608a1b604482015260640161044c565b6000600860008154811061145857611458611c62565b60009182526020808320338452600990915260408320600490920201925090611480906115d4565b8054156115195760006114b5826001015461068d64e8d4a510006106878760030154876000015461166b90919063ffffffff16565b90508015611517576114c5610b72565b8111156114e45760405162461bcd60e51b815260040161044c90611c78565b808260000160008282546114f89190611cd6565b9250508190555080600360008282546115119190611cd6565b90915550505b505b600382015481546115349164e8d4a51000916106879161166b565b600182015560405133907fda323bd96658b18a6ce813e824305dc61760462bad6aaf52c65aebb8c8c9faa190600090a2505060018055565b6040516001600160a01b0383166024820152604481018290526115cf90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526118d7565b505050565b6000600882815481106115e9576115e9611c62565b9060005260206000209060040201905080600201544211611608575050565b600354600081900361161f57504260029091015550565b6000611637600a54610687856001015461137c610d61565b905061165a61164f836106878464e8d4a5100061166b565b6003850154906117b8565b600384015550504260029091015550565b60008260000361167d575060006116f0565b60006116898385611d02565b9050826116968583611d21565b146116ed5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161044c565b90505b92915050565b60006116ed83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506119a9565b60006116ed83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506119e0565b6040516001600160a01b03808516602483015283166044820152606481018290526117b29085906323b872dd60e01b90608401611598565b50505050565b6000806117c58385611cd6565b9050838110156116ed5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161044c565b6001600160a01b03811661187c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161044c565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600061192c826040518060400160405280602081526020017f5361666542455032303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611a119092919063ffffffff16565b8051909150156115cf578080602001905181019061194a9190611d43565b6115cf5760405162461bcd60e51b815260206004820152602a60248201527f5361666542455032303a204245503230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161044c565b600081836119ca5760405162461bcd60e51b815260040161044c9190611d84565b5060006119d78486611d21565b95945050505050565b60008184841115611a045760405162461bcd60e51b815260040161044c9190611d84565b5060006119d78486611c18565b6060610de984846000856060611a2685611b0e565b611a725760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161044c565b600080866001600160a01b03168587604051611a8e9190611db7565b60006040518083038185875af1925050503d8060008114611acb576040519150601f19603f3d011682016040523d82523d6000602084013e611ad0565b606091505b50915091508115611ae4579150610de99050565b805115611af45780518082602001fd5b8360405162461bcd60e51b815260040161044c9190611d84565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590610de9575050151592915050565b80151581146105ee57600080fd5b600060208284031215611b6757600080fd5b81356116ed81611b47565b600060208284031215611b8457600080fd5b5035919050565b600060208284031215611b9d57600080fd5b81356001600160a01b03811681146116ed57600080fd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215611bfb57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156116f0576116f0611c02565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052603260045260246000fd5b602080825260409082018190527f43616e6e6f74207769746864726177206f746865722070656f706c6527732073908201527f74616b656420746f6b656e732e2020436f6e7461637420616e2061646d696e2e606082015260800190565b808201808211156116f0576116f0611c02565b600060018201611cfb57611cfb611c02565b5060010190565b6000816000190483118215151615611d1c57611d1c611c02565b500290565b600082611d3e57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611d5557600080fd5b81516116ed81611b47565b60005b83811015611d7b578181015183820152602001611d63565b50506000910152565b6020815260008251806020840152611da3816040850160208701611d60565b601f01601f19169190910160400192915050565b60008251611dc9818460208701611d60565b919091019291505056fea26469706673582212207a1745a915ccf26a18b13cffe4fdcc197666132c15b128fcd55d27590861a8df64736f6c6343000810003300000000000000000000000041bc026dabe978bc2fafea1850456511ca4b01bc0000000000000000000000000000000000000000000000000000000000000046000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c80637b280def11610104578063a913a5f7116100a2578063f2fde38b11610071578063f2fde38b146103cd578063f40f0f52146103e0578063f69e2046146103f3578063f7c618c1146103fb57600080fd5b8063a913a5f71461037f578063b6b55f251461039f578063d477edf4146103b2578063db2e21bc146103c557600080fd5b80638552bf90116100de5780638552bf90146103405780638da5cb5b146103535780638e0b019814610364578063999e2f751461037757600080fd5b80637b280def1461032657806380dc06721461032f578063817b1cd21461033757600080fd5b806357ded9c911610171578063715018a61161014b578063715018a6146102cf57806372f702f3146102d7578063746c8ae11461031657806378c196f31461031e57600080fd5b806357ded9c9146102a1578063630b5ba1146102aa57806368365d03146102b257600080fd5b80631959a002116101ad5780631959a002146102425780633279beab1461027e578063372500ab146102915780633ccfd60b1461029957600080fd5b806304554443146101d45780630698260f146101f05780631526fe2714610205575b600080fd5b6101dd60055481565b6040519081526020015b60405180910390f35b6102036101fe366004611b55565b610422565b005b610218610213366004611b72565b610468565b604080516001600160a01b03909516855260208501939093529183015260608201526080016101e7565b610269610250366004611b8b565b6009602052600090815260409020805460019091015482565b604080519283526020830191909152016101e7565b61020361028c366004611b72565b6104ac565b6102036105f1565b6102036107ac565b6101dd60045481565b6102036109da565b6007546102bf9060ff1681565b60405190151581526020016101e7565b610203610a2f565b6102fe7f00000000000000000000000041bc026dabe978bc2fafea1850456511ca4b01bc81565b6040516001600160a01b0390911681526020016101e7565b610203610aa3565b6101dd610b72565b6101dd60065481565b610203610c10565b6101dd60035481565b61020361034e366004611b72565b610c4b565b6000546001600160a01b03166102fe565b610203610372366004611b72565b610ce1565b6101dd610d61565b6101dd61038d366004611b8b565b60026020526000908152604090205481565b6102036103ad366004611b72565b610df1565b6102036103c0366004611b72565b611107565b610203611196565b6102036103db366004611b8b565b6112b5565b6101dd6103ee366004611b8b565b6112e8565b6102036113d7565b6102fe7f00000000000000000000000041bc026dabe978bc2fafea1850456511ca4b01bc81565b6000546001600160a01b031633146104555760405162461bcd60e51b815260040161044c90611bb4565b60405180910390fd5b6007805460ff1916911515919091179055565b6008818154811061047857600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169350919084565b6000546001600160a01b031633146104d65760405162461bcd60e51b815260040161044c90611bb4565b6003546040516370a0823160e01b81523060048201527f00000000000000000000000041bc026dabe978bc2fafea1850456511ca4b01bc6001600160a01b0316906370a0823190602401602060405180830381865afa15801561053d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105619190611be9565b61056b9190611c18565b8111156105ba5760405162461bcd60e51b815260206004820152601d60248201527f6e6f7420656e6f75676820746f6b656e7320746f2074616b65206f7574000000604482015260640161044c565b6105ee6001600160a01b037f00000000000000000000000041bc026dabe978bc2fafea1850456511ca4b01bc16338361156c565b50565b6002600154036106135760405162461bcd60e51b815260040161044c90611c2b565b60026001819055506000600860008154811061063157610631611c62565b60009182526020808320338452600990915260408320600490920201925090610659906115d4565b6000610693826001015461068d64e8d4a510006106878760030154876000015461166b90919063ffffffff16565b906116f6565b90611738565b905080156107a3576106a3610b72565b8111156107185760405162461bcd60e51b815260206004820152603f60248201527f43616e6e6f74207769746864726177206f746865722070656f706c652773207360448201527f74616b656420746f6b656e732e20436f6e7461637420616e2061646d696e2e00606482015260840161044c565b61074c6001600160a01b037f00000000000000000000000041bc026dabe978bc2fafea1850456511ca4b01bc16338361156c565b600383015482546107679164e8d4a51000916106879161166b565b600183015560405181815233907f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d4906020015b60405180910390a25b50506001805550565b6002600154036107ce5760405162461bcd60e51b815260040161044c90611c2b565b6002600181905533600090815260209190915260409020544210156108355760405162461bcd60e51b815260206004820181905260248201527f4d6179206e6f7420646f206e6f726d616c207769746864726177206561726c79604482015260640161044c565b6000600860008154811061084b5761084b611c62565b6000918252602080832033845260099091526040832080546004909302909101935091610877906115d4565b60006108a5836001015461068d64e8d4a510006106878860030154886000015461166b90919063ffffffff16565b90508015610908576108b5610b72565b8111156108d45760405162461bcd60e51b815260040161044c90611c78565b6109086001600160a01b037f00000000000000000000000041bc026dabe978bc2fafea1850456511ca4b01bc16338361156c565b811561094057600080845560038054849290610925908490611c18565b90915550508354610940906001600160a01b0316338461156c565b6003840154835461095b9164e8d4a51000916106879161166b565b6001840155825415610989576005546109749042611cd6565b3360009081526002602052604090205561099a565b336000908152600260205260408120555b60405182815233907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364906020015b60405180910390a25050600180555050565b6000546001600160a01b03163314610a045760405162461bcd60e51b815260040161044c90611bb4565b60085460005b81811015610a2b57610a1b816115d4565b610a2481611ce9565b9050610a0a565b5050565b6000546001600160a01b03163314610a595760405162461bcd60e51b815260040161044c90611bb4565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610acd5760405162461bcd60e51b815260040161044c90611bb4565b6008600081548110610ae157610ae1611c62565b90600052602060002090600402016002015464174876e7ff14610b465760405162461bcd60e51b815260206004820152601b60248201527f43616e206f6e6c792073746172742072657761726473206f6e63650000000000604482015260640161044c565b426008600081548110610b5b57610b5b611c62565b906000526020600020906004020160020181905550565b6003546040516370a0823160e01b8152306004820152600091906001600160a01b037f00000000000000000000000041bc026dabe978bc2fafea1850456511ca4b01bc16906370a0823190602401602060405180830381865afa158015610bdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c019190611be9565b610c0b9190611c18565b905090565b6000546001600160a01b03163314610c3a5760405162461bcd60e51b815260040161044c90611bb4565b610c4460006115d4565b6000600455565b6000546001600160a01b03163314610c755760405162461bcd60e51b815260040161044c90611bb4565b612710811115610cd25760405162461bcd60e51b815260206004820152602260248201527f415052206d7573742062652062656c6f77206f7220657175616c20746f203130604482015261302560f01b606482015260840161044c565b610cdc60006115d4565b600455565b6000546001600160a01b03163314610d0b5760405162461bcd60e51b815260040161044c90611bb4565b6014811115610d5c5760405162461bcd60e51b815260206004820152601b60248201527f4d6179206e6f742073657420686967686572207468616e203230250000000000604482015260640161044c565b600655565b6000806008600081548110610d7857610d78611c62565b906000526020600020906004020190504281600201541115610d9c57600091505090565b6000816002015442610dae9190611c18565b905060006301e1338061271060045460035485610dcb9190611d02565b610dd59190611d02565b610ddf9190611d21565b610de99190611d21565b949350505050565b600260015403610e135760405162461bcd60e51b815260040161044c90611c2b565b6002600181905533600090815260209190915260408120549003610e4f57600554610e3e9042611cd6565b336000908152600260205260409020555b60006008600081548110610e6557610e65611c62565b60009182526020808320338452600990915260409092206007546004909202909201925060ff16158015610e995750600083115b15610ee157805415610ee15760405162461bcd60e51b815260206004820152601160248201527043616e6e6f74207374616b65206d6f726560781b604482015260640161044c565b610eeb60006115d4565b805415610f85576000610f20826001015461068d64e8d4a510006106878760030154876000015461166b90919063ffffffff16565b90508015610f8357610f30610b72565b811115610f4f5760405162461bcd60e51b815260040161044c90611c78565b610f836001600160a01b037f00000000000000000000000041bc026dabe978bc2fafea1850456511ca4b01bc16338361156c565b505b600083156110b55782546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610fd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff99190611be9565b8454909150611013906001600160a01b031633308861177a565b83546040516370a0823160e01b815230600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa15801561105a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107e9190611be9565b6110889190611c18565b835490925061109790836117b8565b8355600380548391906000906110ae908490611cd6565b9091555050505b600383015482546110d09164e8d4a51000916106879161166b565b600183015560405184815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c906020016109c8565b6000546001600160a01b031633146111315760405162461bcd60e51b815260040161044c90611bb4565b61016d8111156111835760405162461bcd60e51b815260206004820152601e60248201527f4c6f636b206d757374206265203336352064617973206f72206c6573732e0000604482015260640161044c565b6111908162015180611d02565b60055550565b6002600154036111b85760405162461bcd60e51b815260040161044c90611c2b565b6002600181905550600060086000815481106111d6576111d6611c62565b6000918252602080832033845260099091526040832080546003805460049095029093019550909390928392919061120f908490611c18565b90915550503360009081526002602052604090205442116112515760646006548261123a9190611d02565b6112449190611d21565b61124e9082611c18565b90505b336000818152600260205260408120558354611279916001600160a01b03909116908361156c565b6000808355600183015560405181815233907f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd96959060200161079a565b6000546001600160a01b031633146112df5760405162461bcd60e51b815260040161044c90611bb4565b6105ee81611817565b60008060086000815481106112ff576112ff611c62565b600091825260208083206001600160a01b038716845260099091526040909220600260049092029092019081015490925064174876e7ff03611345575060009392505050565b600380830154905460028401544211801561135f57508015155b156113a5576000611382600a54610687876001015461137c610d61565b9061166b565b90506113a161139a836106878464e8d4a5100061166b565b84906117b8565b9250505b6113cd836001015461068d64e8d4a5100061068786886000015461166b90919063ffffffff16565b9695505050505050565b6002600154036113f95760405162461bcd60e51b815260040161044c90611c2b565b600260015560075460ff166114425760405162461bcd60e51b815260206004820152600f60248201526e10d85b9b9bdd0818dbdb5c1bdd5b99608a1b604482015260640161044c565b6000600860008154811061145857611458611c62565b60009182526020808320338452600990915260408320600490920201925090611480906115d4565b8054156115195760006114b5826001015461068d64e8d4a510006106878760030154876000015461166b90919063ffffffff16565b90508015611517576114c5610b72565b8111156114e45760405162461bcd60e51b815260040161044c90611c78565b808260000160008282546114f89190611cd6565b9250508190555080600360008282546115119190611cd6565b90915550505b505b600382015481546115349164e8d4a51000916106879161166b565b600182015560405133907fda323bd96658b18a6ce813e824305dc61760462bad6aaf52c65aebb8c8c9faa190600090a2505060018055565b6040516001600160a01b0383166024820152604481018290526115cf90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526118d7565b505050565b6000600882815481106115e9576115e9611c62565b9060005260206000209060040201905080600201544211611608575050565b600354600081900361161f57504260029091015550565b6000611637600a54610687856001015461137c610d61565b905061165a61164f836106878464e8d4a5100061166b565b6003850154906117b8565b600384015550504260029091015550565b60008260000361167d575060006116f0565b60006116898385611d02565b9050826116968583611d21565b146116ed5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161044c565b90505b92915050565b60006116ed83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506119a9565b60006116ed83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506119e0565b6040516001600160a01b03808516602483015283166044820152606481018290526117b29085906323b872dd60e01b90608401611598565b50505050565b6000806117c58385611cd6565b9050838110156116ed5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161044c565b6001600160a01b03811661187c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161044c565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600061192c826040518060400160405280602081526020017f5361666542455032303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611a119092919063ffffffff16565b8051909150156115cf578080602001905181019061194a9190611d43565b6115cf5760405162461bcd60e51b815260206004820152602a60248201527f5361666542455032303a204245503230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161044c565b600081836119ca5760405162461bcd60e51b815260040161044c9190611d84565b5060006119d78486611d21565b95945050505050565b60008184841115611a045760405162461bcd60e51b815260040161044c9190611d84565b5060006119d78486611c18565b6060610de984846000856060611a2685611b0e565b611a725760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161044c565b600080866001600160a01b03168587604051611a8e9190611db7565b60006040518083038185875af1925050503d8060008114611acb576040519150601f19603f3d011682016040523d82523d6000602084013e611ad0565b606091505b50915091508115611ae4579150610de99050565b805115611af45780518082602001fd5b8360405162461bcd60e51b815260040161044c9190611d84565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590610de9575050151592915050565b80151581146105ee57600080fd5b600060208284031215611b6757600080fd5b81356116ed81611b47565b600060208284031215611b8457600080fd5b5035919050565b600060208284031215611b9d57600080fd5b81356001600160a01b03811681146116ed57600080fd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215611bfb57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156116f0576116f0611c02565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052603260045260246000fd5b602080825260409082018190527f43616e6e6f74207769746864726177206f746865722070656f706c6527732073908201527f74616b656420746f6b656e732e2020436f6e7461637420616e2061646d696e2e606082015260800190565b808201808211156116f0576116f0611c02565b600060018201611cfb57611cfb611c02565b5060010190565b6000816000190483118215151615611d1c57611d1c611c02565b500290565b600082611d3e57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611d5557600080fd5b81516116ed81611b47565b60005b83811015611d7b578181015183820152602001611d63565b50506000910152565b6020815260008251806020840152611da3816040850160208701611d60565b601f01601f19169190910160400192915050565b60008251611dc9818460208701611d60565b919091019291505056fea26469706673582212207a1745a915ccf26a18b13cffe4fdcc197666132c15b128fcd55d27590861a8df64736f6c63430008100033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000041bc026dabe978bc2fafea1850456511ca4b01bc0000000000000000000000000000000000000000000000000000000000000046000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
-----Decoded View---------------
Arg [0] : _tokenAddress (address): 0x41bc026dABe978bc2FAfeA1850456511ca4B01bc
Arg [1] : _apr (uint256): 70
Arg [2] : _lockDurationInDays (uint256): 0
Arg [3] : _exitPenaltyPerc (uint256): 0
Arg [4] : _canCompoundOrStakeMore (bool): True
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 00000000000000000000000041bc026dabe978bc2fafea1850456511ca4b01bc
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000046
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000001
Deployed Bytecode Sourcemap
24689:10900:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25658:27;;;;;;;;;160:25:1;;;148:2;133:18;25658:27:0;;;;;;;;35448:138;;;;;;:::i;:::-;;:::i;:::-;;25805:26;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;1013:32:1;;;995:51;;1077:2;1062:18;;1055:34;;;;1105:18;;;1098:34;1163:2;1148:18;;1141:34;982:3;967:19;25805:26:0;750:431:1;25887:45:0;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;1651:25:1;;;1707:2;1692:18;;1685:34;;;;1624:18;25887:45:0;1477:248:1;34034:256:0;;;;;;:::i;:::-;;:::i;32514:635::-;;;:::i;31352:1154::-;;;:::i;25633:18::-;;;;;;28898:190;;;:::i;25735:34::-;;;;;;;;;;;;1895:14:1;;1888:22;1870:41;;1858:2;1843:18;25735:34:0;1730:187:1;2810:140:0;;;:::i;25454:36::-;;;;;;;;-1:-1:-1;;;;;2100:32:1;;;2082:51;;2070:2;2055:18;25454:36:0;1922:217:1;27140:207:0;;;:::i;34713:133::-;;;:::i;25692:30::-;;;;;;27041:91;;;:::i;25600:26::-;;;;;;34854:182;;;;;;:::i;:::-;;:::i;2168:79::-;2206:7;2233:6;-1:-1:-1;;;;;2233:6:0;2168:79;;35248:192;;;;;;:::i;:::-;;:::i;34298:405::-;;;:::i;25539:52::-;;;;;;:::i;:::-;;;;;;;;;;;;;;29125:1410;;;;;;:::i;:::-;;:::i;35046:194::-;;;;;;:::i;:::-;;:::i;33220:665::-;;;:::i;3105:109::-;;;;;;:::i;:::-;;:::i;27412:727::-;;;;;;:::i;:::-;;:::i;30543:753::-;;;:::i;25497:35::-;;;;;35448:138;2380:6;;-1:-1:-1;;;;;2380:6:0;911:10;2380:22;2372:67;;;;-1:-1:-1;;;2372:67:0;;;;;;;:::i;:::-;;;;;;;;;35538:22:::1;:40:::0;;-1:-1:-1;;35538:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35448:138::o;25805:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25805:26:0;;;;-1:-1:-1;25805:26:0;;;:::o;34034:256::-;2380:6;;-1:-1:-1;;;;;2380:6:0;911:10;2380:22;2372:67;;;;-1:-1:-1;;;2372:67:0;;;;;;;:::i;:::-;34172:11:::1;::::0;34133:36:::1;::::0;-1:-1:-1;;;34133:36:0;;34163:4:::1;34133:36;::::0;::::1;2082:51:1::0;34133:11:0::1;-1:-1:-1::0;;;;;34133:21:0::1;::::0;::::1;::::0;2055:18:1;;34133:36:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;;;;:::i;:::-;34122:7;:61;;34114:103;;;::::0;-1:-1:-1;;;34114:103:0;;3369:2:1;34114:103:0::1;::::0;::::1;3351:21:1::0;3408:2;3388:18;;;3381:30;3447:31;3427:18;;;3420:59;3496:18;;34114:103:0::1;3167:353:1::0;34114:103:0::1;34228:54;-1:-1:-1::0;;;;;34228:11:0::1;:24;34261:10;34274:7:::0;34228:24:::1;:54::i;:::-;34034:256:::0;:::o;32514:635::-;23742:1;24340:7;;:19;24332:63;;;;-1:-1:-1;;;24332:63:0;;;;;;;:::i;:::-;23742:1;24473:7;:18;;;;32571:21:::1;32595:8;32604:1;32595:11;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;32650:10:::1;32641:20:::0;;:8:::1;:20:::0;;;;;;32595:11:::1;::::0;;::::1;;::::0;-1:-1:-1;32641:20:0;32674:13:::1;::::0;:10:::1;:13::i;:::-;32698:15;32716:70;32770:4;:15;;;32716:49;32760:4;32716:39;32732:4;:22;;;32716:4;:11;;;:15;;:39;;;;:::i;:::-;:43:::0;::::1;:49::i;:::-;:53:::0;::::1;:70::i;:::-;32698:88:::0;-1:-1:-1;32800:11:0;;32797:345:::1;;32847:18;:16;:18::i;:::-;32836:7;:29;;32828:105;;;::::0;-1:-1:-1;;;32828:105:0;;4219:2:1;32828:105:0::1;::::0;::::1;4201:21:1::0;4258:2;4238:18;;;4231:30;4297:34;4277:18;;;4270:62;4368:33;4348:18;;;4341:61;4419:19;;32828:105:0::1;4017:427:1::0;32828:105:0::1;32948:54;-1:-1:-1::0;;;;;32948:11:0::1;:24;32981:10;32994:7:::0;32948:24:::1;:54::i;:::-;33051:22;::::0;::::1;::::0;33035:11;;:49:::1;::::0;33079:4:::1;::::0;33035:39:::1;::::0;:15:::1;:39::i;:49::-;33017:15;::::0;::::1;:67:::0;33104:26:::1;::::0;160:25:1;;;33110:10:0::1;::::0;33104:26:::1;::::0;148:2:1;133:18;33104:26:0::1;;;;;;;;32797:345;-1:-1:-1::0;;23698:1:0;24652:22;;-1:-1:-1;32514:635:0:o;31352:1154::-;23742:1;24340:7;;:19;24332:63;;;;-1:-1:-1;;;24332:63:0;;;;;;;:::i;:::-;23742:1;24473:7;:18;;;31432:10:::1;31415:28;::::0;;;::::1;::::0;;;;;;;;31447:15:::1;-1:-1:-1::0;31415:47:0::1;31407:92;;;::::0;-1:-1:-1;;;31407:92:0;;4651:2:1;31407:92:0::1;::::0;::::1;4633:21:1::0;;;4670:18;;;4663:30;4729:34;4709:18;;;4702:62;4781:18;;31407:92:0::1;4449:356:1::0;31407:92:0::1;31520:21;31544:8;31553:1;31544:11;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;31599:10:::1;31590:20:::0;;:8:::1;:20:::0;;;;;;31641:11;;31544::::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;31590:20:0;31663:13:::1;::::0;:10:::1;:13::i;:::-;31687:15;31705:70;31759:4;:15;;;31705:49;31749:4;31705:39;31721:4;:22;;;31705:4;:11;;;:15;;:39;;;;:::i;:70::-;31687:88:::0;-1:-1:-1;31789:11:0;;31786:217:::1;;31835:18;:16;:18::i;:::-;31824:7;:29;;31816:106;;;;-1:-1:-1::0;;;31816:106:0::1;;;;;;;:::i;:::-;31937:54;-1:-1:-1::0;;;;;31937:11:0::1;:24;31970:10;31983:7:::0;31937:24:::1;:54::i;:::-;32018:11:::0;;32015:165:::1;;32060:1;32046:15:::0;;;32076:11:::1;:22:::0;;32091:7;;32060:1;32076:22:::1;::::0;32091:7;;32076:22:::1;:::i;:::-;::::0;;;-1:-1:-1;;32113:12:0;;:55:::1;::::0;-1:-1:-1;;;;;32113:12:0::1;32147:10;32160:7:::0;32113:25:::1;:55::i;:::-;32226:22;::::0;::::1;::::0;32210:11;;:49:::1;::::0;32254:4:::1;::::0;32210:39:::1;::::0;:15:::1;:39::i;:49::-;32192:15;::::0;::::1;:67:::0;32283:11;;:15;32280:172:::1;;32363:12;::::0;32345:30:::1;::::0;:15:::1;:30;:::i;:::-;32331:10;32314:28;::::0;;;:16:::1;:28;::::0;;;;:61;32280:172:::1;;;32425:10;32439:1;32408:28:::0;;;:16:::1;:28;::::0;;;;:32;32280:172:::1;32469:29;::::0;160:25:1;;;32478:10:0::1;::::0;32469:29:::1;::::0;148:2:1;133:18;32469:29:0::1;;;;;;;;-1:-1:-1::0;;23698:1:0;24652:22;;-1:-1:-1;;31352:1154:0:o;28898:190::-;2380:6;;-1:-1:-1;;;;;2380:6:0;911:10;2380:22;2372:67;;;;-1:-1:-1;;;2372:67:0;;;;;;;:::i;:::-;28970:8:::1;:15:::0;28953:14:::1;28996:85;29024:6;29018:3;:12;28996:85;;;29054:15;29065:3;29054:10;:15::i;:::-;29032:5;::::0;::::1;:::i;:::-;;;28996:85;;;;28942:146;28898:190::o:0;2810:140::-;2380:6;;-1:-1:-1;;;;;2380:6:0;911:10;2380:22;2372:67;;;;-1:-1:-1;;;2372:67:0;;;;;;;:::i;:::-;2909:1:::1;2893:6:::0;;2872:40:::1;::::0;-1:-1:-1;;;;;2893:6:0;;::::1;::::0;2872:40:::1;::::0;2909:1;;2872:40:::1;2940:1;2923:19:::0;;-1:-1:-1;;;;;;2923:19:0::1;::::0;;2810:140::o;27140:207::-;2380:6;;-1:-1:-1;;;;;2380:6:0;911:10;2380:22;2372:67;;;;-1:-1:-1;;;2372:67:0;;;;;;;:::i;:::-;27201:8:::1;27210:1;27201:11;;;;;;;;:::i;:::-;;;;;;;;;;;:31;;;27236:11;27201:46;27193:86;;;::::0;-1:-1:-1;;;27193:86:0;;5715:2:1;27193:86:0::1;::::0;::::1;5697:21:1::0;5754:2;5734:18;;;5727:30;5793:29;5773:18;;;5766:57;5840:18;;27193:86:0::1;5513:351:1::0;27193:86:0::1;27324:15;27290:8;27299:1;27290:11;;;;;;;;:::i;:::-;;;;;;;;;;;:31;;:49;;;;27140:207::o:0;34713:133::-;34827:11;;34788:36;;-1:-1:-1;;;34788:36:0;;34818:4;34788:36;;;2082:51:1;34762:7:0;;34827:11;-1:-1:-1;;;;;34788:11:0;:21;;;;2055:18:1;;34788:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;;;;:::i;:::-;34781:57;;34713:133;:::o;27041:91::-;2380:6;;-1:-1:-1;;;;;2380:6:0;911:10;2380:22;2372:67;;;;-1:-1:-1;;;2372:67:0;;;;;;;:::i;:::-;27093:13:::1;27104:1;27093:10;:13::i;:::-;27123:1;27117:3;:7:::0;27041:91::o;34854:182::-;2380:6;;-1:-1:-1;;;;;2380:6:0;911:10;2380:22;2372:67;;;;-1:-1:-1;;;2372:67:0;;;;;;;:::i;:::-;34937:5:::1;34927:6;:15;;34919:62;;;::::0;-1:-1:-1;;;34919:62:0;;6071:2:1;34919:62:0::1;::::0;::::1;6053:21:1::0;6110:2;6090:18;;;6083:30;6149:34;6129:18;;;6122:62;-1:-1:-1;;;6200:18:1;;;6193:32;6242:19;;34919:62:0::1;5869:398:1::0;34919:62:0::1;34992:13;35003:1;34992:10;:13::i;:::-;35016:3;:12:::0;34854:182::o;35248:192::-;2380:6;;-1:-1:-1;;;;;2380:6:0;911:10;2380:22;2372:67;;;;-1:-1:-1;;;2372:67:0;;;;;;;:::i;:::-;35355:2:::1;35337:14;:20;;35329:60;;;::::0;-1:-1:-1;;;35329:60:0;;6474:2:1;35329:60:0::1;::::0;::::1;6456:21:1::0;6513:2;6493:18;;;6486:30;6552:29;6532:18;;;6525:57;6599:18;;35329:60:0::1;6272:351:1::0;35329:60:0::1;35400:15;:32:::0;35248:192::o;34298:405::-;34350:7;34370:21;34394:8;34403:1;34394:11;;;;;;;;:::i;:::-;;;;;;;;;;;34370:35;;34451:15;34424:4;:24;;;:42;34420:91;;;34494:1;34487:8;;;34298:405;:::o;34420:91::-;34521:22;34564:4;:24;;;34546:15;:42;;;;:::i;:::-;34521:67;;34599:14;34663:8;34655:5;34648:3;;34634:11;;34617:14;:28;;;;:::i;:::-;:34;;;;:::i;:::-;34616:44;;;;:::i;:::-;:55;;;;:::i;:::-;34599:72;34298:405;-1:-1:-1;;;;34298:405:0:o;29125:1410::-;23742:1;24340:7;;:19;24332:63;;;;-1:-1:-1;;;24332:63:0;;;;;;;:::i;:::-;23742:1;24473:7;:18;;;29212:10:::1;29195:28;::::0;;;::::1;::::0;;;;;;;;:33;;29192:125:::1;;29293:12;::::0;29275:30:::1;::::0;:15:::1;:30;:::i;:::-;29261:10;29244:28;::::0;;;:16:::1;:28;::::0;;;;:61;29192:125:::1;29327:21;29351:8;29360:1;29351:11;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;29406:10:::1;29397:20:::0;;:8:::1;:20:::0;;;;;;;29434:22:::1;::::0;29351:11:::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;29434:22:0::1;;29433:23;:38:::0;::::1;;;;29470:1;29460:7;:11;29433:38;29430:115;;;29495:11:::0;;:16;29487:46:::1;;;::::0;-1:-1:-1;;;29487:46:0;;7225:2:1;29487:46:0::1;::::0;::::1;7207:21:1::0;7264:2;7244:18;;;7237:30;-1:-1:-1;;;7283:18:1;;;7276:47;7340:18;;29487:46:0::1;7023:341:1::0;29487:46:0::1;29557:13;29568:1;29557:10;:13::i;:::-;29585:11:::0;;:15;29581:380:::1;;29617:15;29635:70;29689:4;:15;;;29635:49;29679:4;29635:39;29651:4;:22;;;29635:4;:11;;;:15;;:39;;;;:::i;:70::-;29617:88:::0;-1:-1:-1;29723:11:0;;29720:230:::1;;29774:18;:16;:18::i;:::-;29763:7;:29;;29755:106;;;;-1:-1:-1::0;;;29755:106:0::1;;;;;;;:::i;:::-;29880:54;-1:-1:-1::0;;;;;29880:11:0::1;:24;29913:10;29926:7:::0;29880:24:::1;:54::i;:::-;29602:359;29581:380;29971:25;30014:11:::0;;30011:393:::1;;30067:12:::0;;:37:::1;::::0;-1:-1:-1;;;30067:37:0;;30098:4:::1;30067:37;::::0;::::1;2082:51:1::0;30042:22:0::1;::::0;-1:-1:-1;;;;;30067:12:0::1;::::0;:22:::1;::::0;2055:18:1;;30067:37:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30119:12:::0;;30042:62;;-1:-1:-1;30119:74:0::1;::::0;-1:-1:-1;;;;;30119:12:0::1;30157:10;30178:4;30185:7:::0;30119:29:::1;:74::i;:::-;30228:12:::0;;:37:::1;::::0;-1:-1:-1;;;30228:37:0;;30259:4:::1;30228:37;::::0;::::1;2082:51:1::0;30268:14:0;;-1:-1:-1;;;;;30228:12:0::1;::::0;:22:::1;::::0;2055:18:1;;30228:37:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;;;:::i;:::-;30311:11:::0;;30208:74;;-1:-1:-1;30311:34:0::1;::::0;30208:74;30311:15:::1;:34::i;:::-;30297:48:::0;;30360:11:::1;:32:::0;;30375:17;;30360:11;30297::::1;::::0;30360:32:::1;::::0;30375:17;;30360:32:::1;:::i;:::-;::::0;;;-1:-1:-1;;;30011:393:0::1;30448:22;::::0;::::1;::::0;30432:11;;:49:::1;::::0;30476:4:::1;::::0;30432:39:::1;::::0;:15:::1;:39::i;:49::-;30414:15;::::0;::::1;:67:::0;30499:28:::1;::::0;160:25:1;;;30507:10:0::1;::::0;30499:28:::1;::::0;148:2:1;133:18;30499:28:0::1;14:177:1::0;35046:194:0;2380:6;;-1:-1:-1;;;;;2380:6:0;911:10;2380:22;2372:67;;;;-1:-1:-1;;;2372:67:0;;;;;;;:::i;:::-;35148:3:::1;35133:11;:18;;35125:61;;;::::0;-1:-1:-1;;;35125:61:0;;7571:2:1;35125:61:0::1;::::0;::::1;7553:21:1::0;7610:2;7590:18;;;7583:30;7649:32;7629:18;;;7622:60;7699:18;;35125:61:0::1;7369:354:1::0;35125:61:0::1;35212:20;:11:::0;35226:6:::1;35212:20;:::i;:::-;35197:12;:35:::0;-1:-1:-1;35046:194:0:o;33220:665::-;23742:1;24340:7;;:19;24332:63;;;;-1:-1:-1;;;24332:63:0;;;;;;;:::i;:::-;23742:1;24473:7;:18;;;;33282:21:::1;33306:8;33315:1;33306:11;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;33361:10:::1;33352:20:::0;;:8:::1;:20:::0;;;;;;33401:11;;33423::::1;:22:::0;;33306:11:::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;33352:20:0;;33401:11;;;;33423;33306;33423:22:::1;::::0;33401:11;;33423:22:::1;:::i;:::-;::::0;;;-1:-1:-1;;33559:10:0::1;33542:28;::::0;;;:16:::1;:28;::::0;;;;;33574:15:::1;-1:-1:-1::0;33539:120:0::1;;33644:3;33626:15;;33616:7;:25;;;;:::i;:::-;:31;;;;:::i;:::-;33605:42;::::0;;::::1;:::i;:::-;;;33539:120;33686:10;33700:1;33669:28:::0;;;:16:::1;:28;::::0;;;;:32;33712:12;;:55:::1;::::0;-1:-1:-1;;;;;33712:12:0;;::::1;::::0;33759:7;33712:25:::1;:55::i;:::-;33792:1;33778:15:::0;;;33804::::1;::::0;::::1;:19:::0;33839:38:::1;::::0;160:25:1;;;33857:10:0::1;::::0;33839:38:::1;::::0;148:2:1;133:18;33839:38:0::1;14:177:1::0;3105:109:0;2380:6;;-1:-1:-1;;;;;2380:6:0;911:10;2380:22;2372:67;;;;-1:-1:-1;;;2372:67:0;;;;;;;:::i;:::-;3178:28:::1;3197:8;3178:18;:28::i;27412:727::-:0;27473:7;27493:21;27517:8;27526:1;27517:11;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;27563:15:0;;;;:8;:15;;;;;;;27592:24;27517:11;;;;;;;27592:24;;;;27517:11;;-1:-1:-1;27620:11:0;27592:39;27589:78;;-1:-1:-1;27654:1:0;;27412:727;-1:-1:-1;;;27412:727:0:o;27589:78::-;27705:22;;;;;27757:11;;27801:24;;;;27783:15;:42;:59;;;;-1:-1:-1;27829:13:0;;;27783:59;27779:270;;;27859:19;27881:63;27928:15;;27881:42;27907:4;:15;;;27881:21;:19;:21::i;:::-;:25;;:42::i;:63::-;27859:85;-1:-1:-1;27979:58:0;28001:35;28027:8;28001:21;27859:85;28017:4;28001:15;:21::i;:35::-;27979:17;;:21;:58::i;:::-;27959:78;;27844:205;27779:270;28066:65;28115:4;:15;;;28066:44;28105:4;28066:34;28082:17;28066:4;:11;;;:15;;:34;;;;:::i;:65::-;28059:72;27412:727;-1:-1:-1;;;;;;27412:727:0:o;30543:753::-;23742:1;24340:7;;:19;24332:63;;;;-1:-1:-1;;;24332:63:0;;;;;;;:::i;:::-;23742:1;24473:7;:18;30604:22:::1;::::0;::::1;;30596:50;;;::::0;-1:-1:-1;;;30596:50:0;;7930:2:1;30596:50:0::1;::::0;::::1;7912:21:1::0;7969:2;7949:18;;;7942:30;-1:-1:-1;;;7988:18:1;;;7981:45;8043:18;;30596:50:0::1;7728:339:1::0;30596:50:0::1;30657:21;30681:8;30690:1;30681:11;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;30736:10:::1;30727:20:::0;;:8:::1;:20:::0;;;;;;30681:11:::1;::::0;;::::1;;::::0;-1:-1:-1;30727:20:0;30760:13:::1;::::0;:10:::1;:13::i;:::-;30788:11:::0;;:15;30784:389:::1;;30820:15;30838:70;30892:4;:15;;;30838:49;30882:4;30838:39;30854:4;:22;;;30838:4;:11;;;:15;;:39;;;;:::i;:70::-;30820:88:::0;-1:-1:-1;30926:11:0;;30923:239:::1;;30977:18;:16;:18::i;:::-;30966:7;:29;;30958:106;;;;-1:-1:-1::0;;;30958:106:0::1;;;;;;;:::i;:::-;31098:7;31083:4;:11;;;:22;;;;;;;:::i;:::-;;;;;;;;31139:7;31124:11;;:22;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;30923:239:0::1;30805:368;30784:389;31219:22;::::0;::::1;::::0;31203:11;;:49:::1;::::0;31247:4:::1;::::0;31203:39:::1;::::0;:15:::1;:39::i;:49::-;31185:15;::::0;::::1;:67:::0;31268:20:::1;::::0;31277:10:::1;::::0;31268:20:::1;::::0;;;::::1;-1:-1:-1::0;;23698:1:0;24652:22;;30543:753::o;13209:211::-;13353:58;;-1:-1:-1;;;;;8264:32:1;;13353:58:0;;;8246:51:1;8313:18;;;8306:34;;;13326:86:0;;13346:5;;-1:-1:-1;;;13376:23:0;8219:18:1;;13353:58:0;;;;-1:-1:-1;;13353:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;13353:58:0;-1:-1:-1;;;;;;13353:58:0;;;;;;;;;;13326:19;:86::i;:::-;13209:211;;;:::o;28215:600::-;28269:21;28293:8;28302:4;28293:14;;;;;;;;:::i;:::-;;;;;;;;;;;28269:38;;28341:4;:24;;;28322:15;:43;28318:82;;28382:7;28215:600;:::o;28318:82::-;28429:11;;28410:16;28455:13;;;28451:109;;-1:-1:-1;28512:15:0;28485:24;;;;:42;-1:-1:-1;28215:600:0:o;28451:109::-;28570:19;28592:63;28639:15;;28592:42;28618:4;:15;;;28592:21;:19;:21::i;:63::-;28570:85;-1:-1:-1;28691:63:0;28718:35;28744:8;28718:21;28570:85;28734:4;28718:15;:21::i;:35::-;28691:22;;;;;:26;:63::i;:::-;28666:22;;;:88;-1:-1:-1;;28792:15:0;28765:24;;;;:42;-1:-1:-1;28215:600:0:o;5784:471::-;5842:7;6087:1;6092;6087:6;6083:47;;-1:-1:-1;6117:1:0;6110:8;;6083:47;6142:9;6154:5;6158:1;6154;:5;:::i;:::-;6142:17;-1:-1:-1;6187:1:0;6178:5;6182:1;6142:17;6178:5;:::i;:::-;:10;6170:56;;;;-1:-1:-1;;;6170:56:0;;8553:2:1;6170:56:0;;;8535:21:1;8592:2;8572:18;;;8565:30;8631:34;8611:18;;;8604:62;-1:-1:-1;;;8682:18:1;;;8675:31;8723:19;;6170:56:0;8351:397:1;6170:56:0;6246:1;-1:-1:-1;5784:471:0;;;;;:::o;6731:132::-;6789:7;6816:39;6820:1;6823;6816:39;;;;;;;;;;;;;;;;;:3;:39::i;4860:136::-;4918:7;4945:43;4949:1;4952;4945:43;;;;;;;;;;;;;;;;;:3;:43::i;13428:248::-;13599:68;;-1:-1:-1;;;;;9011:15:1;;;13599:68:0;;;8993:34:1;9063:15;;9043:18;;;9036:43;9095:18;;;9088:34;;;13572:96:0;;13592:5;;-1:-1:-1;;;13622:27:0;8928:18:1;;13599:68:0;8753:375:1;13572:96:0;13428:248;;;;:::o;4396:181::-;4454:7;;4486:5;4490:1;4486;:5;:::i;:::-;4474:17;;4515:1;4510;:6;;4502:46;;;;-1:-1:-1;;;4502:46:0;;9335:2:1;4502:46:0;;;9317:21:1;9374:2;9354:18;;;9347:30;9413:29;9393:18;;;9386:57;9460:18;;4502:46:0;9133:351:1;3320:229:0;-1:-1:-1;;;;;3394:22:0;;3386:73;;;;-1:-1:-1;;;3386:73:0;;9691:2:1;3386:73:0;;;9673:21:1;9730:2;9710:18;;;9703:30;9769:34;9749:18;;;9742:62;-1:-1:-1;;;9820:18:1;;;9813:36;9866:19;;3386:73:0;9489:402:1;3386:73:0;3496:6;;;3475:38;;-1:-1:-1;;;;;3475:38:0;;;;3496:6;;;3475:38;;;3524:6;:17;;-1:-1:-1;;;;;;3524:17:0;-1:-1:-1;;;;;3524:17:0;;;;;;;;;;3320:229::o;15744:774::-;16168:23;16194:69;16222:4;16194:69;;;;;;;;;;;;;;;;;16202:5;-1:-1:-1;;;;;16194:27:0;;;:69;;;;;:::i;:::-;16278:17;;16168:95;;-1:-1:-1;16278:21:0;16274:237;;16433:10;16422:30;;;;;;;;;;;;:::i;:::-;16414:85;;;;-1:-1:-1;;;16414:85:0;;10348:2:1;16414:85:0;;;10330:21:1;10387:2;10367:18;;;10360:30;10426:34;10406:18;;;10399:62;-1:-1:-1;;;10477:18:1;;;10470:40;10527:19;;16414:85:0;10146:406:1;7359:312:0;7479:7;7514:12;7507:5;7499:28;;;;-1:-1:-1;;;7499:28:0;;;;;;;;:::i;:::-;-1:-1:-1;7538:9:0;7550:5;7554:1;7550;:5;:::i;:::-;7538:17;7359:312;-1:-1:-1;;;;;7359:312:0:o;5299:226::-;5419:7;5455:12;5447:6;;;;5439:29;;;;-1:-1:-1;;;5439:29:0;;;;;;;;:::i;:::-;-1:-1:-1;5479:9:0;5491:5;5495:1;5491;:5;:::i;20343:230::-;20480:12;20512:53;20535:6;20543:4;20549:1;20552:12;22004;22037:18;22048:6;22037:10;:18::i;:::-;22029:60;;;;-1:-1:-1;;;22029:60:0;;11415:2:1;22029:60:0;;;11397:21:1;11454:2;11434:18;;;11427:30;11493:31;11473:18;;;11466:59;11542:18;;22029:60:0;11213:353:1;22029:60:0;22163:12;22177:23;22204:6;-1:-1:-1;;;;;22204:11:0;22223:8;22233:4;22204:34;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22162:76;;;;22253:7;22249:595;;;22284:10;-1:-1:-1;22277:17:0;;-1:-1:-1;22277:17:0;22249:595;22398:17;;:21;22394:439;;22661:10;22655:17;22722:15;22709:10;22705:2;22701:19;22694:44;22394:439;22804:12;22797:20;;-1:-1:-1;;;22797:20:0;;;;;;;;:::i;17206:641::-;17266:4;17747:20;;17577:66;17796:23;;;;;;:42;;-1:-1:-1;;17823:15:0;;;17788:51;-1:-1:-1;;17206:641:0:o;196:118:1:-;282:5;275:13;268:21;261:5;258:32;248:60;;304:1;301;294:12;319:241;375:6;428:2;416:9;407:7;403:23;399:32;396:52;;;444:1;441;434:12;396:52;483:9;470:23;502:28;524:5;502:28;:::i;565:180::-;624:6;677:2;665:9;656:7;652:23;648:32;645:52;;;693:1;690;683:12;645:52;-1:-1:-1;716:23:1;;565:180;-1:-1:-1;565:180:1:o;1186:286::-;1245:6;1298:2;1286:9;1277:7;1273:23;1269:32;1266:52;;;1314:1;1311;1304:12;1266:52;1340:23;;-1:-1:-1;;;;;1392:31:1;;1382:42;;1372:70;;1438:1;1435;1428:12;2352:356;2554:2;2536:21;;;2573:18;;;2566:30;2632:34;2627:2;2612:18;;2605:62;2699:2;2684:18;;2352:356::o;2713:184::-;2783:6;2836:2;2824:9;2815:7;2811:23;2807:32;2804:52;;;2852:1;2849;2842:12;2804:52;-1:-1:-1;2875:16:1;;2713:184;-1:-1:-1;2713:184:1:o;2902:127::-;2963:10;2958:3;2954:20;2951:1;2944:31;2994:4;2991:1;2984:15;3018:4;3015:1;3008:15;3034:128;3101:9;;;3122:11;;;3119:37;;;3136:18;;:::i;3525:355::-;3727:2;3709:21;;;3766:2;3746:18;;;3739:30;3805:33;3800:2;3785:18;;3778:61;3871:2;3856:18;;3525:355::o;3885:127::-;3946:10;3941:3;3937:20;3934:1;3927:31;3977:4;3974:1;3967:15;4001:4;3998:1;3991:15;4810:428;5012:2;4994:21;;;5051:2;5031:18;;;5024:30;;;5090:34;5070:18;;;5063:62;5161:34;5156:2;5141:18;;5134:62;5228:3;5213:19;;4810:428::o;5243:125::-;5308:9;;;5329:10;;;5326:36;;;5342:18;;:::i;5373:135::-;5412:3;5433:17;;;5430:43;;5453:18;;:::i;:::-;-1:-1:-1;5500:1:1;5489:13;;5373:135::o;6628:168::-;6668:7;6734:1;6730;6726:6;6722:14;6719:1;6716:21;6711:1;6704:9;6697:17;6693:45;6690:71;;;6741:18;;:::i;:::-;-1:-1:-1;6781:9:1;;6628:168::o;6801:217::-;6841:1;6867;6857:132;;6911:10;6906:3;6902:20;6899:1;6892:31;6946:4;6943:1;6936:15;6974:4;6971:1;6964:15;6857:132;-1:-1:-1;7003:9:1;;6801:217::o;9896:245::-;9963:6;10016:2;10004:9;9995:7;9991:23;9987:32;9984:52;;;10032:1;10029;10022:12;9984:52;10064:9;10058:16;10083:28;10105:5;10083:28;:::i;10557:250::-;10642:1;10652:113;10666:6;10663:1;10660:13;10652:113;;;10742:11;;;10736:18;10723:11;;;10716:39;10688:2;10681:10;10652:113;;;-1:-1:-1;;10799:1:1;10781:16;;10774:27;10557:250::o;10812:396::-;10961:2;10950:9;10943:21;10924:4;10993:6;10987:13;11036:6;11031:2;11020:9;11016:18;11009:34;11052:79;11124:6;11119:2;11108:9;11104:18;11099:2;11091:6;11087:15;11052:79;:::i;:::-;11192:2;11171:15;-1:-1:-1;;11167:29:1;11152:45;;;;11199:2;11148:54;;10812:396;-1:-1:-1;;10812:396:1:o;11571:287::-;11700:3;11738:6;11732:13;11754:66;11813:6;11808:3;11801:4;11793:6;11789:17;11754:66;:::i;:::-;11836:16;;;;;11571:287;-1:-1:-1;;11571:287:1:o
Swarm Source
ipfs://7a1745a915ccf26a18b13cffe4fdcc197666132c15b128fcd55d27590861a8df
Loading...
Loading
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.