More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 55 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Add Liquidity | 11087648 | 1594 days ago | IN | 0 ETH | 0.01064857 | ||||
Post | 11084695 | 1595 days ago | IN | 0.051 ETH | 0.00324779 | ||||
Onboard | 11084679 | 1595 days ago | IN | 0 ETH | 0.00237607 | ||||
Authorize Pool | 11081632 | 1595 days ago | IN | 0 ETH | 0.00292204 | ||||
Authorize Pool | 11081627 | 1595 days ago | IN | 0 ETH | 0.00063728 | ||||
Authorize Pool | 11081625 | 1595 days ago | IN | 0 ETH | 0.00292204 | ||||
Onboard | 11081618 | 1595 days ago | IN | 0 ETH | 0.00224406 | ||||
Add Liquidity | 11081601 | 1595 days ago | IN | 0 ETH | 0.0086332 | ||||
Authorize Pool | 11081590 | 1595 days ago | IN | 0 ETH | 0.00292204 | ||||
Onboard | 11081569 | 1595 days ago | IN | 0 ETH | 0.00198825 | ||||
Add Liquidity | 11069562 | 1597 days ago | IN | 0 ETH | 0.0106547 | ||||
Add Liquidity | 11069553 | 1597 days ago | IN | 0 ETH | 0.01053972 | ||||
Sell Dai | 11069500 | 1597 days ago | IN | 0 ETH | 0.00293355 | ||||
Sell Dai | 11069496 | 1597 days ago | IN | 0 ETH | 0.00294442 | ||||
Sell Dai | 11069474 | 1597 days ago | IN | 0 ETH | 0.00292805 | ||||
Sell Dai | 11069449 | 1597 days ago | IN | 0 ETH | 0.0029363 | ||||
Sell Dai | 11069447 | 1597 days ago | IN | 0 ETH | 0.00293857 | ||||
Sell Dai | 11069444 | 1597 days ago | IN | 0 ETH | 0.00222966 | ||||
Authorize Pool | 11067911 | 1597 days ago | IN | 0 ETH | 0.01443834 | ||||
Authorize Pool | 11067907 | 1597 days ago | IN | 0 ETH | 0.01271949 | ||||
Add Liquidity | 11067875 | 1597 days ago | IN | 0 ETH | 0.03475352 | ||||
Add Liquidity | 11067872 | 1597 days ago | IN | 0 ETH | 0.0347176 | ||||
Add Liquidity | 11067868 | 1597 days ago | IN | 0 ETH | 0.0291837 | ||||
Authorize Pool | 11067863 | 1597 days ago | IN | 0 ETH | 0.00278894 | ||||
Authorize Pool | 11067863 | 1597 days ago | IN | 0 ETH | 0.00278894 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
YieldProxy
Compiler Version
v0.6.10+commit.00c0fcaf
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-10-16 */ // File: contracts/interfaces/IDelegable.sol pragma solidity ^0.6.10; interface IDelegable { function addDelegate(address) external; function addDelegateBySignature(address, address, uint, uint8, bytes32, bytes32) external; } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol pragma solidity ^0.6.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: contracts/interfaces/IVat.sol pragma solidity ^0.6.10; /// @dev Interface to interact with the vat contract from MakerDAO /// Taken from https://github.com/makerdao/developerguides/blob/master/devtools/working-with-dsproxy/working-with-dsproxy.md interface IVat { // function can(address, address) external view returns (uint); function hope(address) external; function nope(address) external; function live() external view returns (uint); function ilks(bytes32) external view returns (uint, uint, uint, uint, uint); function urns(bytes32, address) external view returns (uint, uint); function gem(bytes32, address) external view returns (uint); // function dai(address) external view returns (uint); function frob(bytes32, address, address, address, int, int) external; function fork(bytes32, address, address, int, int) external; function move(address, address, uint) external; function flux(bytes32, address, address, uint) external; } // File: contracts/interfaces/IWeth.sol pragma solidity ^0.6.10; interface IWeth { function deposit() external payable; function withdraw(uint) external; function approve(address, uint) external returns (bool) ; function transfer(address, uint) external returns (bool); function transferFrom(address, address, uint) external returns (bool); } // File: contracts/interfaces/IGemJoin.sol pragma solidity ^0.6.10; /// @dev Interface to interact with the `Join.sol` contract from MakerDAO using ERC20 interface IGemJoin { function rely(address usr) external; function deny(address usr) external; function cage() external; function join(address usr, uint WAD) external; function exit(address usr, uint WAD) external; } // File: contracts/interfaces/IDaiJoin.sol pragma solidity ^0.6.10; /// @dev Interface to interact with the `Join.sol` contract from MakerDAO using Dai interface IDaiJoin { function rely(address usr) external; function deny(address usr) external; function cage() external; function join(address usr, uint WAD) external; function exit(address usr, uint WAD) external; } // File: contracts/interfaces/IPot.sol pragma solidity ^0.6.10; /// @dev interface for the pot contract from MakerDao /// Taken from https://github.com/makerdao/developerguides/blob/master/dai/dsr-integration-guide/dsr.sol interface IPot { function chi() external view returns (uint256); function pie(address) external view returns (uint256); // Not a function, but a public variable. function rho() external returns (uint256); function drip() external returns (uint256); function join(uint256) external; function exit(uint256) external; } // File: contracts/interfaces/IChai.sol pragma solidity ^0.6.10; /// @dev interface for the chai contract /// Taken from https://github.com/makerdao/developerguides/blob/master/dai/dsr-integration-guide/dsr.sol interface IChai { function balanceOf(address account) external view returns (uint256); function transfer(address dst, uint wad) external returns (bool); function move(address src, address dst, uint wad) external returns (bool); function transferFrom(address src, address dst, uint wad) external returns (bool); function approve(address usr, uint wad) external returns (bool); function dai(address usr) external returns (uint wad); function join(address dst, uint wad) external; function exit(address src, uint wad) external; function draw(address src, uint wad) external; function permit(address holder, address spender, uint256 nonce, uint256 expiry, bool allowed, uint8 v, bytes32 r, bytes32 s) external; function nonces(address account) external view returns (uint256); } // File: contracts/interfaces/ITreasury.sol pragma solidity ^0.6.10; interface ITreasury { function debt() external view returns(uint256); function savings() external view returns(uint256); function pushDai(address user, uint256 dai) external; function pullDai(address user, uint256 dai) external; function pushChai(address user, uint256 chai) external; function pullChai(address user, uint256 chai) external; function pushWeth(address to, uint256 weth) external; function pullWeth(address to, uint256 weth) external; function shutdown() external; function live() external view returns(bool); function vat() external view returns (IVat); function weth() external view returns (IWeth); function dai() external view returns (IERC20); function daiJoin() external view returns (IDaiJoin); function wethJoin() external view returns (IGemJoin); function pot() external view returns (IPot); function chai() external view returns (IChai); } // File: contracts/interfaces/IERC2612.sol // Code adapted from https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2237/ pragma solidity ^0.6.0; /** * @dev Interface of the ERC2612 standard as defined in the EIP. * * Adds the {permit} method, which can be used to change one's * {IERC20-allowance} without having to send a transaction, by signing a * message. This allows users to spend tokens without having to hold Ether. * * See https://eips.ethereum.org/EIPS/eip-2612. */ interface IERC2612 { /** * @dev Sets `amount` as the allowance of `spender` over `owner`'s tokens, * given `owner`'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit(address owner, address spender, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external; /** * @dev Returns the current ERC2612 nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); } // File: contracts/interfaces/IFYDai.sol pragma solidity ^0.6.10; interface IFYDai is IERC20, IERC2612 { function isMature() external view returns(bool); function maturity() external view returns(uint); function chi0() external view returns(uint); function rate0() external view returns(uint); function chiGrowth() external view returns(uint); function rateGrowth() external view returns(uint); function mature() external; function unlocked() external view returns (uint); function mint(address, uint) external; function burn(address, uint) external; function flashMint(uint, bytes calldata) external; function redeem(address, address, uint256) external returns (uint256); // function transfer(address, uint) external returns (bool); // function transferFrom(address, address, uint) external returns (bool); // function approve(address, uint) external returns (bool); } // File: contracts/interfaces/IController.sol pragma solidity ^0.6.10; interface IController is IDelegable { function treasury() external view returns (ITreasury); function series(uint256) external view returns (IFYDai); function seriesIterator(uint256) external view returns (uint256); function totalSeries() external view returns (uint256); function containsSeries(uint256) external view returns (bool); function posted(bytes32, address) external view returns (uint256); function debtFYDai(bytes32, uint256, address) external view returns (uint256); function debtDai(bytes32, uint256, address) external view returns (uint256); function totalDebtDai(bytes32, address) external view returns (uint256); function isCollateralized(bytes32, address) external view returns (bool); function inDai(bytes32, uint256, uint256) external view returns (uint256); function inFYDai(bytes32, uint256, uint256) external view returns (uint256); function erase(bytes32, address) external returns (uint256, uint256); function shutdown() external; function post(bytes32, address, address, uint256) external; function withdraw(bytes32, address, address, uint256) external; function borrow(bytes32, uint256, address, address, uint256) external; function repayFYDai(bytes32, uint256, address, address, uint256) external returns (uint256); function repayDai(bytes32, uint256, address, address, uint256) external returns (uint256); } // File: contracts/interfaces/IDai.sol pragma solidity ^0.6.10; interface IDai is IERC20 { function nonces(address user) external view returns (uint256); function permit(address holder, address spender, uint256 nonce, uint256 expiry, bool allowed, uint8 v, bytes32 r, bytes32 s) external; } // File: contracts/interfaces/IPool.sol pragma solidity ^0.6.10; interface IPool is IDelegable, IERC20, IERC2612 { function dai() external view returns(IERC20); function fyDai() external view returns(IFYDai); function getDaiReserves() external view returns(uint128); function getFYDaiReserves() external view returns(uint128); function sellDai(address from, address to, uint128 daiIn) external returns(uint128); function buyDai(address from, address to, uint128 daiOut) external returns(uint128); function sellFYDai(address from, address to, uint128 fyDaiIn) external returns(uint128); function buyFYDai(address from, address to, uint128 fyDaiOut) external returns(uint128); function sellDaiPreview(uint128 daiIn) external view returns(uint128); function buyDaiPreview(uint128 daiOut) external view returns(uint128); function sellFYDaiPreview(uint128 fyDaiIn) external view returns(uint128); function buyFYDaiPreview(uint128 fyDaiOut) external view returns(uint128); function mint(address from, address to, uint256 daiOffered) external returns (uint256); function burn(address from, address to, uint256 tokensBurned) external returns (uint256, uint256); } // File: @openzeppelin/contracts/math/SafeMath.sol pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: contracts/helpers/DecimalMath.sol pragma solidity ^0.6.10; /// @dev Implements simple fixed point math mul and div operations for 27 decimals. contract DecimalMath { using SafeMath for uint256; uint256 constant public UNIT = 1e27; /// @dev Multiplies x and y, assuming they are both fixed point with 27 digits. function muld(uint256 x, uint256 y) internal pure returns (uint256) { return x.mul(y).div(UNIT); } /// @dev Divides x between y, assuming they are both fixed point with 27 digits. function divd(uint256 x, uint256 y) internal pure returns (uint256) { return x.mul(UNIT).div(y); } /// @dev Multiplies x and y, rounding up to the closest representable number. /// Assumes x and y are both fixed point with `decimals` digits. function muldrup(uint256 x, uint256 y) internal pure returns (uint256) { uint256 z = x.mul(y); return z.mod(UNIT) == 0 ? z.div(UNIT) : z.div(UNIT).add(1); } /// @dev Divides x between y, rounding up to the closest representable number. /// Assumes x and y are both fixed point with `decimals` digits. function divdrup(uint256 x, uint256 y) internal pure returns (uint256) { uint256 z = x.mul(UNIT); return z.mod(y) == 0 ? z.div(y) : z.div(y).add(1); } } // File: contracts/peripheral/YieldProxy.sol pragma solidity ^0.6.10; library SafeCast { /// @dev Safe casting from uint256 to uint128 function toUint128(uint256 x) internal pure returns(uint128) { require( x <= type(uint128).max, "YieldProxy: Cast overflow" ); return uint128(x); } /// @dev Safe casting from uint256 to int256 function toInt256(uint256 x) internal pure returns(int256) { require( x <= uint256(type(int256).max), "YieldProxy: Cast overflow" ); return int256(x); } } contract YieldProxy is DecimalMath { using SafeCast for uint256; IVat public vat; IWeth public weth; IDai public dai; IGemJoin public wethJoin; IDaiJoin public daiJoin; IChai public chai; IController public controller; ITreasury public treasury; IPool[] public pools; mapping (address => bool) public poolsMap; bytes32 public constant CHAI = "CHAI"; bytes32 public constant WETH = "ETH-A"; bool constant public MTY = true; bool constant public YTM = false; constructor(address controller_, IPool[] memory _pools) public { controller = IController(controller_); treasury = controller.treasury(); weth = treasury.weth(); dai = IDai(address(treasury.dai())); chai = treasury.chai(); daiJoin = treasury.daiJoin(); wethJoin = treasury.wethJoin(); vat = treasury.vat(); // for repaying debt dai.approve(address(treasury), uint(-1)); // for posting to the controller chai.approve(address(treasury), uint(-1)); weth.approve(address(treasury), uint(-1)); // for converting DAI to CHAI dai.approve(address(chai), uint(-1)); vat.hope(address(daiJoin)); vat.hope(address(wethJoin)); dai.approve(address(daiJoin), uint(-1)); weth.approve(address(wethJoin), uint(-1)); weth.approve(address(treasury), uint(-1)); // allow all the pools to pull FYDai/dai from us for LPing for (uint i = 0 ; i < _pools.length; i++) { dai.approve(address(_pools[i]), uint(-1)); _pools[i].fyDai().approve(address(_pools[i]), uint(-1)); poolsMap[address(_pools[i])]= true; } pools = _pools; } /// @dev Unpack r, s and v from a `bytes` signature function unpack(bytes memory signature) private pure returns (bytes32 r, bytes32 s, uint8 v) { assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } } /// @dev Performs the initial onboarding of the user. It `permit`'s DAI to be used by the proxy, and adds the proxy as a delegate in the controller function onboard(address from, bytes memory daiSignature, bytes memory controllerSig) external { bytes32 r; bytes32 s; uint8 v; (r, s, v) = unpack(daiSignature); dai.permit(from, address(this), dai.nonces(from), uint(-1), true, v, r, s); (r, s, v) = unpack(controllerSig); controller.addDelegateBySignature(from, address(this), uint(-1), v, r, s); } /// @dev Given a pool and 3 signatures, it `permit`'s dai and fyDai for that pool and adds it as a delegate function authorizePool(IPool pool, address from, bytes memory daiSig, bytes memory fyDaiSig, bytes memory poolSig) public { onlyKnownPool(pool); bytes32 r; bytes32 s; uint8 v; (r, s, v) = unpack(daiSig); dai.permit(from, address(pool), dai.nonces(from), uint(-1), true, v, r, s); (r, s, v) = unpack(fyDaiSig); pool.fyDai().permit(from, address(this), uint(-1), uint(-1), v, r, s); (r, s, v) = unpack(poolSig); pool.addDelegateBySignature(from, address(this), uint(-1), v, r, s); } /// @dev The WETH9 contract will send ether to YieldProxy on `weth.withdraw` using this function. receive() external payable { } /// @dev Users use `post` in YieldProxy to post ETH to the Controller (amount = msg.value), which will be converted to Weth here. /// @param to Yield Vault to deposit collateral in. function post(address to) public payable { weth.deposit{ value: msg.value }(); controller.post(WETH, address(this), to, msg.value); } /// @dev Users wishing to withdraw their Weth as ETH from the Controller should use this function. /// Users must have called `controller.addDelegate(yieldProxy.address)` to authorize YieldProxy to act in their behalf. /// @param to Wallet to send Eth to. /// @param amount Amount of weth to move. function withdraw(address payable to, uint256 amount) public { controller.withdraw(WETH, msg.sender, address(this), amount); weth.withdraw(amount); to.transfer(amount); } /// @dev Mints liquidity with provided Dai by borrowing fyDai with some of the Dai. /// Caller must have approved the proxy using`controller.addDelegate(yieldProxy)` /// Caller must have approved the dai transfer with `dai.approve(daiUsed)` /// @param daiUsed amount of Dai to use to mint liquidity. /// @param maxFYDai maximum amount of fyDai to be borrowed to mint liquidity. /// @return The amount of liquidity tokens minted. function addLiquidity(IPool pool, uint256 daiUsed, uint256 maxFYDai) external returns (uint256) { onlyKnownPool(pool); IFYDai fyDai = pool.fyDai(); require(fyDai.isMature() != true, "YieldProxy: Only before maturity"); require(dai.transferFrom(msg.sender, address(this), daiUsed), "YieldProxy: Transfer Failed"); // calculate needed fyDai uint256 daiReserves = dai.balanceOf(address(pool)); uint256 fyDaiReserves = fyDai.balanceOf(address(pool)); uint256 daiToAdd = daiUsed.mul(daiReserves).div(fyDaiReserves.add(daiReserves)); uint256 daiToConvert = daiUsed.sub(daiToAdd); require( daiToConvert <= maxFYDai, "YieldProxy: maxFYDai exceeded" ); // 1 Dai == 1 fyDai // convert dai to chai and borrow needed fyDai chai.join(address(this), daiToConvert); // look at the balance of chai in dai to avoid rounding issues uint256 toBorrow = chai.dai(address(this)); controller.post(CHAI, address(this), msg.sender, chai.balanceOf(address(this))); controller.borrow(CHAI, fyDai.maturity(), msg.sender, address(this), toBorrow); // mint liquidity tokens return pool.mint(address(this), msg.sender, daiToAdd); } /// @dev Burns tokens and sells Dai proceedings for fyDai. Pays as much debt as possible, then sells back any remaining fyDai for Dai. Then returns all Dai, and if there is no debt in the Controller, all posted Chai. /// Caller must have approved the proxy using`controller.addDelegate(yieldProxy)` and `pool.addDelegate(yieldProxy)` /// Caller must have approved the liquidity burn with `pool.approve(poolTokens)` /// @param poolTokens amount of pool tokens to burn. /// @param minimumDaiPrice minimum fyDai/Dai price to be accepted when internally selling Dai. /// @param minimumFYDaiPrice minimum Dai/fyDai price to be accepted when internally selling fyDai. function removeLiquidityEarlyDaiPool(IPool pool, uint256 poolTokens, uint256 minimumDaiPrice, uint256 minimumFYDaiPrice) external { onlyKnownPool(pool); IFYDai fyDai = pool.fyDai(); uint256 maturity = fyDai.maturity(); (uint256 daiObtained, uint256 fyDaiObtained) = pool.burn(msg.sender, address(this), poolTokens); // Exchange Dai for fyDai to pay as much debt as possible uint256 fyDaiBought = pool.sellDai(address(this), address(this), daiObtained.toUint128()); require( fyDaiBought >= muld(daiObtained, minimumDaiPrice), "YieldProxy: minimumDaiPrice not reached" ); fyDaiObtained = fyDaiObtained.add(fyDaiBought); uint256 fyDaiUsed; if (fyDaiObtained > 0 && controller.debtFYDai(CHAI, maturity, msg.sender) > 0) { fyDaiUsed = controller.repayFYDai(CHAI, maturity, address(this), msg.sender, fyDaiObtained); } uint256 fyDaiRemaining = fyDaiObtained.sub(fyDaiUsed); if (fyDaiRemaining > 0) {// There is fyDai left, so exchange it for Dai to withdraw only Dai and Chai require( pool.sellFYDai(address(this), address(this), uint128(fyDaiRemaining)) >= muld(fyDaiRemaining, minimumFYDaiPrice), "YieldProxy: minimumFYDaiPrice not reached" ); } withdrawAssets(fyDai); } /// @dev Burns tokens and repays debt with proceedings. Sells any excess fyDai for Dai, then returns all Dai, and if there is no debt in the Controller, all posted Chai. /// Caller must have approved the proxy using`controller.addDelegate(yieldProxy)` and `pool.addDelegate(yieldProxy)` /// Caller must have approved the liquidity burn with `pool.approve(poolTokens)` /// @param poolTokens amount of pool tokens to burn. /// @param minimumFYDaiPrice minimum Dai/fyDai price to be accepted when internally selling fyDai. function removeLiquidityEarlyDaiFixed(IPool pool, uint256 poolTokens, uint256 minimumFYDaiPrice) external { onlyKnownPool(pool); IFYDai fyDai = pool.fyDai(); uint256 maturity = fyDai.maturity(); (uint256 daiObtained, uint256 fyDaiObtained) = pool.burn(msg.sender, address(this), poolTokens); uint256 fyDaiUsed; if (fyDaiObtained > 0 && controller.debtFYDai(CHAI, maturity, msg.sender) > 0) { fyDaiUsed = controller.repayFYDai(CHAI, maturity, address(this), msg.sender, fyDaiObtained); } uint256 fyDaiRemaining = fyDaiObtained.sub(fyDaiUsed); if (fyDaiRemaining == 0) { // We used all the fyDai, so probably there is debt left, so pay with Dai if (daiObtained > 0 && controller.debtFYDai(CHAI, maturity, msg.sender) > 0) { controller.repayDai(CHAI, maturity, address(this), msg.sender, daiObtained); } } else { // Exchange remaining fyDai for Dai to withdraw only Dai and Chai require( pool.sellFYDai(address(this), address(this), uint128(fyDaiRemaining)) >= muld(fyDaiRemaining, minimumFYDaiPrice), "YieldProxy: minimumFYDaiPrice not reached" ); } withdrawAssets(fyDai); } /// @dev Burns tokens and repays fyDai debt after Maturity. /// Caller must have approved the proxy using`controller.addDelegate(yieldProxy)` /// Caller must have approved the liquidity burn with `pool.approve(poolTokens)` /// @param poolTokens amount of pool tokens to burn. function removeLiquidityMature(IPool pool, uint256 poolTokens) external { onlyKnownPool(pool); IFYDai fyDai = pool.fyDai(); uint256 maturity = fyDai.maturity(); (uint256 daiObtained, uint256 fyDaiObtained) = pool.burn(msg.sender, address(this), poolTokens); if (fyDaiObtained > 0) { daiObtained = daiObtained.add(fyDai.redeem(address(this), address(this), fyDaiObtained)); } // Repay debt if (daiObtained > 0 && controller.debtFYDai(CHAI, maturity, msg.sender) > 0) { controller.repayDai(CHAI, maturity, address(this), msg.sender, daiObtained); } withdrawAssets(fyDai); } /// @dev Return to caller all posted chai if there is no debt, converted to dai, plus any dai remaining in the contract. function withdrawAssets(IFYDai fyDai) internal { if (controller.debtFYDai(CHAI, fyDai.maturity(), msg.sender) == 0) { controller.withdraw(CHAI, msg.sender, address(this), controller.posted(CHAI, msg.sender)); chai.exit(address(this), chai.balanceOf(address(this))); } require(dai.transfer(msg.sender, dai.balanceOf(address(this))), "YieldProxy: Dai Transfer Failed"); } /// @dev Borrow fyDai from Controller and sell it immediately for Dai, for a maximum fyDai debt. /// Must have approved the operator with `controller.addDelegate(yieldProxy.address)`. /// @param collateral Valid collateral type. /// @param maturity Maturity of an added series /// @param to Wallet to send the resulting Dai to. /// @param maximumFYDai Maximum amount of FYDai to borrow. /// @param daiToBorrow Exact amount of Dai that should be obtained. function borrowDaiForMaximumFYDai( IPool pool, bytes32 collateral, uint256 maturity, address to, uint256 maximumFYDai, uint256 daiToBorrow ) public returns (uint256) { onlyKnownPool(pool); uint256 fyDaiToBorrow = pool.buyDaiPreview(daiToBorrow.toUint128()); require (fyDaiToBorrow <= maximumFYDai, "YieldProxy: Too much fyDai required"); // The collateral for this borrow needs to have been posted beforehand controller.borrow(collateral, maturity, msg.sender, address(this), fyDaiToBorrow); pool.buyDai(address(this), to, daiToBorrow.toUint128()); return fyDaiToBorrow; } /// @dev Borrow fyDai from Controller and sell it immediately for Dai, if a minimum amount of Dai can be obtained such. /// Must have approved the operator with `controller.addDelegate(yieldProxy.address)`. /// @param collateral Valid collateral type. /// @param maturity Maturity of an added series /// @param to Wallet to sent the resulting Dai to. /// @param fyDaiToBorrow Amount of fyDai to borrow. /// @param minimumDaiToBorrow Minimum amount of Dai that should be borrowed. function borrowMinimumDaiForFYDai( IPool pool, bytes32 collateral, uint256 maturity, address to, uint256 fyDaiToBorrow, uint256 minimumDaiToBorrow ) public returns (uint256) { onlyKnownPool(pool); // The collateral for this borrow needs to have been posted beforehand controller.borrow(collateral, maturity, msg.sender, address(this), fyDaiToBorrow); uint256 boughtDai = pool.sellFYDai(address(this), to, fyDaiToBorrow.toUint128()); require (boughtDai >= minimumDaiToBorrow, "YieldProxy: Not enough Dai obtained"); return boughtDai; } /// @dev Repay an amount of fyDai debt in Controller using Dai exchanged for fyDai at pool rates, up to a maximum amount of Dai spent. /// Must have approved the operator with `pool.addDelegate(yieldProxy.address)`. /// If `fyDaiRepayment` exceeds the existing debt, only the necessary fyDai will be used. /// @param collateral Valid collateral type. /// @param maturity Maturity of an added series /// @param to Yield Vault to repay fyDai debt for. /// @param fyDaiRepayment Amount of fyDai debt to repay. /// @param maximumRepaymentInDai Maximum amount of Dai that should be spent on the repayment. function repayFYDaiDebtForMaximumDai( IPool pool, bytes32 collateral, uint256 maturity, address to, uint256 fyDaiRepayment, uint256 maximumRepaymentInDai ) public returns (uint256) { onlyKnownPool(pool); uint256 fyDaiDebt = controller.debtFYDai(collateral, maturity, to); uint256 fyDaiToUse = fyDaiDebt < fyDaiRepayment ? fyDaiDebt : fyDaiRepayment; // Use no more fyDai than debt uint256 repaymentInDai = pool.buyFYDai(msg.sender, address(this), fyDaiToUse.toUint128()); require (repaymentInDai <= maximumRepaymentInDai, "YieldProxy: Too much Dai required"); controller.repayFYDai(collateral, maturity, address(this), to, fyDaiToUse); return repaymentInDai; } /// @dev Repay an amount of fyDai debt in Controller using a given amount of Dai exchanged for fyDai at pool rates, with a minimum of fyDai debt required to be paid. /// Must have approved the operator with `pool.addDelegate(yieldProxy.address)`. /// If `repaymentInDai` exceeds the existing debt, only the necessary Dai will be used. /// @param collateral Valid collateral type. /// @param maturity Maturity of an added series /// @param to Yield Vault to repay fyDai debt for. /// @param minimumFYDaiRepayment Minimum amount of fyDai debt to repay. /// @param repaymentInDai Exact amount of Dai that should be spent on the repayment. function repayMinimumFYDaiDebtForDai( IPool pool, bytes32 collateral, uint256 maturity, address to, uint256 minimumFYDaiRepayment, uint256 repaymentInDai ) public returns (uint256) { onlyKnownPool(pool); uint256 fyDaiRepayment = pool.sellDaiPreview(repaymentInDai.toUint128()); uint256 fyDaiDebt = controller.debtFYDai(collateral, maturity, to); if(fyDaiRepayment <= fyDaiDebt) { // Sell no more Dai than needed to cancel all the debt pool.sellDai(msg.sender, address(this), repaymentInDai.toUint128()); } else { // If we have too much Dai, then don't sell it all and buy the exact amount of fyDai needed instead. pool.buyFYDai(msg.sender, address(this), fyDaiDebt.toUint128()); fyDaiRepayment = fyDaiDebt; } require (fyDaiRepayment >= minimumFYDaiRepayment, "YieldProxy: Not enough fyDai debt repaid"); controller.repayFYDai(collateral, maturity, address(this), to, fyDaiRepayment); return fyDaiRepayment; } /// @dev Sell Dai for fyDai /// @param to Wallet receiving the fyDai being bought /// @param daiIn Amount of dai being sold /// @param minFYDaiOut Minimum amount of fyDai being bought function sellDai(IPool pool, address to, uint128 daiIn, uint128 minFYDaiOut) external returns(uint256) { onlyKnownPool(pool); uint256 fyDaiOut = pool.sellDai(msg.sender, to, daiIn); require( fyDaiOut >= minFYDaiOut, "YieldProxy: Limit not reached" ); return fyDaiOut; } /// @dev Buy Dai for fyDai /// @param to Wallet receiving the dai being bought /// @param daiOut Amount of dai being bought /// @param maxFYDaiIn Maximum amount of fyDai being sold function buyDai(IPool pool, address to, uint128 daiOut, uint128 maxFYDaiIn) public returns(uint256) { onlyKnownPool(pool); uint256 fyDaiIn = pool.buyDai(msg.sender, to, daiOut); require( maxFYDaiIn >= fyDaiIn, "YieldProxy: Limit exceeded" ); return fyDaiIn; } /// @dev Buy Dai for fyDai and permits infinite fyDai to the pool /// @param to Wallet receiving the dai being bought /// @param daiOut Amount of dai being bought /// @param maxFYDaiIn Maximum amount of fyDai being sold /// @param signature The `permit` call's signature function buyDaiWithSignature(IPool pool, address to, uint128 daiOut, uint128 maxFYDaiIn, bytes memory signature) external returns(uint256) { onlyKnownPool(pool); (bytes32 r, bytes32 s, uint8 v) = unpack(signature); pool.fyDai().permit(msg.sender, address(pool), uint(-1), uint(-1), v, r, s); return buyDai(pool, to, daiOut, maxFYDaiIn); } /// @dev Sell fyDai for Dai /// @param to Wallet receiving the dai being bought /// @param fyDaiIn Amount of fyDai being sold /// @param minDaiOut Minimum amount of dai being bought function sellFYDai(IPool pool, address to, uint128 fyDaiIn, uint128 minDaiOut) public returns(uint256) { onlyKnownPool(pool); uint256 daiOut = pool.sellFYDai(msg.sender, to, fyDaiIn); require( daiOut >= minDaiOut, "YieldProxy: Limit not reached" ); return daiOut; } /// @dev Sell fyDai for Dai and permits infinite Dai to the pool /// @param to Wallet receiving the dai being bought /// @param fyDaiIn Amount of fyDai being sold /// @param minDaiOut Minimum amount of dai being bought /// @param signature The `permit` call's signature function sellFYDaiWithSignature(IPool pool, address to, uint128 fyDaiIn, uint128 minDaiOut, bytes memory signature) external returns(uint256) { onlyKnownPool(pool); (bytes32 r, bytes32 s, uint8 v) = unpack(signature); pool.fyDai().permit(msg.sender, address(pool), uint(-1), uint(-1), v, r, s); return sellFYDai(pool, to, fyDaiIn, minDaiOut); } /// @dev Buy fyDai for dai /// @param to Wallet receiving the fyDai being bought /// @param fyDaiOut Amount of fyDai being bought /// @param maxDaiIn Maximum amount of dai being sold function buyFYDai(IPool pool, address to, uint128 fyDaiOut, uint128 maxDaiIn) external returns(uint256) { onlyKnownPool(pool); uint256 daiIn = pool.buyFYDai(msg.sender, to, fyDaiOut); require( maxDaiIn >= daiIn, "YieldProxy: Limit exceeded" ); return daiIn; } /// @dev Burns Dai from caller to repay debt in a Yield Vault. /// User debt is decreased for the given collateral and fyDai series, in Yield vault `to`. /// The amount of debt repaid changes according to series maturity and MakerDAO rate and chi, depending on collateral type. /// `A signature is provided as a parameter to this function, so that `dai.approve()` doesn't need to be called. /// @param collateral Valid collateral type. /// @param maturity Maturity of an added series /// @param to Yield vault to repay debt for. /// @param daiAmount Amount of Dai to use for debt repayment. /// @param signature The `permit` call's signature function repayDaiWithSignature(bytes32 collateral, uint256 maturity, address to, uint256 daiAmount, bytes memory signature) external returns(uint256) { (bytes32 r, bytes32 s, uint8 v) = unpack(signature); dai.permit(msg.sender, address(treasury), dai.nonces(msg.sender), uint(-1), true, v, r, s); controller.repayDai(collateral, maturity, msg.sender, to, daiAmount); } function onlyKnownPool(IPool pool) private view { require(poolsMap[address(pool)], "YieldProxy: Unknown pool"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"controller_","type":"address"},{"internalType":"contract IPool[]","name":"_pools","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"CHAI","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MTY","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"YTM","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"},{"internalType":"uint256","name":"daiUsed","type":"uint256"},{"internalType":"uint256","name":"maxFYDai","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"bytes","name":"daiSig","type":"bytes"},{"internalType":"bytes","name":"fyDaiSig","type":"bytes"},{"internalType":"bytes","name":"poolSig","type":"bytes"}],"name":"authorizePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"},{"internalType":"bytes32","name":"collateral","type":"bytes32"},{"internalType":"uint256","name":"maturity","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"maximumFYDai","type":"uint256"},{"internalType":"uint256","name":"daiToBorrow","type":"uint256"}],"name":"borrowDaiForMaximumFYDai","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"},{"internalType":"bytes32","name":"collateral","type":"bytes32"},{"internalType":"uint256","name":"maturity","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"fyDaiToBorrow","type":"uint256"},{"internalType":"uint256","name":"minimumDaiToBorrow","type":"uint256"}],"name":"borrowMinimumDaiForFYDai","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint128","name":"daiOut","type":"uint128"},{"internalType":"uint128","name":"maxFYDaiIn","type":"uint128"}],"name":"buyDai","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint128","name":"daiOut","type":"uint128"},{"internalType":"uint128","name":"maxFYDaiIn","type":"uint128"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"buyDaiWithSignature","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint128","name":"fyDaiOut","type":"uint128"},{"internalType":"uint128","name":"maxDaiIn","type":"uint128"}],"name":"buyFYDai","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"chai","outputs":[{"internalType":"contract IChai","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"controller","outputs":[{"internalType":"contract IController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dai","outputs":[{"internalType":"contract IDai","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daiJoin","outputs":[{"internalType":"contract IDaiJoin","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"bytes","name":"daiSignature","type":"bytes"},{"internalType":"bytes","name":"controllerSig","type":"bytes"}],"name":"onboard","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pools","outputs":[{"internalType":"contract IPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"poolsMap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"post","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"},{"internalType":"uint256","name":"poolTokens","type":"uint256"},{"internalType":"uint256","name":"minimumFYDaiPrice","type":"uint256"}],"name":"removeLiquidityEarlyDaiFixed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"},{"internalType":"uint256","name":"poolTokens","type":"uint256"},{"internalType":"uint256","name":"minimumDaiPrice","type":"uint256"},{"internalType":"uint256","name":"minimumFYDaiPrice","type":"uint256"}],"name":"removeLiquidityEarlyDaiPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"},{"internalType":"uint256","name":"poolTokens","type":"uint256"}],"name":"removeLiquidityMature","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"collateral","type":"bytes32"},{"internalType":"uint256","name":"maturity","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"daiAmount","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"repayDaiWithSignature","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"},{"internalType":"bytes32","name":"collateral","type":"bytes32"},{"internalType":"uint256","name":"maturity","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"fyDaiRepayment","type":"uint256"},{"internalType":"uint256","name":"maximumRepaymentInDai","type":"uint256"}],"name":"repayFYDaiDebtForMaximumDai","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"},{"internalType":"bytes32","name":"collateral","type":"bytes32"},{"internalType":"uint256","name":"maturity","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"minimumFYDaiRepayment","type":"uint256"},{"internalType":"uint256","name":"repaymentInDai","type":"uint256"}],"name":"repayMinimumFYDaiDebtForDai","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint128","name":"daiIn","type":"uint128"},{"internalType":"uint128","name":"minFYDaiOut","type":"uint128"}],"name":"sellDai","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint128","name":"fyDaiIn","type":"uint128"},{"internalType":"uint128","name":"minDaiOut","type":"uint128"}],"name":"sellFYDai","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint128","name":"fyDaiIn","type":"uint128"},{"internalType":"uint128","name":"minDaiOut","type":"uint128"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"sellFYDaiWithSignature","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"contract ITreasury","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vat","outputs":[{"internalType":"contract IVat","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"contract IWeth","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wethJoin","outputs":[{"internalType":"contract IGemJoin","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162004e6c38038062004e6c833981810160405260408110156200003757600080fd5b8151602083018051604051929492938301929190846401000000008211156200005f57600080fd5b9083019060208201858111156200007557600080fd5b82518660208202830111640100000000821117156200009357600080fd5b82525081516020918201928201910280838360005b83811015620000c2578181015183820152602001620000a8565b50505050919091016040818152600680546001600160a01b0319166001600160a01b038a811691909117918290556361d027b360e01b84529151911695506361d027b3945060048083019450602093509091829003018186803b1580156200012957600080fd5b505afa1580156200013e573d6000803e3d6000fd5b505050506040513d60208110156200015557600080fd5b5051600780546001600160a01b0319166001600160a01b03928316179081905560408051633fc8cef360e01b815290519190921691633fc8cef3916004808301926020929190829003018186803b158015620001b057600080fd5b505afa158015620001c5573d6000803e3d6000fd5b505050506040513d6020811015620001dc57600080fd5b5051600180546001600160a01b0319166001600160a01b039283161790556007546040805163f4b9fa7560e01b81529051919092169163f4b9fa75916004808301926020929190829003018186803b1580156200023857600080fd5b505afa1580156200024d573d6000803e3d6000fd5b505050506040513d60208110156200026457600080fd5b5051600280546001600160a01b0319166001600160a01b0392831617905560075460408051635b4e822b60e11b81529051919092169163b69d0456916004808301926020929190829003018186803b158015620002c057600080fd5b505afa158015620002d5573d6000803e3d6000fd5b505050506040513d6020811015620002ec57600080fd5b5051600580546001600160a01b0319166001600160a01b0392831617905560075460408051633045916f60e21b81529051919092169163c11645bc916004808301926020929190829003018186803b1580156200034857600080fd5b505afa1580156200035d573d6000803e3d6000fd5b505050506040513d60208110156200037457600080fd5b5051600480546001600160a01b0319166001600160a01b0392831617815560075460408051632dbacef360e01b815290519190931692632dbacef39281810192602092909190829003018186803b158015620003cf57600080fd5b505afa158015620003e4573d6000803e3d6000fd5b505050506040513d6020811015620003fb57600080fd5b5051600380546001600160a01b0319166001600160a01b03928316179055600754604080516336569e7760e01b8152905191909216916336569e77916004808301926020929190829003018186803b1580156200045757600080fd5b505afa1580156200046c573d6000803e3d6000fd5b505050506040513d60208110156200048357600080fd5b5051600080546001600160a01b0319166001600160a01b039283161781556002546007546040805163095ea7b360e01b81529185166004830152600019602483015251919093169263095ea7b39260448083019360209390929083900390910190829087803b158015620004f657600080fd5b505af11580156200050b573d6000803e3d6000fd5b505050506040513d60208110156200052257600080fd5b50506005546007546040805163095ea7b360e01b81526001600160a01b03928316600482015260001960248201529051919092169163095ea7b39160448083019260209291908290030181600087803b1580156200057f57600080fd5b505af115801562000594573d6000803e3d6000fd5b505050506040513d6020811015620005ab57600080fd5b50506001546007546040805163095ea7b360e01b81526001600160a01b03928316600482015260001960248201529051919092169163095ea7b39160448083019260209291908290030181600087803b1580156200060857600080fd5b505af11580156200061d573d6000803e3d6000fd5b505050506040513d60208110156200063457600080fd5b50506002546005546040805163095ea7b360e01b81526001600160a01b03928316600482015260001960248201529051919092169163095ea7b39160448083019260209291908290030181600087803b1580156200069157600080fd5b505af1158015620006a6573d6000803e3d6000fd5b505050506040513d6020811015620006bd57600080fd5b50506000805460048054604080516328ec8bf160e21b81526001600160a01b03928316938101939093525192169263a3b22fc49260248084019382900301818387803b1580156200070d57600080fd5b505af115801562000722573d6000803e3d6000fd5b505060008054600354604080516328ec8bf160e21b81526001600160a01b039283166004820152905191909216945063a3b22fc493506024808301939282900301818387803b1580156200077557600080fd5b505af11580156200078a573d6000803e3d6000fd5b5050600254600480546040805163095ea7b360e01b81526001600160a01b03928316938101939093526000196024840152519216935063095ea7b392506044808201926020929091908290030181600087803b158015620007ea57600080fd5b505af1158015620007ff573d6000803e3d6000fd5b505050506040513d60208110156200081657600080fd5b50506001546003546040805163095ea7b360e01b81526001600160a01b03928316600482015260001960248201529051919092169163095ea7b39160448083019260209291908290030181600087803b1580156200087357600080fd5b505af115801562000888573d6000803e3d6000fd5b505050506040513d60208110156200089f57600080fd5b50506001546007546040805163095ea7b360e01b81526001600160a01b03928316600482015260001960248201529051919092169163095ea7b39160448083019260209291908290030181600087803b158015620008fc57600080fd5b505af115801562000911573d6000803e3d6000fd5b505050506040513d60208110156200092857600080fd5b50600090505b815181101562000b605760025482516001600160a01b039091169063095ea7b3908490849081106200095c57fe5b60200260200101516000196040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015620009b757600080fd5b505af1158015620009cc573d6000803e3d6000fd5b505050506040513d6020811015620009e357600080fd5b50508151829082908110620009f457fe5b60200260200101516001600160a01b031663284f44446040518163ffffffff1660e01b815260040160206040518083038186803b15801562000a3557600080fd5b505afa15801562000a4a573d6000803e3d6000fd5b505050506040513d602081101562000a6157600080fd5b505182516001600160a01b039091169063095ea7b39084908490811062000a8457fe5b60200260200101516000196040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801562000adf57600080fd5b505af115801562000af4573d6000803e3d6000fd5b505050506040513d602081101562000b0b57600080fd5b5050815160019060099060009085908590811062000b2557fe5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790556001016200092e565b50805162000b7690600890602084019062000b7f565b50505062000c13565b82805482825590600052602060002090810192821562000bd7579160200282015b8281111562000bd757825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000ba0565b5062000be592915062000be9565b5090565b62000c1091905b8082111562000be55780546001600160a01b031916815560010162000bf0565b90565b6142498062000c236000396000f3fe6080604052600436106101fd5760003560e01c80639d8e21771161010d578063c11645bc116100a0578063d43bb0591161006f578063d43bb05914610c60578063d6dd8a8914610cb5578063f3fef3a314610d09578063f4b9fa7514610d42578063f77c479114610d5757610204565b8063c11645bc14610b8d578063c43a860814610ba2578063c452963314610bb7578063cc53d7bf14610c0c57610204565b8063ae70747c116100dc578063ae70747c14610ad6578063b69d045614610b2a578063b6dbf9ce14610b3f578063b8fde75014610b5457610204565b80639d8e217714610a5c578063a536362714610a71578063ac4afa3814610a97578063ad5c464814610ac157610204565b8063572d9c4f116101905780636f7952251161015f5780636f795225146106f457806374191001146108c85780637e3d4cfa1461091d5780638ba1d1c91461094657806390c140db1461097957610204565b8063572d9c4f1461056857806361d027b3146105a75780636c223e95146105bc5780636d9d1d981461061157610204565b806336569e77116101cc57806336569e77146104ba57806336b4f5bd146104cf5780633fc8cef31461051457806355776b771461052957610204565b8063081129a61461020957806329d7d663146103515780632dbacef31461043557806330b4b0751461046657610204565b3661020457005b600080fd5b34801561021557600080fd5b5061034f6004803603606081101561022c57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561025657600080fd5b82018360208201111561026857600080fd5b803590602001918460018302840111600160201b8311171561028957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156102db57600080fd5b8201836020820111156102ed57600080fd5b803590602001918460018302840111600160201b8311171561030e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610d6c945050505050565b005b34801561035d57600080fd5b50610423600480360360a081101561037457600080fd5b8135916020810135916001600160a01b036040830135169160608101359181019060a081016080820135600160201b8111156103af57600080fd5b8201836020820111156103c157600080fd5b803590602001918460018302840111600160201b831117156103e257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610f3c945050505050565b60408051918252519081900360200190f35b34801561044157600080fd5b5061044a611112565b604080516001600160a01b039092168252519081900360200190f35b34801561047257600080fd5b506104236004803603608081101561048957600080fd5b506001600160a01b0381358116916020810135909116906001600160801b0360408201358116916060013516611121565b3480156104c657600080fd5b5061044a611225565b3480156104db57600080fd5b5061034f600480360360808110156104f257600080fd5b506001600160a01b038135169060208101359060408101359060600135611234565b34801561052057600080fd5b5061044a6116f7565b34801561053557600080fd5b506104236004803603606081101561054c57600080fd5b506001600160a01b038135169060208101359060400135611706565b34801561057457600080fd5b5061034f6004803603606081101561058b57600080fd5b506001600160a01b038135169060208101359060400135611e2d565b3480156105b357600080fd5b5061044a61231e565b3480156105c857600080fd5b50610423600480360360c08110156105df57600080fd5b506001600160a01b03813581169160208101359160408201359160608101359091169060808101359060a0013561232d565b34801561061d57600080fd5b50610423600480360360a081101561063457600080fd5b6001600160a01b0382358116926020810135909116916001600160801b03604083013581169260608101359091169181019060a081016080820135600160201b81111561068057600080fd5b82018360208201111561069257600080fd5b803590602001918460018302840111600160201b831117156106b357600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506124b3945050505050565b34801561070057600080fd5b5061034f600480360360a081101561071757600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561074a57600080fd5b82018360208201111561075c57600080fd5b803590602001918460018302840111600160201b8311171561077d57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156107cf57600080fd5b8201836020820111156107e157600080fd5b803590602001918460018302840111600160201b8311171561080257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561085457600080fd5b82018360208201111561086657600080fd5b803590602001918460018302840111600160201b8311171561088757600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506125df945050505050565b3480156108d457600080fd5b50610423600480360360c08110156108eb57600080fd5b506001600160a01b03813581169160208101359160408201359160608101359091169060808101359060a001356128c1565b34801561092957600080fd5b50610932612ad2565b604080519115158252519081900360200190f35b34801561095257600080fd5b506109326004803603602081101561096957600080fd5b50356001600160a01b0316612ad7565b34801561098557600080fd5b50610423600480360360a081101561099c57600080fd5b6001600160a01b0382358116926020810135909116916001600160801b03604083013581169260608101359091169181019060a081016080820135600160201b8111156109e857600080fd5b8201836020820111156109fa57600080fd5b803590602001918460018302840111600160201b83111715610a1b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612aec945050505050565b348015610a6857600080fd5b50610423612c0b565b61034f60048036036020811015610a8757600080fd5b50356001600160a01b0316612c1b565b348015610aa357600080fd5b5061044a60048036036020811015610aba57600080fd5b5035612d05565b348015610acd57600080fd5b50610423612d2c565b348015610ae257600080fd5b5061042360048036036080811015610af957600080fd5b506001600160a01b0381358116916020810135909116906001600160801b0360408201358116916060013516612d38565b348015610b3657600080fd5b5061044a612e33565b348015610b4b57600080fd5b50610423612e42565b348015610b6057600080fd5b5061034f60048036036040811015610b7757600080fd5b506001600160a01b038135169060200135612e4d565b348015610b9957600080fd5b5061044a6131a5565b348015610bae57600080fd5b506109326131b4565b348015610bc357600080fd5b50610423600480360360c0811015610bda57600080fd5b506001600160a01b03813581169160208101359160408201359160608101359091169060808101359060a001356131b9565b348015610c1857600080fd5b5061042360048036036080811015610c2f57600080fd5b506001600160a01b0381358116916020810135909116906001600160801b0360408201358116916060013516613528565b348015610c6c57600080fd5b50610423600480360360c0811015610c8357600080fd5b506001600160a01b03813581169160208101359160408201359160608101359091169060808101359060a00135613594565b348015610cc157600080fd5b5061042360048036036080811015610cd857600080fd5b506001600160a01b0381358116916020810135909116906001600160801b03604082013581169160600135166137d4565b348015610d1557600080fd5b5061034f60048036036040811015610d2c57600080fd5b506001600160a01b038135169060200135613840565b348015610d4e57600080fd5b5061044a61395f565b348015610d6357600080fd5b5061044a61396e565b6000806000610d7a8561397d565b60025460408051623f675f60e91b81526001600160a01b038c8116600483015291519598509396509194501691638fcbaf0c91899130918591637ecebe0091602480820192602092909190829003018186803b158015610dd957600080fd5b505afa158015610ded573d6000803e3d6000fd5b505050506040513d6020811015610e0357600080fd5b5051604080516001600160e01b031960e087901b1681526001600160a01b039485166004820152929093166024830152604482015260001960648201526001608482015260ff851660a482015260c4810187905260e48101869052905161010480830192600092919082900301818387803b158015610e8157600080fd5b505af1158015610e95573d6000803e3d6000fd5b50505050610ea28461397d565b60065460408051631a28ff0560e01b81526001600160a01b038c81166004830152306024830152600019604483015260ff851660648301526084820187905260a4820186905291519598509396509194501691631a28ff059160c48082019260009290919082900301818387803b158015610f1c57600080fd5b505af1158015610f30573d6000803e3d6000fd5b50505050505050505050565b600080600080610f4b8561397d565b60025460075460408051623f675f60e91b8152336004820181905291519699509497509295506001600160a01b0391821694638fcbaf0c9491909216918591637ecebe00916024808301926020929190829003018186803b158015610faf57600080fd5b505afa158015610fc3573d6000803e3d6000fd5b505050506040513d6020811015610fd957600080fd5b5051604080516001600160e01b031960e087901b1681526001600160a01b039485166004820152929093166024830152604482015260001960648201526001608482015260ff851660a482015260c4810187905260e48101869052905161010480830192600092919082900301818387803b15801561105757600080fd5b505af115801561106b573d6000803e3d6000fd5b5050600654604080516325d3cd1760e01b8152600481018e9052602481018d90523360448201526001600160a01b038c81166064830152608482018c905291519190921693506325d3cd17925060a48083019260209291908290030181600087803b1580156110d957600080fd5b505af11580156110ed573d6000803e3d6000fd5b505050506040513d602081101561110357600080fd5b50939998505050505050505050565b6003546001600160a01b031681565b600061112c85613998565b60408051631d50f8e760e21b81523360048201526001600160a01b0386811660248301526001600160801b03861660448301529151600092881691637543e39c91606480830192602092919082900301818787803b15801561118d57600080fd5b505af11580156111a1573d6000803e3d6000fd5b505050506040513d60208110156111b757600080fd5b50516001600160801b039081169150831681111561121c576040805162461bcd60e51b815260206004820152601a60248201527f5969656c6450726f78793a204c696d6974206578636565646564000000000000604482015290519081900360640190fd5b95945050505050565b6000546001600160a01b031681565b61123d84613998565b6000846001600160a01b031663284f44446040518163ffffffff1660e01b815260040160206040518083038186803b15801561127857600080fd5b505afa15801561128c573d6000803e3d6000fd5b505050506040513d60208110156112a257600080fd5b50516040805163204f83f960e01b815290519192506000916001600160a01b0384169163204f83f9916004808301926020929190829003018186803b1580156112ea57600080fd5b505afa1580156112fe573d6000803e3d6000fd5b505050506040513d602081101561131457600080fd5b505160408051633dae446f60e21b815233600482015230602482015260448101889052815192935060009283926001600160a01b038b169263f6b911bc926064808301939282900301818787803b15801561136e57600080fd5b505af1158015611382573d6000803e3d6000fd5b505050506040513d604081101561139857600080fd5b508051602090910151909250905060006001600160a01b03891663b26be92230806113c287613a08565b604080516001600160e01b031960e087901b1681526001600160a01b0394851660048201529290931660248301526001600160801b03166044820152905160648083019260209291908290030181600087803b15801561142157600080fd5b505af1158015611435573d6000803e3d6000fd5b505050506040513d602081101561144b57600080fd5b50516001600160801b031690506114628388613a6a565b8110156114a05760405162461bcd60e51b81526004018080602001828103825260278152602001806141146027913960400191505060405180910390fd5b6114b0828263ffffffff613a9516565b91506000808311801561154b5750600654604080516324c94bb560e21b8152634348414960e01b60048201526024810188905233604482015290516000926001600160a01b0316916393252ed4916064808301926020929190829003018186803b15801561151d57600080fd5b505afa158015611531573d6000803e3d6000fd5b505050506040513d602081101561154757600080fd5b5051115b156115ed576006546040805163b93dd41d60e01b8152634348414960e01b6004820152602481018890523060448201523360648201526084810186905290516001600160a01b039092169163b93dd41d9160a4808201926020929091908290030181600087803b1580156115be57600080fd5b505af11580156115d2573d6000803e3d6000fd5b505050506040513d60208110156115e857600080fd5b505190505b60006115ff848363ffffffff613aef16565b905080156116e1576116118189613a6a565b604080516360561e0560e01b8152306004820181905260248201526001600160801b038416604482015290516001600160a01b038e16916360561e059160648083019260209291908290030181600087803b15801561166f57600080fd5b505af1158015611683573d6000803e3d6000fd5b505050506040513d602081101561169957600080fd5b50516001600160801b031610156116e15760405162461bcd60e51b815260040180806020018281038252602981526020018061417f6029913960400191505060405180910390fd5b6116ea87613b31565b5050505050505050505050565b6001546001600160a01b031681565b600061171184613998565b6000846001600160a01b031663284f44446040518163ffffffff1660e01b815260040160206040518083038186803b15801561174c57600080fd5b505afa158015611760573d6000803e3d6000fd5b505050506040513d602081101561177657600080fd5b50516040805163ae4e7fdf60e01b815290519192506001600160a01b0383169163ae4e7fdf91600480820192602092909190829003018186803b1580156117bc57600080fd5b505afa1580156117d0573d6000803e3d6000fd5b505050506040513d60208110156117e657600080fd5b505115156001141561183f576040805162461bcd60e51b815260206004820181905260248201527f5969656c6450726f78793a204f6e6c79206265666f7265206d61747572697479604482015290519081900360640190fd5b600254604080516323b872dd60e01b81523360048201523060248201526044810187905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b15801561189957600080fd5b505af11580156118ad573d6000803e3d6000fd5b505050506040513d60208110156118c357600080fd5b5051611916576040805162461bcd60e51b815260206004820152601b60248201527f5969656c6450726f78793a205472616e73666572204661696c65640000000000604482015290519081900360640190fd5b600254604080516370a0823160e01b81526001600160a01b038881166004830152915160009392909216916370a0823191602480820192602092909190829003018186803b15801561196757600080fd5b505afa15801561197b573d6000803e3d6000fd5b505050506040513d602081101561199157600080fd5b5051604080516370a0823160e01b81526001600160a01b0389811660048301529151929350600092918516916370a0823191602480820192602092909190829003018186803b1580156119e357600080fd5b505afa1580156119f7573d6000803e3d6000fd5b505050506040513d6020811015611a0d57600080fd5b505190506000611a42611a26838563ffffffff613a9516565b611a36898663ffffffff613f7c16565b9063ffffffff613fd516565b90506000611a56888363ffffffff613aef16565b905086811115611aad576040805162461bcd60e51b815260206004820152601d60248201527f5969656c6450726f78793a206d61784659446169206578636565646564000000604482015290519081900360640190fd5b60055460408051633b4da69f60e01b81523060048201526024810184905290516001600160a01b0390921691633b4da69f9160448082019260009290919082900301818387803b158015611b0057600080fd5b505af1158015611b14573d6000803e3d6000fd5b505060055460408051633612d9a360e11b81523060048201529051600094506001600160a01b039092169250636c25b34691602480830192602092919082900301818787803b158015611b6657600080fd5b505af1158015611b7a573d6000803e3d6000fd5b505050506040513d6020811015611b9057600080fd5b5051600654600554604080516370a0823160e01b8152306004820181905291519495506001600160a01b039384169463adb9e54e94634348414960e01b9433939116916370a0823191602480820192602092909190829003018186803b158015611bf957600080fd5b505afa158015611c0d573d6000803e3d6000fd5b505050506040513d6020811015611c2357600080fd5b5051604080516001600160e01b031960e088901b16815260048101959095526001600160a01b039384166024860152919092166044840152606483019190915251608480830192600092919082900301818387803b158015611c8457600080fd5b505af1158015611c98573d6000803e3d6000fd5b50505050600660009054906101000a90046001600160a01b03166001600160a01b031663801d325f634348414960e01b886001600160a01b031663204f83f96040518163ffffffff1660e01b815260040160206040518083038186803b158015611d0157600080fd5b505afa158015611d15573d6000803e3d6000fd5b505050506040513d6020811015611d2b57600080fd5b5051604080516001600160e01b031960e086901b16815260048101939093526024830191909152336044830152306064830152608482018590525160a480830192600092919082900301818387803b158015611d8657600080fd5b505af1158015611d9a573d6000803e3d6000fd5b505060408051636361ddf360e11b81523060048201523360248201526044810187905290516001600160a01b038e16935063c6c3bbe6925060648083019260209291908290030181600087803b158015611df357600080fd5b505af1158015611e07573d6000803e3d6000fd5b505050506040513d6020811015611e1d57600080fd5b50519a9950505050505050505050565b611e3683613998565b6000836001600160a01b031663284f44446040518163ffffffff1660e01b815260040160206040518083038186803b158015611e7157600080fd5b505afa158015611e85573d6000803e3d6000fd5b505050506040513d6020811015611e9b57600080fd5b50516040805163204f83f960e01b815290519192506000916001600160a01b0384169163204f83f9916004808301926020929190829003018186803b158015611ee357600080fd5b505afa158015611ef7573d6000803e3d6000fd5b505050506040513d6020811015611f0d57600080fd5b505160408051633dae446f60e21b815233600482015230602482015260448101879052815192935060009283926001600160a01b038a169263f6b911bc926064808301939282900301818787803b158015611f6757600080fd5b505af1158015611f7b573d6000803e3d6000fd5b505050506040513d6040811015611f9157600080fd5b5080516020909101519092509050600081158015906120385750600654604080516324c94bb560e21b8152634348414960e01b60048201526024810187905233604482015290516000926001600160a01b0316916393252ed4916064808301926020929190829003018186803b15801561200a57600080fd5b505afa15801561201e573d6000803e3d6000fd5b505050506040513d602081101561203457600080fd5b5051115b156120da576006546040805163b93dd41d60e01b8152634348414960e01b6004820152602481018790523060448201523360648201526084810185905290516001600160a01b039092169163b93dd41d9160a4808201926020929091908290030181600087803b1580156120ab57600080fd5b505af11580156120bf573d6000803e3d6000fd5b505050506040513d60208110156120d557600080fd5b505190505b60006120ec838363ffffffff613aef16565b9050806122305760008411801561218b5750600654604080516324c94bb560e21b8152634348414960e01b60048201526024810188905233604482015290516000926001600160a01b0316916393252ed4916064808301926020929190829003018186803b15801561215d57600080fd5b505afa158015612171573d6000803e3d6000fd5b505050506040513d602081101561218757600080fd5b5051115b1561222b57600654604080516325d3cd1760e01b8152634348414960e01b6004820152602481018890523060448201523360648201526084810187905290516001600160a01b03909216916325d3cd179160a4808201926020929091908290030181600087803b1580156121fe57600080fd5b505af1158015612212573d6000803e3d6000fd5b505050506040513d602081101561222857600080fd5b50505b61230a565b61223a8188613a6a565b604080516360561e0560e01b8152306004820181905260248201526001600160801b038416604482015290516001600160a01b038c16916360561e059160648083019260209291908290030181600087803b15801561229857600080fd5b505af11580156122ac573d6000803e3d6000fd5b505050506040513d60208110156122c257600080fd5b50516001600160801b0316101561230a5760405162461bcd60e51b815260040180806020018281038252602981526020018061417f6029913960400191505060405180910390fd5b61231386613b31565b505050505050505050565b6007546001600160a01b031681565b600061233887613998565b6006546040805163801d325f60e01b815260048101899052602481018890523360448201523060648201526084810186905290516001600160a01b039092169163801d325f9160a48082019260009290919082900301818387803b15801561239f57600080fd5b505af11580156123b3573d6000803e3d6000fd5b505050506000876001600160a01b03166360561e0530876123d388613a08565b604080516001600160e01b031960e087901b1681526001600160a01b0394851660048201529290931660248301526001600160801b03166044820152905160648083019260209291908290030181600087803b15801561243257600080fd5b505af1158015612446573d6000803e3d6000fd5b505050506040513d602081101561245c57600080fd5b50516001600160801b03169050828110156124a85760405162461bcd60e51b815260040180806020018281038252602381526020018061415c6023913960400191505060405180910390fd5b979650505050505050565b60006124be86613998565b60008060006124cc8561397d565b925092509250886001600160a01b031663284f44446040518163ffffffff1660e01b815260040160206040518083038186803b15801561250b57600080fd5b505afa15801561251f573d6000803e3d6000fd5b505050506040513d602081101561253557600080fd5b50516040805163d505accf60e01b81523360048201526001600160a01b038c8116602483015260001960448301819052606483015260ff8516608483015260a4820187905260c482018690529151919092169163d505accf9160e480830192600092919082900301818387803b1580156125ae57600080fd5b505af11580156125c2573d6000803e3d6000fd5b505050506125d289898989613528565b9998505050505050505050565b6125e885613998565b60008060006125f68661397d565b60025460408051623f675f60e91b81526001600160a01b038d8116600483015291519598509396509194501691638fcbaf0c918a918c918591637ecebe0091602480820192602092909190829003018186803b15801561265557600080fd5b505afa158015612669573d6000803e3d6000fd5b505050506040513d602081101561267f57600080fd5b5051604080516001600160e01b031960e087901b1681526001600160a01b039485166004820152929093166024830152604482015260001960648201526001608482015260ff851660a482015260c4810187905260e48101869052905161010480830192600092919082900301818387803b1580156126fd57600080fd5b505af1158015612711573d6000803e3d6000fd5b5050505061271e8561397d565b809350819450829550505050876001600160a01b031663284f44446040518163ffffffff1660e01b815260040160206040518083038186803b15801561276357600080fd5b505afa158015612777573d6000803e3d6000fd5b505050506040513d602081101561278d57600080fd5b50516040805163d505accf60e01b81526001600160a01b038a8116600483015230602483015260001960448301819052606483015260ff8516608483015260a4820187905260c482018690529151919092169163d505accf9160e480830192600092919082900301818387803b15801561280657600080fd5b505af115801561281a573d6000803e3d6000fd5b505050506128278461397d565b60408051631a28ff0560e01b81526001600160a01b038c81166004830152306024830152600019604483015260ff841660648301526084820186905260a4820185905291519497509295509093508a1691631a28ff059160c48082019260009290919082900301818387803b15801561289f57600080fd5b505af11580156128b3573d6000803e3d6000fd5b505050505050505050505050565b60006128cc87613998565b6000876001600160a01b0316634e20e9526128e685613a08565b6040518263ffffffff1660e01b815260040180826001600160801b03166001600160801b0316815260200191505060206040518083038186803b15801561292c57600080fd5b505afa158015612940573d6000803e3d6000fd5b505050506040513d602081101561295657600080fd5b50516001600160801b03169050838111156129a25760405162461bcd60e51b81526004018080602001828103825260238152602001806141a86023913960400191505060405180910390fd5b6006546040805163801d325f60e01b8152600481018a9052602481018990523360448201523060648201526084810184905290516001600160a01b039092169163801d325f9160a48082019260009290919082900301818387803b158015612a0957600080fd5b505af1158015612a1d573d6000803e3d6000fd5b50505050876001600160a01b031663cc5783d33087612a3b87613a08565b604080516001600160e01b031960e087901b1681526001600160a01b0394851660048201529290931660248301526001600160801b03166044820152905160648083019260209291908290030181600087803b158015612a9a57600080fd5b505af1158015612aae573d6000803e3d6000fd5b505050506040513d6020811015612ac457600080fd5b509098975050505050505050565b600181565b60096020526000908152604090205460ff1681565b6000612af786613998565b6000806000612b058561397d565b925092509250886001600160a01b031663284f44446040518163ffffffff1660e01b815260040160206040518083038186803b158015612b4457600080fd5b505afa158015612b58573d6000803e3d6000fd5b505050506040513d6020811015612b6e57600080fd5b50516040805163d505accf60e01b81523360048201526001600160a01b038c8116602483015260001960448301819052606483015260ff8516608483015260a4820187905260c482018690529151919092169163d505accf9160e480830192600092919082900301818387803b158015612be757600080fd5b505af1158015612bfb573d6000803e3d6000fd5b505050506125d2898989896137d4565b6b033b2e3c9fd0803ce800000081565b600160009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015612c6b57600080fd5b505af1158015612c7f573d6000803e3d6000fd5b5050600654604080516356dcf2a760e11b8152644554482d4160d81b60048201523060248201526001600160a01b038781166044830152346064830152915191909216945063adb9e54e93506084808301935060009282900301818387803b158015612cea57600080fd5b505af1158015612cfe573d6000803e3d6000fd5b5050505050565b60088181548110612d1257fe5b6000918252602090912001546001600160a01b0316905081565b644554482d4160d81b81565b6000612d4385613998565b60408051635935f49160e11b81523360048201526001600160a01b0386811660248301526001600160801b0386166044830152915160009288169163b26be92291606480830192602092919082900301818787803b158015612da457600080fd5b505af1158015612db8573d6000803e3d6000fd5b505050506040513d6020811015612dce57600080fd5b50516001600160801b039081169150831681101561121c576040805162461bcd60e51b815260206004820152601d60248201527f5969656c6450726f78793a204c696d6974206e6f742072656163686564000000604482015290519081900360640190fd5b6005546001600160a01b031681565b634348414960e01b81565b612e5682613998565b6000826001600160a01b031663284f44446040518163ffffffff1660e01b815260040160206040518083038186803b158015612e9157600080fd5b505afa158015612ea5573d6000803e3d6000fd5b505050506040513d6020811015612ebb57600080fd5b50516040805163204f83f960e01b815290519192506000916001600160a01b0384169163204f83f9916004808301926020929190829003018186803b158015612f0357600080fd5b505afa158015612f17573d6000803e3d6000fd5b505050506040513d6020811015612f2d57600080fd5b505160408051633dae446f60e21b815233600482015230602482015260448101869052815192935060009283926001600160a01b0389169263f6b911bc926064808301939282900301818787803b158015612f8757600080fd5b505af1158015612f9b573d6000803e3d6000fd5b505050506040513d6040811015612fb157600080fd5b5080516020909101519092509050801561305c5760408051630e6dfcd560e01b815230600482018190526024820152604481018390529051613059916001600160a01b03871691630e6dfcd5916064808201926020929091908290030181600087803b15801561302057600080fd5b505af1158015613034573d6000803e3d6000fd5b505050506040513d602081101561304a57600080fd5b5051839063ffffffff613a9516565b91505b6000821180156130f45750600654604080516324c94bb560e21b8152634348414960e01b60048201526024810186905233604482015290516000926001600160a01b0316916393252ed4916064808301926020929190829003018186803b1580156130c657600080fd5b505afa1580156130da573d6000803e3d6000fd5b505050506040513d60208110156130f057600080fd5b5051115b1561319457600654604080516325d3cd1760e01b8152634348414960e01b6004820152602481018690523060448201523360648201526084810185905290516001600160a01b03909216916325d3cd179160a4808201926020929091908290030181600087803b15801561316757600080fd5b505af115801561317b573d6000803e3d6000fd5b505050506040513d602081101561319157600080fd5b50505b61319d84613b31565b505050505050565b6004546001600160a01b031681565b600081565b60006131c487613998565b6000876001600160a01b03166385561a346131de85613a08565b6040518263ffffffff1660e01b815260040180826001600160801b03166001600160801b0316815260200191505060206040518083038186803b15801561322457600080fd5b505afa158015613238573d6000803e3d6000fd5b505050506040513d602081101561324e57600080fd5b5051600654604080516324c94bb560e21b8152600481018b9052602481018a90526001600160a01b03898116604483015291516001600160801b03909416945060009391909216916393252ed4916064808301926020929190829003018186803b1580156132bb57600080fd5b505afa1580156132cf573d6000803e3d6000fd5b505050506040513d60208110156132e557600080fd5b5051905080821161339b57886001600160a01b031663b26be922333061330a88613a08565b604080516001600160e01b031960e087901b1681526001600160a01b0394851660048201529290931660248301526001600160801b03166044820152905160648083019260209291908290030181600087803b15801561336957600080fd5b505af115801561337d573d6000803e3d6000fd5b505050506040513d602081101561339357600080fd5b506134469050565b886001600160a01b0316637543e39c33306133b585613a08565b604080516001600160e01b031960e087901b1681526001600160a01b0394851660048201529290931660248301526001600160801b03166044820152905160648083019260209291908290030181600087803b15801561341457600080fd5b505af1158015613428573d6000803e3d6000fd5b505050506040513d602081101561343e57600080fd5b509091508190505b848210156134855760405162461bcd60e51b81526004018080602001828103825260288152602001806141ec6028913960400191505060405180910390fd5b6006546040805163b93dd41d60e01b8152600481018b9052602481018a90523060448201526001600160a01b038981166064830152608482018690529151919092169163b93dd41d9160a48083019260209291908290030181600087803b1580156134ef57600080fd5b505af1158015613503573d6000803e3d6000fd5b505050506040513d602081101561351957600080fd5b50919998505050505050505050565b600061353385613998565b6040805163cc5783d360e01b81523360048201526001600160a01b0386811660248301526001600160801b0386166044830152915160009288169163cc5783d391606480830192602092919082900301818787803b15801561118d57600080fd5b600061359f87613998565b600654604080516324c94bb560e21b815260048101899052602481018890526001600160a01b038781166044830152915160009392909216916393252ed491606480820192602092909190829003018186803b1580156135fe57600080fd5b505afa158015613612573d6000803e3d6000fd5b505050506040513d602081101561362857600080fd5b50519050600084821061363b578461363d565b815b90506000896001600160a01b0316637543e39c333061365b86613a08565b604080516001600160e01b031960e087901b1681526001600160a01b0394851660048201529290931660248301526001600160801b03166044820152905160648083019260209291908290030181600087803b1580156136ba57600080fd5b505af11580156136ce573d6000803e3d6000fd5b505050506040513d60208110156136e457600080fd5b50516001600160801b03169050848111156137305760405162461bcd60e51b81526004018080602001828103825260218152602001806141cb6021913960400191505060405180910390fd5b6006546040805163b93dd41d60e01b8152600481018c9052602481018b90523060448201526001600160a01b038a81166064830152608482018690529151919092169163b93dd41d9160a48083019260209291908290030181600087803b15801561379a57600080fd5b505af11580156137ae573d6000803e3d6000fd5b505050506040513d60208110156137c457600080fd5b50909a9950505050505050505050565b60006137df85613998565b604080516360561e0560e01b81523360048201526001600160a01b0386811660248301526001600160801b038616604483015291516000928816916360561e0591606480830192602092919082900301818787803b158015612da457600080fd5b6006546040805163470660bb60e11b8152644554482d4160d81b60048201523360248201523060448201526064810184905290516001600160a01b0390921691638e0cc1769160848082019260009290919082900301818387803b1580156138a757600080fd5b505af11580156138bb573d6000803e3d6000fd5b505060015460408051632e1a7d4d60e01b81526004810186905290516001600160a01b039092169350632e1a7d4d925060248082019260009290919082900301818387803b15801561390c57600080fd5b505af1158015613920573d6000803e3d6000fd5b50506040516001600160a01b038516925083156108fc02915083906000818181858888f1935050505015801561395a573d6000803e3d6000fd5b505050565b6002546001600160a01b031681565b6006546001600160a01b031681565b60208101516040820151606090920151909260009190911a90565b6001600160a01b03811660009081526009602052604090205460ff16613a05576040805162461bcd60e51b815260206004820152601860248201527f5969656c6450726f78793a20556e6b6e6f776e20706f6f6c0000000000000000604482015290519081900360640190fd5b50565b60006001600160801b03821115613a66576040805162461bcd60e51b815260206004820152601960248201527f5969656c6450726f78793a2043617374206f766572666c6f7700000000000000604482015290519081900360640190fd5b5090565b6000613a8c6b033b2e3c9fd0803ce8000000611a36858563ffffffff613f7c16565b90505b92915050565b600082820183811015613a8c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000613a8c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614017565b600660009054906101000a90046001600160a01b03166001600160a01b03166393252ed4634348414960e01b836001600160a01b031663204f83f96040518163ffffffff1660e01b815260040160206040518083038186803b158015613b9657600080fd5b505afa158015613baa573d6000803e3d6000fd5b505050506040513d6020811015613bc057600080fd5b5051604080516001600160e01b031960e086901b16815260048101939093526024830191909152336044830152516064808301926020929190829003018186803b158015613c0d57600080fd5b505afa158015613c21573d6000803e3d6000fd5b505050506040513d6020811015613c3757600080fd5b5051613e30576006546040805163dd62f42360e01b8152634348414960e01b60048201819052336024830181905292516001600160a01b0390941693638e0cc1769391923091869163dd62f423916044808301926020929190829003018186803b158015613ca457600080fd5b505afa158015613cb8573d6000803e3d6000fd5b505050506040513d6020811015613cce57600080fd5b5051604080516001600160e01b031960e088901b16815260048101959095526001600160a01b039384166024860152919092166044840152606483019190915251608480830192600092919082900301818387803b158015613d2f57600080fd5b505af1158015613d43573d6000803e3d6000fd5b5050600554604080516370a0823160e01b8152306004820181905291516001600160a01b03909316945063ef693bed9350909184916370a08231916024808301926020929190829003018186803b158015613d9d57600080fd5b505afa158015613db1573d6000803e3d6000fd5b505050506040513d6020811015613dc757600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039093166004840152602483019190915251604480830192600092919082900301818387803b158015613e1757600080fd5b505af1158015613e2b573d6000803e3d6000fd5b505050505b600254604080516370a0823160e01b815230600482015290516001600160a01b039092169163a9059cbb91339184916370a08231916024808301926020929190829003018186803b158015613e8457600080fd5b505afa158015613e98573d6000803e3d6000fd5b505050506040513d6020811015613eae57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b158015613eff57600080fd5b505af1158015613f13573d6000803e3d6000fd5b505050506040513d6020811015613f2957600080fd5b5051613a05576040805162461bcd60e51b815260206004820152601f60248201527f5969656c6450726f78793a20446169205472616e73666572204661696c656400604482015290519081900360640190fd5b600082613f8b57506000613a8f565b82820282848281613f9857fe5b0414613a8c5760405162461bcd60e51b815260040180806020018281038252602181526020018061413b6021913960400191505060405180910390fd5b6000613a8c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506140ae565b600081848411156140a65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561406b578181015183820152602001614053565b50505050905090810190601f1680156140985780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836140fd5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561406b578181015183820152602001614053565b50600083858161410957fe5b049594505050505056fe5969656c6450726f78793a206d696e696d756d4461695072696365206e6f742072656163686564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775969656c6450726f78793a204e6f7420656e6f75676820446169206f627461696e65645969656c6450726f78793a206d696e696d756d46594461695072696365206e6f7420726561636865645969656c6450726f78793a20546f6f206d7563682066794461692072657175697265645969656c6450726f78793a20546f6f206d756368204461692072657175697265645969656c6450726f78793a204e6f7420656e6f756768206679446169206465627420726570616964a2646970667358221220836018745716d2415740ebd60fcb800fe69f1fc1c77160eca3eb8126134b87b364736f6c634300060a0033000000000000000000000000b94199866fe06b535d019c11247d3f921460b91a000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000060000000000000000000000006feb7b2a023c9bc3cccdf7c5b5a7b929b9a65e04000000000000000000000000f7db19e0373937a13e4b12287b1c121dfb2d9bf8000000000000000000000000b39221e6790ae8360b7e8c1c7221900fad9397f9000000000000000000000000250f8d88173e0d9b692a9742f54e87e01a9fa54e0000000000000000000000008ecc94a91b5cf03927f5eb8c60abbdf48f82b0b30000000000000000000000005591f644b377ed784e558d4be1bba78f5a26bdcd
Deployed Bytecode
0x6080604052600436106101fd5760003560e01c80639d8e21771161010d578063c11645bc116100a0578063d43bb0591161006f578063d43bb05914610c60578063d6dd8a8914610cb5578063f3fef3a314610d09578063f4b9fa7514610d42578063f77c479114610d5757610204565b8063c11645bc14610b8d578063c43a860814610ba2578063c452963314610bb7578063cc53d7bf14610c0c57610204565b8063ae70747c116100dc578063ae70747c14610ad6578063b69d045614610b2a578063b6dbf9ce14610b3f578063b8fde75014610b5457610204565b80639d8e217714610a5c578063a536362714610a71578063ac4afa3814610a97578063ad5c464814610ac157610204565b8063572d9c4f116101905780636f7952251161015f5780636f795225146106f457806374191001146108c85780637e3d4cfa1461091d5780638ba1d1c91461094657806390c140db1461097957610204565b8063572d9c4f1461056857806361d027b3146105a75780636c223e95146105bc5780636d9d1d981461061157610204565b806336569e77116101cc57806336569e77146104ba57806336b4f5bd146104cf5780633fc8cef31461051457806355776b771461052957610204565b8063081129a61461020957806329d7d663146103515780632dbacef31461043557806330b4b0751461046657610204565b3661020457005b600080fd5b34801561021557600080fd5b5061034f6004803603606081101561022c57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561025657600080fd5b82018360208201111561026857600080fd5b803590602001918460018302840111600160201b8311171561028957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156102db57600080fd5b8201836020820111156102ed57600080fd5b803590602001918460018302840111600160201b8311171561030e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610d6c945050505050565b005b34801561035d57600080fd5b50610423600480360360a081101561037457600080fd5b8135916020810135916001600160a01b036040830135169160608101359181019060a081016080820135600160201b8111156103af57600080fd5b8201836020820111156103c157600080fd5b803590602001918460018302840111600160201b831117156103e257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610f3c945050505050565b60408051918252519081900360200190f35b34801561044157600080fd5b5061044a611112565b604080516001600160a01b039092168252519081900360200190f35b34801561047257600080fd5b506104236004803603608081101561048957600080fd5b506001600160a01b0381358116916020810135909116906001600160801b0360408201358116916060013516611121565b3480156104c657600080fd5b5061044a611225565b3480156104db57600080fd5b5061034f600480360360808110156104f257600080fd5b506001600160a01b038135169060208101359060408101359060600135611234565b34801561052057600080fd5b5061044a6116f7565b34801561053557600080fd5b506104236004803603606081101561054c57600080fd5b506001600160a01b038135169060208101359060400135611706565b34801561057457600080fd5b5061034f6004803603606081101561058b57600080fd5b506001600160a01b038135169060208101359060400135611e2d565b3480156105b357600080fd5b5061044a61231e565b3480156105c857600080fd5b50610423600480360360c08110156105df57600080fd5b506001600160a01b03813581169160208101359160408201359160608101359091169060808101359060a0013561232d565b34801561061d57600080fd5b50610423600480360360a081101561063457600080fd5b6001600160a01b0382358116926020810135909116916001600160801b03604083013581169260608101359091169181019060a081016080820135600160201b81111561068057600080fd5b82018360208201111561069257600080fd5b803590602001918460018302840111600160201b831117156106b357600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506124b3945050505050565b34801561070057600080fd5b5061034f600480360360a081101561071757600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b81111561074a57600080fd5b82018360208201111561075c57600080fd5b803590602001918460018302840111600160201b8311171561077d57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156107cf57600080fd5b8201836020820111156107e157600080fd5b803590602001918460018302840111600160201b8311171561080257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561085457600080fd5b82018360208201111561086657600080fd5b803590602001918460018302840111600160201b8311171561088757600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506125df945050505050565b3480156108d457600080fd5b50610423600480360360c08110156108eb57600080fd5b506001600160a01b03813581169160208101359160408201359160608101359091169060808101359060a001356128c1565b34801561092957600080fd5b50610932612ad2565b604080519115158252519081900360200190f35b34801561095257600080fd5b506109326004803603602081101561096957600080fd5b50356001600160a01b0316612ad7565b34801561098557600080fd5b50610423600480360360a081101561099c57600080fd5b6001600160a01b0382358116926020810135909116916001600160801b03604083013581169260608101359091169181019060a081016080820135600160201b8111156109e857600080fd5b8201836020820111156109fa57600080fd5b803590602001918460018302840111600160201b83111715610a1b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612aec945050505050565b348015610a6857600080fd5b50610423612c0b565b61034f60048036036020811015610a8757600080fd5b50356001600160a01b0316612c1b565b348015610aa357600080fd5b5061044a60048036036020811015610aba57600080fd5b5035612d05565b348015610acd57600080fd5b50610423612d2c565b348015610ae257600080fd5b5061042360048036036080811015610af957600080fd5b506001600160a01b0381358116916020810135909116906001600160801b0360408201358116916060013516612d38565b348015610b3657600080fd5b5061044a612e33565b348015610b4b57600080fd5b50610423612e42565b348015610b6057600080fd5b5061034f60048036036040811015610b7757600080fd5b506001600160a01b038135169060200135612e4d565b348015610b9957600080fd5b5061044a6131a5565b348015610bae57600080fd5b506109326131b4565b348015610bc357600080fd5b50610423600480360360c0811015610bda57600080fd5b506001600160a01b03813581169160208101359160408201359160608101359091169060808101359060a001356131b9565b348015610c1857600080fd5b5061042360048036036080811015610c2f57600080fd5b506001600160a01b0381358116916020810135909116906001600160801b0360408201358116916060013516613528565b348015610c6c57600080fd5b50610423600480360360c0811015610c8357600080fd5b506001600160a01b03813581169160208101359160408201359160608101359091169060808101359060a00135613594565b348015610cc157600080fd5b5061042360048036036080811015610cd857600080fd5b506001600160a01b0381358116916020810135909116906001600160801b03604082013581169160600135166137d4565b348015610d1557600080fd5b5061034f60048036036040811015610d2c57600080fd5b506001600160a01b038135169060200135613840565b348015610d4e57600080fd5b5061044a61395f565b348015610d6357600080fd5b5061044a61396e565b6000806000610d7a8561397d565b60025460408051623f675f60e91b81526001600160a01b038c8116600483015291519598509396509194501691638fcbaf0c91899130918591637ecebe0091602480820192602092909190829003018186803b158015610dd957600080fd5b505afa158015610ded573d6000803e3d6000fd5b505050506040513d6020811015610e0357600080fd5b5051604080516001600160e01b031960e087901b1681526001600160a01b039485166004820152929093166024830152604482015260001960648201526001608482015260ff851660a482015260c4810187905260e48101869052905161010480830192600092919082900301818387803b158015610e8157600080fd5b505af1158015610e95573d6000803e3d6000fd5b50505050610ea28461397d565b60065460408051631a28ff0560e01b81526001600160a01b038c81166004830152306024830152600019604483015260ff851660648301526084820187905260a4820186905291519598509396509194501691631a28ff059160c48082019260009290919082900301818387803b158015610f1c57600080fd5b505af1158015610f30573d6000803e3d6000fd5b50505050505050505050565b600080600080610f4b8561397d565b60025460075460408051623f675f60e91b8152336004820181905291519699509497509295506001600160a01b0391821694638fcbaf0c9491909216918591637ecebe00916024808301926020929190829003018186803b158015610faf57600080fd5b505afa158015610fc3573d6000803e3d6000fd5b505050506040513d6020811015610fd957600080fd5b5051604080516001600160e01b031960e087901b1681526001600160a01b039485166004820152929093166024830152604482015260001960648201526001608482015260ff851660a482015260c4810187905260e48101869052905161010480830192600092919082900301818387803b15801561105757600080fd5b505af115801561106b573d6000803e3d6000fd5b5050600654604080516325d3cd1760e01b8152600481018e9052602481018d90523360448201526001600160a01b038c81166064830152608482018c905291519190921693506325d3cd17925060a48083019260209291908290030181600087803b1580156110d957600080fd5b505af11580156110ed573d6000803e3d6000fd5b505050506040513d602081101561110357600080fd5b50939998505050505050505050565b6003546001600160a01b031681565b600061112c85613998565b60408051631d50f8e760e21b81523360048201526001600160a01b0386811660248301526001600160801b03861660448301529151600092881691637543e39c91606480830192602092919082900301818787803b15801561118d57600080fd5b505af11580156111a1573d6000803e3d6000fd5b505050506040513d60208110156111b757600080fd5b50516001600160801b039081169150831681111561121c576040805162461bcd60e51b815260206004820152601a60248201527f5969656c6450726f78793a204c696d6974206578636565646564000000000000604482015290519081900360640190fd5b95945050505050565b6000546001600160a01b031681565b61123d84613998565b6000846001600160a01b031663284f44446040518163ffffffff1660e01b815260040160206040518083038186803b15801561127857600080fd5b505afa15801561128c573d6000803e3d6000fd5b505050506040513d60208110156112a257600080fd5b50516040805163204f83f960e01b815290519192506000916001600160a01b0384169163204f83f9916004808301926020929190829003018186803b1580156112ea57600080fd5b505afa1580156112fe573d6000803e3d6000fd5b505050506040513d602081101561131457600080fd5b505160408051633dae446f60e21b815233600482015230602482015260448101889052815192935060009283926001600160a01b038b169263f6b911bc926064808301939282900301818787803b15801561136e57600080fd5b505af1158015611382573d6000803e3d6000fd5b505050506040513d604081101561139857600080fd5b508051602090910151909250905060006001600160a01b03891663b26be92230806113c287613a08565b604080516001600160e01b031960e087901b1681526001600160a01b0394851660048201529290931660248301526001600160801b03166044820152905160648083019260209291908290030181600087803b15801561142157600080fd5b505af1158015611435573d6000803e3d6000fd5b505050506040513d602081101561144b57600080fd5b50516001600160801b031690506114628388613a6a565b8110156114a05760405162461bcd60e51b81526004018080602001828103825260278152602001806141146027913960400191505060405180910390fd5b6114b0828263ffffffff613a9516565b91506000808311801561154b5750600654604080516324c94bb560e21b8152634348414960e01b60048201526024810188905233604482015290516000926001600160a01b0316916393252ed4916064808301926020929190829003018186803b15801561151d57600080fd5b505afa158015611531573d6000803e3d6000fd5b505050506040513d602081101561154757600080fd5b5051115b156115ed576006546040805163b93dd41d60e01b8152634348414960e01b6004820152602481018890523060448201523360648201526084810186905290516001600160a01b039092169163b93dd41d9160a4808201926020929091908290030181600087803b1580156115be57600080fd5b505af11580156115d2573d6000803e3d6000fd5b505050506040513d60208110156115e857600080fd5b505190505b60006115ff848363ffffffff613aef16565b905080156116e1576116118189613a6a565b604080516360561e0560e01b8152306004820181905260248201526001600160801b038416604482015290516001600160a01b038e16916360561e059160648083019260209291908290030181600087803b15801561166f57600080fd5b505af1158015611683573d6000803e3d6000fd5b505050506040513d602081101561169957600080fd5b50516001600160801b031610156116e15760405162461bcd60e51b815260040180806020018281038252602981526020018061417f6029913960400191505060405180910390fd5b6116ea87613b31565b5050505050505050505050565b6001546001600160a01b031681565b600061171184613998565b6000846001600160a01b031663284f44446040518163ffffffff1660e01b815260040160206040518083038186803b15801561174c57600080fd5b505afa158015611760573d6000803e3d6000fd5b505050506040513d602081101561177657600080fd5b50516040805163ae4e7fdf60e01b815290519192506001600160a01b0383169163ae4e7fdf91600480820192602092909190829003018186803b1580156117bc57600080fd5b505afa1580156117d0573d6000803e3d6000fd5b505050506040513d60208110156117e657600080fd5b505115156001141561183f576040805162461bcd60e51b815260206004820181905260248201527f5969656c6450726f78793a204f6e6c79206265666f7265206d61747572697479604482015290519081900360640190fd5b600254604080516323b872dd60e01b81523360048201523060248201526044810187905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b15801561189957600080fd5b505af11580156118ad573d6000803e3d6000fd5b505050506040513d60208110156118c357600080fd5b5051611916576040805162461bcd60e51b815260206004820152601b60248201527f5969656c6450726f78793a205472616e73666572204661696c65640000000000604482015290519081900360640190fd5b600254604080516370a0823160e01b81526001600160a01b038881166004830152915160009392909216916370a0823191602480820192602092909190829003018186803b15801561196757600080fd5b505afa15801561197b573d6000803e3d6000fd5b505050506040513d602081101561199157600080fd5b5051604080516370a0823160e01b81526001600160a01b0389811660048301529151929350600092918516916370a0823191602480820192602092909190829003018186803b1580156119e357600080fd5b505afa1580156119f7573d6000803e3d6000fd5b505050506040513d6020811015611a0d57600080fd5b505190506000611a42611a26838563ffffffff613a9516565b611a36898663ffffffff613f7c16565b9063ffffffff613fd516565b90506000611a56888363ffffffff613aef16565b905086811115611aad576040805162461bcd60e51b815260206004820152601d60248201527f5969656c6450726f78793a206d61784659446169206578636565646564000000604482015290519081900360640190fd5b60055460408051633b4da69f60e01b81523060048201526024810184905290516001600160a01b0390921691633b4da69f9160448082019260009290919082900301818387803b158015611b0057600080fd5b505af1158015611b14573d6000803e3d6000fd5b505060055460408051633612d9a360e11b81523060048201529051600094506001600160a01b039092169250636c25b34691602480830192602092919082900301818787803b158015611b6657600080fd5b505af1158015611b7a573d6000803e3d6000fd5b505050506040513d6020811015611b9057600080fd5b5051600654600554604080516370a0823160e01b8152306004820181905291519495506001600160a01b039384169463adb9e54e94634348414960e01b9433939116916370a0823191602480820192602092909190829003018186803b158015611bf957600080fd5b505afa158015611c0d573d6000803e3d6000fd5b505050506040513d6020811015611c2357600080fd5b5051604080516001600160e01b031960e088901b16815260048101959095526001600160a01b039384166024860152919092166044840152606483019190915251608480830192600092919082900301818387803b158015611c8457600080fd5b505af1158015611c98573d6000803e3d6000fd5b50505050600660009054906101000a90046001600160a01b03166001600160a01b031663801d325f634348414960e01b886001600160a01b031663204f83f96040518163ffffffff1660e01b815260040160206040518083038186803b158015611d0157600080fd5b505afa158015611d15573d6000803e3d6000fd5b505050506040513d6020811015611d2b57600080fd5b5051604080516001600160e01b031960e086901b16815260048101939093526024830191909152336044830152306064830152608482018590525160a480830192600092919082900301818387803b158015611d8657600080fd5b505af1158015611d9a573d6000803e3d6000fd5b505060408051636361ddf360e11b81523060048201523360248201526044810187905290516001600160a01b038e16935063c6c3bbe6925060648083019260209291908290030181600087803b158015611df357600080fd5b505af1158015611e07573d6000803e3d6000fd5b505050506040513d6020811015611e1d57600080fd5b50519a9950505050505050505050565b611e3683613998565b6000836001600160a01b031663284f44446040518163ffffffff1660e01b815260040160206040518083038186803b158015611e7157600080fd5b505afa158015611e85573d6000803e3d6000fd5b505050506040513d6020811015611e9b57600080fd5b50516040805163204f83f960e01b815290519192506000916001600160a01b0384169163204f83f9916004808301926020929190829003018186803b158015611ee357600080fd5b505afa158015611ef7573d6000803e3d6000fd5b505050506040513d6020811015611f0d57600080fd5b505160408051633dae446f60e21b815233600482015230602482015260448101879052815192935060009283926001600160a01b038a169263f6b911bc926064808301939282900301818787803b158015611f6757600080fd5b505af1158015611f7b573d6000803e3d6000fd5b505050506040513d6040811015611f9157600080fd5b5080516020909101519092509050600081158015906120385750600654604080516324c94bb560e21b8152634348414960e01b60048201526024810187905233604482015290516000926001600160a01b0316916393252ed4916064808301926020929190829003018186803b15801561200a57600080fd5b505afa15801561201e573d6000803e3d6000fd5b505050506040513d602081101561203457600080fd5b5051115b156120da576006546040805163b93dd41d60e01b8152634348414960e01b6004820152602481018790523060448201523360648201526084810185905290516001600160a01b039092169163b93dd41d9160a4808201926020929091908290030181600087803b1580156120ab57600080fd5b505af11580156120bf573d6000803e3d6000fd5b505050506040513d60208110156120d557600080fd5b505190505b60006120ec838363ffffffff613aef16565b9050806122305760008411801561218b5750600654604080516324c94bb560e21b8152634348414960e01b60048201526024810188905233604482015290516000926001600160a01b0316916393252ed4916064808301926020929190829003018186803b15801561215d57600080fd5b505afa158015612171573d6000803e3d6000fd5b505050506040513d602081101561218757600080fd5b5051115b1561222b57600654604080516325d3cd1760e01b8152634348414960e01b6004820152602481018890523060448201523360648201526084810187905290516001600160a01b03909216916325d3cd179160a4808201926020929091908290030181600087803b1580156121fe57600080fd5b505af1158015612212573d6000803e3d6000fd5b505050506040513d602081101561222857600080fd5b50505b61230a565b61223a8188613a6a565b604080516360561e0560e01b8152306004820181905260248201526001600160801b038416604482015290516001600160a01b038c16916360561e059160648083019260209291908290030181600087803b15801561229857600080fd5b505af11580156122ac573d6000803e3d6000fd5b505050506040513d60208110156122c257600080fd5b50516001600160801b0316101561230a5760405162461bcd60e51b815260040180806020018281038252602981526020018061417f6029913960400191505060405180910390fd5b61231386613b31565b505050505050505050565b6007546001600160a01b031681565b600061233887613998565b6006546040805163801d325f60e01b815260048101899052602481018890523360448201523060648201526084810186905290516001600160a01b039092169163801d325f9160a48082019260009290919082900301818387803b15801561239f57600080fd5b505af11580156123b3573d6000803e3d6000fd5b505050506000876001600160a01b03166360561e0530876123d388613a08565b604080516001600160e01b031960e087901b1681526001600160a01b0394851660048201529290931660248301526001600160801b03166044820152905160648083019260209291908290030181600087803b15801561243257600080fd5b505af1158015612446573d6000803e3d6000fd5b505050506040513d602081101561245c57600080fd5b50516001600160801b03169050828110156124a85760405162461bcd60e51b815260040180806020018281038252602381526020018061415c6023913960400191505060405180910390fd5b979650505050505050565b60006124be86613998565b60008060006124cc8561397d565b925092509250886001600160a01b031663284f44446040518163ffffffff1660e01b815260040160206040518083038186803b15801561250b57600080fd5b505afa15801561251f573d6000803e3d6000fd5b505050506040513d602081101561253557600080fd5b50516040805163d505accf60e01b81523360048201526001600160a01b038c8116602483015260001960448301819052606483015260ff8516608483015260a4820187905260c482018690529151919092169163d505accf9160e480830192600092919082900301818387803b1580156125ae57600080fd5b505af11580156125c2573d6000803e3d6000fd5b505050506125d289898989613528565b9998505050505050505050565b6125e885613998565b60008060006125f68661397d565b60025460408051623f675f60e91b81526001600160a01b038d8116600483015291519598509396509194501691638fcbaf0c918a918c918591637ecebe0091602480820192602092909190829003018186803b15801561265557600080fd5b505afa158015612669573d6000803e3d6000fd5b505050506040513d602081101561267f57600080fd5b5051604080516001600160e01b031960e087901b1681526001600160a01b039485166004820152929093166024830152604482015260001960648201526001608482015260ff851660a482015260c4810187905260e48101869052905161010480830192600092919082900301818387803b1580156126fd57600080fd5b505af1158015612711573d6000803e3d6000fd5b5050505061271e8561397d565b809350819450829550505050876001600160a01b031663284f44446040518163ffffffff1660e01b815260040160206040518083038186803b15801561276357600080fd5b505afa158015612777573d6000803e3d6000fd5b505050506040513d602081101561278d57600080fd5b50516040805163d505accf60e01b81526001600160a01b038a8116600483015230602483015260001960448301819052606483015260ff8516608483015260a4820187905260c482018690529151919092169163d505accf9160e480830192600092919082900301818387803b15801561280657600080fd5b505af115801561281a573d6000803e3d6000fd5b505050506128278461397d565b60408051631a28ff0560e01b81526001600160a01b038c81166004830152306024830152600019604483015260ff841660648301526084820186905260a4820185905291519497509295509093508a1691631a28ff059160c48082019260009290919082900301818387803b15801561289f57600080fd5b505af11580156128b3573d6000803e3d6000fd5b505050505050505050505050565b60006128cc87613998565b6000876001600160a01b0316634e20e9526128e685613a08565b6040518263ffffffff1660e01b815260040180826001600160801b03166001600160801b0316815260200191505060206040518083038186803b15801561292c57600080fd5b505afa158015612940573d6000803e3d6000fd5b505050506040513d602081101561295657600080fd5b50516001600160801b03169050838111156129a25760405162461bcd60e51b81526004018080602001828103825260238152602001806141a86023913960400191505060405180910390fd5b6006546040805163801d325f60e01b8152600481018a9052602481018990523360448201523060648201526084810184905290516001600160a01b039092169163801d325f9160a48082019260009290919082900301818387803b158015612a0957600080fd5b505af1158015612a1d573d6000803e3d6000fd5b50505050876001600160a01b031663cc5783d33087612a3b87613a08565b604080516001600160e01b031960e087901b1681526001600160a01b0394851660048201529290931660248301526001600160801b03166044820152905160648083019260209291908290030181600087803b158015612a9a57600080fd5b505af1158015612aae573d6000803e3d6000fd5b505050506040513d6020811015612ac457600080fd5b509098975050505050505050565b600181565b60096020526000908152604090205460ff1681565b6000612af786613998565b6000806000612b058561397d565b925092509250886001600160a01b031663284f44446040518163ffffffff1660e01b815260040160206040518083038186803b158015612b4457600080fd5b505afa158015612b58573d6000803e3d6000fd5b505050506040513d6020811015612b6e57600080fd5b50516040805163d505accf60e01b81523360048201526001600160a01b038c8116602483015260001960448301819052606483015260ff8516608483015260a4820187905260c482018690529151919092169163d505accf9160e480830192600092919082900301818387803b158015612be757600080fd5b505af1158015612bfb573d6000803e3d6000fd5b505050506125d2898989896137d4565b6b033b2e3c9fd0803ce800000081565b600160009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015612c6b57600080fd5b505af1158015612c7f573d6000803e3d6000fd5b5050600654604080516356dcf2a760e11b8152644554482d4160d81b60048201523060248201526001600160a01b038781166044830152346064830152915191909216945063adb9e54e93506084808301935060009282900301818387803b158015612cea57600080fd5b505af1158015612cfe573d6000803e3d6000fd5b5050505050565b60088181548110612d1257fe5b6000918252602090912001546001600160a01b0316905081565b644554482d4160d81b81565b6000612d4385613998565b60408051635935f49160e11b81523360048201526001600160a01b0386811660248301526001600160801b0386166044830152915160009288169163b26be92291606480830192602092919082900301818787803b158015612da457600080fd5b505af1158015612db8573d6000803e3d6000fd5b505050506040513d6020811015612dce57600080fd5b50516001600160801b039081169150831681101561121c576040805162461bcd60e51b815260206004820152601d60248201527f5969656c6450726f78793a204c696d6974206e6f742072656163686564000000604482015290519081900360640190fd5b6005546001600160a01b031681565b634348414960e01b81565b612e5682613998565b6000826001600160a01b031663284f44446040518163ffffffff1660e01b815260040160206040518083038186803b158015612e9157600080fd5b505afa158015612ea5573d6000803e3d6000fd5b505050506040513d6020811015612ebb57600080fd5b50516040805163204f83f960e01b815290519192506000916001600160a01b0384169163204f83f9916004808301926020929190829003018186803b158015612f0357600080fd5b505afa158015612f17573d6000803e3d6000fd5b505050506040513d6020811015612f2d57600080fd5b505160408051633dae446f60e21b815233600482015230602482015260448101869052815192935060009283926001600160a01b0389169263f6b911bc926064808301939282900301818787803b158015612f8757600080fd5b505af1158015612f9b573d6000803e3d6000fd5b505050506040513d6040811015612fb157600080fd5b5080516020909101519092509050801561305c5760408051630e6dfcd560e01b815230600482018190526024820152604481018390529051613059916001600160a01b03871691630e6dfcd5916064808201926020929091908290030181600087803b15801561302057600080fd5b505af1158015613034573d6000803e3d6000fd5b505050506040513d602081101561304a57600080fd5b5051839063ffffffff613a9516565b91505b6000821180156130f45750600654604080516324c94bb560e21b8152634348414960e01b60048201526024810186905233604482015290516000926001600160a01b0316916393252ed4916064808301926020929190829003018186803b1580156130c657600080fd5b505afa1580156130da573d6000803e3d6000fd5b505050506040513d60208110156130f057600080fd5b5051115b1561319457600654604080516325d3cd1760e01b8152634348414960e01b6004820152602481018690523060448201523360648201526084810185905290516001600160a01b03909216916325d3cd179160a4808201926020929091908290030181600087803b15801561316757600080fd5b505af115801561317b573d6000803e3d6000fd5b505050506040513d602081101561319157600080fd5b50505b61319d84613b31565b505050505050565b6004546001600160a01b031681565b600081565b60006131c487613998565b6000876001600160a01b03166385561a346131de85613a08565b6040518263ffffffff1660e01b815260040180826001600160801b03166001600160801b0316815260200191505060206040518083038186803b15801561322457600080fd5b505afa158015613238573d6000803e3d6000fd5b505050506040513d602081101561324e57600080fd5b5051600654604080516324c94bb560e21b8152600481018b9052602481018a90526001600160a01b03898116604483015291516001600160801b03909416945060009391909216916393252ed4916064808301926020929190829003018186803b1580156132bb57600080fd5b505afa1580156132cf573d6000803e3d6000fd5b505050506040513d60208110156132e557600080fd5b5051905080821161339b57886001600160a01b031663b26be922333061330a88613a08565b604080516001600160e01b031960e087901b1681526001600160a01b0394851660048201529290931660248301526001600160801b03166044820152905160648083019260209291908290030181600087803b15801561336957600080fd5b505af115801561337d573d6000803e3d6000fd5b505050506040513d602081101561339357600080fd5b506134469050565b886001600160a01b0316637543e39c33306133b585613a08565b604080516001600160e01b031960e087901b1681526001600160a01b0394851660048201529290931660248301526001600160801b03166044820152905160648083019260209291908290030181600087803b15801561341457600080fd5b505af1158015613428573d6000803e3d6000fd5b505050506040513d602081101561343e57600080fd5b509091508190505b848210156134855760405162461bcd60e51b81526004018080602001828103825260288152602001806141ec6028913960400191505060405180910390fd5b6006546040805163b93dd41d60e01b8152600481018b9052602481018a90523060448201526001600160a01b038981166064830152608482018690529151919092169163b93dd41d9160a48083019260209291908290030181600087803b1580156134ef57600080fd5b505af1158015613503573d6000803e3d6000fd5b505050506040513d602081101561351957600080fd5b50919998505050505050505050565b600061353385613998565b6040805163cc5783d360e01b81523360048201526001600160a01b0386811660248301526001600160801b0386166044830152915160009288169163cc5783d391606480830192602092919082900301818787803b15801561118d57600080fd5b600061359f87613998565b600654604080516324c94bb560e21b815260048101899052602481018890526001600160a01b038781166044830152915160009392909216916393252ed491606480820192602092909190829003018186803b1580156135fe57600080fd5b505afa158015613612573d6000803e3d6000fd5b505050506040513d602081101561362857600080fd5b50519050600084821061363b578461363d565b815b90506000896001600160a01b0316637543e39c333061365b86613a08565b604080516001600160e01b031960e087901b1681526001600160a01b0394851660048201529290931660248301526001600160801b03166044820152905160648083019260209291908290030181600087803b1580156136ba57600080fd5b505af11580156136ce573d6000803e3d6000fd5b505050506040513d60208110156136e457600080fd5b50516001600160801b03169050848111156137305760405162461bcd60e51b81526004018080602001828103825260218152602001806141cb6021913960400191505060405180910390fd5b6006546040805163b93dd41d60e01b8152600481018c9052602481018b90523060448201526001600160a01b038a81166064830152608482018690529151919092169163b93dd41d9160a48083019260209291908290030181600087803b15801561379a57600080fd5b505af11580156137ae573d6000803e3d6000fd5b505050506040513d60208110156137c457600080fd5b50909a9950505050505050505050565b60006137df85613998565b604080516360561e0560e01b81523360048201526001600160a01b0386811660248301526001600160801b038616604483015291516000928816916360561e0591606480830192602092919082900301818787803b158015612da457600080fd5b6006546040805163470660bb60e11b8152644554482d4160d81b60048201523360248201523060448201526064810184905290516001600160a01b0390921691638e0cc1769160848082019260009290919082900301818387803b1580156138a757600080fd5b505af11580156138bb573d6000803e3d6000fd5b505060015460408051632e1a7d4d60e01b81526004810186905290516001600160a01b039092169350632e1a7d4d925060248082019260009290919082900301818387803b15801561390c57600080fd5b505af1158015613920573d6000803e3d6000fd5b50506040516001600160a01b038516925083156108fc02915083906000818181858888f1935050505015801561395a573d6000803e3d6000fd5b505050565b6002546001600160a01b031681565b6006546001600160a01b031681565b60208101516040820151606090920151909260009190911a90565b6001600160a01b03811660009081526009602052604090205460ff16613a05576040805162461bcd60e51b815260206004820152601860248201527f5969656c6450726f78793a20556e6b6e6f776e20706f6f6c0000000000000000604482015290519081900360640190fd5b50565b60006001600160801b03821115613a66576040805162461bcd60e51b815260206004820152601960248201527f5969656c6450726f78793a2043617374206f766572666c6f7700000000000000604482015290519081900360640190fd5b5090565b6000613a8c6b033b2e3c9fd0803ce8000000611a36858563ffffffff613f7c16565b90505b92915050565b600082820183811015613a8c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000613a8c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614017565b600660009054906101000a90046001600160a01b03166001600160a01b03166393252ed4634348414960e01b836001600160a01b031663204f83f96040518163ffffffff1660e01b815260040160206040518083038186803b158015613b9657600080fd5b505afa158015613baa573d6000803e3d6000fd5b505050506040513d6020811015613bc057600080fd5b5051604080516001600160e01b031960e086901b16815260048101939093526024830191909152336044830152516064808301926020929190829003018186803b158015613c0d57600080fd5b505afa158015613c21573d6000803e3d6000fd5b505050506040513d6020811015613c3757600080fd5b5051613e30576006546040805163dd62f42360e01b8152634348414960e01b60048201819052336024830181905292516001600160a01b0390941693638e0cc1769391923091869163dd62f423916044808301926020929190829003018186803b158015613ca457600080fd5b505afa158015613cb8573d6000803e3d6000fd5b505050506040513d6020811015613cce57600080fd5b5051604080516001600160e01b031960e088901b16815260048101959095526001600160a01b039384166024860152919092166044840152606483019190915251608480830192600092919082900301818387803b158015613d2f57600080fd5b505af1158015613d43573d6000803e3d6000fd5b5050600554604080516370a0823160e01b8152306004820181905291516001600160a01b03909316945063ef693bed9350909184916370a08231916024808301926020929190829003018186803b158015613d9d57600080fd5b505afa158015613db1573d6000803e3d6000fd5b505050506040513d6020811015613dc757600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039093166004840152602483019190915251604480830192600092919082900301818387803b158015613e1757600080fd5b505af1158015613e2b573d6000803e3d6000fd5b505050505b600254604080516370a0823160e01b815230600482015290516001600160a01b039092169163a9059cbb91339184916370a08231916024808301926020929190829003018186803b158015613e8457600080fd5b505afa158015613e98573d6000803e3d6000fd5b505050506040513d6020811015613eae57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b158015613eff57600080fd5b505af1158015613f13573d6000803e3d6000fd5b505050506040513d6020811015613f2957600080fd5b5051613a05576040805162461bcd60e51b815260206004820152601f60248201527f5969656c6450726f78793a20446169205472616e73666572204661696c656400604482015290519081900360640190fd5b600082613f8b57506000613a8f565b82820282848281613f9857fe5b0414613a8c5760405162461bcd60e51b815260040180806020018281038252602181526020018061413b6021913960400191505060405180910390fd5b6000613a8c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506140ae565b600081848411156140a65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561406b578181015183820152602001614053565b50505050905090810190601f1680156140985780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836140fd5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561406b578181015183820152602001614053565b50600083858161410957fe5b049594505050505056fe5969656c6450726f78793a206d696e696d756d4461695072696365206e6f742072656163686564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775969656c6450726f78793a204e6f7420656e6f75676820446169206f627461696e65645969656c6450726f78793a206d696e696d756d46594461695072696365206e6f7420726561636865645969656c6450726f78793a20546f6f206d7563682066794461692072657175697265645969656c6450726f78793a20546f6f206d756368204461692072657175697265645969656c6450726f78793a204e6f7420656e6f756768206679446169206465627420726570616964a2646970667358221220836018745716d2415740ebd60fcb800fe69f1fc1c77160eca3eb8126134b87b364736f6c634300060a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000b94199866fe06b535d019c11247d3f921460b91a000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000060000000000000000000000006feb7b2a023c9bc3cccdf7c5b5a7b929b9a65e04000000000000000000000000f7db19e0373937a13e4b12287b1c121dfb2d9bf8000000000000000000000000b39221e6790ae8360b7e8c1c7221900fad9397f9000000000000000000000000250f8d88173e0d9b692a9742f54e87e01a9fa54e0000000000000000000000008ecc94a91b5cf03927f5eb8c60abbdf48f82b0b30000000000000000000000005591f644b377ed784e558d4be1bba78f5a26bdcd
-----Decoded View---------------
Arg [0] : controller_ (address): 0xB94199866Fe06B535d019C11247D3f921460b91A
Arg [1] : _pools (address[]): 0x6feb7B2a023C9Bc3ccCdF7c5B5a7b929B9a65E04,0xF7dB19E0373937A13e4b12287B1C121Dfb2d9BF8,0xb39221E6790Ae8360B7E8C1c7221900fad9397f9,0x250f8d88173E0D9b692A9742f54e87E01A9FA54E,0x8EcC94a91b5CF03927f5eb8c60ABbDf48F82b0b3,0x5591f644B377eD784e558D4BE1bbA78f5a26bdCd
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 000000000000000000000000b94199866fe06b535d019c11247d3f921460b91a
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [3] : 0000000000000000000000006feb7b2a023c9bc3cccdf7c5b5a7b929b9a65e04
Arg [4] : 000000000000000000000000f7db19e0373937a13e4b12287b1c121dfb2d9bf8
Arg [5] : 000000000000000000000000b39221e6790ae8360b7e8c1c7221900fad9397f9
Arg [6] : 000000000000000000000000250f8d88173e0d9b692a9742f54e87e01a9fa54e
Arg [7] : 0000000000000000000000008ecc94a91b5cf03927f5eb8c60abbdf48f82b0b3
Arg [8] : 0000000000000000000000005591f644b377ed784e558d4be1bba78f5a26bdcd
Deployed Bytecode Sourcemap
21322:22489:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23649:421;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23649:421:0;;;;;;;;;;;;;;;-1:-1:-1;;;23649:421:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23649:421:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23649:421:0;;;;;;;;-1:-1:-1;23649:421:0;;-1:-1:-1;;;;;23649:421:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23649:421:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23649:421:0;;-1:-1:-1;23649:421:0;;-1:-1:-1;;;;;23649:421:0:i;:::-;;43250:423;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43250:423:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;43250:423:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;43250:423:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43250:423:0;;-1:-1:-1;43250:423:0;;-1:-1:-1;;;;;43250:423:0:i;:::-;;;;;;;;;;;;;;;;21467:24;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;21467:24:0;;;;;;;;;;;;;;42197:358;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;42197:358:0;;;;;;;;;;;;;-1:-1:-1;;;;;42197:358:0;;;;;;;;;;;;:::i;21399:15::-;;;;;;;;;;;;;:::i;28303:1428::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28303:1428:0;;;;;;;;;;;;;;;;;;:::i;21421:17::-;;;;;;;;;;;;;:::i;26286:1316::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26286:1316:0;;;;;;;;;;;;;:::i;30285:1305::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30285:1305:0;;;;;;;;;;;;;:::i;21588:25::-;;;;;;;;;;;;;:::i;34905:677::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34905:677:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;40295:404::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40295:404:0;;;;;;;;;;;;;-1:-1:-1;;;;;40295:404:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;40295:404:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;40295:404:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40295:404:0;;-1:-1:-1;40295:404:0;;-1:-1:-1;;;;;40295:404:0:i;24191:581::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24191:581:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24191:581:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24191:581:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24191:581:0;;;;;;;;-1:-1:-1;24191:581:0;;-1:-1:-1;;;;;24191:581:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24191:581:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24191:581:0;;;;;;;;-1:-1:-1;24191:581:0;;-1:-1:-1;;;;;24191:581:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24191:581:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24191:581:0;;-1:-1:-1;24191:581:0;;-1:-1:-1;;;;;24191:581:0:i;33656:726::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33656:726:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21788:31::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;21649:41;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21649:41:0;-1:-1:-1;;;;;21649:41:0;;:::i;41576:410::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41576:410:0;;;;;;;;;;;;;-1:-1:-1;;;;;41576:410:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;41576:410:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;41576:410:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41576:410:0;;-1:-1:-1;41576:410:0;;-1:-1:-1;;;;;41576:410:0:i;19528:35::-;;;;;;;;;;;;;:::i;25113:165::-;;;;;;;;;;;;;;;;-1:-1:-1;25113:165:0;-1:-1:-1;;;;;25113:165:0;;:::i;21622:20::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21622:20:0;;:::i;21743:38::-;;;;;;;;;;;;;:::i;39056:368::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;39056:368:0;;;;;;;;;;;;;-1:-1:-1;;;;;39056:368:0;;;;;;;;;;;;:::i;21528:17::-;;;;;;;;;;;;;:::i;21699:37::-;;;;;;;;;;;;;:::i;31895:702::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31895:702:0;;;;;;;;:::i;21498:23::-;;;;;;;;;;;;;:::i;21826:32::-;;;;;;;;;;;;;:::i;37727:1117::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;37727:1117:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;39633:358::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;39633:358:0;;;;;;;;;;;;;-1:-1:-1;;;;;39633:358:0;;;;;;;;;;;;:::i;36231:812::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;36231:812:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;40909:364::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;40909:364:0;;;;;;;;;;;;;-1:-1:-1;;;;;40909:364:0;;;;;;;;;;;;:::i;25604:211::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25604:211:0;;;;;;;;:::i;21445:15::-;;;;;;;;;;;;;:::i;21552:29::-;;;;;;;;;;;;;:::i;23649:421::-;23755:9;23775;23795:7;23827:20;23834:12;23827:6;:20::i;:::-;23858:3;;23890:16;;;-1:-1:-1;;;23890:16:0;;-1:-1:-1;;;;;23890:16:0;;;;;;;;;23815:32;;-1:-1:-1;23815:32:0;;-1:-1:-1;23815:32:0;;-1:-1:-1;23858:3:0;;:10;;23869:4;;23883;;23858:3;;23890:10;;:16;;;;;;;;;;;;;;;23858:3;23890:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23890:16:0;23858:74;;;-1:-1:-1;;;;;;23858:74:0;;;;;;;-1:-1:-1;;;;;23858:74:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23858:74:0;;;;23918:4;23858:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23858:74:0;;;;;;;-1:-1:-1;23858:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23957:21;23964:13;23957:6;:21::i;:::-;23989:10;;:73;;;-1:-1:-1;;;23989:73:0;;-1:-1:-1;;;;;23989:73:0;;;;;;;24037:4;23989:73;;;;-1:-1:-1;;23989:73:0;;;;;;;;;;;;;;;;;;;;;;;;;23945:33;;-1:-1:-1;23945:33:0;;-1:-1:-1;23945:33:0;;-1:-1:-1;23989:10:0;;:33;;:73;;;;;:10;;:73;;;;;;;;:10;;:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23649:421;;;;;;:::o;43250:423::-;43409:7;43435:9;43446;43457:7;43468:17;43475:9;43468:6;:17::i;:::-;43496:3;;43527:8;;43538:22;;;-1:-1:-1;;;43538:22:0;;43507:10;43538:22;;;;;;;;43434:51;;-1:-1:-1;43434:51:0;;-1:-1:-1;43434:51:0;;-1:-1:-1;;;;;;43496:3:0;;;;:10;;43527:8;;;;;43496:3;;43538:10;;:22;;;;;;;;;;;;;;43496:3;43538:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43538:22:0;43496:90;;;-1:-1:-1;;;;;;43496:90:0;;;;;;;-1:-1:-1;;;;;43496:90:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;43496:90:0;;;;43572:4;43496:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;43496:90:0;;;;;;;-1:-1:-1;43496:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;43597:10:0;;:68;;;-1:-1:-1;;;43597:68:0;;;;;;;;;;;;;;43639:10;43597:68;;;;-1:-1:-1;;;;;43597:68:0;;;;;;;;;;;;;;;:10;;;;;-1:-1:-1;43597:19:0;;-1:-1:-1;43597:68:0;;;;;;;;;;;;;;:10;;:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43250:423:0;;;-1:-1:-1;;;;;;;;;43250:423:0:o;21467:24::-;;;-1:-1:-1;;;;;21467:24:0;;:::o;42197:358::-;42310:7;42335:19;42349:4;42335:13;:19::i;:::-;42381:39;;;-1:-1:-1;;;42381:39:0;;42395:10;42381:39;;;;-1:-1:-1;;;;;42381:39:0;;;;;;;-1:-1:-1;;;;;42381:39:0;;;;;;;;42365:13;;42381;;;;;:39;;;;;;;;;;;;;;42365:13;42381;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42381:39:0;-1:-1:-1;;;;;42365:55:0;;;;-1:-1:-1;42453:17:0;;;-1:-1:-1;42453:17:0;42431:93;;;;;-1:-1:-1;;;42431:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;42542:5;42197:358;-1:-1:-1;;;;;42197:358:0:o;21399:15::-;;;-1:-1:-1;;;;;21399:15:0;;:::o;28303:1428::-;28444:19;28458:4;28444:13;:19::i;:::-;28474:12;28489:4;-1:-1:-1;;;;;28489:10:0;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28489:12:0;28531:16;;;-1:-1:-1;;;28531:16:0;;;;28489:12;;-1:-1:-1;28512:16:0;;-1:-1:-1;;;;;28531:14:0;;;;;:16;;;;;28489:12;;28531:16;;;;;;;:14;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28531:16:0;28605:48;;;-1:-1:-1;;;28605:48:0;;28615:10;28605:48;;;;28635:4;28605:48;;;;;;;;;;;;28531:16;;-1:-1:-1;28559:19:0;;;;-1:-1:-1;;;;;28605:9:0;;;;;:48;;;;;;;;;;;28559:19;28605:9;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28605:48:0;;;;;;;;;-1:-1:-1;28605:48:0;-1:-1:-1;28733:19:0;-1:-1:-1;;;;;28755:12:0;;;28776:4;;28798:23;28605:48;28798:21;:23::i;:::-;28755:67;;;-1:-1:-1;;;;;;28755:67:0;;;;;;;-1:-1:-1;;;;;28755:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28755:67:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28755:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28755:67:0;-1:-1:-1;;;;;28733:89:0;;-1:-1:-1;28870:34:0;28875:11;28888:15;28870:4;:34::i;:::-;28855:11;:49;;28833:138;;;;-1:-1:-1;;;28833:138:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28998:30;:13;29016:11;28998:30;:17;:30;:::i;:::-;28982:46;;29049:17;29097:1;29081:13;:17;:73;;;;-1:-1:-1;29102:10:0;;:48;;;-1:-1:-1;;;29102:48:0;;-1:-1:-1;;;29102:48:0;;;;;;;;;;29139:10;29102:48;;;;;;29153:1;;-1:-1:-1;;;;;29102:10:0;;:20;;:48;;;;;;;;;;;;;;:10;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29102:48:0;:52;29081:73;29077:197;;;29183:10;;:79;;;-1:-1:-1;;;29183:79:0;;-1:-1:-1;;;29183:79:0;;;;;;;;;;29229:4;29183:79;;;;29236:10;29183:79;;;;;;;;;;;;-1:-1:-1;;;;;29183:10:0;;;;:21;;:79;;;;;;;;;;;;;;;:10;;:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29183:79:0;;-1:-1:-1;29077:197:0;29284:22;29309:28;:13;29327:9;29309:28;:17;:28;:::i;:::-;29284:53;-1:-1:-1;29354:18:0;;29350:342;;29564:39;29569:14;29585:17;29564:4;:39::i;:::-;29491:69;;;-1:-1:-1;;;29491:69:0;;29514:4;29491:69;;;;;;;;;;-1:-1:-1;;;;;29491:69:0;;;;;;;;-1:-1:-1;;;;;29491:14:0;;;;;:69;;;;;;;;;;;;;;-1:-1:-1;29491:14:0;:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29491:69:0;-1:-1:-1;;;;;29491:112:0;;;29465:215;;;;-1:-1:-1;;;29465:215:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29702:21;29717:5;29702:14;:21::i;:::-;28303:1428;;;;;;;;;;;:::o;21421:17::-;;;-1:-1:-1;;;;;21421:17:0;;:::o;26286:1316::-;26373:7;26393:19;26407:4;26393:13;:19::i;:::-;26423:12;26438:4;-1:-1:-1;;;;;26438:10:0;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26438:12:0;26469:16;;;-1:-1:-1;;;26469:16:0;;;;26438:12;;-1:-1:-1;;;;;;26469:14:0;;;;;:16;;;;;26438:12;;26469:16;;;;;;;;:14;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26469:16:0;:24;;26489:4;26469:24;;26461:69;;;;;-1:-1:-1;;;26461:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26549:3;;:52;;;-1:-1:-1;;;26549:52:0;;26566:10;26549:52;;;;26586:4;26549:52;;;;;;;;;;;;-1:-1:-1;;;;;26549:3:0;;;;:16;;:52;;;;;;;;;;;;;;;:3;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26549:52:0;26541:92;;;;;-1:-1:-1;;;26541:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26703:3;;:28;;;-1:-1:-1;;;26703:28:0;;-1:-1:-1;;;;;26703:28:0;;;;;;;;;26681:19;;26703:3;;;;;:13;;:28;;;;;;;;;;;;;;;:3;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26703:28:0;26766:30;;;-1:-1:-1;;;26766:30:0;;-1:-1:-1;;;;;26766:30:0;;;;;;;;;26703:28;;-1:-1:-1;26742:21:0;;26766:15;;;;;;:30;;;;;26703:28;;26766:30;;;;;;;;:15;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26766:30:0;;-1:-1:-1;26807:16:0;26826:60;26855:30;26766;26873:11;26855:30;:17;:30;:::i;:::-;26826:24;:7;26838:11;26826:24;:11;:24;:::i;:::-;:28;:60;:28;:60;:::i;:::-;26807:79;-1:-1:-1;26897:20:0;26920:21;:7;26807:79;26920:21;:11;:21;:::i;:::-;26897:44;;26990:8;26974:12;:24;;26952:103;;;;;-1:-1:-1;;;26952:103:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;27144:4;;:38;;;-1:-1:-1;;;27144:38:0;;27162:4;27144:38;;;;;;;;;;;;-1:-1:-1;;;;;27144:4:0;;;;:9;;:38;;;;;:4;;:38;;;;;;;;:4;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27284:4:0;;:23;;;-1:-1:-1;;;27284:23:0;;27301:4;27284:23;;;;;;27265:16;;-1:-1:-1;;;;;;27284:4:0;;;;-1:-1:-1;27284:8:0;;:23;;;;;;;;;;;;;;27265:16;27284:4;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27284:23:0;27318:10;;27367:4;;:29;;;-1:-1:-1;;;27367:29:0;;27348:4;27367:29;;;;;;;;27284:23;;-1:-1:-1;;;;;;27318:10:0;;;;:15;;-1:-1:-1;;;27334:4:0;27355:10;;27367:4;;;:14;;:29;;;;;27284:23;;27367:29;;;;;;;;:4;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27367:29:0;27318:79;;;-1:-1:-1;;;;;;27318:79:0;;;;;;;;;;;;;;-1:-1:-1;;;;;27318:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27318:79:0;;;;;;;-1:-1:-1;27318:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27408:10;;;;;;;;;-1:-1:-1;;;;;27408:10:0;-1:-1:-1;;;;;27408:17:0;;-1:-1:-1;;;27432:5:0;-1:-1:-1;;;;;27432:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27432:16:0;27408:78;;;-1:-1:-1;;;;;;27408:78:0;;;;;;;;;;;;;;;;;;;;;27450:10;27408:78;;;;27470:4;27408:78;;;;;;;;;;;;;;;;-1:-1:-1;;27408:78:0;;;;;;;-1:-1:-1;27408:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27548:46:0;;;-1:-1:-1;;;27548:46:0;;27566:4;27548:46;;;;27573:10;27548:46;;;;;;;;;;;;-1:-1:-1;;;;;27548:9:0;;;-1:-1:-1;27548:9:0;;-1:-1:-1;27548:46:0;;;;;;;;;;;;;;-1:-1:-1;27548:9:0;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27548:46:0;;26286:1316;-1:-1:-1;;;;;;;;;;26286:1316:0:o;30285:1305::-;30402:19;30416:4;30402:13;:19::i;:::-;30432:12;30447:4;-1:-1:-1;;;;;30447:10:0;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30447:12:0;30489:16;;;-1:-1:-1;;;30489:16:0;;;;30447:12;;-1:-1:-1;30470:16:0;;-1:-1:-1;;;;;30489:14:0;;;;;:16;;;;;30447:12;;30489:16;;;;;;;:14;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30489:16:0;30563:48;;;-1:-1:-1;;;30563:48:0;;30573:10;30563:48;;;;30593:4;30563:48;;;;;;;;;;;;30489:16;;-1:-1:-1;30517:19:0;;;;-1:-1:-1;;;;;30563:9:0;;;;;:48;;;;;;;;;;;30517:19;30563:9;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30563:48:0;;;;;;;;;-1:-1:-1;30563:48:0;-1:-1:-1;30624:17:0;30656;;;;;:73;;-1:-1:-1;30677:10:0;;:48;;;-1:-1:-1;;;30677:48:0;;-1:-1:-1;;;30677:48:0;;;;;;;;;;30714:10;30677:48;;;;;;30728:1;;-1:-1:-1;;;;;30677:10:0;;:20;;:48;;;;;;;;;;;;;;:10;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30677:48:0;:52;30656:73;30652:197;;;30758:10;;:79;;;-1:-1:-1;;;30758:79:0;;-1:-1:-1;;;30758:79:0;;;;;;;;;;30804:4;30758:79;;;;30811:10;30758:79;;;;;;;;;;;;-1:-1:-1;;;;;30758:10:0;;;;:21;;:79;;;;;;;;;;;;;;;:10;;:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30758:79:0;;-1:-1:-1;30652:197:0;30861:22;30886:28;:13;30904:9;30886:28;:17;:28;:::i;:::-;30861:53;-1:-1:-1;30929:19:0;30925:626;;31057:1;31043:11;:15;:71;;;;-1:-1:-1;31062:10:0;;:48;;;-1:-1:-1;;;31062:48:0;;-1:-1:-1;;;31062:48:0;;;;;;;;;;31099:10;31062:48;;;;;;31113:1;;-1:-1:-1;;;;;31062:10:0;;:20;;:48;;;;;;;;;;;;;;:10;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31062:48:0;:52;31043:71;31039:187;;;31135:10;;:75;;;-1:-1:-1;;;31135:75:0;;-1:-1:-1;;;31135:75:0;;;;;;;;;;31179:4;31135:75;;;;31186:10;31135:75;;;;;;;;;;;;-1:-1:-1;;;;;31135:10:0;;;;:19;;:75;;;;;;;;;;;;;;;:10;;:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31039:187:0;30925:626;;;31423:39;31428:14;31444:17;31423:4;:39::i;:::-;31350:69;;;-1:-1:-1;;;31350:69:0;;31373:4;31350:69;;;;;;;;;;-1:-1:-1;;;;;31350:69:0;;;;;;;;-1:-1:-1;;;;;31350:14:0;;;;;:69;;;;;;;;;;;;;;-1:-1:-1;31350:14:0;:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31350:69:0;-1:-1:-1;;;;;31350:112:0;;;31324:215;;;;-1:-1:-1;;;31324:215:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31561:21;31576:5;31561:14;:21::i;:::-;30285:1305;;;;;;;;;:::o;21588:25::-;;;-1:-1:-1;;;;;21588:25:0;;:::o;34905:677::-;35147:7;35172:19;35186:4;35172:13;:19::i;:::-;35282:10;;:81;;;-1:-1:-1;;;35282:81:0;;;;;;;;;;;;;;35322:10;35282:81;;;;35342:4;35282:81;;;;;;;;;;;;-1:-1:-1;;;;;35282:10:0;;;;:17;;:81;;;;;:10;;:81;;;;;;;;:10;;:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35374:17;35394:4;-1:-1:-1;;;;;35394:14:0;;35417:4;35424:2;35428:25;:13;:23;:25::i;:::-;35394:60;;;-1:-1:-1;;;;;;35394:60:0;;;;;;;-1:-1:-1;;;;;35394:60:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;35394:60:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35394:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35394:60:0;-1:-1:-1;;;;;35374:80:0;;-1:-1:-1;35474:31:0;;;;35465:80;;;;-1:-1:-1;;;35465:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35565:9;34905:677;-1:-1:-1;;;;;;;34905:677:0:o;40295:404::-;40443:7;40468:19;40482:4;40468:13;:19::i;:::-;40499:9;40510;40521:7;40532:17;40539:9;40532:6;:17::i;:::-;40498:51;;;;;;40560:4;-1:-1:-1;;;;;40560:10:0;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40560:12:0;:75;;;-1:-1:-1;;;40560:75:0;;40580:10;40560:75;;;;-1:-1:-1;;;;;40560:75:0;;;;;;;-1:-1:-1;;40560:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:19;;;;;;;:75;;;;;-1:-1:-1;;40560:75:0;;;;;;;-1:-1:-1;40560:19:0;:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40655:36;40662:4;40668:2;40672:6;40680:10;40655:6;:36::i;:::-;40648:43;40295:404;-1:-1:-1;;;;;;;;;40295:404:0:o;24191:581::-;24324:19;24338:4;24324:13;:19::i;:::-;24354:9;24374;24394:7;24426:14;24433:6;24426;:14::i;:::-;24451:3;;24483:16;;;-1:-1:-1;;;24483:16:0;;-1:-1:-1;;;;;24483:16:0;;;;;;;;;24414:26;;-1:-1:-1;24414:26:0;;-1:-1:-1;24414:26:0;;-1:-1:-1;24451:3:0;;:10;;24462:4;;24476;;24451:3;;24483:10;;:16;;;;;;;;;;;;;;;24451:3;24483:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24483:16:0;24451:74;;;-1:-1:-1;;;;;;24451:74:0;;;;;;;-1:-1:-1;;;;;24451:74:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24451:74:0;;;;24511:4;24451:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24451:74:0;;;;;;;-1:-1:-1;24451:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24550:16;24557:8;24550:6;:16::i;:::-;24538:28;;;;;;;;;;;;24577:4;-1:-1:-1;;;;;24577:10:0;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24577:12:0;:69;;;-1:-1:-1;;;24577:69:0;;-1:-1:-1;;;;;24577:69:0;;;;;;;24611:4;24577:69;;;;-1:-1:-1;;24577:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:19;;;;;;;:69;;;;;-1:-1:-1;;24577:69:0;;;;;;;-1:-1:-1;24577:19:0;:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24671:15;24678:7;24671:6;:15::i;:::-;24697:67;;;-1:-1:-1;;;24697:67:0;;-1:-1:-1;;;;;24697:67:0;;;;;;;24739:4;24697:67;;;;-1:-1:-1;;24697:67:0;;;;;;;;;;;;;;;;;;;;;;;;;24659:27;;-1:-1:-1;24659:27:0;;-1:-1:-1;24659:27:0;;-1:-1:-1;24697:27:0;;;;;:67;;;;;-1:-1:-1;;24697:67:0;;;;;;;;-1:-1:-1;24697:27:0;:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24191:581;;;;;;;;:::o;33656:726::-;33890:7;33915:19;33929:4;33915:13;:19::i;:::-;33945:21;33969:4;-1:-1:-1;;;;;33969:18:0;;33988:23;:11;:21;:23::i;:::-;33969:43;;;;;;;;;;;;;-1:-1:-1;;;;;33969:43:0;-1:-1:-1;;;;;33969:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33969:43:0;-1:-1:-1;;;;;33945:67:0;;-1:-1:-1;34032:29:0;;;;34023:78;;;;-1:-1:-1;;;34023:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34194:10;;:81;;;-1:-1:-1;;;34194:81:0;;;;;;;;;;;;;;34234:10;34194:81;;;;34254:4;34194:81;;;;;;;;;;;;-1:-1:-1;;;;;34194:10:0;;;;:17;;:81;;;;;:10;;:81;;;;;;;;:10;;:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34286:4;-1:-1:-1;;;;;34286:11:0;;34306:4;34313:2;34317:23;:11;:21;:23::i;:::-;34286:55;;;-1:-1:-1;;;;;;34286:55:0;;;;;;;-1:-1:-1;;;;;34286:55:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;34286:55:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34286:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34361:13:0;;33656:726;-1:-1:-1;;;;;;;;33656:726:0:o;21788:31::-;21815:4;21788:31;:::o;21649:41::-;;;;;;;;;;;;;;;:::o;41576:410::-;41727:7;41752:19;41766:4;41752:13;:19::i;:::-;41783:9;41794;41805:7;41816:17;41823:9;41816:6;:17::i;:::-;41782:51;;;;;;41844:4;-1:-1:-1;;;;;41844:10:0;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41844:12:0;:75;;;-1:-1:-1;;;41844:75:0;;41864:10;41844:75;;;;-1:-1:-1;;;;;41844:75:0;;;;;;;-1:-1:-1;;41844:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:19;;;;;;;:75;;;;;-1:-1:-1;;41844:75:0;;;;;;;-1:-1:-1;41844:19:0;:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41939:39;41949:4;41955:2;41959:7;41968:9;41939;:39::i;19528:35::-;19559:4;19528:35;:::o;25113:165::-;25174:4;;;;;;;;;-1:-1:-1;;;;;25174:4:0;-1:-1:-1;;;;;25174:12:0;;25195:9;25174:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25219:10:0;;:51;;;-1:-1:-1;;;25219:51:0;;-1:-1:-1;;;25219:51:0;;;;25249:4;25219:51;;;;-1:-1:-1;;;;;25219:51:0;;;;;;;25260:9;25219:51;;;;;;:10;;;;;-1:-1:-1;25219:15:0;;-1:-1:-1;25219:51:0;;;;;-1:-1:-1;25219:10:0;;:51;;;;;:10;;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25113:165;:::o;21622:20::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21622:20:0;;-1:-1:-1;21622:20:0;:::o;21743:38::-;-1:-1:-1;;;21743:38:0;:::o;39056:368::-;39168:7;39193:19;39207:4;39193:13;:19::i;:::-;39242:35;;;-1:-1:-1;;;39242:35:0;;39255:10;39242:35;;;;-1:-1:-1;;;;;39242:35:0;;;;;;;-1:-1:-1;;;;;39242:35:0;;;;;;;;39223:16;;39242:12;;;;;:35;;;;;;;;;;;;;;39223:16;39242:12;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39242:35:0;-1:-1:-1;;;;;39223:54:0;;;;-1:-1:-1;39310:23:0;;;;;39288:102;;;;;-1:-1:-1;;;39288:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;21528:17;;;-1:-1:-1;;;;;21528:17:0;;:::o;21699:37::-;-1:-1:-1;;;21699:37:0;:::o;31895:702::-;31978:19;31992:4;31978:13;:19::i;:::-;32008:12;32023:4;-1:-1:-1;;;;;32023:10:0;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32023:12:0;32065:16;;;-1:-1:-1;;;32065:16:0;;;;32023:12;;-1:-1:-1;32046:16:0;;-1:-1:-1;;;;;32065:14:0;;;;;:16;;;;;32023:12;;32065:16;;;;;;;:14;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32065:16:0;32139:48;;;-1:-1:-1;;;32139:48:0;;32149:10;32139:48;;;;32169:4;32139:48;;;;;;;;;;;;32065:16;;-1:-1:-1;32093:19:0;;;;-1:-1:-1;;;;;32139:9:0;;;;;:48;;;;;;;;;;;32093:19;32139:9;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32139:48:0;;;;;;;;;-1:-1:-1;32139:48:0;-1:-1:-1;32202:17:0;;32198:138;;32266:57;;;-1:-1:-1;;;32266:57:0;;32287:4;32266:57;;;;;;;;;;;;;;;;;;32250:74;;-1:-1:-1;;;;;32266:12:0;;;;;:57;;;;;;;;;;;;;;;-1:-1:-1;32266:12:0;:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32266:57:0;32250:11;;:74;:15;:74;:::i;:::-;32236:88;;32198:138;32397:1;32383:11;:15;:71;;;;-1:-1:-1;32402:10:0;;:48;;;-1:-1:-1;;;32402:48:0;;-1:-1:-1;;;32402:48:0;;;;;;;;;;32439:10;32402:48;;;;;;32453:1;;-1:-1:-1;;;;;32402:10:0;;:20;;:48;;;;;;;;;;;;;;:10;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32402:48:0;:52;32383:71;32379:179;;;32471:10;;:75;;;-1:-1:-1;;;32471:75:0;;-1:-1:-1;;;32471:75:0;;;;;;;;;;32515:4;32471:75;;;;32522:10;32471:75;;;;;;;;;;;;-1:-1:-1;;;;;32471:10:0;;;;:19;;:75;;;;;;;;;;;;;;;:10;;:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32379:179:0;32568:21;32583:5;32568:14;:21::i;:::-;31895:702;;;;;;:::o;21498:23::-;;;-1:-1:-1;;;;;21498:23:0;;:::o;21826:32::-;21853:5;21826:32;:::o;37727:1117::-;37976:7;38001:19;38015:4;38001:13;:19::i;:::-;38031:22;38056:4;-1:-1:-1;;;;;38056:19:0;;38076:26;:14;:24;:26::i;:::-;38056:47;;;;;;;;;;;;;-1:-1:-1;;;;;38056:47:0;-1:-1:-1;;;;;38056:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38056:47:0;38134:10;;:46;;;-1:-1:-1;;;38134:46:0;;;;;;;;;;;;;;-1:-1:-1;;;;;38134:46:0;;;;;;;;;-1:-1:-1;;;;;38031:72:0;;;;-1:-1:-1;38114:17:0;;38134:10;;;;;:20;;:46;;;;;38056:47;;38134:46;;;;;;;:10;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38134:46:0;;-1:-1:-1;38194:27:0;;;38191:419;;38293:4;-1:-1:-1;;;;;38293:12:0;;38306:10;38326:4;38333:26;:14;:24;:26::i;:::-;38293:67;;;-1:-1:-1;;;;;;38293:67:0;;;;;;;-1:-1:-1;;;;;38293:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;38293:67:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38293:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38191:419:0;;-1:-1:-1;38191:419:0;;38494:4;-1:-1:-1;;;;;38494:13:0;;38508:10;38528:4;38535:21;:9;:19;:21::i;:::-;38494:63;;;-1:-1:-1;;;;;;38494:63:0;;;;;;;-1:-1:-1;;;;;38494:63:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;38494:63:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38494:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38589:9:0;;-1:-1:-1;38589:9:0;;-1:-1:-1;38191:419:0;38647:21;38629:14;:39;;38620:93;;;;-1:-1:-1;;;38620:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38724:10;;:78;;;-1:-1:-1;;;38724:78:0;;;;;;;;;;;;;;38776:4;38724:78;;;;-1:-1:-1;;;;;38724:78:0;;;;;;;;;;;;;;;:10;;;;;:21;;:78;;;;;;;;;;;;;;:10;;:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38822:14:0;;37727:1117;-1:-1:-1;;;;;;;;;37727:1117:0:o;39633:358::-;39742:7;39767:19;39781:4;39767:13;:19::i;:::-;39815:35;;;-1:-1:-1;;;39815:35:0;;39827:10;39815:35;;;;-1:-1:-1;;;;;39815:35:0;;;;;;;-1:-1:-1;;;;;39815:35:0;;;;;;;;39797:15;;39815:11;;;;;:35;;;;;;;;;;;;;;39797:15;39815:11;:35;;;;;;;;;;36231:812;36480:7;36505:19;36519:4;36505:13;:19::i;:::-;36555:10;;:46;;;-1:-1:-1;;;36555:46:0;;;;;;;;;;;;;;-1:-1:-1;;;;;36555:46:0;;;;;;;;;36535:17;;36555:10;;;;;:20;;:46;;;;;;;;;;;;;;;:10;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36555:46:0;;-1:-1:-1;36612:18:0;36633:26;;;:55;;36674:14;36633:55;;;36662:9;36633:55;36612:76;;36730:22;36755:4;-1:-1:-1;;;;;36755:13:0;;36769:10;36789:4;36796:22;:10;:20;:22::i;:::-;36755:64;;;-1:-1:-1;;;;;;36755:64:0;;;;;;;-1:-1:-1;;;;;36755:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;36755:64:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36755:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36755:64:0;-1:-1:-1;;;;;36730:89:0;;-1:-1:-1;36839:39:0;;;;36830:86;;;;-1:-1:-1;;;36830:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36927:10;;:74;;;-1:-1:-1;;;36927:74:0;;;;;;;;;;;;;;36979:4;36927:74;;;;-1:-1:-1;;;;;36927:74:0;;;;;;;;;;;;;;;:10;;;;;:21;;:74;;;;;;;;;;;;;;:10;;:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37021:14:0;;36231:812;-1:-1:-1;;;;;;;;;;36231:812:0:o;40909:364::-;41021:7;41046:19;41060:4;41046:13;:19::i;:::-;41093:39;;;-1:-1:-1;;;41093:39:0;;41108:10;41093:39;;;;-1:-1:-1;;;;;41093:39:0;;;;;;;-1:-1:-1;;;;;41093:39:0;;;;;;;;41076:14;;41093;;;;;:39;;;;;;;;;;;;;;41076:14;41093;:39;;;;;;;;;;25604:211;25685:10;;:60;;;-1:-1:-1;;;25685:60:0;;-1:-1:-1;;;25685:60:0;;;;25711:10;25685:60;;;;25731:4;25685:60;;;;;;;;;;;;-1:-1:-1;;;;;25685:10:0;;;;:19;;:60;;;;;:10;;:60;;;;;;;;:10;;:60;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25756:4:0;;:21;;;-1:-1:-1;;;25756:21:0;;;;;;;;;;-1:-1:-1;;;;;25756:4:0;;;;-1:-1:-1;25756:13:0;;-1:-1:-1;25756:21:0;;;;;:4;;:21;;;;;;;;:4;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25788:19:0;;-1:-1:-1;;;;;25788:11:0;;;-1:-1:-1;25788:19:0;;;;;-1:-1:-1;25800:6:0;;25788:19;;;;25800:6;25788:11;:19;;;;;;;;;;;;;;;;;;;;;25604:211;;:::o;21445:15::-;;;-1:-1:-1;;;;;21445:15:0;;:::o;21552:29::-;;;-1:-1:-1;;;;;21552:29:0;;:::o;23209:279::-;23363:4;23348:20;;23342:27;23409:4;23394:20;;23388:27;23463:4;23448:20;;;23442:27;23342;;23271:9;23434:36;;;;;23322:159::o;43681:127::-;-1:-1:-1;;;;;43748:23:0;;;;;;:8;:23;;;;;;;;43740:60;;;;;-1:-1:-1;;;43740:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;43681:127;:::o;20842:205::-;20894:7;-1:-1:-1;;;;;20936:22:0;;;20914:97;;;;;-1:-1:-1;;;20914:97:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21037:1:0;20842:205::o;19657:112::-;19716:7;19743:18;19559:4;19743:8;:1;19749;19743:8;:5;:8;:::i;:18::-;19736:25;;19657:112;;;;;:::o;14842:181::-;14900:7;14932:5;;;14956:6;;;;14948:46;;;;;-1:-1:-1;;;14948:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;15306:136;15364:7;15391:43;15395:1;15398;15391:43;;;;;;;;;;;;;;;;;:3;:43::i;32731:427::-;32793:10;;;;;;;;;-1:-1:-1;;;;;32793:10:0;-1:-1:-1;;;;;32793:20:0;;-1:-1:-1;;;32820:5:0;-1:-1:-1;;;;;32820:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32820:16:0;32793:56;;;-1:-1:-1;;;;;;32793:56:0;;;;;;;;;;;;;;;;;;;;;32838:10;32793:56;;;;;;;;;;32820:16;;32793:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32793:56:0;32789:253;;32871:10;;32924:35;;;-1:-1:-1;;;32924:35:0;;-1:-1:-1;;;32924:35:0;;;;;;32897:10;32924:35;;;;;;;;-1:-1:-1;;;;;32871:10:0;;;;:19;;32891:4;;32917;;32871:10;;32924:17;;:35;;;;;;;;;;;;;;32871:10;32924:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32924:35:0;32871:89;;;-1:-1:-1;;;;;;32871:89:0;;;;;;;;;;;;;;-1:-1:-1;;;;;32871:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32871:89:0;;;;;;;-1:-1:-1;32871:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32975:4:0;;33000:29;;;-1:-1:-1;;;33000:29:0;;32993:4;33000:29;;;;;;;;-1:-1:-1;;;;;32975:4:0;;;;-1:-1:-1;32975:9:0;;-1:-1:-1;32993:4:0;;32975;;33000:14;;:29;;;;;;;;;;;;;;32975:4;33000:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33000:29:0;32975:55;;;-1:-1:-1;;;;;;32975:55:0;;;;;;;-1:-1:-1;;;;;32975:55:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32975:55:0;;;;;;;-1:-1:-1;32975:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32789:253;33060:3;;33085:28;;;-1:-1:-1;;;33085:28:0;;33107:4;33085:28;;;;;;-1:-1:-1;;;;;33060:3:0;;;;:12;;33073:10;;33060:3;;33085:13;;:28;;;;;;;;;;;;;;33060:3;33085:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33085:28:0;33060:54;;;-1:-1:-1;;;;;;33060:54:0;;;;;;;-1:-1:-1;;;;;33060:54:0;;;;;;;;;;;;;;;;;;;;33085:28;;33060:54;;;;;;;-1:-1:-1;33060:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33060:54:0;33052:98;;;;;-1:-1:-1;;;33052:98:0;;;;;;;;;;;;;;;;;;;;;;;;;;;16196:471;16254:7;16499:6;16495:47;;-1:-1:-1;16529:1:0;16522:8;;16495:47;16566:5;;;16570:1;16566;:5;:1;16590:5;;;;;:10;16582:56;;;;-1:-1:-1;;;16582:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17143:132;17201:7;17228:39;17232:1;17235;17228:39;;;;;;;;;;;;;;;;;:3;:39::i;15745:192::-;15831:7;15867:12;15859:6;;;;15851:29;;;;-1:-1:-1;;;15851:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15903:5:0;;;15745:192::o;17771:278::-;17857:7;17892:12;17885:5;17877:28;;;;-1:-1:-1;;;17877:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17916:9;17932:1;17928;:5;;;;;;;17771:278;-1:-1:-1;;;;;17771:278:0:o
Swarm Source
ipfs://836018745716d2415740ebd60fcb800fe69f1fc1c77160eca3eb8126134b87b3
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ 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.