More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 6 from a total of 6 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 19238249 | 7 hrs ago | IN | 0 S | 0.00141617 | ||||
Approve | 19237718 | 7 hrs ago | IN | 0 S | 0.0027434 | ||||
Approve | 18799141 | 2 days ago | IN | 0 S | 0.00141592 | ||||
Approve | 18798036 | 2 days ago | IN | 0 S | 0.00155751 | ||||
Approve | 18664461 | 2 days ago | IN | 0 S | 0.00273851 | ||||
Approve | 18463002 | 3 days ago | IN | 0 S | 0.0023287 |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
ICHIVault
Compiler Version
v0.7.6+commit.7338295f
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
1234567891011121314151617181920212223242526// SPDX-License-Identifier: BUSL-1.1pragma solidity 0.7.6;import { SafeMath } from "@openzeppelin/contracts/math/SafeMath.sol";import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol";import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/SafeERC20.sol";import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";import { UV3Math } from "./lib/UV3Math.sol";import { ReentrancyGuard } from "@openzeppelin/contracts/utils/ReentrancyGuard.sol";import { IUniswapV3MintCallback } from "@uniswap/v3-core/contracts/interfaces/callback/IUniswapV3MintCallback.sol";import { IUniswapV3SwapCallback } from "@uniswap/v3-core/contracts/interfaces/callback/IUniswapV3SwapCallback.sol";import { IUniswapV3Pool } from "@equalizer/v3/contracts/interfaces/IUniswapV3Pool.sol";import { IICHIVault } from "../interfaces/IICHIVault.sol";import { IICHIVaultFactory } from "../interfaces/IICHIVaultFactory.sol";import { IMultiRewards } from "../interfaces/IMultiRewards.sol";// Error Codes// IV1 - "constructor: zero address"// IV2 - "createICHIVault: must be single sided"// IV3 - "setTwapPeriod: missing period"// IV4 - "deposit: token0 not allowed"// IV5 - "deposit: token1 not allowed"
123456789101112131415161718192021222324// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity 0.7.6;import './pool/IUniswapV3PoolImmutables.sol';import './pool/IUniswapV3PoolState.sol';import './pool/IUniswapV3PoolDerivedState.sol';import './pool/IUniswapV3PoolActions.sol';//import './pool/IUniswapV3PoolOwnerActions.sol';import './pool/IUniswapV3PoolEvents.sol';/// @title The interface for a Uniswap V3 Pool/// @notice A Uniswap pool facilitates swapping and automated market making between any two assets that strictly conform/// to the ERC20 specification/// @dev The pool interface is broken up into many smaller piecesinterface IUniswapV3Pool isIUniswapV3PoolImmutables,IUniswapV3PoolState,IUniswapV3PoolDerivedState,IUniswapV3PoolActions,//IUniswapV3PoolOwnerActions,IUniswapV3PoolEvents{}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity 0.7.6;/// @title Permissionless pool actions/// @notice Contains pool methods that can be called by anyoneinterface IUniswapV3PoolActions {/// @notice Sets the initial price for the pool/// @dev Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value/// @param sqrtPriceX96 the initial sqrt price of the pool as a Q64.96function initialize(uint160 sqrtPriceX96) external;/// @notice Adds liquidity for the given recipient/tickLower/tickUpper position/// @dev The caller of this method receives a callback in the form of IUniswapV3MintCallback#uniswapV3MintCallback/// in which they must pay any token0 or token1 owed for the liquidity. The amount of token0/token1 due depends/// on tickLower, tickUpper, the amount of liquidity, and the current price./// @param recipient The address for which the liquidity will be created/// @param tickLower The lower tick of the position in which to add liquidity/// @param tickUpper The upper tick of the position in which to add liquidity/// @param amount The amount of liquidity to mint/// @param data Any data that should be passed through to the callback/// @return amount0 The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback/// @return amount1 The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callbackfunction mint(address recipient,int24 tickLower,int24 tickUpper,
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity 0.7.6;/// @title Pool state that is not stored/// @notice Contains view functions to provide information about the pool that is computed rather than stored on the/// blockchain. The functions here may have variable gas costs.interface IUniswapV3PoolDerivedState {/// @notice Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp/// @dev To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing/// the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick,/// you must call it with secondsAgos = [3600, 0]./// @dev The time weighted average tick represents the geometric time weighted average price of the pool, in/// log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio./// @param secondsAgos From how long ago each cumulative tick and liquidity value should be returned/// @return tickCumulatives Cumulative tick values as of each `secondsAgos` from the current block timestamp/// @return secondsPerLiquidityCumulativeX128s Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block/// timestampfunction observe(uint32[] calldata secondsAgos)externalviewreturns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s);/// @notice Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range/// @dev Snapshots must only be compared to other snapshots, taken over a period for which a position existed./// I.e., snapshots cannot be compared if a position is not held for the entire period between when the first/// snapshot is taken and the second snapshot is taken.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity 0.7.6;/// @title Events emitted by a pool/// @notice Contains all events emitted by the poolinterface IUniswapV3PoolEvents {/// @notice Emitted exactly once by a pool when #initialize is first called on the pool/// @dev Mint/Burn/Swap cannot be emitted by the pool before Initialize/// @param sqrtPriceX96 The initial sqrt price of the pool, as a Q64.96/// @param tick The initial tick of the pool, i.e. log base 1.0001 of the starting price of the poolevent Initialize(uint160 sqrtPriceX96, int24 tick);/// @notice Emitted when liquidity is minted for a given position/// @param sender The address that minted the liquidity/// @param owner The owner of the position and recipient of any minted liquidity/// @param tickLower The lower tick of the position/// @param tickUpper The upper tick of the position/// @param amount The amount of liquidity minted to the position range/// @param amount0 How much token0 was required for the minted liquidity/// @param amount1 How much token1 was required for the minted liquidityevent Mint(address sender,address indexed owner,int24 indexed tickLower,int24 indexed tickUpper,uint128 amount,
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity 0.7.6;/// @title Pool state that never changes/// @notice These parameters are fixed for a pool forever, i.e., the methods will always return the same valuesinterface IUniswapV3PoolImmutables {/// @notice The contract that deployed the pool, which must adhere to the IUniswapV3Factory interface/// @return The contract addressfunction factory() external view returns (address);/// @notice The first of the two tokens of the pool, sorted by address/// @return The token contract addressfunction token0() external view returns (address);/// @notice The second of the two tokens of the pool, sorted by address/// @return The token contract addressfunction token1() external view returns (address);////// @notice The pool's fee in hundredths of a bip, i.e. 1e-6////// @return The fee///function fee() external view returns (uint24);/// @notice The pool tick spacing/// @dev Ticks can only be used at multiples of this value, minimum of 1 and always positive
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity 0.7.6;/// @title Pool state that can change/// @notice These methods compose the pool's state, and can change with any frequency including multiple times/// per transactioninterface IUniswapV3PoolState {/// @notice The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas/// when accessed externally./// @return sqrtPriceX96 The current price of the pool as a sqrt(token1/token0) Q64.96 value/// tick The current tick of the pool, i.e. according to the last tick transition that was run./// This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick/// boundary./// observationIndex The index of the last oracle observation that was written,/// observationCardinality The current maximum number of observations stored in the pool,/// observationCardinalityNext The next maximum number of observations, to be updated when the observation./// feeProtocol The protocol fee for both tokens of the pool./// Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0/// is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee./// unlocked Whether the pool is currently locked to reentrancyfunction slot0()externalviewreturns (uint160 sqrtPriceX96,int24 tick,
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.7.0;import "../utils/Context.sol";/*** @dev Contract module which provides a basic access control mechanism, where* there is an account (an owner) that can be granted exclusive access to* specific functions.** By default, the owner account will be the one that deploys the contract. This* can later be changed with {transferOwnership}.** This module is used through inheritance. It will make available the modifier* `onlyOwner`, which can be applied to your functions to restrict their use to* the owner.*/abstract contract Ownable is Context {address private _owner;event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);/*** @dev Initializes the contract setting the deployer as the initial owner.*/constructor () {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.7.0;/*** @dev Wrappers over Solidity's arithmetic operations with added overflow* checks.** Arithmetic operations in Solidity wrap on overflow. This can easily result* in bugs, because programmers usually assume that an overflow raises an* error, which is the standard behavior in high level programming languages.* `SafeMath` restores this intuition by reverting the transaction when an* operation overflows.** Using this library instead of the unchecked operations eliminates an entire* class of bugs, so it's recommended to use it always.*/library SafeMath {/*** @dev Returns the addition of two unsigned integers, with an overflow flag.** _Available since v3.4._*/function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {uint256 c = a + b;if (c < a) return (false, 0);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.7.0;import "../../utils/Context.sol";import "./IERC20.sol";import "../../math/SafeMath.sol";/*** @dev Implementation of the {IERC20} interface.** This implementation is agnostic to the way tokens are created. This means* that a supply mechanism has to be added in a derived contract using {_mint}.* For a generic mechanism see {ERC20PresetMinterPauser}.** TIP: For a detailed writeup see our guide* https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How* to implement supply mechanisms].** We have followed general OpenZeppelin guidelines: functions revert instead* of returning `false` on failure. This behavior is nonetheless conventional* and does not conflict with the expectations of ERC20 applications.** Additionally, an {Approval} event is emitted on calls to {transferFrom}.* This allows applications to reconstruct the allowance for all accounts just* by listening to said events. Other implementations of the EIP may not emit
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.7.0;/*** @dev Interface of the ERC20 standard as defined in the EIP.*/interface IERC20 {/*** @dev Returns the amount of tokens in existence.*/function totalSupply() external view returns (uint256);/*** @dev Returns the amount of tokens owned by `account`.*/function balanceOf(address account) external view returns (uint256);/*** @dev Moves `amount` tokens from the caller's account to `recipient`.** Returns a boolean value indicating whether the operation succeeded.** Emits a {Transfer} event.*/function transfer(address recipient, uint256 amount) external returns (bool);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.7.0;import "./IERC20.sol";import "../../math/SafeMath.sol";import "../../utils/Address.sol";/*** @title SafeERC20* @dev Wrappers around ERC20 operations that throw on failure (when the token* contract returns false). Tokens that return no value (and instead revert or* throw on failure) are also supported, non-reverting calls are assumed to be* successful.* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.*/library SafeERC20 {using SafeMath for uint256;using Address for address;function safeTransfer(IERC20 token, address to, uint256 value) internal {_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));}function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.7.0;/*** @dev Collection of functions related to the address type*/library Address {/*** @dev Returns true if `account` is a contract.** [IMPORTANT]* ====* It is unsafe to assume that an address for which this function returns* false is an externally-owned account (EOA) and not a contract.** Among others, `isContract` will return false for the following* types of addresses:** - an externally-owned account* - a contract in construction* - an address where a contract will be created* - an address where a contract lived, but was destroyed* ====*/function isContract(address account) internal view returns (bool) {
123456789101112131415161718192021222324// SPDX-License-Identifier: MITpragma solidity >=0.6.0 <0.8.0;/** @dev Provides information about the current execution context, including the* sender of the transaction and its data. While these are generally available* via msg.sender and msg.data, they should not be accessed in such a direct* manner, since when dealing with GSN meta-transactions the account sending and* paying for execution may not be the actual sender (as far as an application* is concerned).** This contract is only required for intermediate, library-like contracts.*/abstract contract Context {function _msgSender() internal view virtual returns (address payable) {return msg.sender;}function _msgData() internal view virtual returns (bytes memory) {this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691return msg.data;}}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.7.0;/*** @dev Contract module that helps prevent reentrant calls to a function.** Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier* available, which can be applied to functions to make sure there are no nested* (reentrant) calls to them.** Note that because there is a single `nonReentrant` guard, functions marked as* `nonReentrant` may not call one another. This can be worked around by making* those functions `private`, and then adding `external` `nonReentrant` entry* points to them.** TIP: If you would like to learn more about reentrancy and alternative ways* to protect against it, check out our blog post* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].*/abstract contract ReentrancyGuard {// Booleans are more expensive than uint256 or any type that takes up a full// word because each write operation emits an extra SLOAD to first read the// slot's contents, replace the bits taken up by the boolean, and then write// back. This is the compiler's defense against contract upgrades and// pointer aliasing, and it cannot be disabled.
123456789101112131415161718// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title Callback for IUniswapV3PoolActions#mint/// @notice Any contract that calls IUniswapV3PoolActions#mint must implement this interfaceinterface IUniswapV3MintCallback {/// @notice Called to `msg.sender` after minting liquidity to a position from IUniswapV3Pool#mint./// @dev In the implementation you must pay the pool tokens owed for the minted liquidity./// The caller of this method must be checked to be a UniswapV3Pool deployed by the canonical UniswapV3Factory./// @param amount0Owed The amount of token0 due to the pool for the minted liquidity/// @param amount1Owed The amount of token1 due to the pool for the minted liquidity/// @param data Any data passed through by the caller via the IUniswapV3PoolActions#mint callfunction uniswapV3MintCallback(uint256 amount0Owed,uint256 amount1Owed,bytes calldata data) external;}
123456789101112131415161718192021// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title Callback for IUniswapV3PoolActions#swap/// @notice Any contract that calls IUniswapV3PoolActions#swap must implement this interfaceinterface IUniswapV3SwapCallback {/// @notice Called to `msg.sender` after executing a swap via IUniswapV3Pool#swap./// @dev In the implementation you must pay the pool tokens owed for the swap./// The caller of this method must be checked to be a UniswapV3Pool deployed by the canonical UniswapV3Factory./// amount0Delta and amount1Delta can both be 0 if no tokens were swapped./// @param amount0Delta The amount of token0 that was sent (negative) or must be received (positive) by the pool by/// the end of the swap. If positive, the callback must send that amount of token0 to the pool./// @param amount1Delta The amount of token1 that was sent (negative) or must be received (positive) by the pool by/// the end of the swap. If positive, the callback must send that amount of token1 to the pool./// @param data Any data passed through by the caller via the IUniswapV3PoolActions#swap callfunction uniswapV3SwapCallback(int256 amount0Delta,int256 amount1Delta,bytes calldata data) external;}
123456789101112131415161718192021222324// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;import './pool/IUniswapV3PoolImmutables.sol';import './pool/IUniswapV3PoolState.sol';import './pool/IUniswapV3PoolDerivedState.sol';import './pool/IUniswapV3PoolActions.sol';import './pool/IUniswapV3PoolOwnerActions.sol';import './pool/IUniswapV3PoolEvents.sol';/// @title The interface for a Uniswap V3 Pool/// @notice A Uniswap pool facilitates swapping and automated market making between any two assets that strictly conform/// to the ERC20 specification/// @dev The pool interface is broken up into many smaller piecesinterface IUniswapV3Pool isIUniswapV3PoolImmutables,IUniswapV3PoolState,IUniswapV3PoolDerivedState,IUniswapV3PoolActions,IUniswapV3PoolOwnerActions,IUniswapV3PoolEvents{}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title Permissionless pool actions/// @notice Contains pool methods that can be called by anyoneinterface IUniswapV3PoolActions {/// @notice Sets the initial price for the pool/// @dev Price is represented as a sqrt(amountToken1/amountToken0) Q64.96 value/// @param sqrtPriceX96 the initial sqrt price of the pool as a Q64.96function initialize(uint160 sqrtPriceX96) external;/// @notice Adds liquidity for the given recipient/tickLower/tickUpper position/// @dev The caller of this method receives a callback in the form of IUniswapV3MintCallback#uniswapV3MintCallback/// in which they must pay any token0 or token1 owed for the liquidity. The amount of token0/token1 due depends/// on tickLower, tickUpper, the amount of liquidity, and the current price./// @param recipient The address for which the liquidity will be created/// @param tickLower The lower tick of the position in which to add liquidity/// @param tickUpper The upper tick of the position in which to add liquidity/// @param amount The amount of liquidity to mint/// @param data Any data that should be passed through to the callback/// @return amount0 The amount of token0 that was paid to mint the given amount of liquidity. Matches the value in the callback/// @return amount1 The amount of token1 that was paid to mint the given amount of liquidity. Matches the value in the callbackfunction mint(address recipient,int24 tickLower,int24 tickUpper,
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title Pool state that is not stored/// @notice Contains view functions to provide information about the pool that is computed rather than stored on the/// blockchain. The functions here may have variable gas costs.interface IUniswapV3PoolDerivedState {/// @notice Returns the cumulative tick and liquidity as of each timestamp `secondsAgo` from the current block timestamp/// @dev To get a time weighted average tick or liquidity-in-range, you must call this with two values, one representing/// the beginning of the period and another for the end of the period. E.g., to get the last hour time-weighted average tick,/// you must call it with secondsAgos = [3600, 0]./// @dev The time weighted average tick represents the geometric time weighted average price of the pool, in/// log base sqrt(1.0001) of token1 / token0. The TickMath library can be used to go from a tick value to a ratio./// @param secondsAgos From how long ago each cumulative tick and liquidity value should be returned/// @return tickCumulatives Cumulative tick values as of each `secondsAgos` from the current block timestamp/// @return secondsPerLiquidityCumulativeX128s Cumulative seconds per liquidity-in-range value as of each `secondsAgos` from the current block/// timestampfunction observe(uint32[] calldata secondsAgos)externalviewreturns (int56[] memory tickCumulatives, uint160[] memory secondsPerLiquidityCumulativeX128s);/// @notice Returns a snapshot of the tick cumulative, seconds per liquidity and seconds inside a tick range/// @dev Snapshots must only be compared to other snapshots, taken over a period for which a position existed./// I.e., snapshots cannot be compared if a position is not held for the entire period between when the first/// snapshot is taken and the second snapshot is taken.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title Events emitted by a pool/// @notice Contains all events emitted by the poolinterface IUniswapV3PoolEvents {/// @notice Emitted exactly once by a pool when #initialize is first called on the pool/// @dev Mint/Burn/Swap cannot be emitted by the pool before Initialize/// @param sqrtPriceX96 The initial sqrt price of the pool, as a Q64.96/// @param tick The initial tick of the pool, i.e. log base 1.0001 of the starting price of the poolevent Initialize(uint160 sqrtPriceX96, int24 tick);/// @notice Emitted when liquidity is minted for a given position/// @param sender The address that minted the liquidity/// @param owner The owner of the position and recipient of any minted liquidity/// @param tickLower The lower tick of the position/// @param tickUpper The upper tick of the position/// @param amount The amount of liquidity minted to the position range/// @param amount0 How much token0 was required for the minted liquidity/// @param amount1 How much token1 was required for the minted liquidityevent Mint(address sender,address indexed owner,int24 indexed tickLower,int24 indexed tickUpper,uint128 amount,
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title Pool state that never changes/// @notice These parameters are fixed for a pool forever, i.e., the methods will always return the same valuesinterface IUniswapV3PoolImmutables {/// @notice The contract that deployed the pool, which must adhere to the IUniswapV3Factory interface/// @return The contract addressfunction factory() external view returns (address);/// @notice The first of the two tokens of the pool, sorted by address/// @return The token contract addressfunction token0() external view returns (address);/// @notice The second of the two tokens of the pool, sorted by address/// @return The token contract addressfunction token1() external view returns (address);/// @notice The pool's fee in hundredths of a bip, i.e. 1e-6/// @return The feefunction fee() external view returns (uint24);/// @notice The pool tick spacing/// @dev Ticks can only be used at multiples of this value, minimum of 1 and always positive/// e.g.: a tickSpacing of 3 means ticks can be initialized every 3rd tick, i.e., ..., -6, -3, 0, 3, 6, .../// This value is an int24 to avoid casting even though it is always positive.
1234567891011121314151617181920212223// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title Permissioned pool actions/// @notice Contains pool methods that may only be called by the factory ownerinterface IUniswapV3PoolOwnerActions {/// @notice Set the denominator of the protocol's % share of the fees/// @param feeProtocol0 new protocol fee for token0 of the pool/// @param feeProtocol1 new protocol fee for token1 of the poolfunction setFeeProtocol(uint8 feeProtocol0, uint8 feeProtocol1) external;/// @notice Collect the protocol fee accrued to the pool/// @param recipient The address to which collected protocol fees should be sent/// @param amount0Requested The maximum amount of token0 to send, can be 0 to collect fees in only token1/// @param amount1Requested The maximum amount of token1 to send, can be 0 to collect fees in only token0/// @return amount0 The protocol fee collected in token0/// @return amount1 The protocol fee collected in token1function collectProtocol(address recipient,uint128 amount0Requested,uint128 amount1Requested) external returns (uint128 amount0, uint128 amount1);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title Pool state that can change/// @notice These methods compose the pool's state, and can change with any frequency including multiple times/// per transactioninterface IUniswapV3PoolState {/// @notice The 0th storage slot in the pool stores many values, and is exposed as a single method to save gas/// when accessed externally./// @return sqrtPriceX96 The current price of the pool as a sqrt(token1/token0) Q64.96 value/// tick The current tick of the pool, i.e. according to the last tick transition that was run./// This value may not always be equal to SqrtTickMath.getTickAtSqrtRatio(sqrtPriceX96) if the price is on a tick/// boundary./// observationIndex The index of the last oracle observation that was written,/// observationCardinality The current maximum number of observations stored in the pool,/// observationCardinalityNext The next maximum number of observations, to be updated when the observation./// feeProtocol The protocol fee for both tokens of the pool./// Encoded as two 4 bit values, where the protocol fee of token1 is shifted 4 bits and the protocol fee of token0/// is the lower 4 bits. Used as the denominator of a fraction of the swap fee, e.g. 4 means 1/4th of the swap fee./// unlocked Whether the pool is currently locked to reentrancyfunction slot0()externalviewreturns (uint160 sqrtPriceX96,int24 tick,
12345678910// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.4.0;/// @title FixedPoint96/// @notice A library for handling binary fixed point numbers, see https://en.wikipedia.org/wiki/Q_(number_format)/// @dev Used in SqrtPriceMath.sollibrary FixedPoint96 {uint8 internal constant RESOLUTION = 96;uint256 internal constant Q96 = 0x1000000000000000000000000;}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity >=0.4.0;/// @title Contains 512-bit math functions/// @notice Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision/// @dev Handles "phantom overflow" i.e., allows multiplication and division where an intermediate value overflows 256 bitslibrary FullMath {/// @notice Calculates floor(a×b÷denominator) with full precision. Throws if result overflows a uint256 or denominator == 0/// @param a The multiplicand/// @param b The multiplier/// @param denominator The divisor/// @return result The 256-bit result/// @dev Credit to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldivfunction mulDiv(uint256 a,uint256 b,uint256 denominator) internal pure returns (uint256 result) {// 512-bit multiply [prod1 prod0] = a * b// Compute the product mod 2**256 and mod 2**256 - 1// then use the Chinese Remainder Theorem to reconstruct// the 512 bit result. The result is stored in two 256// variables such that product = prod1 * 2**256 + prod0uint256 prod0; // Least significant 256 bits of the productuint256 prod1; // Most significant 256 bits of the productassembly {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.7.0;/// @title Optimized overflow and underflow safe math operations/// @notice Contains methods for doing math operations that revert on overflow or underflow for minimal gas costlibrary LowGasSafeMath {/// @notice Returns x + y, reverts if sum overflows uint256/// @param x The augend/// @param y The addend/// @return z The sum of x and yfunction add(uint256 x, uint256 y) internal pure returns (uint256 z) {require((z = x + y) >= x);}/// @notice Returns x - y, reverts if underflows/// @param x The minuend/// @param y The subtrahend/// @return z The difference of x and yfunction sub(uint256 x, uint256 y) internal pure returns (uint256 z) {require((z = x - y) <= x);}/// @notice Returns x * y, reverts if overflows/// @param x The multiplicand/// @param y The multiplier/// @return z The product of x and y
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title Math library for computing sqrt prices from ticks and vice versa/// @notice Computes sqrt price for ticks of size 1.0001, i.e. sqrt(1.0001^tick) as fixed point Q64.96 numbers. Supports/// prices between 2**-128 and 2**128library TickMath {/// @dev The minimum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**-128int24 internal constant MIN_TICK = -887272;/// @dev The maximum tick that may be passed to #getSqrtRatioAtTick computed from log base 1.0001 of 2**128int24 internal constant MAX_TICK = -MIN_TICK;/// @dev The minimum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MIN_TICK)uint160 internal constant MIN_SQRT_RATIO = 4295128739;/// @dev The maximum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MAX_TICK)uint160 internal constant MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342;/// @notice Calculates sqrt(1.0001^tick) * 2^96/// @dev Throws if |tick| > max tick/// @param tick The input tick for the above formula/// @return sqrtPriceX96 A Fixed point Q64.96 number representing the sqrt of the ratio of the two assets (token1/token0)/// at the given tickfunction getSqrtRatioAtTick(int24 tick) internal pure returns (uint160 sqrtPriceX96) {uint256 absTick = tick < 0 ? uint256(-int256(tick)) : uint256(int256(tick));require(absTick <= uint256(MAX_TICK), 'T');
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;import '@uniswap/v3-core/contracts/libraries/FullMath.sol';import '@uniswap/v3-core/contracts/libraries/FixedPoint96.sol';/// @title Liquidity amount functions/// @notice Provides functions for computing liquidity amounts from token amounts and priceslibrary LiquidityAmounts {/// @notice Downcasts uint256 to uint128/// @param x The uint258 to be downcasted/// @return y The passed value, downcasted to uint128function toUint128(uint256 x) private pure returns (uint128 y) {require((y = uint128(x)) == x);}/// @notice Computes the amount of liquidity received for a given amount of token0 and price range/// @dev Calculates amount0 * (sqrt(upper) * sqrt(lower)) / (sqrt(upper) - sqrt(lower))/// @param sqrtRatioAX96 A sqrt price representing the first tick boundary/// @param sqrtRatioBX96 A sqrt price representing the second tick boundary/// @param amount0 The amount0 being sent in/// @return liquidity The amount of returned liquidityfunction getLiquidityForAmount0(uint160 sqrtRatioAX96,uint160 sqrtRatioBX96,uint256 amount0
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0 <0.8.0;import '@uniswap/v3-core/contracts/libraries/FullMath.sol';import '@uniswap/v3-core/contracts/libraries/TickMath.sol';import '@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol';import '@uniswap/v3-core/contracts/libraries/LowGasSafeMath.sol';import '../libraries/PoolAddress.sol';/// @title Oracle library/// @notice Provides functions to integrate with V3 pool oraclelibrary OracleLibrary {/// @notice Fetches time-weighted average tick using Uniswap V3 oracle/// @param pool Address of Uniswap V3 pool that we want to observe/// @param period Number of seconds in the past to start calculating time-weighted average/// @return timeWeightedAverageTick The time-weighted average tick from (block.timestamp - period) to block.timestampfunction consult(address pool, uint32 period) internal view returns (int24 timeWeightedAverageTick) {require(period != 0, 'BP');uint32[] memory secondAgos = new uint32[](2);secondAgos[0] = period;secondAgos[1] = 0;(int56[] memory tickCumulatives, ) = IUniswapV3Pool(pool).observe(secondAgos);int56 tickCumulativesDelta = tickCumulatives[1] - tickCumulatives[0];
1234567891011121314151617181920212223242526// SPDX-License-Identifier: GPL-2.0-or-laterpragma solidity >=0.5.0;/// @title Provides functions for deriving a pool address from the factory, tokens, and the feelibrary PoolAddress {bytes32 internal constant POOL_INIT_CODE_HASH = 0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54;/// @notice The identifying key of the poolstruct PoolKey {address token0;address token1;uint24 fee;}/// @notice Returns PoolKey: the ordered tokens with the matched fee levels/// @param tokenA The first token of a pool, unsorted/// @param tokenB The second token of a pool, unsorted/// @param fee The fee level of the pool/// @return Poolkey The pool details with ordered token0 and token1 assignmentsfunction getPoolKey(address tokenA,address tokenB,uint24 fee) internal pure returns (PoolKey memory) {if (tokenA > tokenB) (tokenA, tokenB) = (tokenB, tokenA);return PoolKey({token0: tokenA, token1: tokenB, fee: fee});
1234567891011121314151617181920212223242526// SPDX-License-Identifier: BUSL-1.1pragma solidity 0.7.6;import { TickMath } from "@uniswap/v3-core/contracts/libraries/TickMath.sol";import { LiquidityAmounts } from "@uniswap/v3-periphery/contracts/libraries/LiquidityAmounts.sol";import { OracleLibrary } from "@uniswap/v3-periphery/contracts/libraries/OracleLibrary.sol";library UV3Math {/// @dev The minimum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MIN_TICK)uint160 internal constant MIN_SQRT_RATIO = 4295128739;/// @dev The maximum value that can be returned from #getSqrtRatioAtTick. Equivalent to getSqrtRatioAtTick(MAX_TICK)uint160 internal constant MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342;/******************** Tick Math*******************/function getSqrtRatioAtTick(int24 currentTick) public pure returns (uint160 sqrtPriceX96) {sqrtPriceX96 = TickMath.getSqrtRatioAtTick(currentTick);}/******************** LiquidityAmounts*******************/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: Unlicensepragma solidity 0.7.6;interface IICHIVault {// getters:function ichiVaultFactory() external view returns (address);function pool() external view returns (address);function token0() external view returns (address);function allowToken0() external view returns (bool);function token1() external view returns (address);function allowToken1() external view returns (bool);function fee() external view returns (uint24);function tickSpacing() external view returns (int24);function ammFeeRecipient() external view returns(address);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: BUSL-1.1pragma solidity 0.7.6;interface IICHIVaultFactory {event FeeRecipient(address indexed sender, address feeRecipient);event AmmFee(address indexed sender, uint256 ammFee);event BaseFee(address indexed sender, uint256 baseFee);event BaseFeeSplit(address indexed sender, uint256 baseFeeSplit);event DeployICHIVaultFactory(address indexed sender, address uniswapV3Factory);event ICHIVaultCreated(address indexed sender,address ichiVault,address tokenA,bool allowTokenA,address tokenB,bool allowTokenB,int24 tickSpacing,uint256 count);
123456// SPDX-License-Identifier: Unlicensepragma solidity >=0.5.0;interface IMultiRewards {function notifyRewardAmount(address rewardsToken, uint256 reward) external;}
1234567891011121314151617181920212223242526{"optimizer": {"enabled": true,"runs": 200},"outputSelection": {"*": {"*": ["evm.bytecode","evm.deployedBytecode","devdoc","userdoc","metadata","abi"]}},"metadata": {"useLiteralContent": true},"libraries": {"contracts/lib/UV3Math.sol": {"UV3Math": "0xdb03e05b90bed1147df18a1997fac8e045431fac"}}}
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_pool","type":"address"},{"internalType":"bool","name":"_allowToken0","type":"bool"},{"internalType":"bool","name":"_allowToken1","type":"bool"},{"internalType":"address","name":"__owner","type":"address"},{"internalType":"uint32","name":"_twapPeriod","type":"uint32"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"affiliate","type":"address"}],"name":"Affiliate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"ammFeeRecipient","type":"address"}],"name":"AmmFeeRecipient","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"feeAmount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"feeAmount1","type":"uint256"}],"name":"CollectFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"allowToken0","type":"bool"},{"indexed":false,"internalType":"bool","name":"allowToken1","type":"bool"},{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"twapPeriod","type":"uint256"}],"name":"DeployICHIVault","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"deposit0Max","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"deposit1Max","type":"uint256"}],"name":"DepositMax","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"hysteresis","type":"uint256"}],"name":"Hysteresis","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"int24","name":"tick","type":"int24"},{"indexed":false,"internalType":"uint256","name":"totalAmount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalAmount1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"feeAmount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"feeAmount1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"Rebalance","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint32","name":"newAuxTwapPeriod","type":"uint32"}],"name":"SetAuxTwapPeriod","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"bool","name":"doNotifyRewards","type":"bool"}],"name":"SetDoNotifyRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint32","name":"newTwapPeriod","type":"uint32"}],"name":"SetTwapPeriod","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"affiliate","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowToken0","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowToken1","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ammFeeRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"auxTwapPeriod","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseLower","outputs":[{"internalType":"int24","name":"","type":"int24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseUpper","outputs":[{"internalType":"int24","name":"","type":"int24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collectFees","outputs":[{"internalType":"uint256","name":"fees0","type":"uint256"},{"internalType":"uint256","name":"fees1","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentTick","outputs":[{"internalType":"int24","name":"tick","type":"int24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"deposit0","type":"uint256"},{"internalType":"uint256","name":"deposit1","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deposit0Max","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deposit1Max","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"doNotifyRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fee","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBasePosition","outputs":[{"internalType":"uint128","name":"liquidity","type":"uint128"},{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLimitPosition","outputs":[{"internalType":"uint128","name":"liquidity","type":"uint128"},{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalAmounts","outputs":[{"internalType":"uint256","name":"total0","type":"uint256"},{"internalType":"uint256","name":"total1","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hysteresis","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ichiVaultFactory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitLower","outputs":[{"internalType":"int24","name":"","type":"int24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitUpper","outputs":[{"internalType":"int24","name":"","type":"int24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int24","name":"_baseLower","type":"int24"},{"internalType":"int24","name":"_baseUpper","type":"int24"},{"internalType":"int24","name":"_limitLower","type":"int24"},{"internalType":"int24","name":"_limitUpper","type":"int24"},{"internalType":"int256","name":"swapQuantity","type":"int256"}],"name":"rebalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_affiliate","type":"address"}],"name":"setAffiliate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_ammFeeRecipient","type":"address"}],"name":"setAmmFeeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"newAuxTwapPeriod","type":"uint32"}],"name":"setAuxTwapPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_deposit0Max","type":"uint256"},{"internalType":"uint256","name":"_deposit1Max","type":"uint256"}],"name":"setDepositMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_hysteresis","type":"uint256"}],"name":"setHysteresis","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"newTwapPeriod","type":"uint32"}],"name":"setTwapPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tickSpacing","outputs":[{"internalType":"int24","name":"","type":"int24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token0","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"twapPeriod","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"uniswapV3MintCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"amount0Delta","type":"int256"},{"internalType":"int256","name":"amount1Delta","type":"int256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"uniswapV3SwapCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_doNotifyRewards","type":"bool"}],"name":"updateDoNotifyRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6101606040523480156200001257600080fd5b5060405162005cbf38038062005cbf833981810160405260a08110156200003857600080fd5b508051602080830151604080850151606086015160809096015182518084018452601481527f49434849205661756c74204c69717569646974790000000000000000000000008187019081528451808601909552600d85526c0494348495f5661756c745f4c5609c1b968501969096528051969794969295919390929091620000c5916003919062000613565b508051620000db90600490602084019062000613565b50506005805460ff191660121790555060016006556000620000fc6200048c565b600780546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062005c9f833981519152908290a3506001600160a01b0385166200017b576040805162461bcd60e51b815260206004820152600360248201526249563160e81b604482015290519081900360640190fd5b83801562000187575082155b806200019a57508280156200019a575083155b620001d2576040805162461bcd60e51b815260206004820152600360248201526224ab1960e91b604482015290519081900360640190fd5b33606090811b60805285901b6001600160601b03191660a05260408051630dfe168160e01b815290516001600160a01b03871691630dfe1681916004808301926020929190829003018186803b1580156200022c57600080fd5b505afa15801562000241573d6000803e3d6000fd5b505050506040513d60208110156200025857600080fd5b505160601b6001600160601b03191660c0526040805163d21220a760e01b815290516001600160a01b0387169163d21220a7916004808301926020929190829003018186803b158015620002ab57600080fd5b505afa158015620002c0573d6000803e3d6000fd5b505050506040513d6020811015620002d757600080fd5b505160601b6001600160601b03191660e05283151560f890811b61010052831515901b61012052600d805463ffffffff191663ffffffff831690811790915560049004600d60046101000a81548163ffffffff021916908363ffffffff160217905550846001600160a01b031663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200037457600080fd5b505afa15801562000389573d6000803e3d6000fd5b505050506040513d6020811015620003a057600080fd5b5051600290810b900b60e81b61014052620003bb8262000490565b620003f86002620003e46064670de0b6b3a76400006200059b60201b62002ca51790919060201c565b6200059b60201b62002ca51790919060201c565b600c55600019600a819055600b55600880546001600160a01b031990811690915560098054909116905560408051851515815284151560208201526001600160a01b038481168284015263ffffffff8416606083015291519187169133917f3e708ccf7d0e6de8558e020ea36189511cb3435bbfec54e721a48ee4df0d4f8c919081900360800190a35050505050620006bf565b3390565b6200049a6200048c565b6001600160a01b0316620004ad62000604565b6001600160a01b03161462000509576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005505760405162461bcd60e51b815260040180806020018281038252602681526020018062005c796026913960400191505060405180910390fd5b6007546040516001600160a01b0380841692169060008051602062005c9f83398151915290600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000808211620005f2576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381620005fc57fe5b049392505050565b6007546001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200064b576000855562000696565b82601f106200066657805160ff191683800117855562000696565b8280016001018555821562000696579182015b828111156200069657825182559160200191906001019062000679565b50620006a4929150620006a8565b5090565b5b80821115620006a45760008155600101620006a9565b60805160601c60a05160601c60c05160601c60e05160601c6101005160f81c6101205160f81c6101405160e81c6154076200087260003980611bae5280611e355280611e715280611ef05280611f2c525080610ffa528061333b52508061127752806132da525080610ba85280610c6252806113a6528061142e52806114c9528061159e528061197e5280611bd25280611d275280611da1528061234b52806126ae5280612c495280612c7d528061442e528061458352806145be52806148395280614877525080610af75280610c285280610eac5280611385528061140c52806114a8528061156352806118d55280611ced5280611d6652806122b952806125f752806127b65280612bc15280612bfa52806143ae52806144f2528061452d528061477952806147b7525080610d235280610ee052806113ea52806114875280611c5b528061201d5280612114528061240e52806128b05280612b23528061350952806136535280613d815280613e3052806140a852806141d452806148b15280614b5a5280614da15280614e5152508061288a528061427052806143135280614607528061469f52506154076000f3fe608060405234801561001057600080fd5b506004361061030b5760003560e01c8063897f078c1161019d578063d21220a7116100e9578063ddca3f43116100a2578063f62073261161007c578063f62073261461089f578063f9c95d46146108a7578063fa082743146108ca578063fa461e33146108d25761030b565b8063ddca3f4314610851578063f2fde38b14610871578063f3172f9e146108975761030b565b8063d21220a714610750578063d2eabcfc14610758578063d348799714610760578063d87346aa146107da578063dd62ed3e1461081b578063dd81fa63146108495761030b565b8063a457c2d711610156578063ac492fcd11610130578063ac492fcd14610719578063c4a7761e14610738578063c879657214610740578063d0c93a7c146107485761030b565b8063a457c2d7146106b9578063a9059cbb146106e5578063aaf5eb68146107115761030b565b8063897f078c1461061e5780638da5cb5b146106265780638dbdbe6d1461062e57806391563d321461066057806395d89b4114610681578063a049de6b146106895761030b565b80633e091ee91161025c578063648cab85116102155780637aea5309116101ef5780637aea5309146105e05780637f7a1eec146105e857806381de128b146105f0578063888a9134146106165761030b565b8063648cab85146105aa57806370a08231146105b2578063715018a6146105d85761030b565b80633e091ee91461052f578063400f0ceb1461055257806345e05f43146105755780634d461fbb1461057d57806351e87af7146105855780635ffc1ff71461058d5761030b565b806316f0115b116102c95780632bbb56d9116102a35780632bbb56d9146104b5578063313ce567146104dd57806337e41b40146104fb57806339509351146105035761030b565b806316f0115b1461045d57806318160ddd1461046557806323b872dd1461047f5761030b565b8062f714ce14610310578063065e53601461035557806306fdde0314610374578063095ea7b3146103f15780630dfe1681146104315780630f35bcac14610455575b600080fd5b61033c6004803603604081101561032657600080fd5b50803590602001356001600160a01b031661094c565b6040805192835260208301919091528051918290030190f35b61035d610d1c565b6040805160029290920b8252519081900360200190f35b61037c610df6565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103b657818101518382015260200161039e565b50505050905090810190601f1680156103e35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61041d6004803603604081101561040757600080fd5b506001600160a01b038135169060200135610e8c565b604080519115158252519081900360200190f35b610439610eaa565b604080516001600160a01b039092168252519081900360200190f35b61035d610ece565b610439610ede565b61046d610f02565b60408051918252519081900360200190f35b61041d6004803603606081101561049557600080fd5b506001600160a01b03813581169160208101359091169060400135610f08565b6104db600480360360208110156104cb57600080fd5b50356001600160a01b0316610f90565b005b6104e5610fef565b6040805160ff9092168252519081900360200190f35b61041d610ff8565b61041d6004803603604081101561051957600080fd5b506001600160a01b03813516906020013561101c565b6104db6004803603604081101561054557600080fd5b508035906020013561106a565b6104db6004803603602081101561056857600080fd5b503563ffffffff166110ba565b610439611125565b61046d611134565b61035d61113a565b6104db600480360360208110156105a357600080fd5b503561114a565b61046d611190565b61046d600480360360208110156105c857600080fd5b50356001600160a01b0316611196565b6104db6111b1565b61046d61126f565b61041d611275565b6104db6004803603602081101561060657600080fd5b50356001600160a01b0316611299565b61035d6112f8565b610439611308565b610439611317565b61046d6004803603606081101561064457600080fd5b50803590602081013590604001356001600160a01b0316611326565b6106686116ac565b6040805163ffffffff9092168252519081900360200190f35b61037c6116bf565b610691611720565b604080516001600160801b039094168452602084019290925282820152519081900360600190f35b61041d600480360360408110156106cf57600080fd5b506001600160a01b0381351690602001356117b8565b61041d600480360360408110156106fb57600080fd5b506001600160a01b038135169060200135611820565b61046d611834565b6104db6004803603602081101561072f57600080fd5b50351515611840565b61033c6118a8565b61033c6119f3565b61035d611bac565b610439611bd0565b610691611bf4565b6104db6004803603606081101561077657600080fd5b813591602081013591810190606081016040820135600160201b81111561079c57600080fd5b8201836020820111156107ae57600080fd5b803590602001918460018302840111600160201b831117156107cf57600080fd5b509092509050611c50565b6104db600480360360a08110156107f057600080fd5b508035600290810b916020810135820b916040820135810b91606081013590910b9060800135611dd0565b61046d6004803603604081101561083157600080fd5b506001600160a01b038135811691602001351661285d565b610439612888565b6108596128ac565b6040805162ffffff9092168252519081900360200190f35b6104db6004803603602081101561088757600080fd5b50356001600160a01b0316612938565b61041d612a4d565b610668612a5d565b6104db600480360360208110156108bd57600080fd5b503563ffffffff16612a69565b61035d612b08565b6104db600480360360608110156108e857600080fd5b813591602081013591810190606081016040820135600160201b81111561090e57600080fd5b82018360208201111561092057600080fd5b803590602001918460018302840111600160201b8311171561094157600080fd5b509092509050612b18565b60008060026006541415610995576040805162461bcd60e51b815260206004820152601f6024820152600080516020615220833981519152604482015290519081900360640190fd5b6002600655836109d5576040805162461bcd60e51b815260206004808301919091526024820152634956313160e01b604482015290519081900360640190fd5b6001600160a01b038316610a19576040805162461bcd60e51b8152602060048083019190915260248201526324ab189960e11b604482015290519081900360640190fd5b6000610a23610f02565b905080851480610a3e5750610a3a856103e8612d0c565b8110155b610a78576040805162461bcd60e51b815260206004808301919091526024820152634956313360e01b604482015290519081900360640190fd5b6009546000908190610aad90600160a01b8104600290810b91600160b81b9004900b610aa582828c612d66565b896000612da6565b60095491935091506000908190610ae790600160d01b8104600290810b91600160e81b9004900b610adf82828e612d66565b8b6000612da6565b915091506000610b9a86610b948c7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610b6257600080fd5b505afa158015610b76573d6000803e3d6000fd5b505050506040513d6020811015610b8c57600080fd5b505190612dd4565b90612ca5565b90506000610c1387610b948d7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610b6257600080fd5b90508115610c4f57610c4f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168b84612e2d565b8015610c8957610c896001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168b83612e2d565b610c9d82610c978887612d0c565b90612d0c565b9850610cad81610c978786612d0c565b9750610cb9338c612e84565b604080518c8152602081018b90528082018a905290516001600160a01b038c169133917febff2602b3f468259e1e99f613fed6691f3a6526effe6ef3e768ba7ae7a36c4f9181900360600190a35050505050505060016006819055509250929050565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015610d7a57600080fd5b505afa158015610d8e573d6000803e3d6000fd5b505050506040513d60e0811015610da457600080fd5b50602081015160c090910151909250905080610df0576040805162461bcd60e51b81526020600480830191909152602482015263092ac62760e31b604482015290519081900360640190fd5b50919050565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e825780601f10610e5757610100808354040283529160200191610e82565b820191906000526020600020905b815481529060010190602001808311610e6557829003601f168201915b5050505050905090565b6000610ea0610e99612f80565b8484612f84565b5060015b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600954600160e81b900460020b81565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025490565b6000610f15848484613070565b610f8584610f21612f80565b610f80856040518060600160405280602881526020016152f1602891396001600160a01b038a16600090815260016020526040812090610f5f612f80565b6001600160a01b0316815260208101919091526040016000205491906131cb565b612f84565b5060015b9392505050565b610f98613262565b600980546001600160a01b0383166001600160a01b03199091168117909155604080519182525133917f3066ef5dd340e8b2ea28d62f5a8391eb7a82d3ee87532724a1ca4386d34f7523919081900360200190a250565b60055460ff1690565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610ea0611029612f80565b84610f80856001600061103a612f80565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612d0c565b611072613262565b600a829055600b8190556040805183815260208101839052815133927fafd3b05a4086b378b6f291200a528d8aed8c5e0317af77436b001f1bec28821a928290030190a25050565b6110c2613262565b600d805467ffffffff000000001916600160201b63ffffffff84169081029190911790915560408051338152602081019290925280517f39da19f5960a3f182ced1ff1853b7be54f37150799b3003a40bf4e0d4c740c859281900390910190a150565b6009546001600160a01b031681565b600b5481565b600954600160d01b900460020b81565b611152613262565b600c81905560408051828152905133917f529698f34660760dcb172def5c99d62e1b5b74b444df322e8f7da31f2bd0a86b919081900360200190a250565b600a5481565b6001600160a01b031660009081526020819052604090205490565b6111b9612f80565b6001600160a01b03166111ca611317565b6001600160a01b031614611225576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6007546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600780546001600160a01b0319169055565b600c5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6112a1613262565b600880546001600160a01b0383166001600160a01b03199091168117909155604080519182525133917fbb78b7c13893a913fa8c9ecb9fdaf97597aa412a39c778bf976790555f0942f7919081900360200190a250565b600954600160b81b900460020b81565b6008546001600160a01b031681565b6007546001600160a01b031690565b60006002600654141561136e576040805162461bcd60e51b815260206004820152601f6024820152600080516020615220833981519152604482015290519081900360640190fd5b600260065561137e8484846132d8565b60006113db7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006113cd610d1c565b670de0b6b3a764000061371e565b600d54909150600090611462907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000009063ffffffff16670de0b6b3a7640000613854565b600d54909150600090600160201b900463ffffffff166114825781611509565b6115097f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000600d60049054906101000a900463ffffffff16670de0b6b3a7640000613854565b9050611516838383613a17565b6000806115216118a8565b9150915060006115348686866000613b6b565b9050600061154e670de0b6b3a7640000610b948d85612dd4565b90508a1561158b5761158b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308e613bde565b89156115c6576115c66001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308d613bde565b6115d08a82612d0c565b97506115da610f02565b156116325760006115ee8888886001613b6b565b90506000611608670de0b6b3a7640000610b948885612dd4565b90506116296116178287612d0c565b610b94611622610f02565b8d90612dd4565b99505050611641565b61163e886103e8612dd4565b97505b61164b8989613c38565b60408051898152602081018d90528082018c905290516001600160a01b038b169133917f4e2ca0515ed1aef1395f66b5303bb5d6f1bf9d61a353fa53f73f8ac9973fa9f69181900360600190a3505060016006555093979650505050505050565b600d54600160201b900463ffffffff1681565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e825780601f10610e5757610100808354040283529160200191610e82565b6000806000806000806117516009601a9054906101000a900460020b6009601d9054906101000a900460020b613d28565b600954929550909350915061177c90600160d01b8104600290810b91600160e81b9004900b85613e29565b93965094509192508491611799856001600160801b038416612d0c565b94506117ae846001600160801b038316612d0c565b9350505050909192565b6000610ea06117c5612f80565b84610f80856040518060600160405280602581526020016153ad60259139600160006117ef612f80565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906131cb565b6000610ea061182d612f80565b8484613070565b670de0b6b3a764000081565b611848613262565b600d805468ff00000000000000001916600160401b8315159081029190911790915560408051338152602081019290925280517fd7930fc7547e2193c58c5363ccee3fde52199283feed362be5ec516dd8f734fa9281900390910190a150565b6000806000806118b6611bf4565b92509250506000806118c6611720565b925092505061197282610c97867f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561194057600080fd5b505afa158015611954573d6000803e3d6000fd5b505050506040513d602081101561196a57600080fd5b505190612d0c565b95506119e981610c97857f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561194057600080fd5b9450505050509091565b60008060026006541415611a3c576040805162461bcd60e51b815260206004820152601f6024820152600080516020615220833981519152604482015290519081900360640190fd5b60026006819055600954600091611a6691600160a01b8104820b91600160b81b909104900b613d28565b50909150506001600160801b03811615611ac5576009546000908190611aa590600160a01b8104600290810b91600160b81b9004900b83306001614064565b9092509050611ab48583612d0c565b9450611ac08482612d0c565b935050505b600954600090611aea90600160d01b8104600290810b91600160e81b9004900b613d28565b50909150506001600160801b03811615611b49576009546000908190611b2990600160d01b8104600290810b91600160e81b9004900b83306001614064565b9092509050611b388683612d0c565b9550611b448582612d0c565b945050505b6040805185815260208101859052815133927fec8208dd791fa8ffdc0d7427f3ba9c0ed06f1bce9a86254e6940c10cc1802fef928290030190a26000841180611b925750600083115b15611ba157611ba1848461426c565b505060016006559091565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600080600080611c25600960149054906101000a900460020b600960179054906101000a900460020b613d28565b600954929550909350915061177c90600160a01b8104600290810b91600160b81b9004900b85613e29565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611cb3576040805162461bcd60e51b815260206004820152600360248201526263623160e81b604482015290519081900360640190fd5b600082826020811015611cc557600080fd5b50356001600160a01b0316905030811415611d53578415611d1457611d146001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163387612e2d565b8315611d4e57611d4e6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163386612e2d565b611dc9565b8415611d8e57611d8e6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016823388613bde565b8315611dc957611dc96001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016823387613bde565b5050505050565b60026006541415611e16576040805162461bcd60e51b815260206004820152601f6024820152600080516020615220833981519152604482015290519081900360640190fd5b6002600655611e23613262565b8360020b8560020b128015611e6857507f000000000000000000000000000000000000000000000000000000000000000060020b8560020b81611e6257fe5b0760020b155b8015611ea457507f000000000000000000000000000000000000000000000000000000000000000060020b8460020b81611e9e57fe5b0760020b155b611ede576040805162461bcd60e51b8152602060048083019190915260248201526312558c4d60e21b604482015290519081900360640190fd5b8160020b8360020b128015611f2357507f000000000000000000000000000000000000000000000000000000000000000060020b8360020b81611f1d57fe5b0760020b155b8015611f5f57507f000000000000000000000000000000000000000000000000000000000000000060020b8260020b81611f5957fe5b0760020b155b611f99576040805162461bcd60e51b815260206004808301919091526024820152634956313560e01b604482015290519081900360640190fd5b600954600090611fbe90600160a01b8104600290810b91600160b81b9004900b613d28565b50909150506001600160801b03811615612090576009546040805163a34123a760e01b8152600160a01b8304600290810b810b6004830152600160b81b909304830b90920b602483015260006044830181905281516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169363a34123a7936064808301949193928390030190829087803b15801561206357600080fd5b505af1158015612077573d6000803e3d6000fd5b505050506040513d604081101561208d57600080fd5b50505b6009546000906120b590600160d01b8104600290810b91600160e81b9004900b613d28565b50909150506001600160801b03811615612187576009546040805163a34123a760e01b8152600160d01b8304600290810b810b6004830152600160e81b909304830b90920b602483015260006044830181905281516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169363a34123a7936064808301949193928390030190829087803b15801561215a57600080fd5b505af115801561216e573d6000803e3d6000fd5b505050506040513d604081101561218457600080fd5b50505b60095460009081906121ae90600160a01b8104600290810b91600160b81b9004900b613d28565b6009546001600160801b039283169550911692506000915081906121e790600160d01b8104600290810b91600160e81b9004900b613d28565b6001600160801b039182169450169150600090506122058584612d0c565b905060006122138584612d0c565b60095490915061223c90600160a01b8104600290810b91600160b81b9004900b8a306001612da6565b505060095461226490600160d01b8104600290810b91600160e81b9004900b89306001612da6565b5050612270828261426c565b7fbc4c20ad04f161d631d9ce94d27659391196415aa3c42f6a71c62e905ece782d612299610d1c565b604080516370a0823160e01b815230600482015290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a08231916024808301926020929190829003018186803b1580156122ff57600080fd5b505afa158015612313573d6000803e3d6000fd5b505050506040513d602081101561232957600080fd5b5051604080516370a0823160e01b815230600482015290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a08231916024808301926020929190829003018186803b15801561239157600080fd5b505afa1580156123a5573d6000803e3d6000fd5b505050506040513d60208110156123bb57600080fd5b505185856123c7610f02565b6040805160029790970b87526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190a1881561258e576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663128acb083060008c1380612446578c600003612448565b8c5b60008e1361246a5773fffd8963efd1fc6a506488495d951d5263988d25612471565b6401000276a45b3060405160200180826001600160a01b031681526020019150506040516020818303038152906040526040518663ffffffff1660e01b815260040180866001600160a01b031681526020018515158152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156125125781810151838201526020016124fa565b50505050905090810190601f16801561253f5780820380516001836020036101000a031916815260200191505b5096505050505050506040805180830381600087803b15801561256157600080fd5b505af1158015612575573d6000803e3d6000fd5b505050506040513d604081101561258b57600080fd5b50505b8c600960146101000a81548162ffffff021916908360020b62ffffff1602179055508b600960176101000a81548162ffffff021916908360020b62ffffff160217905550612725600960149054906101000a900460020b600960179054906101000a900460020b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561266257600080fd5b505afa158015612676573d6000803e3d6000fd5b505050506040513d602081101561268c57600080fd5b5051604080516370a0823160e01b815230600482015290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a08231916024808301926020929190829003018186803b1580156126f457600080fd5b505afa158015612708573d6000803e3d6000fd5b505050506040513d602081101561271e57600080fd5b50516148ac565b60095490985061274b90600160a01b8104600290810b91600160b81b9004900b8a614adc565b50508a6009601a6101000a81548162ffffff021916908360020b62ffffff160217905550896009601d6101000a81548162ffffff021916908360020b62ffffff1602179055506128216009601a9054906101000a900460020b6009601d9054906101000a900460020b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561266257600080fd5b60095490975061284790600160d01b8104600290810b91600160e81b9004900b89614adc565b5050600160065550505050505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddca3f436040518163ffffffff1660e01b815260040160206040518083038186803b15801561290757600080fd5b505afa15801561291b573d6000803e3d6000fd5b505050506040513d602081101561293157600080fd5b5051905090565b612940612f80565b6001600160a01b0316612951611317565b6001600160a01b0316146129ac576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166129f15760405162461bcd60e51b81526004018080602001828103825260268152602001806152626026913960400191505060405180910390fd5b6007546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b600d54600160401b900460ff1681565b600d5463ffffffff1681565b612a71613262565b60008163ffffffff1611612ab2576040805162461bcd60e51b815260206004820152600360248201526249563360e81b604482015290519081900360640190fd5b600d805463ffffffff191663ffffffff831690811790915560408051338152602081019290925280517fe4c60f4984caeb7f45b0cfe6d4233c115601ab11d141bc2cbf68b48346cdef389281900390910190a150565b600954600160a01b900460020b81565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612b7b576040805162461bcd60e51b815260206004820152600360248201526231b11960e91b604482015290519081900360640190fd5b600082826020811015612b8d57600080fd5b50356001600160a01b031690506000851315612c22576001600160a01b038116301415612bed57612be86001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163387612e2d565b611d4e565b611d4e6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016823388613bde565b6000841315611dc9576001600160a01b038116301415612c7057611d4e6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163386612e2d565b611dc96001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016823387613bde565b6000808211612cfb576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612d0457fe5b049392505050565b600082820183811015610f89576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600080612d738585613d28565b50509050612d9d612d98612d85610f02565b610b946001600160801b03851687612dd4565b614c40565b95945050505050565b6000806001600160801b03851615612dca57612dc58787878787614064565b915091505b9550959350505050565b600082612de357506000610ea4565b82820282848281612df057fe5b0414610f895760405162461bcd60e51b81526004018080602001828103825260218152602001806152d06021913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612e7f908490614c8e565b505050565b6001600160a01b038216612ec95760405162461bcd60e51b81526004018080602001828103825260218152602001806153196021913960400191505060405180910390fd5b612ed582600083612e7f565b612f1281604051806060016040528060228152602001615240602291396001600160a01b03851660009081526020819052604090205491906131cb565b6001600160a01b038316600090815260208190526040902055600254612f389082614d3f565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b3390565b6001600160a01b038316612fc95760405162461bcd60e51b815260040180806020018281038252602481526020018061535f6024913960400191505060405180910390fd5b6001600160a01b03821661300e5760405162461bcd60e51b81526004018080602001828103825260228152602001806152886022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166130b55760405162461bcd60e51b815260040180806020018281038252602581526020018061533a6025913960400191505060405180910390fd5b6001600160a01b0382166130fa5760405162461bcd60e51b81526004018080602001828103825260238152602001806151fd6023913960400191505060405180910390fd5b613105838383612e7f565b613142816040518060600160405280602681526020016152aa602691396001600160a01b03861660009081526020819052604090205491906131cb565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546131719082612d0c565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561325a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561321f578181015183820152602001613207565b50505050905090810190601f16801561324c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b61326a612f80565b6001600160a01b031661327b611317565b6001600160a01b0316146132d6576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b7f000000000000000000000000000000000000000000000000000000000000000080613302575082155b613339576040805162461bcd60e51b815260206004820152600360248201526212558d60ea1b604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000080613363575081155b61339a576040805162461bcd60e51b815260206004820152600360248201526249563560e81b604482015290519081900360640190fd5b60008311806133a95750600082115b6133e0576040805162461bcd60e51b815260206004820152600360248201526224ab1b60e91b604482015290519081900360640190fd5b600a54831080156133f25750600b5482105b613429576040805162461bcd60e51b815260206004820152600360248201526249563760e81b604482015290519081900360640190fd5b6001600160a01b0381161580159061344a57506001600160a01b0381163014155b613481576040805162461bcd60e51b8152602060048201526003602482015262092ac760eb1b604482015290519081900360640190fd5b6009546000906134a690600160a01b8104600290810b91600160b81b9004900b613d28565b50909150506001600160801b038116156135cb576009546040805163a34123a760e01b8152600160a01b8304600290810b810b6004830152600160b81b909304830b90920b60248301526000604483018190528151909283926001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263a34123a792606480820193929182900301818787803b15801561354d57600080fd5b505af1158015613561573d6000803e3d6000fd5b505050506040513d604081101561357757600080fd5b508051602090910151909250905081158015613591575080155b6135c8576040805162461bcd60e51b815260206004820152600360248201526249563960e81b604482015290519081900360640190fd5b50505b6009546000906135f090600160d01b8104600290810b91600160e81b9004900b613d28565b50909150506001600160801b03811615611dc9576009546040805163a34123a760e01b8152600160d01b8304600290810b810b6004830152600160e81b909304830b90920b60248301526000604483018190528151909283926001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263a34123a792606480820193929182900301818787803b15801561369757600080fd5b505af11580156136ab573d6000803e3d6000fd5b505050506040513d60408110156136c157600080fd5b5080516020909101519092509050811580156136db575080155b613715576040805162461bcd60e51b815260206004808301919091526024820152630495631360e41b604482015290519081900360640190fd5b50505050505050565b600073db03e05b90bed1147df18a1997fac8e045431fac6343c57a278473db03e05b90bed1147df18a1997fac8e045431fac63809fdd33866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561378a57600080fd5b505af415801561379e573d6000803e3d6000fd5b505050506040513d60208110156137b457600080fd5b5051604080516001600160e01b031960e086901b16815260029390930b60048401526001600160801b0390911660248301526001600160a01b03808a16604484015288166064830152516084808301926020929190829003018186803b15801561381d57600080fd5b505af4158015613831573d6000803e3d6000fd5b505050506040513d602081101561384757600080fd5b505190505b949350505050565b60008073db03e05b90bed1147df18a1997fac8e045431fac638241348988866040518363ffffffff1660e01b815260040180836001600160a01b031681526020018263ffffffff1681526020019250505060206040518083038186803b1580156138bd57600080fd5b505af41580156138d1573d6000803e3d6000fd5b505050506040513d60208110156138e757600080fd5b50516040805163809fdd3360e01b815260048101869052905160029290920b925073db03e05b90bed1147df18a1997fac8e045431fac916343c57a27918491849163809fdd33916024808301926020929190829003018186803b15801561394d57600080fd5b505af4158015613961573d6000803e3d6000fd5b505050506040513d602081101561397757600080fd5b5051604080516001600160e01b031960e086901b16815260029390930b60048401526001600160801b0390911660248301526001600160a01b03808b16604484015289166064830152516084808301926020929190829003018186803b1580156139e057600080fd5b505af41580156139f4573d6000803e3d6000fd5b505050506040513d6020811015613a0a57600080fd5b5051979650505050505050565b6000828411613a4557613a4083610b94670de0b6b3a7640000613a3a8389614d3f565b90612dd4565b613a5f565b613a5f84610b94670de0b6b3a7640000613a3a8388614d3f565b600d54909150600160201b900463ffffffff1615613b19576000828511613a9f57613a9a83610b94670de0b6b3a7640000613a3a838a614d3f565b613ab9565b613ab985610b94670de0b6b3a7640000613a3a8388614d3f565b9050600c54821180613acc5750600c5481115b15613b1357613ad9614d9c565b613b13576040805162461bcd60e51b8152602060048083019190915260248201526324ab189b60e11b604482015290519081900360640190fd5b50613b65565b600c54811115613b6557613b2b614d9c565b613b65576040805162461bcd60e51b815260206004808301919091526024820152634956313760e01b604482015290519081900360640190fd5b50505050565b60008115613bac57600d54600160201b900463ffffffff1615613ba257613b9b613b958686614ed4565b84614ed4565b905061384c565b613b9b8585614ed4565b600d54600160201b900463ffffffff1615613bd457613b9b613bce8686614ee3565b84614ee3565b613b9b8585614ee3565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052613b65908590614c8e565b6001600160a01b038216613c93576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b613c9f60008383612e7f565b600254613cac9082612d0c565b6002556001600160a01b038216600090815260208190526040902054613cd29082612d0c565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008060008030868660405160200180846001600160a01b031660601b81526014018360020b60e81b81526003018260020b60e81b815260030193505050506040516020818303038152906040528051906020012090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663514ea4bf826040518263ffffffff1660e01b81526004018082815260200191505060a06040518083038186803b158015613de357600080fd5b505afa158015613df7573d6000803e3d6000fd5b505050506040513d60a0811015613e0d57600080fd5b5080516060820151608090920151909891975095509350505050565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015613e8757600080fd5b505afa158015613e9b573d6000803e3d6000fd5b505050506040513d60e0811015613eb157600080fd5b50516040805163986cfba360e01b8152600289900b6004820152905191925073db03e05b90bed1147df18a1997fac8e045431fac9163c72e160b918491849163986cfba3916024808301926020929190829003018186803b158015613f1557600080fd5b505af4158015613f29573d6000803e3d6000fd5b505050506040513d6020811015613f3f57600080fd5b50516040805163986cfba360e01b815260028b900b6004820152905173db03e05b90bed1147df18a1997fac8e045431fac9163986cfba3916024808301926020929190829003018186803b158015613f9657600080fd5b505af4158015613faa573d6000803e3d6000fd5b505050506040513d6020811015613fc057600080fd5b5051604080516001600160e01b031960e087901b1681526001600160a01b0394851660048201529284166024840152921660448201526001600160801b0388166064820152815160848083019392829003018186803b15801561402257600080fd5b505af4158015614036573d6000803e3d6000fd5b505050506040513d604081101561404c57600080fd5b5080516020909101519093509150505b935093915050565b6040805163a34123a760e01b8152600287810b600483015286900b60248201526001600160801b038516604482015281516000928392839283926001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263a34123a7926064808301939282900301818787803b1580156140eb57600080fd5b505af11580156140ff573d6000803e3d6000fd5b505050506040513d604081101561411557600080fd5b50805160209091015190925090506000856141385761413383614c40565b614141565b6001600160801b035b90506000866141585761415383614c40565b614161565b6001600160801b035b90506000826001600160801b0316118061418457506000816001600160801b0316115b1561425e57604080516309e3d67b60e31b81526001600160a01b038a8116600483015260028e810b60248401528d900b60448301526001600160801b0385811660648401528416608483015282517f000000000000000000000000000000000000000000000000000000000000000090911692634f1eb3d89260a480820193918290030181600087803b15801561421a57600080fd5b505af115801561422e573d6000803e3d6000fd5b505050506040513d604081101561424457600080fd5b5080516020909101516001600160801b0391821697501694505b505050509550959350505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663665a17c56040518163ffffffff1660e01b815260040160206040518083038186803b1580156142c757600080fd5b505afa1580156142db573d6000803e3d6000fd5b505050506040513d60208110156142f157600080fd5b5051604080516337792e1d60e11b815290519192506000916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691636ef25c3a916004808301926020929190829003018186803b15801561435957600080fd5b505afa15801561436d573d6000803e3d6000fd5b505050506040513d602081101561438357600080fd5b5051604080516370a0823160e01b815230600482015290519192506144269186916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b1580156143f557600080fd5b505afa158015614409573d6000803e3d6000fd5b505050506040513d602081101561441f57600080fd5b5051614ee3565b9350614499837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156143f557600080fd5b92506000821180156144b557506008546001600160a01b031615155b156145eb57600d54600160401b900460ff1684156145585760006144e5670de0b6b3a7640000610b948887612dd4565b9050811561451c576145177f000000000000000000000000000000000000000000000000000000000000000082614ef9565b614556565b600854614556906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911683612e2d565b505b83156145e9576000614576670de0b6b3a7640000610b948787612dd4565b905081156145ad576145a87f000000000000000000000000000000000000000000000000000000000000000082614ef9565b6145e7565b6008546145e7906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911683612e2d565b505b505b8015613b65576009546000906001600160a01b03161561468f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663acc8247d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561465e57600080fd5b505afa158015614672573d6000803e3d6000fd5b505050506040513d602081101561468857600080fd5b5051614699565b670de0b6b3a76400005b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663469048406040518163ffffffff1660e01b815260040160206040518083038186803b1580156146f657600080fd5b505afa15801561470a573d6000803e3d6000fd5b505050506040513d602081101561472057600080fd5b5051905085156147e4576000614742670de0b6b3a7640000610b948987612dd4565b9050600061475c670de0b6b3a7640000610b948487612dd4565b9050600061476a8383614d3f565b90506147a06001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168584612e2d565b80156147e0576009546147e0906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911683612e2d565b5050505b84156148a4576000614802670de0b6b3a7640000610b948887612dd4565b9050600061481c670de0b6b3a7640000610b948487612dd4565b9050600061482a8383614d3f565b90506148606001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168584612e2d565b80156148a0576009546148a0906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911683612e2d565b5050505b505050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561490857600080fd5b505afa15801561491c573d6000803e3d6000fd5b505050506040513d60e081101561493257600080fd5b50516040805163986cfba360e01b8152600289900b6004820152905191925073db03e05b90bed1147df18a1997fac8e045431fac91636098fd4a918491849163986cfba3916024808301926020929190829003018186803b15801561499657600080fd5b505af41580156149aa573d6000803e3d6000fd5b505050506040513d60208110156149c057600080fd5b50516040805163986cfba360e01b815260028b900b6004820152905173db03e05b90bed1147df18a1997fac8e045431fac9163986cfba3916024808301926020929190829003018186803b158015614a1757600080fd5b505af4158015614a2b573d6000803e3d6000fd5b505050506040513d6020811015614a4157600080fd5b5051604080516001600160e01b031960e087901b1681526001600160a01b0394851660048201529284166024840152921660448201526064810188905260848101879052905160a4808301926020929190829003018186803b158015614aa657600080fd5b505af4158015614aba573d6000803e3d6000fd5b505050506040513d6020811015614ad057600080fd5b50519695505050505050565b6000806001600160801b0383161561405c576040805130602080830182905283518084038201815283850194859052633c8a7d8d60e01b9094526044830182815260028a810b606486015289900b60848501526001600160801b03881660a485015260a060c48501908152855160e486015285516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001696633c8a7d8d968d958d958d959394909392610104019185019080838360005b83811015614bb2578181015183820152602001614b9a565b50505050905090810190601f168015614bdf5780820380516001836020036101000a031916815260200191505b5096505050505050506040805180830381600087803b158015614c0157600080fd5b505af1158015614c15573d6000803e3d6000fd5b505050506040513d6040811015614c2b57600080fd5b50805160209091015190969095509350505050565b60006001600160801b03821115614c8a576040805162461bcd60e51b815260206004820152600960248201526824ab1718991c2fa7a360b91b604482015290519081900360640190fd5b5090565b6000614ce3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661506b9092919063ffffffff16565b805190915015612e7f57808060200190516020811015614d0257600080fd5b5051612e7f5760405162461bcd60e51b815260040180806020018281038252602a815260200180615383602a913960400191505060405180910390fd5b600082821115614d96576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015614df857600080fd5b505afa158015614e0c573d6000803e3d6000fd5b505050506040513d60e0811015614e2257600080fd5b50604090810151815163252c09d760e01b815261ffff8216600482015291519092506000916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163252c09d791602480820192608092909190829003018186803b158015614e9857600080fd5b505afa158015614eac573d6000803e3d6000fd5b505050506040513d6080811015614ec257600080fd5b505163ffffffff164214159392505050565b6000818310610df05782610f89565b6000818310614ef25781610f89565b5090919050565b6008546040805163095ea7b360e01b81526001600160a01b0392831660048201526024810184905290519184169163095ea7b3916044808201926020929091908290030181600087803b158015614f4f57600080fd5b505af1158015614f63573d6000803e3d6000fd5b505050506040513d6020811015614f7957600080fd5b50506008546040805163b66503cf60e01b81526001600160a01b038581166004830152602482018590529151919092169163b66503cf91604480830192600092919082900301818387803b158015614fd057600080fd5b505af1158015614fe4573d6000803e3d6000fd5b50506008546040805163095ea7b360e01b81526001600160a01b0392831660048201526000602482018190529151928716945063095ea7b39350604480820193602093909283900390910190829087803b15801561504157600080fd5b505af1158015615055573d6000803e3d6000fd5b505050506040513d6020811015613b6557600080fd5b606061384c84846000858561507f85615190565b6150d0576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b6020831061510e5780518252601f1990920191602091820191016150ef565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114615170576040519150601f19603f3d011682016040523d82523d6000602084013e615175565b606091505b5091509150615185828286615196565b979650505050505050565b3b151590565b606083156151a5575081610f89565b8251156151b55782518084602001fd5b60405162461bcd60e51b815260206004820181815284516024840152845185939192839260440191908501908083836000831561321f57818101518382015260200161320756fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573735265656e7472616e637947756172643a207265656e7472616e742063616c6c0045524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f75bf84c53da055fe68ed1f2a4fcc4d9367b8a41e7553708be5c8437b7d9f69664736f6c634300070600334f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573738be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0000000000000000000000000b1bc4b830fcba2184b92e15b9133c41160518038000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2a31d95b1a4c8b1e772599ffcb8875fb4e2d330000000000000000000000000000000000000000000000000000000000000e10
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061030b5760003560e01c8063897f078c1161019d578063d21220a7116100e9578063ddca3f43116100a2578063f62073261161007c578063f62073261461089f578063f9c95d46146108a7578063fa082743146108ca578063fa461e33146108d25761030b565b8063ddca3f4314610851578063f2fde38b14610871578063f3172f9e146108975761030b565b8063d21220a714610750578063d2eabcfc14610758578063d348799714610760578063d87346aa146107da578063dd62ed3e1461081b578063dd81fa63146108495761030b565b8063a457c2d711610156578063ac492fcd11610130578063ac492fcd14610719578063c4a7761e14610738578063c879657214610740578063d0c93a7c146107485761030b565b8063a457c2d7146106b9578063a9059cbb146106e5578063aaf5eb68146107115761030b565b8063897f078c1461061e5780638da5cb5b146106265780638dbdbe6d1461062e57806391563d321461066057806395d89b4114610681578063a049de6b146106895761030b565b80633e091ee91161025c578063648cab85116102155780637aea5309116101ef5780637aea5309146105e05780637f7a1eec146105e857806381de128b146105f0578063888a9134146106165761030b565b8063648cab85146105aa57806370a08231146105b2578063715018a6146105d85761030b565b80633e091ee91461052f578063400f0ceb1461055257806345e05f43146105755780634d461fbb1461057d57806351e87af7146105855780635ffc1ff71461058d5761030b565b806316f0115b116102c95780632bbb56d9116102a35780632bbb56d9146104b5578063313ce567146104dd57806337e41b40146104fb57806339509351146105035761030b565b806316f0115b1461045d57806318160ddd1461046557806323b872dd1461047f5761030b565b8062f714ce14610310578063065e53601461035557806306fdde0314610374578063095ea7b3146103f15780630dfe1681146104315780630f35bcac14610455575b600080fd5b61033c6004803603604081101561032657600080fd5b50803590602001356001600160a01b031661094c565b6040805192835260208301919091528051918290030190f35b61035d610d1c565b6040805160029290920b8252519081900360200190f35b61037c610df6565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103b657818101518382015260200161039e565b50505050905090810190601f1680156103e35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61041d6004803603604081101561040757600080fd5b506001600160a01b038135169060200135610e8c565b604080519115158252519081900360200190f35b610439610eaa565b604080516001600160a01b039092168252519081900360200190f35b61035d610ece565b610439610ede565b61046d610f02565b60408051918252519081900360200190f35b61041d6004803603606081101561049557600080fd5b506001600160a01b03813581169160208101359091169060400135610f08565b6104db600480360360208110156104cb57600080fd5b50356001600160a01b0316610f90565b005b6104e5610fef565b6040805160ff9092168252519081900360200190f35b61041d610ff8565b61041d6004803603604081101561051957600080fd5b506001600160a01b03813516906020013561101c565b6104db6004803603604081101561054557600080fd5b508035906020013561106a565b6104db6004803603602081101561056857600080fd5b503563ffffffff166110ba565b610439611125565b61046d611134565b61035d61113a565b6104db600480360360208110156105a357600080fd5b503561114a565b61046d611190565b61046d600480360360208110156105c857600080fd5b50356001600160a01b0316611196565b6104db6111b1565b61046d61126f565b61041d611275565b6104db6004803603602081101561060657600080fd5b50356001600160a01b0316611299565b61035d6112f8565b610439611308565b610439611317565b61046d6004803603606081101561064457600080fd5b50803590602081013590604001356001600160a01b0316611326565b6106686116ac565b6040805163ffffffff9092168252519081900360200190f35b61037c6116bf565b610691611720565b604080516001600160801b039094168452602084019290925282820152519081900360600190f35b61041d600480360360408110156106cf57600080fd5b506001600160a01b0381351690602001356117b8565b61041d600480360360408110156106fb57600080fd5b506001600160a01b038135169060200135611820565b61046d611834565b6104db6004803603602081101561072f57600080fd5b50351515611840565b61033c6118a8565b61033c6119f3565b61035d611bac565b610439611bd0565b610691611bf4565b6104db6004803603606081101561077657600080fd5b813591602081013591810190606081016040820135600160201b81111561079c57600080fd5b8201836020820111156107ae57600080fd5b803590602001918460018302840111600160201b831117156107cf57600080fd5b509092509050611c50565b6104db600480360360a08110156107f057600080fd5b508035600290810b916020810135820b916040820135810b91606081013590910b9060800135611dd0565b61046d6004803603604081101561083157600080fd5b506001600160a01b038135811691602001351661285d565b610439612888565b6108596128ac565b6040805162ffffff9092168252519081900360200190f35b6104db6004803603602081101561088757600080fd5b50356001600160a01b0316612938565b61041d612a4d565b610668612a5d565b6104db600480360360208110156108bd57600080fd5b503563ffffffff16612a69565b61035d612b08565b6104db600480360360608110156108e857600080fd5b813591602081013591810190606081016040820135600160201b81111561090e57600080fd5b82018360208201111561092057600080fd5b803590602001918460018302840111600160201b8311171561094157600080fd5b509092509050612b18565b60008060026006541415610995576040805162461bcd60e51b815260206004820152601f6024820152600080516020615220833981519152604482015290519081900360640190fd5b6002600655836109d5576040805162461bcd60e51b815260206004808301919091526024820152634956313160e01b604482015290519081900360640190fd5b6001600160a01b038316610a19576040805162461bcd60e51b8152602060048083019190915260248201526324ab189960e11b604482015290519081900360640190fd5b6000610a23610f02565b905080851480610a3e5750610a3a856103e8612d0c565b8110155b610a78576040805162461bcd60e51b815260206004808301919091526024820152634956313360e01b604482015290519081900360640190fd5b6009546000908190610aad90600160a01b8104600290810b91600160b81b9004900b610aa582828c612d66565b896000612da6565b60095491935091506000908190610ae790600160d01b8104600290810b91600160e81b9004900b610adf82828e612d66565b8b6000612da6565b915091506000610b9a86610b948c7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610b6257600080fd5b505afa158015610b76573d6000803e3d6000fd5b505050506040513d6020811015610b8c57600080fd5b505190612dd4565b90612ca5565b90506000610c1387610b948d7f00000000000000000000000029219dd400f2bf60e5a23d13be72b486d40388946001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610b6257600080fd5b90508115610c4f57610c4f6001600160a01b037f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38168b84612e2d565b8015610c8957610c896001600160a01b037f00000000000000000000000029219dd400f2bf60e5a23d13be72b486d4038894168b83612e2d565b610c9d82610c978887612d0c565b90612d0c565b9850610cad81610c978786612d0c565b9750610cb9338c612e84565b604080518c8152602081018b90528082018a905290516001600160a01b038c169133917febff2602b3f468259e1e99f613fed6691f3a6526effe6ef3e768ba7ae7a36c4f9181900360600190a35050505050505060016006819055509250929050565b60008060007f000000000000000000000000b1bc4b830fcba2184b92e15b9133c411605180386001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015610d7a57600080fd5b505afa158015610d8e573d6000803e3d6000fd5b505050506040513d60e0811015610da457600080fd5b50602081015160c090910151909250905080610df0576040805162461bcd60e51b81526020600480830191909152602482015263092ac62760e31b604482015290519081900360640190fd5b50919050565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e825780601f10610e5757610100808354040283529160200191610e82565b820191906000526020600020905b815481529060010190602001808311610e6557829003601f168201915b5050505050905090565b6000610ea0610e99612f80565b8484612f84565b5060015b92915050565b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad3881565b600954600160e81b900460020b81565b7f000000000000000000000000b1bc4b830fcba2184b92e15b9133c4116051803881565b60025490565b6000610f15848484613070565b610f8584610f21612f80565b610f80856040518060600160405280602881526020016152f1602891396001600160a01b038a16600090815260016020526040812090610f5f612f80565b6001600160a01b0316815260208101919091526040016000205491906131cb565b612f84565b5060015b9392505050565b610f98613262565b600980546001600160a01b0383166001600160a01b03199091168117909155604080519182525133917f3066ef5dd340e8b2ea28d62f5a8391eb7a82d3ee87532724a1ca4386d34f7523919081900360200190a250565b60055460ff1690565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610ea0611029612f80565b84610f80856001600061103a612f80565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612d0c565b611072613262565b600a829055600b8190556040805183815260208101839052815133927fafd3b05a4086b378b6f291200a528d8aed8c5e0317af77436b001f1bec28821a928290030190a25050565b6110c2613262565b600d805467ffffffff000000001916600160201b63ffffffff84169081029190911790915560408051338152602081019290925280517f39da19f5960a3f182ced1ff1853b7be54f37150799b3003a40bf4e0d4c740c859281900390910190a150565b6009546001600160a01b031681565b600b5481565b600954600160d01b900460020b81565b611152613262565b600c81905560408051828152905133917f529698f34660760dcb172def5c99d62e1b5b74b444df322e8f7da31f2bd0a86b919081900360200190a250565b600a5481565b6001600160a01b031660009081526020819052604090205490565b6111b9612f80565b6001600160a01b03166111ca611317565b6001600160a01b031614611225576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6007546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600780546001600160a01b0319169055565b600c5481565b7f000000000000000000000000000000000000000000000000000000000000000181565b6112a1613262565b600880546001600160a01b0383166001600160a01b03199091168117909155604080519182525133917fbb78b7c13893a913fa8c9ecb9fdaf97597aa412a39c778bf976790555f0942f7919081900360200190a250565b600954600160b81b900460020b81565b6008546001600160a01b031681565b6007546001600160a01b031690565b60006002600654141561136e576040805162461bcd60e51b815260206004820152601f6024820152600080516020615220833981519152604482015290519081900360640190fd5b600260065561137e8484846132d8565b60006113db7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad387f00000000000000000000000029219dd400f2bf60e5a23d13be72b486d40388946113cd610d1c565b670de0b6b3a764000061371e565b600d54909150600090611462907f000000000000000000000000b1bc4b830fcba2184b92e15b9133c41160518038907f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38907f00000000000000000000000029219dd400f2bf60e5a23d13be72b486d40388949063ffffffff16670de0b6b3a7640000613854565b600d54909150600090600160201b900463ffffffff166114825781611509565b6115097f000000000000000000000000b1bc4b830fcba2184b92e15b9133c411605180387f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad387f00000000000000000000000029219dd400f2bf60e5a23d13be72b486d4038894600d60049054906101000a900463ffffffff16670de0b6b3a7640000613854565b9050611516838383613a17565b6000806115216118a8565b9150915060006115348686866000613b6b565b9050600061154e670de0b6b3a7640000610b948d85612dd4565b90508a1561158b5761158b6001600160a01b037f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad381633308e613bde565b89156115c6576115c66001600160a01b037f00000000000000000000000029219dd400f2bf60e5a23d13be72b486d40388941633308d613bde565b6115d08a82612d0c565b97506115da610f02565b156116325760006115ee8888886001613b6b565b90506000611608670de0b6b3a7640000610b948885612dd4565b90506116296116178287612d0c565b610b94611622610f02565b8d90612dd4565b99505050611641565b61163e886103e8612dd4565b97505b61164b8989613c38565b60408051898152602081018d90528082018c905290516001600160a01b038b169133917f4e2ca0515ed1aef1395f66b5303bb5d6f1bf9d61a353fa53f73f8ac9973fa9f69181900360600190a3505060016006555093979650505050505050565b600d54600160201b900463ffffffff1681565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e825780601f10610e5757610100808354040283529160200191610e82565b6000806000806000806117516009601a9054906101000a900460020b6009601d9054906101000a900460020b613d28565b600954929550909350915061177c90600160d01b8104600290810b91600160e81b9004900b85613e29565b93965094509192508491611799856001600160801b038416612d0c565b94506117ae846001600160801b038316612d0c565b9350505050909192565b6000610ea06117c5612f80565b84610f80856040518060600160405280602581526020016153ad60259139600160006117ef612f80565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906131cb565b6000610ea061182d612f80565b8484613070565b670de0b6b3a764000081565b611848613262565b600d805468ff00000000000000001916600160401b8315159081029190911790915560408051338152602081019290925280517fd7930fc7547e2193c58c5363ccee3fde52199283feed362be5ec516dd8f734fa9281900390910190a150565b6000806000806118b6611bf4565b92509250506000806118c6611720565b925092505061197282610c97867f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561194057600080fd5b505afa158015611954573d6000803e3d6000fd5b505050506040513d602081101561196a57600080fd5b505190612d0c565b95506119e981610c97857f00000000000000000000000029219dd400f2bf60e5a23d13be72b486d40388946001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561194057600080fd5b9450505050509091565b60008060026006541415611a3c576040805162461bcd60e51b815260206004820152601f6024820152600080516020615220833981519152604482015290519081900360640190fd5b60026006819055600954600091611a6691600160a01b8104820b91600160b81b909104900b613d28565b50909150506001600160801b03811615611ac5576009546000908190611aa590600160a01b8104600290810b91600160b81b9004900b83306001614064565b9092509050611ab48583612d0c565b9450611ac08482612d0c565b935050505b600954600090611aea90600160d01b8104600290810b91600160e81b9004900b613d28565b50909150506001600160801b03811615611b49576009546000908190611b2990600160d01b8104600290810b91600160e81b9004900b83306001614064565b9092509050611b388683612d0c565b9550611b448582612d0c565b945050505b6040805185815260208101859052815133927fec8208dd791fa8ffdc0d7427f3ba9c0ed06f1bce9a86254e6940c10cc1802fef928290030190a26000841180611b925750600083115b15611ba157611ba1848461426c565b505060016006559091565b7f000000000000000000000000000000000000000000000000000000000000000881565b7f00000000000000000000000029219dd400f2bf60e5a23d13be72b486d403889481565b600080600080600080611c25600960149054906101000a900460020b600960179054906101000a900460020b613d28565b600954929550909350915061177c90600160a01b8104600290810b91600160b81b9004900b85613e29565b336001600160a01b037f000000000000000000000000b1bc4b830fcba2184b92e15b9133c411605180381614611cb3576040805162461bcd60e51b815260206004820152600360248201526263623160e81b604482015290519081900360640190fd5b600082826020811015611cc557600080fd5b50356001600160a01b0316905030811415611d53578415611d1457611d146001600160a01b037f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38163387612e2d565b8315611d4e57611d4e6001600160a01b037f00000000000000000000000029219dd400f2bf60e5a23d13be72b486d4038894163386612e2d565b611dc9565b8415611d8e57611d8e6001600160a01b037f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad3816823388613bde565b8315611dc957611dc96001600160a01b037f00000000000000000000000029219dd400f2bf60e5a23d13be72b486d403889416823387613bde565b5050505050565b60026006541415611e16576040805162461bcd60e51b815260206004820152601f6024820152600080516020615220833981519152604482015290519081900360640190fd5b6002600655611e23613262565b8360020b8560020b128015611e6857507f000000000000000000000000000000000000000000000000000000000000000860020b8560020b81611e6257fe5b0760020b155b8015611ea457507f000000000000000000000000000000000000000000000000000000000000000860020b8460020b81611e9e57fe5b0760020b155b611ede576040805162461bcd60e51b8152602060048083019190915260248201526312558c4d60e21b604482015290519081900360640190fd5b8160020b8360020b128015611f2357507f000000000000000000000000000000000000000000000000000000000000000860020b8360020b81611f1d57fe5b0760020b155b8015611f5f57507f000000000000000000000000000000000000000000000000000000000000000860020b8260020b81611f5957fe5b0760020b155b611f99576040805162461bcd60e51b815260206004808301919091526024820152634956313560e01b604482015290519081900360640190fd5b600954600090611fbe90600160a01b8104600290810b91600160b81b9004900b613d28565b50909150506001600160801b03811615612090576009546040805163a34123a760e01b8152600160a01b8304600290810b810b6004830152600160b81b909304830b90920b602483015260006044830181905281516001600160a01b037f000000000000000000000000b1bc4b830fcba2184b92e15b9133c41160518038169363a34123a7936064808301949193928390030190829087803b15801561206357600080fd5b505af1158015612077573d6000803e3d6000fd5b505050506040513d604081101561208d57600080fd5b50505b6009546000906120b590600160d01b8104600290810b91600160e81b9004900b613d28565b50909150506001600160801b03811615612187576009546040805163a34123a760e01b8152600160d01b8304600290810b810b6004830152600160e81b909304830b90920b602483015260006044830181905281516001600160a01b037f000000000000000000000000b1bc4b830fcba2184b92e15b9133c41160518038169363a34123a7936064808301949193928390030190829087803b15801561215a57600080fd5b505af115801561216e573d6000803e3d6000fd5b505050506040513d604081101561218457600080fd5b50505b60095460009081906121ae90600160a01b8104600290810b91600160b81b9004900b613d28565b6009546001600160801b039283169550911692506000915081906121e790600160d01b8104600290810b91600160e81b9004900b613d28565b6001600160801b039182169450169150600090506122058584612d0c565b905060006122138584612d0c565b60095490915061223c90600160a01b8104600290810b91600160b81b9004900b8a306001612da6565b505060095461226490600160d01b8104600290810b91600160e81b9004900b89306001612da6565b5050612270828261426c565b7fbc4c20ad04f161d631d9ce94d27659391196415aa3c42f6a71c62e905ece782d612299610d1c565b604080516370a0823160e01b815230600482015290516001600160a01b037f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad3816916370a08231916024808301926020929190829003018186803b1580156122ff57600080fd5b505afa158015612313573d6000803e3d6000fd5b505050506040513d602081101561232957600080fd5b5051604080516370a0823160e01b815230600482015290516001600160a01b037f00000000000000000000000029219dd400f2bf60e5a23d13be72b486d403889416916370a08231916024808301926020929190829003018186803b15801561239157600080fd5b505afa1580156123a5573d6000803e3d6000fd5b505050506040513d60208110156123bb57600080fd5b505185856123c7610f02565b6040805160029790970b87526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190a1881561258e576001600160a01b037f000000000000000000000000b1bc4b830fcba2184b92e15b9133c411605180381663128acb083060008c1380612446578c600003612448565b8c5b60008e1361246a5773fffd8963efd1fc6a506488495d951d5263988d25612471565b6401000276a45b3060405160200180826001600160a01b031681526020019150506040516020818303038152906040526040518663ffffffff1660e01b815260040180866001600160a01b031681526020018515158152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156125125781810151838201526020016124fa565b50505050905090810190601f16801561253f5780820380516001836020036101000a031916815260200191505b5096505050505050506040805180830381600087803b15801561256157600080fd5b505af1158015612575573d6000803e3d6000fd5b505050506040513d604081101561258b57600080fd5b50505b8c600960146101000a81548162ffffff021916908360020b62ffffff1602179055508b600960176101000a81548162ffffff021916908360020b62ffffff160217905550612725600960149054906101000a900460020b600960179054906101000a900460020b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561266257600080fd5b505afa158015612676573d6000803e3d6000fd5b505050506040513d602081101561268c57600080fd5b5051604080516370a0823160e01b815230600482015290516001600160a01b037f00000000000000000000000029219dd400f2bf60e5a23d13be72b486d403889416916370a08231916024808301926020929190829003018186803b1580156126f457600080fd5b505afa158015612708573d6000803e3d6000fd5b505050506040513d602081101561271e57600080fd5b50516148ac565b60095490985061274b90600160a01b8104600290810b91600160b81b9004900b8a614adc565b50508a6009601a6101000a81548162ffffff021916908360020b62ffffff160217905550896009601d6101000a81548162ffffff021916908360020b62ffffff1602179055506128216009601a9054906101000a900460020b6009601d9054906101000a900460020b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad386001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561266257600080fd5b60095490975061284790600160d01b8104600290810b91600160e81b9004900b89614adc565b5050600160065550505050505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b7f0000000000000000000000007d18f2d60e4fd6f485419727515807d09a542eb981565b60007f000000000000000000000000b1bc4b830fcba2184b92e15b9133c411605180386001600160a01b031663ddca3f436040518163ffffffff1660e01b815260040160206040518083038186803b15801561290757600080fd5b505afa15801561291b573d6000803e3d6000fd5b505050506040513d602081101561293157600080fd5b5051905090565b612940612f80565b6001600160a01b0316612951611317565b6001600160a01b0316146129ac576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166129f15760405162461bcd60e51b81526004018080602001828103825260268152602001806152626026913960400191505060405180910390fd5b6007546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b600d54600160401b900460ff1681565b600d5463ffffffff1681565b612a71613262565b60008163ffffffff1611612ab2576040805162461bcd60e51b815260206004820152600360248201526249563360e81b604482015290519081900360640190fd5b600d805463ffffffff191663ffffffff831690811790915560408051338152602081019290925280517fe4c60f4984caeb7f45b0cfe6d4233c115601ab11d141bc2cbf68b48346cdef389281900390910190a150565b600954600160a01b900460020b81565b336001600160a01b037f000000000000000000000000b1bc4b830fcba2184b92e15b9133c411605180381614612b7b576040805162461bcd60e51b815260206004820152600360248201526231b11960e91b604482015290519081900360640190fd5b600082826020811015612b8d57600080fd5b50356001600160a01b031690506000851315612c22576001600160a01b038116301415612bed57612be86001600160a01b037f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38163387612e2d565b611d4e565b611d4e6001600160a01b037f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad3816823388613bde565b6000841315611dc9576001600160a01b038116301415612c7057611d4e6001600160a01b037f00000000000000000000000029219dd400f2bf60e5a23d13be72b486d4038894163386612e2d565b611dc96001600160a01b037f00000000000000000000000029219dd400f2bf60e5a23d13be72b486d403889416823387613bde565b6000808211612cfb576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612d0457fe5b049392505050565b600082820183811015610f89576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600080612d738585613d28565b50509050612d9d612d98612d85610f02565b610b946001600160801b03851687612dd4565b614c40565b95945050505050565b6000806001600160801b03851615612dca57612dc58787878787614064565b915091505b9550959350505050565b600082612de357506000610ea4565b82820282848281612df057fe5b0414610f895760405162461bcd60e51b81526004018080602001828103825260218152602001806152d06021913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612e7f908490614c8e565b505050565b6001600160a01b038216612ec95760405162461bcd60e51b81526004018080602001828103825260218152602001806153196021913960400191505060405180910390fd5b612ed582600083612e7f565b612f1281604051806060016040528060228152602001615240602291396001600160a01b03851660009081526020819052604090205491906131cb565b6001600160a01b038316600090815260208190526040902055600254612f389082614d3f565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b3390565b6001600160a01b038316612fc95760405162461bcd60e51b815260040180806020018281038252602481526020018061535f6024913960400191505060405180910390fd5b6001600160a01b03821661300e5760405162461bcd60e51b81526004018080602001828103825260228152602001806152886022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166130b55760405162461bcd60e51b815260040180806020018281038252602581526020018061533a6025913960400191505060405180910390fd5b6001600160a01b0382166130fa5760405162461bcd60e51b81526004018080602001828103825260238152602001806151fd6023913960400191505060405180910390fd5b613105838383612e7f565b613142816040518060600160405280602681526020016152aa602691396001600160a01b03861660009081526020819052604090205491906131cb565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546131719082612d0c565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561325a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561321f578181015183820152602001613207565b50505050905090810190601f16801561324c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b61326a612f80565b6001600160a01b031661327b611317565b6001600160a01b0316146132d6576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b7f000000000000000000000000000000000000000000000000000000000000000180613302575082155b613339576040805162461bcd60e51b815260206004820152600360248201526212558d60ea1b604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000080613363575081155b61339a576040805162461bcd60e51b815260206004820152600360248201526249563560e81b604482015290519081900360640190fd5b60008311806133a95750600082115b6133e0576040805162461bcd60e51b815260206004820152600360248201526224ab1b60e91b604482015290519081900360640190fd5b600a54831080156133f25750600b5482105b613429576040805162461bcd60e51b815260206004820152600360248201526249563760e81b604482015290519081900360640190fd5b6001600160a01b0381161580159061344a57506001600160a01b0381163014155b613481576040805162461bcd60e51b8152602060048201526003602482015262092ac760eb1b604482015290519081900360640190fd5b6009546000906134a690600160a01b8104600290810b91600160b81b9004900b613d28565b50909150506001600160801b038116156135cb576009546040805163a34123a760e01b8152600160a01b8304600290810b810b6004830152600160b81b909304830b90920b60248301526000604483018190528151909283926001600160a01b037f000000000000000000000000b1bc4b830fcba2184b92e15b9133c41160518038169263a34123a792606480820193929182900301818787803b15801561354d57600080fd5b505af1158015613561573d6000803e3d6000fd5b505050506040513d604081101561357757600080fd5b508051602090910151909250905081158015613591575080155b6135c8576040805162461bcd60e51b815260206004820152600360248201526249563960e81b604482015290519081900360640190fd5b50505b6009546000906135f090600160d01b8104600290810b91600160e81b9004900b613d28565b50909150506001600160801b03811615611dc9576009546040805163a34123a760e01b8152600160d01b8304600290810b810b6004830152600160e81b909304830b90920b60248301526000604483018190528151909283926001600160a01b037f000000000000000000000000b1bc4b830fcba2184b92e15b9133c41160518038169263a34123a792606480820193929182900301818787803b15801561369757600080fd5b505af11580156136ab573d6000803e3d6000fd5b505050506040513d60408110156136c157600080fd5b5080516020909101519092509050811580156136db575080155b613715576040805162461bcd60e51b815260206004808301919091526024820152630495631360e41b604482015290519081900360640190fd5b50505050505050565b600073db03e05b90bed1147df18a1997fac8e045431fac6343c57a278473db03e05b90bed1147df18a1997fac8e045431fac63809fdd33866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561378a57600080fd5b505af415801561379e573d6000803e3d6000fd5b505050506040513d60208110156137b457600080fd5b5051604080516001600160e01b031960e086901b16815260029390930b60048401526001600160801b0390911660248301526001600160a01b03808a16604484015288166064830152516084808301926020929190829003018186803b15801561381d57600080fd5b505af4158015613831573d6000803e3d6000fd5b505050506040513d602081101561384757600080fd5b505190505b949350505050565b60008073db03e05b90bed1147df18a1997fac8e045431fac638241348988866040518363ffffffff1660e01b815260040180836001600160a01b031681526020018263ffffffff1681526020019250505060206040518083038186803b1580156138bd57600080fd5b505af41580156138d1573d6000803e3d6000fd5b505050506040513d60208110156138e757600080fd5b50516040805163809fdd3360e01b815260048101869052905160029290920b925073db03e05b90bed1147df18a1997fac8e045431fac916343c57a27918491849163809fdd33916024808301926020929190829003018186803b15801561394d57600080fd5b505af4158015613961573d6000803e3d6000fd5b505050506040513d602081101561397757600080fd5b5051604080516001600160e01b031960e086901b16815260029390930b60048401526001600160801b0390911660248301526001600160a01b03808b16604484015289166064830152516084808301926020929190829003018186803b1580156139e057600080fd5b505af41580156139f4573d6000803e3d6000fd5b505050506040513d6020811015613a0a57600080fd5b5051979650505050505050565b6000828411613a4557613a4083610b94670de0b6b3a7640000613a3a8389614d3f565b90612dd4565b613a5f565b613a5f84610b94670de0b6b3a7640000613a3a8388614d3f565b600d54909150600160201b900463ffffffff1615613b19576000828511613a9f57613a9a83610b94670de0b6b3a7640000613a3a838a614d3f565b613ab9565b613ab985610b94670de0b6b3a7640000613a3a8388614d3f565b9050600c54821180613acc5750600c5481115b15613b1357613ad9614d9c565b613b13576040805162461bcd60e51b8152602060048083019190915260248201526324ab189b60e11b604482015290519081900360640190fd5b50613b65565b600c54811115613b6557613b2b614d9c565b613b65576040805162461bcd60e51b815260206004808301919091526024820152634956313760e01b604482015290519081900360640190fd5b50505050565b60008115613bac57600d54600160201b900463ffffffff1615613ba257613b9b613b958686614ed4565b84614ed4565b905061384c565b613b9b8585614ed4565b600d54600160201b900463ffffffff1615613bd457613b9b613bce8686614ee3565b84614ee3565b613b9b8585614ee3565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052613b65908590614c8e565b6001600160a01b038216613c93576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b613c9f60008383612e7f565b600254613cac9082612d0c565b6002556001600160a01b038216600090815260208190526040902054613cd29082612d0c565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008060008030868660405160200180846001600160a01b031660601b81526014018360020b60e81b81526003018260020b60e81b815260030193505050506040516020818303038152906040528051906020012090507f000000000000000000000000b1bc4b830fcba2184b92e15b9133c411605180386001600160a01b031663514ea4bf826040518263ffffffff1660e01b81526004018082815260200191505060a06040518083038186803b158015613de357600080fd5b505afa158015613df7573d6000803e3d6000fd5b505050506040513d60a0811015613e0d57600080fd5b5080516060820151608090920151909891975095509350505050565b60008060007f000000000000000000000000b1bc4b830fcba2184b92e15b9133c411605180386001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015613e8757600080fd5b505afa158015613e9b573d6000803e3d6000fd5b505050506040513d60e0811015613eb157600080fd5b50516040805163986cfba360e01b8152600289900b6004820152905191925073db03e05b90bed1147df18a1997fac8e045431fac9163c72e160b918491849163986cfba3916024808301926020929190829003018186803b158015613f1557600080fd5b505af4158015613f29573d6000803e3d6000fd5b505050506040513d6020811015613f3f57600080fd5b50516040805163986cfba360e01b815260028b900b6004820152905173db03e05b90bed1147df18a1997fac8e045431fac9163986cfba3916024808301926020929190829003018186803b158015613f9657600080fd5b505af4158015613faa573d6000803e3d6000fd5b505050506040513d6020811015613fc057600080fd5b5051604080516001600160e01b031960e087901b1681526001600160a01b0394851660048201529284166024840152921660448201526001600160801b0388166064820152815160848083019392829003018186803b15801561402257600080fd5b505af4158015614036573d6000803e3d6000fd5b505050506040513d604081101561404c57600080fd5b5080516020909101519093509150505b935093915050565b6040805163a34123a760e01b8152600287810b600483015286900b60248201526001600160801b038516604482015281516000928392839283926001600160a01b037f000000000000000000000000b1bc4b830fcba2184b92e15b9133c41160518038169263a34123a7926064808301939282900301818787803b1580156140eb57600080fd5b505af11580156140ff573d6000803e3d6000fd5b505050506040513d604081101561411557600080fd5b50805160209091015190925090506000856141385761413383614c40565b614141565b6001600160801b035b90506000866141585761415383614c40565b614161565b6001600160801b035b90506000826001600160801b0316118061418457506000816001600160801b0316115b1561425e57604080516309e3d67b60e31b81526001600160a01b038a8116600483015260028e810b60248401528d900b60448301526001600160801b0385811660648401528416608483015282517f000000000000000000000000b1bc4b830fcba2184b92e15b9133c4116051803890911692634f1eb3d89260a480820193918290030181600087803b15801561421a57600080fd5b505af115801561422e573d6000803e3d6000fd5b505050506040513d604081101561424457600080fd5b5080516020909101516001600160801b0391821697501694505b505050509550959350505050565b60007f0000000000000000000000007d18f2d60e4fd6f485419727515807d09a542eb96001600160a01b031663665a17c56040518163ffffffff1660e01b815260040160206040518083038186803b1580156142c757600080fd5b505afa1580156142db573d6000803e3d6000fd5b505050506040513d60208110156142f157600080fd5b5051604080516337792e1d60e11b815290519192506000916001600160a01b037f0000000000000000000000007d18f2d60e4fd6f485419727515807d09a542eb91691636ef25c3a916004808301926020929190829003018186803b15801561435957600080fd5b505afa15801561436d573d6000803e3d6000fd5b505050506040513d602081101561438357600080fd5b5051604080516370a0823160e01b815230600482015290519192506144269186916001600160a01b037f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad3816916370a0823191602480820192602092909190829003018186803b1580156143f557600080fd5b505afa158015614409573d6000803e3d6000fd5b505050506040513d602081101561441f57600080fd5b5051614ee3565b9350614499837f00000000000000000000000029219dd400f2bf60e5a23d13be72b486d40388946001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156143f557600080fd5b92506000821180156144b557506008546001600160a01b031615155b156145eb57600d54600160401b900460ff1684156145585760006144e5670de0b6b3a7640000610b948887612dd4565b9050811561451c576145177f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad3882614ef9565b614556565b600854614556906001600160a01b037f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad388116911683612e2d565b505b83156145e9576000614576670de0b6b3a7640000610b948787612dd4565b905081156145ad576145a87f00000000000000000000000029219dd400f2bf60e5a23d13be72b486d403889482614ef9565b6145e7565b6008546145e7906001600160a01b037f00000000000000000000000029219dd400f2bf60e5a23d13be72b486d40388948116911683612e2d565b505b505b8015613b65576009546000906001600160a01b03161561468f577f0000000000000000000000007d18f2d60e4fd6f485419727515807d09a542eb96001600160a01b031663acc8247d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561465e57600080fd5b505afa158015614672573d6000803e3d6000fd5b505050506040513d602081101561468857600080fd5b5051614699565b670de0b6b3a76400005b905060007f0000000000000000000000007d18f2d60e4fd6f485419727515807d09a542eb96001600160a01b031663469048406040518163ffffffff1660e01b815260040160206040518083038186803b1580156146f657600080fd5b505afa15801561470a573d6000803e3d6000fd5b505050506040513d602081101561472057600080fd5b5051905085156147e4576000614742670de0b6b3a7640000610b948987612dd4565b9050600061475c670de0b6b3a7640000610b948487612dd4565b9050600061476a8383614d3f565b90506147a06001600160a01b037f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad38168584612e2d565b80156147e0576009546147e0906001600160a01b037f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad388116911683612e2d565b5050505b84156148a4576000614802670de0b6b3a7640000610b948887612dd4565b9050600061481c670de0b6b3a7640000610b948487612dd4565b9050600061482a8383614d3f565b90506148606001600160a01b037f00000000000000000000000029219dd400f2bf60e5a23d13be72b486d4038894168584612e2d565b80156148a0576009546148a0906001600160a01b037f00000000000000000000000029219dd400f2bf60e5a23d13be72b486d40388948116911683612e2d565b5050505b505050505050565b6000807f000000000000000000000000b1bc4b830fcba2184b92e15b9133c411605180386001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561490857600080fd5b505afa15801561491c573d6000803e3d6000fd5b505050506040513d60e081101561493257600080fd5b50516040805163986cfba360e01b8152600289900b6004820152905191925073db03e05b90bed1147df18a1997fac8e045431fac91636098fd4a918491849163986cfba3916024808301926020929190829003018186803b15801561499657600080fd5b505af41580156149aa573d6000803e3d6000fd5b505050506040513d60208110156149c057600080fd5b50516040805163986cfba360e01b815260028b900b6004820152905173db03e05b90bed1147df18a1997fac8e045431fac9163986cfba3916024808301926020929190829003018186803b158015614a1757600080fd5b505af4158015614a2b573d6000803e3d6000fd5b505050506040513d6020811015614a4157600080fd5b5051604080516001600160e01b031960e087901b1681526001600160a01b0394851660048201529284166024840152921660448201526064810188905260848101879052905160a4808301926020929190829003018186803b158015614aa657600080fd5b505af4158015614aba573d6000803e3d6000fd5b505050506040513d6020811015614ad057600080fd5b50519695505050505050565b6000806001600160801b0383161561405c576040805130602080830182905283518084038201815283850194859052633c8a7d8d60e01b9094526044830182815260028a810b606486015289900b60848501526001600160801b03881660a485015260a060c48501908152855160e486015285516001600160a01b037f000000000000000000000000b1bc4b830fcba2184b92e15b9133c411605180381696633c8a7d8d968d958d958d959394909392610104019185019080838360005b83811015614bb2578181015183820152602001614b9a565b50505050905090810190601f168015614bdf5780820380516001836020036101000a031916815260200191505b5096505050505050506040805180830381600087803b158015614c0157600080fd5b505af1158015614c15573d6000803e3d6000fd5b505050506040513d6040811015614c2b57600080fd5b50805160209091015190969095509350505050565b60006001600160801b03821115614c8a576040805162461bcd60e51b815260206004820152600960248201526824ab1718991c2fa7a360b91b604482015290519081900360640190fd5b5090565b6000614ce3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661506b9092919063ffffffff16565b805190915015612e7f57808060200190516020811015614d0257600080fd5b5051612e7f5760405162461bcd60e51b815260040180806020018281038252602a815260200180615383602a913960400191505060405180910390fd5b600082821115614d96576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000807f000000000000000000000000b1bc4b830fcba2184b92e15b9133c411605180386001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015614df857600080fd5b505afa158015614e0c573d6000803e3d6000fd5b505050506040513d60e0811015614e2257600080fd5b50604090810151815163252c09d760e01b815261ffff8216600482015291519092506000916001600160a01b037f000000000000000000000000b1bc4b830fcba2184b92e15b9133c41160518038169163252c09d791602480820192608092909190829003018186803b158015614e9857600080fd5b505afa158015614eac573d6000803e3d6000fd5b505050506040513d6080811015614ec257600080fd5b505163ffffffff164214159392505050565b6000818310610df05782610f89565b6000818310614ef25781610f89565b5090919050565b6008546040805163095ea7b360e01b81526001600160a01b0392831660048201526024810184905290519184169163095ea7b3916044808201926020929091908290030181600087803b158015614f4f57600080fd5b505af1158015614f63573d6000803e3d6000fd5b505050506040513d6020811015614f7957600080fd5b50506008546040805163b66503cf60e01b81526001600160a01b038581166004830152602482018590529151919092169163b66503cf91604480830192600092919082900301818387803b158015614fd057600080fd5b505af1158015614fe4573d6000803e3d6000fd5b50506008546040805163095ea7b360e01b81526001600160a01b0392831660048201526000602482018190529151928716945063095ea7b39350604480820193602093909283900390910190829087803b15801561504157600080fd5b505af1158015615055573d6000803e3d6000fd5b505050506040513d6020811015613b6557600080fd5b606061384c84846000858561507f85615190565b6150d0576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b6020831061510e5780518252601f1990920191602091820191016150ef565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114615170576040519150601f19603f3d011682016040523d82523d6000602084013e615175565b606091505b5091509150615185828286615196565b979650505050505050565b3b151590565b606083156151a5575081610f89565b8251156151b55782518084602001fd5b60405162461bcd60e51b815260206004820181815284516024840152845185939192839260440191908501908083836000831561321f57818101518382015260200161320756fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573735265656e7472616e637947756172643a207265656e7472616e742063616c6c0045524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f75bf84c53da055fe68ed1f2a4fcc4d9367b8a41e7553708be5c8437b7d9f69664736f6c63430007060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000b1bc4b830fcba2184b92e15b9133c41160518038000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2a31d95b1a4c8b1e772599ffcb8875fb4e2d330000000000000000000000000000000000000000000000000000000000000e10
-----Decoded View---------------
Arg [0] : _pool (address): 0xb1BC4B830FCbA2184B92e15b9133c41160518038
Arg [1] : _allowToken0 (bool): True
Arg [2] : _allowToken1 (bool): False
Arg [3] : __owner (address): 0x0b2a31D95B1a4c8b1e772599ffcB8875FB4e2d33
Arg [4] : _twapPeriod (uint32): 3600
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000b1bc4b830fcba2184b92e15b9133c41160518038
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 0000000000000000000000000b2a31d95b1a4c8b1e772599ffcb8875fb4e2d33
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000e10
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.