More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 17,896 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim Vested | 20825871 | 59 days ago | IN | 0 ETH | 0.00153262 | ||||
Claim Vested | 16950235 | 602 days ago | IN | 0 ETH | 0.00250418 | ||||
Claim Vested | 16869519 | 614 days ago | IN | 0 ETH | 0.00232513 | ||||
Claim Vested | 16637776 | 646 days ago | IN | 0 ETH | 0.00340675 | ||||
Claim Vested | 16584301 | 654 days ago | IN | 0 ETH | 0.00221213 | ||||
Claim Vested | 16312042 | 692 days ago | IN | 0 ETH | 0.00099162 | ||||
Claim Vested | 16307964 | 692 days ago | IN | 0 ETH | 0.00139671 | ||||
Claim Vested | 16307695 | 692 days ago | IN | 0 ETH | 0.00223111 | ||||
Claim Vested | 16306783 | 692 days ago | IN | 0 ETH | 0.00141895 | ||||
Claim Vested | 16298985 | 694 days ago | IN | 0 ETH | 0.0025884 | ||||
Claim Vested | 16279073 | 696 days ago | IN | 0 ETH | 0.002639 | ||||
Claim Vested | 16252841 | 700 days ago | IN | 0 ETH | 0.00086051 | ||||
Claim Vested | 16252139 | 700 days ago | IN | 0 ETH | 0.00078248 | ||||
Claim Vested | 16243015 | 701 days ago | IN | 0 ETH | 0.00155174 | ||||
Claim Vested | 16238100 | 702 days ago | IN | 0 ETH | 0.00152922 | ||||
Claim Vested | 16234676 | 702 days ago | IN | 0 ETH | 0.00122959 | ||||
Claim Vested | 16234651 | 702 days ago | IN | 0 ETH | 0.00109639 | ||||
Claim Vested | 16191918 | 708 days ago | IN | 0 ETH | 0.0016023 | ||||
Claim Vested | 16173467 | 711 days ago | IN | 0 ETH | 0.00189422 | ||||
Claim Vested | 16160606 | 713 days ago | IN | 0 ETH | 0.00156193 | ||||
Claim Vested | 16143033 | 715 days ago | IN | 0 ETH | 0.00153266 | ||||
Claim Vested | 16129466 | 717 days ago | IN | 0 ETH | 0.00165895 | ||||
Claim Vested | 16092379 | 722 days ago | IN | 0 ETH | 0.00125631 | ||||
Claim Vested | 16017573 | 733 days ago | IN | 0 ETH | 0.00125788 | ||||
Claim Vested | 15980092 | 738 days ago | IN | 0 ETH | 0.00104675 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
Migrator
Compiler Version
v0.5.15+commit.6a57276f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-09-18 */ pragma solidity 0.5.15; // YAM v2 to YAM v3 migrator contract /** * @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 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 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); } } } } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } /* * @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 () internal { } function _msgSender() internal view returns (address payable) { return 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 () internal { 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 { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface YAMv2 { function balanceOf(address owner) external view returns (uint256); } interface YAMv3 { function mint(address owner, uint256 amount) external; } /** * @title YAMv2 to V3 Token Migrator * @dev YAMv3 Mintable Token with migration from legacy contract. */ contract Migrator is Context, Ownable { using SafeMath for uint256; address public constant yamV2 = address(0xAba8cAc6866B83Ae4eec97DD07ED254282f6aD8A); address public yamV3; bool public token_initialized; bool public delegatorRewardsSet; uint256 public constant vestingDuration = 30 days; uint256 public constant delegatorVestingDuration = 90 days; uint256 public constant startTime = 1600444800; // Friday, September 18, 2020 4:00:00 PM uint256 public constant BASE = 10**18; mapping(address => uint256) public delegator_vesting; mapping(address => uint256) public delegator_claimed; mapping(address => uint256) public vesting; mapping(address => uint256) public claimed; constructor () public { } /** * @dev Sets yamV3 token address * */ function setV3Address(address yamV3_) public onlyOwner { require(!token_initialized, "already set"); token_initialized = true; yamV3 = yamV3_; } // Tells contract delegator rewards setting is done function delegatorRewardsDone() public onlyOwner { delegatorRewardsSet = true; } function vested(address who) public view returns (uint256) { // completion percentage of vesting uint256 vestedPerc = now.sub(startTime).mul(BASE).div(vestingDuration); uint256 delegatorVestedPerc = now.sub(startTime).mul(BASE).div(delegatorVestingDuration); if (vestedPerc > BASE) { vestedPerc = BASE; } if (delegatorVestedPerc > BASE) { delegatorVestedPerc = BASE; } // add to total vesting uint256 totalVesting = vesting[who]; // get redeemable total vested by checking how much time has passed uint256 totalVestingRedeemable = totalVesting.mul(vestedPerc).div(BASE); uint256 totalVestingDelegator = delegator_vesting[who].mul(delegatorVestedPerc).div(BASE); // get already claimed vested rewards uint256 alreadyClaimed = claimed[who].add(delegator_claimed[who]); // get current redeemable return totalVestingRedeemable.add(totalVestingDelegator).sub(alreadyClaimed); } modifier started() { require(block.timestamp >= startTime, "!started"); require(token_initialized, "!initialized"); require(delegatorRewardsSet, "!delegatorRewards"); _; } /** * @dev Migrate a users' entire balance * * One way function. YAMv2 tokens are BURNED. 1/2 YAMv3 tokens are minted instantly, other half vests over 1 month. */ function migrate() external started { // completion percentage of vesting uint256 vestedPerc = now.sub(startTime).mul(BASE).div(vestingDuration); // completion percentage of delegator vesting uint256 delegatorVestedPerc = now.sub(startTime).mul(BASE).div(delegatorVestingDuration); if (vestedPerc > BASE) { vestedPerc = BASE; } if (delegatorVestedPerc > BASE) { delegatorVestedPerc = BASE; } // gets the yamValue for a user. uint256 yamValue = YAMv2(yamV2).balanceOf(_msgSender()); // half is instant redeemable uint256 halfRedeemable = yamValue / 2; uint256 mintAmount; // scope { // add to total vesting uint256 totalVesting = vesting[_msgSender()].add(halfRedeemable); // update vesting vesting[_msgSender()] = totalVesting; // get redeemable total vested by checking how much time has passed uint256 totalVestingRedeemable = totalVesting.mul(vestedPerc).div(BASE); uint256 totalVestingDelegator = delegator_vesting[_msgSender()].mul(delegatorVestedPerc).div(BASE); // get already claimed uint256 alreadyClaimed = claimed[_msgSender()]; // get already claimed delegator uint256 alreadyClaimedDelegator = delegator_claimed[_msgSender()]; // get current redeemable uint256 currVested = totalVestingRedeemable.sub(alreadyClaimed); // get current redeemable delegator uint256 currVestedDelegator = totalVestingDelegator.sub(alreadyClaimedDelegator); // add instant redeemable to current redeemable to get mintAmount mintAmount = halfRedeemable.add(currVested).add(currVestedDelegator); // update claimed claimed[_msgSender()] = claimed[_msgSender()].add(currVested); // update delegator rewards claimed delegator_claimed[_msgSender()] = delegator_claimed[_msgSender()].add(currVestedDelegator); } // BURN YAMv2 - UNRECOVERABLE. SafeERC20.safeTransferFrom( IERC20(yamV2), _msgSender(), address(0x000000000000000000000000000000000000dEaD), yamValue ); // mint, this is in raw internalDecimals. Handled by updated _mint function YAMv3(yamV3).mint(_msgSender(), mintAmount); } function claimVested() external started { // completion percentage of vesting uint256 vestedPerc = now.sub(startTime).mul(BASE).div(vestingDuration); // completion percentage of delegator vesting uint256 delegatorVestedPerc = now.sub(startTime).mul(BASE).div(delegatorVestingDuration); if (vestedPerc > BASE) { vestedPerc = BASE; } if (delegatorVestedPerc > BASE) { delegatorVestedPerc = BASE; } // add to total vesting uint256 totalVesting = vesting[_msgSender()]; // get redeemable total vested by checking how much time has passed uint256 totalVestingRedeemable = totalVesting.mul(vestedPerc).div(BASE); uint256 totalVestingDelegator = delegator_vesting[_msgSender()].mul(delegatorVestedPerc).div(BASE); // get already claimed vested rewards uint256 alreadyClaimed = claimed[_msgSender()]; // get already claimed delegator uint256 alreadyClaimedDelegator = delegator_claimed[_msgSender()]; // get current redeemable uint256 currVested = totalVestingRedeemable.sub(alreadyClaimed); // get current redeemable delegator uint256 currVestedDelegator = totalVestingDelegator.sub(alreadyClaimedDelegator); // update claimed claimed[_msgSender()] = claimed[_msgSender()].add(currVested); // update delegator rewards claimed delegator_claimed[_msgSender()] = delegator_claimed[_msgSender()].add(currVestedDelegator); // mint, this is in raw internalDecimals. Handled by updated _mint function YAMv3(yamV3).mint(_msgSender(), currVested.add(currVestedDelegator)); } // this is a gas intensive airdrop of sorts function addDelegatorReward( address[] calldata delegators, uint256[] calldata amounts, bool under27 // indicates this batch is for those who delegated under 27 yams ) external onlyOwner { require(!delegatorRewardsSet, "set"); require(delegators.length == amounts.length, "!len"); if (!under27) { for (uint256 i = 0; i < delegators.length; i++) { delegator_vesting[delegators[i]] = amounts[i]; // must be on order of 1e24; } } else { for (uint256 i = 0; i < delegators.length; i++) { delegator_vesting[delegators[i]] = 27 * 10**24; // flat distribution; } } } // if people are dumb and send tokens here, give governance ability to save them. function rescueTokens( address token, address to, uint256 amount ) external onlyOwner { // transfer to SafeERC20.safeTransfer(IERC20(token), to, amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"constant":true,"inputs":[],"name":"BASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"delegators","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bool","name":"under27","type":"bool"}],"name":"addDelegatorReward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimVested","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"delegatorRewardsDone","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"delegatorRewardsSet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"delegatorVestingDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"delegator_claimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"delegator_vesting","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"migrate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"yamV3_","type":"address"}],"name":"setV3Address","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token_initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"vested","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"vesting","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"vestingDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"yamV2","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"yamV3","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b5060006100246001600160e01b0361007316565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350610077565b3390565b612120806100866000396000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c8063a3fa39f3116100d8578063cea9d26f1161008c578063e388c42311610066578063e388c4231461043e578063ec342ad014610471578063f2fde38b1461047957610182565b8063cea9d26f146103eb578063d01c44cd1461042e578063d25138221461043657610182565b8063b5e6cb82116100bd578063b5e6cb82146103a8578063bfcc4b47146103b0578063c884ef83146103b857610182565b8063a3fa39f31461036d578063b089e355146103a057610182565b806378e979251161013a5780638da5cb5b116101145780638da5cb5b1461032a5780638fd3ab80146103325780639de46af11461033a57610182565b806378e979251461022d5780637dbddb0214610235578063822bcec51461026657610182565b8063637b1c4f1161016b578063637b1c4f146101d45780637102b728146101f0578063715018a61461022357610182565b8063134c7e04146101875780631514617e146101cc575b600080fd5b6101ba6004803603602081101561019d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166104ac565b60408051918252519081900360200190f35b6101ba6104be565b6101dc6104c5565b604080519115158252519081900360200190f35b6101ba6004803603602081101561020657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166104e6565b61022b61068a565b005b6101ba61078a565b61023d610792565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61022b6004803603606081101561027c57600080fd5b81019060208101813564010000000081111561029757600080fd5b8201836020820111156102a957600080fd5b803590602001918460208302840111640100000000831117156102cb57600080fd5b9193909290916020810190356401000000008111156102e957600080fd5b8201836020820111156102fb57600080fd5b8035906020019184602083028401116401000000008311171561031d57600080fd5b91935091503515156107ae565b61023d610a13565b61022b610a2f565b61022b6004803603602081101561035057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611048565b6101ba6004803603602081101561038357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166111e5565b6101dc6111f7565b61023d611219565b61022b611231565b6101ba600480360360208110156103ce57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611304565b61022b6004803603606081101561040157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135611316565b61022b6113b7565b6101ba61183a565b6101ba6004803603602081101561045457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611841565b6101ba611853565b61022b6004803603602081101561048f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661185f565b60026020526000908152604090205481565b62278d0081565b60015474010000000000000000000000000000000000000000900460ff1681565b60008061052862278d0061051c670de0b6b3a764000061051042635f64d98063ffffffff6119e916565b9063ffffffff611a3416565b9063ffffffff611aa716565b905060006105536276a70061051c670de0b6b3a764000061051042635f64d98063ffffffff6119e916565b9050670de0b6b3a764000082111561057157670de0b6b3a764000091505b670de0b6b3a764000081111561058c5750670de0b6b3a76400005b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020526040812054906105cf670de0b6b3a764000061051c848763ffffffff611a3416565b73ffffffffffffffffffffffffffffffffffffffff87166000908152600260205260408120549192509061061790670de0b6b3a76400009061051c908763ffffffff611a3416565b73ffffffffffffffffffffffffffffffffffffffff88166000908152600360209081526040808320546005909252822054929350909161065c9163ffffffff611ae916565b905061067e81610672858563ffffffff611ae916565b9063ffffffff6119e916565b98975050505050505050565b610692611b5d565b60005473ffffffffffffffffffffffffffffffffffffffff90811691161461071b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b635f64d98081565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b6107b6611b5d565b60005473ffffffffffffffffffffffffffffffffffffffff90811691161461083f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001547501000000000000000000000000000000000000000000900460ff16156108ca57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f7365740000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b83821461093a57604080517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048083019190915260248201527f216c656e00000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b806109ab5760005b848110156109a55783838281811061095657fe5b905060200201356002600088888581811061096d57fe5b6020908102929092013573ffffffffffffffffffffffffffffffffffffffff1683525081019190915260400160002055600101610942565b50610a0c565b60005b84811015610a0a576a165578eecf9d0ffb000000600260008888858181106109d257fe5b6020908102929092013573ffffffffffffffffffffffffffffffffffffffff16835250810191909152604001600020556001016109ae565b505b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b635f64d980421015610aa257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f2173746172746564000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60015474010000000000000000000000000000000000000000900460ff16610b2b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f21696e697469616c697a65640000000000000000000000000000000000000000604482015290519081900360640190fd5b6001547501000000000000000000000000000000000000000000900460ff16610bb557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f2164656c656761746f7252657761726473000000000000000000000000000000604482015290519081900360640190fd5b6000610bde62278d0061051c670de0b6b3a764000061051042635f64d98063ffffffff6119e916565b90506000610c096276a70061051c670de0b6b3a764000061051042635f64d98063ffffffff6119e916565b9050670de0b6b3a7640000821115610c2757670de0b6b3a764000091505b670de0b6b3a7640000811115610c425750670de0b6b3a76400005b600073aba8cac6866b83ae4eec97dd07ed254282f6ad8a6370a08231610c66611b5d565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610cc657600080fd5b505afa158015610cda573d6000803e3d6000fd5b505050506040513d6020811015610cf057600080fd5b5051905060028104600080610d3d83600483610d0a611b5d565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020549063ffffffff611ae916565b90508060046000610d4c611b5d565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600090812091909155610d94670de0b6b3a764000061051c848a63ffffffff611a3416565b90506000610de7670de0b6b3a764000061051c8960026000610db4611b5d565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020549063ffffffff611a3416565b9050600060056000610df7611b5d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600060036000610e42611b5d565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000908120549150610e7d858463ffffffff6119e916565b90506000610e91858463ffffffff6119e916565b9050610eb381610ea78b8563ffffffff611ae916565b9063ffffffff611ae916565b9750610ec58260056000610d0a611b5d565b60056000610ed1611b5d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f1f8160036000610d0a611b5d565b60036000610f2b611b5d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505050505050610f9973aba8cac6866b83ae4eec97dd07ed254282f6ad8a610f90611b5d565b61dead86611b61565b60015473ffffffffffffffffffffffffffffffffffffffff166340c10f19610fbf611b5d565b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561102957600080fd5b505af115801561103d573d6000803e3d6000fd5b505050505050505050565b611050611b5d565b60005473ffffffffffffffffffffffffffffffffffffffff9081169116146110d957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60015474010000000000000000000000000000000000000000900460ff161561116357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f616c726561647920736574000000000000000000000000000000000000000000604482015290519081900360640190fd5b60018054740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909116177fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60036020526000908152604090205481565b6001547501000000000000000000000000000000000000000000900460ff1681565b73aba8cac6866b83ae4eec97dd07ed254282f6ad8a81565b611239611b5d565b60005473ffffffffffffffffffffffffffffffffffffffff9081169116146112c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600180547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055565b60056020526000908152604090205481565b61131e611b5d565b60005473ffffffffffffffffffffffffffffffffffffffff9081169116146113a757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6113b2838383611bfc565b505050565b635f64d98042101561142a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f2173746172746564000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60015474010000000000000000000000000000000000000000900460ff166114b357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f21696e697469616c697a65640000000000000000000000000000000000000000604482015290519081900360640190fd5b6001547501000000000000000000000000000000000000000000900460ff1661153d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f2164656c656761746f7252657761726473000000000000000000000000000000604482015290519081900360640190fd5b600061156662278d0061051c670de0b6b3a764000061051042635f64d98063ffffffff6119e916565b905060006115916276a70061051c670de0b6b3a764000061051042635f64d98063ffffffff6119e916565b9050670de0b6b3a76400008211156115af57670de0b6b3a764000091505b670de0b6b3a76400008111156115ca5750670de0b6b3a76400005b6000600460006115d8611b5d565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600090812054915061161f670de0b6b3a764000061051c848763ffffffff611a3416565b9050600061163f670de0b6b3a764000061051c8660026000610db4611b5d565b905060006005600061164f611b5d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006003600061169a611b5d565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160009081205491506116d5858463ffffffff6119e916565b905060006116e9858463ffffffff6119e916565b90506116fb8260056000610d0a611b5d565b60056000611707611b5d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117558160036000610d0a611b5d565b60036000611761611b5d565b73ffffffffffffffffffffffffffffffffffffffff9081168252602082019290925260400160002091909155600154166340c10f1961179e611b5d565b6117ae858563ffffffff611ae916565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561181757600080fd5b505af115801561182b573d6000803e3d6000fd5b50505050505050505050505050565b6276a70081565b60046020526000908152604090205481565b670de0b6b3a764000081565b611867611b5d565b60005473ffffffffffffffffffffffffffffffffffffffff9081169116146118f057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811661195c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061207b6026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000611a2b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611c89565b90505b92915050565b600082611a4357506000611a2e565b82820282848281611a5057fe5b0414611a2b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806120a16021913960400191505060405180910390fd5b6000611a2b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611d3a565b600082820183811015611a2b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3390565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052611bf6908590611db9565b50505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526113b2908490611db9565b60008184841115611d32576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611cf7578181015183820152602001611cdf565b50505050905090810190601f168015611d245780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183611da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152835160248401528351909283926044909101919085019080838360008315611cf7578181015183820152602001611cdf565b506000838581611daf57fe5b0495945050505050565b6060611e1b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611e919092919063ffffffff16565b8051909150156113b257808060200190516020811015611e3a57600080fd5b50516113b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806120c2602a913960400191505060405180910390fd5b6060611ea08484600085611ea8565b949350505050565b6060611eb385612074565b611f1e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310611f8857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611f4b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611fea576040519150601f19603f3d011682016040523d82523d6000602084013e611fef565b606091505b50915091508115612003579150611ea09050565b8051156120135780518082602001fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152865160248401528651879391928392604401919085019080838360008315611cf7578181015183820152602001611cdf565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a72315820b7775443d5022678a158c05180f4d576ba69d8a804ca873c8d7e253d135684f964736f6c634300050f0032
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101825760003560e01c8063a3fa39f3116100d8578063cea9d26f1161008c578063e388c42311610066578063e388c4231461043e578063ec342ad014610471578063f2fde38b1461047957610182565b8063cea9d26f146103eb578063d01c44cd1461042e578063d25138221461043657610182565b8063b5e6cb82116100bd578063b5e6cb82146103a8578063bfcc4b47146103b0578063c884ef83146103b857610182565b8063a3fa39f31461036d578063b089e355146103a057610182565b806378e979251161013a5780638da5cb5b116101145780638da5cb5b1461032a5780638fd3ab80146103325780639de46af11461033a57610182565b806378e979251461022d5780637dbddb0214610235578063822bcec51461026657610182565b8063637b1c4f1161016b578063637b1c4f146101d45780637102b728146101f0578063715018a61461022357610182565b8063134c7e04146101875780631514617e146101cc575b600080fd5b6101ba6004803603602081101561019d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166104ac565b60408051918252519081900360200190f35b6101ba6104be565b6101dc6104c5565b604080519115158252519081900360200190f35b6101ba6004803603602081101561020657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166104e6565b61022b61068a565b005b6101ba61078a565b61023d610792565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61022b6004803603606081101561027c57600080fd5b81019060208101813564010000000081111561029757600080fd5b8201836020820111156102a957600080fd5b803590602001918460208302840111640100000000831117156102cb57600080fd5b9193909290916020810190356401000000008111156102e957600080fd5b8201836020820111156102fb57600080fd5b8035906020019184602083028401116401000000008311171561031d57600080fd5b91935091503515156107ae565b61023d610a13565b61022b610a2f565b61022b6004803603602081101561035057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611048565b6101ba6004803603602081101561038357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166111e5565b6101dc6111f7565b61023d611219565b61022b611231565b6101ba600480360360208110156103ce57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611304565b61022b6004803603606081101561040157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135611316565b61022b6113b7565b6101ba61183a565b6101ba6004803603602081101561045457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611841565b6101ba611853565b61022b6004803603602081101561048f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661185f565b60026020526000908152604090205481565b62278d0081565b60015474010000000000000000000000000000000000000000900460ff1681565b60008061052862278d0061051c670de0b6b3a764000061051042635f64d98063ffffffff6119e916565b9063ffffffff611a3416565b9063ffffffff611aa716565b905060006105536276a70061051c670de0b6b3a764000061051042635f64d98063ffffffff6119e916565b9050670de0b6b3a764000082111561057157670de0b6b3a764000091505b670de0b6b3a764000081111561058c5750670de0b6b3a76400005b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020526040812054906105cf670de0b6b3a764000061051c848763ffffffff611a3416565b73ffffffffffffffffffffffffffffffffffffffff87166000908152600260205260408120549192509061061790670de0b6b3a76400009061051c908763ffffffff611a3416565b73ffffffffffffffffffffffffffffffffffffffff88166000908152600360209081526040808320546005909252822054929350909161065c9163ffffffff611ae916565b905061067e81610672858563ffffffff611ae916565b9063ffffffff6119e916565b98975050505050505050565b610692611b5d565b60005473ffffffffffffffffffffffffffffffffffffffff90811691161461071b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b635f64d98081565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b6107b6611b5d565b60005473ffffffffffffffffffffffffffffffffffffffff90811691161461083f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001547501000000000000000000000000000000000000000000900460ff16156108ca57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f7365740000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b83821461093a57604080517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048083019190915260248201527f216c656e00000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b806109ab5760005b848110156109a55783838281811061095657fe5b905060200201356002600088888581811061096d57fe5b6020908102929092013573ffffffffffffffffffffffffffffffffffffffff1683525081019190915260400160002055600101610942565b50610a0c565b60005b84811015610a0a576a165578eecf9d0ffb000000600260008888858181106109d257fe5b6020908102929092013573ffffffffffffffffffffffffffffffffffffffff16835250810191909152604001600020556001016109ae565b505b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b635f64d980421015610aa257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f2173746172746564000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60015474010000000000000000000000000000000000000000900460ff16610b2b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f21696e697469616c697a65640000000000000000000000000000000000000000604482015290519081900360640190fd5b6001547501000000000000000000000000000000000000000000900460ff16610bb557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f2164656c656761746f7252657761726473000000000000000000000000000000604482015290519081900360640190fd5b6000610bde62278d0061051c670de0b6b3a764000061051042635f64d98063ffffffff6119e916565b90506000610c096276a70061051c670de0b6b3a764000061051042635f64d98063ffffffff6119e916565b9050670de0b6b3a7640000821115610c2757670de0b6b3a764000091505b670de0b6b3a7640000811115610c425750670de0b6b3a76400005b600073aba8cac6866b83ae4eec97dd07ed254282f6ad8a6370a08231610c66611b5d565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610cc657600080fd5b505afa158015610cda573d6000803e3d6000fd5b505050506040513d6020811015610cf057600080fd5b5051905060028104600080610d3d83600483610d0a611b5d565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020549063ffffffff611ae916565b90508060046000610d4c611b5d565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600090812091909155610d94670de0b6b3a764000061051c848a63ffffffff611a3416565b90506000610de7670de0b6b3a764000061051c8960026000610db4611b5d565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020549063ffffffff611a3416565b9050600060056000610df7611b5d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600060036000610e42611b5d565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000908120549150610e7d858463ffffffff6119e916565b90506000610e91858463ffffffff6119e916565b9050610eb381610ea78b8563ffffffff611ae916565b9063ffffffff611ae916565b9750610ec58260056000610d0a611b5d565b60056000610ed1611b5d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f1f8160036000610d0a611b5d565b60036000610f2b611b5d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505050505050610f9973aba8cac6866b83ae4eec97dd07ed254282f6ad8a610f90611b5d565b61dead86611b61565b60015473ffffffffffffffffffffffffffffffffffffffff166340c10f19610fbf611b5d565b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561102957600080fd5b505af115801561103d573d6000803e3d6000fd5b505050505050505050565b611050611b5d565b60005473ffffffffffffffffffffffffffffffffffffffff9081169116146110d957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60015474010000000000000000000000000000000000000000900460ff161561116357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f616c726561647920736574000000000000000000000000000000000000000000604482015290519081900360640190fd5b60018054740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909116177fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60036020526000908152604090205481565b6001547501000000000000000000000000000000000000000000900460ff1681565b73aba8cac6866b83ae4eec97dd07ed254282f6ad8a81565b611239611b5d565b60005473ffffffffffffffffffffffffffffffffffffffff9081169116146112c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600180547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055565b60056020526000908152604090205481565b61131e611b5d565b60005473ffffffffffffffffffffffffffffffffffffffff9081169116146113a757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6113b2838383611bfc565b505050565b635f64d98042101561142a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f2173746172746564000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60015474010000000000000000000000000000000000000000900460ff166114b357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f21696e697469616c697a65640000000000000000000000000000000000000000604482015290519081900360640190fd5b6001547501000000000000000000000000000000000000000000900460ff1661153d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f2164656c656761746f7252657761726473000000000000000000000000000000604482015290519081900360640190fd5b600061156662278d0061051c670de0b6b3a764000061051042635f64d98063ffffffff6119e916565b905060006115916276a70061051c670de0b6b3a764000061051042635f64d98063ffffffff6119e916565b9050670de0b6b3a76400008211156115af57670de0b6b3a764000091505b670de0b6b3a76400008111156115ca5750670de0b6b3a76400005b6000600460006115d8611b5d565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600090812054915061161f670de0b6b3a764000061051c848763ffffffff611a3416565b9050600061163f670de0b6b3a764000061051c8660026000610db4611b5d565b905060006005600061164f611b5d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060006003600061169a611b5d565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160009081205491506116d5858463ffffffff6119e916565b905060006116e9858463ffffffff6119e916565b90506116fb8260056000610d0a611b5d565b60056000611707611b5d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117558160036000610d0a611b5d565b60036000611761611b5d565b73ffffffffffffffffffffffffffffffffffffffff9081168252602082019290925260400160002091909155600154166340c10f1961179e611b5d565b6117ae858563ffffffff611ae916565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561181757600080fd5b505af115801561182b573d6000803e3d6000fd5b50505050505050505050505050565b6276a70081565b60046020526000908152604090205481565b670de0b6b3a764000081565b611867611b5d565b60005473ffffffffffffffffffffffffffffffffffffffff9081169116146118f057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811661195c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061207b6026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000611a2b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611c89565b90505b92915050565b600082611a4357506000611a2e565b82820282848281611a5057fe5b0414611a2b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806120a16021913960400191505060405180910390fd5b6000611a2b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611d3a565b600082820183811015611a2b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3390565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052611bf6908590611db9565b50505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526113b2908490611db9565b60008184841115611d32576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611cf7578181015183820152602001611cdf565b50505050905090810190601f168015611d245780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183611da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152835160248401528351909283926044909101919085019080838360008315611cf7578181015183820152602001611cdf565b506000838581611daf57fe5b0495945050505050565b6060611e1b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611e919092919063ffffffff16565b8051909150156113b257808060200190516020811015611e3a57600080fd5b50516113b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806120c2602a913960400191505060405180910390fd5b6060611ea08484600085611ea8565b949350505050565b6060611eb385612074565b611f1e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310611f8857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611f4b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611fea576040519150601f19603f3d011682016040523d82523d6000602084013e611fef565b606091505b50915091508115612003579150611ea09050565b8051156120135780518082602001fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152865160248401528651879391928392604401919085019080838360008315611cf7578181015183820152602001611cdf565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a72315820b7775443d5022678a158c05180f4d576ba69d8a804ca873c8d7e253d135684f964736f6c634300050f0032
Deployed Bytecode Sourcemap
21211:8174:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21211:8174:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21759:52;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21759:52:0;;;;:::i;:::-;;;;;;;;;;;;;;;;21492:49;;;:::i;21414:29::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;22434:1025;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22434:1025:0;;;;:::i;20378:140::-;;;:::i;:::-;;21617:46;;;:::i;21385:20::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28304:750;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28304:750:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;28304:750:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;28304:750:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28304:750:0;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;28304:750:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;28304:750:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28304:750:0;;-1:-1:-1;28304:750:0;-1:-1:-1;28304:750:0;;;;:::i;19736:79::-;;;:::i;23881:2577::-;;;:::i;22089:176::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22089:176:0;;;;:::i;21820:52::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21820:52:0;;;;:::i;21452:31::-;;;:::i;21293:83::-;;;:::i;22330:94::-;;;:::i;21932:42::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21932:42:0;;;;:::i;29149:233::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29149:233:0;;;;;;;;;;;;;;;;;;:::i;26468:1777::-;;;:::i;21550:58::-;;;:::i;21881:42::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21881:42:0;;;;:::i;21713:37::-;;;:::i;20673:236::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20673:236:0;;;;:::i;21759:52::-;;;;;;;;;;;;;:::o;21492:49::-;21534:7;21492:49;:::o;21414:29::-;;;;;;;;;:::o;22434:1025::-;22484:7;;22566:49;21534:7;22566:28;21744:6;22566:18;:3;21653:10;22566:18;:7;:18;:::i;:::-;:22;:28;:22;:28;:::i;:::-;:32;:49;:32;:49;:::i;:::-;22545:70;-1:-1:-1;22626:27:0;22656:58;21601:7;22656:28;21744:6;22656:18;:3;21653:10;22656:18;:7;:18;:::i;:58::-;22626:88;;21744:6;22729:10;:17;22725:63;;;21744:6;22761:17;;22725:63;21744:6;22800:19;:26;22796:81;;;-1:-1:-1;21744:6:0;22796:81;22941:12;;;22918:20;22941:12;;;:7;:12;;;;;;;23072:38;21744:6;23072:28;22941:12;23089:10;23072:28;:16;:28;:::i;:38::-;23153:22;;;23121:29;23153:22;;;:17;:22;;;;;;23039:71;;-1:-1:-1;23121:29:0;23153:57;;21744:6;;23153:47;;23180:19;23153:47;:26;:47;:::i;:57::-;23308:22;;;23266;23308;;;:17;:22;;;;;;;;;23291:7;:12;;;;;;23121:89;;-1:-1:-1;23266:22:0;;23291:40;;;:16;:40;:::i;:::-;23266:65;-1:-1:-1;23382:69:0;23266:65;23382:49;:22;23409:21;23382:49;:26;:49;:::i;:::-;:53;:69;:53;:69;:::i;:::-;23375:76;22434:1025;-1:-1:-1;;;;;;;;22434:1025:0:o;20378:140::-;19958:12;:10;:12::i;:::-;19948:6;;:22;:6;;;:22;;;19940:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20477:1;20461:6;;20440:40;;;20461:6;;;;20440:40;;20477:1;;20440:40;20508:1;20491:19;;;;;;20378:140::o;21617:46::-;21653:10;21617:46;:::o;21385:20::-;;;;;;:::o;28304:750::-;19958:12;:10;:12::i;:::-;19948:6;;:22;:6;;;:22;;;19940:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28566:19;;;;;;;28565:20;28557:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28612:35;;;28604:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28672:7;28667:380;;28701:9;28696:157;28716:21;;;28696:157;;;28798:7;;28806:1;28798:10;;;;;;;;;;;;;28763:17;:32;28781:10;;28792:1;28781:13;;;;;;;;;;;;;;;;;;28763:32;;-1:-1:-1;28763:32:0;;;;;;;;-1:-1:-1;28763:32:0;:45;28739:3;;28696:157;;;;28667:380;;;28890:9;28885:151;28905:21;;;28885:151;;;28987:11;28952:17;:32;28970:10;;28981:1;28970:13;;;;;;;;;;;;;;;;;;28952:32;;-1:-1:-1;28952:32:0;;;;;;;;-1:-1:-1;28952:32:0;:46;28928:3;;28885:151;;;;28667:380;28304:750;;;;;:::o;19736:79::-;19774:7;19801:6;;;19736:79;:::o;23881:2577::-;21653:10;23507:15;:28;;23499:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23567:17;;;;;;;23559:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23620:19;;;;;;;23612:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23996:18;24017:49;21534:7;24017:28;21744:6;24017:18;:3;21653:10;24017:18;:7;:18;:::i;:49::-;23996:70;-1:-1:-1;24134:27:0;24164:58;21601:7;24164:28;21744:6;24164:18;:3;21653:10;24164:18;:7;:18;:::i;:58::-;24134:88;;21744:6;24239:10;:17;24235:67;;;21744:6;24273:17;;24235:67;21744:6;24316:19;:26;24312:85;;;-1:-1:-1;21744:6:0;24312:85;24451:16;21333:42;24470:22;24493:12;:10;:12::i;:::-;24470:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24470:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24470:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24470:36:0;;-1:-1:-1;24594:1:0;24583:12;;24558:22;;24732:41;24583:12;24732:7;24558:22;24740:12;:10;:12::i;:::-;24732:21;;;;;;;;;;;;;-1:-1:-1;24732:21:0;;;:41;:25;:41;:::i;:::-;24709:64;;24845:12;24821:7;:21;24829:12;:10;:12::i;:::-;24821:21;;;;;;;;;;;;;-1:-1:-1;24821:21:0;;;:36;;;;24988:38;21744:6;24988:28;:12;25005:10;24988:28;:16;:28;:::i;:38::-;24955:71;;25043:29;25075:66;21744:6;25075:56;25111:19;25075:17;:31;25093:12;:10;:12::i;:::-;25075:31;;;;;;;;;;;;;-1:-1:-1;25075:31:0;;;:56;:35;:56;:::i;:66::-;25043:98;;25194:22;25219:7;:21;25227:12;:10;:12::i;:::-;25219:21;;;;;;;;;;;;;;;;25194:46;;25303:31;25337:17;:31;25355:12;:10;:12::i;:::-;25337:31;;;;;;;;;;;;;-1:-1:-1;25337:31:0;;;;;-1:-1:-1;25445:42:0;:22;25472:14;25445:42;:26;:42;:::i;:::-;25424:63;-1:-1:-1;25553:27:0;25583:50;:21;25609:23;25583:50;:25;:50;:::i;:::-;25553:80;-1:-1:-1;25742:55:0;25553:80;25742:30;:14;25761:10;25742:30;:18;:30;:::i;:::-;:34;:55;:34;:55;:::i;:::-;25729:68;;25869:37;25895:10;25869:7;:21;25877:12;:10;:12::i;25869:37::-;25845:7;:21;25853:12;:10;:12::i;:::-;25845:21;;;;;;;;;;;;;;;:61;;;;26006:56;26042:19;26006:17;:31;26024:12;:10;:12::i;26006:56::-;25972:17;:31;25990:12;:10;:12::i;:::-;25972:31;;;;;;;;;;;;;;;:90;;;;23672:1;;;;;;;26128:181;21333:42;26197:12;:10;:12::i;:::-;26232:42;26290:8;26128:26;:181::i;:::-;26413:5;;;;26407:17;26425:12;:10;:12::i;:::-;26439:10;26407:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26407:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26407:43:0;;;;23672:1;;;;;23881:2577::o;22089:176::-;19958:12;:10;:12::i;:::-;19948:6;;:22;:6;;;:22;;;19940:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22164:17;;;;;;;22163:18;22155:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22228:4;22208:24;;;;;;;;22243:14;;;;;;;;;;;;;22089:176::o;21820:52::-;;;;;;;;;;;;;:::o;21452:31::-;;;;;;;;;:::o;21293:83::-;21333:42;21293:83;:::o;22330:94::-;19958:12;:10;:12::i;:::-;19948:6;;:22;:6;;;:22;;;19940:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22412:4;22390:26;;;;;;;;22330:94::o;21932:42::-;;;;;;;;;;;;;:::o;29149:233::-;19958:12;:10;:12::i;:::-;19948:6;;:22;:6;;;:22;;;19940:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29325:49;29355:5;29363:2;29367:6;29325:22;:49::i;:::-;29149:233;;;:::o;26468:1777::-;21653:10;23507:15;:28;;23499:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23567:17;;;;;;;23559:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23620:19;;;;;;;23612:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26587:18;26608:49;21534:7;26608:28;21744:6;26608:18;:3;21653:10;26608:18;:7;:18;:::i;:49::-;26587:70;-1:-1:-1;26725:27:0;26755:58;21601:7;26755:28;21744:6;26755:18;:3;21653:10;26755:18;:7;:18;:::i;:58::-;26725:88;;21744:6;26830:10;:17;26826:67;;;21744:6;26864:17;;26826:67;21744:6;26907:19;:26;26903:83;;;-1:-1:-1;21744:6:0;26903:83;27031:20;27054:7;:21;27062:12;:10;:12::i;:::-;27054:21;;;;;;;;;;;;;-1:-1:-1;27054:21:0;;;;;-1:-1:-1;27198:38:0;21744:6;27198:28;27054:21;27215:10;27198:28;:16;:28;:::i;:38::-;27165:71;;27249:29;27281:66;21744:6;27281:56;27317:19;27281:17;:31;27299:12;:10;:12::i;27281:66::-;27249:98;;27407:22;27432:7;:21;27440:12;:10;:12::i;:::-;27432:21;;;;;;;;;;;;;;;;27407:46;;27508:31;27542:17;:31;27560:12;:10;:12::i;:::-;27542:31;;;;;;;;;;;;;-1:-1:-1;27542:31:0;;;;;-1:-1:-1;27642:42:0;:22;27669:14;27642:42;:26;:42;:::i;:::-;27621:63;-1:-1:-1;27742:27:0;27772:50;:21;27798:23;27772:50;:25;:50;:::i;:::-;27742:80;;27886:37;27912:10;27886:7;:21;27894:12;:10;:12::i;27886:37::-;27862:7;:21;27870:12;:10;:12::i;:::-;27862:21;;;;;;;;;;;;;;;:61;;;;28015:56;28051:19;28015:17;:31;28033:12;:10;:12::i;28015:56::-;27981:17;:31;27999:12;:10;:12::i;:::-;27981:31;;;;;;;;;;;;;;;-1:-1:-1;27981:31:0;:90;;;;28175:5;;;28169:17;28187:12;:10;:12::i;:::-;28201:35;:10;28216:19;28201:35;:14;:35;:::i;:::-;28169:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28169:68:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28169:68:0;;;;23672:1;;;;;;;;;26468:1777::o;21550:58::-;21601:7;21550:58;:::o;21881:42::-;;;;;;;;;;;;;:::o;21713:37::-;21744:6;21713:37;:::o;20673:236::-;19958:12;:10;:12::i;:::-;19948:6;;:22;:6;;;:22;;;19940:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20754:22;;;20746:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20856:6;;;20835:38;;;;;;;20856:6;;;20835:38;;;20884:6;:17;;;;;;;;;;;;;;;20673:236::o;1372:136::-;1430:7;1457:43;1461:1;1464;1457:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1450:50;;1372:136;;;;;:::o;2262:471::-;2320:7;2565:6;2561:47;;-1:-1:-1;2595:1:0;2588:8;;2561:47;2632:5;;;2636:1;2632;:5;:1;2656:5;;;;;:10;2648:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3209:132;3267:7;3294:39;3298:1;3301;3294:39;;;;;;;;;;;;;;;;;:3;:39::i;908:181::-;966:7;998:5;;;1022:6;;;;1014:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18390:98;18470:10;18390:98;:::o;14777:205::-;14905:68;;;14928:18;14905:68;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;14905:68:0;;;;;;;;25:18:-1;;61:17;;14905:68:0;182:15:-1;14928:27:0;179:29:-1;160:49;;14878:96:0;;14898:5;;14878:19;:96::i;:::-;14777:205;;;;:::o;14592:177::-;14702:58;;;14725:14;14702:58;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;14702:58:0;;;;;;;;25:18:-1;;61:17;;14702:58:0;182:15:-1;14725:23:0;179:29:-1;160:49;;14675:86:0;;14695:5;;14675:19;:86::i;1811:192::-;1897:7;1933:12;1925:6;;;;1917:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1917:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1969:5:0;;;1811:192::o;3837:278::-;3923:7;3958:12;3951:5;3943:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;3943:28:0;;3982:9;3998:1;3994;:5;;;;;;;3837:278;-1:-1:-1;;;;;3837:278:0:o;16897:761::-;17321:23;17347:69;17375:4;17347:69;;;;;;;;;;;;;;;;;17355:5;17347:27;;;;:69;;;;;:::i;:::-;17431:17;;17321:95;;-1:-1:-1;17431:21:0;17427:224;;17573:10;17562:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17562:30:0;17554:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11675:196;11778:12;11810:53;11833:6;11841:4;11847:1;11850:12;11810:22;:53::i;:::-;11803:60;11675:196;-1:-1:-1;;;;11675:196:0:o;13052:976::-;13182:12;13215:18;13226:6;13215:10;:18::i;:::-;13207:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13341:12;13355:23;13382:6;:11;;13400:8;13410:4;13382:33;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;13382:33:0;;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;13340:75:0;;;;13430:7;13426:595;;;13461:10;-1:-1:-1;13454:17:0;;-1:-1:-1;13454:17:0;13426:595;13575:17;;:21;13571:439;;13838:10;13832:17;13899:15;13886:10;13882:2;13878:19;13871:44;13786:148;13974:20;;;;;;;;;;;;;;;;;;;;13981:12;;13974:20;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;8760:422:0;9127:20;9166:8;;;8760:422::o
Swarm Source
bzzr://b7775443d5022678a158c05180f4d576ba69d8a804ca873c8d7e253d135684f9
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.