Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 26 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Deposit | 23837590 | 174 days ago | IN | 0 FRAX | 0.0000285 | ||||
| Deposit | 23837258 | 174 days ago | IN | 0 FRAX | 0.00003184 | ||||
| Withdraw All | 19860904 | 266 days ago | IN | 0 FRAX | 0.00000078 | ||||
| Deposit All | 15635829 | 364 days ago | IN | 0 FRAX | 0.00000136 | ||||
| Withdraw All | 15632064 | 364 days ago | IN | 0 FRAX | 0.00000121 | ||||
| Withdraw All | 15431594 | 368 days ago | IN | 0 FRAX | 0.00000128 | ||||
| Deposit All | 15431584 | 368 days ago | IN | 0 FRAX | 0.00000106 | ||||
| Withdraw All | 15431110 | 368 days ago | IN | 0 FRAX | 0.00000132 | ||||
| Deposit All | 13877055 | 404 days ago | IN | 0 FRAX | 0.00000154 | ||||
| Withdraw All | 13876752 | 404 days ago | IN | 0 FRAX | 0.00000174 | ||||
| Withdraw All | 13247412 | 419 days ago | IN | 0 FRAX | 0.00000283 | ||||
| Deposit | 11582607 | 457 days ago | IN | 0 FRAX | 0.00000092 | ||||
| Deposit All | 10915274 | 473 days ago | IN | 0 FRAX | 0.00000202 | ||||
| Withdraw All | 10332414 | 486 days ago | IN | 0 FRAX | 0.00000123 | ||||
| Withdraw All | 9177627 | 513 days ago | IN | 0 FRAX | 0.00000065 | ||||
| Withdraw All | 8668003 | 525 days ago | IN | 0 FRAX | 0.00000074 | ||||
| Deposit All | 4428010 | 623 days ago | IN | 0 FRAX | 0.00000083 | ||||
| Deposit All | 4332480 | 625 days ago | IN | 0 FRAX | 0.00000073 | ||||
| Deposit All | 3606517 | 642 days ago | IN | 0 FRAX | 0.00000098 | ||||
| Deposit All | 2846220 | 660 days ago | IN | 0 FRAX | 0.00000211 | ||||
| Deposit All | 2261797 | 673 days ago | IN | 0 FRAX | 0.00000188 | ||||
| Deposit All | 2176209 | 675 days ago | IN | 0 FRAX | 0.00000211 | ||||
| Withdraw All | 2176200 | 675 days ago | IN | 0 FRAX | 0.0000018 | ||||
| Deposit All | 2176186 | 675 days ago | IN | 0 FRAX | 0.00000219 | ||||
| Set Compound Bef... | 2175686 | 675 days ago | IN | 0 FRAX | 0.00000193 |
Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers.
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | ||||
|---|---|---|---|---|---|---|---|
| 23837590 | 174 days ago | 0 FRAX | |||||
| 23837590 | 174 days ago | 0 FRAX | |||||
| 23837590 | 174 days ago | 0 FRAX | |||||
| 23837590 | 174 days ago | 0 FRAX | |||||
| 23837590 | 174 days ago | 0 FRAX | |||||
| 23837590 | 174 days ago | 0 FRAX | |||||
| 23837590 | 174 days ago | 0 FRAX | |||||
| 23837590 | 174 days ago | 0 FRAX | |||||
| 23837258 | 174 days ago | 0 FRAX | |||||
| 23837258 | 174 days ago | 0 FRAX | |||||
| 23837258 | 174 days ago | 0 FRAX | |||||
| 23837258 | 174 days ago | 0 FRAX | |||||
| 23837258 | 174 days ago | 0 FRAX | |||||
| 23837258 | 174 days ago | 0 FRAX | |||||
| 23837258 | 174 days ago | 0 FRAX | |||||
| 23837258 | 174 days ago | 0 FRAX | |||||
| 19860904 | 266 days ago | 0 FRAX | |||||
| 19860904 | 266 days ago | 0 FRAX | |||||
| 19860904 | 266 days ago | 0 FRAX | |||||
| 19860904 | 266 days ago | 0 FRAX | |||||
| 19860904 | 266 days ago | 0 FRAX | |||||
| 19860904 | 266 days ago | 0 FRAX | |||||
| 15635829 | 364 days ago | 0 FRAX | |||||
| 15635829 | 364 days ago | 0 FRAX | |||||
| 15635829 | 364 days ago | 0 FRAX |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Jar
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/**
*Submitted for verification at fraxscan.com on 2024-03-22
*/
pragma solidity ^0.6.12;
// SPDX-License-Identifier: UNLICENSED
/*
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with GSN meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address payable) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
/**
* @dev Returns the substraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
if (b > a) return (false, 0);
return (true, a - b);
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
if (b == 0) return (false, 0);
return (true, a / b);
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
if (b == 0) return (false, 0);
return (true, a % b);
}
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
require(b <= a, "SafeMath: subtraction overflow");
return a - b;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) return 0;
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
require(b > 0, "SafeMath: division by zero");
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
require(b > 0, "SafeMath: modulo by zero");
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
return a - b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message on
* division by zero. The result is rounded towards zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryDiv}.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
return a % b;
}
}
/**
* @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;
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 virtual returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual 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 virtual returns (uint8) {
return _decimals;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view virtual 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 virtual {
_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 { }
}
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
// solhint-disable-next-line no-inline-assembly
assembly { size := extcodesize(account) }
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
(bool success, ) = recipient.call{ value: amount }("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain`call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.call{ value: value }(data);
return _verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.staticcall(data);
return _verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.delegatecall(data);
return _verifyCallResult(success, returndata, errorMessage);
}
function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using SafeMath for uint256;
using Address for address;
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
/**
* @dev Deprecated. This function has issues similar to the ones found in
* {IERC20-approve}, and its usage is discouraged.
*
* Whenever possible, use {safeIncreaseAllowance} and
* {safeDecreaseAllowance} instead.
*/
function safeApprove(IERC20 token, address spender, uint256 value) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
// solhint-disable-next-line max-line-length
require((value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).add(value);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
if (returndata.length > 0) { // Return data is optional
// solhint-disable-next-line max-line-length
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor () internal {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor () internal {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and make it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
// On the first call to nonReentrant, _notEntered will be true
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
_;
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}
interface IStrategy {
//Returns the token sent to the fee dist contract, which is used to calculate the amount of ADDY to mint when claiming rewards
function getFeeDistToken() external view returns (address);
//Returns the harvested token, which is not guaranteed to be the fee dist token
function getHarvestedToken() external view returns (address);
function lastHarvestTime() external view returns (uint256);
function rewards() external view returns (address);
function want() external view returns (address);
function deposit() external;
function withdrawForSwap(uint256) external returns (uint256);
function currentRouter() external view returns (address);
function withdraw(uint256) external;
function balanceOf() external view returns (uint256);
function getHarvestable() external view returns (uint256);
function harvest() external;
function setJar(address _jar) external;
}
// Inheritance
// https://docs.synthetix.io/contracts/Pausable
abstract contract Pausable is Ownable {
uint public lastPauseTime;
bool public paused;
constructor() internal {
// This contract is abstract, and thus cannot be instantiated directly
//require(owner != address(0), "Owner must be set");
// Paused will be false, and lastPauseTime will be 0 upon initialisation
}
/**
* @notice Change the paused state of the contract
* @dev Only the contract owner may call this.
*/
function setPaused(bool _paused) external onlyOwner {
// Ensure we're actually changing the state before we do anything
if (_paused == paused) {
return;
}
// Set our paused state.
paused = _paused;
// If applicable, set the last pause time.
if (paused) {
lastPauseTime = now;
}
// Let everyone know that our pause state has changed.
emit PauseChanged(paused);
}
event PauseChanged(bool isPaused);
modifier notPaused {
require(!paused, "This action cannot be performed while the contract is paused");
_;
}
}// Based on https://github.com/iearn-finance/vaults/blob/master/contracts/vaults/yVault.sol
//Represents a share of a user's vault deposit
contract Jar is ERC20, Ownable, Pausable, ReentrancyGuard {
using SafeERC20 for IERC20;
using Address for address;
using SafeMath for uint256;
uint256 internal constant FEE_DENOMINATOR = 10000;
IERC20 public token;
address public strategy;
//Because a withdrawal penalty can't be implemented, users should be made to compound the vault when depositing for certain vaults
bool public compoundBeforeDeposit = true;
uint256 public depositFee;
//The vault deployer contract should determine the name and symbol for the jar
//i.e. for Uniswap fork deployers, name = ERC20(IUniswapV2Pair(_strategy.want()).token0()).name() + ERC20(IUniswapV2Pair(_strategy.want()).token1()).name();
constructor(IStrategy _strategy, string memory name, string memory symbol)
public
ERC20(name, symbol)
{
require(address(_strategy) != address(0));
_setupDecimals(ERC20(_strategy.want()).decimals());
token = IERC20(_strategy.want());
strategy = address(_strategy);
}
function transfer(address recipient, uint256 amount) public override returns (bool) {
require(recipient != address(this));
return super.transfer(recipient, amount);
}
/* ========== FILLER VIEW FUNCTIONS FOR VAULT MULTICALL COMPATIBILITY ========== */
function want() public view returns (address) {
return address(token);
}
/* ========== VIEW FUNCTIONS ========== */
function totalShares() public view returns (uint256) {
return totalSupply();
}
function balance() public view returns (uint256) {
return
token.balanceOf(address(this)).add(
IStrategy(strategy).balanceOf()
);
}
function getRatio() public view returns (uint256) {
return balance().mul(1e18).div(totalSupply());
}
/* ========== MUTATIVE FUNCTIONS ========== */
function depositAll() external {
depositFor(token.balanceOf(msg.sender), msg.sender);
}
function deposit(uint256 _amount) external {
depositFor(_amount, msg.sender);
}
//depositFor usually won't be called by any external contract except for the zapper
//consider making it internal and limiting who can call the public version of the function, just to avoid any accidental/unintended usage
//the contract ABI in the website won't include this function, and there's no reason I'd ever want to call it through Remix/Polygonscan
function depositFor(uint256 _amount, address _beneficiary) public notPaused nonReentrant {
if(compoundBeforeDeposit && balance() > 0) {
IStrategy(strategy).harvest();
}
uint256 _pool = balance();
uint256 _before = token.balanceOf(address(this));
token.safeTransferFrom(msg.sender, address(this), _amount);
uint256 _after = token.balanceOf(address(this));
_amount = _after.sub(_before); // Additional check for deflationary tokens
uint256 shares = 0;
if (totalSupply() == 0) {
shares = _amount;
} else {
shares = (_amount.mul(totalSupply())).div(_pool);
}
//when farming pools with a deposit fee i.e. Mai.finance
if(depositFee > 0) {
uint256 fee = shares.mul(depositFee).div(FEE_DENOMINATOR);
shares = shares.sub(fee);
}
_mint(_beneficiary, shares);
earn();
emit Deposited(_beneficiary, _amount);
}
function earn() internal {
uint256 _bal = token.balanceOf(address(this));
token.safeTransfer(strategy, _bal);
IStrategy(strategy).deposit();
}
function withdrawAll() external {
withdraw(balanceOf(msg.sender));
}
// No rebalance implementation for lower fees and faster swaps
function withdraw(uint256 _shares) public nonReentrant {
uint256 r = (balance().mul(_shares)).div(totalSupply());
_burn(msg.sender, _shares);
// Check balance
uint256 b = token.balanceOf(address(this));
if (b < r) {
uint256 _withdraw = r.sub(b);
IStrategy(strategy).withdraw(_withdraw);
uint256 _after = token.balanceOf(address(this));
uint256 _diff = _after.sub(b);
if (_diff < _withdraw) {
r = b.add(_diff);
}
}
token.safeTransfer(msg.sender, r);
emit Withdrawn(msg.sender, r);
}
function setPoolDepositFee(uint256 _depositFee) public onlyOwner {
require(_depositFee <= 1000); //shouldn't be farming things with a high deposit fee in the first place
depositFee = _depositFee;
}
function setCompoundBeforeDeposit(bool _value) public onlyOwner {
compoundBeforeDeposit = _value;
}
function salvage(address recipient, address _token, uint256 amount) public onlyOwner {
// Admin cannot withdraw the staking token from the contract
require(_token != address(token), "cannot salvage want");
IERC20(token).safeTransfer(recipient, amount);
}
/* ========== EVENTS ========== */
event Deposited(address indexed user, uint256 amount);
event Withdrawn(address indexed user, uint256 amount);
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract IStrategy","name":"_strategy","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"isPaused","type":"bool"}],"name":"PauseChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"compoundBeforeDeposit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_beneficiary","type":"address"}],"name":"depositFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastPauseTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"salvage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setCompoundBeforeDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_depositFee","type":"uint256"}],"name":"setPoolDepositFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"strategy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"want","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
6080604052600a805460ff60a01b1916600160a01b1790553480156200002457600080fd5b506040516200266638038062002666833981810160405260608110156200004a57600080fd5b8151602083018051604051929492938301929190846401000000008211156200007257600080fd5b9083019060208201858111156200008857600080fd5b8251640100000000811182820188101715620000a357600080fd5b82525081516020918201929091019080838360005b83811015620000d2578181015183820152602001620000b8565b50505050905090810190601f168015620001005780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200012457600080fd5b9083019060208201858111156200013a57600080fd5b82516401000000008111828201881017156200015557600080fd5b82525081516020918201929091019080838360005b83811015620001845781810151838201526020016200016a565b50505050905090810190601f168015620001b25780820380516001836020036101000a031916815260200191505b50604052505082518391508290620001d290600390602085019062000411565b508051620001e890600490602084019062000411565b50506005805460ff1916601217905550600062000204620003f7565b60058054610100600160a81b0319166101006001600160a01b03841690810291909117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060016008556001600160a01b0383166200027357600080fd5b62000356836001600160a01b0316631f1fcd516040518163ffffffff1660e01b815260040160206040518083038186803b158015620002b157600080fd5b505afa158015620002c6573d6000803e3d6000fd5b505050506040513d6020811015620002dd57600080fd5b50516040805163313ce56760e01b815290516001600160a01b039092169163313ce56791600480820192602092909190829003018186803b1580156200032257600080fd5b505afa15801562000337573d6000803e3d6000fd5b505050506040513d60208110156200034e57600080fd5b5051620003fb565b826001600160a01b0316631f1fcd516040518163ffffffff1660e01b815260040160206040518083038186803b1580156200039057600080fd5b505afa158015620003a5573d6000803e3d6000fd5b505050506040513d6020811015620003bc57600080fd5b5051600980546001600160a01b039283166001600160a01b031991821617909155600a80549590921694169390931790925550620004ad9050565b3390565b6005805460ff191660ff92909216919091179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200045457805160ff191683800117855562000484565b8280016001018555821562000484579182015b828111156200048457825182559160200191906001019062000467565b506200049292915062000496565b5090565b5b8082111562000492576000815560010162000497565b6121a980620004bd6000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c806370a082311161011a578063a9059cbb116100ad578063dd62ed3e1161007c578063dd62ed3e1461054a578063de5f626814610578578063ec1ebd7a14610580578063f2fde38b14610588578063fc0c546a146105ae576101fb565b8063a9059cbb146104da578063b69ef8a814610506578063b6b55f251461050e578063c0b258c11461052b576101fb565b806391b4ded9116100e957806391b4ded91461049657806395d89b411461049e578063a457c2d7146104a6578063a8c62e76146104d2576101fb565b806370a0823114610458578063715018a61461047e578063853828b6146104865780638da5cb5b1461048e576101fb565b80632e1a7d4d116101925780633a98ef39116101615780633a98ef39146104385780635c975abb146104405780635efa74b91461044857806367a5279314610450576101fb565b80632e1a7d4d146103a5578063313ce567146103c257806336efd16f146103e0578063395093511461040c576101fb565b806316c38b3c116101ce57806316c38b3c1461031257806318160ddd146103315780631f1fcd511461034b57806323b872dd1461036f576101fb565b806306fdde0314610200578063095ea7b31461027d5780631113ef52146102bd578063119d0ffb146102f5575b600080fd5b6102086105b6565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024257818101518382015260200161022a565b50505050905090810190601f16801561026f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a96004803603604081101561029357600080fd5b506001600160a01b03813516906020013561064c565b604080519115158252519081900360200190f35b6102f3600480360360608110156102d357600080fd5b506001600160a01b0381358116916020810135909116906040013561066a565b005b6102f36004803603602081101561030b57600080fd5b5035610741565b6102f36004803603602081101561032857600080fd5b503515156107b7565b61033961088b565b60408051918252519081900360200190f35b610353610891565b604080516001600160a01b039092168252519081900360200190f35b6102a96004803603606081101561038557600080fd5b506001600160a01b038135811691602081013590911690604001356108a0565b6102f3600480360360208110156103bb57600080fd5b5035610928565b6103ca610ba4565b6040805160ff9092168252519081900360200190f35b6102f3600480360360408110156103f657600080fd5b50803590602001356001600160a01b0316610bad565b6102a96004803603604081101561042257600080fd5b506001600160a01b038135169060200135610ec2565b610339610f10565b6102a9610f1f565b6102a9610f28565b610339610f38565b6103396004803603602081101561046e57600080fd5b50356001600160a01b0316610f3e565b6102f3610f59565b6102f361100b565b61035361101e565b610339611032565b610208611038565b6102a9600480360360408110156104bc57600080fd5b506001600160a01b038135169060200135611099565b610353611101565b6102a9600480360360408110156104f057600080fd5b506001600160a01b038135169060200135611110565b610339611132565b6102f36004803603602081101561052457600080fd5b503561122e565b6102f36004803603602081101561054157600080fd5b50351515611238565b6103396004803603604081101561056057600080fd5b506001600160a01b03813581169160200135166112b8565b6102f36112e3565b610339611361565b6102f36004803603602081101561059e57600080fd5b50356001600160a01b0316611382565b610353611490565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106425780601f1061061757610100808354040283529160200191610642565b820191906000526020600020905b81548152906001019060200180831161062557829003601f168201915b5050505050905090565b600061066061065961149f565b84846114a3565b5060015b92915050565b61067261149f565b6001600160a01b031661068361101e565b6001600160a01b0316146106cc576040805162461bcd60e51b8152602060048201819052602482015260008051602061205f833981519152604482015290519081900360640190fd5b6009546001600160a01b0383811691161415610725576040805162461bcd60e51b815260206004820152601360248201527218d85b9b9bdd081cd85b1d9859d9481dd85b9d606a1b604482015290519081900360640190fd5b60095461073c906001600160a01b0316848361158f565b505050565b61074961149f565b6001600160a01b031661075a61101e565b6001600160a01b0316146107a3576040805162461bcd60e51b8152602060048201819052602482015260008051602061205f833981519152604482015290519081900360640190fd5b6103e88111156107b257600080fd5b600b55565b6107bf61149f565b6001600160a01b03166107d061101e565b6001600160a01b031614610819576040805162461bcd60e51b8152602060048201819052602482015260008051602061205f833981519152604482015290519081900360640190fd5b60075460ff161515811515141561082f57610888565b6007805460ff1916821515179081905560ff161561084c57426006555b6007546040805160ff90921615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec59181900360200190a15b50565b60025490565b6009546001600160a01b031690565b60006108ad8484846115e1565b61091d846108b961149f565b61091885604051806060016040528060288152602001612037602891396001600160a01b038a166000908152600160205260408120906108f761149f565b6001600160a01b03168152602081019190915260400160002054919061173c565b6114a3565b5060015b9392505050565b60026008541415610980576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600260085560006109aa61099261088b565b6109a48461099e611132565b906117d3565b9061182c565b90506109b63383611893565b600954604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610a0157600080fd5b505afa158015610a15573d6000803e3d6000fd5b505050506040513d6020811015610a2b57600080fd5b5051905081811015610b4d576000610a43838361198f565b600a5460408051632e1a7d4d60e01b81526004810184905290519293506001600160a01b0390911691632e1a7d4d9160248082019260009290919082900301818387803b158015610a9357600080fd5b505af1158015610aa7573d6000803e3d6000fd5b5050600954604080516370a0823160e01b81523060048201529051600094506001600160a01b0390921692506370a08231916024808301926020929190829003018186803b158015610af857600080fd5b505afa158015610b0c573d6000803e3d6000fd5b505050506040513d6020811015610b2257600080fd5b505190506000610b32828561198f565b905082811015610b4957610b4684826119ec565b94505b5050505b600954610b64906001600160a01b0316338461158f565b60408051838152905133917f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5919081900360200190a25050600160085550565b60055460ff1690565b60075460ff1615610bef5760405162461bcd60e51b815260040180806020018281038252603c8152602001806120a0603c913960400191505060405180910390fd5b60026008541415610c47576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600855600a54600160a01b900460ff168015610c6c57506000610c6a611132565b115b15610cda57600a60009054906101000a90046001600160a01b03166001600160a01b0316634641257d6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610cc157600080fd5b505af1158015610cd5573d6000803e3d6000fd5b505050505b6000610ce4611132565b600954604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610d3557600080fd5b505afa158015610d49573d6000803e3d6000fd5b505050506040513d6020811015610d5f57600080fd5b5051600954909150610d7c906001600160a01b0316333087611a46565b600954604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610dc757600080fd5b505afa158015610ddb573d6000803e3d6000fd5b505050506040513d6020811015610df157600080fd5b50519050610dff818361198f565b94506000610e0b61088b565b610e16575084610e2f565b610e2c846109a4610e2561088b565b89906117d3565b90505b600b5415610e64576000610e546127106109a4600b54856117d390919063ffffffff16565b9050610e60828261198f565b9150505b610e6e8582611aa6565b610e76611b96565b6040805187815290516001600160a01b038716917f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4919081900360200190a25050600160085550505050565b6000610660610ecf61149f565b846109188560016000610ee061149f565b6001600160a01b03908116825260208083019390935260409182016000908120918c1681529252902054906119ec565b6000610f1a61088b565b905090565b60075460ff1681565b600a54600160a01b900460ff1681565b600b5481565b6001600160a01b031660009081526020819052604090205490565b610f6161149f565b6001600160a01b0316610f7261101e565b6001600160a01b031614610fbb576040805162461bcd60e51b8152602060048201819052602482015260008051602061205f833981519152604482015290519081900360640190fd5b60055460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360058054610100600160a81b0319169055565b61101c61101733610f3e565b610928565b565b60055461010090046001600160a01b031690565b60065481565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106425780601f1061061757610100808354040283529160200191610642565b60006106606110a661149f565b846109188560405180606001604052806025815260200161214f60259139600160006110d061149f565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919061173c565b600a546001600160a01b031681565b60006001600160a01b03831630141561112857600080fd5b6109218383611c98565b6000610f1a600a60009054906101000a90046001600160a01b03166001600160a01b031663722713f76040518163ffffffff1660e01b815260040160206040518083038186803b15801561118557600080fd5b505afa158015611199573d6000803e3d6000fd5b505050506040513d60208110156111af57600080fd5b5051600954604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156111fc57600080fd5b505afa158015611210573d6000803e3d6000fd5b505050506040513d602081101561122657600080fd5b5051906119ec565b6108888133610bad565b61124061149f565b6001600160a01b031661125161101e565b6001600160a01b03161461129a576040805162461bcd60e51b8152602060048201819052602482015260008051602061205f833981519152604482015290519081900360640190fd5b600a8054911515600160a01b0260ff60a01b19909216919091179055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600954604080516370a0823160e01b8152336004820152905161101c926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561132f57600080fd5b505afa158015611343573d6000803e3d6000fd5b505050506040513d602081101561135957600080fd5b505133610bad565b6000610f1a61136e61088b565b6109a4670de0b6b3a764000061099e611132565b61138a61149f565b6001600160a01b031661139b61101e565b6001600160a01b0316146113e4576040805162461bcd60e51b8152602060048201819052602482015260008051602061205f833981519152604482015290519081900360640190fd5b6001600160a01b0381166114295760405162461bcd60e51b8152600401808060200182810382526026815260200180611f826026913960400191505060405180910390fd5b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6009546001600160a01b031681565b3390565b6001600160a01b0383166114e85760405162461bcd60e51b81526004018080602001828103825260248152602001806121016024913960400191505060405180910390fd5b6001600160a01b03821661152d5760405162461bcd60e51b8152600401808060200182810382526022815260200180611fa86022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261073c908490611cac565b6001600160a01b0383166116265760405162461bcd60e51b81526004018080602001828103825260258152602001806120dc6025913960400191505060405180910390fd5b6001600160a01b03821661166b5760405162461bcd60e51b8152600401808060200182810382526023815260200180611f3d6023913960400191505060405180910390fd5b61167683838361073c565b6116b381604051806060016040528060268152602001611fca602691396001600160a01b038616600090815260208190526040902054919061173c565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546116e290826119ec565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156117cb5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611790578181015183820152602001611778565b50505050905090810190601f1680156117bd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000826117e257506000610664565b828202828482816117ef57fe5b04146109215760405162461bcd60e51b81526004018080602001828103825260218152602001806120166021913960400191505060405180910390fd5b6000808211611882576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161188b57fe5b049392505050565b6001600160a01b0382166118d85760405162461bcd60e51b815260040180806020018281038252602181526020018061207f6021913960400191505060405180910390fd5b6118e48260008361073c565b61192181604051806060016040528060228152602001611f60602291396001600160a01b038516600090815260208190526040902054919061173c565b6001600160a01b038316600090815260208190526040902055600254611947908261198f565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000828211156119e6576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082820183811015610921576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611aa0908590611cac565b50505050565b6001600160a01b038216611b01576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611b0d6000838361073c565b600254611b1a90826119ec565b6002556001600160a01b038216600090815260208190526040902054611b4090826119ec565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600954604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611be157600080fd5b505afa158015611bf5573d6000803e3d6000fd5b505050506040513d6020811015611c0b57600080fd5b5051600a54600954919250611c2d916001600160a01b0390811691168361158f565b600a60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db06040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c7d57600080fd5b505af1158015611c91573d6000803e3d6000fd5b5050505050565b6000610660611ca561149f565b84846115e1565b6060611d01826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611d5d9092919063ffffffff16565b80519091501561073c57808060200190516020811015611d2057600080fd5b505161073c5760405162461bcd60e51b815260040180806020018281038252602a815260200180612125602a913960400191505060405180910390fd5b6060611d6c8484600085611d74565b949350505050565b606082471015611db55760405162461bcd60e51b8152600401808060200182810382526026815260200180611ff06026913960400191505060405180910390fd5b611dbe85611ed0565b611e0f576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310611e4e5780518252601f199092019160209182019101611e2f565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611eb0576040519150601f19603f3d011682016040523d82523d6000602084013e611eb5565b606091505b5091509150611ec5828286611ed6565b979650505050505050565b3b151590565b60608315611ee5575081610921565b825115611ef55782518084602001fd5b60405162461bcd60e51b815260206004820181815284516024840152845185939192839260440191908501908083836000831561179057818101518382015260200161177856fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657245524332303a206275726e2066726f6d20746865207a65726f20616464726573735468697320616374696f6e2063616e6e6f7420626520706572666f726d6564207768696c652074686520636f6e74726163742069732070617573656445524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220edbae64b3e35c054c056dc534f57b59900b7d7db8336b82e9ea996810102078a64736f6c634300060c003300000000000000000000000025c4d57c9eafa243a8d74249fe70855e50931ce7000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001d4164616d616e7420467261787377617020776672784554482f4652415800000000000000000000000000000000000000000000000000000000000000000000176164616d616e745661756c745766727865746846726178000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c806370a082311161011a578063a9059cbb116100ad578063dd62ed3e1161007c578063dd62ed3e1461054a578063de5f626814610578578063ec1ebd7a14610580578063f2fde38b14610588578063fc0c546a146105ae576101fb565b8063a9059cbb146104da578063b69ef8a814610506578063b6b55f251461050e578063c0b258c11461052b576101fb565b806391b4ded9116100e957806391b4ded91461049657806395d89b411461049e578063a457c2d7146104a6578063a8c62e76146104d2576101fb565b806370a0823114610458578063715018a61461047e578063853828b6146104865780638da5cb5b1461048e576101fb565b80632e1a7d4d116101925780633a98ef39116101615780633a98ef39146104385780635c975abb146104405780635efa74b91461044857806367a5279314610450576101fb565b80632e1a7d4d146103a5578063313ce567146103c257806336efd16f146103e0578063395093511461040c576101fb565b806316c38b3c116101ce57806316c38b3c1461031257806318160ddd146103315780631f1fcd511461034b57806323b872dd1461036f576101fb565b806306fdde0314610200578063095ea7b31461027d5780631113ef52146102bd578063119d0ffb146102f5575b600080fd5b6102086105b6565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024257818101518382015260200161022a565b50505050905090810190601f16801561026f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a96004803603604081101561029357600080fd5b506001600160a01b03813516906020013561064c565b604080519115158252519081900360200190f35b6102f3600480360360608110156102d357600080fd5b506001600160a01b0381358116916020810135909116906040013561066a565b005b6102f36004803603602081101561030b57600080fd5b5035610741565b6102f36004803603602081101561032857600080fd5b503515156107b7565b61033961088b565b60408051918252519081900360200190f35b610353610891565b604080516001600160a01b039092168252519081900360200190f35b6102a96004803603606081101561038557600080fd5b506001600160a01b038135811691602081013590911690604001356108a0565b6102f3600480360360208110156103bb57600080fd5b5035610928565b6103ca610ba4565b6040805160ff9092168252519081900360200190f35b6102f3600480360360408110156103f657600080fd5b50803590602001356001600160a01b0316610bad565b6102a96004803603604081101561042257600080fd5b506001600160a01b038135169060200135610ec2565b610339610f10565b6102a9610f1f565b6102a9610f28565b610339610f38565b6103396004803603602081101561046e57600080fd5b50356001600160a01b0316610f3e565b6102f3610f59565b6102f361100b565b61035361101e565b610339611032565b610208611038565b6102a9600480360360408110156104bc57600080fd5b506001600160a01b038135169060200135611099565b610353611101565b6102a9600480360360408110156104f057600080fd5b506001600160a01b038135169060200135611110565b610339611132565b6102f36004803603602081101561052457600080fd5b503561122e565b6102f36004803603602081101561054157600080fd5b50351515611238565b6103396004803603604081101561056057600080fd5b506001600160a01b03813581169160200135166112b8565b6102f36112e3565b610339611361565b6102f36004803603602081101561059e57600080fd5b50356001600160a01b0316611382565b610353611490565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106425780601f1061061757610100808354040283529160200191610642565b820191906000526020600020905b81548152906001019060200180831161062557829003601f168201915b5050505050905090565b600061066061065961149f565b84846114a3565b5060015b92915050565b61067261149f565b6001600160a01b031661068361101e565b6001600160a01b0316146106cc576040805162461bcd60e51b8152602060048201819052602482015260008051602061205f833981519152604482015290519081900360640190fd5b6009546001600160a01b0383811691161415610725576040805162461bcd60e51b815260206004820152601360248201527218d85b9b9bdd081cd85b1d9859d9481dd85b9d606a1b604482015290519081900360640190fd5b60095461073c906001600160a01b0316848361158f565b505050565b61074961149f565b6001600160a01b031661075a61101e565b6001600160a01b0316146107a3576040805162461bcd60e51b8152602060048201819052602482015260008051602061205f833981519152604482015290519081900360640190fd5b6103e88111156107b257600080fd5b600b55565b6107bf61149f565b6001600160a01b03166107d061101e565b6001600160a01b031614610819576040805162461bcd60e51b8152602060048201819052602482015260008051602061205f833981519152604482015290519081900360640190fd5b60075460ff161515811515141561082f57610888565b6007805460ff1916821515179081905560ff161561084c57426006555b6007546040805160ff90921615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec59181900360200190a15b50565b60025490565b6009546001600160a01b031690565b60006108ad8484846115e1565b61091d846108b961149f565b61091885604051806060016040528060288152602001612037602891396001600160a01b038a166000908152600160205260408120906108f761149f565b6001600160a01b03168152602081019190915260400160002054919061173c565b6114a3565b5060015b9392505050565b60026008541415610980576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600260085560006109aa61099261088b565b6109a48461099e611132565b906117d3565b9061182c565b90506109b63383611893565b600954604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610a0157600080fd5b505afa158015610a15573d6000803e3d6000fd5b505050506040513d6020811015610a2b57600080fd5b5051905081811015610b4d576000610a43838361198f565b600a5460408051632e1a7d4d60e01b81526004810184905290519293506001600160a01b0390911691632e1a7d4d9160248082019260009290919082900301818387803b158015610a9357600080fd5b505af1158015610aa7573d6000803e3d6000fd5b5050600954604080516370a0823160e01b81523060048201529051600094506001600160a01b0390921692506370a08231916024808301926020929190829003018186803b158015610af857600080fd5b505afa158015610b0c573d6000803e3d6000fd5b505050506040513d6020811015610b2257600080fd5b505190506000610b32828561198f565b905082811015610b4957610b4684826119ec565b94505b5050505b600954610b64906001600160a01b0316338461158f565b60408051838152905133917f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5919081900360200190a25050600160085550565b60055460ff1690565b60075460ff1615610bef5760405162461bcd60e51b815260040180806020018281038252603c8152602001806120a0603c913960400191505060405180910390fd5b60026008541415610c47576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600855600a54600160a01b900460ff168015610c6c57506000610c6a611132565b115b15610cda57600a60009054906101000a90046001600160a01b03166001600160a01b0316634641257d6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610cc157600080fd5b505af1158015610cd5573d6000803e3d6000fd5b505050505b6000610ce4611132565b600954604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610d3557600080fd5b505afa158015610d49573d6000803e3d6000fd5b505050506040513d6020811015610d5f57600080fd5b5051600954909150610d7c906001600160a01b0316333087611a46565b600954604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610dc757600080fd5b505afa158015610ddb573d6000803e3d6000fd5b505050506040513d6020811015610df157600080fd5b50519050610dff818361198f565b94506000610e0b61088b565b610e16575084610e2f565b610e2c846109a4610e2561088b565b89906117d3565b90505b600b5415610e64576000610e546127106109a4600b54856117d390919063ffffffff16565b9050610e60828261198f565b9150505b610e6e8582611aa6565b610e76611b96565b6040805187815290516001600160a01b038716917f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4919081900360200190a25050600160085550505050565b6000610660610ecf61149f565b846109188560016000610ee061149f565b6001600160a01b03908116825260208083019390935260409182016000908120918c1681529252902054906119ec565b6000610f1a61088b565b905090565b60075460ff1681565b600a54600160a01b900460ff1681565b600b5481565b6001600160a01b031660009081526020819052604090205490565b610f6161149f565b6001600160a01b0316610f7261101e565b6001600160a01b031614610fbb576040805162461bcd60e51b8152602060048201819052602482015260008051602061205f833981519152604482015290519081900360640190fd5b60055460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360058054610100600160a81b0319169055565b61101c61101733610f3e565b610928565b565b60055461010090046001600160a01b031690565b60065481565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106425780601f1061061757610100808354040283529160200191610642565b60006106606110a661149f565b846109188560405180606001604052806025815260200161214f60259139600160006110d061149f565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919061173c565b600a546001600160a01b031681565b60006001600160a01b03831630141561112857600080fd5b6109218383611c98565b6000610f1a600a60009054906101000a90046001600160a01b03166001600160a01b031663722713f76040518163ffffffff1660e01b815260040160206040518083038186803b15801561118557600080fd5b505afa158015611199573d6000803e3d6000fd5b505050506040513d60208110156111af57600080fd5b5051600954604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156111fc57600080fd5b505afa158015611210573d6000803e3d6000fd5b505050506040513d602081101561122657600080fd5b5051906119ec565b6108888133610bad565b61124061149f565b6001600160a01b031661125161101e565b6001600160a01b03161461129a576040805162461bcd60e51b8152602060048201819052602482015260008051602061205f833981519152604482015290519081900360640190fd5b600a8054911515600160a01b0260ff60a01b19909216919091179055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600954604080516370a0823160e01b8152336004820152905161101c926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561132f57600080fd5b505afa158015611343573d6000803e3d6000fd5b505050506040513d602081101561135957600080fd5b505133610bad565b6000610f1a61136e61088b565b6109a4670de0b6b3a764000061099e611132565b61138a61149f565b6001600160a01b031661139b61101e565b6001600160a01b0316146113e4576040805162461bcd60e51b8152602060048201819052602482015260008051602061205f833981519152604482015290519081900360640190fd5b6001600160a01b0381166114295760405162461bcd60e51b8152600401808060200182810382526026815260200180611f826026913960400191505060405180910390fd5b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6009546001600160a01b031681565b3390565b6001600160a01b0383166114e85760405162461bcd60e51b81526004018080602001828103825260248152602001806121016024913960400191505060405180910390fd5b6001600160a01b03821661152d5760405162461bcd60e51b8152600401808060200182810382526022815260200180611fa86022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261073c908490611cac565b6001600160a01b0383166116265760405162461bcd60e51b81526004018080602001828103825260258152602001806120dc6025913960400191505060405180910390fd5b6001600160a01b03821661166b5760405162461bcd60e51b8152600401808060200182810382526023815260200180611f3d6023913960400191505060405180910390fd5b61167683838361073c565b6116b381604051806060016040528060268152602001611fca602691396001600160a01b038616600090815260208190526040902054919061173c565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546116e290826119ec565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156117cb5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611790578181015183820152602001611778565b50505050905090810190601f1680156117bd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000826117e257506000610664565b828202828482816117ef57fe5b04146109215760405162461bcd60e51b81526004018080602001828103825260218152602001806120166021913960400191505060405180910390fd5b6000808211611882576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161188b57fe5b049392505050565b6001600160a01b0382166118d85760405162461bcd60e51b815260040180806020018281038252602181526020018061207f6021913960400191505060405180910390fd5b6118e48260008361073c565b61192181604051806060016040528060228152602001611f60602291396001600160a01b038516600090815260208190526040902054919061173c565b6001600160a01b038316600090815260208190526040902055600254611947908261198f565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000828211156119e6576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082820183811015610921576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611aa0908590611cac565b50505050565b6001600160a01b038216611b01576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611b0d6000838361073c565b600254611b1a90826119ec565b6002556001600160a01b038216600090815260208190526040902054611b4090826119ec565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600954604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611be157600080fd5b505afa158015611bf5573d6000803e3d6000fd5b505050506040513d6020811015611c0b57600080fd5b5051600a54600954919250611c2d916001600160a01b0390811691168361158f565b600a60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db06040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c7d57600080fd5b505af1158015611c91573d6000803e3d6000fd5b5050505050565b6000610660611ca561149f565b84846115e1565b6060611d01826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611d5d9092919063ffffffff16565b80519091501561073c57808060200190516020811015611d2057600080fd5b505161073c5760405162461bcd60e51b815260040180806020018281038252602a815260200180612125602a913960400191505060405180910390fd5b6060611d6c8484600085611d74565b949350505050565b606082471015611db55760405162461bcd60e51b8152600401808060200182810382526026815260200180611ff06026913960400191505060405180910390fd5b611dbe85611ed0565b611e0f576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310611e4e5780518252601f199092019160209182019101611e2f565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611eb0576040519150601f19603f3d011682016040523d82523d6000602084013e611eb5565b606091505b5091509150611ec5828286611ed6565b979650505050505050565b3b151590565b60608315611ee5575081610921565b825115611ef55782518084602001fd5b60405162461bcd60e51b815260206004820181815284516024840152845185939192839260440191908501908083836000831561179057818101518382015260200161177856fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657245524332303a206275726e2066726f6d20746865207a65726f20616464726573735468697320616374696f6e2063616e6e6f7420626520706572666f726d6564207768696c652074686520636f6e74726163742069732070617573656445524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220edbae64b3e35c054c056dc534f57b59900b7d7db8336b82e9ea996810102078a64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000025c4d57c9eafa243a8d74249fe70855e50931ce7000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001d4164616d616e7420467261787377617020776672784554482f4652415800000000000000000000000000000000000000000000000000000000000000000000176164616d616e745661756c745766727865746846726178000000000000000000
-----Decoded View---------------
Arg [0] : _strategy (address): 0x25c4D57c9eAFA243a8d74249fE70855E50931cE7
Arg [1] : name (string): Adamant Fraxswap wfrxETH/FRAX
Arg [2] : symbol (string): adamantVaultWfrxethFrax
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 00000000000000000000000025c4d57c9eafa243a8d74249fe70855e50931ce7
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000001d
Arg [4] : 4164616d616e7420467261787377617020776672784554482f46524158000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000017
Arg [6] : 6164616d616e745661756c745766727865746846726178000000000000000000
Deployed Bytecode Sourcemap
40766:5406:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13124:91;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15270:169;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15270:169:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;45719:286;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;45719:286:0;;;;;;;;;;;;;;;;;:::i;:::-;;45370:220;;;;;;;;;;;;;;;;-1:-1:-1;45370:220:0;;:::i;39950:488::-;;;;;;;;;;;;;;;;-1:-1:-1;39950:488:0;;;;:::i;14223:108::-;;;:::i;:::-;;;;;;;;;;;;;;;;42133:86;;;:::i;:::-;;;;-1:-1:-1;;;;;42133:86:0;;;;;;;;;;;;;;15921:321;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15921:321:0;;;;;;;;;;;;;;;;;:::i;44705:657::-;;;;;;;;;;;;;;;;-1:-1:-1;44705:657:0;;:::i;14067:91::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43331:1026;;;;;;;;;;;;;;;;-1:-1:-1;43331:1026:0;;;;;;-1:-1:-1;;;;;43331:1026:0;;:::i;16651:218::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16651:218:0;;;;;;;;:::i;42277:92::-;;;:::i;39534:18::-;;;:::i;41181:40::-;;;:::i;41228:25::-;;;:::i;14394:127::-;;;;;;;;;;;;;;;;-1:-1:-1;14394:127:0;-1:-1:-1;;;;;14394:127:0;;:::i;35245:148::-;;;:::i;44547:82::-;;;:::i;34594:87::-;;;:::i;39502:25::-;;;:::i;13334:95::-;;;:::i;17372:269::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17372:269:0;;;;;;;;:::i;41015:23::-;;;:::i;41845:189::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;41845:189:0;;;;;;;;:::i;42377:187::-;;;:::i;42857:93::-;;;;;;;;;;;;;;;;-1:-1:-1;42857:93:0;;:::i;45598:113::-;;;;;;;;;;;;;;;;-1:-1:-1;45598:113:0;;;;:::i;14972:151::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;14972:151:0;;;;;;;;;;:::i;42748:101::-;;;:::i;42572:114::-;;;:::i;35548:244::-;;;;;;;;;;;;;;;;-1:-1:-1;35548:244:0;-1:-1:-1;;;;;35548:244:0;;:::i;40989:19::-;;;:::i;13124:91::-;13202:5;13195:12;;;;;;;;-1:-1:-1;;13195:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13169:13;;13195:12;;13202:5;;13195:12;;13202:5;13195:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13124:91;:::o;15270:169::-;15353:4;15370:39;15379:12;:10;:12::i;:::-;15393:7;15402:6;15370:8;:39::i;:::-;-1:-1:-1;15427:4:0;15270:169;;;;;:::o;45719:286::-;34825:12;:10;:12::i;:::-;-1:-1:-1;;;;;34814:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34814:23:0;;34806:68;;;;;-1:-1:-1;;;34806:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;34806:68:0;;;;;;;;;;;;;;;45911:5:::1;::::0;-1:-1:-1;;;;;45893:24:0;;::::1;45911:5:::0;::::1;45893:24;;45885:56;;;::::0;;-1:-1:-1;;;45885:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;45885:56:0;;;;;;;;;;;;;::::1;;45959:5;::::0;45952:45:::1;::::0;-1:-1:-1;;;;;45959:5:0::1;45979:9:::0;45990:6;45952:26:::1;:45::i;:::-;45719:286:::0;;;:::o;45370:220::-;34825:12;:10;:12::i;:::-;-1:-1:-1;;;;;34814:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34814:23:0;;34806:68;;;;;-1:-1:-1;;;34806:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;34806:68:0;;;;;;;;;;;;;;;45469:4:::1;45454:11;:19;;45446:28;;;::::0;::::1;;45558:10;:24:::0;45370:220::o;39950:488::-;34825:12;:10;:12::i;:::-;-1:-1:-1;;;;;34814:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34814:23:0;;34806:68;;;;;-1:-1:-1;;;34806:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;34806:68:0;;;;;;;;;;;;;;;40103:6:::1;::::0;::::1;;40092:17;;::::0;::::1;;;40088:56;;;40126:7;;40088:56;40190:6;:16:::0;;-1:-1:-1;;40190:16:0::1;::::0;::::1;;;::::0;;;;::::1;40275:6;40271:58;;;40314:3;40298:13;:19:::0;40271:58:::1;40423:6;::::0;40410:20:::1;::::0;;40423:6:::1;::::0;;::::1;40410:20;;::::0;;;::::1;::::0;;;;::::1;::::0;;::::1;34885:1;39950:488:::0;:::o;14223:108::-;14311:12;;14223:108;:::o;42133:86::-;42205:5;;-1:-1:-1;;;;;42205:5:0;42133:86;:::o;15921:321::-;16027:4;16044:36;16054:6;16062:9;16073:6;16044:9;:36::i;:::-;16091:121;16100:6;16108:12;:10;:12::i;:::-;16122:89;16160:6;16122:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16122:19:0;;;;;;:11;:19;;;;;;16142:12;:10;:12::i;:::-;-1:-1:-1;;;;;16122:33:0;;;;;;;;;;;;-1:-1:-1;16122:33:0;;;:89;:37;:89::i;:::-;16091:8;:121::i;:::-;-1:-1:-1;16230:4:0;15921:321;;;;;;:::o;44705:657::-;37452:1;38058:7;;:19;;38050:63;;;;;-1:-1:-1;;;38050:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37452:1;38191:7;:18;44771:9:::1;44783:43;44812:13;:11;:13::i;:::-;44784:22;44798:7;44784:9;:7;:9::i;:::-;:13:::0;::::1;:22::i;:::-;44783:28:::0;::::1;:43::i;:::-;44771:55;;44837:26;44843:10;44855:7;44837:5;:26::i;:::-;44914:5;::::0;:30:::1;::::0;;-1:-1:-1;;;44914:30:0;;44938:4:::1;44914:30;::::0;::::1;::::0;;;44902:9:::1;::::0;-1:-1:-1;;;;;44914:5:0::1;::::0;:15:::1;::::0;:30;;;;;::::1;::::0;;;;;;;;:5;:30;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;44914:30:0;;-1:-1:-1;44959:5:0;;::::1;44955:314;;;44981:17;45001:8;:1:::0;45007;45001:5:::1;:8::i;:::-;45034;::::0;45024:39:::1;::::0;;-1:-1:-1;;;45024:39:0;;::::1;::::0;::::1;::::0;;;;;44981:28;;-1:-1:-1;;;;;;45034:8:0;;::::1;::::0;45024:28:::1;::::0;:39;;;;;45034:8:::1;::::0;45024:39;;;;;;;;45034:8;;45024:39;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;45095:5:0::1;::::0;:30:::1;::::0;;-1:-1:-1;;;45095:30:0;;45119:4:::1;45095:30;::::0;::::1;::::0;;;45078:14:::1;::::0;-1:-1:-1;;;;;;45095:5:0;;::::1;::::0;-1:-1:-1;45095:15:0::1;::::0;:30;;;;;::::1;::::0;;;;;;;;:5;:30;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;45095:30:0;;-1:-1:-1;45140:13:0::1;45156;45095:30:::0;45167:1;45156:10:::1;:13::i;:::-;45140:29;;45196:9;45188:5;:17;45184:74;;;45230:12;:1:::0;45236:5;45230::::1;:12::i;:::-;45226:16;;45184:74;44955:314;;;;45281:5;::::0;:33:::1;::::0;-1:-1:-1;;;;;45281:5:0::1;45300:10;45312:1:::0;45281:18:::1;:33::i;:::-;45330:24;::::0;;;;;;;45340:10:::1;::::0;45330:24:::1;::::0;;;;;::::1;::::0;;::::1;-1:-1:-1::0;;37408:1:0;38370:7;:22;-1:-1:-1;44705:657:0:o;14067:91::-;14141:9;;;;14067:91;:::o;43331:1026::-;40527:6;;;;40526:7;40518:80;;;;-1:-1:-1;;;40518:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37452:1:::1;38058:7;;:19;;38050:63;;;::::0;;-1:-1:-1;;;38050:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;37452:1;38191:7;:18:::0;43434:21:::2;::::0;-1:-1:-1;;;43434:21:0;::::2;;;:38:::0;::::2;;;;43471:1;43459:9;:7;:9::i;:::-;:13;43434:38;43431:99;;;43499:8;;;;;;;;;-1:-1:-1::0;;;;;43499:8:0::2;-1:-1:-1::0;;;;;43489:27:0::2;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;43431:99;43542:13;43558:9;:7;:9::i;:::-;43596:5;::::0;:30:::2;::::0;;-1:-1:-1;;;43596:30:0;;43620:4:::2;43596:30;::::0;::::2;::::0;;;43542:25;;-1:-1:-1;43578:15:0::2;::::0;-1:-1:-1;;;;;43596:5:0;;::::2;::::0;:15:::2;::::0;:30;;;;;::::2;::::0;;;;;;;;;:5;:30;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;43596:30:0;43637:5:::2;::::0;43596:30;;-1:-1:-1;43637:58:0::2;::::0;-1:-1:-1;;;;;43637:5:0::2;43660:10;43680:4;43687:7:::0;43637:22:::2;:58::i;:::-;43723:5;::::0;:30:::2;::::0;;-1:-1:-1;;;43723:30:0;;43747:4:::2;43723:30;::::0;::::2;::::0;;;43706:14:::2;::::0;-1:-1:-1;;;;;43723:5:0::2;::::0;:15:::2;::::0;:30;;;;;::::2;::::0;;;;;;;;:5;:30;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;43723:30:0;;-1:-1:-1;43774:19:0::2;43723:30:::0;43785:7;43774:10:::2;:19::i;:::-;43764:29;;43848:14;43881:13;:11;:13::i;:::-;43877:148;;-1:-1:-1::0;43925:7:0;43877:148:::2;;;43974:39;44007:5;43975:26;43987:13;:11;:13::i;:::-;43975:7:::0;;:11:::2;:26::i;43974:39::-;43965:48;;43877:148;44106:10;::::0;:14;44103:142:::2;;44137:11;44151:43;40975:5;44151:22;44162:10;;44151:6;:10;;:22;;;;:::i;:43::-;44137:57:::0;-1:-1:-1;44218:15:0::2;:6:::0;44137:57;44218:10:::2;:15::i;:::-;44209:24;;44103:142;;44257:27;44263:12;44277:6;44257:5;:27::i;:::-;44295:6;:4;:6::i;:::-;44317:32;::::0;;;;;;;-1:-1:-1;;;;;44317:32:0;::::2;::::0;::::2;::::0;;;;;::::2;::::0;;::::2;-1:-1:-1::0;;37408:1:0::1;38370:7;:22:::0;-1:-1:-1;;;;43331:1026:0:o;16651:218::-;16739:4;16756:83;16765:12;:10;:12::i;:::-;16779:7;16788:50;16827:10;16788:11;:25;16800:12;:10;:12::i;:::-;-1:-1:-1;;;;;16788:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;16788:25:0;;;:34;;;;;;;;;;;:38;:50::i;42277:92::-;42321:7;42348:13;:11;:13::i;:::-;42341:20;;42277:92;:::o;39534:18::-;;;;;;:::o;41181:40::-;;;-1:-1:-1;;;41181:40:0;;;;;:::o;41228:25::-;;;;:::o;14394:127::-;-1:-1:-1;;;;;14495:18:0;14468:7;14495:18;;;;;;;;;;;;14394:127::o;35245:148::-;34825:12;:10;:12::i;:::-;-1:-1:-1;;;;;34814:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34814:23:0;;34806:68;;;;;-1:-1:-1;;;34806:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;34806:68:0;;;;;;;;;;;;;;;35336:6:::1;::::0;35315:40:::1;::::0;35352:1:::1;::::0;35336:6:::1;::::0;::::1;-1:-1:-1::0;;;;;35336:6:0::1;::::0;35315:40:::1;::::0;35352:1;;35315:40:::1;35366:6;:19:::0;;-1:-1:-1;;;;;;35366:19:0::1;::::0;;35245:148::o;44547:82::-;44590:31;44599:21;44609:10;44599:9;:21::i;:::-;44590:8;:31::i;:::-;44547:82::o;34594:87::-;34667:6;;;;;-1:-1:-1;;;;;34667:6:0;;34594:87::o;39502:25::-;;;;:::o;13334:95::-;13414:7;13407:14;;;;;;;;-1:-1:-1;;13407:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13381:13;;13407:14;;13414:7;;13407:14;;13414:7;13407:14;;;;;;;;;;;;;;;;;;;;;;;;17372:269;17465:4;17482:129;17491:12;:10;:12::i;:::-;17505:7;17514:96;17553:15;17514:96;;;;;;;;;;;;;;;;;:11;:25;17526:12;:10;:12::i;:::-;-1:-1:-1;;;;;17514:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;17514:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;41015:23::-;;;-1:-1:-1;;;;;41015:23:0;;:::o;41845:189::-;41923:4;-1:-1:-1;;;;;41948:26:0;;41969:4;41948:26;;41940:35;;;;;;41993:33;42008:9;42019:6;41993:14;:33::i;42377:187::-;42417:7;42457:99;42520:8;;;;;;;;;-1:-1:-1;;;;;42520:8:0;-1:-1:-1;;;;;42510:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42510:31:0;42457:5;;:30;;;-1:-1:-1;;;42457:30:0;;42481:4;42457:30;;;;;;-1:-1:-1;;;;;42457:5:0;;;;:15;;:30;;;;;42510:31;;42457:30;;;;;;;;:5;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42457:30:0;;:34;:99::i;42857:93::-;42911:31;42922:7;42931:10;42911;:31::i;45598:113::-;34825:12;:10;:12::i;:::-;-1:-1:-1;;;;;34814:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34814:23:0;;34806:68;;;;;-1:-1:-1;;;34806:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;34806:68:0;;;;;;;;;;;;;;;45673:21:::1;:30:::0;;;::::1;;-1:-1:-1::0;;;45673:30:0::1;-1:-1:-1::0;;;;45673:30:0;;::::1;::::0;;;::::1;::::0;;45598:113::o;14972:151::-;-1:-1:-1;;;;;15088:18:0;;;15061:7;15088:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;14972:151::o;42748:101::-;42801:5;;:27;;;-1:-1:-1;;;42801:27:0;;42817:10;42801:27;;;;;;42790:51;;-1:-1:-1;;;;;42801:5:0;;:15;;:27;;;;;;;;;;;;;;:5;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42801:27:0;42830:10;42790;:51::i;42572:114::-;42613:7;42640:38;42664:13;:11;:13::i;:::-;42640:19;42654:4;42640:9;:7;:9::i;35548:244::-;34825:12;:10;:12::i;:::-;-1:-1:-1;;;;;34814:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;34814:23:0;;34806:68;;;;;-1:-1:-1;;;34806:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;34806:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;35637:22:0;::::1;35629:73;;;;-1:-1:-1::0;;;35629:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35739:6;::::0;35718:38:::1;::::0;-1:-1:-1;;;;;35718:38:0;;::::1;::::0;35739:6:::1;::::0;::::1;;::::0;35718:38:::1;::::0;;;::::1;35767:6;:17:::0;;-1:-1:-1;;;;;35767:17:0;;::::1;;;-1:-1:-1::0;;;;;;35767:17:0;;::::1;::::0;;;::::1;::::0;;35548:244::o;40989:19::-;;;-1:-1:-1;;;;;40989:19:0;;:::o;613:106::-;701:10;613:106;:::o;20519:346::-;-1:-1:-1;;;;;20621:19:0;;20613:68;;;;-1:-1:-1;;;20613:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20700:21:0;;20692:68;;;;-1:-1:-1;;;20692:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20773:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;20825:32;;;;;;;;;;;;;;;;;20519:346;;;:::o;30502:177::-;30612:58;;;-1:-1:-1;;;;;30612:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30612:58:0;-1:-1:-1;;;30612:58:0;;;30585:86;;30605:5;;30585:19;:86::i;18131:539::-;-1:-1:-1;;;;;18237:20:0;;18229:70;;;;-1:-1:-1;;;18229:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18318:23:0;;18310:71;;;;-1:-1:-1;;;18310:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18394:47;18415:6;18423:9;18434:6;18394:20;:47::i;:::-;18474:71;18496:6;18474:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18474:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;18454:17:0;;;:9;:17;;;;;;;;;;;:91;;;;18579:20;;;;;;;:32;;18604:6;18579:24;:32::i;:::-;-1:-1:-1;;;;;18556:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;18627:35;;;;;;;18556:20;;18627:35;;;;;;;;;;;;;18131:539;;;:::o;9215:166::-;9301:7;9337:12;9329:6;;;;9321:29;;;;-1:-1:-1;;;9321:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9368:5:0;;;9215:166::o;7267:220::-;7325:7;7349:6;7345:20;;-1:-1:-1;7364:1:0;7357:8;;7345:20;7388:5;;;7392:1;7388;:5;:1;7412:5;;;;;:10;7404:56;;;;-1:-1:-1;;;7404:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7965:153;8023:7;8055:1;8051;:5;8043:44;;;;;-1:-1:-1;;;8043:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8109:1;8105;:5;;;;;;;7965:153;-1:-1:-1;;;7965:153:0:o;19663:418::-;-1:-1:-1;;;;;19747:21:0;;19739:67;;;;-1:-1:-1;;;19739:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19819:49;19840:7;19857:1;19861:6;19819:20;:49::i;:::-;19902:68;19925:6;19902:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19902:18:0;;:9;:18;;;;;;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;19881:18:0;;:9;:18;;;;;;;;;;:89;19996:12;;:24;;20013:6;19996:16;:24::i;:::-;19981:12;:39;20036:37;;;;;;;;20062:1;;-1:-1:-1;;;;;20036:37:0;;;;;;;;;;;;19663:418;;:::o;6850:158::-;6908:7;6941:1;6936;:6;;6928:49;;;;;-1:-1:-1;;;6928:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6995:5:0;;;6850:158::o;6388:179::-;6446:7;6478:5;;;6502:6;;;;6494:46;;;;;-1:-1:-1;;;6494:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;30687:205;30815:68;;;-1:-1:-1;;;;;30815:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30815:68:0;-1:-1:-1;;;30815:68:0;;;30788:96;;30808:5;;30788:19;:96::i;:::-;30687:205;;;;:::o;18952:378::-;-1:-1:-1;;;;;19036:21:0;;19028:65;;;;;-1:-1:-1;;;19028:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19106:49;19135:1;19139:7;19148:6;19106:20;:49::i;:::-;19183:12;;:24;;19200:6;19183:16;:24::i;:::-;19168:12;:39;-1:-1:-1;;;;;19239:18:0;;:9;:18;;;;;;;;;;;:30;;19262:6;19239:22;:30::i;:::-;-1:-1:-1;;;;;19218:18:0;;:9;:18;;;;;;;;;;;:51;;;;19285:37;;;;;;;19218:18;;:9;;19285:37;;;;;;;;;;18952:378;;:::o;44365:174::-;44416:5;;:30;;;-1:-1:-1;;;44416:30:0;;44440:4;44416:30;;;;;;44401:12;;-1:-1:-1;;;;;44416:5:0;;:15;;:30;;;;;;;;;;;;;;:5;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44416:30:0;44476:8;;44457:5;;44416:30;;-1:-1:-1;44457:34:0;;-1:-1:-1;;;;;44457:5:0;;;;44476:8;44416:30;44457:18;:34::i;:::-;44512:8;;;;;;;;;-1:-1:-1;;;;;44512:8:0;-1:-1:-1;;;;;44502:27:0;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44365:174;:::o;14734:175::-;14820:4;14837:42;14847:12;:10;:12::i;:::-;14861:9;14872:6;14837:9;:42::i;32807:761::-;33231:23;33257:69;33285:4;33257:69;;;;;;;;;;;;;;;;;33265:5;-1:-1:-1;;;;;33257:27:0;;;:69;;;;;:::i;:::-;33341:17;;33231:95;;-1:-1:-1;33341:21:0;33337:224;;33483:10;33472:30;;;;;;;;;;;;;;;-1:-1:-1;33472:30:0;33464:85;;;;-1:-1:-1;;;33464:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25598:195;25701:12;25733:52;25755:6;25763:4;25769:1;25772:12;25733:21;:52::i;:::-;25726:59;25598:195;-1:-1:-1;;;;25598:195:0:o;26650:530::-;26777:12;26835:5;26810:21;:30;;26802:81;;;;-1:-1:-1;;;26802:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26902:18;26913:6;26902:10;:18::i;:::-;26894:60;;;;;-1:-1:-1;;;26894:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;27028:12;27042:23;27069:6;-1:-1:-1;;;;;27069:11:0;27089:5;27097:4;27069:33;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27069:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27027:75;;;;27120:52;27138:7;27147:10;27159:12;27120:17;:52::i;:::-;27113:59;26650:530;-1:-1:-1;;;;;;;26650:530:0:o;22680:422::-;23047:20;23086:8;;;22680:422::o;29190:742::-;29305:12;29334:7;29330:595;;;-1:-1:-1;29365:10:0;29358:17;;29330:595;29479:17;;:21;29475:439;;29742:10;29736:17;29803:15;29790:10;29786:2;29782:19;29775:44;29690:148;29878:20;;-1:-1:-1;;;29878:20:0;;;;;;;;;;;;;;;;;29885:12;;29878:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://edbae64b3e35c054c056dc534f57b59900b7d7db8336b82e9ea996810102078a
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in FRAX
0
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.