Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 6 from a total of 6 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withraw Unclaime... | 11177926 | 1410 days ago | IN | 0 ETH | 0.0014019 | ||||
Unstake | 11164583 | 1412 days ago | IN | 0 ETH | 0.001226 | ||||
New Stake | 11160004 | 1413 days ago | IN | 0 ETH | 0.00227078 | ||||
Transfer Ownersh... | 11139935 | 1416 days ago | IN | 0 ETH | 0.0018477 | ||||
Unstake | 11139850 | 1416 days ago | IN | 0 ETH | 0.00369539 | ||||
0x60806040 | 11139749 | 1416 days ago | IN | 0 ETH | 0.06573749 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
YFIECFarm
Compiler Version
v0.7.1+commit.f4a555be
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-10-27 */ // SPDX-License-Identifier: MIT pragma solidity ^0.7.1; /** * @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; } } /** * @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 in 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"); 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); } } } } /** * @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); } /* * @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; } } /* @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 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; } } contract YFIECFarm is Ownable { using SafeMath for uint256; uint256 public rewardDuration = 30 days; uint256 public rewardRate = 3e8; uint256 public allocation; uint256 public unclaimedReward; uint256 public stakingDecimals; IERC20 public rewardsToken; IERC20 public stakingToken; struct Stake { uint256 createdOn; uint256 amount; uint256 withdrawn; } mapping(address => Stake) stakes; constructor() { allocation = 3e10; unclaimedReward = allocation; stakingDecimals = 1e18; stakingToken = IERC20(0x1ac26A92E1f269a1d3aa508a2b731e4E04afc1E8); rewardsToken = IERC20(0x2E6E152d29053B6337E434bc9bE17504170f8a5B); } function createdDate(address _stake) external view returns(uint256) { return stakes[_stake].createdOn; } function withdrawn(address _stake) external view returns(uint256) { return stakes[_stake].withdrawn; } function stakedAmount(address _stake) external view returns(uint256) { return stakes[_stake].amount; } function newStake(uint256 _amount) public { require(_amount > 0, "Cannot stake zero"); uint256 prevAmount = stakes[_msgSender()].amount; if (prevAmount > 0) { withdraw(); } _amount = _amount.add(prevAmount); uint256 estimate = estimateReward(_amount); require(unclaimedReward >= estimate, "Allocation exhausted"); require(stakingToken.transferFrom(_msgSender(), address(this), _amount), "Could not transfer token"); unclaimedReward = unclaimedReward.sub(estimate); stakes[_msgSender()] = Stake({createdOn: block.timestamp, amount: _amount, withdrawn: 0}); emit NewStake(_msgSender(), _amount); } function unstake() public { Stake memory stake = stakes[_msgSender()]; uint256 amount = stake.amount; uint256 thisReward = _earning(stake); uint256 offset = estimateReward(amount).sub(thisReward); uint256 finalReward = thisReward.sub(stake.withdrawn); unclaimedReward = unclaimedReward.add(offset); require(rewardsToken.transfer(_msgSender(), finalReward), "Could not transfer reward token"); require(stakingToken.transfer(_msgSender(), amount), "Could not transfer staked token"); delete stakes[_msgSender()]; emit Unstake(_msgSender(), amount); } function withdraw() public { Stake storage stake = stakes[_msgSender()]; if (stake.amount > 0) { uint256 thisReward = _earning(stake).sub(stake.withdrawn); stake.withdrawn = stake.withdrawn.add(thisReward); require(rewardsToken.transfer(_msgSender(), thisReward), "Could not transfer token"); emit Withdrawal(_msgSender(), thisReward); } } function withrawUnclaimed(uint256 _amount) public onlyOwner { require(_amount <= unclaimedReward, "Not enough balance"); require(rewardsToken.balanceOf(address(this)) >= _amount, "Balance is less than amount"); require(rewardsToken.transfer(owner(), _amount), "Token transfer failed"); emit Withdrawal(owner(), _amount); unclaimedReward = unclaimedReward.sub(_amount); } function updateRewardRate(uint256 _rate) public onlyOwner { rewardRate = _rate; } function earning(address _stake) public view returns(uint256) { Stake memory stake = stakes[_stake]; return _earning(stake); } function _earning(Stake memory _stake) internal view returns(uint256) { uint256 duration = block.timestamp.sub(_stake.createdOn); if (duration > rewardDuration) { duration = rewardDuration; } return duration.mul(_stake.amount).mul(rewardRate).div(86400).div(stakingDecimals); } function estimateReward(uint256 _amount) public view returns(uint256) { return _amount.mul(rewardDuration).mul(rewardRate).div(86400).div(stakingDecimals); } event NewStake(address indexed staker, uint256 amount); event Unstake(address indexed staker, uint256 amount); event Withdrawal(address indexed staker, uint256 amount); }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NewStake","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":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Unstake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawal","type":"event"},{"inputs":[],"name":"allocation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_stake","type":"address"}],"name":"createdDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_stake","type":"address"}],"name":"earning","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"estimateReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"newStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_stake","type":"address"}],"name":"stakedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingDecimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unclaimedReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"updateRewardRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stake","type":"address"}],"name":"withdrawn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withrawUnclaimed","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405262278d006001556311e1a30060025534801561001f57600080fd5b50600061002a6100db565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506406fc23ac006003819055600455670de0b6b3a7640000600555600780546001600160a01b0319908116731ac26a92e1f269a1d3aa508a2b731e4e04afc1e81790915560068054909116732e6e152d29053b6337e434bc9be17504170f8a5b1790556100df565b3390565b611272806100ee6000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c80639ef3a261116100ad578063f2fde38b11610071578063f2fde38b14610241578063f4c0fab414610267578063f520e7e51461028d578063f993185514610295578063fb64884e146102bb57610121565b80639ef3a261146101ef578063c11f53441461020c578063cee83cee14610214578063d1af0c7d1461021c578063d2e875611461022457610121565b80636ef61092116100f45780636ef610921461018d57806372f702f3146101b35780637b0a47ee146101d757806388a17bde146101df5780638da5cb5b146101e757610121565b80630f1af35d146101265780631ec932ff146101455780632def66201461017d5780633ccfd60b14610185575b600080fd5b6101436004803603602081101561013c57600080fd5b50356102d8565b005b61016b6004803603602081101561015b57600080fd5b50356001600160a01b0316610587565b60408051918252519081900360200190f35b6101436105a2565b610143610887565b61016b600480360360208110156101a357600080fd5b50356001600160a01b0316610a2a565b6101bb610a48565b604080516001600160a01b039092168252519081900360200190f35b61016b610a57565b61016b610a5d565b6101bb610a63565b6101436004803603602081101561020557600080fd5b5035610a72565b61016b610ae1565b61016b610ae7565b6101bb610aed565b61016b6004803603602081101561023a57600080fd5b5035610afc565b6101436004803603602081101561025757600080fd5b50356001600160a01b0316610b38565b61016b6004803603602081101561027d57600080fd5b50356001600160a01b0316610c42565b61016b610c9c565b61016b600480360360208110156102ab57600080fd5b50356001600160a01b0316610ca2565b610143600480360360208110156102d157600080fd5b5035610cc0565b6102e0610f50565b6000546001600160a01b03908116911614610342576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60045481111561038e576040805162461bcd60e51b81526020600482015260126024820152714e6f7420656e6f7567682062616c616e636560701b604482015290519081900360640190fd5b600654604080516370a0823160e01b8152306004820152905183926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156103d857600080fd5b505afa1580156103ec573d6000803e3d6000fd5b505050506040513d602081101561040257600080fd5b50511015610457576040805162461bcd60e51b815260206004820152601b60248201527f42616c616e6365206973206c657373207468616e20616d6f756e740000000000604482015290519081900360640190fd5b6006546001600160a01b031663a9059cbb610470610a63565b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156104b757600080fd5b505af11580156104cb573d6000803e3d6000fd5b505050506040513d60208110156104e157600080fd5b505161052c576040805162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b604482015290519081900360640190fd5b610534610a63565b6001600160a01b03167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a26004546105819082610f54565b60045550565b6001600160a01b031660009081526008602052604090205490565b6105aa6111d4565b600860006105b6610f50565b6001600160a01b031681526020808201929092526040908101600090812082516060810184528154815260018201549481018590526002909101549281019290925290925061060483610f96565b9050600061061b8261061585610afc565b90610f54565b90506000610636856040015184610f5490919063ffffffff16565b6004549091506106469083610fe3565b6004556006546001600160a01b031663a9059cbb610662610f50565b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156106a957600080fd5b505af11580156106bd573d6000803e3d6000fd5b505050506040513d60208110156106d357600080fd5b5051610726576040805162461bcd60e51b815260206004820152601f60248201527f436f756c64206e6f74207472616e736665722072657761726420746f6b656e00604482015290519081900360640190fd5b6007546001600160a01b031663a9059cbb61073f610f50565b866040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561078657600080fd5b505af115801561079a573d6000803e3d6000fd5b505050506040513d60208110156107b057600080fd5b5051610803576040805162461bcd60e51b815260206004820152601f60248201527f436f756c64206e6f74207472616e73666572207374616b656420746f6b656e00604482015290519081900360640190fd5b6008600061080f610f50565b6001600160a01b03168152602081019190915260400160009081208181556001810182905560020155610840610f50565b6001600160a01b03167f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd856040518082815260200191505060405180910390a25050505050565b600060086000610895610f50565b6001600160a01b031681526020810191909152604001600020600181015490915015610a275760028101546040805160608101825283548152600184015460208201529081018290526000916108ee9161061590610f96565b60028301549091506109009082610fe3565b60028301556006546001600160a01b031663a9059cbb61091e610f50565b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561096557600080fd5b505af1158015610979573d6000803e3d6000fd5b505050506040513d602081101561098f57600080fd5b50516109dd576040805162461bcd60e51b815260206004820152601860248201527721b7bab632103737ba103a3930b739b332b9103a37b5b2b760411b604482015290519081900360640190fd5b6109e5610f50565b6001600160a01b03167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a2505b50565b6001600160a01b031660009081526008602052604090206002015490565b6007546001600160a01b031681565b60025481565b60035481565b6000546001600160a01b031690565b610a7a610f50565b6000546001600160a01b03908116911614610adc576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600255565b60055481565b60045481565b6006546001600160a01b031681565b6000610b32600554610b2c62015180610b2c600254610b266001548961103d90919063ffffffff16565b9061103d565b90611096565b92915050565b610b40610f50565b6000546001600160a01b03908116911614610ba2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116610be75760405162461bcd60e51b81526004018080602001828103825260268152602001806111f66026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610c4c6111d4565b506001600160a01b0382166000908152600860209081526040918290208251606081018452815481526001820154928101929092526002015491810191909152610c9581610f96565b9392505050565b60015481565b6001600160a01b031660009081526008602052604090206001015490565b60008111610d09576040805162461bcd60e51b815260206004820152601160248201527043616e6e6f74207374616b65207a65726f60781b604482015290519081900360640190fd5b600060086000610d17610f50565b6001600160a01b0316815260208101919091526040016000206001015490508015610d4457610d44610887565b610d4e8282610fe3565b91506000610d5b83610afc565b9050806004541015610dab576040805162461bcd60e51b8152602060048201526014602482015273105b1b1bd8d85d1a5bdb88195e1a185d5cdd195960621b604482015290519081900360640190fd5b6007546001600160a01b03166323b872dd610dc4610f50565b30866040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b158015610e1c57600080fd5b505af1158015610e30573d6000803e3d6000fd5b505050506040513d6020811015610e4657600080fd5b5051610e94576040805162461bcd60e51b815260206004820152601860248201527721b7bab632103737ba103a3930b739b332b9103a37b5b2b760411b604482015290519081900360640190fd5b600454610ea19082610f54565b6004819055506040518060600160405280428152602001848152602001600081525060086000610ecf610f50565b6001600160a01b031681526020808201929092526040908101600020835181559183015160018301559190910151600290910155610f0b610f50565b6001600160a01b03167f42e99fbad9601d25ee3bb515eeee966f97c3c383adadbe5720f651df8c18989d846040518082815260200191505060405180910390a2505050565b3390565b6000610c9583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506110d8565b80516000908190610fa8904290610f54565b9050600154811115610fb957506001545b610c95600554610b2c62015180610b2c600254610b2689602001518861103d90919063ffffffff16565b600082820183811015610c95576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008261104c57506000610b32565b8282028284828161105957fe5b0414610c955760405162461bcd60e51b815260040180806020018281038252602181526020018061121c6021913960400191505060405180910390fd5b6000610c9583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061116f565b600081848411156111675760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561112c578181015183820152602001611114565b50505050905090810190601f1680156111595780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836111be5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561112c578181015183820152602001611114565b5060008385816111ca57fe5b0495945050505050565b6040518060600160405280600081526020016000815260200160008152509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122069d03cb303dde33427555220f4cde784513b66c46f8f2846a8662996dbac25f064736f6c63430007010033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101215760003560e01c80639ef3a261116100ad578063f2fde38b11610071578063f2fde38b14610241578063f4c0fab414610267578063f520e7e51461028d578063f993185514610295578063fb64884e146102bb57610121565b80639ef3a261146101ef578063c11f53441461020c578063cee83cee14610214578063d1af0c7d1461021c578063d2e875611461022457610121565b80636ef61092116100f45780636ef610921461018d57806372f702f3146101b35780637b0a47ee146101d757806388a17bde146101df5780638da5cb5b146101e757610121565b80630f1af35d146101265780631ec932ff146101455780632def66201461017d5780633ccfd60b14610185575b600080fd5b6101436004803603602081101561013c57600080fd5b50356102d8565b005b61016b6004803603602081101561015b57600080fd5b50356001600160a01b0316610587565b60408051918252519081900360200190f35b6101436105a2565b610143610887565b61016b600480360360208110156101a357600080fd5b50356001600160a01b0316610a2a565b6101bb610a48565b604080516001600160a01b039092168252519081900360200190f35b61016b610a57565b61016b610a5d565b6101bb610a63565b6101436004803603602081101561020557600080fd5b5035610a72565b61016b610ae1565b61016b610ae7565b6101bb610aed565b61016b6004803603602081101561023a57600080fd5b5035610afc565b6101436004803603602081101561025757600080fd5b50356001600160a01b0316610b38565b61016b6004803603602081101561027d57600080fd5b50356001600160a01b0316610c42565b61016b610c9c565b61016b600480360360208110156102ab57600080fd5b50356001600160a01b0316610ca2565b610143600480360360208110156102d157600080fd5b5035610cc0565b6102e0610f50565b6000546001600160a01b03908116911614610342576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60045481111561038e576040805162461bcd60e51b81526020600482015260126024820152714e6f7420656e6f7567682062616c616e636560701b604482015290519081900360640190fd5b600654604080516370a0823160e01b8152306004820152905183926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156103d857600080fd5b505afa1580156103ec573d6000803e3d6000fd5b505050506040513d602081101561040257600080fd5b50511015610457576040805162461bcd60e51b815260206004820152601b60248201527f42616c616e6365206973206c657373207468616e20616d6f756e740000000000604482015290519081900360640190fd5b6006546001600160a01b031663a9059cbb610470610a63565b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156104b757600080fd5b505af11580156104cb573d6000803e3d6000fd5b505050506040513d60208110156104e157600080fd5b505161052c576040805162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b604482015290519081900360640190fd5b610534610a63565b6001600160a01b03167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a26004546105819082610f54565b60045550565b6001600160a01b031660009081526008602052604090205490565b6105aa6111d4565b600860006105b6610f50565b6001600160a01b031681526020808201929092526040908101600090812082516060810184528154815260018201549481018590526002909101549281019290925290925061060483610f96565b9050600061061b8261061585610afc565b90610f54565b90506000610636856040015184610f5490919063ffffffff16565b6004549091506106469083610fe3565b6004556006546001600160a01b031663a9059cbb610662610f50565b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156106a957600080fd5b505af11580156106bd573d6000803e3d6000fd5b505050506040513d60208110156106d357600080fd5b5051610726576040805162461bcd60e51b815260206004820152601f60248201527f436f756c64206e6f74207472616e736665722072657761726420746f6b656e00604482015290519081900360640190fd5b6007546001600160a01b031663a9059cbb61073f610f50565b866040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561078657600080fd5b505af115801561079a573d6000803e3d6000fd5b505050506040513d60208110156107b057600080fd5b5051610803576040805162461bcd60e51b815260206004820152601f60248201527f436f756c64206e6f74207472616e73666572207374616b656420746f6b656e00604482015290519081900360640190fd5b6008600061080f610f50565b6001600160a01b03168152602081019190915260400160009081208181556001810182905560020155610840610f50565b6001600160a01b03167f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd856040518082815260200191505060405180910390a25050505050565b600060086000610895610f50565b6001600160a01b031681526020810191909152604001600020600181015490915015610a275760028101546040805160608101825283548152600184015460208201529081018290526000916108ee9161061590610f96565b60028301549091506109009082610fe3565b60028301556006546001600160a01b031663a9059cbb61091e610f50565b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561096557600080fd5b505af1158015610979573d6000803e3d6000fd5b505050506040513d602081101561098f57600080fd5b50516109dd576040805162461bcd60e51b815260206004820152601860248201527721b7bab632103737ba103a3930b739b332b9103a37b5b2b760411b604482015290519081900360640190fd5b6109e5610f50565b6001600160a01b03167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a2505b50565b6001600160a01b031660009081526008602052604090206002015490565b6007546001600160a01b031681565b60025481565b60035481565b6000546001600160a01b031690565b610a7a610f50565b6000546001600160a01b03908116911614610adc576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600255565b60055481565b60045481565b6006546001600160a01b031681565b6000610b32600554610b2c62015180610b2c600254610b266001548961103d90919063ffffffff16565b9061103d565b90611096565b92915050565b610b40610f50565b6000546001600160a01b03908116911614610ba2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116610be75760405162461bcd60e51b81526004018080602001828103825260268152602001806111f66026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610c4c6111d4565b506001600160a01b0382166000908152600860209081526040918290208251606081018452815481526001820154928101929092526002015491810191909152610c9581610f96565b9392505050565b60015481565b6001600160a01b031660009081526008602052604090206001015490565b60008111610d09576040805162461bcd60e51b815260206004820152601160248201527043616e6e6f74207374616b65207a65726f60781b604482015290519081900360640190fd5b600060086000610d17610f50565b6001600160a01b0316815260208101919091526040016000206001015490508015610d4457610d44610887565b610d4e8282610fe3565b91506000610d5b83610afc565b9050806004541015610dab576040805162461bcd60e51b8152602060048201526014602482015273105b1b1bd8d85d1a5bdb88195e1a185d5cdd195960621b604482015290519081900360640190fd5b6007546001600160a01b03166323b872dd610dc4610f50565b30866040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b158015610e1c57600080fd5b505af1158015610e30573d6000803e3d6000fd5b505050506040513d6020811015610e4657600080fd5b5051610e94576040805162461bcd60e51b815260206004820152601860248201527721b7bab632103737ba103a3930b739b332b9103a37b5b2b760411b604482015290519081900360640190fd5b600454610ea19082610f54565b6004819055506040518060600160405280428152602001848152602001600081525060086000610ecf610f50565b6001600160a01b031681526020808201929092526040908101600020835181559183015160018301559190910151600290910155610f0b610f50565b6001600160a01b03167f42e99fbad9601d25ee3bb515eeee966f97c3c383adadbe5720f651df8c18989d846040518082815260200191505060405180910390a2505050565b3390565b6000610c9583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506110d8565b80516000908190610fa8904290610f54565b9050600154811115610fb957506001545b610c95600554610b2c62015180610b2c600254610b2689602001518861103d90919063ffffffff16565b600082820183811015610c95576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008261104c57506000610b32565b8282028284828161105957fe5b0414610c955760405162461bcd60e51b815260040180806020018281038252602181526020018061121c6021913960400191505060405180910390fd5b6000610c9583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061116f565b600081848411156111675760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561112c578181015183820152602001611114565b50505050905090810190601f1680156111595780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836111be5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561112c578181015183820152602001611114565b5060008385816111ca57fe5b0495945050505050565b6040518060600160405280600081526020016000815260200160008152509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122069d03cb303dde33427555220f4cde784513b66c46f8f2846a8662996dbac25f064736f6c63430007010033
Deployed Bytecode Sourcemap
16630:4425:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19642:420;;;;;;;;;;;;;;;;-1:-1:-1;19642:420:0;;:::i;:::-;;17419:118;;;;;;;;;;;;;;;;-1:-1:-1;17419:118:0;-1:-1:-1;;;;;17419:118:0;;:::i;:::-;;;;;;;;;;;;;;;;18539:653;;;:::i;19204:426::-;;;:::i;17549:116::-;;;;;;;;;;;;;;;;-1:-1:-1;17549:116:0;-1:-1:-1;;;;;17549:116:0;;:::i;16929:26::-;;;:::i;:::-;;;;-1:-1:-1;;;;;16929:26:0;;;;;;;;;;;;;;16752:31;;;:::i;16790:25::-;;;:::i;15933:79::-;;;:::i;20074:95::-;;;;;;;;;;;;;;;;-1:-1:-1;20074:95:0;;:::i;16859:30::-;;;:::i;16822:::-;;;:::i;16896:26::-;;;:::i;20691:171::-;;;;;;;;;;;;;;;;-1:-1:-1;20691:171:0;;:::i;16379:244::-;;;;;;;;;;;;;;;;-1:-1:-1;16379:244:0;-1:-1:-1;;;;;16379:244:0;;:::i;20181:149::-;;;;;;;;;;;;;;;;-1:-1:-1;20181:149:0;-1:-1:-1;;;;;20181:149:0;;:::i;16706:39::-;;;:::i;17677:116::-;;;;;;;;;;;;;;;;-1:-1:-1;17677:116:0;-1:-1:-1;;;;;17677:116:0;;:::i;17805:722::-;;;;;;;;;;;;;;;;-1:-1:-1;17805:722:0;;:::i;19642:420::-;16155:12;:10;:12::i;:::-;16145:6;;-1:-1:-1;;;;;16145:6:0;;;:22;;;16137:67;;;;;-1:-1:-1;;;16137:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19732:15:::1;;19721:7;:26;;19713:57;;;::::0;;-1:-1:-1;;;19713:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;19713:57:0;;;;;;;;;;;;;::::1;;19789:12;::::0;:37:::1;::::0;;-1:-1:-1;;;19789:37:0;;19820:4:::1;19789:37;::::0;::::1;::::0;;;19830:7;;-1:-1:-1;;;;;19789:12:0::1;::::0;:22:::1;::::0;:37;;;;;::::1;::::0;;;;;;;;:12;:37;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19789:37:0;:48:::1;;19781:88;;;::::0;;-1:-1:-1;;;19781:88:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;19888:12;::::0;-1:-1:-1;;;;;19888:12:0::1;:21;19910:7;:5;:7::i;:::-;19919;19888:39;;;;;;;;;;;;;-1:-1:-1::0;;;;;19888:39:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19888:39:0;19880:73:::1;;;::::0;;-1:-1:-1;;;19880:73:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;19880:73:0;;;;;;;;;;;;;::::1;;19980:7;:5;:7::i;:::-;-1:-1:-1::0;;;;;19969:28:0::1;;19989:7;19969:28;;;;;;;;;;;;;;;;;;20026:15;::::0;:28:::1;::::0;20046:7;20026:19:::1;:28::i;:::-;20008:15;:46:::0;-1:-1:-1;19642:420:0:o;17419:118::-;-1:-1:-1;;;;;17505:14:0;17478:7;17505:14;;;:6;:14;;;;;:24;;17419:118::o;18539:653::-;18576:18;;:::i;:::-;18597:6;:20;18604:12;:10;:12::i;:::-;-1:-1:-1;;;;;18597:20:0;;;;;;;;;;;;;;;-1:-1:-1;18597:20:0;;;18576:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18689:15:0;18576:41;18689:8;:15::i;:::-;18668:36;;18715:14;18732:38;18759:10;18732:22;18747:6;18732:14;:22::i;:::-;:26;;:38::i;:::-;18715:55;;18781:19;18803:31;18818:5;:15;;;18803:10;:14;;:31;;;;:::i;:::-;18863:15;;18781:53;;-1:-1:-1;18863:27:0;;18883:6;18863:19;:27::i;:::-;18845:15;:45;18909:12;;-1:-1:-1;;;;;18909:12:0;:21;18931:12;:10;:12::i;:::-;18945:11;18909:48;;;;;;;;;;;;;-1:-1:-1;;;;;18909:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18909:48:0;18901:92;;;;;-1:-1:-1;;;18901:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19012:12;;-1:-1:-1;;;;;19012:12:0;:21;19034:12;:10;:12::i;:::-;19048:6;19012:43;;;;;;;;;;;;;-1:-1:-1;;;;;19012:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19012:43:0;19004:87;;;;;-1:-1:-1;;;19004:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19119:6;:20;19126:12;:10;:12::i;:::-;-1:-1:-1;;;;;19119:20:0;;;;;;;;;;;;-1:-1:-1;19119:20:0;;;19112:27;;;;;;;;;;;;19163:12;:10;:12::i;:::-;-1:-1:-1;;;;;19155:29:0;;19177:6;19155:29;;;;;;;;;;;;;;;;;;18539:653;;;;;:::o;19204:426::-;19242:19;19264:6;:20;19271:12;:10;:12::i;:::-;-1:-1:-1;;;;;19264:20:0;;;;;;;;;;;;-1:-1:-1;19264:20:0;19299:12;;;;19264:20;;-1:-1:-1;19299:16:0;19295:328;;19373:15;;;;19353;;;;;;;;;;;;;;;;;;;;;;;;;;19332:18;;19353:36;;:15;;:8;:15::i;:36::-;19422:15;;;;19332:57;;-1:-1:-1;19422:31:0;;19332:57;19422:19;:31::i;:::-;19404:15;;;:49;19476:12;;-1:-1:-1;;;;;19476:12:0;:21;19498:12;:10;:12::i;:::-;19512:10;19476:47;;;;;;;;;;;;;-1:-1:-1;;;;;19476:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19476:47:0;19468:84;;;;;-1:-1:-1;;;19468:84:0;;;;;;;;;;;;-1:-1:-1;;;19468:84:0;;;;;;;;;;;;;;;19583:12;:10;:12::i;:::-;-1:-1:-1;;;;;19572:36:0;;19597:10;19572:36;;;;;;;;;;;;;;;;;;19295:328;;19204:426;:::o;17549:116::-;-1:-1:-1;;;;;17633:14:0;17606:7;17633:14;;;:6;:14;;;;;:24;;;;17549:116::o;16929:26::-;;;-1:-1:-1;;;;;16929:26:0;;:::o;16752:31::-;;;;:::o;16790:25::-;;;;:::o;15933:79::-;15971:7;15998:6;-1:-1:-1;;;;;15998:6:0;15933:79;:::o;20074:95::-;16155:12;:10;:12::i;:::-;16145:6;;-1:-1:-1;;;;;16145:6:0;;;:22;;;16137:67;;;;;-1:-1:-1;;;16137:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20143:10:::1;:18:::0;20074:95::o;16859:30::-;;;;:::o;16822:::-;;;;:::o;16896:26::-;;;-1:-1:-1;;;;;16896:26:0;;:::o;20691:171::-;20752:7;20779:75;20838:15;;20779:54;20827:5;20779:43;20811:10;;20779:27;20791:14;;20779:7;:11;;:27;;;;:::i;:::-;:31;;:43::i;:::-;:47;;:54::i;:75::-;20772:82;20691:171;-1:-1:-1;;20691:171:0:o;16379:244::-;16155:12;:10;:12::i;:::-;16145:6;;-1:-1:-1;;;;;16145:6:0;;;:22;;;16137:67;;;;;-1:-1:-1;;;16137:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16468:22:0;::::1;16460:73;;;;-1:-1:-1::0;;;16460:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16570:6;::::0;;16549:38:::1;::::0;-1:-1:-1;;;;;16549:38:0;;::::1;::::0;16570:6;::::1;::::0;16549:38:::1;::::0;::::1;16598:6;:17:::0;;-1:-1:-1;;;;;;16598:17:0::1;-1:-1:-1::0;;;;;16598:17:0;;;::::1;::::0;;;::::1;::::0;;16379:244::o;20181:149::-;20234:7;20254:18;;:::i;:::-;-1:-1:-1;;;;;;20275:14:0;;;;;;:6;:14;;;;;;;;;20254:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20307:15;20254:35;20307:8;:15::i;:::-;20300:22;20181:149;-1:-1:-1;;;20181:149:0:o;16706:39::-;;;;:::o;17677:116::-;-1:-1:-1;;;;;17764:14:0;17737:7;17764:14;;;:6;:14;;;;;:21;;;;17677:116::o;17805:722::-;17876:1;17866:7;:11;17858:41;;;;;-1:-1:-1;;;17858:41:0;;;;;;;;;;;;-1:-1:-1;;;17858:41:0;;;;;;;;;;;;;;;17910:18;17931:6;:20;17938:12;:10;:12::i;:::-;-1:-1:-1;;;;;17931:20:0;;;;;;;;;;;;-1:-1:-1;17931:20:0;:27;;;;-1:-1:-1;17983:14:0;;17979:57;;18014:10;:8;:10::i;:::-;18056:23;:7;18068:10;18056:11;:23::i;:::-;18046:33;;18090:16;18109:23;18124:7;18109:14;:23::i;:::-;18090:42;;18170:8;18151:15;;:27;;18143:60;;;;;-1:-1:-1;;;18143:60:0;;;;;;;;;;;;-1:-1:-1;;;18143:60:0;;;;;;;;;;;;;;;18222:12;;-1:-1:-1;;;;;18222:12:0;:25;18248:12;:10;:12::i;:::-;18270:4;18277:7;18222:63;;;;;;;;;;;;;-1:-1:-1;;;;;18222:63:0;;;;;;-1:-1:-1;;;;;18222:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18222:63:0;18214:100;;;;;-1:-1:-1;;;18214:100:0;;;;;;;;;;;;-1:-1:-1;;;18214:100:0;;;;;;;;;;;;;;;18343:15;;:29;;18363:8;18343:19;:29::i;:::-;18325:15;:47;;;;18406:66;;;;;;;;18424:15;18406:66;;;;18449:7;18406:66;;;;18469:1;18406:66;;;18383:6;:20;18390:12;:10;:12::i;:::-;-1:-1:-1;;;;;18383:20:0;;;;;;;;;;;;;;;-1:-1:-1;18383:20:0;:89;;;;;;;;;;;;;;;;;;;;;;18497:12;:10;:12::i;:::-;-1:-1:-1;;;;;18488:31:0;;18511:7;18488:31;;;;;;;;;;;;;;;;;;17805:722;;;:::o;14582:106::-;14670:10;14582:106;:::o;1364:136::-;1422:7;1449:43;1453:1;1456;1449:43;;;;;;;;;;;;;;;;;:3;:43::i;20348:331::-;20468:16;;20409:7;;;;20448:37;;:15;;:19;:37::i;:::-;20429:56;;20511:14;;20500:8;:25;20496:83;;;-1:-1:-1;20553:14:0;;20496:83;20596:75;20655:15;;20596:54;20644:5;20596:43;20628:10;;20596:27;20609:6;:13;;;20596:8;:12;;:27;;;;:::i;900:181::-;958:7;990:5;;;1014:6;;;;1006:46;;;;;-1:-1:-1;;;1006:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;2254:471;2312:7;2557:6;2553:47;;-1:-1:-1;2587:1:0;2580:8;;2553:47;2624:5;;;2628:1;2624;:5;:1;2648:5;;;;;:10;2640:56;;;;-1:-1:-1;;;2640:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3201:132;3259:7;3286:39;3290:1;3293;3286:39;;;;;;;;;;;;;;;;;:3;:39::i;1803:192::-;1889:7;1925:12;1917:6;;;;1909:29;;;;-1:-1:-1;;;1909:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1961:5:0;;;1803:192::o;3829:278::-;3915:7;3950:12;3943:5;3935:28;;;;-1:-1:-1;;;3935:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3974:9;3990:1;3986;:5;;;;;;;3829:278;-1:-1:-1;;;;;3829:278:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://69d03cb303dde33427555220f4cde784513b66c46f8f2846a8662996dbac25f0
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.