Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Latest 25 from a total of 41 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Set Pool Balance | 11191883 | 1971 days ago | IN | 0 ETH | 0.00147523 | ||||
| Set Pool Balance | 11191876 | 1971 days ago | IN | 0 ETH | 0.00147523 | ||||
| Set Pool Balance | 11191867 | 1971 days ago | IN | 0 ETH | 0.00073569 | ||||
| Deposit By Gov | 11191864 | 1971 days ago | IN | 0 ETH | 0.00449884 | ||||
| Emergency Withdr... | 11191857 | 1971 days ago | IN | 0 ETH | 0.00191947 | ||||
| Set Pool Balance | 11110293 | 1983 days ago | IN | 0 ETH | 0.00102312 | ||||
| Set Pool Balance | 11110291 | 1983 days ago | IN | 0 ETH | 0.00157768 | ||||
| Deposit By Gov | 11110269 | 1983 days ago | IN | 0 ETH | 0.0053289 | ||||
| Withdraw By Gov | 11110256 | 1983 days ago | IN | 0 ETH | 0.00419417 | ||||
| Set Total Balanc... | 11104518 | 1984 days ago | IN | 0 ETH | 0.00131467 | ||||
| Set Pool Balance | 11104505 | 1984 days ago | IN | 0 ETH | 0.00135494 | ||||
| Set Pool Balance | 11104459 | 1984 days ago | IN | 0 ETH | 0.0021332 | ||||
| Deposit By Gov | 11104446 | 1984 days ago | IN | 0 ETH | 0.00660211 | ||||
| Deposit By Gov | 11098991 | 1985 days ago | IN | 0 ETH | 0.00621755 | ||||
| Withdraw By Gov | 11098987 | 1985 days ago | IN | 0 ETH | 0.00464808 | ||||
| Set Pool Preferr... | 11098959 | 1985 days ago | IN | 0 ETH | 0.00178934 | ||||
| Set Pool Preferr... | 11084977 | 1987 days ago | IN | 0 ETH | 0.00130134 | ||||
| Set Pool Preferr... | 11079171 | 1988 days ago | IN | 0 ETH | 0.0009422 | ||||
| Set Total Balanc... | 11079171 | 1988 days ago | IN | 0 ETH | 0.00057542 | ||||
| Set Pool Balance | 11079171 | 1988 days ago | IN | 0 ETH | 0.00058044 | ||||
| Set Pool Balance | 11079146 | 1988 days ago | IN | 0 ETH | 0.00088314 | ||||
| Deposit By Gov | 11079137 | 1988 days ago | IN | 0 ETH | 0.00318614 | ||||
| Deposit By Gov | 11079110 | 1988 days ago | IN | 0 ETH | 0.00340599 | ||||
| Withdraw By Gov | 11079103 | 1988 days ago | IN | 0 ETH | 0.00625727 | ||||
| Set Pool Info | 11079069 | 1988 days ago | IN | 0 ETH | 0.00387303 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Univ2ETHUSDCMultiPoolStrategy
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2020-10-18
*/
// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
interface IStrategyV2 {
function approve(IERC20 _token) external;
function approveForSpender(IERC20 _token, address spender) external;
// Deposit tokens to a farm to yield more tokens.
function deposit(uint256 _poolId, uint256 _amount) external;
// Claim farming tokens
function claim(uint256 _poolId) external;
// The vault request to harvest the profit
function harvest(uint256 _bankPoolId, uint256 _poolId) external;
// Withdraw the principal from a farm.
function withdraw(uint256 _poolId, uint256 _amount) external;
// Set 0 to disable quota (no limit)
function poolQuota(uint256 _poolId) external view returns (uint256);
// Use when we want to switch between strategies
function forwardToAnotherStrategy(address _dest, uint256 _amount) external returns (uint256);
// Source LP token of this strategy
function getLpToken() external view returns(address);
// Target farming token of this strategy by vault
function getTargetToken(uint256 _poolId) external view returns(address);
function balanceOf(uint256 _poolId) external view returns (uint256);
function pendingReward(uint256 _poolId) external view returns (uint256);
// Helper function, Should never use it on-chain.
// Return 1e18x of APY. _lpPairUsdcPrice = current lpPair price (1-wei in USDC-wei) multiple by 1e18
function expectedAPY(uint256 _poolId, uint256 _lpPairUsdcPrice) external view returns (uint256);
function governanceRescueToken(IERC20 _token) external returns (uint256);
}
/*
* Here we have a list of constants. In order to get access to an address
* managed by ValueVaultMaster, the calling contract should copy and define
* some of these constants and use them as keys.
* Keys themselves are immutable. Addresses can be immutable or mutable.
*
* Vault addresses are immutable once set, and the list may grow:
* K_VAULT_WETH = 0;
* K_VAULT_ETH_USDC_UNI_V2_LP = 1;
* K_VAULT_ETH_WBTC_UNI_V2_LP = 2;
*
* Strategy addresses are mutable:
* K_STRATEGY_WETH_SODA_POOL = 0;
* K_STRATEGY_WETH_MULTI_POOL = 1;
* K_STRATEGY_ETHUSDC_MULTIPOOL = 100;
* K_STRATEGY_ETHWBTC_MULTIPOOL = 200;
*/
/*
* ValueVaultMaster manages all the vaults and strategies of our Value Vaults system.
*/
contract ValueVaultMaster {
address public governance;
address public bank;
address public minorPool;
address public profitSharer;
address public govToken; // VALUE
address public yfv; // When harvesting, convert some parts to YFV for govVault
address public usdc; // we only used USDC to estimate APY
address public govVault; // YFV -> VALUE, vUSD, vETH and 6.7% profit from Value Vaults
address public insuranceFund = 0xb7b2Ea8A1198368f950834875047aA7294A2bDAa; // set to Governance Multisig at start
address public performanceReward = 0x7Be4D5A99c903C437EC77A20CB6d0688cBB73c7f; // set to deploy wallet at start
uint256 public constant FEE_DENOMINATOR = 10000;
uint256 public govVaultProfitShareFee = 670; // 6.7% | VIP-1 (https://yfv.finance/vip-vote/vip_1)
uint256 public gasFee = 50; // 0.5% at start and can be set by governance decision
uint256 public minStakeTimeToClaimVaultReward = 24 hours;
mapping(address => bool) public isVault;
mapping(uint256 => address) public vaultByKey;
mapping(address => bool) public isStrategy;
mapping(uint256 => address) public strategyByKey;
mapping(address => uint256) public strategyQuota;
constructor(address _govToken, address _yfv, address _usdc) public {
govToken = _govToken;
yfv = _yfv;
usdc = _usdc;
governance = tx.origin;
}
function setGovernance(address _governance) external {
require(msg.sender == governance, "!governance");
governance = _governance;
}
// Immutable once set.
function setBank(address _bank) external {
require(msg.sender == governance, "!governance");
require(bank == address(0));
bank = _bank;
}
// Mutable in case we want to upgrade the pool.
function setMinorPool(address _minorPool) external {
require(msg.sender == governance, "!governance");
minorPool = _minorPool;
}
// Mutable in case we want to upgrade this module.
function setProfitSharer(address _profitSharer) external {
require(msg.sender == governance, "!governance");
profitSharer = _profitSharer;
}
// Mutable, in case governance want to upgrade VALUE to new version
function setGovToken(address _govToken) external {
require(msg.sender == governance, "!governance");
govToken = _govToken;
}
// Immutable once added, and you can always add more.
function addVault(uint256 _key, address _vault) external {
require(msg.sender == governance, "!governance");
require(vaultByKey[_key] == address(0), "vault: key is taken");
isVault[_vault] = true;
vaultByKey[_key] = _vault;
}
// Mutable and removable.
function addStrategy(uint256 _key, address _strategy) external {
require(msg.sender == governance, "!governance");
isStrategy[_strategy] = true;
strategyByKey[_key] = _strategy;
}
// Set 0 to disable quota (no limit)
function setStrategyQuota(address _strategy, uint256 _quota) external {
require(msg.sender == governance, "!governance");
strategyQuota[_strategy] = _quota;
}
function removeStrategy(uint256 _key) external {
require(msg.sender == governance, "!governance");
isStrategy[strategyByKey[_key]] = false;
delete strategyByKey[_key];
}
function setGovVault(address _govVault) public {
require(msg.sender == governance, "!governance");
govVault = _govVault;
}
function setInsuranceFund(address _insuranceFund) public {
require(msg.sender == governance, "!governance");
insuranceFund = _insuranceFund;
}
function setPerformanceReward(address _performanceReward) public{
require(msg.sender == governance, "!governance");
performanceReward = _performanceReward;
}
function setGovVaultProfitShareFee(uint256 _govVaultProfitShareFee) public {
require(msg.sender == governance, "!governance");
govVaultProfitShareFee = _govVaultProfitShareFee;
}
function setGasFee(uint256 _gasFee) public {
require(msg.sender == governance, "!governance");
gasFee = _gasFee;
}
function setMinStakeTimeToClaimVaultReward(uint256 _minStakeTimeToClaimVaultReward) public {
require(msg.sender == governance, "!governance");
minStakeTimeToClaimVaultReward = _minStakeTimeToClaimVaultReward;
}
/**
* This function allows governance to take unsupported tokens out of the contract.
* This is in an effort to make someone whole, should they seriously mess up.
* There is no guarantee governance will vote to return these.
* It also allows for removal of airdropped tokens.
*/
function governanceRecoverUnsupported(IERC20x _token, uint256 amount, address to) external {
require(msg.sender == governance, "!governance");
_token.transfer(to, amount);
}
}
interface IERC20x {
function transfer(address recipient, uint256 amount) external returns (bool);
}
interface IOneSplit {
function getExpectedReturn(
IERC20 fromToken,
IERC20 destToken,
uint256 amount,
uint256 parts,
uint256 flags // See constants in IOneSplit.sol
) external view returns(
uint256 returnAmount,
uint256[] memory distribution
);
}
interface IUniswapRouter {
function swapExactTokensForTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
}
interface IValueLiquidPool {
function swapExactAmountIn(address, uint, address, uint, uint) external returns (uint, uint);
function swapExactAmountOut(address, uint, address, uint, uint) external returns (uint, uint);
function calcInGivenOut(uint, uint, uint, uint, uint, uint) external pure returns (uint);
function calcOutGivenIn(uint, uint, uint, uint, uint, uint) external pure returns (uint);
function getDenormalizedWeight(address) external view returns (uint);
function getBalance(address) external view returns (uint);
function swapFee() external view returns (uint);
}
interface IStakingRewards {
function lastTimeRewardApplicable() external view returns (uint256);
function rewardPerToken() external view returns (uint256);
function rewardRate() external view returns (uint256);
function earned(address account) external view returns (uint256);
function getRewardForDuration() external view returns (uint256);
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function stake(uint256 amount) external;
function withdraw(uint256 amount) external;
function getReward() external;
function exit() external;
}
interface ISushiPool {
function deposit(uint256 _poolId, uint256 _amount) external;
function claim(uint256 _poolId) external;
function withdraw(uint256 _poolId, uint256 _amount) external;
function emergencyWithdraw(uint256 _poolId) external;
}
interface IProfitSharer {
function shareProfit() external returns (uint256);
}
interface IValueVaultBank {
function make_profit(uint256 _poolId, uint256 _amount) external;
}
// Deposit UNIv2ETHUSDC to a standard StakingRewards pool (eg. UNI Pool - https://app.uniswap.org/#/uni)
// Wait for Vault commands: deposit, withdraw, claim, harvest (can be called by public via Vault)
contract Univ2ETHUSDCMultiPoolStrategy is IStrategyV2 {
using SafeMath for uint256;
address public strategist;
address public governance;
uint256 public constant FEE_DENOMINATOR = 10000;
IERC20 public weth = IERC20(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2);
IOneSplit public onesplit = IOneSplit(0x50FDA034C0Ce7a8f7EFDAebDA7Aa7cA21CC1267e);
IUniswapRouter public unirouter = IUniswapRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
ValueVaultMaster public valueVaultMaster;
IERC20 public lpPair; // ETHUSDC_UNIv2
IERC20 public lpPairTokenA; // USDC
IERC20 public lpPairTokenB; // For this contract it will be always be WETH
mapping(address => mapping(address => address[])) public uniswapPaths; // [input -> output] => uniswap_path
mapping(address => mapping(address => address)) public liquidPools; // [input -> output] => value_liquid_pool (valueliquid.io)
struct PoolInfo {
address vault;
IERC20 targetToken;
address targetPool;
uint256 targetPoolId; // poolId in soda/chicken pool (no use for IStakingRewards pool eg. golff.finance)
uint256 minHarvestForTakeProfit;
uint8 poolType; // 0: IStakingRewards, 1: ISushiPool, 2: ISodaPool
uint256 poolQuota; // set 0 to disable quota (no limit)
uint256 balance;
}
mapping(uint256 => PoolInfo) public poolMap; // poolIndex -> poolInfo
uint256 public totalBalance;
bool public aggressiveMode; // will try to stake all lpPair tokens available (be forwarded from bank or from another strategies)
uint8[] public poolPreferredIds; // sorted by preference
// lpPair: ETHUSDC_UNIv2 = 0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc
// lpPairTokenA: USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
// lpPairTokenB: WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
constructor(ValueVaultMaster _valueVaultMaster,
IERC20 _lpPair,
IERC20 _lpPairTokenA,
IERC20 _lpPairTokenB,
bool _aggressiveMode) public {
valueVaultMaster = _valueVaultMaster;
lpPair = _lpPair;
lpPairTokenA = _lpPairTokenA;
lpPairTokenB = _lpPairTokenB;
aggressiveMode = _aggressiveMode;
governance = tx.origin;
strategist = tx.origin;
// Approve all
lpPair.approve(valueVaultMaster.bank(), type(uint256).max);
lpPairTokenA.approve(address(unirouter), type(uint256).max);
lpPairTokenB.approve(address(unirouter), type(uint256).max);
}
// [0] targetToken: uniToken = 0x1f9840a85d5af5bf1d1762f925bdaddc4201f984
// targetPool: ETHUSDCUniPool = 0x7fba4b8dc5e7616e59622806932dbea72537a56b
// [1] targetToken: draculaToken = 0xb78B3320493a4EFaa1028130C5Ba26f0B6085Ef8
// targetPool: MasterVampire[32] = 0xD12d68Fd52b54908547ebC2Cd77Ec6EbbEfd3099
// targetPoolId = 32
function setPoolInfo(uint256 _poolId, address _vault, IERC20 _targetToken, address _targetPool, uint256 _targetPoolId, uint256 _minHarvestForTakeProfit, uint8 _poolType, uint256 _poolQuota) external {
require(msg.sender == governance, "!governance");
poolMap[_poolId].vault = _vault;
poolMap[_poolId].targetToken = _targetToken;
poolMap[_poolId].targetPool = _targetPool;
poolMap[_poolId].targetPoolId = _targetPoolId;
poolMap[_poolId].minHarvestForTakeProfit = _minHarvestForTakeProfit;
poolMap[_poolId].poolType = _poolType;
poolMap[_poolId].poolQuota = _poolQuota;
_targetToken.approve(address(unirouter), type(uint256).max);
lpPair.approve(_vault, type(uint256).max);
lpPair.approve(address(_targetPool), type(uint256).max);
}
function approve(IERC20 _token) external override {
require(msg.sender == governance, "!governance");
_token.approve(valueVaultMaster.bank(), type(uint256).max);
_token.approve(address(unirouter), type(uint256).max);
}
function approveForSpender(IERC20 _token, address spender) external override {
require(msg.sender == governance, "!governance");
_token.approve(spender, type(uint256).max);
}
function setGovernance(address _governance) external {
require(msg.sender == governance, "!governance");
governance = _governance;
}
function setStrategist(address _strategist) external {
require(msg.sender == governance || msg.sender == strategist, "!governance && !strategist");
strategist = _strategist;
}
function setPoolPreferredIds(uint8[] memory _poolPreferredIds) public {
require(msg.sender == governance || msg.sender == strategist, "!governance && !strategist");
delete poolPreferredIds;
for (uint8 i = 0; i < _poolPreferredIds.length; ++i) {
poolPreferredIds.push(_poolPreferredIds[i]);
}
}
function setMinHarvestForTakeProfit(uint256 _poolId, uint256 _minHarvestForTakeProfit) external {
require(msg.sender == governance || msg.sender == strategist, "!governance && !strategist");
poolMap[_poolId].minHarvestForTakeProfit = _minHarvestForTakeProfit;
}
function setPoolQuota(uint256 _poolId, uint256 _poolQuota) external {
require(msg.sender == governance || msg.sender == strategist, "!governance && !strategist");
poolMap[_poolId].poolQuota = _poolQuota;
}
// Sometime the balance could be slightly changed (due to the pool, or because we call xxxByGov methods)
function setPoolBalance(uint256 _poolId, uint256 _balance) external {
require(msg.sender == governance || msg.sender == strategist, "!governance && !strategist");
poolMap[_poolId].balance = _balance;
}
function setTotalBalance(uint256 _totalBalance) external {
require(msg.sender == governance || msg.sender == strategist, "!governance && !strategist");
totalBalance = _totalBalance;
}
function setAggressiveMode(bool _aggressiveMode) external {
require(msg.sender == governance || msg.sender == strategist, "!governance && !strategist");
aggressiveMode = _aggressiveMode;
}
function setWETH(IERC20 _weth) external {
require(msg.sender == governance || msg.sender == strategist, "!governance && !strategist");
weth = _weth;
}
function setOnesplit(IOneSplit _onesplit) external {
require(msg.sender == governance || msg.sender == strategist, "!governance && !strategist");
onesplit = _onesplit;
}
function setUnirouter(IUniswapRouter _unirouter) external {
require(msg.sender == governance || msg.sender == strategist, "!governance && !strategist");
unirouter = _unirouter;
lpPairTokenA.approve(address(unirouter), type(uint256).max);
lpPairTokenB.approve(address(unirouter), type(uint256).max);
}
/**
* @dev See {IStrategyV2-deposit}.
*/
function deposit(uint256 _poolId, uint256 _amount) public override {
PoolInfo storage pool = poolMap[_poolId];
require(pool.vault == msg.sender, "sender not vault");
if (aggressiveMode) {
_amount = lpPair.balanceOf(address(this));
}
if (pool.poolType == 0) {
IStakingRewards(pool.targetPool).stake(_amount);
} else {
ISushiPool(pool.targetPool).deposit(pool.targetPoolId, _amount);
}
pool.balance = pool.balance.add(_amount);
totalBalance = totalBalance.add(_amount);
}
/**
* @dev See {IStrategyV2-claim}.
*/
function claim(uint256 _poolId) external override {
require(poolMap[_poolId].vault == msg.sender, "sender not vault");
_claim(_poolId);
}
function _claim(uint256 _poolId) internal {
PoolInfo storage pool = poolMap[_poolId];
if (pool.poolType == 0) {
IStakingRewards(pool.targetPool).getReward();
} else if (pool.poolType == 1) {
ISushiPool(pool.targetPool).deposit(pool.targetPoolId, 0);
} else {
ISushiPool(pool.targetPool).claim(pool.targetPoolId);
}
}
/**
* @dev See {IStrategyV2-withdraw}.
*/
function withdraw(uint256 _poolId, uint256 _amount) external override {
PoolInfo storage pool = poolMap[_poolId];
require(pool.vault == msg.sender, "sender not vault");
if (pool.poolType == 0) {
IStakingRewards(pool.targetPool).withdraw(_amount);
} else {
ISushiPool(pool.targetPool).withdraw(pool.targetPoolId, _amount);
}
if (pool.balance < _amount) {
_amount = pool.balance;
}
pool.balance = pool.balance - _amount;
if (totalBalance >= _amount) totalBalance = totalBalance - _amount;
}
function depositByGov(address pool, uint8 _poolType, uint256 _targetPoolId, uint256 _amount) external {
require(msg.sender == governance || msg.sender == strategist, "!governance && !strategist");
if (_poolType == 0) {
IStakingRewards(pool).stake(_amount);
} else {
ISushiPool(pool).deposit(_targetPoolId, _amount);
}
}
function claimByGov(address pool, uint8 _poolType, uint256 _targetPoolId) external {
require(msg.sender == governance || msg.sender == strategist, "!governance && !strategist");
if (_poolType == 0) {
IStakingRewards(pool).getReward();
} else if (_poolType == 1) {
ISushiPool(pool).deposit(_targetPoolId, 0);
} else {
ISushiPool(pool).claim(_targetPoolId);
}
}
function withdrawByGov(address pool, uint8 _poolType, uint256 _targetPoolId, uint256 _amount) external {
require(msg.sender == governance || msg.sender == strategist, "!governance && !strategist");
if (_poolType == 0) {
IStakingRewards(pool).withdraw(_amount);
} else {
ISushiPool(pool).withdraw(_targetPoolId, _amount);
}
}
function emergencyWithdrawByGov(address pool, uint256 _targetPoolId) external {
require(msg.sender == governance || msg.sender == strategist, "!governance && !strategist");
ISushiPool(pool).emergencyWithdraw(_targetPoolId);
}
/**
* @dev See {IStrategyV2-poolQuota}.
*/
function poolQuota(uint256 _poolId) external override view returns (uint256) {
return poolMap[_poolId].poolQuota;
}
function forwardToAnotherStrategy(address _dest, uint256 _amount) external override returns (uint256 sent) {
require(valueVaultMaster.isVault(msg.sender), "not vault");
require(valueVaultMaster.isStrategy(_dest), "not strategy");
require(IStrategyV2(_dest).getLpToken() == address(lpPair), "!lpPair");
uint256 lpPairBal = lpPair.balanceOf(address(this));
sent = (_amount < lpPairBal) ? _amount : lpPairBal;
lpPair.transfer(_dest, sent);
}
function setUnirouterPath(address _input, address _output, address [] memory _path) public {
require(msg.sender == governance || msg.sender == strategist, "!governance && !strategist");
uniswapPaths[_input][_output] = _path;
}
function setLiquidPool(address _input, address _output, address _pool) public {
require(msg.sender == governance || msg.sender == strategist, "!governance && !strategist");
liquidPools[_input][_output] = _pool;
IERC20(_input).approve(_pool, type(uint256).max);
}
function _swapTokens(address _input, address _output, uint256 _amount) internal {
address _pool = liquidPools[_input][_output];
if (_pool != address(0)) { // use ValueLiquid
// swapExactAmountIn(tokenIn, tokenAmountIn, tokenOut, minAmountOut, maxPrice)
IValueLiquidPool(_pool).swapExactAmountIn(_input, _amount, _output, 1, type(uint256).max);
} else { // use Uniswap
address[] memory path = uniswapPaths[_input][_output];
if (path.length == 0) {
// path: _input -> _output
path = new address[](2);
path[0] = _input;
path[1] = _output;
}
// swapExactTokensForTokens(amountIn, amountOutMin, path, to, deadline)
unirouter.swapExactTokensForTokens(_amount, 1, path, address(this), now.add(1800));
}
}
function _addLiquidity() internal {
// addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin, to, deadline)
unirouter.addLiquidity(address(lpPairTokenA), address(lpPairTokenB), lpPairTokenA.balanceOf(address(this)), lpPairTokenB.balanceOf(address(this)), 1, 1, address(this), now.add(1800));
}
/**
* @dev See {IStrategyV2-harvest}.
*/
function harvest(uint256 _bankPoolId, uint256 _poolId) external override {
address bank = valueVaultMaster.bank();
address _vault = msg.sender;
require(valueVaultMaster.isVault(_vault), "!vault"); // additional protection so we don't burn the funds
PoolInfo storage pool = poolMap[_poolId];
_claim(_poolId);
IERC20 targetToken = pool.targetToken;
uint256 targetTokenBal = targetToken.balanceOf(address(this));
if (targetTokenBal < pool.minHarvestForTakeProfit) return;
_swapTokens(address(targetToken), address(weth), targetTokenBal);
uint256 wethBal = weth.balanceOf(address(this));
if (wethBal > 0) {
uint256 _reserved = 0;
uint256 _gasFee = 0;
uint256 _govVaultProfitShareFee = 0;
if (valueVaultMaster.gasFee() > 0) {
_gasFee = wethBal.mul(valueVaultMaster.gasFee()).div(FEE_DENOMINATOR);
_reserved = _reserved.add(_gasFee);
}
if (valueVaultMaster.govVaultProfitShareFee() > 0) {
_govVaultProfitShareFee = wethBal.mul(valueVaultMaster.govVaultProfitShareFee()).div(FEE_DENOMINATOR);
_reserved = _reserved.add(_govVaultProfitShareFee);
}
uint256 wethToBuyTokenA = wethBal.sub(_reserved).div(2); // we have TokenB (WETH) already, so use 1/2 bal to buy TokenA (USDC)
_swapTokens(address(weth), address(lpPairTokenA), wethToBuyTokenA);
_addLiquidity();
wethBal = weth.balanceOf(address(this));
{
address profitSharer = valueVaultMaster.profitSharer();
address performanceReward = valueVaultMaster.performanceReward();
if (_gasFee > 0 && performanceReward != address(0)) {
if (_gasFee.add(_govVaultProfitShareFee) < wethBal) {
_gasFee = wethBal.sub(_govVaultProfitShareFee);
}
weth.transfer(performanceReward, _gasFee);
wethBal = weth.balanceOf(address(this));
}
if (_govVaultProfitShareFee > 0 && profitSharer != address(0)) {
address govToken = valueVaultMaster.govToken();
_swapTokens(address(weth), govToken, wethBal);
IERC20(govToken).transfer(profitSharer, IERC20(govToken).balanceOf(address(this)));
IProfitSharer(profitSharer).shareProfit();
}
}
uint256 balanceLeft = lpPair.balanceOf(address(this));
if (balanceLeft > 0) {
if (_bankPoolId == type(uint256).max) {
// this called by governance of vault, send directly to bank (dont make profit)
lpPair.transfer(bank, balanceLeft);
} else {
if (lpPair.allowance(address(this), bank) < balanceLeft) {
lpPair.approve(bank, 0);
lpPair.approve(bank, balanceLeft);
}
IValueVaultBank(bank).make_profit(_bankPoolId, balanceLeft);
}
}
}
}
/**
* @dev See {IStrategyV2-getLpToken}.
*/
function getLpToken() external view override returns(address) {
return address(lpPair);
}
/**
* @dev See {IStrategyV2-getTargetToken}.
*/
function getTargetToken(uint256 _poolId) external override view returns(address) {
return address(poolMap[_poolId].targetToken);
}
function balanceOf(uint256 _poolId) public override view returns (uint256) {
return poolMap[_poolId].balance;
}
// Only support IStakingRewards pool
function pendingReward(uint256 _poolId) public override view returns (uint256) {
if (poolMap[_poolId].poolType != 0) return 0; // do not support other pool types
return IStakingRewards(poolMap[_poolId].targetPool).earned(address(this));
}
// Helper function, Should never use it on-chain.
// Return 1e18x of APY. _lpPairUsdcPrice = current lpPair price (1-wei in USDC-wei) multiple by 1e18
function expectedAPY(uint256, uint256) public override view returns (uint256) {
return 0; // not implemented
}
/**
* @dev if there is any token stuck we will need governance support to rescue the fund
*/
function governanceRescueToken(IERC20 _token) external override returns (uint256 balance) {
address bank = valueVaultMaster.bank();
require(bank == msg.sender, "sender not bank");
balance = _token.balanceOf(address(this));
_token.transfer(bank, balance);
}
event ExecuteTransaction(address indexed target, uint value, string signature, bytes data);
function executeTransaction(address target, uint value, string memory signature, bytes memory data) public returns (bytes memory) {
require(msg.sender == governance, "!governance");
bytes memory callData;
if (bytes(signature).length == 0) {
callData = data;
} else {
callData = abi.encodePacked(bytes4(keccak256(bytes(signature))), data);
}
// solium-disable-next-line security/no-call-value
(bool success, bytes memory returnData) = target.call{value: value}(callData);
require(success, "Univ2ETHUSDCMultiPoolStrategy::executeTransaction: Transaction execution reverted.");
emit ExecuteTransaction(target, value, signature, data);
return returnData;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract ValueVaultMaster","name":"_valueVaultMaster","type":"address"},{"internalType":"contract IERC20","name":"_lpPair","type":"address"},{"internalType":"contract IERC20","name":"_lpPairTokenA","type":"address"},{"internalType":"contract IERC20","name":"_lpPairTokenB","type":"address"},{"internalType":"bool","name":"_aggressiveMode","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"signature","type":"string"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"ExecuteTransaction","type":"event"},{"inputs":[],"name":"FEE_DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"aggressiveMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"approveForSpender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint8","name":"_poolType","type":"uint8"},{"internalType":"uint256","name":"_targetPoolId","type":"uint256"}],"name":"claimByGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint8","name":"_poolType","type":"uint8"},{"internalType":"uint256","name":"_targetPoolId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"depositByGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"_targetPoolId","type":"uint256"}],"name":"emergencyWithdrawByGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"signature","type":"string"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"executeTransaction","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"expectedAPY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_dest","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"forwardToAnotherStrategy","outputs":[{"internalType":"uint256","name":"sent","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getLpToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"}],"name":"getTargetToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"}],"name":"governanceRescueToken","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bankPoolId","type":"uint256"},{"internalType":"uint256","name":"_poolId","type":"uint256"}],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"liquidPools","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPairTokenA","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPairTokenB","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onesplit","outputs":[{"internalType":"contract IOneSplit","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"}],"name":"pendingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolMap","outputs":[{"internalType":"address","name":"vault","type":"address"},{"internalType":"contract IERC20","name":"targetToken","type":"address"},{"internalType":"address","name":"targetPool","type":"address"},{"internalType":"uint256","name":"targetPoolId","type":"uint256"},{"internalType":"uint256","name":"minHarvestForTakeProfit","type":"uint256"},{"internalType":"uint8","name":"poolType","type":"uint8"},{"internalType":"uint256","name":"poolQuota","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolPreferredIds","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"}],"name":"poolQuota","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_aggressiveMode","type":"bool"}],"name":"setAggressiveMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_governance","type":"address"}],"name":"setGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_input","type":"address"},{"internalType":"address","name":"_output","type":"address"},{"internalType":"address","name":"_pool","type":"address"}],"name":"setLiquidPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"},{"internalType":"uint256","name":"_minHarvestForTakeProfit","type":"uint256"}],"name":"setMinHarvestForTakeProfit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IOneSplit","name":"_onesplit","type":"address"}],"name":"setOnesplit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"},{"internalType":"uint256","name":"_balance","type":"uint256"}],"name":"setPoolBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"},{"internalType":"address","name":"_vault","type":"address"},{"internalType":"contract IERC20","name":"_targetToken","type":"address"},{"internalType":"address","name":"_targetPool","type":"address"},{"internalType":"uint256","name":"_targetPoolId","type":"uint256"},{"internalType":"uint256","name":"_minHarvestForTakeProfit","type":"uint256"},{"internalType":"uint8","name":"_poolType","type":"uint8"},{"internalType":"uint256","name":"_poolQuota","type":"uint256"}],"name":"setPoolInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8[]","name":"_poolPreferredIds","type":"uint8[]"}],"name":"setPoolPreferredIds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"},{"internalType":"uint256","name":"_poolQuota","type":"uint256"}],"name":"setPoolQuota","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_strategist","type":"address"}],"name":"setStrategist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_totalBalance","type":"uint256"}],"name":"setTotalBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IUniswapRouter","name":"_unirouter","type":"address"}],"name":"setUnirouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_input","type":"address"},{"internalType":"address","name":"_output","type":"address"},{"internalType":"address[]","name":"_path","type":"address[]"}],"name":"setUnirouterPath","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_weth","type":"address"}],"name":"setWETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"strategist","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unirouter","outputs":[{"internalType":"contract IUniswapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"uniswapPaths","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"valueVaultMaster","outputs":[{"internalType":"contract ValueVaultMaster","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint8","name":"_poolType","type":"uint8"},{"internalType":"uint256","name":"_targetPoolId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawByGov","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
6080604052600280546001600160a01b031990811673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2179091556003805482167350fda034c0ce7a8f7efdaebda7aa7ca21cc1267e17905560048054909116737a250d5630b4cf539739df2c5dacb4c659f2488d1790553480156200007757600080fd5b50604051620045d4380380620045d4833981810160405260a08110156200009d57600080fd5b5080516020808301516040808501516060860151608090960151600580546001600160a01b03199081166001600160a01b03808a1691909117928390556006805483168289161790819055600780548416838816179055600880548416838d16179055600d805460ff191686151517905560018054329085168117909155600080549094161790925585516376cdb03b60e01b8152955198999698949793959181169463095ea7b39493909116926376cdb03b9260048181019391829003018186803b1580156200016d57600080fd5b505afa15801562000182573d6000803e3d6000fd5b505050506040513d60208110156200019957600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b03909216600483015260001960248301525160448083019260209291908290030181600087803b158015620001eb57600080fd5b505af115801562000200573d6000803e3d6000fd5b505050506040513d60208110156200021757600080fd5b5050600754600480546040805163095ea7b360e01b81526001600160a01b039283169381019390935260001960248401525192169163095ea7b3916044808201926020929091908290030181600087803b1580156200027557600080fd5b505af11580156200028a573d6000803e3d6000fd5b505050506040513d6020811015620002a157600080fd5b5050600854600480546040805163095ea7b360e01b81526001600160a01b039283169381019390935260001960248401525192169163095ea7b3916044808201926020929091908290030181600087803b158015620002ff57600080fd5b505af115801562000314573d6000803e3d6000fd5b505050506040513d60208110156200032b57600080fd5b5050505050505061429280620003426000396000f3fe608060405234801561001057600080fd5b50600436106102bb5760003560e01c8063692c2f9011610182578063c7b9d530116100e9578063daea85c5116100a2578063f2faa1b91161007c578063f2faa1b914610b12578063f712adbb14610b82578063fb529b3314610b8a578063fd5ce85114610be2576102bb565b8063daea85c514610aa6578063e2bbb15814610acc578063e4a4b7b114610aef576102bb565b8063c7b9d530146109d4578063c9ed5008146109fa578063d374eb2714610a17578063d73792a914610a43578063d78683b914610a4b578063d92f3d7314610a80576102bb565b8063a06824271161013b578063a06824271461092b578063a22a33b714610951578063ab033ea91461097f578063ad7a672f146109a5578063ae511bf3146109ad578063be4ea1e4146109b5576102bb565b8063692c2f9014610886578063696513f01461088e57806372bf2ac4146108ab5780638214f5a4146108e357806389fa2b70146108eb5780639cc7f7081461090e576102bb565b80633fc8cef3116102265780635a677b7e116101df5780635a677b7e146107c45780635aa6e675146107e75780635b769f3c146107ef5780635c788211146108155780635fa6e5ef1461084357806367ad20fd14610869576102bb565b80633fc8cef31461071857806340e7e57114610720578063441a3e7014610743578063442dd5e714610766578063452ed4f114610789578063460247a614610791576102bb565b806320ffb4531161027857806320ffb453146104945780632224fa25146104cf578063257ae0de14610682578063359a3f731461068a57806335e94268146106c5578063379607f5146106fb576102bb565b806303da1b32146102c0578063115cce2b1461036357806312f7086c1461041d5780631c727de81461044c5780631fe4a686146104705780632088a7fa14610478575b600080fd5b610361600480360360208110156102d657600080fd5b810190602081018135600160201b8111156102f057600080fd5b82018360208201111561030257600080fd5b803590602001918460208302840111600160201b8311171561032357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610c0e945050505050565b005b6103616004803603606081101561037957600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b8111156103ac57600080fd5b8201836020820111156103be57600080fd5b803590602001918460208302840111600160201b831117156103df57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610ce8945050505050565b61043a6004803603602081101561043357600080fd5b5035610d85565b60408051918252519081900360200190f35b610454610e31565b604080516001600160a01b039092168252519081900360200190f35b610454610e40565b610480610e4f565b604080519115158252519081900360200190f35b610361600480360360808110156104aa57600080fd5b506001600160a01b038135169060ff6020820135169060408101359060600135610e58565b61060d600480360360808110156104e557600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561051457600080fd5b82018360208201111561052657600080fd5b803590602001918460018302840111600160201b8311171561054757600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561059957600080fd5b8201836020820111156105ab57600080fd5b803590602001918460018302840111600160201b831117156105cc57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610f91945050505050565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561064757818101518382015260200161062f565b50505050905090810190601f1680156106745780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61045461127b565b610361600480360360808110156106a057600080fd5b506001600160a01b038135169060ff602082013516906040810135906060013561128a565b610454600480360360608110156106db57600080fd5b506001600160a01b03813581169160208101359091169060400135611388565b6103616004803603602081101561071157600080fd5b50356113ca565b610454611434565b6103616004803603604081101561073657600080fd5b5080359060200135611443565b6103616004803603604081101561075957600080fd5b50803590602001356114ba565b6103616004803603604081101561077c57600080fd5b508035906020013561163c565b6104546116b3565b6107ae600480360360208110156107a757600080fd5b50356116c2565b6040805160ff9092168252519081900360200190f35b61043a600480360360408110156107da57600080fd5b50803590602001356116f3565b6104546116fc565b6103616004803603602081101561080557600080fd5b50356001600160a01b031661170b565b6104546004803603604081101561082b57600080fd5b506001600160a01b038135811691602001351661178f565b6103616004803603602081101561085957600080fd5b50356001600160a01b03166117b5565b6104546004803603602081101561087f57600080fd5b5035611839565b610454611857565b61043a600480360360208110156108a457600080fd5b5035611866565b610361600480360360608110156108c157600080fd5b506001600160a01b03813581169160208101358216916040909101351661187b565b61045461198b565b6103616004803603604081101561090157600080fd5b508035906020013561199a565b61043a6004803603602081101561092457600080fd5b5035611a11565b61043a6004803603602081101561094157600080fd5b50356001600160a01b0316611a26565b6103616004803603604081101561096757600080fd5b506001600160a01b0381358116916020013516611bef565b6103616004803603602081101561099557600080fd5b50356001600160a01b0316611cbf565b61043a611d2e565b610454611d34565b610361600480360360208110156109cb57600080fd5b50351515611d43565b610361600480360360208110156109ea57600080fd5b50356001600160a01b0316611db8565b61036160048036036020811015610a1057600080fd5b5035611e3c565b61043a60048036036040811015610a2d57600080fd5b506001600160a01b038135169060200135611ea3565b61043a6121dc565b61036160048036036060811015610a6157600080fd5b506001600160a01b038135169060ff60208201351690604001356121e2565b61036160048036036020811015610a9657600080fd5b50356001600160a01b0316612360565b61036160048036036020811015610abc57600080fd5b50356001600160a01b03166124e5565b61036160048036036040811015610ae257600080fd5b508035906020013561268e565b61036160048036036040811015610b0557600080fd5b5080359060200135612887565b610b2f60048036036020811015610b2857600080fd5b5035613501565b604080516001600160a01b03998a168152978916602089015295909716868601526060860193909352608085019190915260ff1660a084015260c083015260e08201929092529051908190036101000190f35b610454613556565b6103616004803603610100811015610ba157600080fd5b508035906001600160a01b03602082013581169160408101358216916060820135169060808101359060a08101359060ff60c0820135169060e00135613565565b61036160048036036040811015610bf857600080fd5b506001600160a01b0381351690602001356137b1565b6001546001600160a01b0316331480610c3157506000546001600160a01b031633145b610c70576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b610c7c600e600061410b565b60005b81518160ff161015610ce457600e828260ff1681518110610c9c57fe5b602090810291909101810151825460018181018555600094855293839020928104909201805460ff928316601f9094166101000a938402929093021990921617905501610c7f565b5050565b6001546001600160a01b0316331480610d0b57506000546001600160a01b031633145b610d4a576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b6001600160a01b03808416600090815260096020908152604080832093861683529281529190208251610d7f92840190614130565b50505050565b6000818152600b602052604081206005015460ff1615610da757506000610e2c565b6000828152600b60209081526040918290206002015482516246613160e11b815230600482015292516001600160a01b0390911692628cc262926024808301939192829003018186803b158015610dfd57600080fd5b505afa158015610e11573d6000803e3d6000fd5b505050506040513d6020811015610e2757600080fd5b505190505b919050565b6005546001600160a01b031681565b6000546001600160a01b031681565b600d5460ff1681565b6001546001600160a01b0316331480610e7b57506000546001600160a01b031633145b610eba576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b60ff8316610f2557836001600160a01b031663a694fc3a826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f0857600080fd5b505af1158015610f1c573d6000803e3d6000fd5b50505050610d7f565b836001600160a01b031663e2bbb15883836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015610f7357600080fd5b505af1158015610f87573d6000803e3d6000fd5b5050505050505050565b6001546060906001600160a01b03163314610fe1576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b6060835160001415610ff4575081611077565b83805190602001208360405160200180836001600160e01b031916815260040182805190602001908083835b6020831061103f5780518252601f199092019160209182019101611020565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405290505b60006060876001600160a01b031687846040518082805190602001908083835b602083106110b65780518252601f199092019160209182019101611097565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611118576040519150601f19603f3d011682016040523d82523d6000602084013e61111d565b606091505b50915091508161115e5760405162461bcd60e51b81526004018080602001828103825260528152602001806141ca6052913960600191505060405180910390fd5b876001600160a01b03167f88405ca50016c636e025868e263efe5a9f63bf11cc45404f7616394c7dc389d0888888604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156111d35781810151838201526020016111bb565b50505050905090810190601f1680156112005780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561123357818101518382015260200161121b565b50505050905090810190601f1680156112605780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a2979650505050505050565b6004546001600160a01b031681565b6001546001600160a01b03163314806112ad57506000546001600160a01b031633145b6112ec576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b60ff831661133a57836001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f0857600080fd5b836001600160a01b031663441a3e7083836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015610f7357600080fd5b600960205282600052604060002060205281600052604060002081815481106113ad57fe5b6000918252602090912001546001600160a01b0316925083915050565b6000818152600b60205260409020546001600160a01b03163314611428576040805162461bcd60e51b815260206004820152601060248201526f1cd95b99195c881b9bdd081d985d5b1d60821b604482015290519081900360640190fd5b61143181613875565b50565b6002546001600160a01b031681565b6001546001600160a01b031633148061146657506000546001600160a01b031633145b6114a5576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b6000918252600b602052604090912060040155565b6000828152600b6020526040902080546001600160a01b03163314611519576040805162461bcd60e51b815260206004820152601060248201526f1cd95b99195c881b9bdd081d985d5b1d60821b604482015290519081900360640190fd5b600581015460ff1661159157600281015460408051632e1a7d4d60e01b81526004810185905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b15801561157457600080fd5b505af1158015611588573d6000803e3d6000fd5b50505050611605565b6002810154600382015460408051630441a3e760e41b8152600481019290925260248201859052516001600160a01b039092169163441a3e709160448082019260009290919082900301818387803b1580156115ec57600080fd5b505af1158015611600573d6000803e3d6000fd5b505050505b818160070154101561161957806007015491505b6007810180548390039055600c54821161163757600c805483900390555b505050565b6001546001600160a01b031633148061165f57506000546001600160a01b031633145b61169e576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b6000918252600b602052604090912060070155565b6006546001600160a01b031681565b600e81815481106116cf57fe5b9060005260206000209060209182820401919006915054906101000a900460ff1681565b60005b92915050565b6001546001600160a01b031681565b6001546001600160a01b031633148061172e57506000546001600160a01b031633145b61176d576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600a6020908152600092835260408084209091529082529020546001600160a01b031681565b6001546001600160a01b03163314806117d857506000546001600160a01b031633145b611817576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000908152600b60205260409020600101546001600160a01b031690565b6007546001600160a01b031681565b6000908152600b602052604090206006015490565b6001546001600160a01b031633148061189e57506000546001600160a01b031633145b6118dd576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b6001600160a01b038381166000818152600a602090815260408083208786168452825280832080546001600160a01b0319169587169586179055805163095ea7b360e01b81526004810195909552600019602486015251929363095ea7b39360448083019491928390030190829087803b15801561195a57600080fd5b505af115801561196e573d6000803e3d6000fd5b505050506040513d602081101561198457600080fd5b5050505050565b6006546001600160a01b031690565b6001546001600160a01b03163314806119bd57506000546001600160a01b031633145b6119fc576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b6000918252600b602052604090912060060155565b6000908152600b602052604090206007015490565b600080600560009054906101000a90046001600160a01b03166001600160a01b03166376cdb03b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a7757600080fd5b505afa158015611a8b573d6000803e3d6000fd5b505050506040513d6020811015611aa157600080fd5b505190506001600160a01b0381163314611af4576040805162461bcd60e51b815260206004820152600f60248201526e73656e646572206e6f742062616e6b60881b604482015290519081900360640190fd5b604080516370a0823160e01b815230600482015290516001600160a01b038516916370a08231916024808301926020929190829003018186803b158015611b3a57600080fd5b505afa158015611b4e573d6000803e3d6000fd5b505050506040513d6020811015611b6457600080fd5b50516040805163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905291519294509085169163a9059cbb916044808201926020929091908290030181600087803b158015611bbc57600080fd5b505af1158015611bd0573d6000803e3d6000fd5b505050506040513d6020811015611be657600080fd5b50919392505050565b6001546001600160a01b03163314611c3c576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b816001600160a01b031663095ea7b3826000196040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611c9557600080fd5b505af1158015611ca9573d6000803e3d6000fd5b505050506040513d6020811015610d7f57600080fd5b6001546001600160a01b03163314611d0c576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600c5481565b6008546001600160a01b031681565b6001546001600160a01b0316331480611d6657506000546001600160a01b031633145b611da5576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b600d805460ff1916911515919091179055565b6001546001600160a01b0316331480611ddb57506000546001600160a01b031633145b611e1a576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b0316331480611e5f57506000546001600160a01b031633145b611e9e576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b600c55565b6005546040805163652b9b4160e01b815233600482015290516000926001600160a01b03169163652b9b41916024808301926020929190829003018186803b158015611eee57600080fd5b505afa158015611f02573d6000803e3d6000fd5b505050506040513d6020811015611f1857600080fd5b5051611f57576040805162461bcd60e51b81526020600482015260096024820152681b9bdd081d985d5b1d60ba1b604482015290519081900360640190fd5b600554604080516317475d5760e11b81526001600160a01b03868116600483015291519190921691632e8ebaae916024808301926020929190829003018186803b158015611fa457600080fd5b505afa158015611fb8573d6000803e3d6000fd5b505050506040513d6020811015611fce57600080fd5b5051612010576040805162461bcd60e51b815260206004820152600c60248201526b6e6f7420737472617465677960a01b604482015290519081900360640190fd5b600654604080516320853d6960e21b815290516001600160a01b0392831692861691638214f5a4916004808301926020929190829003018186803b15801561205757600080fd5b505afa15801561206b573d6000803e3d6000fd5b505050506040513d602081101561208157600080fd5b50516001600160a01b0316146120c8576040805162461bcd60e51b815260206004820152600760248201526610b6382830b4b960c91b604482015290519081900360640190fd5b600654604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561211357600080fd5b505afa158015612127573d6000803e3d6000fd5b505050506040513d602081101561213d57600080fd5b5051905080831061214e5780612150565b825b6006546040805163a9059cbb60e01b81526001600160a01b03888116600483015260248201859052915193955091169163a9059cbb916044808201926020929091908290030181600087803b1580156121a857600080fd5b505af11580156121bc573d6000803e3d6000fd5b505050506040513d60208110156121d257600080fd5b5091949350505050565b61271081565b6001546001600160a01b031633148061220557506000546001600160a01b031633145b612244576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b60ff82166122a457826001600160a01b0316633d18b9126040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561228757600080fd5b505af115801561229b573d6000803e3d6000fd5b50505050611637565b8160ff16600114156122fd5760408051631c57762b60e31b81526004810183905260006024820181905291516001600160a01b0386169263e2bbb158926044808201939182900301818387803b15801561228757600080fd5b826001600160a01b031663379607f5826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561234357600080fd5b505af1158015612357573d6000803e3d6000fd5b50505050505050565b6001546001600160a01b031633148061238357506000546001600160a01b031633145b6123c2576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b600480546001600160a01b0319166001600160a01b03838116919091178083556007546040805163095ea7b360e01b81529284169483019490945260001960248301529251929091169163095ea7b3916044808201926020929091908290030181600087803b15801561243457600080fd5b505af1158015612448573d6000803e3d6000fd5b505050506040513d602081101561245e57600080fd5b5050600854600480546040805163095ea7b360e01b81526001600160a01b039283169381019390935260001960248401525192169163095ea7b3916044808201926020929091908290030181600087803b1580156124bb57600080fd5b505af11580156124cf573d6000803e3d6000fd5b505050506040513d602081101561163757600080fd5b6001546001600160a01b03163314612532576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b806001600160a01b031663095ea7b3600560009054906101000a90046001600160a01b03166001600160a01b03166376cdb03b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561258f57600080fd5b505afa1580156125a3573d6000803e3d6000fd5b505050506040513d60208110156125b957600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b03909216600483015260001960248301525160448083019260209291908290030181600087803b15801561260a57600080fd5b505af115801561261e573d6000803e3d6000fd5b505050506040513d602081101561263457600080fd5b5050600480546040805163095ea7b360e01b81526001600160a01b03928316938101939093526000196024840152519083169163095ea7b39160448083019260209291908290030181600087803b1580156124bb57600080fd5b6000828152600b6020526040902080546001600160a01b031633146126ed576040805162461bcd60e51b815260206004820152601060248201526f1cd95b99195c881b9bdd081d985d5b1d60821b604482015290519081900360640190fd5b600d5460ff161561277257600654604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561274357600080fd5b505afa158015612757573d6000803e3d6000fd5b505050506040513d602081101561276d57600080fd5b505191505b600581015460ff166127ea5760028101546040805163534a7e1d60e11b81526004810185905290516001600160a01b039092169163a694fc3a9160248082019260009290919082900301818387803b1580156127cd57600080fd5b505af11580156127e1573d6000803e3d6000fd5b5050505061285e565b6002810154600382015460408051631c57762b60e31b8152600481019290925260248201859052516001600160a01b039092169163e2bbb1589160448082019260009290919082900301818387803b15801561284557600080fd5b505af1158015612859573d6000803e3d6000fd5b505050505b600781015461286d90836139bc565b6007820155600c5461287f90836139bc565b600c55505050565b600554604080516376cdb03b60e01b815290516000926001600160a01b0316916376cdb03b916004808301926020929190829003018186803b1580156128cc57600080fd5b505afa1580156128e0573d6000803e3d6000fd5b505050506040513d60208110156128f657600080fd5b50516005546040805163652b9b4160e01b81523360048201819052915193945090926001600160a01b039092169163652b9b4191602480820192602092909190829003018186803b15801561294a57600080fd5b505afa15801561295e573d6000803e3d6000fd5b505050506040513d602081101561297457600080fd5b50516129b0576040805162461bcd60e51b8152602060048201526006602482015265085d985d5b1d60d21b604482015290519081900360640190fd5b6000838152600b602052604090206129c784613875565b6001810154604080516370a0823160e01b815230600482015290516001600160a01b039092169160009183916370a0823191602480820192602092909190829003018186803b158015612a1957600080fd5b505afa158015612a2d573d6000803e3d6000fd5b505050506040513d6020811015612a4357600080fd5b50516004840154909150811015612a5e575050505050610ce4565b600254612a769083906001600160a01b031683613a1d565b600254604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612ac157600080fd5b505afa158015612ad5573d6000803e3d6000fd5b505050506040513d6020811015612aeb57600080fd5b505190508015610f8757600080600080600560009054906101000a90046001600160a01b03166001600160a01b031663658612e96040518163ffffffff1660e01b815260040160206040518083038186803b158015612b4957600080fd5b505afa158015612b5d573d6000803e3d6000fd5b505050506040513d6020811015612b7357600080fd5b50511115612c1a57612c0b612710612c05600560009054906101000a90046001600160a01b03166001600160a01b031663658612e96040518163ffffffff1660e01b815260040160206040518083038186803b158015612bd257600080fd5b505afa158015612be6573d6000803e3d6000fd5b505050506040513d6020811015612bfc57600080fd5b50518790613d70565b90613dc9565b9150612c1783836139bc565b92505b60055460408051632b5ca1bb60e21b815290516000926001600160a01b03169163ad7286ec916004808301926020929190829003018186803b158015612c5f57600080fd5b505afa158015612c73573d6000803e3d6000fd5b505050506040513d6020811015612c8957600080fd5b50511115612cf757612ce8612710612c05600560009054906101000a90046001600160a01b03166001600160a01b031663ad7286ec6040518163ffffffff1660e01b815260040160206040518083038186803b158015612bd257600080fd5b9050612cf483826139bc565b92505b6000612d086002612c058787613e0b565b600254600754919250612d28916001600160a01b03918216911683613a1d565b612d30613e4d565b600254604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612d7b57600080fd5b505afa158015612d8f573d6000803e3d6000fd5b505050506040513d6020811015612da557600080fd5b505160055460408051638acc76fb60e01b815290519297506000926001600160a01b0390921691638acc76fb91600480820192602092909190829003018186803b158015612df257600080fd5b505afa158015612e06573d6000803e3d6000fd5b505050506040513d6020811015612e1c57600080fd5b5051600554604080516350773b5b60e11b815290519293506000926001600160a01b039092169163a0ee76b691600480820192602092909190829003018186803b158015612e6957600080fd5b505afa158015612e7d573d6000803e3d6000fd5b505050506040513d6020811015612e9357600080fd5b505190508415801590612eae57506001600160a01b03811615155b15612fcd5786612ebe86866139bc565b1015612ed157612ece8785613e0b565b94505b6002546040805163a9059cbb60e01b81526001600160a01b038481166004830152602482018990529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015612f2757600080fd5b505af1158015612f3b573d6000803e3d6000fd5b505050506040513d6020811015612f5157600080fd5b5050600254604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612f9e57600080fd5b505afa158015612fb2573d6000803e3d6000fd5b505050506040513d6020811015612fc857600080fd5b505196505b600084118015612fe557506001600160a01b03821615155b156131e957600554604080516305268cff60e01b815290516000926001600160a01b0316916305268cff916004808301926020929190829003018186803b15801561302f57600080fd5b505afa158015613043573d6000803e3d6000fd5b505050506040513d602081101561305957600080fd5b5051600254909150613075906001600160a01b0316828a613a1d565b806001600160a01b031663a9059cbb84836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156130d257600080fd5b505afa1580156130e6573d6000803e3d6000fd5b505050506040513d60208110156130fc57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561314d57600080fd5b505af1158015613161573d6000803e3d6000fd5b505050506040513d602081101561317757600080fd5b505060408051631dfc6d6560e11b815290516001600160a01b03851691633bf8daca9160048083019260209291908290030181600087803b1580156131bb57600080fd5b505af11580156131cf573d6000803e3d6000fd5b505050506040513d60208110156131e557600080fd5b5050505b5050600654604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561323657600080fd5b505afa15801561324a573d6000803e3d6000fd5b505050506040513d602081101561326057600080fd5b5051905080156134f2576000198d14156132fc576006546040805163a9059cbb60e01b81526001600160a01b038e81166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156132ca57600080fd5b505af11580156132de573d6000803e3d6000fd5b505050506040513d60208110156132f457600080fd5b506134f29050565b60065460408051636eb1769f60e11b81523060048201526001600160a01b038e8116602483015291518493929092169163dd62ed3e91604480820192602092909190829003018186803b15801561335257600080fd5b505afa158015613366573d6000803e3d6000fd5b505050506040513d602081101561337c57600080fd5b5051101561348b576006546040805163095ea7b360e01b81526001600160a01b038e81166004830152600060248301819052925193169263095ea7b392604480840193602093929083900390910190829087803b1580156133dc57600080fd5b505af11580156133f0573d6000803e3d6000fd5b505050506040513d602081101561340657600080fd5b50506006546040805163095ea7b360e01b81526001600160a01b038e81166004830152602482018590529151919092169163095ea7b39160448083019260209291908290030181600087803b15801561345e57600080fd5b505af1158015613472573d6000803e3d6000fd5b505050506040513d602081101561348857600080fd5b50505b8a6001600160a01b03166385c350f58e836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b1580156134d957600080fd5b505af11580156134ed573d6000803e3d6000fd5b505050505b50505050505050505050505050565b600b60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b039687169795871696909416949293919260ff9091169188565b6003546001600160a01b031681565b6001546001600160a01b031633146135b2576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b6000888152600b6020908152604080832080546001600160a01b03199081166001600160a01b038d811691909117835560018301805483168d83169081179091556002840180549093168c831617909255600383018a905560048084018a905560058401805460ff191660ff8b1617905560069093018790558254845163095ea7b360e01b815291169281019290925260001960248301529151919363095ea7b39360448084019491939192918390030190829087803b15801561367557600080fd5b505af1158015613689573d6000803e3d6000fd5b505050506040513d602081101561369f57600080fd5b50506006546040805163095ea7b360e01b81526001600160a01b038a8116600483015260001960248301529151919092169163095ea7b39160448083019260209291908290030181600087803b1580156136f857600080fd5b505af115801561370c573d6000803e3d6000fd5b505050506040513d602081101561372257600080fd5b50506006546040805163095ea7b360e01b81526001600160a01b03888116600483015260001960248301529151919092169163095ea7b39160448083019260209291908290030181600087803b15801561377b57600080fd5b505af115801561378f573d6000803e3d6000fd5b505050506040513d60208110156137a557600080fd5b50505050505050505050565b6001546001600160a01b03163314806137d457506000546001600160a01b031633145b613813576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b816001600160a01b0316635312ea8e826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561385957600080fd5b505af115801561386d573d6000803e3d6000fd5b505050505050565b6000818152600b60205260409020600581015460ff166138fe578060020160009054906101000a90046001600160a01b03166001600160a01b0316633d18b9126040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156138e157600080fd5b505af11580156138f5573d6000803e3d6000fd5b50505050610ce4565b600581015460ff1660011415613968576002810154600382015460408051631c57762b60e31b8152600481019290925260006024830181905290516001600160a01b039093169263e2bbb15892604480820193929182900301818387803b1580156138e157600080fd5b600281015460038201546040805163379607f560e01b81526004810192909252516001600160a01b039092169163379607f59160248082019260009290919082900301818387803b15801561385957600080fd5b600082820183811015613a16576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038084166000908152600a602090815260408083208685168452909152902054168015613ae25760408051638201aa3f60e01b81526001600160a01b038681166004830152602482018590528581166044830152600160648301526000196084830152825190841692638201aa3f9260a480820193918290030181600087803b158015613ab057600080fd5b505af1158015613ac4573d6000803e3d6000fd5b505050506040513d6040811015613ada57600080fd5b50610d7f9050565b6001600160a01b038085166000908152600960209081526040808320938716835292815290829020805483518184028101840190945280845260609392830182828015613b5857602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613b3a575b50505050509050805160001415613be65760408051600280825260608201835290916020830190803683370190505090508481600081518110613b9757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508381600181518110613bc557fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b6004546001600160a01b03166338ed17398460018430613c08426107086139bc565b6040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015613c78578181015183820152602001613c60565b505050509050019650505050505050600060405180830381600087803b158015613ca157600080fd5b505af1158015613cb5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613cde57600080fd5b8101908080516040519392919084600160201b821115613cfd57600080fd5b908301906020820185811115613d1257600080fd5b82518660208202830111600160201b82111715613d2e57600080fd5b82525081516020918201928201910280838360005b83811015613d5b578181015183820152602001613d43565b50505050905001604052505050505050505050565b600082613d7f575060006116f6565b82820282848281613d8c57fe5b0414613a165760405162461bcd60e51b815260040180806020018281038252602181526020018061421c6021913960400191505060405180910390fd5b6000613a1683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061400f565b6000613a1683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506140b1565b60048054600754600854604080516370a0823160e01b81523095810195909552516001600160a01b039384169463e8e3370094938416939092169183916370a0823191602480820192602092909190829003018186803b158015613eb057600080fd5b505afa158015613ec4573d6000803e3d6000fd5b505050506040513d6020811015613eda57600080fd5b5051600854604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015613f2757600080fd5b505afa158015613f3b573d6000803e3d6000fd5b505050506040513d6020811015613f5157600080fd5b505160018030613f63426107086139bc565b6040518963ffffffff1660e01b815260040180896001600160a01b03168152602001886001600160a01b03168152602001878152602001868152602001858152602001848152602001836001600160a01b0316815260200182815260200198505050505050505050606060405180830381600087803b158015613fe557600080fd5b505af1158015613ff9573d6000803e3d6000fd5b505050506040513d6060811015610ce457600080fd5b6000818361409b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614060578181015183820152602001614048565b50505050905090810190601f16801561408d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816140a757fe5b0495945050505050565b600081848411156141035760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315614060578181015183820152602001614048565b505050900390565b50805460008255601f0160209004906000526020600020908101906114319190614195565b828054828255906000526020600020908101928215614185579160200282015b8281111561418557825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190614150565b506141919291506141aa565b5090565b5b808211156141915760008155600101614196565b5b808211156141915780546001600160a01b03191681556001016141ab56fe556e697632455448555344434d756c7469506f6f6c53747261746567793a3a657865637574655472616e73616374696f6e3a205472616e73616374696f6e20657865637574696f6e2072657665727465642e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7721676f7665726e616e6365202626202173747261746567697374000000000000a264697066735822122094f2ae6747923d75b5d9886666473ab42a54e2436e1b3349d748f3d38ebe16d964736f6c634300060c0033000000000000000000000000aa8ecca0082c34ab8c30b4d896eb8eecc5004b28000000000000000000000000b4e16d0168e52d35cacd2c6185b44281ec28c9dc000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000001
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102bb5760003560e01c8063692c2f9011610182578063c7b9d530116100e9578063daea85c5116100a2578063f2faa1b91161007c578063f2faa1b914610b12578063f712adbb14610b82578063fb529b3314610b8a578063fd5ce85114610be2576102bb565b8063daea85c514610aa6578063e2bbb15814610acc578063e4a4b7b114610aef576102bb565b8063c7b9d530146109d4578063c9ed5008146109fa578063d374eb2714610a17578063d73792a914610a43578063d78683b914610a4b578063d92f3d7314610a80576102bb565b8063a06824271161013b578063a06824271461092b578063a22a33b714610951578063ab033ea91461097f578063ad7a672f146109a5578063ae511bf3146109ad578063be4ea1e4146109b5576102bb565b8063692c2f9014610886578063696513f01461088e57806372bf2ac4146108ab5780638214f5a4146108e357806389fa2b70146108eb5780639cc7f7081461090e576102bb565b80633fc8cef3116102265780635a677b7e116101df5780635a677b7e146107c45780635aa6e675146107e75780635b769f3c146107ef5780635c788211146108155780635fa6e5ef1461084357806367ad20fd14610869576102bb565b80633fc8cef31461071857806340e7e57114610720578063441a3e7014610743578063442dd5e714610766578063452ed4f114610789578063460247a614610791576102bb565b806320ffb4531161027857806320ffb453146104945780632224fa25146104cf578063257ae0de14610682578063359a3f731461068a57806335e94268146106c5578063379607f5146106fb576102bb565b806303da1b32146102c0578063115cce2b1461036357806312f7086c1461041d5780631c727de81461044c5780631fe4a686146104705780632088a7fa14610478575b600080fd5b610361600480360360208110156102d657600080fd5b810190602081018135600160201b8111156102f057600080fd5b82018360208201111561030257600080fd5b803590602001918460208302840111600160201b8311171561032357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610c0e945050505050565b005b6103616004803603606081101561037957600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b8111156103ac57600080fd5b8201836020820111156103be57600080fd5b803590602001918460208302840111600160201b831117156103df57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610ce8945050505050565b61043a6004803603602081101561043357600080fd5b5035610d85565b60408051918252519081900360200190f35b610454610e31565b604080516001600160a01b039092168252519081900360200190f35b610454610e40565b610480610e4f565b604080519115158252519081900360200190f35b610361600480360360808110156104aa57600080fd5b506001600160a01b038135169060ff6020820135169060408101359060600135610e58565b61060d600480360360808110156104e557600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561051457600080fd5b82018360208201111561052657600080fd5b803590602001918460018302840111600160201b8311171561054757600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561059957600080fd5b8201836020820111156105ab57600080fd5b803590602001918460018302840111600160201b831117156105cc57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610f91945050505050565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561064757818101518382015260200161062f565b50505050905090810190601f1680156106745780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61045461127b565b610361600480360360808110156106a057600080fd5b506001600160a01b038135169060ff602082013516906040810135906060013561128a565b610454600480360360608110156106db57600080fd5b506001600160a01b03813581169160208101359091169060400135611388565b6103616004803603602081101561071157600080fd5b50356113ca565b610454611434565b6103616004803603604081101561073657600080fd5b5080359060200135611443565b6103616004803603604081101561075957600080fd5b50803590602001356114ba565b6103616004803603604081101561077c57600080fd5b508035906020013561163c565b6104546116b3565b6107ae600480360360208110156107a757600080fd5b50356116c2565b6040805160ff9092168252519081900360200190f35b61043a600480360360408110156107da57600080fd5b50803590602001356116f3565b6104546116fc565b6103616004803603602081101561080557600080fd5b50356001600160a01b031661170b565b6104546004803603604081101561082b57600080fd5b506001600160a01b038135811691602001351661178f565b6103616004803603602081101561085957600080fd5b50356001600160a01b03166117b5565b6104546004803603602081101561087f57600080fd5b5035611839565b610454611857565b61043a600480360360208110156108a457600080fd5b5035611866565b610361600480360360608110156108c157600080fd5b506001600160a01b03813581169160208101358216916040909101351661187b565b61045461198b565b6103616004803603604081101561090157600080fd5b508035906020013561199a565b61043a6004803603602081101561092457600080fd5b5035611a11565b61043a6004803603602081101561094157600080fd5b50356001600160a01b0316611a26565b6103616004803603604081101561096757600080fd5b506001600160a01b0381358116916020013516611bef565b6103616004803603602081101561099557600080fd5b50356001600160a01b0316611cbf565b61043a611d2e565b610454611d34565b610361600480360360208110156109cb57600080fd5b50351515611d43565b610361600480360360208110156109ea57600080fd5b50356001600160a01b0316611db8565b61036160048036036020811015610a1057600080fd5b5035611e3c565b61043a60048036036040811015610a2d57600080fd5b506001600160a01b038135169060200135611ea3565b61043a6121dc565b61036160048036036060811015610a6157600080fd5b506001600160a01b038135169060ff60208201351690604001356121e2565b61036160048036036020811015610a9657600080fd5b50356001600160a01b0316612360565b61036160048036036020811015610abc57600080fd5b50356001600160a01b03166124e5565b61036160048036036040811015610ae257600080fd5b508035906020013561268e565b61036160048036036040811015610b0557600080fd5b5080359060200135612887565b610b2f60048036036020811015610b2857600080fd5b5035613501565b604080516001600160a01b03998a168152978916602089015295909716868601526060860193909352608085019190915260ff1660a084015260c083015260e08201929092529051908190036101000190f35b610454613556565b6103616004803603610100811015610ba157600080fd5b508035906001600160a01b03602082013581169160408101358216916060820135169060808101359060a08101359060ff60c0820135169060e00135613565565b61036160048036036040811015610bf857600080fd5b506001600160a01b0381351690602001356137b1565b6001546001600160a01b0316331480610c3157506000546001600160a01b031633145b610c70576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b610c7c600e600061410b565b60005b81518160ff161015610ce457600e828260ff1681518110610c9c57fe5b602090810291909101810151825460018181018555600094855293839020928104909201805460ff928316601f9094166101000a938402929093021990921617905501610c7f565b5050565b6001546001600160a01b0316331480610d0b57506000546001600160a01b031633145b610d4a576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b6001600160a01b03808416600090815260096020908152604080832093861683529281529190208251610d7f92840190614130565b50505050565b6000818152600b602052604081206005015460ff1615610da757506000610e2c565b6000828152600b60209081526040918290206002015482516246613160e11b815230600482015292516001600160a01b0390911692628cc262926024808301939192829003018186803b158015610dfd57600080fd5b505afa158015610e11573d6000803e3d6000fd5b505050506040513d6020811015610e2757600080fd5b505190505b919050565b6005546001600160a01b031681565b6000546001600160a01b031681565b600d5460ff1681565b6001546001600160a01b0316331480610e7b57506000546001600160a01b031633145b610eba576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b60ff8316610f2557836001600160a01b031663a694fc3a826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f0857600080fd5b505af1158015610f1c573d6000803e3d6000fd5b50505050610d7f565b836001600160a01b031663e2bbb15883836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015610f7357600080fd5b505af1158015610f87573d6000803e3d6000fd5b5050505050505050565b6001546060906001600160a01b03163314610fe1576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b6060835160001415610ff4575081611077565b83805190602001208360405160200180836001600160e01b031916815260040182805190602001908083835b6020831061103f5780518252601f199092019160209182019101611020565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405290505b60006060876001600160a01b031687846040518082805190602001908083835b602083106110b65780518252601f199092019160209182019101611097565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611118576040519150601f19603f3d011682016040523d82523d6000602084013e61111d565b606091505b50915091508161115e5760405162461bcd60e51b81526004018080602001828103825260528152602001806141ca6052913960600191505060405180910390fd5b876001600160a01b03167f88405ca50016c636e025868e263efe5a9f63bf11cc45404f7616394c7dc389d0888888604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156111d35781810151838201526020016111bb565b50505050905090810190601f1680156112005780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561123357818101518382015260200161121b565b50505050905090810190601f1680156112605780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a2979650505050505050565b6004546001600160a01b031681565b6001546001600160a01b03163314806112ad57506000546001600160a01b031633145b6112ec576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b60ff831661133a57836001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f0857600080fd5b836001600160a01b031663441a3e7083836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015610f7357600080fd5b600960205282600052604060002060205281600052604060002081815481106113ad57fe5b6000918252602090912001546001600160a01b0316925083915050565b6000818152600b60205260409020546001600160a01b03163314611428576040805162461bcd60e51b815260206004820152601060248201526f1cd95b99195c881b9bdd081d985d5b1d60821b604482015290519081900360640190fd5b61143181613875565b50565b6002546001600160a01b031681565b6001546001600160a01b031633148061146657506000546001600160a01b031633145b6114a5576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b6000918252600b602052604090912060040155565b6000828152600b6020526040902080546001600160a01b03163314611519576040805162461bcd60e51b815260206004820152601060248201526f1cd95b99195c881b9bdd081d985d5b1d60821b604482015290519081900360640190fd5b600581015460ff1661159157600281015460408051632e1a7d4d60e01b81526004810185905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b15801561157457600080fd5b505af1158015611588573d6000803e3d6000fd5b50505050611605565b6002810154600382015460408051630441a3e760e41b8152600481019290925260248201859052516001600160a01b039092169163441a3e709160448082019260009290919082900301818387803b1580156115ec57600080fd5b505af1158015611600573d6000803e3d6000fd5b505050505b818160070154101561161957806007015491505b6007810180548390039055600c54821161163757600c805483900390555b505050565b6001546001600160a01b031633148061165f57506000546001600160a01b031633145b61169e576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b6000918252600b602052604090912060070155565b6006546001600160a01b031681565b600e81815481106116cf57fe5b9060005260206000209060209182820401919006915054906101000a900460ff1681565b60005b92915050565b6001546001600160a01b031681565b6001546001600160a01b031633148061172e57506000546001600160a01b031633145b61176d576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600a6020908152600092835260408084209091529082529020546001600160a01b031681565b6001546001600160a01b03163314806117d857506000546001600160a01b031633145b611817576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000908152600b60205260409020600101546001600160a01b031690565b6007546001600160a01b031681565b6000908152600b602052604090206006015490565b6001546001600160a01b031633148061189e57506000546001600160a01b031633145b6118dd576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b6001600160a01b038381166000818152600a602090815260408083208786168452825280832080546001600160a01b0319169587169586179055805163095ea7b360e01b81526004810195909552600019602486015251929363095ea7b39360448083019491928390030190829087803b15801561195a57600080fd5b505af115801561196e573d6000803e3d6000fd5b505050506040513d602081101561198457600080fd5b5050505050565b6006546001600160a01b031690565b6001546001600160a01b03163314806119bd57506000546001600160a01b031633145b6119fc576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b6000918252600b602052604090912060060155565b6000908152600b602052604090206007015490565b600080600560009054906101000a90046001600160a01b03166001600160a01b03166376cdb03b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a7757600080fd5b505afa158015611a8b573d6000803e3d6000fd5b505050506040513d6020811015611aa157600080fd5b505190506001600160a01b0381163314611af4576040805162461bcd60e51b815260206004820152600f60248201526e73656e646572206e6f742062616e6b60881b604482015290519081900360640190fd5b604080516370a0823160e01b815230600482015290516001600160a01b038516916370a08231916024808301926020929190829003018186803b158015611b3a57600080fd5b505afa158015611b4e573d6000803e3d6000fd5b505050506040513d6020811015611b6457600080fd5b50516040805163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905291519294509085169163a9059cbb916044808201926020929091908290030181600087803b158015611bbc57600080fd5b505af1158015611bd0573d6000803e3d6000fd5b505050506040513d6020811015611be657600080fd5b50919392505050565b6001546001600160a01b03163314611c3c576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b816001600160a01b031663095ea7b3826000196040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611c9557600080fd5b505af1158015611ca9573d6000803e3d6000fd5b505050506040513d6020811015610d7f57600080fd5b6001546001600160a01b03163314611d0c576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600c5481565b6008546001600160a01b031681565b6001546001600160a01b0316331480611d6657506000546001600160a01b031633145b611da5576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b600d805460ff1916911515919091179055565b6001546001600160a01b0316331480611ddb57506000546001600160a01b031633145b611e1a576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b0316331480611e5f57506000546001600160a01b031633145b611e9e576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b600c55565b6005546040805163652b9b4160e01b815233600482015290516000926001600160a01b03169163652b9b41916024808301926020929190829003018186803b158015611eee57600080fd5b505afa158015611f02573d6000803e3d6000fd5b505050506040513d6020811015611f1857600080fd5b5051611f57576040805162461bcd60e51b81526020600482015260096024820152681b9bdd081d985d5b1d60ba1b604482015290519081900360640190fd5b600554604080516317475d5760e11b81526001600160a01b03868116600483015291519190921691632e8ebaae916024808301926020929190829003018186803b158015611fa457600080fd5b505afa158015611fb8573d6000803e3d6000fd5b505050506040513d6020811015611fce57600080fd5b5051612010576040805162461bcd60e51b815260206004820152600c60248201526b6e6f7420737472617465677960a01b604482015290519081900360640190fd5b600654604080516320853d6960e21b815290516001600160a01b0392831692861691638214f5a4916004808301926020929190829003018186803b15801561205757600080fd5b505afa15801561206b573d6000803e3d6000fd5b505050506040513d602081101561208157600080fd5b50516001600160a01b0316146120c8576040805162461bcd60e51b815260206004820152600760248201526610b6382830b4b960c91b604482015290519081900360640190fd5b600654604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561211357600080fd5b505afa158015612127573d6000803e3d6000fd5b505050506040513d602081101561213d57600080fd5b5051905080831061214e5780612150565b825b6006546040805163a9059cbb60e01b81526001600160a01b03888116600483015260248201859052915193955091169163a9059cbb916044808201926020929091908290030181600087803b1580156121a857600080fd5b505af11580156121bc573d6000803e3d6000fd5b505050506040513d60208110156121d257600080fd5b5091949350505050565b61271081565b6001546001600160a01b031633148061220557506000546001600160a01b031633145b612244576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b60ff82166122a457826001600160a01b0316633d18b9126040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561228757600080fd5b505af115801561229b573d6000803e3d6000fd5b50505050611637565b8160ff16600114156122fd5760408051631c57762b60e31b81526004810183905260006024820181905291516001600160a01b0386169263e2bbb158926044808201939182900301818387803b15801561228757600080fd5b826001600160a01b031663379607f5826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561234357600080fd5b505af1158015612357573d6000803e3d6000fd5b50505050505050565b6001546001600160a01b031633148061238357506000546001600160a01b031633145b6123c2576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b600480546001600160a01b0319166001600160a01b03838116919091178083556007546040805163095ea7b360e01b81529284169483019490945260001960248301529251929091169163095ea7b3916044808201926020929091908290030181600087803b15801561243457600080fd5b505af1158015612448573d6000803e3d6000fd5b505050506040513d602081101561245e57600080fd5b5050600854600480546040805163095ea7b360e01b81526001600160a01b039283169381019390935260001960248401525192169163095ea7b3916044808201926020929091908290030181600087803b1580156124bb57600080fd5b505af11580156124cf573d6000803e3d6000fd5b505050506040513d602081101561163757600080fd5b6001546001600160a01b03163314612532576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b806001600160a01b031663095ea7b3600560009054906101000a90046001600160a01b03166001600160a01b03166376cdb03b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561258f57600080fd5b505afa1580156125a3573d6000803e3d6000fd5b505050506040513d60208110156125b957600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b03909216600483015260001960248301525160448083019260209291908290030181600087803b15801561260a57600080fd5b505af115801561261e573d6000803e3d6000fd5b505050506040513d602081101561263457600080fd5b5050600480546040805163095ea7b360e01b81526001600160a01b03928316938101939093526000196024840152519083169163095ea7b39160448083019260209291908290030181600087803b1580156124bb57600080fd5b6000828152600b6020526040902080546001600160a01b031633146126ed576040805162461bcd60e51b815260206004820152601060248201526f1cd95b99195c881b9bdd081d985d5b1d60821b604482015290519081900360640190fd5b600d5460ff161561277257600654604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561274357600080fd5b505afa158015612757573d6000803e3d6000fd5b505050506040513d602081101561276d57600080fd5b505191505b600581015460ff166127ea5760028101546040805163534a7e1d60e11b81526004810185905290516001600160a01b039092169163a694fc3a9160248082019260009290919082900301818387803b1580156127cd57600080fd5b505af11580156127e1573d6000803e3d6000fd5b5050505061285e565b6002810154600382015460408051631c57762b60e31b8152600481019290925260248201859052516001600160a01b039092169163e2bbb1589160448082019260009290919082900301818387803b15801561284557600080fd5b505af1158015612859573d6000803e3d6000fd5b505050505b600781015461286d90836139bc565b6007820155600c5461287f90836139bc565b600c55505050565b600554604080516376cdb03b60e01b815290516000926001600160a01b0316916376cdb03b916004808301926020929190829003018186803b1580156128cc57600080fd5b505afa1580156128e0573d6000803e3d6000fd5b505050506040513d60208110156128f657600080fd5b50516005546040805163652b9b4160e01b81523360048201819052915193945090926001600160a01b039092169163652b9b4191602480820192602092909190829003018186803b15801561294a57600080fd5b505afa15801561295e573d6000803e3d6000fd5b505050506040513d602081101561297457600080fd5b50516129b0576040805162461bcd60e51b8152602060048201526006602482015265085d985d5b1d60d21b604482015290519081900360640190fd5b6000838152600b602052604090206129c784613875565b6001810154604080516370a0823160e01b815230600482015290516001600160a01b039092169160009183916370a0823191602480820192602092909190829003018186803b158015612a1957600080fd5b505afa158015612a2d573d6000803e3d6000fd5b505050506040513d6020811015612a4357600080fd5b50516004840154909150811015612a5e575050505050610ce4565b600254612a769083906001600160a01b031683613a1d565b600254604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612ac157600080fd5b505afa158015612ad5573d6000803e3d6000fd5b505050506040513d6020811015612aeb57600080fd5b505190508015610f8757600080600080600560009054906101000a90046001600160a01b03166001600160a01b031663658612e96040518163ffffffff1660e01b815260040160206040518083038186803b158015612b4957600080fd5b505afa158015612b5d573d6000803e3d6000fd5b505050506040513d6020811015612b7357600080fd5b50511115612c1a57612c0b612710612c05600560009054906101000a90046001600160a01b03166001600160a01b031663658612e96040518163ffffffff1660e01b815260040160206040518083038186803b158015612bd257600080fd5b505afa158015612be6573d6000803e3d6000fd5b505050506040513d6020811015612bfc57600080fd5b50518790613d70565b90613dc9565b9150612c1783836139bc565b92505b60055460408051632b5ca1bb60e21b815290516000926001600160a01b03169163ad7286ec916004808301926020929190829003018186803b158015612c5f57600080fd5b505afa158015612c73573d6000803e3d6000fd5b505050506040513d6020811015612c8957600080fd5b50511115612cf757612ce8612710612c05600560009054906101000a90046001600160a01b03166001600160a01b031663ad7286ec6040518163ffffffff1660e01b815260040160206040518083038186803b158015612bd257600080fd5b9050612cf483826139bc565b92505b6000612d086002612c058787613e0b565b600254600754919250612d28916001600160a01b03918216911683613a1d565b612d30613e4d565b600254604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612d7b57600080fd5b505afa158015612d8f573d6000803e3d6000fd5b505050506040513d6020811015612da557600080fd5b505160055460408051638acc76fb60e01b815290519297506000926001600160a01b0390921691638acc76fb91600480820192602092909190829003018186803b158015612df257600080fd5b505afa158015612e06573d6000803e3d6000fd5b505050506040513d6020811015612e1c57600080fd5b5051600554604080516350773b5b60e11b815290519293506000926001600160a01b039092169163a0ee76b691600480820192602092909190829003018186803b158015612e6957600080fd5b505afa158015612e7d573d6000803e3d6000fd5b505050506040513d6020811015612e9357600080fd5b505190508415801590612eae57506001600160a01b03811615155b15612fcd5786612ebe86866139bc565b1015612ed157612ece8785613e0b565b94505b6002546040805163a9059cbb60e01b81526001600160a01b038481166004830152602482018990529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015612f2757600080fd5b505af1158015612f3b573d6000803e3d6000fd5b505050506040513d6020811015612f5157600080fd5b5050600254604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612f9e57600080fd5b505afa158015612fb2573d6000803e3d6000fd5b505050506040513d6020811015612fc857600080fd5b505196505b600084118015612fe557506001600160a01b03821615155b156131e957600554604080516305268cff60e01b815290516000926001600160a01b0316916305268cff916004808301926020929190829003018186803b15801561302f57600080fd5b505afa158015613043573d6000803e3d6000fd5b505050506040513d602081101561305957600080fd5b5051600254909150613075906001600160a01b0316828a613a1d565b806001600160a01b031663a9059cbb84836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156130d257600080fd5b505afa1580156130e6573d6000803e3d6000fd5b505050506040513d60208110156130fc57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561314d57600080fd5b505af1158015613161573d6000803e3d6000fd5b505050506040513d602081101561317757600080fd5b505060408051631dfc6d6560e11b815290516001600160a01b03851691633bf8daca9160048083019260209291908290030181600087803b1580156131bb57600080fd5b505af11580156131cf573d6000803e3d6000fd5b505050506040513d60208110156131e557600080fd5b5050505b5050600654604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561323657600080fd5b505afa15801561324a573d6000803e3d6000fd5b505050506040513d602081101561326057600080fd5b5051905080156134f2576000198d14156132fc576006546040805163a9059cbb60e01b81526001600160a01b038e81166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156132ca57600080fd5b505af11580156132de573d6000803e3d6000fd5b505050506040513d60208110156132f457600080fd5b506134f29050565b60065460408051636eb1769f60e11b81523060048201526001600160a01b038e8116602483015291518493929092169163dd62ed3e91604480820192602092909190829003018186803b15801561335257600080fd5b505afa158015613366573d6000803e3d6000fd5b505050506040513d602081101561337c57600080fd5b5051101561348b576006546040805163095ea7b360e01b81526001600160a01b038e81166004830152600060248301819052925193169263095ea7b392604480840193602093929083900390910190829087803b1580156133dc57600080fd5b505af11580156133f0573d6000803e3d6000fd5b505050506040513d602081101561340657600080fd5b50506006546040805163095ea7b360e01b81526001600160a01b038e81166004830152602482018590529151919092169163095ea7b39160448083019260209291908290030181600087803b15801561345e57600080fd5b505af1158015613472573d6000803e3d6000fd5b505050506040513d602081101561348857600080fd5b50505b8a6001600160a01b03166385c350f58e836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b1580156134d957600080fd5b505af11580156134ed573d6000803e3d6000fd5b505050505b50505050505050505050505050565b600b60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b039687169795871696909416949293919260ff9091169188565b6003546001600160a01b031681565b6001546001600160a01b031633146135b2576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b6000888152600b6020908152604080832080546001600160a01b03199081166001600160a01b038d811691909117835560018301805483168d83169081179091556002840180549093168c831617909255600383018a905560048084018a905560058401805460ff191660ff8b1617905560069093018790558254845163095ea7b360e01b815291169281019290925260001960248301529151919363095ea7b39360448084019491939192918390030190829087803b15801561367557600080fd5b505af1158015613689573d6000803e3d6000fd5b505050506040513d602081101561369f57600080fd5b50506006546040805163095ea7b360e01b81526001600160a01b038a8116600483015260001960248301529151919092169163095ea7b39160448083019260209291908290030181600087803b1580156136f857600080fd5b505af115801561370c573d6000803e3d6000fd5b505050506040513d602081101561372257600080fd5b50506006546040805163095ea7b360e01b81526001600160a01b03888116600483015260001960248301529151919092169163095ea7b39160448083019260209291908290030181600087803b15801561377b57600080fd5b505af115801561378f573d6000803e3d6000fd5b505050506040513d60208110156137a557600080fd5b50505050505050505050565b6001546001600160a01b03163314806137d457506000546001600160a01b031633145b613813576040805162461bcd60e51b815260206004820152601a602482015260008051602061423d833981519152604482015290519081900360640190fd5b816001600160a01b0316635312ea8e826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561385957600080fd5b505af115801561386d573d6000803e3d6000fd5b505050505050565b6000818152600b60205260409020600581015460ff166138fe578060020160009054906101000a90046001600160a01b03166001600160a01b0316633d18b9126040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156138e157600080fd5b505af11580156138f5573d6000803e3d6000fd5b50505050610ce4565b600581015460ff1660011415613968576002810154600382015460408051631c57762b60e31b8152600481019290925260006024830181905290516001600160a01b039093169263e2bbb15892604480820193929182900301818387803b1580156138e157600080fd5b600281015460038201546040805163379607f560e01b81526004810192909252516001600160a01b039092169163379607f59160248082019260009290919082900301818387803b15801561385957600080fd5b600082820183811015613a16576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038084166000908152600a602090815260408083208685168452909152902054168015613ae25760408051638201aa3f60e01b81526001600160a01b038681166004830152602482018590528581166044830152600160648301526000196084830152825190841692638201aa3f9260a480820193918290030181600087803b158015613ab057600080fd5b505af1158015613ac4573d6000803e3d6000fd5b505050506040513d6040811015613ada57600080fd5b50610d7f9050565b6001600160a01b038085166000908152600960209081526040808320938716835292815290829020805483518184028101840190945280845260609392830182828015613b5857602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613b3a575b50505050509050805160001415613be65760408051600280825260608201835290916020830190803683370190505090508481600081518110613b9757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508381600181518110613bc557fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b6004546001600160a01b03166338ed17398460018430613c08426107086139bc565b6040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015613c78578181015183820152602001613c60565b505050509050019650505050505050600060405180830381600087803b158015613ca157600080fd5b505af1158015613cb5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015613cde57600080fd5b8101908080516040519392919084600160201b821115613cfd57600080fd5b908301906020820185811115613d1257600080fd5b82518660208202830111600160201b82111715613d2e57600080fd5b82525081516020918201928201910280838360005b83811015613d5b578181015183820152602001613d43565b50505050905001604052505050505050505050565b600082613d7f575060006116f6565b82820282848281613d8c57fe5b0414613a165760405162461bcd60e51b815260040180806020018281038252602181526020018061421c6021913960400191505060405180910390fd5b6000613a1683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061400f565b6000613a1683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506140b1565b60048054600754600854604080516370a0823160e01b81523095810195909552516001600160a01b039384169463e8e3370094938416939092169183916370a0823191602480820192602092909190829003018186803b158015613eb057600080fd5b505afa158015613ec4573d6000803e3d6000fd5b505050506040513d6020811015613eda57600080fd5b5051600854604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015613f2757600080fd5b505afa158015613f3b573d6000803e3d6000fd5b505050506040513d6020811015613f5157600080fd5b505160018030613f63426107086139bc565b6040518963ffffffff1660e01b815260040180896001600160a01b03168152602001886001600160a01b03168152602001878152602001868152602001858152602001848152602001836001600160a01b0316815260200182815260200198505050505050505050606060405180830381600087803b158015613fe557600080fd5b505af1158015613ff9573d6000803e3d6000fd5b505050506040513d6060811015610ce457600080fd5b6000818361409b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614060578181015183820152602001614048565b50505050905090810190601f16801561408d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816140a757fe5b0495945050505050565b600081848411156141035760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315614060578181015183820152602001614048565b505050900390565b50805460008255601f0160209004906000526020600020908101906114319190614195565b828054828255906000526020600020908101928215614185579160200282015b8281111561418557825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190614150565b506141919291506141aa565b5090565b5b808211156141915760008155600101614196565b5b808211156141915780546001600160a01b03191681556001016141ab56fe556e697632455448555344434d756c7469506f6f6c53747261746567793a3a657865637574655472616e73616374696f6e3a205472616e73616374696f6e20657865637574696f6e2072657665727465642e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7721676f7665726e616e6365202626202173747261746567697374000000000000a264697066735822122094f2ae6747923d75b5d9886666473ab42a54e2436e1b3349d748f3d38ebe16d964736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000aa8ecca0082c34ab8c30b4d896eb8eecc5004b28000000000000000000000000b4e16d0168e52d35cacd2c6185b44281ec28c9dc000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000001
-----Decoded View---------------
Arg [0] : _valueVaultMaster (address): 0xAa8ECCa0082c34Ab8c30B4D896eB8eEcC5004b28
Arg [1] : _lpPair (address): 0xB4e16d0168e52d35CaCD2c6185b44281Ec28C9Dc
Arg [2] : _lpPairTokenA (address): 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
Arg [3] : _lpPairTokenB (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [4] : _aggressiveMode (bool): True
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000aa8ecca0082c34ab8c30b4d896eb8eecc5004b28
Arg [1] : 000000000000000000000000b4e16d0168e52d35cacd2c6185b44281ec28c9dc
Arg [2] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [3] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000001
Deployed Bytecode Sourcemap
18501:18853:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23166:347;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23166:347:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23166:347:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23166:347:0;;-1:-1:-1;23166:347:0;;-1:-1:-1;;;;;23166:347:0:i;:::-;;29740:249;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29740:249:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29740:249:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29740:249:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29740:249:0;;-1:-1:-1;29740:249:0;;-1:-1:-1;;;;;29740:249:0:i;35490:261::-;;;;;;;;;;;;;;;;-1:-1:-1;35490:261:0;;:::i;:::-;;;;;;;;;;;;;;;;18986:40;;;:::i;:::-;;;;-1:-1:-1;;;;;18986:40:0;;;;;;;;;;;;;;18597:25;;;:::i;19995:26::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;27533:386;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27533:386:0;;;;;;;;;;;;;;;;;;;;:::i;36568:783::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36568:783:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36568:783:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36568:783:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36568:783:0;;;;;;;;-1:-1:-1;36568:783:0;;-1:-1:-1;;;;;36568:783:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36568:783:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36568:783:0;;-1:-1:-1;36568:783:0;;-1:-1:-1;;;;;36568:783:0:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18885:92;;;:::i;28383:391::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28383:391:0;;;;;;;;;;;;;;;;;;;;:::i;19200:69::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19200:69:0;;;;;;;;;;;;;;;;;:::i;26270:162::-;;;;;;;;;;;;;;;;-1:-1:-1;26270:162:0;;:::i;18719:71::-;;;:::i;23521:284::-;;;;;;;;;;;;;;;;-1:-1:-1;23521:284:0;;;;;;;:::i;26912:613::-;;;;;;;;;;;;;;;;-1:-1:-1;26912:613:0;;;;;;;:::i;24159:224::-;;;;;;;;;;;;;;;;-1:-1:-1;24159:224:0;;;;;;;:::i;19033:20::-;;;:::i;20131:31::-;;;;;;;;;;;;;;;;-1:-1:-1;20131:31:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;35920:124;;;;;;;;;;;;;;;;-1:-1:-1;35920:124:0;;;;;;;:::i;18629:25::-;;;:::i;24824:173::-;;;;;;;;;;;;;;;;-1:-1:-1;24824:173:0;-1:-1:-1;;;;;24824:173:0;;:::i;19313:66::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19313:66:0;;;;;;;;;;:::i;25005:192::-;;;;;;;;;;;;;;;;-1:-1:-1;25005:192:0;-1:-1:-1;;;;;25005:192:0;;:::i;35163:144::-;;;;;;;;;;;;;;;;-1:-1:-1;35163:144:0;;:::i;19077:26::-;;;:::i;29098:129::-;;;;;;;;;;;;;;;;-1:-1:-1;29098:129:0;;:::i;29997:294::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29997:294:0;;;;;;;;;;;;;;;;;;;:::i;34987:103::-;;;:::i;23813:228::-;;;;;;;;;;;;;;;;-1:-1:-1;23813:228:0;;;;;;;:::i;35315:125::-;;;;;;;;;;;;;;;;-1:-1:-1;35315:125:0;;:::i;36162:299::-;;;;;;;;;;;;;;;;-1:-1:-1;36162:299:0;-1:-1:-1;;;;;36162:299:0;;:::i;22592:197::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22592:197:0;;;;;;;;;;:::i;22797:155::-;;;;;;;;;;;;;;;;-1:-1:-1;22797:155:0;-1:-1:-1;;;;;22797:155:0;;:::i;19959:27::-;;;:::i;19118:26::-;;;:::i;24605:211::-;;;;;;;;;;;;;;;;-1:-1:-1;24605:211:0;;;;:::i;22960:198::-;;;;;;;;;;;;;;;;-1:-1:-1;22960:198:0;-1:-1:-1;;;;;22960:198:0;;:::i;24391:206::-;;;;;;;;;;;;;;;;-1:-1:-1;24391:206:0;;:::i;29235:497::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29235:497:0;;;;;;;;:::i;18663:47::-;;;:::i;27927:448::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27927:448:0;;;;;;;;;;;;;;;:::i;25205:341::-;;;;;;;;;;;;;;;;-1:-1:-1;25205:341:0;-1:-1:-1;;;;;25205:341:0;;:::i;22334:250::-;;;;;;;;;;;;;;;;-1:-1:-1;22334:250:0;-1:-1:-1;;;;;22334:250:0;;:::i;25612:594::-;;;;;;;;;;;;;;;;-1:-1:-1;25612:594:0;;;;;;;:::i;31616:3302::-;;;;;;;;;;;;;;;;-1:-1:-1;31616:3302:0;;;;;;;:::i;19884:43::-;;;;;;;;;;;;;;;;-1:-1:-1;19884:43:0;;:::i;:::-;;;;-1:-1:-1;;;;;19884:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18797:81;;;:::i;21492:834::-;;;;;;;;;;;;;;;;-1:-1:-1;21492:834:0;;;-1:-1:-1;;;;;21492:834:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28782:248::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28782:248:0;;;;;;;;:::i;23166:347::-;23269:10;;-1:-1:-1;;;;;23269:10:0;23255;:24;;:52;;-1:-1:-1;23297:10:0;;-1:-1:-1;;;;;23297:10:0;23283;:24;23255:52;23247:91;;;;;-1:-1:-1;;;23247:91:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23247:91:0;;;;;;;;;;;;;;;23349:23;23356:16;;23349:23;:::i;:::-;23388:7;23383:123;23405:17;:24;23401:1;:28;;;23383:123;;;23451:16;23473:17;23491:1;23473:20;;;;;;;;;;;;;;;;;;;;;23451:43;;;;;;;;-1:-1:-1;23451:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23431:3;23383:123;;;;23166:347;:::o;29740:249::-;29864:10;;-1:-1:-1;;;;;29864:10:0;29850;:24;;:52;;-1:-1:-1;29892:10:0;;-1:-1:-1;;;;;29892:10:0;29878;:24;29850:52;29842:91;;;;;-1:-1:-1;;;29842:91:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;29842:91:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;29944:20:0;;;;;;;:12;:20;;;;;;;;:29;;;;;;;;;;;:37;;;;;;;;:::i;:::-;;29740:249;;;:::o;35490:261::-;35560:7;35584:16;;;:7;:16;;;;;:25;;;;;:30;35580:44;;-1:-1:-1;35623:1:0;35616:8;;35580:44;35693:16;;;;:7;:16;;;;;;;;;:27;;;35677:66;;-1:-1:-1;;;35677:66:0;;35737:4;35677:66;;;;;;-1:-1:-1;;;;;35693:27:0;;;;35677:51;;:66;;;;;35693:16;;35677:66;;;;;35693:27;35677:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35677:66:0;;-1:-1:-1;35490:261:0;;;;:::o;18986:40::-;;;-1:-1:-1;;;;;18986:40:0;;:::o;18597:25::-;;;-1:-1:-1;;;;;18597:25:0;;:::o;19995:26::-;;;;;;:::o;27533:386::-;27668:10;;-1:-1:-1;;;;;27668:10:0;27654;:24;;:52;;-1:-1:-1;27696:10:0;;-1:-1:-1;;;;;27696:10:0;27682;:24;27654:52;27646:91;;;;;-1:-1:-1;;;27646:91:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27646:91:0;;;;;;;;;;;;;;;27752:14;;;27748:164;;27799:4;-1:-1:-1;;;;;27783:27:0;;27811:7;27783:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27748:164;;;27863:4;-1:-1:-1;;;;;27852:24:0;;27877:13;27892:7;27852:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27533:386;;;;:::o;36568:783::-;36731:10;;36684:12;;-1:-1:-1;;;;;36731:10:0;36717;:24;36709:48;;;;;-1:-1:-1;;;36709:48:0;;;;;;;;;;;;-1:-1:-1;;;36709:48:0;;;;;;;;;;;;;;;36770:21;36814:9;36808:23;36835:1;36808:28;36804:179;;;-1:-1:-1;36864:4:0;36804:179;;;36952:9;36936:27;;;;;;36966:4;36912:59;;;;;;-1:-1:-1;;;;;36912:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36912:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36901:70;;36804:179;37056:12;37070:23;37097:6;-1:-1:-1;;;;;37097:11:0;37116:5;37123:8;37097:35;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37097:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37055:77;;;;37151:7;37143:102;;;;-1:-1:-1;;;37143:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37282:6;-1:-1:-1;;;;;37263:50:0;;37290:5;37297:9;37308:4;37263:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37263:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37333:10;36568:783;-1:-1:-1;;;;;;;36568:783:0:o;18885:92::-;;;-1:-1:-1;;;;;18885:92:0;;:::o;28383:391::-;28519:10;;-1:-1:-1;;;;;28519:10:0;28505;:24;;:52;;-1:-1:-1;28547:10:0;;-1:-1:-1;;;;;28547:10:0;28533;:24;28505:52;28497:91;;;;;-1:-1:-1;;;28497:91:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;28497:91:0;;;;;;;;;;;;;;;28603:14;;;28599:168;;28650:4;-1:-1:-1;;;;;28634:30:0;;28665:7;28634:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28599:168;28717:4;-1:-1:-1;;;;;28706:25:0;;28732:13;28747:7;28706:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19200:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19200:69:0;;-1:-1:-1;19200:69:0;;-1:-1:-1;;19200:69:0:o;26270:162::-;26339:16;;;;:7;:16;;;;;:22;-1:-1:-1;;;;;26339:22:0;26365:10;26339:36;26331:65;;;;;-1:-1:-1;;;26331:65:0;;;;;;;;;;;;-1:-1:-1;;;26331:65:0;;;;;;;;;;;;;;;26407:15;26414:7;26407:6;:15::i;:::-;26270:162;:::o;18719:71::-;;;-1:-1:-1;;;;;18719:71:0;;:::o;23521:284::-;23650:10;;-1:-1:-1;;;;;23650:10:0;23636;:24;;:52;;-1:-1:-1;23678:10:0;;-1:-1:-1;;;;;23678:10:0;23664;:24;23636:52;23628:91;;;;;-1:-1:-1;;;23628:91:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23628:91:0;;;;;;;;;;;;;;;23730:16;;;;:7;:16;;;;;;:40;;:67;23521:284::o;26912:613::-;26993:21;27017:16;;;:7;:16;;;;;27052:10;;-1:-1:-1;;;;;27052:10:0;27066;27052:24;27044:53;;;;;-1:-1:-1;;;27044:53:0;;;;;;;;;;;;-1:-1:-1;;;27044:53:0;;;;;;;;;;;;;;;27112:13;;;;;;27108:198;;27163:15;;;;27147:50;;;-1:-1:-1;;;27147:50:0;;;;;;;;;;-1:-1:-1;;;;;27163:15:0;;;;27147:41;;:50;;;;;27163:15;;27147:50;;;;;;;;27163:15;;27147:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27108:198;;;27241:15;;;;27267:17;;;;27230:64;;;-1:-1:-1;;;27230:64:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27241:15:0;;;;27230:36;;:64;;;;;27241:15;;27230:64;;;;;;;;27241:15;;27230:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27108:198;27335:7;27320:4;:12;;;:22;27316:77;;;27369:4;:12;;;27359:22;;27316:77;27418:12;;;;;:22;;;27403:37;;27455:12;;:23;-1:-1:-1;27451:66:0;;27495:12;;;:22;;;27480:37;;27451:66;26912:613;;;:::o;24159:224::-;24260:10;;-1:-1:-1;;;;;24260:10:0;24246;:24;;:52;;-1:-1:-1;24288:10:0;;-1:-1:-1;;;;;24288:10:0;24274;:24;24246:52;24238:91;;;;;-1:-1:-1;;;24238:91:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24238:91:0;;;;;;;;;;;;;;;24340:16;;;;:7;:16;;;;;;:24;;:35;24159:224::o;19033:20::-;;;-1:-1:-1;;;;;19033:20:0;;:::o;20131:31::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35920:124::-;35989:7;35920:124;;;;;:::o;18629:25::-;;;-1:-1:-1;;;;;18629:25:0;;:::o;24824:173::-;24897:10;;-1:-1:-1;;;;;24897:10:0;24883;:24;;:52;;-1:-1:-1;24925:10:0;;-1:-1:-1;;;;;24925:10:0;24911;:24;24883:52;24875:91;;;;;-1:-1:-1;;;24875:91:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24875:91:0;;;;;;;;;;;;;;;24977:4;:12;;-1:-1:-1;;;;;;24977:12:0;-1:-1:-1;;;;;24977:12:0;;;;;;;;;;24824:173::o;19313:66::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19313:66:0;;:::o;25005:192::-;25089:10;;-1:-1:-1;;;;;25089:10:0;25075;:24;;:52;;-1:-1:-1;25117:10:0;;-1:-1:-1;;;;;25117:10:0;25103;:24;25075:52;25067:91;;;;;-1:-1:-1;;;25067:91:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25067:91:0;;;;;;;;;;;;;;;25169:8;:20;;-1:-1:-1;;;;;;25169:20:0;-1:-1:-1;;;;;25169:20:0;;;;;;;;;;25005:192::o;35163:144::-;35235:7;35270:16;;;:7;:16;;;;;:28;;;-1:-1:-1;;;;;35270:28:0;;35163:144::o;19077:26::-;;;-1:-1:-1;;;;;19077:26:0;;:::o;29098:129::-;29166:7;29193:16;;;:7;:16;;;;;:26;;;;29098:129::o;29997:294::-;30108:10;;-1:-1:-1;;;;;30108:10:0;30094;:24;;:52;;-1:-1:-1;30136:10:0;;-1:-1:-1;;;;;30136:10:0;30122;:24;30094:52;30086:91;;;;;-1:-1:-1;;;30086:91:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;30086:91:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;30188:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;:36;;-1:-1:-1;;;;;;30188:36:0;;;;;;;;;30235:48;;-1:-1:-1;;;30235:48:0;;;;;;;;;-1:-1:-1;;30235:48:0;;;;;30188:19;;30235:22;;:48;;;;;;;;;;;;;;30188:19;30235:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29997:294:0:o;34987:103::-;35075:6;;-1:-1:-1;;;;;35075:6:0;34987:103;:::o;23813:228::-;23914:10;;-1:-1:-1;;;;;23914:10:0;23900;:24;;:52;;-1:-1:-1;23942:10:0;;-1:-1:-1;;;;;23942:10:0;23928;:24;23900:52;23892:91;;;;;-1:-1:-1;;;23892:91:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23892:91:0;;;;;;;;;;;;;;;23994:16;;;;:7;:16;;;;;;:26;;:39;23813:228::o;35315:125::-;35381:7;35408:16;;;:7;:16;;;;;:24;;;;35315:125::o;36162:299::-;36235:15;36263:12;36278:16;;;;;;;;;-1:-1:-1;;;;;36278:16:0;-1:-1:-1;;;;;36278:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36278:23:0;;-1:-1:-1;;;;;;36320:18:0;;36328:10;36320:18;36312:46;;;;;-1:-1:-1;;;36312:46:0;;;;;;;;;;;;-1:-1:-1;;;36312:46:0;;;;;;;;;;;;;;;36381:31;;;-1:-1:-1;;;36381:31:0;;36406:4;36381:31;;;;;;-1:-1:-1;;;;;36381:16:0;;;;;:31;;;;;;;;;;;;;;:16;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36381:31:0;36423:30;;;-1:-1:-1;;;36423:30:0;;-1:-1:-1;;;;;36423:30:0;;;;;;;;;;;;;;;36381:31;;-1:-1:-1;36423:15:0;;;;;;:30;;;;;36381:31;;36423:30;;;;;;;;-1:-1:-1;36423:15:0;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36162:299:0;;;-1:-1:-1;;;36162:299:0:o;22592:197::-;22702:10;;-1:-1:-1;;;;;22702:10:0;22688;:24;22680:48;;;;;-1:-1:-1;;;22680:48:0;;;;;;;;;;;;-1:-1:-1;;;22680:48:0;;;;;;;;;;;;;;;22739:6;-1:-1:-1;;;;;22739:14:0;;22754:7;-1:-1:-1;;22739:42:0;;;;;;;;;;;;;-1:-1:-1;;;;;22739:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22797:155;22883:10;;-1:-1:-1;;;;;22883:10:0;22869;:24;22861:48;;;;;-1:-1:-1;;;22861:48:0;;;;;;;;;;;;-1:-1:-1;;;22861:48:0;;;;;;;;;;;;;;;22920:10;:24;;-1:-1:-1;;;;;;22920:24:0;-1:-1:-1;;;;;22920:24:0;;;;;;;;;;22797:155::o;19959:27::-;;;;:::o;19118:26::-;;;-1:-1:-1;;;;;19118:26:0;;:::o;24605:211::-;24696:10;;-1:-1:-1;;;;;24696:10:0;24682;:24;;:52;;-1:-1:-1;24724:10:0;;-1:-1:-1;;;;;24724:10:0;24710;:24;24682:52;24674:91;;;;;-1:-1:-1;;;24674:91:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24674:91:0;;;;;;;;;;;;;;;24776:14;:32;;-1:-1:-1;;24776:32:0;;;;;;;;;;24605:211::o;22960:198::-;23046:10;;-1:-1:-1;;;;;23046:10:0;23032;:24;;:52;;-1:-1:-1;23074:10:0;;-1:-1:-1;;;;;23074:10:0;23060;:24;23032:52;23024:91;;;;;-1:-1:-1;;;23024:91:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23024:91:0;;;;;;;;;;;;;;;23126:10;:24;;-1:-1:-1;;;;;;23126:24:0;-1:-1:-1;;;;;23126:24:0;;;;;;;;;;22960:198::o;24391:206::-;24481:10;;-1:-1:-1;;;;;24481:10:0;24467;:24;;:52;;-1:-1:-1;24509:10:0;;-1:-1:-1;;;;;24509:10:0;24495;:24;24467:52;24459:91;;;;;-1:-1:-1;;;24459:91:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;24459:91:0;;;;;;;;;;;;;;;24561:12;:28;24391:206::o;29235:497::-;29361:16;;:36;;;-1:-1:-1;;;29361:36:0;;29386:10;29361:36;;;;;;29328:12;;-1:-1:-1;;;;;29361:16:0;;:24;;:36;;;;;;;;;;;;;;:16;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29361:36:0;29353:58;;;;;-1:-1:-1;;;29353:58:0;;;;;;;;;;;;-1:-1:-1;;;29353:58:0;;;;;;;;;;;;;;;29430:16;;:34;;;-1:-1:-1;;;29430:34:0;;-1:-1:-1;;;;;29430:34:0;;;;;;;;;:16;;;;;:27;;:34;;;;;;;;;;;;;;:16;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29430:34:0;29422:59;;;;;-1:-1:-1;;;29422:59:0;;;;;;;;;;;;-1:-1:-1;;;29422:59:0;;;;;;;;;;;;;;;29543:6;;29500:31;;;-1:-1:-1;;;29500:31:0;;;;-1:-1:-1;;;;;29543:6:0;;;;29500:29;;;;;:31;;;;;;;;;;;;;;:29;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29500:31:0;-1:-1:-1;;;;;29500:50:0;;29492:70;;;;;-1:-1:-1;;;29492:70:0;;;;;;;;;;;;-1:-1:-1;;;29492:70:0;;;;;;;;;;;;;;;29593:6;;:31;;;-1:-1:-1;;;29593:31:0;;29618:4;29593:31;;;;;;29573:17;;-1:-1:-1;;;;;29593:6:0;;:16;;:31;;;;;;;;;;;;;;:6;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29593:31:0;;-1:-1:-1;29643:19:0;;;29642:43;;29676:9;29642:43;;;29666:7;29642:43;29696:6;;:28;;;-1:-1:-1;;;29696:28:0;;-1:-1:-1;;;;;29696:28:0;;;;;;;;;;;;;;;29635:50;;-1:-1:-1;29696:6:0;;;:15;;:28;;;;;;;;;;;;;;;:6;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29235:497:0;;;-1:-1:-1;;;;29235:497:0:o;18663:47::-;18705:5;18663:47;:::o;27927:448::-;28043:10;;-1:-1:-1;;;;;28043:10:0;28029;:24;;:52;;-1:-1:-1;28071:10:0;;-1:-1:-1;;;;;28071:10:0;28057;:24;28029:52;28021:91;;;;;-1:-1:-1;;;28021:91:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;28021:91:0;;;;;;;;;;;;;;;28127:14;;;28123:245;;28174:4;-1:-1:-1;;;;;28158:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28123:245;;;28213:9;:14;;28226:1;28213:14;28209:159;;;28244:42;;;-1:-1:-1;;;28244:42:0;;;;;;;;28284:1;28244:42;;;;;;;;-1:-1:-1;;;;;28244:24:0;;;;;:42;;;;;;;;;;;28284:1;28244:24;:42;;;;;;;;;;28209:159;28330:4;-1:-1:-1;;;;;28319:22:0;;28342:13;28319:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27927:448;;;:::o;25205:341::-;25296:10;;-1:-1:-1;;;;;25296:10:0;25282;:24;;:52;;-1:-1:-1;25324:10:0;;-1:-1:-1;;;;;25324:10:0;25310;:24;25282:52;25274:91;;;;;-1:-1:-1;;;25274:91:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25274:91:0;;;;;;;;;;;;;;;25376:9;:22;;-1:-1:-1;;;;;;25376:22:0;-1:-1:-1;;;;;25376:22:0;;;;;;;;;;25409:12;;:59;;;-1:-1:-1;;;25409:59:0;;25438:9;;;25409:59;;;;;;;-1:-1:-1;;25409:59:0;;;;;;:12;;;;;:20;;:59;;;;;;;;;;;;;;;-1:-1:-1;25409:12:0;:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25479:12:0;;25508:9;;;25479:59;;;-1:-1:-1;;;25479:59:0;;-1:-1:-1;;;;;25508:9:0;;;25479:59;;;;;;;-1:-1:-1;;25479:59:0;;;;;:12;;;:20;;:59;;;;;25409;;25479;;;;;;;;:12;;:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22334:250;22417:10;;-1:-1:-1;;;;;22417:10:0;22403;:24;22395:48;;;;;-1:-1:-1;;;22395:48:0;;;;;;;;;;;;-1:-1:-1;;;22395:48:0;;;;;;;;;;;;;;;22454:6;-1:-1:-1;;;;;22454:14:0;;22469:16;;;;;;;;;-1:-1:-1;;;;;22469:16:0;-1:-1:-1;;;;;22469:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22469:23:0;22454:58;;;-1:-1:-1;;;;;;22454:58:0;;;;;;;-1:-1:-1;;;;;22454:58:0;;;;;;;-1:-1:-1;;22454:58:0;;;;;;;;;;22469:23;;22454:58;;;;;;;-1:-1:-1;22454:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22546:9:0;;;22523:53;;;-1:-1:-1;;;22523:53:0;;-1:-1:-1;;;;;22546:9:0;;;22523:53;;;;;;;-1:-1:-1;;22523:53:0;;;;;:14;;;;;;:53;;;;;22454:58;;22523:53;;;;;;;22546:9;22523:14;:53;;;;;;;;;;25612:594;25690:21;25714:16;;;:7;:16;;;;;25749:10;;-1:-1:-1;;;;;25749:10:0;25763;25749:24;25741:53;;;;;-1:-1:-1;;;25741:53:0;;;;;;;;;;;;-1:-1:-1;;;25741:53:0;;;;;;;;;;;;;;;25809:14;;;;25805:88;;;25850:6;;:31;;;-1:-1:-1;;;25850:31:0;;25875:4;25850:31;;;;;;-1:-1:-1;;;;;25850:6:0;;;;:16;;:31;;;;;;;;;;;;;;;:6;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25850:31:0;;-1:-1:-1;25805:88:0;25907:13;;;;;;25903:194;;25958:15;;;;25942:47;;;-1:-1:-1;;;25942:47:0;;;;;;;;;;-1:-1:-1;;;;;25958:15:0;;;;25942:38;;:47;;;;;25958:15;;25942:47;;;;;;;;25958:15;;25942:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25903:194;;;26033:15;;;;26058:17;;;;26022:63;;;-1:-1:-1;;;26022:63:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26033:15:0;;;;26022:35;;:63;;;;;26033:15;;26022:63;;;;;;;;26033:15;;26022:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25903:194;26122:12;;;;:25;;26139:7;26122:16;:25::i;:::-;26107:12;;;:40;26173:12;;:25;;26190:7;26173:16;:25::i;:::-;26158:12;:40;-1:-1:-1;;;25612:594:0:o;31616:3302::-;31715:16;;:23;;;-1:-1:-1;;;31715:23:0;;;;31700:12;;-1:-1:-1;;;;;31715:16:0;;:21;;:23;;;;;;;;;;;;;;:16;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31715:23:0;31795:16;;:32;;;-1:-1:-1;;;31795:32:0;;31766:10;31795:32;;;;;;;;31715:23;;-1:-1:-1;31766:10:0;;-1:-1:-1;;;;;31795:16:0;;;;:24;;:32;;;;;31715:23;;31795:32;;;;;;;;:16;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31795:32:0;31787:51;;;;;-1:-1:-1;;;31787:51:0;;;;;;;;;;;;-1:-1:-1;;;31787:51:0;;;;;;;;;;;;;;;31903:21;31927:16;;;:7;:16;;;;;31954:15;31935:7;31954:6;:15::i;:::-;32003:16;;;;32055:36;;;-1:-1:-1;;;32055:36:0;;32085:4;32055:36;;;;;;-1:-1:-1;;;;;32003:16:0;;;;31982:18;;32003:16;;32055:21;;:36;;;;;;;;;;;;;;;32003:16;32055:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32055:36:0;32125:28;;;;32055:36;;-1:-1:-1;32108:45:0;;32104:58;;;32155:7;;;;;;;32104:58;32216:4;;32174:64;;32194:11;;-1:-1:-1;;;;;32216:4:0;32223:14;32174:11;:64::i;:::-;32267:4;;:29;;;-1:-1:-1;;;32267:29:0;;32290:4;32267:29;;;;;;32249:15;;-1:-1:-1;;;;;32267:4:0;;:14;;:29;;;;;;;;;;;;;;:4;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32267:29:0;;-1:-1:-1;32313:11:0;;32309:2602;;32341:17;32377:15;32411:31;32495:1;32467:16;;;;;;;;;-1:-1:-1;;;;;32467:16:0;-1:-1:-1;;;;;32467:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32467:25:0;:29;32463:192;;;32527:59;18705:5;32527:38;32539:16;;;;;;;;;-1:-1:-1;;;;;32539:16:0;-1:-1:-1;;;;;32539:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32539:25:0;32527:7;;:11;:38::i;:::-;:42;;:59::i;:::-;32517:69;-1:-1:-1;32617:22:0;:9;32517:69;32617:13;:22::i;:::-;32605:34;;32463:192;32675:16;;:41;;;-1:-1:-1;;;32675:41:0;;;;32719:1;;-1:-1:-1;;;;;32675:16:0;;:39;;:41;;;;;;;;;;;;;;:16;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32675:41:0;:45;32671:256;;;32767:75;18705:5;32767:54;32779:16;;;;;;;;;-1:-1:-1;;;;;32779:16:0;-1:-1:-1;;;;;32779:39:0;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32767:75;32741:101;-1:-1:-1;32873:38:0;:9;32741:101;32873:13;:38::i;:::-;32861:50;;32671:256;32943:23;32969:29;32996:1;32969:22;:7;32981:9;32969:11;:22::i;:29::-;33105:4;;33120:12;;32943:55;;-1:-1:-1;33085:66:0;;-1:-1:-1;;;;;33105:4:0;;;;33120:12;32943:55;33085:11;:66::i;:::-;33166:15;:13;:15::i;:::-;33208:4;;:29;;;-1:-1:-1;;;33208:29:0;;33231:4;33208:29;;;;;;-1:-1:-1;;;;;33208:4:0;;;;:14;;:29;;;;;;;;;;;;;;;:4;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33208:29:0;33296:16;;:31;;;-1:-1:-1;;;33296:31:0;;;;33208:29;;-1:-1:-1;33273:20:0;;-1:-1:-1;;;;;33296:16:0;;;;:29;;:31;;;;;33208:29;;33296:31;;;;;;;;:16;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33296:31:0;33374:16;;:36;;;-1:-1:-1;;;33374:36:0;;;;33296:31;;-1:-1:-1;33346:25:0;;-1:-1:-1;;;;;33374:16:0;;;;:34;;:36;;;;;33296:31;;33374:36;;;;;;;;:16;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33374:36:0;;-1:-1:-1;33435:11:0;;;;;:46;;-1:-1:-1;;;;;;33450:31:0;;;;33435:46;33431:369;;;33549:7;33510:36;:7;33522:23;33510:11;:36::i;:::-;:46;33506:149;;;33595:36;:7;33607:23;33595:11;:36::i;:::-;33585:46;;33506:149;33677:4;;:41;;;-1:-1:-1;;;33677:41:0;;-1:-1:-1;;;;;33677:41:0;;;;;;;;;;;;;;;:4;;;;;:13;;:41;;;;;;;;;;;;;;:4;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33751:4:0;;:29;;;-1:-1:-1;;;33751:29:0;;33774:4;33751:29;;;;;;-1:-1:-1;;;;;33751:4:0;;;;:14;;:29;;;;;33677:41;;33751:29;;;;;;;;:4;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33751:29:0;;-1:-1:-1;33431:369:0;33850:1;33824:23;:27;:57;;;;-1:-1:-1;;;;;;33855:26:0;;;;33824:57;33820:389;;;33925:16;;:27;;;-1:-1:-1;;;33925:27:0;;;;33906:16;;-1:-1:-1;;;;;33925:16:0;;:25;;:27;;;;;;;;;;;;;;:16;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33925:27:0;33995:4;;33925:27;;-1:-1:-1;33975:45:0;;-1:-1:-1;;;;;33995:4:0;33925:27;34012:7;33975:11;:45::i;:::-;34050:8;-1:-1:-1;;;;;34043:25:0;;34069:12;34090:8;-1:-1:-1;;;;;34083:26:0;;34118:4;34083:41;;;;;;;;;;;;;-1:-1:-1;;;;;34083:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34083:41:0;34043:82;;;-1:-1:-1;;;;;;34043:82:0;;;;;;;-1:-1:-1;;;;;34043:82:0;;;;;;;;;;;;;;;;;;;;34083:41;;34043:82;;;;;;;-1:-1:-1;34043:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34148:41:0;;;-1:-1:-1;;;34148:41:0;;;;-1:-1:-1;;;;;34148:39:0;;;;;:41;;;;;34043:82;;34148:41;;;;;;;;:39;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;33820:389:0;-1:-1:-1;;34262:6:0;;:31;;;-1:-1:-1;;;34262:31:0;;34287:4;34262:31;;;;;;34240:19;;-1:-1:-1;;;;;34262:6:0;;:16;;:31;;;;;;;;;;;;;;:6;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34262:31:0;;-1:-1:-1;34312:15:0;;34308:592;;-1:-1:-1;;34352:11:0;:32;34348:537;;;34510:6;;:34;;;-1:-1:-1;;;34510:34:0;;-1:-1:-1;;;;;34510:34:0;;;;;;;;;;;;;;;:6;;;;;:15;;:34;;;;;;;;;;;;;;:6;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34348:537:0;;-1:-1:-1;34348:537:0;;34597:6;;:37;;;-1:-1:-1;;;34597:37:0;;34622:4;34597:37;;;;-1:-1:-1;;;;;34597:37:0;;;;;;;;;34637:11;;34597:6;;;;;:16;;:37;;;;;;;;;;;;;;;:6;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34597:37:0;:51;34593:191;;;34677:6;;:23;;;-1:-1:-1;;;34677:23:0;;-1:-1:-1;;;;;34677:23:0;;;;;;;:6;:23;;;;;;;;:6;;;:14;;:23;;;;;;;;;;;;;;;;;;:6;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34727:6:0;;:33;;;-1:-1:-1;;;34727:33:0;;-1:-1:-1;;;;;34727:33:0;;;;;;;;;;;;;;;:6;;;;;:14;;:33;;;;;34677:23;;34727:33;;;;;;;:6;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34593:191:0;34822:4;-1:-1:-1;;;;;34806:33:0;;34840:11;34853;34806:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34348:537;32309:2602;;;;;31616:3302;;;;;;;;:::o;19884:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19884:43:0;;;;;;;;;;;;;;;;;;;;;;:::o;18797:81::-;;;-1:-1:-1;;;;;18797:81:0;;:::o;21492:834::-;21724:10;;-1:-1:-1;;;;;21724:10:0;21710;:24;21702:48;;;;;-1:-1:-1;;;21702:48:0;;;;;;;;;;;;-1:-1:-1;;;21702:48:0;;;;;;;;;;;;;;;21761:16;;;;:7;:16;;;;;;;;:31;;-1:-1:-1;;;;;;21761:31:0;;;-1:-1:-1;;;;;21761:31:0;;;;;;;;;-1:-1:-1;21803:28:0;;:43;;;;;;;;;;;;;21857:27;;;:41;;;;;;;;;;;;21909:29;;;:45;;;21965:40;;;;:67;;;22043:25;;;:37;;-1:-1:-1;;22043:37:0;;;;;;;22091:26;;;;:39;;;22170:9;;22141:59;;-1:-1:-1;;;22141:59:0;;22170:9;;22141:59;;;;;;;-1:-1:-1;;22141:59:0;;;;;;21803:43;;22141:20;;:59;;;;;21761:16;;22141:59;;;;;;;;;;21803:43;22141:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22211:6:0;;:41;;;-1:-1:-1;;;22211:41:0;;-1:-1:-1;;;;;22211:41:0;;;;;;;-1:-1:-1;;22211:41:0;;;;;;:6;;;;;:14;;:41;;;;;22141:59;;22211:41;;;;;;;:6;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22263:6:0;;:55;;;-1:-1:-1;;;22263:55:0;;-1:-1:-1;;;;;22263:55:0;;;;;;;-1:-1:-1;;22263:55:0;;;;;;:6;;;;;:14;;:55;;;;;22211:41;;22263:55;;;;;;;:6;;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;21492:834:0:o;28782:248::-;28893:10;;-1:-1:-1;;;;;28893:10:0;28879;:24;;:52;;-1:-1:-1;28921:10:0;;-1:-1:-1;;;;;28921:10:0;28907;:24;28879:52;28871:91;;;;;-1:-1:-1;;;28871:91:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;28871:91:0;;;;;;;;;;;;;;;28984:4;-1:-1:-1;;;;;28973:34:0;;29008:13;28973:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28782:248;;:::o;26440:405::-;26493:21;26517:16;;;:7;:16;;;;;26548:13;;;;;;26544:294;;26599:4;:15;;;;;;;;;;-1:-1:-1;;;;;26599:15:0;-1:-1:-1;;;;;26583:42:0;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26544:294;;;26649:13;;;;;;;:18;26645:193;;;26695:15;;;;26720:17;;;;26684:57;;;-1:-1:-1;;;26684:57:0;;;;;;;;;26695:15;26684:57;;;;;;;;-1:-1:-1;;;;;26695:15:0;;;;26684:35;;:57;;;;;26695:15;26684:57;;;;;;26695:15;;26684:57;;;;;;;;;;26645:193;26785:15;;;;26808:17;;;;26774:52;;;-1:-1:-1;;;26774:52:0;;;;;;;;;;-1:-1:-1;;;;;26785:15:0;;;;26774:33;;:52;;;;;26785:15;;26774:52;;;;;;;;26785:15;;26774:52;;;;;;;;;;902:181;960:7;992:5;;;1016:6;;;;1008:46;;;;;-1:-1:-1;;;1008:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1074:1;902:181;-1:-1:-1;;;902:181:0:o;30299:897::-;-1:-1:-1;;;;;30406:19:0;;;30390:13;30406:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;30449:19;;30445:744;;30596:89;;;-1:-1:-1;;;30596:89:0;;-1:-1:-1;;;;;30596:89:0;;;;;;;;;;;;;;;;;;;;30664:1;30596:89;;;;-1:-1:-1;;30596:89:0;;;;;;:41;;;;;;:89;;;;;;;;;;;-1:-1:-1;30596:41:0;:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30445:744:0;;-1:-1:-1;30445:744:0;;-1:-1:-1;;;;;30757:20:0;;;;;;;:12;:20;;;;;;;;:29;;;;;;;;;;;;30733:53;;;;;;;;;;;;;;;;;:21;;:53;;;30757:29;30733:53;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30733:53:0;;;;;;;;;;;;;;;;;;;;;;;30805:4;:11;30820:1;30805:16;30801:195;;;30893:16;;;30907:1;30893:16;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30893:16:0;30886:23;;30938:6;30928:4;30933:1;30928:7;;;;;;;;;;;;;:16;-1:-1:-1;;;;;30928:16:0;;;-1:-1:-1;;;;;30928:16:0;;;;;30973:7;30963:4;30968:1;30963:7;;;;;;;;;;;;;:17;-1:-1:-1;;;;;30963:17:0;;;-1:-1:-1;;;;;30963:17:0;;;;;30801:195;31095:9;;-1:-1:-1;;;;;31095:9:0;:34;31130:7;31095:9;31142:4;31156;31163:13;:3;31171:4;31163:7;:13::i;:::-;31095:82;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31095:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31095:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31095:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31095:82:0;;;;;;;;;;;;-1:-1:-1;31095:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30445:744;30299:897;;;;:::o;2256:471::-;2314:7;2559:6;2555:47;;-1:-1:-1;2589:1:0;2582:8;;2555:47;2626:5;;;2630:1;2626;:5;:1;2650:5;;;;;:10;2642:56;;;;-1:-1:-1;;;2642:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3203:132;3261:7;3288:39;3292:1;3295;3288:39;;;;;;;;;;;;;;;;;:3;:39::i;1366:136::-;1424:7;1451:43;1455:1;1458;1451:43;;;;;;;;;;;;;;;;;:3;:43::i;31204:346::-;31360:9;;;31391:12;;31414;;31429:37;;;-1:-1:-1;;;31429:37:0;;31460:4;31429:37;;;;;;;;-1:-1:-1;;;;;31360:9:0;;;;:22;;31391:12;;;;31414;;;;31391;;31429:22;;:37;;;;;;;;;;;;;;;31391:12;31429:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31429:37:0;31468:12;;:37;;;-1:-1:-1;;;31468:37:0;;31499:4;31468:37;;;;;;-1:-1:-1;;;;;31468:12:0;;;;:22;;:37;;;;;31429;;31468;;;;;;;;:12;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31468:37:0;31507:1;;31521:4;31528:13;:3;31536:4;31528:7;:13::i;:::-;31360:182;;;;;;;;;;;;;-1:-1:-1;;;;;31360:182:0;;;;;;-1:-1:-1;;;;;31360:182:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31360:182:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3831:278;3917:7;3952:12;3945:5;3937:28;;;;-1:-1:-1;;;3937:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3976:9;3992:1;3988;:5;;;;;;;3831:278;-1:-1:-1;;;;;3831:278:0:o;1805:192::-;1891:7;1927:12;1919:6;;;;1911:29;;;;-1:-1:-1;;;1911:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1963:5:0;;;1805:192::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://94f2ae6747923d75b5d9886666473ab42a54e2436e1b3349d748f3d38ebe16d9
Loading...
Loading
Loading...
Loading
Net Worth in USD
$3.54
Net Worth in ETH
0.001768
Token Allocations
DRC
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $0.00 | 595.3229 | $0.00 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.