Source Code
Overview
GLMR Balance
GLMR Value
$0.00Latest 25 from a total of 110 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Set Strategist | 1392244 | 1300 days ago | IN | 0 GLMR | 0.00266771 | ||||
| Set Timelock | 1324587 | 1309 days ago | IN | 0 GLMR | 0.00248025 | ||||
| Set Strategy | 1104698 | 1342 days ago | IN | 0 GLMR | 0.0049613 | ||||
| Approve Strategy | 1104695 | 1342 days ago | IN | 0 GLMR | 0.0047039 | ||||
| Set Jar | 1104689 | 1342 days ago | IN | 0 GLMR | 0.00475181 | ||||
| Approve Strategy | 1103728 | 1342 days ago | IN | 0 GLMR | 0.00475093 | ||||
| Approve Strategy | 1070297 | 1347 days ago | IN | 0 GLMR | 0.00477445 | ||||
| Set Strategy | 1069579 | 1347 days ago | IN | 0 GLMR | 0.00503571 | ||||
| Approve Strategy | 1069576 | 1347 days ago | IN | 0 GLMR | 0.00517429 | ||||
| Set Jar | 1069569 | 1347 days ago | IN | 0 GLMR | 0.0046989 | ||||
| Set Strategist | 1069555 | 1347 days ago | IN | 0 GLMR | 0.00270733 | ||||
| Set Timelock | 1069548 | 1347 days ago | IN | 0 GLMR | 0.00250469 | ||||
| Set Strategy | 612143 | 1413 days ago | IN | 0 GLMR | 0.0311298 | ||||
| Set Strategy | 612143 | 1413 days ago | IN | 0 GLMR | 0.0310684 | ||||
| Approve Strategy | 612138 | 1413 days ago | IN | 0 GLMR | 0.0094078 | ||||
| Approve Strategy | 612103 | 1413 days ago | IN | 0 GLMR | 0.0094054 | ||||
| Set Strategy | 514836 | 1427 days ago | IN | 0 GLMR | 0.0149193 | ||||
| Approve Strategy | 514834 | 1427 days ago | IN | 0 GLMR | 0.0047039 | ||||
| Approve Strategy | 514827 | 1427 days ago | IN | 0 GLMR | 0.0047039 | ||||
| Withdraw All | 514809 | 1427 days ago | IN | 0 GLMR | 0.0168655 | ||||
| Set Jar | 329637 | 1454 days ago | IN | 0 GLMR | 0.0025189 | ||||
| Set Strategy | 329635 | 1454 days ago | IN | 0 GLMR | 0.0144477 | ||||
| Approve Strategy | 329633 | 1454 days ago | IN | 0 GLMR | 0.0044439 | ||||
| Set Jar | 329498 | 1454 days ago | IN | 0 GLMR | 0.0044389 | ||||
| Set Strategy | 329497 | 1454 days ago | IN | 0 GLMR | 0.0046413 |
View more zero value Internal Transactions in Advanced View mode
Cross-Chain Transactions
Loading...
Loading
Contract Name:
ControllerV4
Compiler Version
v0.6.7+commit.b8d736ae
Contract Source Code (Solidity)
/**
*Submitted for verification at moonbeam.moonscan.io on 2022-01-21
*/
// Sources flattened with hardhat v2.6.4 https://hardhat.org
// File src/interfaces/controller.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;
interface IController {
function jars(address) external view returns (address);
function rewards() external view returns (address);
function devfund() external view returns (address);
function treasury() external view returns (address);
function balanceOf(address) external view returns (uint256);
function withdraw(address, uint256) external;
function withdrawReward(address, uint256) external;
function earn(address, uint256) external;
function strategies(address) external view returns (address);
}
// File src/lib/safe-math.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, 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;
}
}
// File src/lib/context.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;
/*
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with GSN meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address payable) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
// File src/lib/erc20.sol
// File: contracts/GSN/Context.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;
// File: contracts/token/ERC20/IERC20.sol
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
// File: contracts/utils/Address.sol
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
// solhint-disable-next-line no-inline-assembly
assembly { size := extcodesize(account) }
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
(bool success, ) = recipient.call{ value: amount }("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain`call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
return _functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
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);
}
}
}
}
// File: contracts/token/ERC20/ERC20.sol
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
* For a generic mechanism see {ERC20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* We have followed general OpenZeppelin guidelines: functions revert instead
* of returning `false` on failure. This behavior is nonetheless conventional
* and does not conflict with the expectations of ERC20 applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*
* Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
* functions have been added to mitigate the well-known issues around setting
* allowances. See {IERC20-approve}.
*/
contract ERC20 is Context, IERC20 {
using SafeMath for uint256;
using Address for address;
mapping (address => uint256) private _balances;
mapping (address => mapping (address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
uint8 private _decimals;
/**
* @dev Sets the values for {name} and {symbol}, initializes {decimals} with
* a default value of 18.
*
* To select a different value for {decimals}, use {_setupDecimals}.
*
* All three of these values are immutable: they can only be set once during
* construction.
*/
constructor (string memory name, string memory symbol) public {
_name = name;
_symbol = symbol;
_decimals = 18;
}
/**
* @dev Returns the name of the token.
*/
function name() public view returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5,05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is
* called.
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view returns (uint8) {
return _decimals;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view override returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `recipient` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount) public virtual override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20};
*
* Requirements:
* - `sender` and `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
* - the caller must have allowance for ``sender``'s tokens of at least
* `amount`.
*/
function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
_transfer(sender, recipient, amount);
_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
return true;
}
/**
* @dev Moves tokens `amount` from `sender` to `recipient`.
*
* This is internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* Requirements:
*
* - `sender` cannot be the zero address.
* - `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
*/
function _transfer(address sender, address recipient, uint256 amount) internal virtual {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(sender, recipient, amount);
_balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
_balances[recipient] = _balances[recipient].add(amount);
emit Transfer(sender, recipient, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements
*
* - `to` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply = _totalSupply.add(amount);
_balances[account] = _balances[account].add(amount);
emit Transfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
_balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
_totalSupply = _totalSupply.sub(amount);
emit Transfer(account, address(0), amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(address owner, address spender, uint256 amount) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @dev Sets {decimals} to a value other than the default one of 18.
*
* WARNING: This function should only be called from the constructor. Most
* applications that interact with token contracts will not expect
* {decimals} to ever change, and may work incorrectly if it does.
*/
function _setupDecimals(uint8 decimals_) internal {
_decimals = decimals_;
}
/**
* @dev Hook that is called before any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* will be to transferred to `to`.
* - when `from` is zero, `amount` tokens will be minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
}
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using SafeMath for uint256;
using Address for address;
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
/**
* @dev Deprecated. This function has issues similar to the ones found in
* {IERC20-approve}, and its usage is discouraged.
*
* Whenever possible, use {safeIncreaseAllowance} and
* {safeDecreaseAllowance} instead.
*/
function safeApprove(IERC20 token, address spender, uint256 value) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
// solhint-disable-next-line max-line-length
require((value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).add(value);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
if (returndata.length > 0) { // Return data is optional
// solhint-disable-next-line max-line-length
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
// File src/interfaces/jar.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.2;
interface IJar is IERC20 {
function token() external view returns (address);
function reward() external view returns (address);
function claimInsurance() external; // NOTE: Only yDelegatedVault implements this
function getRatio() external view returns (uint256);
function depositAll() external;
function balance() external view returns (uint256);
function deposit(uint256) external;
function withdrawAll() external;
function withdraw(uint256) external;
function earn() external;
function decimals() external view returns (uint8);
}
// File src/interfaces/jar-converter.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.2;
interface IJarConverter {
function convert(
address _refundExcess, // address to send the excess amount when adding liquidity
uint256 _amount, // UNI LP Amount
bytes calldata _data
) external returns (uint256);
}
// File src/interfaces/strategy.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.2;
interface IStrategy {
function rewards() external view returns (address);
function gauge() external view returns (address);
function want() external view returns (address);
function timelock() external view returns (address);
function deposit() external;
function withdrawForSwap(uint256) external returns (uint256);
function withdraw(address) external;
function pendingReward() external view returns (uint256);
function withdraw(uint256) external;
function withdrawReward(uint256) external;
function skim() external;
function withdrawAll() external returns (uint256);
function balanceOf() external view returns (uint256);
function getHarvestable() external view returns (uint256);
function harvest() external;
function setTimelock(address) external;
function setController(address _controller) external;
function execute(address _target, bytes calldata _data)
external
payable
returns (bytes memory response);
function execute(bytes calldata _data)
external
payable
returns (bytes memory response);
}
// File src/interfaces/converter.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.2;
interface Converter {
function convert(address) external returns (uint256);
}
// File src/polygon/controller-v4.sol
// https://github.com/iearn-finance/jars/blob/master/contracts/controllers/StrategyControllerV1.sol
pragma solidity ^0.6.7;
pragma experimental ABIEncoderV2;
contract ControllerV4 {
using SafeERC20 for IERC20;
using Address for address;
using SafeMath for uint256;
address public constant burn = 0x000000000000000000000000000000000000dEaD;
address public governance;
address public strategist;
address public devfund;
address public treasury;
address public timelock;
// Convenience fee 0.1%
uint256 public convenienceFee = 100;
uint256 public constant convenienceFeeMax = 100000;
mapping(address => address) public jars;
mapping(address => address) public strategies;
mapping(address => mapping(address => address)) public converters;
mapping(address => mapping(address => bool)) public approvedStrategies;
mapping(address => bool) public approvedJarConverters;
uint256 public split = 500;
uint256 public constant max = 10000;
constructor(
address _governance,
address _strategist,
address _timelock,
address _devfund,
address _treasury
) public {
governance = _governance;
strategist = _strategist;
timelock = _timelock;
devfund = _devfund;
treasury = _treasury;
}
function setDevFund(address _devfund) public {
require(msg.sender == governance, "!governance");
devfund = _devfund;
}
function setTreasury(address _treasury) public {
require(msg.sender == governance, "!governance");
treasury = _treasury;
}
function setStrategist(address _strategist) public {
require(msg.sender == governance, "!governance");
strategist = _strategist;
}
function setSplit(uint256 _split) public {
require(msg.sender == governance, "!governance");
require(_split <= max, "numerator cannot be greater than denominator");
split = _split;
}
function setGovernance(address _governance) public {
require(msg.sender == governance, "!governance");
governance = _governance;
}
function setTimelock(address _timelock) public {
require(msg.sender == timelock, "!timelock");
timelock = _timelock;
}
function setJar(address _token, address _jar) public {
require(
msg.sender == strategist || msg.sender == governance,
"!strategist"
);
jars[_token] = _jar;
}
function approveJarConverter(address _converter) public {
require(msg.sender == governance, "!governance");
approvedJarConverters[_converter] = true;
}
function revokeJarConverter(address _converter) public {
require(msg.sender == governance, "!governance");
approvedJarConverters[_converter] = false;
}
function approveStrategy(address _token, address _strategy) public {
require(msg.sender == timelock, "!timelock");
approvedStrategies[_token][_strategy] = true;
}
function revokeStrategy(address _token, address _strategy) public {
require(msg.sender == governance, "!governance");
require(strategies[_token] != _strategy, "cannot revoke active strategy");
approvedStrategies[_token][_strategy] = false;
}
function setConvenienceFee(uint256 _convenienceFee) external {
require(msg.sender == timelock, "!timelock");
convenienceFee = _convenienceFee;
}
function setStrategy(address _token, address _strategy) public {
require(
msg.sender == strategist || msg.sender == governance,
"!strategist"
);
require(approvedStrategies[_token][_strategy] == true, "!approved");
address _current = strategies[_token];
if (_current != address(0)) {
IStrategy(_current).withdrawAll();
}
strategies[_token] = _strategy;
}
function earn(address _token, uint256 _amount) public {
address _strategy = strategies[_token];
address _want = IStrategy(_strategy).want();
if (_want != _token) {
address converter = converters[_token][_want];
IERC20(_token).safeTransfer(converter, _amount);
_amount = Converter(converter).convert(_strategy);
IERC20(_want).safeTransfer(_strategy, _amount);
} else {
IERC20(_token).safeTransfer(_strategy, _amount);
}
IStrategy(_strategy).deposit();
}
function balanceOf(address _token) external view returns (uint256) {
return IStrategy(strategies[_token]).balanceOf();
}
function withdrawAll(address _token) public {
require(
msg.sender == strategist || msg.sender == governance,
"!strategist"
);
IStrategy(strategies[_token]).withdrawAll();
}
function inCaseTokensGetStuck(address _token, uint256 _amount) public {
require(
msg.sender == strategist || msg.sender == governance,
"!governance"
);
IERC20(_token).safeTransfer(msg.sender, _amount);
}
function inCaseStrategyTokenGetStuck(address _strategy, address _token)
public
{
require(
msg.sender == strategist || msg.sender == governance,
"!governance"
);
IStrategy(_strategy).withdraw(_token);
}
function withdraw(address _token, uint256 _amount) public {
require(msg.sender == jars[_token], "!jar");
IStrategy(strategies[_token]).withdraw(_amount);
}
function _execute(address _target, bytes memory _data)
internal
returns (bytes memory response)
{
require(_target != address(0), "!target");
// call contract in current context
assembly {
let succeeded := delegatecall(
sub(gas(), 5000),
_target,
add(_data, 0x20),
mload(_data),
0,
0
)
let size := returndatasize()
response := mload(0x40)
mstore(
0x40,
add(response, and(add(add(size, 0x20), 0x1f), not(0x1f)))
)
mstore(response, size)
returndatacopy(add(response, 0x20), 0, size)
switch iszero(succeeded)
case 1 {
// throw if delegatecall failed
revert(add(response, 0x20), size)
}
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_governance","type":"address"},{"internalType":"address","name":"_strategist","type":"address"},{"internalType":"address","name":"_timelock","type":"address"},{"internalType":"address","name":"_devfund","type":"address"},{"internalType":"address","name":"_treasury","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"_converter","type":"address"}],"name":"approveJarConverter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_strategy","type":"address"}],"name":"approveStrategy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"approvedJarConverters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"approvedStrategies","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burn","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"convenienceFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"convenienceFeeMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"converters","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devfund","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"earn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_strategy","type":"address"},{"internalType":"address","name":"_token","type":"address"}],"name":"inCaseStrategyTokenGetStuck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"inCaseTokensGetStuck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"jars","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"max","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_converter","type":"address"}],"name":"revokeJarConverter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_strategy","type":"address"}],"name":"revokeStrategy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_convenienceFee","type":"uint256"}],"name":"setConvenienceFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devfund","type":"address"}],"name":"setDevFund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_governance","type":"address"}],"name":"setGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_jar","type":"address"}],"name":"setJar","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_split","type":"uint256"}],"name":"setSplit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_strategist","type":"address"}],"name":"setStrategist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_strategy","type":"address"}],"name":"setStrategy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_timelock","type":"address"}],"name":"setTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasury","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"split","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"strategies","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"strategist","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timelock","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405260646005556101f4600b553480156200001c57600080fd5b5060405162002e5538038062002e558339818101604052810190620000429190620001a8565b846000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050505062000278565b600081519050620001a2816200025e565b92915050565b600080600080600060a08688031215620001c157600080fd5b6000620001d18882890162000191565b9550506020620001e48882890162000191565b9450506040620001f78882890162000191565b93505060606200020a8882890162000191565b92505060806200021d8882890162000191565b9150509295509295909350565b600062000237826200023e565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b62000269816200022a565b81146200027557600080fd5b50565b612bcd80620002886000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c8063ab033ea91161011a578063cb35508a116100ad578063f0f442601161007c578063f0f44260146105bf578063f3fef3a3146105db578063f7654176146105f7578063fa09e63014610615578063fbe8b5ce1461063157610206565b8063cb35508a14610539578063d33219b414610555578063e4f2494d14610573578063f089ea8e146105a357610206565b8063c494448e116100e9578063c494448e146104b5578063c6d758cb146104d1578063c7b9d530146104ed578063ca6a48c21461050957610206565b8063ab033ea914610445578063ae4db91914610461578063b02bf4b91461047d578063bdacb3031461049957610206565b806361d027b31161019d57806370a082311161016c57806370a082311461038d57806372cb5d97146103bd5780638d8f1e67146103d95780639bcdff1f146103f7578063a1578b6a1461041557610206565b806361d027b314610305578063674e694f146103235780636ac5db191461033f5780636ee2c86f1461035d57610206565b806344df8e70116101d957806344df8e701461029157806346560bfb146102af578063590bbb60146102cb5780635aa6e675146102e757610206565b8063197baa6d1461020b5780631dfd45af146102275780631fe4a6861461024357806339ebf82314610261575b600080fd5b610225600480360381019061022091906124ab565b61064f565b005b610241600480360381019061023c919061254c565b6107a5565b005b61024b61083f565b60405161025891906128d8565b60405180910390f35b61027b60048036038101906102769190612459565b610865565b60405161028891906128d8565b60405180910390f35b610299610898565b6040516102a691906128d8565b60405180910390f35b6102c960048036038101906102c491906124ab565b61089e565b005b6102e560048036038101906102e091906124ab565b610a07565b005b6102ef610bfd565b6040516102fc91906128d8565b60405180910390f35b61030d610c22565b60405161031a91906128d8565b60405180910390f35b61033d6004803603810190610338919061254c565b610c48565b005b610347610d26565b6040516103549190612a79565b60405180910390f35b61037760048036038101906103729190612459565b610d2c565b604051610384919061291c565b60405180910390f35b6103a760048036038101906103a29190612459565b610d4c565b6040516103b49190612a79565b60405180910390f35b6103d760048036038101906103d291906124ab565b610e32565b005b6103e1611186565b6040516103ee91906128d8565b60405180910390f35b6103ff6111ac565b60405161040c9190612a79565b60405180910390f35b61042f600480360381019061042a91906124ab565b6111b3565b60405161043c919061291c565b60405180910390f35b61045f600480360381019061045a9190612459565b6111e2565b005b61047b60048036038101906104769190612459565b6112b4565b005b610497600480360381019061049291906124e7565b611387565b005b6104b360048036038101906104ae9190612459565b6116bc565b005b6104cf60048036038101906104ca91906124ab565b611790565b005b6104eb60048036038101906104e691906124e7565b6118b9565b005b61050760048036038101906105029190612459565b6119cf565b005b610523600480360381019061051e9190612459565b611aa2565b60405161053091906128d8565b60405180910390f35b610553600480360381019061054e9190612459565b611ad5565b005b61055d611bbf565b60405161056a91906128d8565b60405180910390f35b61058d600480360381019061058891906124ab565b611be5565b60405161059a91906128d8565b60405180910390f35b6105bd60048036038101906105b89190612459565b611c27565b005b6105d960048036038101906105d49190612459565b611d11565b005b6105f560048036038101906105f091906124e7565b611de4565b005b6105ff611f7f565b60405161060c9190612a79565b60405180910390f35b61062f600480360381019061062a9190612459565b611f85565b005b61063961214f565b6040516106469190612a79565b60405180910390f35b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806106f757506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072d90612999565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166351cff8d9826040518263ffffffff1660e01b815260040161076f91906128d8565b600060405180830381600087803b15801561078957600080fd5b505af115801561079d573d6000803e3d6000fd5b505050505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082c90612a59565b60405180910390fd5b8060058190555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60076020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61dead81565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061094657506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097c90612979565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8d90612999565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5b90612959565b60405180910390fd5b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cce90612999565b60405180910390fd5b612710811115610d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d13906129b9565b60405180910390fd5b80600b8190555050565b61271081565b600a6020528060005260406000206000915054906101000a900460ff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663722713f76040518163ffffffff1660e01b815260040160206040518083038186803b158015610df357600080fd5b505afa158015610e07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2b9190612575565b9050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610eda57506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1090612979565b60405180910390fd5b60011515600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe0906129d9565b60405180910390fd5b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611103578073ffffffffffffffffffffffffffffffffffffffff1663853828b66040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156110c957600080fd5b505af11580156110dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111019190612575565b505b81600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b620186a081565b60096020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126890612999565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133a90612999565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff16631f1fcd516040518163ffffffff1660e01b815260040160206040518083038186803b15801561143357600080fd5b505afa158015611447573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146b9190612482565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461162a576000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905061156c81858773ffffffffffffffffffffffffffffffffffffffff166121559092919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff1663def2489b846040518263ffffffff1660e01b81526004016115a591906128d8565b602060405180830381600087803b1580156115bf57600080fd5b505af11580156115d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f79190612575565b935061162483858473ffffffffffffffffffffffffffffffffffffffff166121559092919063ffffffff16565b50611656565b61165582848673ffffffffffffffffffffffffffffffffffffffff166121559092919063ffffffff16565b5b8173ffffffffffffffffffffffffffffffffffffffff1663d0e30db06040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561169e57600080fd5b505af11580156116b2573d6000803e3d6000fd5b5050505050505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461174c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174390612a59565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181790612a59565b60405180910390fd5b6001600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061196157506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6119a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199790612999565b60405180910390fd5b6119cb33828473ffffffffffffffffffffffffffffffffffffffff166121559092919063ffffffff16565b5050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5590612999565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60066020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5b90612999565b60405180910390fd5b6001600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60086020528160005260406000206020528060005260406000206000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cad90612999565b60405180910390fd5b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9790612999565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea8906129f9565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b8152600401611f499190612a79565b600060405180830381600087803b158015611f6357600080fd5b505af1158015611f77573d6000803e3d6000fd5b505050505050565b600b5481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061202d57506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61206c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206390612979565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663853828b66040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561211357600080fd5b505af1158015612127573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061214b9190612575565b5050565b60055481565b6121d68363a9059cbb60e01b84846040516024016121749291906128f3565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506121db565b505050565b606061223d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166122a29092919063ffffffff16565b905060008151111561229d578080602001905181019061225d9190612523565b61229c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229390612a39565b60405180910390fd5b5b505050565b60606122b184846000856122ba565b90509392505050565b60606122c5856123dd565b612304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fb90612a19565b60405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff16858760405161232e91906128c1565b60006040518083038185875af1925050503d806000811461236b576040519150601f19603f3d011682016040523d82523d6000602084013e612370565b606091505b509150915081156123855780925050506123d5565b6000815111156123985780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cc9190612937565b60405180910390fd5b949350505050565b600080823b905060008111915050919050565b6000813590506123ff81612b52565b92915050565b60008151905061241481612b52565b92915050565b60008151905061242981612b69565b92915050565b60008135905061243e81612b80565b92915050565b60008151905061245381612b80565b92915050565b60006020828403121561246b57600080fd5b6000612479848285016123f0565b91505092915050565b60006020828403121561249457600080fd5b60006124a284828501612405565b91505092915050565b600080604083850312156124be57600080fd5b60006124cc858286016123f0565b92505060206124dd858286016123f0565b9150509250929050565b600080604083850312156124fa57600080fd5b6000612508858286016123f0565b92505060206125198582860161242f565b9150509250929050565b60006020828403121561253557600080fd5b60006125438482850161241a565b91505092915050565b60006020828403121561255e57600080fd5b600061256c8482850161242f565b91505092915050565b60006020828403121561258757600080fd5b600061259584828501612444565b91505092915050565b6125a781612ac6565b82525050565b6125b681612ad8565b82525050565b60006125c782612a94565b6125d18185612aaa565b93506125e1818560208601612b0e565b80840191505092915050565b60006125f882612a9f565b6126028185612ab5565b9350612612818560208601612b0e565b61261b81612b41565b840191505092915050565b6000612633601d83612ab5565b91507f63616e6e6f74207265766f6b65206163746976652073747261746567790000006000830152602082019050919050565b6000612673600b83612ab5565b91507f21737472617465676973740000000000000000000000000000000000000000006000830152602082019050919050565b60006126b3600b83612ab5565b91507f21676f7665726e616e63650000000000000000000000000000000000000000006000830152602082019050919050565b60006126f3602c83612ab5565b91507f6e756d657261746f722063616e6e6f742062652067726561746572207468616e60008301527f2064656e6f6d696e61746f7200000000000000000000000000000000000000006020830152604082019050919050565b6000612759600983612ab5565b91507f21617070726f76656400000000000000000000000000000000000000000000006000830152602082019050919050565b6000612799600483612ab5565b91507f216a6172000000000000000000000000000000000000000000000000000000006000830152602082019050919050565b60006127d9601d83612ab5565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b6000612819602a83612ab5565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b600061287f600983612ab5565b91507f2174696d656c6f636b00000000000000000000000000000000000000000000006000830152602082019050919050565b6128bb81612b04565b82525050565b60006128cd82846125bc565b915081905092915050565b60006020820190506128ed600083018461259e565b92915050565b6000604082019050612908600083018561259e565b61291560208301846128b2565b9392505050565b600060208201905061293160008301846125ad565b92915050565b6000602082019050818103600083015261295181846125ed565b905092915050565b6000602082019050818103600083015261297281612626565b9050919050565b6000602082019050818103600083015261299281612666565b9050919050565b600060208201905081810360008301526129b2816126a6565b9050919050565b600060208201905081810360008301526129d2816126e6565b9050919050565b600060208201905081810360008301526129f28161274c565b9050919050565b60006020820190508181036000830152612a128161278c565b9050919050565b60006020820190508181036000830152612a32816127cc565b9050919050565b60006020820190508181036000830152612a528161280c565b9050919050565b60006020820190508181036000830152612a7281612872565b9050919050565b6000602082019050612a8e60008301846128b2565b92915050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b6000612ad182612ae4565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015612b2c578082015181840152602081019050612b11565b83811115612b3b576000848401525b50505050565b6000601f19601f8301169050919050565b612b5b81612ac6565b8114612b6657600080fd5b50565b612b7281612ad8565b8114612b7d57600080fd5b50565b612b8981612b04565b8114612b9457600080fd5b5056fea264697066735822122082d55ef7c272f33b28d0d518b0e3cea7140c146c1cadb61fa89a7ea44c3faf4264736f6c63430006070033000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102065760003560e01c8063ab033ea91161011a578063cb35508a116100ad578063f0f442601161007c578063f0f44260146105bf578063f3fef3a3146105db578063f7654176146105f7578063fa09e63014610615578063fbe8b5ce1461063157610206565b8063cb35508a14610539578063d33219b414610555578063e4f2494d14610573578063f089ea8e146105a357610206565b8063c494448e116100e9578063c494448e146104b5578063c6d758cb146104d1578063c7b9d530146104ed578063ca6a48c21461050957610206565b8063ab033ea914610445578063ae4db91914610461578063b02bf4b91461047d578063bdacb3031461049957610206565b806361d027b31161019d57806370a082311161016c57806370a082311461038d57806372cb5d97146103bd5780638d8f1e67146103d95780639bcdff1f146103f7578063a1578b6a1461041557610206565b806361d027b314610305578063674e694f146103235780636ac5db191461033f5780636ee2c86f1461035d57610206565b806344df8e70116101d957806344df8e701461029157806346560bfb146102af578063590bbb60146102cb5780635aa6e675146102e757610206565b8063197baa6d1461020b5780631dfd45af146102275780631fe4a6861461024357806339ebf82314610261575b600080fd5b610225600480360381019061022091906124ab565b61064f565b005b610241600480360381019061023c919061254c565b6107a5565b005b61024b61083f565b60405161025891906128d8565b60405180910390f35b61027b60048036038101906102769190612459565b610865565b60405161028891906128d8565b60405180910390f35b610299610898565b6040516102a691906128d8565b60405180910390f35b6102c960048036038101906102c491906124ab565b61089e565b005b6102e560048036038101906102e091906124ab565b610a07565b005b6102ef610bfd565b6040516102fc91906128d8565b60405180910390f35b61030d610c22565b60405161031a91906128d8565b60405180910390f35b61033d6004803603810190610338919061254c565b610c48565b005b610347610d26565b6040516103549190612a79565b60405180910390f35b61037760048036038101906103729190612459565b610d2c565b604051610384919061291c565b60405180910390f35b6103a760048036038101906103a29190612459565b610d4c565b6040516103b49190612a79565b60405180910390f35b6103d760048036038101906103d291906124ab565b610e32565b005b6103e1611186565b6040516103ee91906128d8565b60405180910390f35b6103ff6111ac565b60405161040c9190612a79565b60405180910390f35b61042f600480360381019061042a91906124ab565b6111b3565b60405161043c919061291c565b60405180910390f35b61045f600480360381019061045a9190612459565b6111e2565b005b61047b60048036038101906104769190612459565b6112b4565b005b610497600480360381019061049291906124e7565b611387565b005b6104b360048036038101906104ae9190612459565b6116bc565b005b6104cf60048036038101906104ca91906124ab565b611790565b005b6104eb60048036038101906104e691906124e7565b6118b9565b005b61050760048036038101906105029190612459565b6119cf565b005b610523600480360381019061051e9190612459565b611aa2565b60405161053091906128d8565b60405180910390f35b610553600480360381019061054e9190612459565b611ad5565b005b61055d611bbf565b60405161056a91906128d8565b60405180910390f35b61058d600480360381019061058891906124ab565b611be5565b60405161059a91906128d8565b60405180910390f35b6105bd60048036038101906105b89190612459565b611c27565b005b6105d960048036038101906105d49190612459565b611d11565b005b6105f560048036038101906105f091906124e7565b611de4565b005b6105ff611f7f565b60405161060c9190612a79565b60405180910390f35b61062f600480360381019061062a9190612459565b611f85565b005b61063961214f565b6040516106469190612a79565b60405180910390f35b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806106f757506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072d90612999565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166351cff8d9826040518263ffffffff1660e01b815260040161076f91906128d8565b600060405180830381600087803b15801561078957600080fd5b505af115801561079d573d6000803e3d6000fd5b505050505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082c90612a59565b60405180910390fd5b8060058190555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60076020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61dead81565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061094657506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097c90612979565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8d90612999565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5b90612959565b60405180910390fd5b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cce90612999565b60405180910390fd5b612710811115610d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d13906129b9565b60405180910390fd5b80600b8190555050565b61271081565b600a6020528060005260406000206000915054906101000a900460ff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663722713f76040518163ffffffff1660e01b815260040160206040518083038186803b158015610df357600080fd5b505afa158015610e07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2b9190612575565b9050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610eda57506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1090612979565b60405180910390fd5b60011515600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe0906129d9565b60405180910390fd5b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611103578073ffffffffffffffffffffffffffffffffffffffff1663853828b66040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156110c957600080fd5b505af11580156110dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111019190612575565b505b81600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b620186a081565b60096020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126890612999565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133a90612999565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff16631f1fcd516040518163ffffffff1660e01b815260040160206040518083038186803b15801561143357600080fd5b505afa158015611447573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146b9190612482565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461162a576000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905061156c81858773ffffffffffffffffffffffffffffffffffffffff166121559092919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff1663def2489b846040518263ffffffff1660e01b81526004016115a591906128d8565b602060405180830381600087803b1580156115bf57600080fd5b505af11580156115d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f79190612575565b935061162483858473ffffffffffffffffffffffffffffffffffffffff166121559092919063ffffffff16565b50611656565b61165582848673ffffffffffffffffffffffffffffffffffffffff166121559092919063ffffffff16565b5b8173ffffffffffffffffffffffffffffffffffffffff1663d0e30db06040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561169e57600080fd5b505af11580156116b2573d6000803e3d6000fd5b5050505050505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461174c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174390612a59565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181790612a59565b60405180910390fd5b6001600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061196157506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6119a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199790612999565b60405180910390fd5b6119cb33828473ffffffffffffffffffffffffffffffffffffffff166121559092919063ffffffff16565b5050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5590612999565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60066020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5b90612999565b60405180910390fd5b6001600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60086020528160005260406000206020528060005260406000206000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cad90612999565b60405180910390fd5b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9790612999565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea8906129f9565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b8152600401611f499190612a79565b600060405180830381600087803b158015611f6357600080fd5b505af1158015611f77573d6000803e3d6000fd5b505050505050565b600b5481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061202d57506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61206c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206390612979565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663853828b66040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561211357600080fd5b505af1158015612127573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061214b9190612575565b5050565b60055481565b6121d68363a9059cbb60e01b84846040516024016121749291906128f3565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506121db565b505050565b606061223d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166122a29092919063ffffffff16565b905060008151111561229d578080602001905181019061225d9190612523565b61229c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229390612a39565b60405180910390fd5b5b505050565b60606122b184846000856122ba565b90509392505050565b60606122c5856123dd565b612304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fb90612a19565b60405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff16858760405161232e91906128c1565b60006040518083038185875af1925050503d806000811461236b576040519150601f19603f3d011682016040523d82523d6000602084013e612370565b606091505b509150915081156123855780925050506123d5565b6000815111156123985780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cc9190612937565b60405180910390fd5b949350505050565b600080823b905060008111915050919050565b6000813590506123ff81612b52565b92915050565b60008151905061241481612b52565b92915050565b60008151905061242981612b69565b92915050565b60008135905061243e81612b80565b92915050565b60008151905061245381612b80565b92915050565b60006020828403121561246b57600080fd5b6000612479848285016123f0565b91505092915050565b60006020828403121561249457600080fd5b60006124a284828501612405565b91505092915050565b600080604083850312156124be57600080fd5b60006124cc858286016123f0565b92505060206124dd858286016123f0565b9150509250929050565b600080604083850312156124fa57600080fd5b6000612508858286016123f0565b92505060206125198582860161242f565b9150509250929050565b60006020828403121561253557600080fd5b60006125438482850161241a565b91505092915050565b60006020828403121561255e57600080fd5b600061256c8482850161242f565b91505092915050565b60006020828403121561258757600080fd5b600061259584828501612444565b91505092915050565b6125a781612ac6565b82525050565b6125b681612ad8565b82525050565b60006125c782612a94565b6125d18185612aaa565b93506125e1818560208601612b0e565b80840191505092915050565b60006125f882612a9f565b6126028185612ab5565b9350612612818560208601612b0e565b61261b81612b41565b840191505092915050565b6000612633601d83612ab5565b91507f63616e6e6f74207265766f6b65206163746976652073747261746567790000006000830152602082019050919050565b6000612673600b83612ab5565b91507f21737472617465676973740000000000000000000000000000000000000000006000830152602082019050919050565b60006126b3600b83612ab5565b91507f21676f7665726e616e63650000000000000000000000000000000000000000006000830152602082019050919050565b60006126f3602c83612ab5565b91507f6e756d657261746f722063616e6e6f742062652067726561746572207468616e60008301527f2064656e6f6d696e61746f7200000000000000000000000000000000000000006020830152604082019050919050565b6000612759600983612ab5565b91507f21617070726f76656400000000000000000000000000000000000000000000006000830152602082019050919050565b6000612799600483612ab5565b91507f216a6172000000000000000000000000000000000000000000000000000000006000830152602082019050919050565b60006127d9601d83612ab5565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b6000612819602a83612ab5565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b600061287f600983612ab5565b91507f2174696d656c6f636b00000000000000000000000000000000000000000000006000830152602082019050919050565b6128bb81612b04565b82525050565b60006128cd82846125bc565b915081905092915050565b60006020820190506128ed600083018461259e565b92915050565b6000604082019050612908600083018561259e565b61291560208301846128b2565b9392505050565b600060208201905061293160008301846125ad565b92915050565b6000602082019050818103600083015261295181846125ed565b905092915050565b6000602082019050818103600083015261297281612626565b9050919050565b6000602082019050818103600083015261299281612666565b9050919050565b600060208201905081810360008301526129b2816126a6565b9050919050565b600060208201905081810360008301526129d2816126e6565b9050919050565b600060208201905081810360008301526129f28161274c565b9050919050565b60006020820190508181036000830152612a128161278c565b9050919050565b60006020820190508181036000830152612a32816127cc565b9050919050565b60006020820190508181036000830152612a528161280c565b9050919050565b60006020820190508181036000830152612a7281612872565b9050919050565b6000602082019050612a8e60008301846128b2565b92915050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b6000612ad182612ae4565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015612b2c578082015181840152602081019050612b11565b83811115612b3b576000848401525b50505050565b6000601f19601f8301169050919050565b612b5b81612ac6565b8114612b6657600080fd5b50565b612b7281612ad8565b8114612b7d57600080fd5b50565b612b8981612b04565b8114612b9457600080fd5b5056fea264697066735822122082d55ef7c272f33b28d0d518b0e3cea7140c146c1cadb61fa89a7ea44c3faf4264736f6c63430006070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c
-----Decoded View---------------
Arg [0] : _governance (address): 0xaCfE4511CE883C14c4eA40563F176C3C09b4c47C
Arg [1] : _strategist (address): 0xaCfE4511CE883C14c4eA40563F176C3C09b4c47C
Arg [2] : _timelock (address): 0xaCfE4511CE883C14c4eA40563F176C3C09b4c47C
Arg [3] : _devfund (address): 0xaCfE4511CE883C14c4eA40563F176C3C09b4c47C
Arg [4] : _treasury (address): 0xaCfE4511CE883C14c4eA40563F176C3C09b4c47C
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c
Arg [1] : 000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c
Arg [2] : 000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c
Arg [3] : 000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c
Arg [4] : 000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c
Deployed Bytecode Sourcemap
33384:6616:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33384:6616:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;38546:273:0;;;;;;;;;;;;;;;;:::i;:::-;;36668:167;;;;;;;;;;;;;;;;:::i;:::-;;33627:25;;;:::i;:::-;;;;;;;;;;;;;;;;33926:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;33513:73;;;:::i;:::-;;;;;;;;;;;;;;;;35607:215;;;;;;;;;;;;;;;;:::i;:::-;;36387:273;;;;;;;;;;;;;;;;:::i;:::-;;33595:25;;;:::i;:::-;;;;;;;;;;;;;;;;33688:23;;;:::i;:::-;;;;;;;;;;;;;;;;35075:214;;;;;;;;;;;;;;;;:::i;:::-;;34222:35;;;:::i;:::-;;;;;;;;;;;;;;;;34127:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;37897:134;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;36843:462;;;;;;;;;;;;;;;;:::i;:::-;;33659:22;;;:::i;:::-;;;;;;;;;;;;;;;;33821:50;;;:::i;:::-;;;;;;;;;;;;;;;;34050:70;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;35297:153;;;;;;;;;;;;;;;;:::i;:::-;;34612:141;;;;;;;;;;;;;;;;:::i;:::-;;37313:576;;;;;;;;;;;;;;;;:::i;:::-;;35458:141;;;;;;;;;;;;;;;;:::i;:::-;;36194:185;;;;;;;;;;;;;;;;:::i;:::-;;38277:261;;;;;;;;;;;;;;;;:::i;:::-;;34914:153;;;;;;;;;;;;;;;;:::i;:::-;;33880:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;35830:174;;;;;;;;;;;;;;;;:::i;:::-;;33718:23;;;:::i;:::-;;;;;;;;;;;;;;;;33978:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;36012:174;;;;;;;;;;;;;;;;:::i;:::-;;34761:145;;;;;;;;;;;;;;;;:::i;:::-;;38827:178;;;;;;;;;;;;;;;;:::i;:::-;;34189:26;;;:::i;:::-;;;;;;;;;;;;;;;;38039:230;;;;;;;;;;;;;;;;:::i;:::-;;33779:35;;;:::i;:::-;;;;;;;;;;;;;;;;38546:273;38686:10;;;;;;;;;;;38672:24;;:10;:24;;;:52;;;;38714:10;;;;;;;;;;;38700:24;;:10;:24;;;38672:52;38650:113;;;;;;;;;;;;;;;;;;;;;;38784:9;38774:29;;;38804:6;38774:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38774:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38774:37:0;;;;38546:273;;:::o;36668:167::-;36762:8;;;;;;;;;;;36748:22;;:10;:22;;;36740:44;;;;;;;;;;;;;;;;;;;;;;36812:15;36795:14;:32;;;;36668:167;:::o;33627:25::-;;;;;;;;;;;;;:::o;33926:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;33513:73::-;33544:42;33513:73;:::o;35607:215::-;35707:10;;;;;;;;;;;35693:24;;:10;:24;;;:52;;;;35735:10;;;;;;;;;;;35721:24;;:10;:24;;;35693:52;35671:113;;;;;;;;;;;;;;;;;;;;;;35810:4;35795;:12;35800:6;35795:12;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;;;;;;;35607:215;;:::o;36387:273::-;36486:10;;;;;;;;;;;36472:24;;:10;:24;;;36464:48;;;;;;;;;;;;;;;;;;;;;;36553:9;36531:31;;:10;:18;36542:6;36531:18;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;;36523:73;;;;;;;;;;;;;;;;;;;;;;36647:5;36607:18;:26;36626:6;36607:26;;;;;;;;;;;;;;;:37;36634:9;36607:37;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;36387:273;;:::o;33595:25::-;;;;;;;;;;;;;:::o;33688:23::-;;;;;;;;;;;;;:::o;35075:214::-;35149:10;;;;;;;;;;;35135:24;;:10;:24;;;35127:48;;;;;;;;;;;;;;;;;;;;;;34252:5;35194:6;:13;;35186:70;;;;;;;;;;;;;;;;;;;;;;35275:6;35267:5;:14;;;;35075:214;:::o;34222:35::-;34252:5;34222:35;:::o;34127:53::-;;;;;;;;;;;;;;;;;;;;;;:::o;37897:134::-;37955:7;37992:10;:18;38003:6;37992:18;;;;;;;;;;;;;;;;;;;;;;;;;37982:39;;;:41;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37982:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37982:41:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;37982:41:0;;;;;;;;;37975:48;;37897:134;;;:::o;36843:462::-;36953:10;;;;;;;;;;;36939:24;;:10;:24;;;:52;;;;36981:10;;;;;;;;;;;36967:24;;:10;:24;;;36939:52;36917:113;;;;;;;;;;;;;;;;;;;;;;37090:4;37049:45;;:18;:26;37068:6;37049:26;;;;;;;;;;;;;;;:37;37076:9;37049:37;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;37041:67;;;;;;;;;;;;;;;;;;;;;;37121:16;37140:10;:18;37151:6;37140:18;;;;;;;;;;;;;;;;;;;;;;;;;37121:37;;37193:1;37173:22;;:8;:22;;;37169:88;;37222:8;37212:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37212:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37212:33:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;37212:33:0;;;;;;;;;;37169:88;37288:9;37267:10;:18;37278:6;37267:18;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;36843:462;;;:::o;33659:22::-;;;;;;;;;;;;;:::o;33821:50::-;33865:6;33821:50;:::o;34050:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35297:153::-;35381:10;;;;;;;;;;;35367:24;;:10;:24;;;35359:48;;;;;;;;;;;;;;;;;;;;;;35431:11;35418:10;;:24;;;;;;;;;;;;;;;;;;35297:153;:::o;34612:141::-;34690:10;;;;;;;;;;;34676:24;;:10;:24;;;34668:48;;;;;;;;;;;;;;;;;;;;;;34737:8;34727:7;;:18;;;;;;;;;;;;;;;;;;34612:141;:::o;37313:576::-;37378:17;37398:10;:18;37409:6;37398:18;;;;;;;;;;;;;;;;;;;;;;;;;37378:38;;37427:13;37453:9;37443:25;;;:27;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37443:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37443:27:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;37443:27:0;;;;;;;;;37427:43;;37494:6;37485:15;;:5;:15;;;37481:360;;37517:17;37537:10;:18;37548:6;37537:18;;;;;;;;;;;;;;;:25;37556:5;37537:25;;;;;;;;;;;;;;;;;;;;;;;;;37517:45;;37577:47;37605:9;37616:7;37584:6;37577:27;;;;:47;;;;;:::i;:::-;37659:9;37649:28;;;37678:9;37649:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37649:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37649:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;37649:39:0;;;;;;;;;37639:49;;37703:46;37730:9;37741:7;37710:5;37703:26;;;;:46;;;;;:::i;:::-;37481:360;;;;37782:47;37810:9;37821:7;37789:6;37782:27;;;;:47;;;;;:::i;:::-;37481:360;37861:9;37851:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37851:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37851:30:0;;;;37313:576;;;;:::o;35458:141::-;35538:8;;;;;;;;;;;35524:22;;:10;:22;;;35516:44;;;;;;;;;;;;;;;;;;;;;;35582:9;35571:8;;:20;;;;;;;;;;;;;;;;;;35458:141;:::o;36194:185::-;36294:8;;;;;;;;;;;36280:22;;:10;:22;;;36272:44;;;;;;;;;;;;;;;;;;;;;;36367:4;36327:18;:26;36346:6;36327:26;;;;;;;;;;;;;;;:37;36354:9;36327:37;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;36194:185;;:::o;38277:261::-;38394:10;;;;;;;;;;;38380:24;;:10;:24;;;:52;;;;38422:10;;;;;;;;;;;38408:24;;:10;:24;;;38380:52;38358:113;;;;;;;;;;;;;;;;;;;;;;38482:48;38510:10;38522:7;38489:6;38482:27;;;;:48;;;;;:::i;:::-;38277:261;;:::o;34914:153::-;34998:10;;;;;;;;;;;34984:24;;:10;:24;;;34976:48;;;;;;;;;;;;;;;;;;;;;;35048:11;35035:10;;:24;;;;;;;;;;;;;;;;;;34914:153;:::o;33880:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;35830:174::-;35919:10;;;;;;;;;;;35905:24;;:10;:24;;;35897:48;;;;;;;;;;;;;;;;;;;;;;35992:4;35956:21;:33;35978:10;35956:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;35830:174;:::o;33718:23::-;;;;;;;;;;;;;:::o;33978:65::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;36012:174::-;36100:10;;;;;;;;;;;36086:24;;:10;:24;;;36078:48;;;;;;;;;;;;;;;;;;;;;;36173:5;36137:21;:33;36159:10;36137:33;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;36012:174;:::o;34761:145::-;34841:10;;;;;;;;;;;34827:24;;:10;:24;;;34819:48;;;;;;;;;;;;;;;;;;;;;;34889:9;34878:8;;:20;;;;;;;;;;;;;;;;;;34761:145;:::o;38827:178::-;38918:4;:12;38923:6;38918:12;;;;;;;;;;;;;;;;;;;;;;;;;38904:26;;:10;:26;;;38896:43;;;;;;;;;;;;;;;;;;;;;;38960:10;:18;38971:6;38960:18;;;;;;;;;;;;;;;;;;;;;;;;;38950:38;;;38989:7;38950:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38950:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38950:47:0;;;;38827:178;;:::o;34189:26::-;;;;:::o;38039:230::-;38130:10;;;;;;;;;;;38116:24;;:10;:24;;;:52;;;;38158:10;;;;;;;;;;;38144:24;;:10;:24;;;38116:52;38094:113;;;;;;;;;;;;;;;;;;;;;;38228:10;:18;38239:6;38228:18;;;;;;;;;;;;;;;;;;;;;;;;;38218:41;;;:43;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38218:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38218:43:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;38218:43:0;;;;;;;;;;38039:230;:::o;33779:35::-;;;;:::o;27531:177::-;27614:86;27634:5;27664:23;;;27689:2;27693:5;27641:58;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;27641:58:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;27641:58:0;27614:19;:86::i;:::-;27531:177;;;:::o;29836:761::-;30260:23;30286:69;30314:4;30286:69;;;;;;;;;;;;;;;;;30294:5;30286:27;;;;:69;;;;;:::i;:::-;30260:95;;30390:1;30370:10;:17;:21;30366:224;;;30512:10;30501:30;;;;;;;;;;;;;;30493:85;;;;;;;;;;;;;;;;;;;;;;30366:224;29836:761;;;:::o;13657:196::-;13760:12;13792:53;13815:6;13823:4;13829:1;13832:12;13792:22;:53::i;:::-;13785:60;;13657:196;;;;;:::o;15034:979::-;15164:12;15197:18;15208:6;15197:10;:18::i;:::-;15189:60;;;;;;;;;;;;;;;;;;;;;;15323:12;15337:23;15364:6;:11;;15384:8;15395:4;15364:36;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;15322:78:0;;;;15415:7;15411:595;;;15446:10;15439:17;;;;;;15411:595;15580:1;15560:10;:17;:21;15556:439;;;15823:10;15817:17;15884:15;15871:10;15867:2;15863:19;15856:44;15771:148;15966:12;15959:20;;;;;;;;;;;;;;;;;;;;15034:979;;;;;;;:::o;10739:422::-;10799:4;11007:12;11118:7;11106:20;11098:28;;11152:1;11145:4;:8;11138:15;;;10739:422;;;:::o;5:130:-1:-;;85:6;72:20;63:29;;97:33;124:5;97:33;;;57:78;;;;;142:134;;226:6;220:13;211:22;;238:33;265:5;238:33;;;205:71;;;;;283:128;;364:6;358:13;349:22;;376:30;400:5;376:30;;;343:68;;;;;418:130;;498:6;485:20;476:29;;510:33;537:5;510:33;;;470:78;;;;;555:134;;639:6;633:13;624:22;;651:33;678:5;651:33;;;618:71;;;;;696:241;;800:2;788:9;779:7;775:23;771:32;768:2;;;816:1;813;806:12;768:2;851:1;868:53;913:7;904:6;893:9;889:22;868:53;;;858:63;;830:97;762:175;;;;;944:263;;1059:2;1047:9;1038:7;1034:23;1030:32;1027:2;;;1075:1;1072;1065:12;1027:2;1110:1;1127:64;1183:7;1174:6;1163:9;1159:22;1127:64;;;1117:74;;1089:108;1021:186;;;;;1214:366;;;1335:2;1323:9;1314:7;1310:23;1306:32;1303:2;;;1351:1;1348;1341:12;1303:2;1386:1;1403:53;1448:7;1439:6;1428:9;1424:22;1403:53;;;1393:63;;1365:97;1493:2;1511:53;1556:7;1547:6;1536:9;1532:22;1511:53;;;1501:63;;1472:98;1297:283;;;;;;1587:366;;;1708:2;1696:9;1687:7;1683:23;1679:32;1676:2;;;1724:1;1721;1714:12;1676:2;1759:1;1776:53;1821:7;1812:6;1801:9;1797:22;1776:53;;;1766:63;;1738:97;1866:2;1884:53;1929:7;1920:6;1909:9;1905:22;1884:53;;;1874:63;;1845:98;1670:283;;;;;;1960:257;;2072:2;2060:9;2051:7;2047:23;2043:32;2040:2;;;2088:1;2085;2078:12;2040:2;2123:1;2140:61;2193:7;2184:6;2173:9;2169:22;2140:61;;;2130:71;;2102:105;2034:183;;;;;2224:241;;2328:2;2316:9;2307:7;2303:23;2299:32;2296:2;;;2344:1;2341;2334:12;2296:2;2379:1;2396:53;2441:7;2432:6;2421:9;2417:22;2396:53;;;2386:63;;2358:97;2290:175;;;;;2472:263;;2587:2;2575:9;2566:7;2562:23;2558:32;2555:2;;;2603:1;2600;2593:12;2555:2;2638:1;2655:64;2711:7;2702:6;2691:9;2687:22;2655:64;;;2645:74;;2617:108;2549:186;;;;;2742:113;2825:24;2843:5;2825:24;;;2820:3;2813:37;2807:48;;;2862:104;2939:21;2954:5;2939:21;;;2934:3;2927:34;2921:45;;;2973:356;;3101:38;3133:5;3101:38;;;3151:88;3232:6;3227:3;3151:88;;;3144:95;;3244:52;3289:6;3284:3;3277:4;3270:5;3266:16;3244:52;;;3317:6;3312:3;3308:16;3301:23;;3081:248;;;;;;3336:347;;3448:39;3481:5;3448:39;;;3499:71;3563:6;3558:3;3499:71;;;3492:78;;3575:52;3620:6;3615:3;3608:4;3601:5;3597:16;3575:52;;;3648:29;3670:6;3648:29;;;3643:3;3639:39;3632:46;;3428:255;;;;;;3691:329;;3851:67;3915:2;3910:3;3851:67;;;3844:74;;3951:31;3947:1;3942:3;3938:11;3931:52;4011:2;4006:3;4002:12;3995:19;;3837:183;;;;4029:311;;4189:67;4253:2;4248:3;4189:67;;;4182:74;;4289:13;4285:1;4280:3;4276:11;4269:34;4331:2;4326:3;4322:12;4315:19;;4175:165;;;;4349:311;;4509:67;4573:2;4568:3;4509:67;;;4502:74;;4609:13;4605:1;4600:3;4596:11;4589:34;4651:2;4646:3;4642:12;4635:19;;4495:165;;;;4669:381;;4829:67;4893:2;4888:3;4829:67;;;4822:74;;4929:34;4925:1;4920:3;4916:11;4909:55;4998:14;4993:2;4988:3;4984:12;4977:36;5041:2;5036:3;5032:12;5025:19;;4815:235;;;;5059:308;;5219:66;5283:1;5278:3;5219:66;;;5212:73;;5318:11;5314:1;5309:3;5305:11;5298:32;5358:2;5353:3;5349:12;5342:19;;5205:162;;;;5376:303;;5536:66;5600:1;5595:3;5536:66;;;5529:73;;5635:6;5631:1;5626:3;5622:11;5615:27;5670:2;5665:3;5661:12;5654:19;;5522:157;;;;5688:329;;5848:67;5912:2;5907:3;5848:67;;;5841:74;;5948:31;5944:1;5939:3;5935:11;5928:52;6008:2;6003:3;5999:12;5992:19;;5834:183;;;;6026:379;;6186:67;6250:2;6245:3;6186:67;;;6179:74;;6286:34;6282:1;6277:3;6273:11;6266:55;6355:12;6350:2;6345:3;6341:12;6334:34;6396:2;6391:3;6387:12;6380:19;;6172:233;;;;6414:308;;6574:66;6638:1;6633:3;6574:66;;;6567:73;;6673:11;6669:1;6664:3;6660:11;6653:32;6713:2;6708:3;6704:12;6697:19;;6560:162;;;;6730:113;6813:24;6831:5;6813:24;;;6808:3;6801:37;6795:48;;;6850:262;;6994:93;7083:3;7074:6;6994:93;;;6987:100;;7104:3;7097:10;;6975:137;;;;;7119:213;;7237:2;7226:9;7222:18;7214:26;;7251:71;7319:1;7308:9;7304:17;7295:6;7251:71;;;7208:124;;;;;7339:324;;7485:2;7474:9;7470:18;7462:26;;7499:71;7567:1;7556:9;7552:17;7543:6;7499:71;;;7581:72;7649:2;7638:9;7634:18;7625:6;7581:72;;;7456:207;;;;;;7670:201;;7782:2;7771:9;7767:18;7759:26;;7796:65;7858:1;7847:9;7843:17;7834:6;7796:65;;;7753:118;;;;;7878:301;;8016:2;8005:9;8001:18;7993:26;;8066:9;8060:4;8056:20;8052:1;8041:9;8037:17;8030:47;8091:78;8164:4;8155:6;8091:78;;;8083:86;;7987:192;;;;;8186:407;;8377:2;8366:9;8362:18;8354:26;;8427:9;8421:4;8417:20;8413:1;8402:9;8398:17;8391:47;8452:131;8578:4;8452:131;;;8444:139;;8348:245;;;;8600:407;;8791:2;8780:9;8776:18;8768:26;;8841:9;8835:4;8831:20;8827:1;8816:9;8812:17;8805:47;8866:131;8992:4;8866:131;;;8858:139;;8762:245;;;;9014:407;;9205:2;9194:9;9190:18;9182:26;;9255:9;9249:4;9245:20;9241:1;9230:9;9226:17;9219:47;9280:131;9406:4;9280:131;;;9272:139;;9176:245;;;;9428:407;;9619:2;9608:9;9604:18;9596:26;;9669:9;9663:4;9659:20;9655:1;9644:9;9640:17;9633:47;9694:131;9820:4;9694:131;;;9686:139;;9590:245;;;;9842:407;;10033:2;10022:9;10018:18;10010:26;;10083:9;10077:4;10073:20;10069:1;10058:9;10054:17;10047:47;10108:131;10234:4;10108:131;;;10100:139;;10004:245;;;;10256:407;;10447:2;10436:9;10432:18;10424:26;;10497:9;10491:4;10487:20;10483:1;10472:9;10468:17;10461:47;10522:131;10648:4;10522:131;;;10514:139;;10418:245;;;;10670:407;;10861:2;10850:9;10846:18;10838:26;;10911:9;10905:4;10901:20;10897:1;10886:9;10882:17;10875:47;10936:131;11062:4;10936:131;;;10928:139;;10832:245;;;;11084:407;;11275:2;11264:9;11260:18;11252:26;;11325:9;11319:4;11315:20;11311:1;11300:9;11296:17;11289:47;11350:131;11476:4;11350:131;;;11342:139;;11246:245;;;;11498:407;;11689:2;11678:9;11674:18;11666:26;;11739:9;11733:4;11729:20;11725:1;11714:9;11710:17;11703:47;11764:131;11890:4;11764:131;;;11756:139;;11660:245;;;;11912:213;;12030:2;12019:9;12015:18;12007:26;;12044:71;12112:1;12101:9;12097:17;12088:6;12044:71;;;12001:124;;;;;12132:121;;12225:5;12219:12;12209:22;;12190:63;;;;12260:122;;12354:5;12348:12;12338:22;;12319:63;;;;12390:144;;12525:3;12510:18;;12503:31;;;;;12543:163;;12658:6;12653:3;12646:19;12695:4;12690:3;12686:14;12671:29;;12639:67;;;;;12714:91;;12776:24;12794:5;12776:24;;;12765:35;;12759:46;;;;12812:85;;12885:5;12878:13;12871:21;12860:32;;12854:43;;;;12904:121;;12977:42;12970:5;12966:54;12955:65;;12949:76;;;;13032:72;;13094:5;13083:16;;13077:27;;;;13112:268;13177:1;13184:101;13198:6;13195:1;13192:13;13184:101;;;13274:1;13269:3;13265:11;13259:18;13255:1;13250:3;13246:11;13239:39;13220:2;13217:1;13213:10;13208:15;;13184:101;;;13300:6;13297:1;13294:13;13291:2;;;13365:1;13356:6;13351:3;13347:16;13340:27;13291:2;13161:219;;;;;13388:97;;13476:2;13472:7;13467:2;13460:5;13456:14;13452:28;13442:38;;13436:49;;;;13493:117;13562:24;13580:5;13562:24;;;13555:5;13552:35;13542:2;;13601:1;13598;13591:12;13542:2;13536:74;;13617:111;13683:21;13698:5;13683:21;;;13676:5;13673:32;13663:2;;13719:1;13716;13709:12;13663:2;13657:71;;13735:117;13804:24;13822:5;13804:24;;;13797:5;13794:35;13784:2;;13843:1;13840;13833:12;13784:2;13778:74;
Swarm Source
ipfs://82d55ef7c272f33b28d0d518b0e3cea7140c146c1cadb61fa89a7ea44c3faf42
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in GLMR
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.