More Info
Private Name Tags
ContractCreator
Latest 4 from a total of 4 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Remove Liquidity | 6399002 | 51 days ago | IN | 0 S | 0.00528643 | ||||
Remove Liquidity | 6392935 | 51 days ago | IN | 0 S | 0.00907005 | ||||
Set Swap Fee Rat... | 6003778 | 54 days ago | IN | 0 S | 0.0024838 | ||||
Set Vault Addres... | 6003772 | 54 days ago | IN | 0 S | 0.0025019 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
PoolV2
Compiler Version
v0.8.26+commit.8a97fa7a
Optimization Enabled:
Yes with 100 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.0;import {OwnableRoles} from "../lib/solady/src/auth/OwnableRoles.sol";import {ERC20} from "../lib/solady/src/tokens/ERC20.sol";import {ReentrancyGuard} from "../lib/solady/src/utils/ReentrancyGuard.sol";import {FixedPointMathLib} from "../lib/solady/src/utils/FixedPointMathLib.sol";import {SafeTransferLib} from "../lib/solady/src/utils/SafeTransferLib.sol";import {IRateProvider} from "./RateProvider/IRateProvider.sol";import {LogExpMath} from "./BalancerLibCode/LogExpMath.sol";import {PoolToken} from "./PoolToken.sol";contract PoolV2 is OwnableRoles, ReentrancyGuard {uint256 constant PRECISION = 1_000_000_000_000_000_000;uint256 constant MAX_NUM_TOKENS = 32;uint256 constant ALL_TOKENS_FLAG =14_528_991_250_861_404_666_834_535_435_384_615_765_856_667_510_756_806_797_353_855_100_662_256_435_713; // sum((i+1) << 8*i)uint256 constant POOL_VB_MASK = 2 ** 128 - 1;uint128 constant POOL_VB_SHIFT = 128;uint256 constant VB_MASK = 2 ** 96 - 1;uint256 constant RATE_MASK = 2 ** 80 - 1;uint128 constant RATE_SHIFT = 96;uint128 constant PACKED_WEIGHT_SHIFT = 176;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.4;import {Ownable} from "./Ownable.sol";/// @notice Simple single owner and multiroles authorization mixin./// @author Solady (https://github.com/vectorized/solady/blob/main/src/auth/OwnableRoles.sol)////// @dev Note:/// This implementation does NOT auto-initialize the owner to `msg.sender`./// You MUST call the `_initializeOwner` in the constructor / initializer.////// While the ownable portion follows/// [EIP-173](https://eips.ethereum.org/EIPS/eip-173) for compatibility,/// the nomenclature for the 2-step ownership handover may be unique to this codebase.abstract contract OwnableRoles is Ownable {/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* EVENTS *//*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*//// @dev The `user`'s roles is updated to `roles`./// Each bit of `roles` represents whether the role is set.event RolesUpdated(address indexed user, uint256 indexed roles);/// @dev `keccak256(bytes("RolesUpdated(address,uint256)"))`.uint256 private constant _ROLES_UPDATED_EVENT_SIGNATURE =
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.4;/// @notice Simple ERC20 + EIP-2612 implementation./// @author Solady (https://github.com/vectorized/solady/blob/main/src/tokens/ERC20.sol)/// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC20.sol)/// @author Modified from OpenZeppelin (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol)////// @dev Note:/// - The ERC20 standard allows minting and transferring to and from the zero address,/// minting and transferring zero tokens, as well as self-approvals./// For performance, this implementation WILL NOT revert for such actions./// Please add any checks with overrides if desired./// - The `permit` function uses the ecrecover precompile (0x1).////// If you are overriding:/// - NEVER violate the ERC20 invariant:/// the total sum of all balances must be equal to `totalSupply()`./// - Check that the overridden function is actually used in the function you want to/// change the behavior of. Much of the code has been manually inlined for performance.abstract contract ERC20 {/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* CUSTOM ERRORS *//*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*//// @dev The total supply has overflowed.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.4;/// @notice Reentrancy guard mixin./// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/ReentrancyGuard.sol)abstract contract ReentrancyGuard {/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* CUSTOM ERRORS *//*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*//// @dev Unauthorized reentrant call.error Reentrancy();/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* STORAGE *//*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*//// @dev Equivalent to: `uint72(bytes9(keccak256("_REENTRANCY_GUARD_SLOT")))`./// 9 bytes is large enough to avoid collisions with lower slots,/// but not too large to result in excessive bytecode bloat.uint256 private constant _REENTRANCY_GUARD_SLOT = 0x929eee149b4bd21268;/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* REENTRANCY GUARD *//*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.4;/// @notice Arithmetic library with operations for fixed-point numbers./// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/FixedPointMathLib.sol)/// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/FixedPointMathLib.sol)library FixedPointMathLib {/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* CUSTOM ERRORS *//*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*//// @dev The operation failed, as the output exceeds the maximum value of uint256.error ExpOverflow();/// @dev The operation failed, as the output exceeds the maximum value of uint256.error FactorialOverflow();/// @dev The operation failed, due to an overflow.error RPowOverflow();/// @dev The mantissa is too big to fit.error MantissaOverflow();/// @dev The operation failed, due to an multiplication overflow.error MulWadFailed();
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.4;/// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values./// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/SafeTransferLib.sol)/// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/SafeTransferLib.sol)/// @author Permit2 operations from (https://github.com/Uniswap/permit2/blob/main/src/libraries/Permit2Lib.sol)////// @dev Note:/// - For ETH transfers, please use `forceSafeTransferETH` for DoS protection.library SafeTransferLib {/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* CUSTOM ERRORS *//*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*//// @dev The ETH transfer has failed.error ETHTransferFailed();/// @dev The ERC20 `transferFrom` has failed.error TransferFromFailed();/// @dev The ERC20 `transfer` has failed.error TransferFailed();/// @dev The ERC20 `approve` has failed.error ApproveFailed();
1234567891011// SPDX-License-Identifier: MITpragma solidity ^0.8.0;interface IRateProvider {function rate(address token) external view returns (uint256);}/// @dev returns (rate, quote token decimals)interface IRateProviderV2 {function rate(address token) external view returns (uint256, uint8);}
12345678910111213141516171819202122232425// SPDX-License-Identifier: MITpragma solidity ^0.8.0;/* solhint-disable *//*** @dev Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument).* @dev forked from https://github.com/balancer/balancer-v2-monorepo/blob/599b0cd8f744e1eabef3600d79a2c2b0aea3ddcb/pkg/solidity-utils/contracts/math/LogExpMath.sol** Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural* exponentiation and logarithm (where the base is Euler's number).** @author Fernando Martinelli - @fernandomartinelli* @author Sergio Yuhjtman - @sergioyuhjtman* @author Daniel Fernandez - @dmf7z*/library LogExpMath {// All fixed point multiplications and divisions are inlined. This means we need to divide by ONE when multiplying// two numbers, and multiply by ONE when dividing them.// All arguments and return values are 18 decimal fixed point numbers.int256 constant ONE_18 = 1e18;// Internally, intermediate values are computed with higher precision as 20 decimal fixed point numbers, and in the// case of ln36, 36 decimals.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.0;import {ERC20} from "../lib/solady/src/tokens/ERC20.sol";import {Ownable} from "../lib/solady/src/auth/Ownable.sol";contract PoolToken is ERC20, Ownable {/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* ERRORS *//*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/error Token__CallerIsNotPool();error Token__PoolAddressCannotBeZero();error Token__VaultAddressCannotBeZero();error Token__RecipientCannotBeZeroAddress();error Token__PerformanceFeeCannotExceed8000bps();error Token__PoolAddressAlreadySet();error Token__VaultAddressAlreadySet();/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* EVENTS *//*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/event PoolAddressSet(address newPoolAddress);event VaultAddressSet(address newVaultAddress);event PerformanceFeeSet(uint256 performanceFee);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.4;/// @notice Simple single owner authorization mixin./// @author Solady (https://github.com/vectorized/solady/blob/main/src/auth/Ownable.sol)////// @dev Note:/// This implementation does NOT auto-initialize the owner to `msg.sender`./// You MUST call the `_initializeOwner` in the constructor / initializer.////// While the ownable portion follows/// [EIP-173](https://eips.ethereum.org/EIPS/eip-173) for compatibility,/// the nomenclature for the 2-step ownership handover may be unique to this codebase.abstract contract Ownable {/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*//* CUSTOM ERRORS *//*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*//// @dev The caller is not authorized to call the function.error Unauthorized();/// @dev The `newOwner` cannot be the zero address.error NewOwnerIsZeroAddress();/// @dev The `pendingOwner` does not have a valid handover request.error NoHandoverRequest();
1234567891011121314151617181920212223242526{"remappings": ["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/","solady/=lib/solady/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/"],"optimizer": {"enabled": true,"runs": 100},"metadata": {"useLiteralContent": false,"bytecodeHash": "ipfs","appendCBOR": true},"outputSelection": {"*": {"*": ["evm.bytecode","evm.deployedBytecode","devdoc","userdoc",
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"tokenAddress_","type":"address"},{"internalType":"uint256","name":"amplification_","type":"uint256"},{"internalType":"address[]","name":"tokens_","type":"address[]"},{"internalType":"address[]","name":"rateProviders_","type":"address[]"},{"internalType":"uint256[]","name":"weights_","type":"uint256[]"},{"internalType":"address","name":"owner_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyInitialized","type":"error"},{"inputs":[],"name":"NewOwnerIsZeroAddress","type":"error"},{"inputs":[],"name":"NoHandoverRequest","type":"error"},{"inputs":[],"name":"Pool__AlreadyPaused","type":"error"},{"inputs":[],"name":"Pool__AmountsMustBeNonZero","type":"error"},{"inputs":[],"name":"Pool__BandsOutOfBounds","type":"error"},{"inputs":[],"name":"Pool__CannotBeZeroAddress","type":"error"},{"inputs":[],"name":"Pool__CannotRescuePoolToken","type":"error"},{"inputs":[],"name":"Pool__IndexOutOfBounds","type":"error"},{"inputs":[],"name":"Pool__InitialDepositAmountMustBeNonZero","type":"error"},{"inputs":[],"name":"Pool__InputOutputTokensSame","type":"error"},{"inputs":[],"name":"Pool__InvalidDecimals","type":"error"},{"inputs":[],"name":"Pool__InvalidParams","type":"error"},{"inputs":[],"name":"Pool__InvalidRateProvided","type":"error"},{"inputs":[],"name":"Pool__Killed","type":"error"},{"inputs":[],"name":"Pool__LpAmountSuppliedIsLessThanChangeInSupply","type":"error"},{"inputs":[],"name":"Pool__MaxLimitExceeded","type":"error"},{"inputs":[],"name":"Pool__MustBeInitiatedWithAGreaterThanZero","type":"error"},{"inputs":[],"name":"Pool__MustBeInitiatedWithMoreThanOneToken","type":"error"},{"inputs":[],"name":"Pool__NeedToDepositAtleastOneToken","type":"error"},{"inputs":[],"name":"Pool__NewSupplyIsGreaterThanPrevSupply","type":"error"},{"inputs":[],"name":"Pool__NewWeightsLengthMismatch","type":"error"},{"inputs":[],"name":"Pool__NoConvergence","type":"error"},{"inputs":[],"name":"Pool__NoRate","type":"error"},{"inputs":[],"name":"Pool__NoSurplus","type":"error"},{"inputs":[],"name":"Pool__NotPaused","type":"error"},{"inputs":[],"name":"Pool__Paused","type":"error"},{"inputs":[],"name":"Pool__PoolIsEmpty","type":"error"},{"inputs":[],"name":"Pool__PoolIsFull","type":"error"},{"inputs":[],"name":"Pool__ProposedWeightOutOfRange","type":"error"},{"inputs":[],"name":"Pool__RampActive","type":"error"},{"inputs":[],"name":"Pool__RatioAboveUpperBound","type":"error"},{"inputs":[],"name":"Pool__RatioBelowLowerBound","type":"error"},{"inputs":[],"name":"Pool__SlippageLimitExceeded","type":"error"},{"inputs":[],"name":"Pool__SumOfWeightsMustBeOne","type":"error"},{"inputs":[],"name":"Pool__TokenAlreadyPartOfPool","type":"error"},{"inputs":[],"name":"Pool__TokenDecimalCannotBeZero","type":"error"},{"inputs":[],"name":"Pool__WeightOutOfBounds","type":"error"},{"inputs":[],"name":"Pool__WeightsDoNotAddUp","type":"error"},{"inputs":[],"name":"Pool__ZeroAmount","type":"error"},{"inputs":[],"name":"Reentrancy","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"lpAmount","type":"uint256"}],"name":"AddLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"rateProvider","type":"address"},{"indexed":false,"internalType":"uint256","name":"rate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"weight","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AddToken","type":"event"},{"anonymous":false,"inputs":[],"name":"Kill","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pendingOwner","type":"address"}],"name":"OwnershipHandoverCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pendingOwner","type":"address"}],"name":"OwnershipHandoverRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"}],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"token","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rate","type":"uint256"}],"name":"RateUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"lpAmount","type":"uint256"}],"name":"RemoveLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"token","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lpAmount","type":"uint256"}],"name":"RemoveLiquiditySingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"roles","type":"uint256"}],"name":"RolesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"address","name":"guardian","type":"address"}],"name":"SetGuardian","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amplification","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"weights","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"start","type":"uint256"}],"name":"SetRamp","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rampStep","type":"uint256"}],"name":"SetRampStep","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"token","type":"uint256"},{"indexed":false,"internalType":"address","name":"rateProvider","type":"address"}],"name":"SetRateProvider","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"vaultAddress","type":"address"}],"name":"SetStaking","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rate","type":"uint256"}],"name":"SetSwapFeeRate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"token","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lower","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"upper","type":"uint256"}],"name":"SetWeightBand","type":"event"},{"anonymous":false,"inputs":[],"name":"StopRamp","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenIndex","type":"uint256"},{"indexed":true,"internalType":"address","name":"token","type":"address"}],"name":"TokenRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"}],"name":"Unpause","type":"event"},{"inputs":[{"internalType":"uint256[]","name":"amounts_","type":"uint256[]"},{"internalType":"uint256","name":"minLpAmount_","type":"uint256"},{"internalType":"address","name":"receiver_","type":"address"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"amounts_","type":"uint256[]"},{"internalType":"uint256","name":"minLpAmount_","type":"uint256"},{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"receiver_","type":"address"}],"name":"addLiquidityFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token_","type":"address"},{"internalType":"address","name":"rateProvider_","type":"address"},{"internalType":"uint256","name":"weight_","type":"uint256"},{"internalType":"uint256","name":"lower_","type":"uint256"},{"internalType":"uint256","name":"upper_","type":"uint256"},{"internalType":"uint256","name":"amount_","type":"uint256"},{"internalType":"uint256","name":"amplification_","type":"uint256"},{"internalType":"uint256","name":"minLpAmount_","type":"uint256"},{"internalType":"address","name":"receiver_","type":"address"}],"name":"addToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"amplification","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user_","type":"address"},{"internalType":"uint256","name":"role_","type":"uint256"}],"name":"assignRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cancelOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pendingOwner","type":"address"}],"name":"completeOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"roles","type":"uint256"}],"name":"grantRoles","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"roles","type":"uint256"}],"name":"hasAllRoles","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"roles","type":"uint256"}],"name":"hasAnyRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"kill","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"killed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"result","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pendingOwner","type":"address"}],"name":"ownershipHandoverExpiresAt","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"packedVirtualBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"token_","type":"uint256"}],"name":"packedWeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rampLastTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rampStep","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rampStopTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"token_","type":"uint256"}],"name":"rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rateMultipliers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rateProviders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"lpAmount_","type":"uint256"},{"internalType":"uint256[]","name":"minAmounts_","type":"uint256[]"},{"internalType":"address","name":"receiver_","type":"address"}],"name":"removeLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"token_","type":"uint256"},{"internalType":"uint256","name":"lpAmount_","type":"uint256"},{"internalType":"uint256","name":"minTokenOutAmount_","type":"uint256"},{"internalType":"address","name":"receiver_","type":"address"}],"name":"removeLiquiditySingle","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenIndex_","type":"uint256"},{"internalType":"uint256","name":"lpAmount_","type":"uint256"},{"internalType":"uint256","name":"amplification_","type":"uint256"},{"internalType":"uint256[]","name":"newWeights_","type":"uint256[]"},{"internalType":"uint256","name":"duration_","type":"uint256"}],"name":"removeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"roles","type":"uint256"}],"name":"renounceRoles","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"requestOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token_","type":"address"},{"internalType":"address","name":"receiver_","type":"address"}],"name":"rescue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user_","type":"address"},{"internalType":"uint256","name":"role_","type":"uint256"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"roles","type":"uint256"}],"name":"revokeRoles","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"rolesOf","outputs":[{"internalType":"uint256","name":"roles","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amplification_","type":"uint256"},{"internalType":"uint256[]","name":"weights_","type":"uint256[]"},{"internalType":"uint256","name":"duration_","type":"uint256"},{"internalType":"uint256","name":"start_","type":"uint256"}],"name":"setRamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rampStep_","type":"uint256"}],"name":"setRampStep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"token_","type":"uint256"},{"internalType":"address","name":"rateProvider_","type":"address"}],"name":"setRateProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"feeRate_","type":"uint256"}],"name":"setSwapFeeRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vaultAddress_","type":"address"}],"name":"setVaultAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokens_","type":"uint256[]"},{"internalType":"uint256[]","name":"lower_","type":"uint256[]"},{"internalType":"uint256[]","name":"upper_","type":"uint256[]"}],"name":"setWeightBands","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"token_","type":"uint256"},{"internalType":"address","name":"receiver_","type":"address"}],"name":"skim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopRamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenIn_","type":"uint256"},{"internalType":"uint256","name":"tokenOut_","type":"uint256"},{"internalType":"uint256","name":"tokenInAmount_","type":"uint256"},{"internalType":"uint256","name":"minTokenOutAmount_","type":"uint256"},{"internalType":"address","name":"receiver_","type":"address"}],"name":"swap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapFeeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"targetAmplification","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokens_","type":"uint256[]"}],"name":"updateRates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateWeights","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vaultAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"token_","type":"uint256"}],"name":"virtualBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"virtualBalanceProdSum","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"token_","type":"uint256"}],"name":"weight","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080806040523461030657615cd2803803809161001c8285610453565b833981019060c081830312610306576100348161048a565b91602082015191604081015160018060401b03811161030657826100599183016104b5565b60608201519091906001600160401b038111610306578361007b9183016104b5565b60808201519091906001600160401b0381116103065781019380601f860112156103065784516100aa8161049e565b956100b86040519788610453565b81875260208088019260051b82010192831161030657602001905b8282106104435750505060a06100e9910161048a565b946001600160a01b031680156102b457825194602086116104345760028610610425578583511480159061041a575b6102b457670de0b6b3a7640000811061040b575f55846001555f955f965b60208810156103f45786881461032c576001600160a01b03610158898761051a565b51161561031d576001600160a01b03610171898761051a565b5160058a0180546001600160a01b0319166001600160a01b039390921683169190911790556101a0898661051a565b51161561031d576001600160a01b036101b9898661051a565b5160458a0180546001600160a01b0319166001600160a01b039390921683169190911790556004906020906101ee8b8961051a565b51166040519283809263313ce56760e01b82525afa8015610312575f906102d2575b60ff91501680156102c35760240360ff81116102a05760ff16604d81116102a057600a0a8860250155610243888761051a565b51156102b45769f4240f4240000000000061025e898861051a565b5164e8d4a51000806102708c8b61051a565b510460141b9104171760b01b886065015561028b888761051a565b5181018091116102a057600190970196610136565b634e487b7160e01b5f52601160045260245ffd5b6341598eb160e01b5f5260045ffd5b63f849159d60e01b5f5260045ffd5b506020813d821161030a575b816102eb60209383610453565b81010312610306575160ff811681036103065760ff90610210565b5f80fd5b3d91506102de565b6040513d5f823e3d90fd5b6309867afd60e41b5f5260045ffd5b93509450945050670de0b6b3a764000091505b036103e55760016087556001600160a01b038116638b78c6d8198190555f7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3638b78c6d8600c525f526020600c206001815417809155600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe265f80a3600380546001600160a01b03191691909117905560405161578f90816105438239f35b634c93afb760e11b5f5260045ffd5b93509450945050670de0b6b3a7640000915061033f565b63b0ac429160e01b5f5260045ffd5b508585511415610118565b63a596ef6d60e01b5f5260045ffd5b6317fb4af160e11b5f5260045ffd5b81518152602091820191016100d3565b601f909101601f19168101906001600160401b0382119082101761047657604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b038216820361030657565b6001600160401b0381116104765760051b60200190565b9080601f830112156103065781516104cc8161049e565b926104da6040519485610453565b81845260208085019260051b82010192831161030657602001905b8282106105025750505090565b6020809161050f8461048a565b8152019101906104f5565b805182101561052e5760209160051b010190565b634e487b7160e01b5f52603260045260245ffdfe6102c0806040526004361015610013575f80fd5b5f6101e0525f3560e01c908163047fc9aa14613648575080630912ed77146136245780631082ae95146135de578063183a4f6e146135c65780631c10893f146135a75780631cd64df41461356e5780631f3a0e41146135495780632569296214613500578063267f4cf9146134e35780632797da80146134815780632d3eac441461340f5780632de94807146133dd5780632e3036c7146133ae57806331e7e487146131d35780633a04801d146131b65780633e8847ec14612bc85780633f4ba83a14612b5d57806341c0e1b514612ac6578063430bf08a14612a9b578063455611f214612a795780634a4ee7b114612a515780634bb77d9d1461295e5780634f64b2be146129285780634fdf5d1d14612822578063514e62fc146127e757806354d1f13d1461278f578063562e19df146122c45780635c975abb1461229f57806365c303a5146122665780636e18c5b414611e55578063715018a614611e005780638456cb5914611d8a57806385535cc514611d155780638aa044e414611cbd5780638d56c63914611b915780638da5cb5b14611b625780638e499bcf14611b4257806394068a9314611b0e5780639d76ea5814611ae3578063a3820aa51461191d578063abfed9fd14611853578063b533789714611833578063b6efab3914611813578063c6e1d3e7146117e7578063c7d0a17f146112e0578063cc33448214610e5f578063d1154ff014610dff578063d13630af14610789578063d6c094b31461075d578063dc036c9a14610495578063e7ee6ad614610453578063ef407c3c1461041d578063f04e283e146103c6578063f2fde38b14610381578063f8dc929c14610361578063f8e27f93146102d15763fee81cf414610295575f80fd5b346102ca5760203660031901126102ca576102ae613662565b63389a75e1600c526101e05152602080600c2054604051908152f35b6101e05180fd5b346102ca5760203660031901126102ca5760043560015481101561034c5760208110156103325761030a6080916065015460b01c613c3d565b916088541561032b575b604051938452602084015260408301526060820152f35b5082610314565b634e487b7160e01b6101e05152603260045260246101e051fd5b6367e0bf5f60e01b6101e0515260046101e051fd5b346102ca576101e0513660031901126102ca576020608954604051908152f35b60203660031901126102ca57610395613662565b61039d6138da565b8060601b156103b6576103af906144f7565b6101e05180f35b637448fbae6101e051526004601cfd5b60203660031901126102ca576103da613662565b6103e26138da565b63389a75e1600c52806101e051526020600c20908154421161040d576103af916101e05190556144f7565b636f5e88186101e051526004601cfd5b346102ca5760203660031901126102ca5760043560208110156102ca57604501546040516001600160a01b039091168152602090f35b346102ca5760203660031901126102ca5760043560015481101561034c576020811015610332576001600160501b036020916065015460601c16604051908152f35b346102ca5760603660031901126102ca576004356024356001600160401b0381116102ca576104c89036906004016136ba565b6104d3929192613678565b903068929eee149b4bd21268541461074d573068929eee149b4bd2126855600154808214801590610743575b61072e576002549161051185846137ee565b60028190556003549095906001600160a01b0316803b156102ca57604051632770a7eb60e21b81526101e0519091829081806105518733600484016137fb565b03916101e051905af1801561072057610705575b506040517fd8ae9b9ba89e637bcb66a69ac91e8f688018e81d6f92c57e02226425c8efbdf6339180610598858a836137fb565b0390a2670de0b6b3a76400006101e0516101e0515b60208110156106dc578581146106dc576065810180548a91906105cf90613c1e565b620fffff81989398959295168c6105e68b8b61372b565b906105f09161373e565b98896105fb916137ee565b9461060886938885613c99565b906101e05150558b810264e8d4a5100002920264e8d4a5100002049061062d91614307565b02670de0b6b3a76400009004930193670de0b6b3a7640000810290808204670de0b6b3a764000014901517156106c2576106759161066a9161373e565b6025830154906144b9565b9061068181878d6136f7565b3582106106ad5760058101546001926106a4918b906001600160a01b03166142b6565b019190916105ad565b634647d8b560e01b6101e0515260046101e051fd5b634e487b7160e01b6101e05152601160045260246101e051fd5b5096509450505050506106ef9250613be1565b608b553868929eee149b4bd21268556101e05180f35b6101e0516107129161375c565b6101e0516102ca5787610565565b6040513d6101e051823e3d90fd5b6341598eb160e01b6101e0515260046101e051fd5b50602082116104ff565b63ab143c066101e051526004601cfd5b346102ca5760203660031901126102ca5760043560208110156102ca5760250154604051908152602090f35b346102ca5760803660031901126102ca576004356001600160401b0381116102ca576107b99036906004016136ba565b906107c2613678565b610160526107ce6136a4565b903068929eee149b4bd21268541461074d573068929eee149b4bd2126855600154610100819052830361072e57608b546101e0515f1960e0526001600160801b03821693909260809290921c918391825b6020811015610df2576101005181146108d55761083d8189856136f7565b3580156108c25760258201546001929160089161085991613ccc565b95838301891b17970194861515806108b7575b61087c575b505b0194929461081f565b6108a2906101e0515061089d6108958460650154613c1e565b50909261372b565b61373e565b8060e0511060e0518218021860e05289610871565b5060e051151561086c565b506001906101e09694965160e052610873565b50939490949291925b15610ddd576108ec92613cfa565b6101c0526101c051928160025461012052946101c0519361090f610100516137a8565b60c0526101e0516101a0525b60206101a0511015610dd357610100516101a05114610b27576109426101a05183856136f7565b356101808190526101a0516025015461095a91613ccc565b8015610b09576101e051506109916101a051606501670de0b6b3a76400006109828254613c1e565b6101409592955280949561372b565b0460a0526109b06109a460a051856136ea565b92610140519084613c99565b9055610120516109f2575b505061018051610160516101a051600501546109e2929130916001600160a01b0316613fc6565b60016101a051016101a05261091b565b81670de0b6b3a764000081989a93999794990204670de0b6b3a764000014871517156106c257610b0192610a82610aeb92610a7d610a93670de0b6b3a7640000610a888198610a828f610a4a6101c05186830261373e565b610a596101a05160c0516137da565b526101005161014051620fffff160264e8d4a510000290610a7d908990870261373e565b613f99565b9061372b565b049d60a051906136ea565b9a86610abd610ab182610aa860e0518661372b565b0460a0516137ee565b60865460011c9061372b565b0460808190526101005161014051620fffff160264e8d4a5100002938891610ae4916137ee565b910261373e565b0493610afb60805160a0516137ee565b906136ea565b9487806109bb565b50610120516109e25763f6ef3f5d60e01b6101e0515260046101e051fd5b91959290945b6101205180610d2557505050610b416140ba565b80918015610d105782610b6592915b6101205115926101e0515490610100516141d6565b929096610b7561012051896137ee565b9687151580610d04575b156106ad576003546001600160a01b0316803b156102ca576040516340c10f1960e01b81526101e051909182908180610bbc8e8a600484016137fb565b03916101e051905af1801561072057610ce9575b507f67902069e86c21d5ad116d9df073bf02a2bfdbd591414157cda22d3b8476cd5391610c0589604051938493339785613816565b0390a26101205186929015610cd75750505081610c2e916101e051546101205161010051614106565b60035460045491956001600160a01b039182169290911690610c5090846137ee565b823b156102ca57610c7b9260405180809581946340c10f1960e01b83526101e05196600484016137fb565b03916101e051905af1801561072057610cb8575b5090602093610ca1925b600255613be1565b608b553868929eee149b4bd2126855604051908152f35b6101e051919291610cc89161375c565b6101e0516102ca579084610c8f565b60209650610ca1945090925090610c99565b6101e051610cf69161375c565b6101e0516102ca5789610bd0565b50602435881015610b7f565b63df7da5cd60e01b6101e0515260046101e051fd5b6101e097949392969597515b6020811015610dc257610100518114610dc257610d4f8188886136f7565b3515610dba576065810154610d6390613c1e565b92919050610d738260c0516137da565b519281670de0b6b3a7640000810204670de0b6b3a764000014821517156106c257600193610dae8d670de0b6b3a7640000610db4950261373e565b90614024565b01610d31565b600190610db4565b5081610b6592939495989697610b50565b9195929094610b2d565b631f0ebc5760e21b6101e0515260046101e051fd5b50939490949291926108de565b346102ca5760203660031901126102ca57600435610e1b6138a4565b662386f26fc10000811161072e576020817f15a280e3a8fba7bb6a16834e8c4c8cf503351db60f83e74124075ff74b3d611992608655604051908152a16101e05180f35b346102ca576101203660031901126102ca57610e79613662565b610e8161368e565b6044359160c43591906101043560a4356001600160a01b03821682036102ca57610ea96138a4565b80156112b6576001549160208310156112cb5785156112b6576088546112a1576002541561128c578615158061127b575b1561072e57670de0b6b3a7640000606435118015611268575b61072e57600183018084116106c2576101e05195966001600160a01b038616969586805b602089101561125857878914610fa757505060058701546001600160a01b03168814610f925760658701805490978b91610f5090613c1e565b610f5d909b92919b613c3d565b90819e9381988102670de0b6b3a76400009004900392610f7c93613c76565b90610f8692613c99565b90556001019790610f17565b6364d9dc7160e11b6101e0515260046101e051fd5b909a9750602496999895985b60018060a01b03169a60208c604051998a80926305d4ec6560e11b82528b60048301525afa978815610720576101e05198611220575b50871561120b5760405163313ce56760e01b8152906020826004818b5afa9182156107205761104a8a6110458e61103f61103a61105398670de0b6b3a7640000976101e051916111dc575b5061385a565b61386b565b90613ccc565b61372b565b04928a80613c76565b600185905560058b0180546001600160a01b0319168817905560405163313ce56760e01b815292906020846004818b5afa90811561072057898c948f8f6110ad61103a6110cb976111089b6101e051916111dc575061385a565b602582015560450180546001600160a01b0319169091179055613c99565b60658c01556110fc6110ec6110de6140ba565b80929188826002549b614106565b90966101e0515586600255613be1565b608b5530903390613fc6565b8181111561072e57039060e435821061072e576003546001600160a01b031691823b156102ca576111539260405180809581946340c10f1960e01b83526101e05196600484016137fb565b03916101e051905af18015610720576111b7575b7f3c078e7a1bc2cbd8c7cd625a6d75d084e96e6701c6a324576b75a688b38a1c5360c0878787878c88604051958652602086015260408501526060840152608083015260a0820152a16101e05180f35b6101e0519195949392916111ca9161375c565b6101e0516102ca579091929386611167565b6111fe915060203d602011611204575b6111f6818361375c565b810190613841565b5f611034565b503d6111ec565b639cfd11eb60e01b6101e0515260046101e051fd5b9097506020813d602011611250575b8161123c6020938361375c565b8101031261124c5751968c610fe9565b5f80fd5b3d915061122f565b909a975060249699989598610fb3565b50670de0b6b3a764000060843511610ef3565b50662386f26fc10000871115610eda565b632468d44760e11b6101e0515260046101e051fd5b632ffc992d60e21b6101e0515260046101e051fd5b630b5556e560e11b6101e0515260046101e051fd5b6331cc28bd60e01b6101e0515260046101e051fd5b346102ca5760a03660031901126102ca576064356001600160401b0381116102ca576113109036906004016136ba565b906113196138a4565b6001549060028211156117d25760ff608554166117bd57604435156112b6576088546112a15781600435101561034c575f1982019182116106c2578183036117a8574260885561136b608435426136ea565b6089556020600435101561033257600560043501546001600160a01b0316611392836137a8565b61139b846137a8565b916113a5856137a8565b936113af866137a8565b6101e051909790918291825b8984106116ac5750505050670de0b6b3a764000003611697576101e0515b602081101561168b57858114611476576001906001600160a01b036113fe82866137da565b51166101e051508160050190838060a01b0316838060a01b031982541617905561142881866137da565b51602582015560a082901b82900361144082886137da565b51166101e051508160450190838060a01b0316838060a01b031982541617905561146a81896137da565b516065820155016113d9565b509450505050505b60015480156106c2575f1901806001556114aa6114996140ba565b809291600254948260443591614106565b9190926114b784826137ee565b908411611676578060243510611661576114d3906024356137ee565b806115fb575b506114eb916044356101e05155613be1565b608b556003546001600160a01b0316803b156102ca57604051632770a7eb60e21b81526101e05190918290818061152860243533600484016137fb565b03916101e051905af18015610720576115e0575b506002556040516370a0823160e01b8152306004820152602081602481855afa8015610720576101e051906115ac575b611578915033836142b6565b6004357fb3036f81a7a8205f3b94de16897df636d553839d92289fb7ec72dd2d541328426101e0516101e051a36101e05180f35b506020813d6020116115d8575b816115c66020938361375c565b8101031261124c57611578905161156c565b3d91506115b9565b6101e0516115ed9161375c565b6101e0516102ca578261153c565b6003546001600160a01b031690813b156102ca5760405180926340c10f1960e01b825281806116326101e0519533600484016137fb565b03916101e051905af1801561072057156114d9576101e0516116539161375c565b6101e0516102ca57846114d9565b634f0397ab60e01b6101e0515260046101e051fd5b635d7e4ee960e01b6101e0515260046101e051fd5b5094505050505061147e565b63083aafed60e41b6101e0515260046101e051fd5b600435841461179f5760208410156103325760058401546001600160a01b03166116d682896137da565b5260258401546116e6828a6137da565b5260458401546001600160a01b03166116ff828b6137da565b52606584015461170e90613c1e565b50959061171c8685876136f7565b35968715801561178e575b6117795769f4240f4240000000000064e8d4a510006117498a611758966136ea565b9904601481901b171791613c99565b611762828d6137da565b525f1981146106c2576001809101935b01926113bb565b6303aa729960e61b6101e0515260046101e051fd5b50670de0b6b3a76400008811611727565b92600190611772565b633bfe822760e11b6101e0515260046101e051fd5b63b8c449b360e01b6101e0515260046101e051fd5b63a596ef6d60e01b6101e0515260046101e051fd5b346102ca5760203660031901126102ca5760043560208110156102ca5760650154604051908152602090f35b346102ca576101e0513660031901126102ca576020608a54604051908152f35b346102ca576101e0513660031901126102ca576020608854604051908152f35b346102ca5760403660031901126102ca5760043561186f61368e565b6118776138a4565b60015482101561034c576020821015610332576045820180546001600160a01b0319166001600160a01b038316179055608b549160018101918282116106c2577f908a8bb84530a3f5baf8a0432620a6480e8b2af2e2423dae1222231a90caa5a4936040936118ff916118f991608082901c916001600160801b031690613cfa565b90613be1565b608b5582519182526001600160a01b03166020820152a16101e05180f35b346102ca5760603660031901126102ca576004356001600160401b0381116102ca5761194d9036906004016136ba565b906024356001600160401b0381116102ca5761196d9036906004016136ba565b92906044356001600160401b0381116102ca5761198e9036906004016136ba565b906119976138a4565b83861480611ada575b1561072e57600154936101e0515b602081106119bd576101e05180f35b818114611ad5576119cf8183896136f7565b35908682101561034c57670de0b6b3a76400006119ed828b896136f7565b35111580611ab8575b15611aa3576020821015610332578185611a5583611a37611a4f8b8f8b90611a488660019c60650199611a41611a2c8c54613c1e565b9b919b9a909a613c3d565b50509690986136f7565b35946136f7565b3592613c76565b91613c99565b90557f80394b5329e114f22712d6166857cd77c88256d851082e141591f481227fb8b96040611a85848d8b6136f7565b35611a91858a8a6136f7565b3582519182526020820152a2016119ae565b63bd18ee1f60e01b6101e0515260046101e051fd5b50670de0b6b3a7640000611acd8287876136f7565b3511156119f6565b6103af565b508382146119a0565b346102ca576101e0513660031901126102ca576003546040516001600160a01b039091168152602090f35b346102ca576101e0513660031901126102ca57608b54604080516001600160801b038316815260809290921c602083015290f35b346102ca576101e0513660031901126102ca576020600154604051908152f35b346102ca576101e0513660031901126102ca57638b78c6d819546040516001600160a01b039091168152602090f35b346102ca5760403660031901126102ca57600435611bad61368e565b611bb56138a4565b60015482101561034c57602082101561033257611bd58260650154613c1e565b50670de0b6b3a7640000820291808304670de0b6b3a764000014901517156106c257611c009161373e565b600181018091116106c2576025830154611c19916144b9565b6005909201546040516370a0823160e01b81523060048201526001600160a01b03919091169190602081602481865afa908115610720576101e05191611c8b575b5083811115611c76576103af93611c70916137ee565b916142b6565b63996f8ab960e01b6101e0515260046101e051fd5b90506020813d602011611cb5575b81611ca66020938361375c565b8101031261124c575184611c5a565b3d9150611c99565b346102ca5760203660031901126102ca57600435611cd96138a4565b801561072e576020817f03cd63f3fef742f82f64d7e1775b22c4fe9ed6d2bf0ca7cc04146d620e190ab292608755604051908152a16101e05180f35b346102ca5760203660031901126102ca57611d2e613662565b611d366138a4565b6001600160a01b0316801561072e57600480546001600160a01b031916821790556040519081527f58fd5d9c33114e6edf8ea5d30956f8d1a4ab112b004f99928b4bcf1b87d6666290602090a16101e05180f35b346102ca576101e0513660031901126102ca57611da56138bf565b60855460ff8116611deb5760ff19166001176085556101e05133907f5ee71a369c8672edded508e624ffc9257fa1ae6886ef32905c18e60196bca3999080a26101e05180f35b639784de2160e01b6101e0515260046101e051fd5b6101e0513660031901126102ca57611e166138da565b6101e051638b78c6d819547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a36101e051638b78c6d81981905580f35b346102ca5760803660031901126102ca57611e6e6136a4565b3068929eee149b4bd21268541461074d573068929eee149b4bd212685560015460043581111561072e57608b54611eb990608081901c906001600160801b0316600435600101613cfa565b919060025492611ecb602435856137ee565b60028190556003549091906001600160a01b0316803b156102ca57604051632770a7eb60e21b81526101e051909182908180611f0d60243533600484016137fb565b03916101e051905af180156107205761224b575b506020600435101561033257670de0b6b3a764000092611f6792611f4a60043560650154613c1e565b9691959093610a8264e8d4a510008a620fffff8b16020288613f99565b04966101e051905b60208210612224575b50509664e8d4a5100088611fae888a89611fde9b9c9d8a611f99818c6137ee565b978895620fffff6101e0515495160202614340565b99611fe4611fbc8c896137ee565b670de0b6b3a7640000611fd16086548361372b565b60011c049a8b80926137ee565b9c6136ea565b9a670de0b6b3a7640000810290808204670de0b6b3a764000014901517156106c257612013866120209261373e565b60256004350154906144b9565b9460443586106106ad5788612035918d613c99565b606560043501558015670de0b6b3a76400008083028390041417156106c2578a61207d61208392670de0b6b3a7640000610ae464e8d4a510008f620fffff8f16020285613f99565b936136ea565b976101e0515b602081101561220a578a811461215857600435810361210e57670de0b6b3a76400008802888104670de0b6b3a764000014891517156106c257876120cc9161373e565b908c670de0b6b3a7640000810204670de0b6b3a7640000148d1517156106c2576121088a6001938f8e670de0b6b3a7640000610dae920261373e565b01612089565b606581015461211c90613c1e565b9291670de0b6b3a7640000808202925081159183041417156106c25760019281610dae8e61214d8d6121539661373e565b9261373e565b612108565b5091945091969450602098508492975061217a95505b6121f7575b5050613be1565b608b556005600435015461219a90839083906001600160a01b03166142b6565b6040519060018060a01b031681526004358382015281604082015260243560608201527f7a3728879285f3ca5108b5f39698f28002a6b72cac81653343b8a7dfb75037f160803392a23868929eee149b4bd2126855604051908152f35b9161220192613aac565b90508187612173565b5091945091969450602098508492975061217a955061216e565b90978789146122455761223d8261089d8560019461372b565b980190611f6f565b97611f78565b6101e0516122589161375c565b6101e0516102ca5786611f21565b346102ca5760203660031901126102ca5760043560015481101561034c576020811015610332576020906065015460b01c604051908152f35b346102ca576101e0513660031901126102ca57602060ff608554166040519015158152f35b346102ca5760a03660031901126102ca576084356001600160a01b03811681036102ca573068929eee149b4bd21268541461074d573068929eee149b4bd21268556001546004356024351461277a57806004351080159061276e575b61034c57604435156112b657612355608b5460018060801b0381169060801c9060016024350160081b60016004350117613cfa565b929091602060043510156103325761237260043560650154613c1e565b959094602060243510156103325761238f60243560650154613c1e565b919889986101e051506123aa60043560250154604435613ccc565b956123f9670de0b6b3a76400006123d484611045836123cc8d6086549061372b565b04809c6137ee565b0496610a826123e3898c6136ea565b9d64e8d4a510008d620fffff8b16020290613f99565b908b670de0b6b3a7640000810204670de0b6b3a7640000148c1517156106c2578c80928d8b8d620fffff89160264e8d4a510000291670de0b6b3a764000002906124429161373e565b9061244c91614307565b6124559161373e565b9d6124618f99846136ea565b9061246b916137ee565b80988c6002546101e0515491620fffff8c160264e8d4a51000029461248f95614340565b968761249a916136ea565b9880670de0b6b3a7640000810204670de0b6b3a764000014811517156106c257848d610dae8c670de0b6b3a76400006124d887826124df980261373e565b930261373e565b670de0b6b3a7640000820290828204670de0b6b3a764000014831517156106c2576125099161373e565b9086670de0b6b3a7640000810204670de0b6b3a764000014871517156106c25784612554886125599361254f8a612566978f610dae90670de0b6b3a7640000870261373e565b6137ee565b6144b9565b60256024350154906144b9565b996064358b106106ad57866126a4575b8492612593949261258692613c99565b6065600435015584613c99565b60656024350155670de0b6b3a7640000888102988015908a0490911417156106c2576020976125d8859364e8d4a510006125ea98620fffff6125de9616020290613f99565b9061373e565b91612690575b50613be1565b608b556005600435015461260e9060443590309033906001600160a01b0316613fc6565b6005602435015461262b90839083906001600160a01b03166142b6565b6040519060018060a01b0316815260043583820152602435604082015260443560608201528160808201527fb3e2773606abfd36b5bd91394b3a54d1398336c65005baf7bf7a05efeffaf75b60a03392a23868929eee149b4bd2126855604051908152f35b61269c91600254613aac565b9050816125e4565b670de0b6b3a76400006126be83899e959a9e96949661372b565b049b83670de0b6b3a7640000810204670de0b6b3a764000014841517156106c2576126e98d836136ea565b9182670de0b6b3a7640000810204670de0b6b3a764000014831517156106c25786948e93828d620fffff8e160264e8d4a510000291670de0b6b3a764000002906127329161373e565b9061273c91614307565b61274f91670de0b6b3a76400000261373e565b9d612759916136ea565b91612763916136ea565b979250929092612576565b50806024351015612320565b63a8bf4d5f60e01b6101e0515260046101e051fd5b6101e0513660031901126102ca5763389a75e1600c52336101e051526101e0516020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c926101e0516101e051a26101e05180f35b346102ca5760403660031901126102ca57612800613662565b638b78c6d8600c526101e05152602060243581600c2054161515604051908152f35b346102ca5760403660031901126102ca5761283b613662565b61284361368e565b61284b6138a4565b6001546101e05190926001600160a01b0381169290915b6020811015612919578481146128a35760058101546001600160a01b0316841461288e57600101612862565b63103d1a8760e31b6101e0515260046101e051fd5b509091602493506020905b6040516370a0823160e01b815230600482015294859182905afa918215610720576101e051926128e3575b6103af93506142b6565b91506020833d602011612911575b816128fe6020938361375c565b8101031261124c576103af9251916128d9565b3d91506128f1565b509091602493506020906128ae565b346102ca5760203660031901126102ca5760043560208110156102ca57600501546040516001600160a01b039091168152602090f35b346102ca5760203660031901126102ca576004356001600160401b0381116102ca5761298e9036906004016136ba565b6001546101e051928391905b602083106129ff575b505050156129d8575b608b546129ce916118f991608081901c916001600160801b0390911690613cfa565b608b556101e05180f35b507f201f1e1d1c1b1a191817161514131211100f0e0d0c0b0a0908070605040302016129ac565b90929193828514612a485783612a168685856136f7565b35101561034c57612a288584846136f7565b3560018101919082106106c2576001918660031b1b17940191929061299a565b938293506129a3565b60403660031901126102ca576103af612a68613662565b612a706138da565b60243590614534565b346102ca576101e0513660031901126102ca5760206101e05154604051908152f35b346102ca576101e0513660031901126102ca576004546040516001600160a01b039091168152602090f35b346102ca576101e0513660031901126102ca57612ae161387c565b60855460ff811615612b485760ff8160081c16612b335761ff001916610100176085556101e0517fbe26733c2bf6ff3ea5ba8cfe744422bd49052ff9ed5685c9e81e6f9321dbaddd9080a16101e05180f35b631c6a9ca160e11b6101e0515260046101e051fd5b6363856c5960e01b6101e0515260046101e051fd5b346102ca576101e0513660031901126102ca57612b786138bf565b60855460ff811615612b485760ff8160081c16612b335760ff1916608555337faeb196d352664784d1900b0e7414a8face7d29f4dae8c4b0cf68ed477423bbf46101e0516101e051a26101e05180f35b3461124c57606036600319011261124c576004356001600160401b03811161124c57612bf89036906004016136ba565b90612c01613678565b903068929eee149b4bd2126854146131a9573068929eee149b4bd21268556001546102005261020051830361319a57608b545f19610220526001600160801b038116925f9260809290921c918391825b602081101561318c57610200518114612cf657612c6f8189856136f7565b358015612ce557906008612c8a600193836025015490613ccc565b95838301891b1797019486151580612cd9575b612cad575b505b01949294612c51565b612cc19061089d6108958460650154613c1e565b80610220511061022051821802186102205289612ca2565b50610220511515612c9d565b506001905f61022097959752612ca4565b5095939490949291925b1561317d57612d0e92613cfa565b61028052926102805190849260025495946102805191612d30610200516137a8565b935f610240525b602061024051101561316f57610200516102405114612f7557612d5e6102405183856136f7565b35612d70610240516025015482613ccc565b8015612f5f57612d9e670de0b6b3a764000061024051606501612d938154613c1e565b93919490809661372b565b0461026052612dbb82612db461026051866136ea565b9586613c99565b90558c612df5575b50506102405160050154612de5929150309033906001600160a01b0316613fc6565b6001610240510161024052612d37565b90969a87670de0b6b3a7640000819c949c9b959b0204670de0b6b3a76400001488151715612f4b5761028051612e3590670de0b6b3a76400008a0261373e565b61024051612e43908b6137da565b5261020051620fffff83160264e8d4a51000028b670de0b6b3a76400008a0290612e6c9161373e565b90612e7691613f99565b612e7f9161372b565b670de0b6b3a764000090049a61026051612e98916136ea565b9661022051612ea7908261372b565b670de0b6b3a764000090046102605190612ec0916137ee565b60865460011c612ecf9161372b565b670de0b6b3a764000090049a8b926102005190620fffff160264e8d4a510000292612ef9916137ee565b612f0c91670de0b6b3a76400000261373e565b90612f1691613f99565b612f1f9161372b565b670de0b6b3a76400009004976102605190612f39916137ee565b612f42916136ea565b958a8080612dc3565b634e487b7160e01b5f52601160045260245ffd5b505088612de55763f6ef3f5d60e01b5f5260045ffd5b9295909694979391975b84806130c85750505050612f916140ba565b809180156130b95782612faf92915b8615925f5490610200516141d6565b929097612fbc858a6137ee565b97881515806130ad575b1561309e576003546001600160a01b031691823b1561124c575f61300381948c6040519687809481936340c10f1960e01b83528b600484016137fb565b03925af1928315613093577f67902069e86c21d5ad116d9df073bf02a2bfdbd591414157cda22d3b8476cd539361307e575b506130488a604051938493339785613816565b0390a28691831561306b57505050610c2e9183916101e051549061020051614106565b60209750610ca195509093509150610c99565b5f6130889161375c565b5f6101e0528b613035565b6040513d5f823e3d90fd5b634647d8b560e01b5f5260045ffd5b50602435891015612fc6565b63df7da5cd60e01b5f5260045ffd5b5f9995939998969492985b602081101561315c5761020051811461315c576130f18189896136f7565b351561315457808b6131136131098360650154613c1e565b95919390506137da565b519281670de0b6b3a7640000810204670de0b6b3a76400001482151715612f4b57600193610dae8d670de0b6b3a764000061314e950261373e565b016130d3565b60019061314e565b50908093959950612faf92949698612fa0565b929590969497939197612f7f565b631f0ebc5760e21b5f5260045ffd5b509593949094929192612d00565b6341598eb160e01b5f5260045ffd5b63ab143c065f526004601cfd5b3461124c575f36600319011261124c576020608654604051908152f35b3461124c57608036600319011261124c576004356024356001600160401b03811161124c576132069036906004016136ba565b60443591606435936132166138a4565b60015493811561319a5784840361319a5742861061319a57608b54608081901c90613249906001600160801b0316613909565b91909161338d575b505060885461337e578560885561326881876136ea565b60895581608a555f955f965b6020881015613367578688146132f25761328f8887876136f7565b3597670de0b6b3a76400008910156132e3576132ad896001936136ea565b986132da82606501916132d1611a4f6132c68554613c1e565b949194939093613c3d565b93915091613c76565b90550196613274565b630152ac2f60e31b5f5260045ffd5b9092949550670de0b6b3a7640000919396505b03613358576133487fb0fb14f34df2e6ea25fc5285462fa7522278318522be931036565d550e5236a5956040519586958652608060208701526080860191613707565b91604084015260608301520390a1005b63083aafed60e41b5f5260045ffd5b9092949550670de0b6b3a764000091939650613305565b632ffc992d60e21b5f5260045ffd5b61339d816133a493600254613aac565b9050613be1565b608b558680613251565b3461124c57604036600319011261124c576133db6133ca613662565b6133d261387c565b60243590614579565b005b3461124c57602036600319011261124c576133f6613662565b638b78c6d8600c525f52602080600c2054604051908152f35b3461124c575f36600319011261124c576134276138e9565b608b54602090608081901c90613445906001600160801b0316613909565b918280613478575b61345e575b50506040519015158152f35b61339d8161346e93600254613aac565b608b558280613452565b5080151561344d565b3461124c57602036600319011261124c576004356001548110156134d45760208110156134c0576001600160601b036020916065015416604051908152f35b634e487b7160e01b5f52603260045260245ffd5b6367e0bf5f60e01b5f5260045ffd5b3461124c575f36600319011261124c576020608754604051908152f35b5f36600319011261124c5763389a75e1600c52335f526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f80a2005b3461124c575f36600319011261124c57602060ff60855460081c166040519015158152f35b3461124c57604036600319011261124c576020613589613662565b60243590638b78c6d8600c525f528082600c20541614604051908152f35b604036600319011261124c576133db6135be613662565b6133d26138da565b602036600319011261124c576133db60043533614534565b3461124c575f36600319011261124c576135f66138a4565b5f6088555f6089557fc3014e77feddea63dc4c4b247508845d74eb35678da2e55000c3bb655727650e5f80a1005b3461124c57604036600319011261124c576133db613640613662565b612a7061387c565b3461124c575f36600319011261124c576020906002548152f35b600435906001600160a01b038216820361124c57565b604435906001600160a01b038216820361124c57565b602435906001600160a01b038216820361124c57565b606435906001600160a01b038216820361124c57565b9181601f8401121561124c578235916001600160401b03831161124c576020808501948460051b01011161124c57565b91908201809211612f4b57565b91908110156134c05760051b0190565b81835290916001600160fb1b03831161124c5760209260051b809284830137010190565b81810292918115918404141715612f4b57565b8115613748570490565b634e487b7160e01b5f52601260045260245ffd5b90601f801991011681019081106001600160401b0382111761377d57604052565b634e487b7160e01b5f52604160045260245ffd5b6001600160401b03811161377d5760051b60200190565b906137b282613791565b6137bf604051918261375c565b82815280926137d0601f1991613791565b0190602036910137565b80518210156134c05760209160051b010190565b91908203918211612f4b57565b6001600160a01b039091168152602081019190915260400190565b9493929160409261383c9260018060a01b03168752606060208801526060870191613707565b930152565b9081602091031261124c575160ff8116810361124c5790565b60ff166024039060ff8211612f4b57565b60ff16604d8111612f4b57600a0a90565b638b78c6d8600c52335f5260016020600c2054161561389757565b6382b429005f526004601cfd5b638b78c6d8600c52335f5260036020600c2054161561389757565b638b78c6d8600c52335f5260056020600c2054161561389757565b638b78c6d81954330361389757565b600160ff608554161515146138fa57565b63b8c449b360e01b5f5260045ffd5b90608854916089549083158015613aa3575b8015613a85575b613a7d575080839142105f14613a695761394b9161393f916137ee565b92426088555b426137ee565b915f5490608a548180159386855f14613a2e575050505b5f555f5b6020811015613a245760015481146139fd57600190806065016139ba876139a0611a4f87896139958754613c1e565b969196959095613c3d565b9592809592949195925f146139c25750505050805b613c76565b905501613966565b848111156139e657506139b59261089d6139e09261104587866137ee565b906137ee565b91506139b59261089d610afb9261104585886137ee565b50505090505b5f60025480613a14575b5090600190565b613a1e91506145bb565b5f613a0d565b5050509050613a03565b9091928083115f14613a54579261089d6139e092611045613a4f96866137ee565b613962565b9261089d610afb9261104585613a4f976137ee565b505061394b5f925f6088555f608955613945565b92505f919050565b50613a9084426137ee565b6087541180156139225750428211613922565b5042841161391b565b9092915f938215613bd85790613ac891600154845f5491614106565b93909180831115613b5f576003546004546001600160a01b0390811692911690613af290856137ee565b91813b15613b5b57918391613b1e93836040518096819582946340c10f1960e01b8452600484016137fb565b03925af18015613b5057613b38575b50505b806002559190565b613b4382809261375c565b613b4d5780613b2d565b80fd5b6040513d84823e3d90fd5b8380fd5b8091508210613b6f575b50613b30565b6003546004546001600160a01b0391821692911690613b8f9084906137ee565b823b1561124c57613bb9925f9283604051809681958294632770a7eb60e21b8452600484016137fb565b03925af180156130935715613b69575f613bd29161375c565b5f613b69565b935050505f9190565b906001600160801b0382111580613c0d575b613c06576341598eb160e01b5f5260045ffd5b60801b1790565b506001600160801b03811115613bf3565b6001600160601b038116916001600160501b038260601c169160b01c90565b9064e8d4a51000620fffff8316029164e8d4a51000620fffff8260141c16029164e8d4a5100080620fffff8460281c160292603c1c0290565b90919264e8d4a510008080809304603c1b950460281b930460141b910417171790565b90916001600160601b0382118015613cbc575b61319a5760b01b9160601b171790565b506001600160501b038311613cac565b90805f19048211613ce7575b670de0b6b3a764000091020490565b8015613cd85763bac65e5b5f526004601cfd5b91613d036138e9565b806102a052613d1182613909565b90936001545f5b60208110613d72575b505050159182613d68575b5081613d5b575b50613d5357613d49906102a05190600254613aac565b9050906102a05190565b906102a05190565b90506102a051145f613d33565b831491505f613d2c565b60ff838260031b1c1680158015613f90575b613f8a575f1981019060208210156134c05760018060a01b0360448201541690613db16064820154613c1e565b9190602060018060a01b036004860154166024604051809881936305d4ec6560e11b835260048301525afa948515613093575f95613f57575b508415613f4857808514613f3a57600b8102818104600b1482151715612f4b57600a9004851180613f31575b613f24575b5f9181151580613f18575b613e74575b5050927f516c8bdb823996757c901b6b9bd210afa82c6ec8d550f0e57cd3f64896f7319c926064613e636020948460019a9998613c99565b910155604051908152a25b01613d18565b9296959493909c9150670de0b6b3a76400008d02918d808404670de0b6b3a76400001490151715612f4b578480938a620fffff8b160264e8d4a510000291613ebb9161373e565b90613ec591613f99565b613ece9161372b565b670de0b6b3a764000090049c613ee4838561372b565b90613eee9161373e565b92836102a05190613efe916136ea565b90613f08916137ee565b6102a0529293949591905f613e2b565b506102a0511515613e26565b613f2c6138da565b613e1b565b50801515613e16565b505050505050600190613e6e565b639531a3a160e01b5f5260045ffd5b9094506020813d8211613f82575b81613f726020938361375c565b8101031261124c5751935f613dea565b3d9150613f65565b50613d21565b50828111613d84565b90613fa391614b00565b8015613fc157670de0b6b3a7640000606482025f1901040160010190565b505f90565b916040519360605260405260601b602c526323b872dd60601b600c5260205f6064601c82855af1908160015f51141615614006575b50505f606052604052565b3b153d171015614017575f80613ffb565b637939f4245f526004601cfd5b9164e8d4a51000620fffff8216029064e8d4a51000620fffff8260281c16028281115f146140b357505f5b831061409a5764e8d4a5100090603c1c020180670de0b6b3a764000010670de0b6b3a7640000821802188111614083575050565b101561408b57565b63b1a539bd60e01b5f5260045ffd5b505011156140a457565b637b3a1f9560e01b5f5260045ffd5b820361404f565b6001545f91825b60208410156140fd578284146140eb576001906001600160601b03856065015416019301926140c1565b925090505b6140f9826145bb565b9190565b925090506140f0565b9290939491670de0b6b3a763ffff19810195818711612f4b576141289161372b565b9390945f915b61010083106141465763b138078b60e01b5f5260045ffd5b801561319a5781878202870304905f5b602081106141ba575b506064908083106141a957670de0b6b3a76400008184035b0204111561418a5760019092019161412e565b9294506140f9935050670de0b6b3a764000060648302049190506136ea565b670de0b6b3a7640000838203614177565b978689146141d057818360019202049801614156565b9761415f565b939592909491670de0b6b3a763ffff19810196818811612f4b576141f99161372b565b9490955f915b61010083106142175763b138078b60e01b5f5260045ffd5b801561319a5781888202880304905f5b6020811061429a575b5060649080831061428957670de0b6b3a76400008184035b0204111561425b576001909201916141ff565b94505050909250670de0b6b3a76400006064830204905f14614280576140f9916136ea565b6140f9916137ee565b670de0b6b3a7640000838203614248565b98878a146142b057818360019202049901614227565b98614230565b919060145260345263a9059cbb60601b5f5260205f6044601082855af1908160015f511416156142e9575b50505f603452565b3b153d1710156142fa575f806142e1565b6390b8ec185f526004601cfd5b9061431191614b00565b8015613fc157670de0b6b3a7640000606482025f19010460018101821061433a5790035f190190565b50505f90565b92909194670de0b6b3a76400008602868104670de0b6b3a76400001487151715612f4b5761438461437d61438b94670de0b6b3a76400009361373e565b809761372b565b04946136ea565b90821561374857826a0c097ce7bc90715b34b9f160241b0490935f945b61010086106143c05763b138078b60e01b5f5260045ffd5b801561319a576064614451846125d88a61254f8961444c88670de0b6b3a76400006144468f614440848f8a61254f8a8f6144398161441f61104597610afb8a9c8f966144328161442c8f8b8f916125d8968f61441f90614425936136ea565b9361372b565b04906136ea565b9561372b565b918d613f99565b04906137ee565b9961372b565b046136ea565b6136ea565b918083106144a157670de0b6b3a764000061446c82856137ee565b0204111561447f576001909501946143a8565b94505050505061449e9150670de0b6b3a76400006064820204906136ea565b90565b670de0b6b3a76400006144b484836137ee565b61446c565b7812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f2281108202156144ea57670de0b6b3a7640000020490565b637c5f487d5f526004601cfd5b60018060a01b031680638b78c6d819547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3638b78c6d81955565b638b78c6d8600c525f526020600c2090815490811618809155600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe265f80a3565b638b78c6d8600c525f526020600c2090815417809155600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe265f80a3565b6001545f670de0b6b3a76400005b602082101561463f5782821461463f57620fffff906145eb8360650154613c1e565b9050929092169064e8d4a510008202151580614636575b1561319a5761462c8260019464e8d4a510008089670de0b6b3a7640000970202928a020204614307565b02049101906145c9565b50821515614602565b9250505090565b9068056bc75e2d630fffff198201918213600116612f4b57565b906803782dace9d8ffffff198201918213600116612f4b57565b906806f05b59d3b1ffffff198201918213600116612f4b57565b9068ad78ebc5ac61ffffff198201918213600116612f4b57565b906856bc75e2d630ffffff198201918213600116612f4b57565b90682b5e3af16b187fffff198201918213600116612f4b57565b906815af1d78b58c3fffff198201918213600116612f4b57565b90680ad78ebc5ac61fffff198201918213600116612f4b57565b906802b5e3af16b187ffff198201918213600116612f4b57565b9068015af1d78b58c3ffff198201918213600116612f4b57565b906803782dace9d90000008201915f6803782dace9d900000084129112908015821691151617612f4b57565b9068ad78ebc5ac620000008201915f68ad78ebc5ac6200000084129112908015821691151617612f4b57565b906856bc75e2d6310000008201915f6856bc75e2d63100000084129112908015821691151617612f4b57565b90682b5e3af16b188000008201915f682b5e3af16b1880000084129112908015821691151617612f4b57565b906815af1d78b58c4000008201915f6815af1d78b58c40000084129112908015821691151617612f4b57565b90680ad78ebc5ac62000008201915f680ad78ebc5ac620000084129112908015821691151617612f4b57565b9068056bc75e2d631000008201915f68056bc75e2d6310000084129112908015821691151617612f4b57565b906802b5e3af16b18800008201915f6802b5e3af16b188000084129112908015821691151617612f4b57565b9068015af1d78b58c400008201915f68015af1d78b58c4000084129112908015821691151617612f4b57565b9067ad78ebc5ac6200008201915f67ad78ebc5ac62000084129112908015821691151617612f4b57565b906756bc75e2d63100008201915f6756bc75e2d631000084129112908015821691151617612f4b57565b908168056bc75e2d6310000001918212600116612f4b57565b9190915f8382019384129112908015821691151617612f4b57565b908160011b9180830560021490151715612f4b57565b90606482029180830560641490151715612f4b57565b9068056bc75e2d6310000082029180830568056bc75e2d631000001490151715612f4b57565b906b02df0ab5a80a22c61ab5a7008202918083056b02df0ab5a80a22c61ab5a7001490151715612f4b57565b90693f1fce3da636ea5cf850820291808305693f1fce3da636ea5cf8501490151715612f4b57565b90690127fa27722cc06cc5e2820291808305690127fa27722cc06cc5e21490151715612f4b57565b9068280e60114edb805d0382029180830568280e60114edb805d031490151715612f4b57565b90680ebc5fb41746121110820291808305680ebc5fb417461211101490151715612f4b57565b906808f00f760a4b2db55d8202918083056808f00f760a4b2db55d1490151715612f4b57565b906806f5f17757889379378202918083056806f5f17757889379371490151715612f4b57565b81810292915f8212600160ff1b821416612f4b578184051490151715612f4b57565b811561374857600160ff1b81145f19831416612f4b570590565b8115614e9157801561433a578060ff1c614e5a57770bce5086492111aea88f4bb1ca6bcf584181ea8059f76532821015614e235780670c7d713b49da00001280614e12575b15614df257670de0b6b3a76400008102908105670de0b6b3a764000003612f4b576ec097ce7bc90715b34b9f0fffffffff19810190600181831316612f4b576a0c097ce7bc90715b34b9f160241b8202918083056a0c097ce7bc90715b34b9f160241b1490151715612f4b576a0c097ce7bc90715b34b9f160241b8101905f6a0c097ce7bc90715b34b9f160241b83129112908015821691151617612f4b57614bed91614ae6565b614bf78180614ac4565b6a0c097ce7bc90715b34b9f160241b90058080808085614c18828098614ac4565b6a0c097ce7bc90715b34b9f160241b90059060038205614c3791614943565b91614c4191614ac4565b6a0c097ce7bc90715b34b9f160241b90059060058205614c6091614943565b91614c6a91614ac4565b6a0c097ce7bc90715b34b9f160241b90059060078205614c8991614943565b91614c9391614ac4565b6a0c097ce7bc90715b34b9f160241b90059060098205614cb291614943565b91614cbc91614ac4565b6a0c097ce7bc90715b34b9f160241b900590600b8205614cdb91614943565b91614ce591614ac4565b6a0c097ce7bc90715b34b9f160241b900590600d8205614d0491614943565b91614d0e91614ac4565b6a0c097ce7bc90715b34b9f160241b9005600f9005614d2c91614943565b614d359061495e565b90614d4a81670de0b6b3a76400008405614ac4565b91670de0b6b3a7640000900790614d6091614ac4565b670de0b6b3a76400009005614d7491614943565b670de0b6b3a7640000905b0580680238fd42c5cf03ffff19131580614ddf575b15614da25761449e90615348565b60405162461bcd60e51b815260206004820152601560248201527450726f64756374206f7574206f6620626f756e647360581b6044820152606490fd5b5068070c1cc73b00c80000811315614d94565b670de0b6b3a764000091614e08614e0d92614eaf565b614ac4565b614d7f565b50670f43fc2c04ee00008112614b45565b60405162461bcd60e51b815260206004820152600f60248201526e59206f7574206f6620626f756e647360881b6044820152606490fd5b60405162461bcd60e51b815260206004820152600f60248201526e58206f7574206f6620626f756e647360881b6044820152606490fd5b5050670de0b6b3a764000090565b600160ff1b8114612f4b575f0390565b670de0b6b3a764000081126152e05761449e906150a7905f775803bcc5cb9634ba4cfb2213f784019318ed4dcb6017880f60361b8212156152b7575b73011798004d755d3c8bc8e03204cf44619e00000082121561525d575b6150a261506061506061509b61503061507561509561508b61503061501a614f3b614f356150609c614974565b9c614974565b6e01855144814a7ff805980ff008400081121561522d575b6b02df0ab5a80a22c61ab5a700811215615200575b693f1fce3da636ea5cf8508112156151d5575b690127fa27722cc06cc5e28112156151aa575b68280e60114edb805d03811215615180575b680ebc5fb41746121110811215615156575b6808f00f760a4b2db55d81121561512c575b6806f5f1775788937937811215615102575b6806248f33704b2866038112156150d8575b6805c548670b9510e7ac8112156150ae575b61501461500e61500983614646565b61498a565b91614852565b90614ae6565b61508561507b61503061503f6150308580614ac4565b68056bc75e2d63100000900590565b80988561506c6150308461506661505a61503083809d614ac4565b94600386055b90614943565b93614ac4565b9e8f6005900590565b9c614ac4565b9960078b05615060565b98614ac4565b9560098705615060565b94614ac4565b600b900590565b61495e565b6064900590565b6150cc6150bd6150d29261498a565b6805c548670b9510e7ac900590565b9c614900565b9b614ffa565b6150f66150e76150fc9261498a565b6806248f33704b286603900590565b9c6148d6565b9b614fe8565b6151206151116151269261498a565b6806f5f1775788937937900590565b9c6148aa565b9b614fd6565b61514a61513b6151509261498a565b6808f00f760a4b2db55d900590565b9c61487e565b9b614fc4565b61517461516561517a9261498a565b680ebc5fb41746121110900590565b9c614852565b9b614fb2565b61519e61518f6151a49261498a565b68280e60114edb805d03900590565b9c614826565b9b614fa0565b6151c96151b96151cf9261498a565b690127fa27722cc06cc5e2900590565b9c6147fa565b9b614f8e565b6151f46151e46151fa9261498a565b693f1fce3da636ea5cf850900590565b9c6147ce565b9b614f7b565b61522161520f6152279261498a565b6b02df0ab5a80a22c61ab5a700900590565b9c6147a2565b9b614f68565b61525161523c6152579261498a565b6e01855144814a7ff805980ff0084000900590565b9c614776565b9b614f53565b906150a261506061506061509b61503061507561509561508b61503061501a614f3b614f356152a461529e6150609e6b1425982cf597cd205cef7380900590565b9e61474a565b9c50505050505050505050505050614f08565b5072195e54c5dd42177f53a27172fa9ec63026282760241b90056806f05b59d3b2000000614eeb565b6152fb615300916a0c097ce7bc90715b34b9f160241b614ae6565b614eaf565b61449e90614e9f565b1561531057565b60405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a5908115e1c1bdb995b9d60821b6044820152606490fd5b680238fd42c5cf03ffff1981121580615746575b61536590615309565b5f811261571d576806f05b59d3b200000081126156e3576153859061467a565b6153a572195e54c5dd42177f53a27172fa9ec63026282760241b91614974565b68056bc75e2d631000009068ad78ebc5ac620000008112156156c3575b6856bc75e2d6310000008112156156a8575b682b5e3af16b1880000081121561568d575b6815af1d78b58c400000811215615672575b680ad78ebc5ac6200000811215615657575b68056bc75e2d6310000081121561563c575b6802b5e3af16b1880000811215615621575b68015af1d78b58c40000811215615606575b8080808080808080806154528161492a565b61545c8280614ac4565b68056bc75e2d63100000900560029005908161547791614943565b9161548191614ac4565b68056bc75e2d63100000900560039005908161549c91614943565b916154a691614ac4565b68056bc75e2d6310000090056004900590816154c191614943565b916154cb91614ac4565b68056bc75e2d6310000090056005900590816154e691614943565b916154f091614ac4565b68056bc75e2d63100000900560069005908161550b91614943565b9161551591614ac4565b68056bc75e2d63100000900560079005908161553091614943565b9161553a91614ac4565b68056bc75e2d63100000900560089005908161555591614943565b9161555f91614ac4565b68056bc75e2d63100000900560099005908161557a91614943565b9161558491614ac4565b68056bc75e2d631000009005600a9005908161559f91614943565b916155a991614ac4565b68056bc75e2d631000009005600b900590816155c491614943565b916155ce91614ac4565b68056bc75e2d631000009005600c90056155e791614943565b6155f091614ac4565b68056bc75e2d631000009005906150a791614ac4565b61503061561561561b92614730565b92614a9e565b90615440565b61503061563061563692614716565b92614a78565b9061542e565b61503061564b61565192614646565b92614a52565b9061541c565b61503061566661566c926146fc565b92614a2c565b9061540a565b615030615681615687926146e2565b92614a04565b906153f8565b61503061569c6156a2926146c8565b926149dc565b906153e6565b6150306156b76156bd926146ae565b926149b0565b906153d4565b6156cd9150614694565b6e01855144814a7ff805980ff0084000906153c2565b6803782dace9d90000008112615712576156fc90614660565b6153a56b1425982cf597cd205cef738091614974565b6153a5600191614974565b61573d6157386a0c097ce7bc90715b34b9f160241b92614e9f565b615348565b61449e91614ae6565b5068070c1cc73b00c8000081131561535c56fea2646970667358221220071e635e6ce0fe15b9370ebff787ee040261846f697e48c551992e1f8f1d6ef164736f6c634300081a00330000000000000000000000003bcb4f5c22758b145820e1126e69d96f891d5f8b00000000000000000000000000000000000000000000003635c9adc5dea0000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001800000000000000000000000001b514df3413da9931eb31f2ab72e32c0a507cad50000000000000000000000000000000000000000000000000000000000000002000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38000000000000000000000000fa85fe5a8f5560e9039c04f2b0a90de1415abd7000000000000000000000000000000000000000000000000000000000000000020000000000000000000000005c6e05d97af61637fdf5144ad4ed81a12bfd35b00000000000000000000000005c6e05d97af61637fdf5144ad4ed81a12bfd35b00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000c7d713b49da0000
Deployed Bytecode
0x6102c0806040526004361015610013575f80fd5b5f6101e0525f3560e01c908163047fc9aa14613648575080630912ed77146136245780631082ae95146135de578063183a4f6e146135c65780631c10893f146135a75780631cd64df41461356e5780631f3a0e41146135495780632569296214613500578063267f4cf9146134e35780632797da80146134815780632d3eac441461340f5780632de94807146133dd5780632e3036c7146133ae57806331e7e487146131d35780633a04801d146131b65780633e8847ec14612bc85780633f4ba83a14612b5d57806341c0e1b514612ac6578063430bf08a14612a9b578063455611f214612a795780634a4ee7b114612a515780634bb77d9d1461295e5780634f64b2be146129285780634fdf5d1d14612822578063514e62fc146127e757806354d1f13d1461278f578063562e19df146122c45780635c975abb1461229f57806365c303a5146122665780636e18c5b414611e55578063715018a614611e005780638456cb5914611d8a57806385535cc514611d155780638aa044e414611cbd5780638d56c63914611b915780638da5cb5b14611b625780638e499bcf14611b4257806394068a9314611b0e5780639d76ea5814611ae3578063a3820aa51461191d578063abfed9fd14611853578063b533789714611833578063b6efab3914611813578063c6e1d3e7146117e7578063c7d0a17f146112e0578063cc33448214610e5f578063d1154ff014610dff578063d13630af14610789578063d6c094b31461075d578063dc036c9a14610495578063e7ee6ad614610453578063ef407c3c1461041d578063f04e283e146103c6578063f2fde38b14610381578063f8dc929c14610361578063f8e27f93146102d15763fee81cf414610295575f80fd5b346102ca5760203660031901126102ca576102ae613662565b63389a75e1600c526101e05152602080600c2054604051908152f35b6101e05180fd5b346102ca5760203660031901126102ca5760043560015481101561034c5760208110156103325761030a6080916065015460b01c613c3d565b916088541561032b575b604051938452602084015260408301526060820152f35b5082610314565b634e487b7160e01b6101e05152603260045260246101e051fd5b6367e0bf5f60e01b6101e0515260046101e051fd5b346102ca576101e0513660031901126102ca576020608954604051908152f35b60203660031901126102ca57610395613662565b61039d6138da565b8060601b156103b6576103af906144f7565b6101e05180f35b637448fbae6101e051526004601cfd5b60203660031901126102ca576103da613662565b6103e26138da565b63389a75e1600c52806101e051526020600c20908154421161040d576103af916101e05190556144f7565b636f5e88186101e051526004601cfd5b346102ca5760203660031901126102ca5760043560208110156102ca57604501546040516001600160a01b039091168152602090f35b346102ca5760203660031901126102ca5760043560015481101561034c576020811015610332576001600160501b036020916065015460601c16604051908152f35b346102ca5760603660031901126102ca576004356024356001600160401b0381116102ca576104c89036906004016136ba565b6104d3929192613678565b903068929eee149b4bd21268541461074d573068929eee149b4bd2126855600154808214801590610743575b61072e576002549161051185846137ee565b60028190556003549095906001600160a01b0316803b156102ca57604051632770a7eb60e21b81526101e0519091829081806105518733600484016137fb565b03916101e051905af1801561072057610705575b506040517fd8ae9b9ba89e637bcb66a69ac91e8f688018e81d6f92c57e02226425c8efbdf6339180610598858a836137fb565b0390a2670de0b6b3a76400006101e0516101e0515b60208110156106dc578581146106dc576065810180548a91906105cf90613c1e565b620fffff81989398959295168c6105e68b8b61372b565b906105f09161373e565b98896105fb916137ee565b9461060886938885613c99565b906101e05150558b810264e8d4a5100002920264e8d4a5100002049061062d91614307565b02670de0b6b3a76400009004930193670de0b6b3a7640000810290808204670de0b6b3a764000014901517156106c2576106759161066a9161373e565b6025830154906144b9565b9061068181878d6136f7565b3582106106ad5760058101546001926106a4918b906001600160a01b03166142b6565b019190916105ad565b634647d8b560e01b6101e0515260046101e051fd5b634e487b7160e01b6101e05152601160045260246101e051fd5b5096509450505050506106ef9250613be1565b608b553868929eee149b4bd21268556101e05180f35b6101e0516107129161375c565b6101e0516102ca5787610565565b6040513d6101e051823e3d90fd5b6341598eb160e01b6101e0515260046101e051fd5b50602082116104ff565b63ab143c066101e051526004601cfd5b346102ca5760203660031901126102ca5760043560208110156102ca5760250154604051908152602090f35b346102ca5760803660031901126102ca576004356001600160401b0381116102ca576107b99036906004016136ba565b906107c2613678565b610160526107ce6136a4565b903068929eee149b4bd21268541461074d573068929eee149b4bd2126855600154610100819052830361072e57608b546101e0515f1960e0526001600160801b03821693909260809290921c918391825b6020811015610df2576101005181146108d55761083d8189856136f7565b3580156108c25760258201546001929160089161085991613ccc565b95838301891b17970194861515806108b7575b61087c575b505b0194929461081f565b6108a2906101e0515061089d6108958460650154613c1e565b50909261372b565b61373e565b8060e0511060e0518218021860e05289610871565b5060e051151561086c565b506001906101e09694965160e052610873565b50939490949291925b15610ddd576108ec92613cfa565b6101c0526101c051928160025461012052946101c0519361090f610100516137a8565b60c0526101e0516101a0525b60206101a0511015610dd357610100516101a05114610b27576109426101a05183856136f7565b356101808190526101a0516025015461095a91613ccc565b8015610b09576101e051506109916101a051606501670de0b6b3a76400006109828254613c1e565b6101409592955280949561372b565b0460a0526109b06109a460a051856136ea565b92610140519084613c99565b9055610120516109f2575b505061018051610160516101a051600501546109e2929130916001600160a01b0316613fc6565b60016101a051016101a05261091b565b81670de0b6b3a764000081989a93999794990204670de0b6b3a764000014871517156106c257610b0192610a82610aeb92610a7d610a93670de0b6b3a7640000610a888198610a828f610a4a6101c05186830261373e565b610a596101a05160c0516137da565b526101005161014051620fffff160264e8d4a510000290610a7d908990870261373e565b613f99565b9061372b565b049d60a051906136ea565b9a86610abd610ab182610aa860e0518661372b565b0460a0516137ee565b60865460011c9061372b565b0460808190526101005161014051620fffff160264e8d4a5100002938891610ae4916137ee565b910261373e565b0493610afb60805160a0516137ee565b906136ea565b9487806109bb565b50610120516109e25763f6ef3f5d60e01b6101e0515260046101e051fd5b91959290945b6101205180610d2557505050610b416140ba565b80918015610d105782610b6592915b6101205115926101e0515490610100516141d6565b929096610b7561012051896137ee565b9687151580610d04575b156106ad576003546001600160a01b0316803b156102ca576040516340c10f1960e01b81526101e051909182908180610bbc8e8a600484016137fb565b03916101e051905af1801561072057610ce9575b507f67902069e86c21d5ad116d9df073bf02a2bfdbd591414157cda22d3b8476cd5391610c0589604051938493339785613816565b0390a26101205186929015610cd75750505081610c2e916101e051546101205161010051614106565b60035460045491956001600160a01b039182169290911690610c5090846137ee565b823b156102ca57610c7b9260405180809581946340c10f1960e01b83526101e05196600484016137fb565b03916101e051905af1801561072057610cb8575b5090602093610ca1925b600255613be1565b608b553868929eee149b4bd2126855604051908152f35b6101e051919291610cc89161375c565b6101e0516102ca579084610c8f565b60209650610ca1945090925090610c99565b6101e051610cf69161375c565b6101e0516102ca5789610bd0565b50602435881015610b7f565b63df7da5cd60e01b6101e0515260046101e051fd5b6101e097949392969597515b6020811015610dc257610100518114610dc257610d4f8188886136f7565b3515610dba576065810154610d6390613c1e565b92919050610d738260c0516137da565b519281670de0b6b3a7640000810204670de0b6b3a764000014821517156106c257600193610dae8d670de0b6b3a7640000610db4950261373e565b90614024565b01610d31565b600190610db4565b5081610b6592939495989697610b50565b9195929094610b2d565b631f0ebc5760e21b6101e0515260046101e051fd5b50939490949291926108de565b346102ca5760203660031901126102ca57600435610e1b6138a4565b662386f26fc10000811161072e576020817f15a280e3a8fba7bb6a16834e8c4c8cf503351db60f83e74124075ff74b3d611992608655604051908152a16101e05180f35b346102ca576101203660031901126102ca57610e79613662565b610e8161368e565b6044359160c43591906101043560a4356001600160a01b03821682036102ca57610ea96138a4565b80156112b6576001549160208310156112cb5785156112b6576088546112a1576002541561128c578615158061127b575b1561072e57670de0b6b3a7640000606435118015611268575b61072e57600183018084116106c2576101e05195966001600160a01b038616969586805b602089101561125857878914610fa757505060058701546001600160a01b03168814610f925760658701805490978b91610f5090613c1e565b610f5d909b92919b613c3d565b90819e9381988102670de0b6b3a76400009004900392610f7c93613c76565b90610f8692613c99565b90556001019790610f17565b6364d9dc7160e11b6101e0515260046101e051fd5b909a9750602496999895985b60018060a01b03169a60208c604051998a80926305d4ec6560e11b82528b60048301525afa978815610720576101e05198611220575b50871561120b5760405163313ce56760e01b8152906020826004818b5afa9182156107205761104a8a6110458e61103f61103a61105398670de0b6b3a7640000976101e051916111dc575b5061385a565b61386b565b90613ccc565b61372b565b04928a80613c76565b600185905560058b0180546001600160a01b0319168817905560405163313ce56760e01b815292906020846004818b5afa90811561072057898c948f8f6110ad61103a6110cb976111089b6101e051916111dc575061385a565b602582015560450180546001600160a01b0319169091179055613c99565b60658c01556110fc6110ec6110de6140ba565b80929188826002549b614106565b90966101e0515586600255613be1565b608b5530903390613fc6565b8181111561072e57039060e435821061072e576003546001600160a01b031691823b156102ca576111539260405180809581946340c10f1960e01b83526101e05196600484016137fb565b03916101e051905af18015610720576111b7575b7f3c078e7a1bc2cbd8c7cd625a6d75d084e96e6701c6a324576b75a688b38a1c5360c0878787878c88604051958652602086015260408501526060840152608083015260a0820152a16101e05180f35b6101e0519195949392916111ca9161375c565b6101e0516102ca579091929386611167565b6111fe915060203d602011611204575b6111f6818361375c565b810190613841565b5f611034565b503d6111ec565b639cfd11eb60e01b6101e0515260046101e051fd5b9097506020813d602011611250575b8161123c6020938361375c565b8101031261124c5751968c610fe9565b5f80fd5b3d915061122f565b909a975060249699989598610fb3565b50670de0b6b3a764000060843511610ef3565b50662386f26fc10000871115610eda565b632468d44760e11b6101e0515260046101e051fd5b632ffc992d60e21b6101e0515260046101e051fd5b630b5556e560e11b6101e0515260046101e051fd5b6331cc28bd60e01b6101e0515260046101e051fd5b346102ca5760a03660031901126102ca576064356001600160401b0381116102ca576113109036906004016136ba565b906113196138a4565b6001549060028211156117d25760ff608554166117bd57604435156112b6576088546112a15781600435101561034c575f1982019182116106c2578183036117a8574260885561136b608435426136ea565b6089556020600435101561033257600560043501546001600160a01b0316611392836137a8565b61139b846137a8565b916113a5856137a8565b936113af866137a8565b6101e051909790918291825b8984106116ac5750505050670de0b6b3a764000003611697576101e0515b602081101561168b57858114611476576001906001600160a01b036113fe82866137da565b51166101e051508160050190838060a01b0316838060a01b031982541617905561142881866137da565b51602582015560a082901b82900361144082886137da565b51166101e051508160450190838060a01b0316838060a01b031982541617905561146a81896137da565b516065820155016113d9565b509450505050505b60015480156106c2575f1901806001556114aa6114996140ba565b809291600254948260443591614106565b9190926114b784826137ee565b908411611676578060243510611661576114d3906024356137ee565b806115fb575b506114eb916044356101e05155613be1565b608b556003546001600160a01b0316803b156102ca57604051632770a7eb60e21b81526101e05190918290818061152860243533600484016137fb565b03916101e051905af18015610720576115e0575b506002556040516370a0823160e01b8152306004820152602081602481855afa8015610720576101e051906115ac575b611578915033836142b6565b6004357fb3036f81a7a8205f3b94de16897df636d553839d92289fb7ec72dd2d541328426101e0516101e051a36101e05180f35b506020813d6020116115d8575b816115c66020938361375c565b8101031261124c57611578905161156c565b3d91506115b9565b6101e0516115ed9161375c565b6101e0516102ca578261153c565b6003546001600160a01b031690813b156102ca5760405180926340c10f1960e01b825281806116326101e0519533600484016137fb565b03916101e051905af1801561072057156114d9576101e0516116539161375c565b6101e0516102ca57846114d9565b634f0397ab60e01b6101e0515260046101e051fd5b635d7e4ee960e01b6101e0515260046101e051fd5b5094505050505061147e565b63083aafed60e41b6101e0515260046101e051fd5b600435841461179f5760208410156103325760058401546001600160a01b03166116d682896137da565b5260258401546116e6828a6137da565b5260458401546001600160a01b03166116ff828b6137da565b52606584015461170e90613c1e565b50959061171c8685876136f7565b35968715801561178e575b6117795769f4240f4240000000000064e8d4a510006117498a611758966136ea565b9904601481901b171791613c99565b611762828d6137da565b525f1981146106c2576001809101935b01926113bb565b6303aa729960e61b6101e0515260046101e051fd5b50670de0b6b3a76400008811611727565b92600190611772565b633bfe822760e11b6101e0515260046101e051fd5b63b8c449b360e01b6101e0515260046101e051fd5b63a596ef6d60e01b6101e0515260046101e051fd5b346102ca5760203660031901126102ca5760043560208110156102ca5760650154604051908152602090f35b346102ca576101e0513660031901126102ca576020608a54604051908152f35b346102ca576101e0513660031901126102ca576020608854604051908152f35b346102ca5760403660031901126102ca5760043561186f61368e565b6118776138a4565b60015482101561034c576020821015610332576045820180546001600160a01b0319166001600160a01b038316179055608b549160018101918282116106c2577f908a8bb84530a3f5baf8a0432620a6480e8b2af2e2423dae1222231a90caa5a4936040936118ff916118f991608082901c916001600160801b031690613cfa565b90613be1565b608b5582519182526001600160a01b03166020820152a16101e05180f35b346102ca5760603660031901126102ca576004356001600160401b0381116102ca5761194d9036906004016136ba565b906024356001600160401b0381116102ca5761196d9036906004016136ba565b92906044356001600160401b0381116102ca5761198e9036906004016136ba565b906119976138a4565b83861480611ada575b1561072e57600154936101e0515b602081106119bd576101e05180f35b818114611ad5576119cf8183896136f7565b35908682101561034c57670de0b6b3a76400006119ed828b896136f7565b35111580611ab8575b15611aa3576020821015610332578185611a5583611a37611a4f8b8f8b90611a488660019c60650199611a41611a2c8c54613c1e565b9b919b9a909a613c3d565b50509690986136f7565b35946136f7565b3592613c76565b91613c99565b90557f80394b5329e114f22712d6166857cd77c88256d851082e141591f481227fb8b96040611a85848d8b6136f7565b35611a91858a8a6136f7565b3582519182526020820152a2016119ae565b63bd18ee1f60e01b6101e0515260046101e051fd5b50670de0b6b3a7640000611acd8287876136f7565b3511156119f6565b6103af565b508382146119a0565b346102ca576101e0513660031901126102ca576003546040516001600160a01b039091168152602090f35b346102ca576101e0513660031901126102ca57608b54604080516001600160801b038316815260809290921c602083015290f35b346102ca576101e0513660031901126102ca576020600154604051908152f35b346102ca576101e0513660031901126102ca57638b78c6d819546040516001600160a01b039091168152602090f35b346102ca5760403660031901126102ca57600435611bad61368e565b611bb56138a4565b60015482101561034c57602082101561033257611bd58260650154613c1e565b50670de0b6b3a7640000820291808304670de0b6b3a764000014901517156106c257611c009161373e565b600181018091116106c2576025830154611c19916144b9565b6005909201546040516370a0823160e01b81523060048201526001600160a01b03919091169190602081602481865afa908115610720576101e05191611c8b575b5083811115611c76576103af93611c70916137ee565b916142b6565b63996f8ab960e01b6101e0515260046101e051fd5b90506020813d602011611cb5575b81611ca66020938361375c565b8101031261124c575184611c5a565b3d9150611c99565b346102ca5760203660031901126102ca57600435611cd96138a4565b801561072e576020817f03cd63f3fef742f82f64d7e1775b22c4fe9ed6d2bf0ca7cc04146d620e190ab292608755604051908152a16101e05180f35b346102ca5760203660031901126102ca57611d2e613662565b611d366138a4565b6001600160a01b0316801561072e57600480546001600160a01b031916821790556040519081527f58fd5d9c33114e6edf8ea5d30956f8d1a4ab112b004f99928b4bcf1b87d6666290602090a16101e05180f35b346102ca576101e0513660031901126102ca57611da56138bf565b60855460ff8116611deb5760ff19166001176085556101e05133907f5ee71a369c8672edded508e624ffc9257fa1ae6886ef32905c18e60196bca3999080a26101e05180f35b639784de2160e01b6101e0515260046101e051fd5b6101e0513660031901126102ca57611e166138da565b6101e051638b78c6d819547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a36101e051638b78c6d81981905580f35b346102ca5760803660031901126102ca57611e6e6136a4565b3068929eee149b4bd21268541461074d573068929eee149b4bd212685560015460043581111561072e57608b54611eb990608081901c906001600160801b0316600435600101613cfa565b919060025492611ecb602435856137ee565b60028190556003549091906001600160a01b0316803b156102ca57604051632770a7eb60e21b81526101e051909182908180611f0d60243533600484016137fb565b03916101e051905af180156107205761224b575b506020600435101561033257670de0b6b3a764000092611f6792611f4a60043560650154613c1e565b9691959093610a8264e8d4a510008a620fffff8b16020288613f99565b04966101e051905b60208210612224575b50509664e8d4a5100088611fae888a89611fde9b9c9d8a611f99818c6137ee565b978895620fffff6101e0515495160202614340565b99611fe4611fbc8c896137ee565b670de0b6b3a7640000611fd16086548361372b565b60011c049a8b80926137ee565b9c6136ea565b9a670de0b6b3a7640000810290808204670de0b6b3a764000014901517156106c257612013866120209261373e565b60256004350154906144b9565b9460443586106106ad5788612035918d613c99565b606560043501558015670de0b6b3a76400008083028390041417156106c2578a61207d61208392670de0b6b3a7640000610ae464e8d4a510008f620fffff8f16020285613f99565b936136ea565b976101e0515b602081101561220a578a811461215857600435810361210e57670de0b6b3a76400008802888104670de0b6b3a764000014891517156106c257876120cc9161373e565b908c670de0b6b3a7640000810204670de0b6b3a7640000148d1517156106c2576121088a6001938f8e670de0b6b3a7640000610dae920261373e565b01612089565b606581015461211c90613c1e565b9291670de0b6b3a7640000808202925081159183041417156106c25760019281610dae8e61214d8d6121539661373e565b9261373e565b612108565b5091945091969450602098508492975061217a95505b6121f7575b5050613be1565b608b556005600435015461219a90839083906001600160a01b03166142b6565b6040519060018060a01b031681526004358382015281604082015260243560608201527f7a3728879285f3ca5108b5f39698f28002a6b72cac81653343b8a7dfb75037f160803392a23868929eee149b4bd2126855604051908152f35b9161220192613aac565b90508187612173565b5091945091969450602098508492975061217a955061216e565b90978789146122455761223d8261089d8560019461372b565b980190611f6f565b97611f78565b6101e0516122589161375c565b6101e0516102ca5786611f21565b346102ca5760203660031901126102ca5760043560015481101561034c576020811015610332576020906065015460b01c604051908152f35b346102ca576101e0513660031901126102ca57602060ff608554166040519015158152f35b346102ca5760a03660031901126102ca576084356001600160a01b03811681036102ca573068929eee149b4bd21268541461074d573068929eee149b4bd21268556001546004356024351461277a57806004351080159061276e575b61034c57604435156112b657612355608b5460018060801b0381169060801c9060016024350160081b60016004350117613cfa565b929091602060043510156103325761237260043560650154613c1e565b959094602060243510156103325761238f60243560650154613c1e565b919889986101e051506123aa60043560250154604435613ccc565b956123f9670de0b6b3a76400006123d484611045836123cc8d6086549061372b565b04809c6137ee565b0496610a826123e3898c6136ea565b9d64e8d4a510008d620fffff8b16020290613f99565b908b670de0b6b3a7640000810204670de0b6b3a7640000148c1517156106c2578c80928d8b8d620fffff89160264e8d4a510000291670de0b6b3a764000002906124429161373e565b9061244c91614307565b6124559161373e565b9d6124618f99846136ea565b9061246b916137ee565b80988c6002546101e0515491620fffff8c160264e8d4a51000029461248f95614340565b968761249a916136ea565b9880670de0b6b3a7640000810204670de0b6b3a764000014811517156106c257848d610dae8c670de0b6b3a76400006124d887826124df980261373e565b930261373e565b670de0b6b3a7640000820290828204670de0b6b3a764000014831517156106c2576125099161373e565b9086670de0b6b3a7640000810204670de0b6b3a764000014871517156106c25784612554886125599361254f8a612566978f610dae90670de0b6b3a7640000870261373e565b6137ee565b6144b9565b60256024350154906144b9565b996064358b106106ad57866126a4575b8492612593949261258692613c99565b6065600435015584613c99565b60656024350155670de0b6b3a7640000888102988015908a0490911417156106c2576020976125d8859364e8d4a510006125ea98620fffff6125de9616020290613f99565b9061373e565b91612690575b50613be1565b608b556005600435015461260e9060443590309033906001600160a01b0316613fc6565b6005602435015461262b90839083906001600160a01b03166142b6565b6040519060018060a01b0316815260043583820152602435604082015260443560608201528160808201527fb3e2773606abfd36b5bd91394b3a54d1398336c65005baf7bf7a05efeffaf75b60a03392a23868929eee149b4bd2126855604051908152f35b61269c91600254613aac565b9050816125e4565b670de0b6b3a76400006126be83899e959a9e96949661372b565b049b83670de0b6b3a7640000810204670de0b6b3a764000014841517156106c2576126e98d836136ea565b9182670de0b6b3a7640000810204670de0b6b3a764000014831517156106c25786948e93828d620fffff8e160264e8d4a510000291670de0b6b3a764000002906127329161373e565b9061273c91614307565b61274f91670de0b6b3a76400000261373e565b9d612759916136ea565b91612763916136ea565b979250929092612576565b50806024351015612320565b63a8bf4d5f60e01b6101e0515260046101e051fd5b6101e0513660031901126102ca5763389a75e1600c52336101e051526101e0516020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c926101e0516101e051a26101e05180f35b346102ca5760403660031901126102ca57612800613662565b638b78c6d8600c526101e05152602060243581600c2054161515604051908152f35b346102ca5760403660031901126102ca5761283b613662565b61284361368e565b61284b6138a4565b6001546101e05190926001600160a01b0381169290915b6020811015612919578481146128a35760058101546001600160a01b0316841461288e57600101612862565b63103d1a8760e31b6101e0515260046101e051fd5b509091602493506020905b6040516370a0823160e01b815230600482015294859182905afa918215610720576101e051926128e3575b6103af93506142b6565b91506020833d602011612911575b816128fe6020938361375c565b8101031261124c576103af9251916128d9565b3d91506128f1565b509091602493506020906128ae565b346102ca5760203660031901126102ca5760043560208110156102ca57600501546040516001600160a01b039091168152602090f35b346102ca5760203660031901126102ca576004356001600160401b0381116102ca5761298e9036906004016136ba565b6001546101e051928391905b602083106129ff575b505050156129d8575b608b546129ce916118f991608081901c916001600160801b0390911690613cfa565b608b556101e05180f35b507f201f1e1d1c1b1a191817161514131211100f0e0d0c0b0a0908070605040302016129ac565b90929193828514612a485783612a168685856136f7565b35101561034c57612a288584846136f7565b3560018101919082106106c2576001918660031b1b17940191929061299a565b938293506129a3565b60403660031901126102ca576103af612a68613662565b612a706138da565b60243590614534565b346102ca576101e0513660031901126102ca5760206101e05154604051908152f35b346102ca576101e0513660031901126102ca576004546040516001600160a01b039091168152602090f35b346102ca576101e0513660031901126102ca57612ae161387c565b60855460ff811615612b485760ff8160081c16612b335761ff001916610100176085556101e0517fbe26733c2bf6ff3ea5ba8cfe744422bd49052ff9ed5685c9e81e6f9321dbaddd9080a16101e05180f35b631c6a9ca160e11b6101e0515260046101e051fd5b6363856c5960e01b6101e0515260046101e051fd5b346102ca576101e0513660031901126102ca57612b786138bf565b60855460ff811615612b485760ff8160081c16612b335760ff1916608555337faeb196d352664784d1900b0e7414a8face7d29f4dae8c4b0cf68ed477423bbf46101e0516101e051a26101e05180f35b3461124c57606036600319011261124c576004356001600160401b03811161124c57612bf89036906004016136ba565b90612c01613678565b903068929eee149b4bd2126854146131a9573068929eee149b4bd21268556001546102005261020051830361319a57608b545f19610220526001600160801b038116925f9260809290921c918391825b602081101561318c57610200518114612cf657612c6f8189856136f7565b358015612ce557906008612c8a600193836025015490613ccc565b95838301891b1797019486151580612cd9575b612cad575b505b01949294612c51565b612cc19061089d6108958460650154613c1e565b80610220511061022051821802186102205289612ca2565b50610220511515612c9d565b506001905f61022097959752612ca4565b5095939490949291925b1561317d57612d0e92613cfa565b61028052926102805190849260025495946102805191612d30610200516137a8565b935f610240525b602061024051101561316f57610200516102405114612f7557612d5e6102405183856136f7565b35612d70610240516025015482613ccc565b8015612f5f57612d9e670de0b6b3a764000061024051606501612d938154613c1e565b93919490809661372b565b0461026052612dbb82612db461026051866136ea565b9586613c99565b90558c612df5575b50506102405160050154612de5929150309033906001600160a01b0316613fc6565b6001610240510161024052612d37565b90969a87670de0b6b3a7640000819c949c9b959b0204670de0b6b3a76400001488151715612f4b5761028051612e3590670de0b6b3a76400008a0261373e565b61024051612e43908b6137da565b5261020051620fffff83160264e8d4a51000028b670de0b6b3a76400008a0290612e6c9161373e565b90612e7691613f99565b612e7f9161372b565b670de0b6b3a764000090049a61026051612e98916136ea565b9661022051612ea7908261372b565b670de0b6b3a764000090046102605190612ec0916137ee565b60865460011c612ecf9161372b565b670de0b6b3a764000090049a8b926102005190620fffff160264e8d4a510000292612ef9916137ee565b612f0c91670de0b6b3a76400000261373e565b90612f1691613f99565b612f1f9161372b565b670de0b6b3a76400009004976102605190612f39916137ee565b612f42916136ea565b958a8080612dc3565b634e487b7160e01b5f52601160045260245ffd5b505088612de55763f6ef3f5d60e01b5f5260045ffd5b9295909694979391975b84806130c85750505050612f916140ba565b809180156130b95782612faf92915b8615925f5490610200516141d6565b929097612fbc858a6137ee565b97881515806130ad575b1561309e576003546001600160a01b031691823b1561124c575f61300381948c6040519687809481936340c10f1960e01b83528b600484016137fb565b03925af1928315613093577f67902069e86c21d5ad116d9df073bf02a2bfdbd591414157cda22d3b8476cd539361307e575b506130488a604051938493339785613816565b0390a28691831561306b57505050610c2e9183916101e051549061020051614106565b60209750610ca195509093509150610c99565b5f6130889161375c565b5f6101e0528b613035565b6040513d5f823e3d90fd5b634647d8b560e01b5f5260045ffd5b50602435891015612fc6565b63df7da5cd60e01b5f5260045ffd5b5f9995939998969492985b602081101561315c5761020051811461315c576130f18189896136f7565b351561315457808b6131136131098360650154613c1e565b95919390506137da565b519281670de0b6b3a7640000810204670de0b6b3a76400001482151715612f4b57600193610dae8d670de0b6b3a764000061314e950261373e565b016130d3565b60019061314e565b50908093959950612faf92949698612fa0565b929590969497939197612f7f565b631f0ebc5760e21b5f5260045ffd5b509593949094929192612d00565b6341598eb160e01b5f5260045ffd5b63ab143c065f526004601cfd5b3461124c575f36600319011261124c576020608654604051908152f35b3461124c57608036600319011261124c576004356024356001600160401b03811161124c576132069036906004016136ba565b60443591606435936132166138a4565b60015493811561319a5784840361319a5742861061319a57608b54608081901c90613249906001600160801b0316613909565b91909161338d575b505060885461337e578560885561326881876136ea565b60895581608a555f955f965b6020881015613367578688146132f25761328f8887876136f7565b3597670de0b6b3a76400008910156132e3576132ad896001936136ea565b986132da82606501916132d1611a4f6132c68554613c1e565b949194939093613c3d565b93915091613c76565b90550196613274565b630152ac2f60e31b5f5260045ffd5b9092949550670de0b6b3a7640000919396505b03613358576133487fb0fb14f34df2e6ea25fc5285462fa7522278318522be931036565d550e5236a5956040519586958652608060208701526080860191613707565b91604084015260608301520390a1005b63083aafed60e41b5f5260045ffd5b9092949550670de0b6b3a764000091939650613305565b632ffc992d60e21b5f5260045ffd5b61339d816133a493600254613aac565b9050613be1565b608b558680613251565b3461124c57604036600319011261124c576133db6133ca613662565b6133d261387c565b60243590614579565b005b3461124c57602036600319011261124c576133f6613662565b638b78c6d8600c525f52602080600c2054604051908152f35b3461124c575f36600319011261124c576134276138e9565b608b54602090608081901c90613445906001600160801b0316613909565b918280613478575b61345e575b50506040519015158152f35b61339d8161346e93600254613aac565b608b558280613452565b5080151561344d565b3461124c57602036600319011261124c576004356001548110156134d45760208110156134c0576001600160601b036020916065015416604051908152f35b634e487b7160e01b5f52603260045260245ffd5b6367e0bf5f60e01b5f5260045ffd5b3461124c575f36600319011261124c576020608754604051908152f35b5f36600319011261124c5763389a75e1600c52335f526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f80a2005b3461124c575f36600319011261124c57602060ff60855460081c166040519015158152f35b3461124c57604036600319011261124c576020613589613662565b60243590638b78c6d8600c525f528082600c20541614604051908152f35b604036600319011261124c576133db6135be613662565b6133d26138da565b602036600319011261124c576133db60043533614534565b3461124c575f36600319011261124c576135f66138a4565b5f6088555f6089557fc3014e77feddea63dc4c4b247508845d74eb35678da2e55000c3bb655727650e5f80a1005b3461124c57604036600319011261124c576133db613640613662565b612a7061387c565b3461124c575f36600319011261124c576020906002548152f35b600435906001600160a01b038216820361124c57565b604435906001600160a01b038216820361124c57565b602435906001600160a01b038216820361124c57565b606435906001600160a01b038216820361124c57565b9181601f8401121561124c578235916001600160401b03831161124c576020808501948460051b01011161124c57565b91908201809211612f4b57565b91908110156134c05760051b0190565b81835290916001600160fb1b03831161124c5760209260051b809284830137010190565b81810292918115918404141715612f4b57565b8115613748570490565b634e487b7160e01b5f52601260045260245ffd5b90601f801991011681019081106001600160401b0382111761377d57604052565b634e487b7160e01b5f52604160045260245ffd5b6001600160401b03811161377d5760051b60200190565b906137b282613791565b6137bf604051918261375c565b82815280926137d0601f1991613791565b0190602036910137565b80518210156134c05760209160051b010190565b91908203918211612f4b57565b6001600160a01b039091168152602081019190915260400190565b9493929160409261383c9260018060a01b03168752606060208801526060870191613707565b930152565b9081602091031261124c575160ff8116810361124c5790565b60ff166024039060ff8211612f4b57565b60ff16604d8111612f4b57600a0a90565b638b78c6d8600c52335f5260016020600c2054161561389757565b6382b429005f526004601cfd5b638b78c6d8600c52335f5260036020600c2054161561389757565b638b78c6d8600c52335f5260056020600c2054161561389757565b638b78c6d81954330361389757565b600160ff608554161515146138fa57565b63b8c449b360e01b5f5260045ffd5b90608854916089549083158015613aa3575b8015613a85575b613a7d575080839142105f14613a695761394b9161393f916137ee565b92426088555b426137ee565b915f5490608a548180159386855f14613a2e575050505b5f555f5b6020811015613a245760015481146139fd57600190806065016139ba876139a0611a4f87896139958754613c1e565b969196959095613c3d565b9592809592949195925f146139c25750505050805b613c76565b905501613966565b848111156139e657506139b59261089d6139e09261104587866137ee565b906137ee565b91506139b59261089d610afb9261104585886137ee565b50505090505b5f60025480613a14575b5090600190565b613a1e91506145bb565b5f613a0d565b5050509050613a03565b9091928083115f14613a54579261089d6139e092611045613a4f96866137ee565b613962565b9261089d610afb9261104585613a4f976137ee565b505061394b5f925f6088555f608955613945565b92505f919050565b50613a9084426137ee565b6087541180156139225750428211613922565b5042841161391b565b9092915f938215613bd85790613ac891600154845f5491614106565b93909180831115613b5f576003546004546001600160a01b0390811692911690613af290856137ee565b91813b15613b5b57918391613b1e93836040518096819582946340c10f1960e01b8452600484016137fb565b03925af18015613b5057613b38575b50505b806002559190565b613b4382809261375c565b613b4d5780613b2d565b80fd5b6040513d84823e3d90fd5b8380fd5b8091508210613b6f575b50613b30565b6003546004546001600160a01b0391821692911690613b8f9084906137ee565b823b1561124c57613bb9925f9283604051809681958294632770a7eb60e21b8452600484016137fb565b03925af180156130935715613b69575f613bd29161375c565b5f613b69565b935050505f9190565b906001600160801b0382111580613c0d575b613c06576341598eb160e01b5f5260045ffd5b60801b1790565b506001600160801b03811115613bf3565b6001600160601b038116916001600160501b038260601c169160b01c90565b9064e8d4a51000620fffff8316029164e8d4a51000620fffff8260141c16029164e8d4a5100080620fffff8460281c160292603c1c0290565b90919264e8d4a510008080809304603c1b950460281b930460141b910417171790565b90916001600160601b0382118015613cbc575b61319a5760b01b9160601b171790565b506001600160501b038311613cac565b90805f19048211613ce7575b670de0b6b3a764000091020490565b8015613cd85763bac65e5b5f526004601cfd5b91613d036138e9565b806102a052613d1182613909565b90936001545f5b60208110613d72575b505050159182613d68575b5081613d5b575b50613d5357613d49906102a05190600254613aac565b9050906102a05190565b906102a05190565b90506102a051145f613d33565b831491505f613d2c565b60ff838260031b1c1680158015613f90575b613f8a575f1981019060208210156134c05760018060a01b0360448201541690613db16064820154613c1e565b9190602060018060a01b036004860154166024604051809881936305d4ec6560e11b835260048301525afa948515613093575f95613f57575b508415613f4857808514613f3a57600b8102818104600b1482151715612f4b57600a9004851180613f31575b613f24575b5f9181151580613f18575b613e74575b5050927f516c8bdb823996757c901b6b9bd210afa82c6ec8d550f0e57cd3f64896f7319c926064613e636020948460019a9998613c99565b910155604051908152a25b01613d18565b9296959493909c9150670de0b6b3a76400008d02918d808404670de0b6b3a76400001490151715612f4b578480938a620fffff8b160264e8d4a510000291613ebb9161373e565b90613ec591613f99565b613ece9161372b565b670de0b6b3a764000090049c613ee4838561372b565b90613eee9161373e565b92836102a05190613efe916136ea565b90613f08916137ee565b6102a0529293949591905f613e2b565b506102a0511515613e26565b613f2c6138da565b613e1b565b50801515613e16565b505050505050600190613e6e565b639531a3a160e01b5f5260045ffd5b9094506020813d8211613f82575b81613f726020938361375c565b8101031261124c5751935f613dea565b3d9150613f65565b50613d21565b50828111613d84565b90613fa391614b00565b8015613fc157670de0b6b3a7640000606482025f1901040160010190565b505f90565b916040519360605260405260601b602c526323b872dd60601b600c5260205f6064601c82855af1908160015f51141615614006575b50505f606052604052565b3b153d171015614017575f80613ffb565b637939f4245f526004601cfd5b9164e8d4a51000620fffff8216029064e8d4a51000620fffff8260281c16028281115f146140b357505f5b831061409a5764e8d4a5100090603c1c020180670de0b6b3a764000010670de0b6b3a7640000821802188111614083575050565b101561408b57565b63b1a539bd60e01b5f5260045ffd5b505011156140a457565b637b3a1f9560e01b5f5260045ffd5b820361404f565b6001545f91825b60208410156140fd578284146140eb576001906001600160601b03856065015416019301926140c1565b925090505b6140f9826145bb565b9190565b925090506140f0565b9290939491670de0b6b3a763ffff19810195818711612f4b576141289161372b565b9390945f915b61010083106141465763b138078b60e01b5f5260045ffd5b801561319a5781878202870304905f5b602081106141ba575b506064908083106141a957670de0b6b3a76400008184035b0204111561418a5760019092019161412e565b9294506140f9935050670de0b6b3a764000060648302049190506136ea565b670de0b6b3a7640000838203614177565b978689146141d057818360019202049801614156565b9761415f565b939592909491670de0b6b3a763ffff19810196818811612f4b576141f99161372b565b9490955f915b61010083106142175763b138078b60e01b5f5260045ffd5b801561319a5781888202880304905f5b6020811061429a575b5060649080831061428957670de0b6b3a76400008184035b0204111561425b576001909201916141ff565b94505050909250670de0b6b3a76400006064830204905f14614280576140f9916136ea565b6140f9916137ee565b670de0b6b3a7640000838203614248565b98878a146142b057818360019202049901614227565b98614230565b919060145260345263a9059cbb60601b5f5260205f6044601082855af1908160015f511416156142e9575b50505f603452565b3b153d1710156142fa575f806142e1565b6390b8ec185f526004601cfd5b9061431191614b00565b8015613fc157670de0b6b3a7640000606482025f19010460018101821061433a5790035f190190565b50505f90565b92909194670de0b6b3a76400008602868104670de0b6b3a76400001487151715612f4b5761438461437d61438b94670de0b6b3a76400009361373e565b809761372b565b04946136ea565b90821561374857826a0c097ce7bc90715b34b9f160241b0490935f945b61010086106143c05763b138078b60e01b5f5260045ffd5b801561319a576064614451846125d88a61254f8961444c88670de0b6b3a76400006144468f614440848f8a61254f8a8f6144398161441f61104597610afb8a9c8f966144328161442c8f8b8f916125d8968f61441f90614425936136ea565b9361372b565b04906136ea565b9561372b565b918d613f99565b04906137ee565b9961372b565b046136ea565b6136ea565b918083106144a157670de0b6b3a764000061446c82856137ee565b0204111561447f576001909501946143a8565b94505050505061449e9150670de0b6b3a76400006064820204906136ea565b90565b670de0b6b3a76400006144b484836137ee565b61446c565b7812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f2281108202156144ea57670de0b6b3a7640000020490565b637c5f487d5f526004601cfd5b60018060a01b031680638b78c6d819547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3638b78c6d81955565b638b78c6d8600c525f526020600c2090815490811618809155600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe265f80a3565b638b78c6d8600c525f526020600c2090815417809155600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe265f80a3565b6001545f670de0b6b3a76400005b602082101561463f5782821461463f57620fffff906145eb8360650154613c1e565b9050929092169064e8d4a510008202151580614636575b1561319a5761462c8260019464e8d4a510008089670de0b6b3a7640000970202928a020204614307565b02049101906145c9565b50821515614602565b9250505090565b9068056bc75e2d630fffff198201918213600116612f4b57565b906803782dace9d8ffffff198201918213600116612f4b57565b906806f05b59d3b1ffffff198201918213600116612f4b57565b9068ad78ebc5ac61ffffff198201918213600116612f4b57565b906856bc75e2d630ffffff198201918213600116612f4b57565b90682b5e3af16b187fffff198201918213600116612f4b57565b906815af1d78b58c3fffff198201918213600116612f4b57565b90680ad78ebc5ac61fffff198201918213600116612f4b57565b906802b5e3af16b187ffff198201918213600116612f4b57565b9068015af1d78b58c3ffff198201918213600116612f4b57565b906803782dace9d90000008201915f6803782dace9d900000084129112908015821691151617612f4b57565b9068ad78ebc5ac620000008201915f68ad78ebc5ac6200000084129112908015821691151617612f4b57565b906856bc75e2d6310000008201915f6856bc75e2d63100000084129112908015821691151617612f4b57565b90682b5e3af16b188000008201915f682b5e3af16b1880000084129112908015821691151617612f4b57565b906815af1d78b58c4000008201915f6815af1d78b58c40000084129112908015821691151617612f4b57565b90680ad78ebc5ac62000008201915f680ad78ebc5ac620000084129112908015821691151617612f4b57565b9068056bc75e2d631000008201915f68056bc75e2d6310000084129112908015821691151617612f4b57565b906802b5e3af16b18800008201915f6802b5e3af16b188000084129112908015821691151617612f4b57565b9068015af1d78b58c400008201915f68015af1d78b58c4000084129112908015821691151617612f4b57565b9067ad78ebc5ac6200008201915f67ad78ebc5ac62000084129112908015821691151617612f4b57565b906756bc75e2d63100008201915f6756bc75e2d631000084129112908015821691151617612f4b57565b908168056bc75e2d6310000001918212600116612f4b57565b9190915f8382019384129112908015821691151617612f4b57565b908160011b9180830560021490151715612f4b57565b90606482029180830560641490151715612f4b57565b9068056bc75e2d6310000082029180830568056bc75e2d631000001490151715612f4b57565b906b02df0ab5a80a22c61ab5a7008202918083056b02df0ab5a80a22c61ab5a7001490151715612f4b57565b90693f1fce3da636ea5cf850820291808305693f1fce3da636ea5cf8501490151715612f4b57565b90690127fa27722cc06cc5e2820291808305690127fa27722cc06cc5e21490151715612f4b57565b9068280e60114edb805d0382029180830568280e60114edb805d031490151715612f4b57565b90680ebc5fb41746121110820291808305680ebc5fb417461211101490151715612f4b57565b906808f00f760a4b2db55d8202918083056808f00f760a4b2db55d1490151715612f4b57565b906806f5f17757889379378202918083056806f5f17757889379371490151715612f4b57565b81810292915f8212600160ff1b821416612f4b578184051490151715612f4b57565b811561374857600160ff1b81145f19831416612f4b570590565b8115614e9157801561433a578060ff1c614e5a57770bce5086492111aea88f4bb1ca6bcf584181ea8059f76532821015614e235780670c7d713b49da00001280614e12575b15614df257670de0b6b3a76400008102908105670de0b6b3a764000003612f4b576ec097ce7bc90715b34b9f0fffffffff19810190600181831316612f4b576a0c097ce7bc90715b34b9f160241b8202918083056a0c097ce7bc90715b34b9f160241b1490151715612f4b576a0c097ce7bc90715b34b9f160241b8101905f6a0c097ce7bc90715b34b9f160241b83129112908015821691151617612f4b57614bed91614ae6565b614bf78180614ac4565b6a0c097ce7bc90715b34b9f160241b90058080808085614c18828098614ac4565b6a0c097ce7bc90715b34b9f160241b90059060038205614c3791614943565b91614c4191614ac4565b6a0c097ce7bc90715b34b9f160241b90059060058205614c6091614943565b91614c6a91614ac4565b6a0c097ce7bc90715b34b9f160241b90059060078205614c8991614943565b91614c9391614ac4565b6a0c097ce7bc90715b34b9f160241b90059060098205614cb291614943565b91614cbc91614ac4565b6a0c097ce7bc90715b34b9f160241b900590600b8205614cdb91614943565b91614ce591614ac4565b6a0c097ce7bc90715b34b9f160241b900590600d8205614d0491614943565b91614d0e91614ac4565b6a0c097ce7bc90715b34b9f160241b9005600f9005614d2c91614943565b614d359061495e565b90614d4a81670de0b6b3a76400008405614ac4565b91670de0b6b3a7640000900790614d6091614ac4565b670de0b6b3a76400009005614d7491614943565b670de0b6b3a7640000905b0580680238fd42c5cf03ffff19131580614ddf575b15614da25761449e90615348565b60405162461bcd60e51b815260206004820152601560248201527450726f64756374206f7574206f6620626f756e647360581b6044820152606490fd5b5068070c1cc73b00c80000811315614d94565b670de0b6b3a764000091614e08614e0d92614eaf565b614ac4565b614d7f565b50670f43fc2c04ee00008112614b45565b60405162461bcd60e51b815260206004820152600f60248201526e59206f7574206f6620626f756e647360881b6044820152606490fd5b60405162461bcd60e51b815260206004820152600f60248201526e58206f7574206f6620626f756e647360881b6044820152606490fd5b5050670de0b6b3a764000090565b600160ff1b8114612f4b575f0390565b670de0b6b3a764000081126152e05761449e906150a7905f775803bcc5cb9634ba4cfb2213f784019318ed4dcb6017880f60361b8212156152b7575b73011798004d755d3c8bc8e03204cf44619e00000082121561525d575b6150a261506061506061509b61503061507561509561508b61503061501a614f3b614f356150609c614974565b9c614974565b6e01855144814a7ff805980ff008400081121561522d575b6b02df0ab5a80a22c61ab5a700811215615200575b693f1fce3da636ea5cf8508112156151d5575b690127fa27722cc06cc5e28112156151aa575b68280e60114edb805d03811215615180575b680ebc5fb41746121110811215615156575b6808f00f760a4b2db55d81121561512c575b6806f5f1775788937937811215615102575b6806248f33704b2866038112156150d8575b6805c548670b9510e7ac8112156150ae575b61501461500e61500983614646565b61498a565b91614852565b90614ae6565b61508561507b61503061503f6150308580614ac4565b68056bc75e2d63100000900590565b80988561506c6150308461506661505a61503083809d614ac4565b94600386055b90614943565b93614ac4565b9e8f6005900590565b9c614ac4565b9960078b05615060565b98614ac4565b9560098705615060565b94614ac4565b600b900590565b61495e565b6064900590565b6150cc6150bd6150d29261498a565b6805c548670b9510e7ac900590565b9c614900565b9b614ffa565b6150f66150e76150fc9261498a565b6806248f33704b286603900590565b9c6148d6565b9b614fe8565b6151206151116151269261498a565b6806f5f1775788937937900590565b9c6148aa565b9b614fd6565b61514a61513b6151509261498a565b6808f00f760a4b2db55d900590565b9c61487e565b9b614fc4565b61517461516561517a9261498a565b680ebc5fb41746121110900590565b9c614852565b9b614fb2565b61519e61518f6151a49261498a565b68280e60114edb805d03900590565b9c614826565b9b614fa0565b6151c96151b96151cf9261498a565b690127fa27722cc06cc5e2900590565b9c6147fa565b9b614f8e565b6151f46151e46151fa9261498a565b693f1fce3da636ea5cf850900590565b9c6147ce565b9b614f7b565b61522161520f6152279261498a565b6b02df0ab5a80a22c61ab5a700900590565b9c6147a2565b9b614f68565b61525161523c6152579261498a565b6e01855144814a7ff805980ff0084000900590565b9c614776565b9b614f53565b906150a261506061506061509b61503061507561509561508b61503061501a614f3b614f356152a461529e6150609e6b1425982cf597cd205cef7380900590565b9e61474a565b9c50505050505050505050505050614f08565b5072195e54c5dd42177f53a27172fa9ec63026282760241b90056806f05b59d3b2000000614eeb565b6152fb615300916a0c097ce7bc90715b34b9f160241b614ae6565b614eaf565b61449e90614e9f565b1561531057565b60405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a5908115e1c1bdb995b9d60821b6044820152606490fd5b680238fd42c5cf03ffff1981121580615746575b61536590615309565b5f811261571d576806f05b59d3b200000081126156e3576153859061467a565b6153a572195e54c5dd42177f53a27172fa9ec63026282760241b91614974565b68056bc75e2d631000009068ad78ebc5ac620000008112156156c3575b6856bc75e2d6310000008112156156a8575b682b5e3af16b1880000081121561568d575b6815af1d78b58c400000811215615672575b680ad78ebc5ac6200000811215615657575b68056bc75e2d6310000081121561563c575b6802b5e3af16b1880000811215615621575b68015af1d78b58c40000811215615606575b8080808080808080806154528161492a565b61545c8280614ac4565b68056bc75e2d63100000900560029005908161547791614943565b9161548191614ac4565b68056bc75e2d63100000900560039005908161549c91614943565b916154a691614ac4565b68056bc75e2d6310000090056004900590816154c191614943565b916154cb91614ac4565b68056bc75e2d6310000090056005900590816154e691614943565b916154f091614ac4565b68056bc75e2d63100000900560069005908161550b91614943565b9161551591614ac4565b68056bc75e2d63100000900560079005908161553091614943565b9161553a91614ac4565b68056bc75e2d63100000900560089005908161555591614943565b9161555f91614ac4565b68056bc75e2d63100000900560099005908161557a91614943565b9161558491614ac4565b68056bc75e2d631000009005600a9005908161559f91614943565b916155a991614ac4565b68056bc75e2d631000009005600b900590816155c491614943565b916155ce91614ac4565b68056bc75e2d631000009005600c90056155e791614943565b6155f091614ac4565b68056bc75e2d631000009005906150a791614ac4565b61503061561561561b92614730565b92614a9e565b90615440565b61503061563061563692614716565b92614a78565b9061542e565b61503061564b61565192614646565b92614a52565b9061541c565b61503061566661566c926146fc565b92614a2c565b9061540a565b615030615681615687926146e2565b92614a04565b906153f8565b61503061569c6156a2926146c8565b926149dc565b906153e6565b6150306156b76156bd926146ae565b926149b0565b906153d4565b6156cd9150614694565b6e01855144814a7ff805980ff0084000906153c2565b6803782dace9d90000008112615712576156fc90614660565b6153a56b1425982cf597cd205cef738091614974565b6153a5600191614974565b61573d6157386a0c097ce7bc90715b34b9f160241b92614e9f565b615348565b61449e91614ae6565b5068070c1cc73b00c8000081131561535c56fea2646970667358221220071e635e6ce0fe15b9370ebff787ee040261846f697e48c551992e1f8f1d6ef164736f6c634300081a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000003bcb4f5c22758b145820e1126e69d96f891d5f8b00000000000000000000000000000000000000000000003635c9adc5dea0000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001800000000000000000000000001b514df3413da9931eb31f2ab72e32c0a507cad50000000000000000000000000000000000000000000000000000000000000002000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38000000000000000000000000fa85fe5a8f5560e9039c04f2b0a90de1415abd7000000000000000000000000000000000000000000000000000000000000000020000000000000000000000005c6e05d97af61637fdf5144ad4ed81a12bfd35b00000000000000000000000005c6e05d97af61637fdf5144ad4ed81a12bfd35b00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000c7d713b49da0000
-----Decoded View---------------
Arg [0] : tokenAddress_ (address): 0x3BcB4F5C22758b145820E1126E69d96F891d5F8b
Arg [1] : amplification_ (uint256): 1000000000000000000000
Arg [2] : tokens_ (address[]): 0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38,0xfA85Fe5A8F5560e9039C04f2b0a90dE1415aBD70
Arg [3] : rateProviders_ (address[]): 0x5C6e05D97AF61637FDf5144AD4ed81A12bfD35b0,0x5C6e05D97AF61637FDf5144AD4ed81A12bfD35b0
Arg [4] : weights_ (uint256[]): 100000000000000000,900000000000000000
Arg [5] : owner_ (address): 0x1b514df3413DA9931eB31f2Ab72e32c0A507Cad5
-----Encoded View---------------
15 Constructor Arguments found :
Arg [0] : 0000000000000000000000003bcb4f5c22758b145820e1126e69d96f891d5f8b
Arg [1] : 00000000000000000000000000000000000000000000003635c9adc5dea00000
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [5] : 0000000000000000000000001b514df3413da9931eb31f2ab72e32c0a507cad5
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [7] : 000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38
Arg [8] : 000000000000000000000000fa85fe5a8f5560e9039c04f2b0a90de1415abd70
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [10] : 0000000000000000000000005c6e05d97af61637fdf5144ad4ed81a12bfd35b0
Arg [11] : 0000000000000000000000005c6e05d97af61637fdf5144ad4ed81a12bfd35b0
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [13] : 000000000000000000000000000000000000000000000000016345785d8a0000
Arg [14] : 0000000000000000000000000000000000000000000000000c7d713b49da0000
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.