More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 43 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Zap In | 3625195 | 798 days ago | IN | 49.31416951 MOVR | 0.00045394 | ||||
Zap In | 3625187 | 798 days ago | IN | 12 MOVR | 0.00083361 | ||||
Zap In | 3608944 | 800 days ago | IN | 47.57865054 MOVR | 0.00111049 | ||||
Zap In | 2707544 | 931 days ago | IN | 0.01 MOVR | 0.00111885 | ||||
Zap In | 2589090 | 948 days ago | IN | 0.1 MOVR | 0.00107948 | ||||
Zap In | 2588955 | 948 days ago | IN | 0 MOVR | 0.00107646 | ||||
Zap In | 2588937 | 948 days ago | IN | 0 MOVR | 0.00107646 | ||||
Zap In | 2587457 | 948 days ago | IN | 0 MOVR | 0.00115606 | ||||
Zap In | 2584043 | 949 days ago | IN | 0.1 MOVR | 0.00134211 | ||||
Zap In | 2582262 | 949 days ago | IN | 0.05 MOVR | 0.00110904 | ||||
Zap In | 2581472 | 949 days ago | IN | 0.1 MOVR | 0.00115867 | ||||
Zap In | 2581437 | 949 days ago | IN | 0.1 MOVR | 0.00107907 | ||||
Zap In | 2581424 | 949 days ago | IN | 0 MOVR | 0.00115606 | ||||
Zap In | 1638404 | 1125 days ago | IN | 13 MOVR | 0.00119394 | ||||
Zap In | 1596193 | 1135 days ago | IN | 0 MOVR | 0.00081054 | ||||
Zap In | 1596049 | 1135 days ago | IN | 0.01 MOVR | 0.00137628 | ||||
Zap In | 1581729 | 1139 days ago | IN | 0.001 MOVR | 0.00105703 | ||||
Zap In | 1576619 | 1140 days ago | IN | 0.000001 MOVR | 0.00125569 | ||||
Zap In | 1576608 | 1140 days ago | IN | 0.000001 MOVR | 0.00087023 | ||||
Zap In | 1576594 | 1140 days ago | IN | 0.000001 MOVR | 0.00110935 | ||||
Zap In | 1576589 | 1140 days ago | IN | 0.000001 MOVR | 0.00110453 | ||||
Zap In | 1576575 | 1140 days ago | IN | 0.000001 MOVR | 0.00111053 | ||||
Zap In | 1576571 | 1140 days ago | IN | 0.000001 MOVR | 0.00138776 | ||||
Zap In | 1576552 | 1140 days ago | IN | 0.000001 MOVR | 0.00107603 | ||||
Zap In | 1576544 | 1140 days ago | IN | 0.000001 MOVR | 0.00107413 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
3625195 | 798 days ago | 49.31416951 MOVR | ||||
3625187 | 798 days ago | 12 MOVR | ||||
3608944 | 800 days ago | 47.57865054 MOVR | ||||
2707544 | 931 days ago | 0.01 MOVR | ||||
2589090 | 948 days ago | 0.1 MOVR | ||||
2584043 | 949 days ago | 0.1 MOVR | ||||
2582262 | 949 days ago | 0.05 MOVR | ||||
2581472 | 949 days ago | 0.1 MOVR | ||||
2581437 | 949 days ago | 0.1 MOVR | ||||
1638404 | 1125 days ago | 13 MOVR | ||||
1596049 | 1135 days ago | 0.01 MOVR | ||||
1581729 | 1139 days ago | 0.001 MOVR | ||||
1576619 | 1140 days ago | 0.000001 MOVR | ||||
1576608 | 1140 days ago | 0.000001 MOVR | ||||
1576594 | 1140 days ago | 0.000001 MOVR | ||||
1576589 | 1140 days ago | 0.000001 MOVR | ||||
1576575 | 1140 days ago | 0.000001 MOVR | ||||
1576571 | 1140 days ago | 0.000001 MOVR | ||||
1576552 | 1140 days ago | 0.000001 MOVR | ||||
1576544 | 1140 days ago | 0.000001 MOVR | ||||
1576535 | 1140 days ago | 0.000001 MOVR | ||||
1576530 | 1140 days ago | 0.000001 MOVR | ||||
1576502 | 1140 days ago | 0.000001 MOVR | ||||
1576496 | 1140 days ago | 0.000001 MOVR | ||||
1576473 | 1140 days ago | 0.000001 MOVR |
Loading...
Loading
Contract Name:
Pickle_UniV2_ZapIn_V1
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at moonriver.moonscan.io on 2022-03-04 */ /** *Submitted for verification at moonbeam.moonscan.io on 2022-02-18 */ pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File @openzeppelin/contracts/interfaces/[email protected] // OpenZeppelin Contracts v4.4.1 (interfaces/IERC20.sol) pragma solidity ^0.8.0; // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^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 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) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @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() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.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) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/token/ERC20/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; /** * @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 Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File @uniswap/v2-periphery/contracts/interfaces/[email protected] pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // File @uniswap/v2-periphery/contracts/interfaces/[email protected] pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } // File @uniswap/v2-periphery/contracts/interfaces/[email protected] pragma solidity >=0.5.0; interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; } // File @uniswap/v2-core/contracts/interfaces/[email protected] pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // File @uniswap/v2-core/contracts/interfaces/[email protected] pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // File @uniswap/lib/contracts/libraries/[email protected] pragma solidity >=0.4.0; // computes square roots using the babylonian method // https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method library Babylonian { function sqrt(uint y) internal pure returns (uint z) { if (y > 3) { z = y; uint x = y / 2 + 1; while (x < z) { z = x; x = (y / x + x) / 2; } } else if (y != 0) { z = 1; } // else z = 0 } } // File contracts/Pickle_UniV2_ZapIn_V1.sol ///@author Pickle ///@notice This contract adds liquidity to Uniswap V2 pools using ETH or any ERC20 Token and then adds this lp token to desired jar in a single txn. pragma solidity ^0.8.0; interface IPickleJar { function token() external view returns (address); function deposit(uint256 amount) external; } abstract contract ZapBaseV2 is Ownable { using SafeERC20 for IERC20; bool public stopped = false; // swapTarget => approval status mapping(address => bool) public approvedTargets; // circuit breaker modifiers modifier stopInEmergency() { if (stopped) { revert("Temporarily Paused"); } else { _; } } function _getBalance(address token) internal view returns (uint256 balance) { if (token == address(0)) { balance = address(this).balance; } else { balance = IERC20(token).balanceOf(address(this)); } } function _approveToken(address token, address spender) internal { IERC20 _token = IERC20(token); if (_token.allowance(address(this), spender) > 0) return; else { _token.safeApprove(spender, type(uint256).max); } } function _approveToken( address token, address spender, uint256 amount ) internal { IERC20 _token = IERC20(token); _token.safeApprove(spender, 0); _token.safeApprove(spender, amount); } // - to Pause the contract function toggleContractActive() public onlyOwner { stopped = !stopped; } function setApprovedTargets( address[] calldata targets, bool[] calldata isApproved ) external onlyOwner { require(targets.length == isApproved.length, "Invalid Input length"); for (uint256 i = 0; i < targets.length; i++) { approvedTargets[targets[i]] = isApproved[i]; } } receive() external payable { require(msg.sender != tx.origin, "Do not send ETH directly"); } } contract Pickle_UniV2_ZapIn_V1 is ZapBaseV2 { using SafeERC20 for IERC20; uint256 private constant deadline = 0xf000000000000000000000000000000000000000000000000000000000000000; address public wethTokenAddress; constructor(address[] memory targets, address wnative) { for (uint256 i = 0; i < targets.length; i++) { approvedTargets[targets[i]] = true; } wethTokenAddress = wnative; } event zapIn(address sender, address jar, uint256 tokensRec); /** @notice This function is used to invest in given Uniswap V2 pair through ETH/ERC20 Tokens @param _FromTokenContractAddress The ERC20 token used for investment (address(0x00) if ether) @param _amount The amount of fromToken to invest @param _pairAddress The Uniswap pair address or the PJar token @param _toPJar Pickle vault address @param _minPJarTokens The minimum acceptable quantity vault tokens to receive. Reverts otherwise @param _swapTarget Excecution target for the first swap @param _swapData DEX quote data @param _transferResidual Set false to save gas by donating the residual remaining after a Zap @param _uniswapRouter Protocol's uniswap router address @param _shouldSellEntireBalance Checks the total allowance of input token to zapin instead of the _amount, if true @return tokensReceived Quantity of Vault tokens received */ function ZapIn( address _FromTokenContractAddress, uint256 _amount, address _pairAddress, address _toPJar, uint256 _minPJarTokens, address _swapTarget, bytes calldata _swapData, bool _transferResidual, address _uniswapRouter, bool _shouldSellEntireBalance ) external payable stopInEmergency returns (uint256 tokensReceived) { uint256 _toInvest = _pullTokens( _FromTokenContractAddress, _amount, _shouldSellEntireBalance ); uint256 LPBought = _performZapIn( _FromTokenContractAddress, _pairAddress, _toInvest, _swapTarget, _swapData, _transferResidual, _uniswapRouter ); tokensReceived = _vaultDeposit(LPBought, _toPJar, _minPJarTokens); } function _pullTokens( address _from, uint256 _amount, bool _shouldSellEntireBalance ) internal returns (uint256) { if (_from != address(0)) { require(_amount > 0, "Invalid token amount"); require(msg.value == 0, "Eth sent with token"); //transfer token if (_shouldSellEntireBalance) { require( Address.isContract(msg.sender), "ERR: shouldSellEntireBalance is true for EOA" ); _amount = IERC20(_from).allowance(msg.sender, address(this)); } IERC20(_from).safeTransferFrom(msg.sender, address(this), _amount); } return _amount; } function _vaultDeposit( uint256 amount, address toVault, uint256 minTokensRec ) internal returns (uint256 tokensReceived) { address underlyingVaultToken = IPickleJar(toVault).token(); _approveToken(underlyingVaultToken, toVault); uint256 iniYVaultBal = IERC20(toVault).balanceOf(address(this)); IPickleJar(toVault).deposit(amount); tokensReceived = IERC20(toVault).balanceOf(address(this)) - iniYVaultBal; require(tokensReceived >= minTokensRec, "Err: High Slippage"); IERC20(toVault).safeTransfer(msg.sender, tokensReceived); emit zapIn(msg.sender, toVault, tokensReceived); } function _getPairTokens(address _pairAddress) internal view returns (address token0, address token1) { IUniswapV2Pair uniPair = IUniswapV2Pair(_pairAddress); token0 = uniPair.token0(); token1 = uniPair.token1(); } function _performZapIn( address _FromTokenContractAddress, address _pairAddress, uint256 _amount, address _swapTarget, bytes memory swapData, bool transferResidual, address _uniswapRouter ) internal returns (uint256) { uint256 intermediateAmt; address intermediateToken; (address _ToUniswapToken0, address _ToUniswapToken1) = _getPairTokens( _pairAddress ); if ( _FromTokenContractAddress != _ToUniswapToken0 && _FromTokenContractAddress != _ToUniswapToken1 ) { // swap to intermediate (intermediateAmt, intermediateToken) = _fillQuote( _FromTokenContractAddress, _pairAddress, _amount, _swapTarget, swapData ); } else { intermediateToken = _FromTokenContractAddress; intermediateAmt = _amount; } // divide intermediate into appropriate amount to add liquidity (uint256 token0Bought, uint256 token1Bought) = _swapIntermediate( intermediateToken, _ToUniswapToken0, _ToUniswapToken1, intermediateAmt, _uniswapRouter ); return _uniDeposit( _ToUniswapToken0, _ToUniswapToken1, token0Bought, token1Bought, transferResidual, _uniswapRouter ); } function _uniDeposit( address _ToUnipoolToken0, address _ToUnipoolToken1, uint256 token0Bought, uint256 token1Bought, bool transferResidual, address _uniswapRouter ) internal returns (uint256) { _approveToken(_ToUnipoolToken0, _uniswapRouter, token0Bought); _approveToken(_ToUnipoolToken1, _uniswapRouter, token1Bought); (uint256 amountA, uint256 amountB, uint256 LP) = IUniswapV2Router02( _uniswapRouter ).addLiquidity( _ToUnipoolToken0, _ToUnipoolToken1, token0Bought, token1Bought, 1, 1, address(this), deadline ); if (transferResidual) { //Returning Residue in token0, if any. if (token0Bought - amountA > 0) { IERC20(_ToUnipoolToken0).safeTransfer( msg.sender, token0Bought - amountA ); } //Returning Residue in token1, if any if (token1Bought - amountB > 0) { IERC20(_ToUnipoolToken1).safeTransfer( msg.sender, token1Bought - amountB ); } } return LP; } function _fillQuote( address _fromTokenAddress, address _pairAddress, uint256 _amount, address _swapTarget, bytes memory swapData ) internal returns (uint256 amountBought, address intermediateToken) { if (_swapTarget == wethTokenAddress) { require(_amount > 0 && msg.value == _amount, "Invalid _amount: Input ETH mismatch"); IWETH(wethTokenAddress).deposit{ value: _amount }(); return (_amount, wethTokenAddress); } uint256 valueToSend; if (_fromTokenAddress == address(0)) { require(_amount > 0 && msg.value == _amount, "Invalid _amount: Input ETH mismatch"); valueToSend = _amount; } else { _approveToken(_fromTokenAddress, _swapTarget, _amount); } (address _token0, address _token1) = _getPairTokens(_pairAddress); IERC20 token0 = IERC20(_token0); IERC20 token1 = IERC20(_token1); uint256 initialBalance0 = token0.balanceOf(address(this)); uint256 initialBalance1 = token1.balanceOf(address(this)); require(approvedTargets[_swapTarget], "Target not Authorized"); (bool success, ) = _swapTarget.call{value: valueToSend}(swapData); require(success, "Error Swapping Tokens 1"); uint256 finalBalance0 = token0.balanceOf(address(this)) - initialBalance0; uint256 finalBalance1 = token1.balanceOf(address(this)) - initialBalance1; if (finalBalance0 > finalBalance1) { amountBought = finalBalance0; intermediateToken = _token0; } else { amountBought = finalBalance1; intermediateToken = _token1; } require(amountBought > 0, "Swapped to Invalid Intermediate"); } function _swapIntermediate( address _toContractAddress, address _ToUnipoolToken0, address _ToUnipoolToken1, uint256 _amount, address _uniswapRouter ) internal returns (uint256 token0Bought, uint256 token1Bought) { IUniswapV2Factory uniV2Factory = IUniswapV2Factory( IUniswapV2Router02(_uniswapRouter).factory() ); IUniswapV2Pair pair = IUniswapV2Pair( uniV2Factory.getPair(_ToUnipoolToken0, _ToUnipoolToken1) ); (uint256 res0, uint256 res1, ) = pair.getReserves(); if (_toContractAddress == _ToUnipoolToken0) { uint256 amountToSwap = calculateSwapInAmount(res0, _amount); //if no reserve or a new pair is created if (amountToSwap <= 0) amountToSwap = _amount / 2; token1Bought = _token2Token( _toContractAddress, _ToUnipoolToken1, amountToSwap, _uniswapRouter, uniV2Factory ); token0Bought = _amount - amountToSwap; } else { uint256 amountToSwap = calculateSwapInAmount(res1, _amount); //if no reserve or a new pair is created if (amountToSwap <= 0) amountToSwap = _amount / 2; token0Bought = _token2Token( _toContractAddress, _ToUnipoolToken0, amountToSwap, _uniswapRouter, uniV2Factory ); token1Bought = _amount - amountToSwap; } } function calculateSwapInAmount(uint256 reserveIn, uint256 userIn) internal pure returns (uint256) { return (Babylonian.sqrt( reserveIn * ((userIn * 3988000) + (reserveIn * 3988009)) ) - (reserveIn * 1997)) / 1994; } /** @notice This function is used to swap ERC20 <> ERC20 @param _FromTokenContractAddress The token address to swap from. @param _ToTokenContractAddress The token address to swap to. @param tokens2Trade The amount of tokens to swap @return tokenBought The quantity of tokens bought */ function _token2Token( address _FromTokenContractAddress, address _ToTokenContractAddress, uint256 tokens2Trade, address _uniswapRouter, IUniswapV2Factory uniV2Factory ) internal returns (uint256 tokenBought) { if (_FromTokenContractAddress == _ToTokenContractAddress) { return tokens2Trade; } _approveToken(_FromTokenContractAddress, _uniswapRouter, tokens2Trade); address pair = uniV2Factory.getPair( _FromTokenContractAddress, _ToTokenContractAddress ); require(pair != address(0), "No Swap Available"); address[] memory path = new address[](2); path[0] = _FromTokenContractAddress; path[1] = _ToTokenContractAddress; tokenBought = IUniswapV2Router02(_uniswapRouter) .swapExactTokensForTokens( tokens2Trade, 1, path, address(this), deadline )[path.length - 1]; require(tokenBought > 0, "Error Swapping Tokens 2"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"address","name":"wnative","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"jar","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensRec","type":"uint256"}],"name":"zapIn","type":"event"},{"inputs":[{"internalType":"address","name":"_FromTokenContractAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_pairAddress","type":"address"},{"internalType":"address","name":"_toPJar","type":"address"},{"internalType":"uint256","name":"_minPJarTokens","type":"uint256"},{"internalType":"address","name":"_swapTarget","type":"address"},{"internalType":"bytes","name":"_swapData","type":"bytes"},{"internalType":"bool","name":"_transferResidual","type":"bool"},{"internalType":"address","name":"_uniswapRouter","type":"address"},{"internalType":"bool","name":"_shouldSellEntireBalance","type":"bool"}],"name":"ZapIn","outputs":[{"internalType":"uint256","name":"tokensReceived","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"approvedTargets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"bool[]","name":"isApproved","type":"bool[]"}],"name":"setApprovedTargets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopped","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleContractActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wethTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405260008060146101000a81548160ff0219169083151502179055503480156200002b57600080fd5b5060405162003d7b38038062003d7b8339818101604052810190620000519190620002fb565b62000071620000656200017660201b60201c565b6200017e60201b60201c565b60005b82518110156200012c576001806000858481518110620000bd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806200012390620003f6565b91505062000074565b5080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050620004bc565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600062000259620002538462000389565b62000355565b905080838252602082019050828560208602820111156200027957600080fd5b60005b85811015620002ad5781620002928882620002b7565b8452602084019350602083019250506001810190506200027c565b5050509392505050565b600081519050620002c881620004a2565b92915050565b600082601f830112620002e057600080fd5b8151620002f284826020860162000242565b91505092915050565b600080604083850312156200030f57600080fd5b600083015167ffffffffffffffff8111156200032a57600080fd5b6200033885828601620002ce565b92505060206200034b85828601620002b7565b9150509250929050565b6000604051905081810181811067ffffffffffffffff821117156200037f576200037e62000473565b5b8060405250919050565b600067ffffffffffffffff821115620003a757620003a662000473565b5b602082029050602081019050919050565b6000620003c582620003cc565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006200040382620003ec565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562000439576200043862000444565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620004ad81620003b8565b8114620004b957600080fd5b50565b6138af80620004cc6000396000f3fe60806040526004361061008a5760003560e01c80638da5cb5b116100595780638da5cb5b146101895780639735a634146101b45780639779d1a6146101dd578063b5f4b0261461021a578063f2fde38b1461024a57610100565b80630f9dad71146101055780631385d24c14610130578063715018a61461014757806375f12b211461015e57610100565b36610100573273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156100fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f5906131d6565b60405180910390fd5b005b600080fd5b34801561011157600080fd5b5061011a610273565b6040516101279190613057565b60405180910390f35b34801561013c57600080fd5b50610145610299565b005b34801561015357600080fd5b5061015c610341565b005b34801561016a57600080fd5b506101736103c9565b6040516101809190613179565b60405180910390f35b34801561019557600080fd5b5061019e6103dc565b6040516101ab9190613057565b60405180910390f35b3480156101c057600080fd5b506101db60048036038101906101d691906127a2565b610405565b005b3480156101e957600080fd5b5061020460048036038101906101ff9190612658565b6105e2565b6040516102119190613179565b60405180910390f35b610234600480360381019061022f91906126aa565b610602565b6040516102419190613416565b60405180910390f35b34801561025657600080fd5b50610271600480360381019061026c9190612658565b6106d7565b005b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6102a16107cf565b73ffffffffffffffffffffffffffffffffffffffff166102bf6103dc565b73ffffffffffffffffffffffffffffffffffffffff1614610315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030c906132d6565b60405180910390fd5b600060149054906101000a900460ff1615600060146101000a81548160ff021916908315150217905550565b6103496107cf565b73ffffffffffffffffffffffffffffffffffffffff166103676103dc565b73ffffffffffffffffffffffffffffffffffffffff16146103bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103b4906132d6565b60405180910390fd5b6103c760006107d7565b565b600060149054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61040d6107cf565b73ffffffffffffffffffffffffffffffffffffffff1661042b6103dc565b73ffffffffffffffffffffffffffffffffffffffff1614610481576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610478906132d6565b60405180910390fd5b8181905084849050146104c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104c0906132b6565b60405180910390fd5b60005b848490508110156105db57828282818110610510577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906105259190612858565b60016000878785818110610562577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906105779190612658565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806105d39061371f565b9150506104cc565b5050505050565b60016020528060005260406000206000915054906101000a900460ff1681565b60008060149054906101000a900460ff1615610653576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064a90613256565b60405180910390fd5b60006106608d8d8561089b565b905060006106b78e8d848c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508b8b610a6a565b90506106c4818c8c610b42565b925050509b9a5050505050505050505050565b6106df6107cf565b73ffffffffffffffffffffffffffffffffffffffff166106fd6103dc565b73ffffffffffffffffffffffffffffffffffffffff1614610753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074a906132d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156107c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ba906131f6565b60405180910390fd5b6107cc816107d7565b50565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614610a605760008311610913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090a90613216565b60405180910390fd5b60003414610956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094d90613236565b60405180910390fd5b8115610a325761096533610e0f565b6109a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099b90613316565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b81526004016109df929190613072565b60206040518083038186803b1580156109f757600080fd5b505afa158015610a0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2f91906128f9565b92505b610a5f3330858773ffffffffffffffffffffffffffffffffffffffff16610e22909392919063ffffffff16565b5b8290509392505050565b6000806000806000610a7b8b610eab565b915091508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614158015610ae757508073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614155b15610b0657610af98c8c8c8c8c610fb9565b8094508195505050610b0d565b8b92508993505b600080610b1d858585898c6115b8565b91509150610b2f848484848d8d611842565b9650505050505050979650505050505050565b6000808373ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b8b57600080fd5b505afa158015610b9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc39190612681565b9050610bcf81856119cc565b60008473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c0a9190613057565b60206040518083038186803b158015610c2257600080fd5b505afa158015610c36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5a91906128f9565b90508473ffffffffffffffffffffffffffffffffffffffff1663b6b55f25876040518263ffffffff1660e01b8152600401610c959190613416565b600060405180830381600087803b158015610caf57600080fd5b505af1158015610cc3573d6000803e3d6000fd5b50505050808573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610d019190613057565b60206040518083038186803b158015610d1957600080fd5b505afa158015610d2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5191906128f9565b610d5b9190613634565b925083831015610da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d97906133f6565b60405180910390fd5b610dcb33848773ffffffffffffffffffffffffffffffffffffffff16611abb9092919063ffffffff16565b7f7f31d76771556dce5ab39ba5b60664743da2629a75c474e9445734b7ad34087d338685604051610dfe9392919061309b565b60405180910390a150509392505050565b600080823b905060008111915050919050565b610ea5846323b872dd60e01b858585604051602401610e439392919061309b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611b41565b50505050565b60008060008390508073ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610ef957600080fd5b505afa158015610f0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f319190612681565b92508073ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610f7957600080fd5b505afa158015610f8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb19190612681565b915050915091565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156111105760008511801561102157508434145b611060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105790613296565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0866040518263ffffffff1660e01b81526004016000604051808303818588803b1580156110ca57600080fd5b505af11580156110de573d6000803e3d6000fd5b505050505084600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091506115ae565b60008073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16141561119c5760008611801561115557508534145b611194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118b90613296565b60405180910390fd5b8590506111a8565b6111a7888688611c08565b5b6000806111b489610eab565b915091506000829050600082905060008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016111fd9190613057565b60206040518083038186803b15801561121557600080fd5b505afa158015611229573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124d91906128f9565b905060008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161128a9190613057565b60206040518083038186803b1580156112a257600080fd5b505afa1580156112b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112da91906128f9565b9050600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135f906131b6565b60405180910390fd5b60008b73ffffffffffffffffffffffffffffffffffffffff16888c6040516113909190613040565b60006040518083038185875af1925050503d80600081146113cd576040519150601f19603f3d011682016040523d82523d6000602084013e6113d2565b606091505b5050905080611416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140d90613336565b60405180910390fd5b6000838673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114529190613057565b60206040518083038186803b15801561146a57600080fd5b505afa15801561147e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a291906128f9565b6114ac9190613634565b90506000838673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114ea9190613057565b60206040518083038186803b15801561150257600080fd5b505afa158015611516573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153a91906128f9565b6115449190613634565b90508082111561155957819b50889a50611560565b809b50879a505b60008c116115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159a90613356565b60405180910390fd5b505050505050505050505b9550959350505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561160357600080fd5b505afa158015611617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163b9190612681565b905060008173ffffffffffffffffffffffffffffffffffffffff1663e6a4390589896040518363ffffffff1660e01b815260040161167a929190613072565b60206040518083038186803b15801561169257600080fd5b505afa1580156116a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ca9190612681565b90506000808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561171557600080fd5b505afa158015611729573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174d91906128aa565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691508973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614156117ef5760006117b2838a611c6a565b9050600081116117cc576002896117c991906135a9565b90505b6117d98c8b838b89611cd4565b955080896117e79190613634565b965050611834565b60006117fb828a611c6a565b9050600081116118155760028961181291906135a9565b90505b6118228c8c838b89611cd4565b965080896118309190613634565b9550505b505050509550959350505050565b600061184f878387611c08565b61185a868386611c08565b60008060008473ffffffffffffffffffffffffffffffffffffffff1663e8e337008b8b8b8b600180307ff0000000000000000000000000000000000000000000000000000000000000006040518963ffffffff1660e01b81526004016118c79897969594939291906130d2565b606060405180830381600087803b1580156118e157600080fd5b505af11580156118f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119199190612922565b92509250925085156119bc57600083896119339190613634565b11156119705761196f33848a6119499190613634565b8c73ffffffffffffffffffffffffffffffffffffffff16611abb9092919063ffffffff16565b5b6000828861197e9190613634565b11156119bb576119ba3383896119949190613634565b8b73ffffffffffffffffffffffffffffffffffffffff16611abb9092919063ffffffff16565b5b5b8093505050509695505050505050565b600082905060008173ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401611a0e929190613072565b60206040518083038186803b158015611a2657600080fd5b505afa158015611a3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5e91906128f9565b1115611a6a5750611ab7565b611ab5827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8373ffffffffffffffffffffffffffffffffffffffff166120d19092919063ffffffff16565b505b5050565b611b3c8363a9059cbb60e01b8484604051602401611ada929190613150565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611b41565b505050565b6000611ba3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661222f9092919063ffffffff16565b9050600081511115611c035780806020019051810190611bc39190612881565b611c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf9906133b6565b60405180910390fd5b5b505050565b6000839050611c398360008373ffffffffffffffffffffffffffffffffffffffff166120d19092919063ffffffff16565b611c6483838373ffffffffffffffffffffffffffffffffffffffff166120d19092919063ffffffff16565b50505050565b60006107ca6107cd84611c7d91906135da565b611cb8623cda2986611c8f91906135da565b623cda2086611c9e91906135da565b611ca89190613553565b86611cb391906135da565b612247565b611cc29190613634565b611ccc91906135a9565b905092915050565b60008473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415611d12578390506120c8565b611d1d868486611c08565b60008273ffffffffffffffffffffffffffffffffffffffff1663e6a4390588886040518363ffffffff1660e01b8152600401611d5a929190613072565b60206040518083038186803b158015611d7257600080fd5b505afa158015611d86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611daa9190612681565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1390613396565b60405180910390fd5b6000600267ffffffffffffffff811115611e5f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611e8d5781602001602082028036833780820191505090505b5090508781600081518110611ecb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508681600181518110611f40577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff166338ed173987600184307ff0000000000000000000000000000000000000000000000000000000000000006040518663ffffffff1660e01b8152600401611fdc959493929190613431565b600060405180830381600087803b158015611ff657600080fd5b505af115801561200a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906120339190612817565b600182516120419190613634565b81518110612078577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519250600083116120c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bc906132f6565b60405180910390fd5b50505b95945050505050565b600081148061216a575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401612118929190613072565b60206040518083038186803b15801561213057600080fd5b505afa158015612144573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216891906128f9565b145b6121a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a0906133d6565b60405180910390fd5b61222a8363095ea7b360e01b84846040516024016121c8929190613150565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611b41565b505050565b606061223e84846000856122c1565b90509392505050565b600060038211156122ae578190506000600160028461226691906135a9565b6122709190613553565b90505b818110156122a857809150600281828561228d91906135a9565b6122979190613553565b6122a191906135a9565b9050612273565b506122bc565b600082146122bb57600190505b5b919050565b606082471015612306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fd90613276565b60405180910390fd5b61230f85610e0f565b61234e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234590613376565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516123779190613040565b60006040518083038185875af1925050503d80600081146123b4576040519150601f19603f3d011682016040523d82523d6000602084013e6123b9565b606091505b50915091506123c98282866123d5565b92505050949350505050565b606083156123e557829050612435565b6000835111156123f85782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242c9190613194565b60405180910390fd5b9392505050565b600061244f61244a846134bc565b61348b565b9050808382526020820190508285602086028201111561246e57600080fd5b60005b8581101561249e5781612484888261262e565b845260208401935060208301925050600181019050612471565b5050509392505050565b6000813590506124b781613806565b92915050565b6000815190506124cc81613806565b92915050565b60008083601f8401126124e457600080fd5b8235905067ffffffffffffffff8111156124fd57600080fd5b60208301915083602082028301111561251557600080fd5b9250929050565b60008083601f84011261252e57600080fd5b8235905067ffffffffffffffff81111561254757600080fd5b60208301915083602082028301111561255f57600080fd5b9250929050565b600082601f83011261257757600080fd5b815161258784826020860161243c565b91505092915050565b60008135905061259f8161381d565b92915050565b6000815190506125b48161381d565b92915050565b60008083601f8401126125cc57600080fd5b8235905067ffffffffffffffff8111156125e557600080fd5b6020830191508360018202830111156125fd57600080fd5b9250929050565b60008151905061261381613834565b92915050565b6000813590506126288161384b565b92915050565b60008151905061263d8161384b565b92915050565b60008151905061265281613862565b92915050565b60006020828403121561266a57600080fd5b6000612678848285016124a8565b91505092915050565b60006020828403121561269357600080fd5b60006126a1848285016124bd565b91505092915050565b60008060008060008060008060008060006101408c8e0312156126cc57600080fd5b60006126da8e828f016124a8565b9b505060206126eb8e828f01612619565b9a505060406126fc8e828f016124a8565b995050606061270d8e828f016124a8565b985050608061271e8e828f01612619565b97505060a061272f8e828f016124a8565b96505060c08c013567ffffffffffffffff81111561274c57600080fd5b6127588e828f016125ba565b955095505060e061276b8e828f01612590565b93505061010061277d8e828f016124a8565b92505061012061278f8e828f01612590565b9150509295989b509295989b9093969950565b600080600080604085870312156127b857600080fd5b600085013567ffffffffffffffff8111156127d257600080fd5b6127de878288016124d2565b9450945050602085013567ffffffffffffffff8111156127fd57600080fd5b6128098782880161251c565b925092505092959194509250565b60006020828403121561282957600080fd5b600082015167ffffffffffffffff81111561284357600080fd5b61284f84828501612566565b91505092915050565b60006020828403121561286a57600080fd5b600061287884828501612590565b91505092915050565b60006020828403121561289357600080fd5b60006128a1848285016125a5565b91505092915050565b6000806000606084860312156128bf57600080fd5b60006128cd86828701612604565b93505060206128de86828701612604565b92505060406128ef86828701612643565b9150509250925092565b60006020828403121561290b57600080fd5b60006129198482850161262e565b91505092915050565b60008060006060848603121561293757600080fd5b60006129458682870161262e565b93505060206129568682870161262e565b92505060406129678682870161262e565b9150509250925092565b600061297d8383612989565b60208301905092915050565b61299281613668565b82525050565b6129a181613668565b82525050565b60006129b2826134f8565b6129bc8185613526565b93506129c7836134e8565b8060005b838110156129f85781516129df8882612971565b97506129ea83613519565b9250506001810190506129cb565b5085935050505092915050565b612a0e8161367a565b82525050565b6000612a1f82613503565b612a298185613537565b9350612a398185602086016136ec565b80840191505092915050565b612a4e816136da565b82525050565b6000612a5f8261350e565b612a698185613542565b9350612a798185602086016136ec565b612a82816137f5565b840191505092915050565b6000612a9a601583613542565b91507f546172676574206e6f7420417574686f72697a656400000000000000000000006000830152602082019050919050565b6000612ada601883613542565b91507f446f206e6f742073656e6420455448206469726563746c7900000000000000006000830152602082019050919050565b6000612b1a602683613542565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612b80601483613542565b91507f496e76616c696420746f6b656e20616d6f756e740000000000000000000000006000830152602082019050919050565b6000612bc0601383613542565b91507f4574682073656e74207769746820746f6b656e000000000000000000000000006000830152602082019050919050565b6000612c00601283613542565b91507f54656d706f726172696c792050617573656400000000000000000000000000006000830152602082019050919050565b6000612c40602683613542565b91507f416464726573733a20696e73756666696369656e742062616c616e636520666f60008301527f722063616c6c00000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612ca6602383613542565b91507f496e76616c6964205f616d6f756e743a20496e70757420455448206d69736d6160008301527f74636800000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612d0c601483613542565b91507f496e76616c696420496e707574206c656e6774680000000000000000000000006000830152602082019050919050565b6000612d4c602083613542565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000612d8c601783613542565b91507f4572726f72205377617070696e6720546f6b656e7320320000000000000000006000830152602082019050919050565b6000612dcc602c83613542565b91507f4552523a2073686f756c6453656c6c456e7469726542616c616e63652069732060008301527f7472756520666f7220454f4100000000000000000000000000000000000000006020830152604082019050919050565b6000612e32601783613542565b91507f4572726f72205377617070696e6720546f6b656e7320310000000000000000006000830152602082019050919050565b6000612e72601f83613542565b91507f5377617070656420746f20496e76616c696420496e7465726d656469617465006000830152602082019050919050565b6000612eb2601d83613542565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b6000612ef2601183613542565b91507f4e6f205377617020417661696c61626c650000000000000000000000000000006000830152602082019050919050565b6000612f32602a83613542565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b6000612f98603683613542565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b6000612ffe601283613542565b91507f4572723a204869676820536c69707061676500000000000000000000000000006000830152602082019050919050565b61303a816136c0565b82525050565b600061304c8284612a14565b915081905092915050565b600060208201905061306c6000830184612998565b92915050565b60006040820190506130876000830185612998565b6130946020830184612998565b9392505050565b60006060820190506130b06000830186612998565b6130bd6020830185612998565b6130ca6040830184613031565b949350505050565b6000610100820190506130e8600083018b612998565b6130f5602083018a612998565b6131026040830189613031565b61310f6060830188613031565b61311c6080830187612a45565b61312960a0830186612a45565b61313660c0830185612998565b61314360e0830184613031565b9998505050505050505050565b60006040820190506131656000830185612998565b6131726020830184613031565b9392505050565b600060208201905061318e6000830184612a05565b92915050565b600060208201905081810360008301526131ae8184612a54565b905092915050565b600060208201905081810360008301526131cf81612a8d565b9050919050565b600060208201905081810360008301526131ef81612acd565b9050919050565b6000602082019050818103600083015261320f81612b0d565b9050919050565b6000602082019050818103600083015261322f81612b73565b9050919050565b6000602082019050818103600083015261324f81612bb3565b9050919050565b6000602082019050818103600083015261326f81612bf3565b9050919050565b6000602082019050818103600083015261328f81612c33565b9050919050565b600060208201905081810360008301526132af81612c99565b9050919050565b600060208201905081810360008301526132cf81612cff565b9050919050565b600060208201905081810360008301526132ef81612d3f565b9050919050565b6000602082019050818103600083015261330f81612d7f565b9050919050565b6000602082019050818103600083015261332f81612dbf565b9050919050565b6000602082019050818103600083015261334f81612e25565b9050919050565b6000602082019050818103600083015261336f81612e65565b9050919050565b6000602082019050818103600083015261338f81612ea5565b9050919050565b600060208201905081810360008301526133af81612ee5565b9050919050565b600060208201905081810360008301526133cf81612f25565b9050919050565b600060208201905081810360008301526133ef81612f8b565b9050919050565b6000602082019050818103600083015261340f81612ff1565b9050919050565b600060208201905061342b6000830184613031565b92915050565b600060a0820190506134466000830188613031565b6134536020830187612a45565b818103604083015261346581866129a7565b90506134746060830185612998565b6134816080830184613031565b9695505050505050565b6000604051905081810181811067ffffffffffffffff821117156134b2576134b16137c6565b5b8060405250919050565b600067ffffffffffffffff8211156134d7576134d66137c6565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061355e826136c0565b9150613569836136c0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561359e5761359d613768565b5b828201905092915050565b60006135b4826136c0565b91506135bf836136c0565b9250826135cf576135ce613797565b5b828204905092915050565b60006135e5826136c0565b91506135f0836136c0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561362957613628613768565b5b828202905092915050565b600061363f826136c0565b915061364a836136c0565b92508282101561365d5761365c613768565b5b828203905092915050565b6000613673826136a0565b9050919050565b60008115159050919050565b60006dffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b60006136e5826136c0565b9050919050565b60005b8381101561370a5780820151818401526020810190506136ef565b83811115613719576000848401525b50505050565b600061372a826136c0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561375d5761375c613768565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61380f81613668565b811461381a57600080fd5b50565b6138268161367a565b811461383157600080fd5b50565b61383d81613686565b811461384857600080fd5b50565b613854816136c0565b811461385f57600080fd5b50565b61386b816136ca565b811461387657600080fd5b5056fea26469706673582212202c1346dff28a0d738f027157c8131af15af9fae997d42d9f8020e3e99fc7b70964736f6c63430008000033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000098878b06940ae243284ca214f92bb71a2b032b8a0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000aa30ef758139ae4a7f798112902bf6d65612045f0000000000000000000000002d4e873f9ab279da9f1bb2c532d4f06f67755b77
Deployed Bytecode
0x60806040526004361061008a5760003560e01c80638da5cb5b116100595780638da5cb5b146101895780639735a634146101b45780639779d1a6146101dd578063b5f4b0261461021a578063f2fde38b1461024a57610100565b80630f9dad71146101055780631385d24c14610130578063715018a61461014757806375f12b211461015e57610100565b36610100573273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156100fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100f5906131d6565b60405180910390fd5b005b600080fd5b34801561011157600080fd5b5061011a610273565b6040516101279190613057565b60405180910390f35b34801561013c57600080fd5b50610145610299565b005b34801561015357600080fd5b5061015c610341565b005b34801561016a57600080fd5b506101736103c9565b6040516101809190613179565b60405180910390f35b34801561019557600080fd5b5061019e6103dc565b6040516101ab9190613057565b60405180910390f35b3480156101c057600080fd5b506101db60048036038101906101d691906127a2565b610405565b005b3480156101e957600080fd5b5061020460048036038101906101ff9190612658565b6105e2565b6040516102119190613179565b60405180910390f35b610234600480360381019061022f91906126aa565b610602565b6040516102419190613416565b60405180910390f35b34801561025657600080fd5b50610271600480360381019061026c9190612658565b6106d7565b005b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6102a16107cf565b73ffffffffffffffffffffffffffffffffffffffff166102bf6103dc565b73ffffffffffffffffffffffffffffffffffffffff1614610315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030c906132d6565b60405180910390fd5b600060149054906101000a900460ff1615600060146101000a81548160ff021916908315150217905550565b6103496107cf565b73ffffffffffffffffffffffffffffffffffffffff166103676103dc565b73ffffffffffffffffffffffffffffffffffffffff16146103bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103b4906132d6565b60405180910390fd5b6103c760006107d7565b565b600060149054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61040d6107cf565b73ffffffffffffffffffffffffffffffffffffffff1661042b6103dc565b73ffffffffffffffffffffffffffffffffffffffff1614610481576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610478906132d6565b60405180910390fd5b8181905084849050146104c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104c0906132b6565b60405180910390fd5b60005b848490508110156105db57828282818110610510577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906105259190612858565b60016000878785818110610562577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906105779190612658565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806105d39061371f565b9150506104cc565b5050505050565b60016020528060005260406000206000915054906101000a900460ff1681565b60008060149054906101000a900460ff1615610653576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064a90613256565b60405180910390fd5b60006106608d8d8561089b565b905060006106b78e8d848c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508b8b610a6a565b90506106c4818c8c610b42565b925050509b9a5050505050505050505050565b6106df6107cf565b73ffffffffffffffffffffffffffffffffffffffff166106fd6103dc565b73ffffffffffffffffffffffffffffffffffffffff1614610753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074a906132d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156107c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ba906131f6565b60405180910390fd5b6107cc816107d7565b50565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614610a605760008311610913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090a90613216565b60405180910390fd5b60003414610956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094d90613236565b60405180910390fd5b8115610a325761096533610e0f565b6109a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099b90613316565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b81526004016109df929190613072565b60206040518083038186803b1580156109f757600080fd5b505afa158015610a0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2f91906128f9565b92505b610a5f3330858773ffffffffffffffffffffffffffffffffffffffff16610e22909392919063ffffffff16565b5b8290509392505050565b6000806000806000610a7b8b610eab565b915091508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614158015610ae757508073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614155b15610b0657610af98c8c8c8c8c610fb9565b8094508195505050610b0d565b8b92508993505b600080610b1d858585898c6115b8565b91509150610b2f848484848d8d611842565b9650505050505050979650505050505050565b6000808373ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b8b57600080fd5b505afa158015610b9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc39190612681565b9050610bcf81856119cc565b60008473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c0a9190613057565b60206040518083038186803b158015610c2257600080fd5b505afa158015610c36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5a91906128f9565b90508473ffffffffffffffffffffffffffffffffffffffff1663b6b55f25876040518263ffffffff1660e01b8152600401610c959190613416565b600060405180830381600087803b158015610caf57600080fd5b505af1158015610cc3573d6000803e3d6000fd5b50505050808573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610d019190613057565b60206040518083038186803b158015610d1957600080fd5b505afa158015610d2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5191906128f9565b610d5b9190613634565b925083831015610da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d97906133f6565b60405180910390fd5b610dcb33848773ffffffffffffffffffffffffffffffffffffffff16611abb9092919063ffffffff16565b7f7f31d76771556dce5ab39ba5b60664743da2629a75c474e9445734b7ad34087d338685604051610dfe9392919061309b565b60405180910390a150509392505050565b600080823b905060008111915050919050565b610ea5846323b872dd60e01b858585604051602401610e439392919061309b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611b41565b50505050565b60008060008390508073ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610ef957600080fd5b505afa158015610f0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f319190612681565b92508073ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610f7957600080fd5b505afa158015610f8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb19190612681565b915050915091565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156111105760008511801561102157508434145b611060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105790613296565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0866040518263ffffffff1660e01b81526004016000604051808303818588803b1580156110ca57600080fd5b505af11580156110de573d6000803e3d6000fd5b505050505084600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091506115ae565b60008073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16141561119c5760008611801561115557508534145b611194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118b90613296565b60405180910390fd5b8590506111a8565b6111a7888688611c08565b5b6000806111b489610eab565b915091506000829050600082905060008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016111fd9190613057565b60206040518083038186803b15801561121557600080fd5b505afa158015611229573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124d91906128f9565b905060008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161128a9190613057565b60206040518083038186803b1580156112a257600080fd5b505afa1580156112b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112da91906128f9565b9050600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135f906131b6565b60405180910390fd5b60008b73ffffffffffffffffffffffffffffffffffffffff16888c6040516113909190613040565b60006040518083038185875af1925050503d80600081146113cd576040519150601f19603f3d011682016040523d82523d6000602084013e6113d2565b606091505b5050905080611416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140d90613336565b60405180910390fd5b6000838673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114529190613057565b60206040518083038186803b15801561146a57600080fd5b505afa15801561147e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a291906128f9565b6114ac9190613634565b90506000838673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114ea9190613057565b60206040518083038186803b15801561150257600080fd5b505afa158015611516573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153a91906128f9565b6115449190613634565b90508082111561155957819b50889a50611560565b809b50879a505b60008c116115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159a90613356565b60405180910390fd5b505050505050505050505b9550959350505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561160357600080fd5b505afa158015611617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163b9190612681565b905060008173ffffffffffffffffffffffffffffffffffffffff1663e6a4390589896040518363ffffffff1660e01b815260040161167a929190613072565b60206040518083038186803b15801561169257600080fd5b505afa1580156116a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ca9190612681565b90506000808273ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561171557600080fd5b505afa158015611729573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174d91906128aa565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691508973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614156117ef5760006117b2838a611c6a565b9050600081116117cc576002896117c991906135a9565b90505b6117d98c8b838b89611cd4565b955080896117e79190613634565b965050611834565b60006117fb828a611c6a565b9050600081116118155760028961181291906135a9565b90505b6118228c8c838b89611cd4565b965080896118309190613634565b9550505b505050509550959350505050565b600061184f878387611c08565b61185a868386611c08565b60008060008473ffffffffffffffffffffffffffffffffffffffff1663e8e337008b8b8b8b600180307ff0000000000000000000000000000000000000000000000000000000000000006040518963ffffffff1660e01b81526004016118c79897969594939291906130d2565b606060405180830381600087803b1580156118e157600080fd5b505af11580156118f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119199190612922565b92509250925085156119bc57600083896119339190613634565b11156119705761196f33848a6119499190613634565b8c73ffffffffffffffffffffffffffffffffffffffff16611abb9092919063ffffffff16565b5b6000828861197e9190613634565b11156119bb576119ba3383896119949190613634565b8b73ffffffffffffffffffffffffffffffffffffffff16611abb9092919063ffffffff16565b5b5b8093505050509695505050505050565b600082905060008173ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401611a0e929190613072565b60206040518083038186803b158015611a2657600080fd5b505afa158015611a3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5e91906128f9565b1115611a6a5750611ab7565b611ab5827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8373ffffffffffffffffffffffffffffffffffffffff166120d19092919063ffffffff16565b505b5050565b611b3c8363a9059cbb60e01b8484604051602401611ada929190613150565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611b41565b505050565b6000611ba3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661222f9092919063ffffffff16565b9050600081511115611c035780806020019051810190611bc39190612881565b611c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf9906133b6565b60405180910390fd5b5b505050565b6000839050611c398360008373ffffffffffffffffffffffffffffffffffffffff166120d19092919063ffffffff16565b611c6483838373ffffffffffffffffffffffffffffffffffffffff166120d19092919063ffffffff16565b50505050565b60006107ca6107cd84611c7d91906135da565b611cb8623cda2986611c8f91906135da565b623cda2086611c9e91906135da565b611ca89190613553565b86611cb391906135da565b612247565b611cc29190613634565b611ccc91906135a9565b905092915050565b60008473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415611d12578390506120c8565b611d1d868486611c08565b60008273ffffffffffffffffffffffffffffffffffffffff1663e6a4390588886040518363ffffffff1660e01b8152600401611d5a929190613072565b60206040518083038186803b158015611d7257600080fd5b505afa158015611d86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611daa9190612681565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1390613396565b60405180910390fd5b6000600267ffffffffffffffff811115611e5f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611e8d5781602001602082028036833780820191505090505b5090508781600081518110611ecb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508681600181518110611f40577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff166338ed173987600184307ff0000000000000000000000000000000000000000000000000000000000000006040518663ffffffff1660e01b8152600401611fdc959493929190613431565b600060405180830381600087803b158015611ff657600080fd5b505af115801561200a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906120339190612817565b600182516120419190613634565b81518110612078577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519250600083116120c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bc906132f6565b60405180910390fd5b50505b95945050505050565b600081148061216a575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401612118929190613072565b60206040518083038186803b15801561213057600080fd5b505afa158015612144573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216891906128f9565b145b6121a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a0906133d6565b60405180910390fd5b61222a8363095ea7b360e01b84846040516024016121c8929190613150565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611b41565b505050565b606061223e84846000856122c1565b90509392505050565b600060038211156122ae578190506000600160028461226691906135a9565b6122709190613553565b90505b818110156122a857809150600281828561228d91906135a9565b6122979190613553565b6122a191906135a9565b9050612273565b506122bc565b600082146122bb57600190505b5b919050565b606082471015612306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fd90613276565b60405180910390fd5b61230f85610e0f565b61234e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234590613376565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516123779190613040565b60006040518083038185875af1925050503d80600081146123b4576040519150601f19603f3d011682016040523d82523d6000602084013e6123b9565b606091505b50915091506123c98282866123d5565b92505050949350505050565b606083156123e557829050612435565b6000835111156123f85782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242c9190613194565b60405180910390fd5b9392505050565b600061244f61244a846134bc565b61348b565b9050808382526020820190508285602086028201111561246e57600080fd5b60005b8581101561249e5781612484888261262e565b845260208401935060208301925050600181019050612471565b5050509392505050565b6000813590506124b781613806565b92915050565b6000815190506124cc81613806565b92915050565b60008083601f8401126124e457600080fd5b8235905067ffffffffffffffff8111156124fd57600080fd5b60208301915083602082028301111561251557600080fd5b9250929050565b60008083601f84011261252e57600080fd5b8235905067ffffffffffffffff81111561254757600080fd5b60208301915083602082028301111561255f57600080fd5b9250929050565b600082601f83011261257757600080fd5b815161258784826020860161243c565b91505092915050565b60008135905061259f8161381d565b92915050565b6000815190506125b48161381d565b92915050565b60008083601f8401126125cc57600080fd5b8235905067ffffffffffffffff8111156125e557600080fd5b6020830191508360018202830111156125fd57600080fd5b9250929050565b60008151905061261381613834565b92915050565b6000813590506126288161384b565b92915050565b60008151905061263d8161384b565b92915050565b60008151905061265281613862565b92915050565b60006020828403121561266a57600080fd5b6000612678848285016124a8565b91505092915050565b60006020828403121561269357600080fd5b60006126a1848285016124bd565b91505092915050565b60008060008060008060008060008060006101408c8e0312156126cc57600080fd5b60006126da8e828f016124a8565b9b505060206126eb8e828f01612619565b9a505060406126fc8e828f016124a8565b995050606061270d8e828f016124a8565b985050608061271e8e828f01612619565b97505060a061272f8e828f016124a8565b96505060c08c013567ffffffffffffffff81111561274c57600080fd5b6127588e828f016125ba565b955095505060e061276b8e828f01612590565b93505061010061277d8e828f016124a8565b92505061012061278f8e828f01612590565b9150509295989b509295989b9093969950565b600080600080604085870312156127b857600080fd5b600085013567ffffffffffffffff8111156127d257600080fd5b6127de878288016124d2565b9450945050602085013567ffffffffffffffff8111156127fd57600080fd5b6128098782880161251c565b925092505092959194509250565b60006020828403121561282957600080fd5b600082015167ffffffffffffffff81111561284357600080fd5b61284f84828501612566565b91505092915050565b60006020828403121561286a57600080fd5b600061287884828501612590565b91505092915050565b60006020828403121561289357600080fd5b60006128a1848285016125a5565b91505092915050565b6000806000606084860312156128bf57600080fd5b60006128cd86828701612604565b93505060206128de86828701612604565b92505060406128ef86828701612643565b9150509250925092565b60006020828403121561290b57600080fd5b60006129198482850161262e565b91505092915050565b60008060006060848603121561293757600080fd5b60006129458682870161262e565b93505060206129568682870161262e565b92505060406129678682870161262e565b9150509250925092565b600061297d8383612989565b60208301905092915050565b61299281613668565b82525050565b6129a181613668565b82525050565b60006129b2826134f8565b6129bc8185613526565b93506129c7836134e8565b8060005b838110156129f85781516129df8882612971565b97506129ea83613519565b9250506001810190506129cb565b5085935050505092915050565b612a0e8161367a565b82525050565b6000612a1f82613503565b612a298185613537565b9350612a398185602086016136ec565b80840191505092915050565b612a4e816136da565b82525050565b6000612a5f8261350e565b612a698185613542565b9350612a798185602086016136ec565b612a82816137f5565b840191505092915050565b6000612a9a601583613542565b91507f546172676574206e6f7420417574686f72697a656400000000000000000000006000830152602082019050919050565b6000612ada601883613542565b91507f446f206e6f742073656e6420455448206469726563746c7900000000000000006000830152602082019050919050565b6000612b1a602683613542565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612b80601483613542565b91507f496e76616c696420746f6b656e20616d6f756e740000000000000000000000006000830152602082019050919050565b6000612bc0601383613542565b91507f4574682073656e74207769746820746f6b656e000000000000000000000000006000830152602082019050919050565b6000612c00601283613542565b91507f54656d706f726172696c792050617573656400000000000000000000000000006000830152602082019050919050565b6000612c40602683613542565b91507f416464726573733a20696e73756666696369656e742062616c616e636520666f60008301527f722063616c6c00000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612ca6602383613542565b91507f496e76616c6964205f616d6f756e743a20496e70757420455448206d69736d6160008301527f74636800000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612d0c601483613542565b91507f496e76616c696420496e707574206c656e6774680000000000000000000000006000830152602082019050919050565b6000612d4c602083613542565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000612d8c601783613542565b91507f4572726f72205377617070696e6720546f6b656e7320320000000000000000006000830152602082019050919050565b6000612dcc602c83613542565b91507f4552523a2073686f756c6453656c6c456e7469726542616c616e63652069732060008301527f7472756520666f7220454f4100000000000000000000000000000000000000006020830152604082019050919050565b6000612e32601783613542565b91507f4572726f72205377617070696e6720546f6b656e7320310000000000000000006000830152602082019050919050565b6000612e72601f83613542565b91507f5377617070656420746f20496e76616c696420496e7465726d656469617465006000830152602082019050919050565b6000612eb2601d83613542565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b6000612ef2601183613542565b91507f4e6f205377617020417661696c61626c650000000000000000000000000000006000830152602082019050919050565b6000612f32602a83613542565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b6000612f98603683613542565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b6000612ffe601283613542565b91507f4572723a204869676820536c69707061676500000000000000000000000000006000830152602082019050919050565b61303a816136c0565b82525050565b600061304c8284612a14565b915081905092915050565b600060208201905061306c6000830184612998565b92915050565b60006040820190506130876000830185612998565b6130946020830184612998565b9392505050565b60006060820190506130b06000830186612998565b6130bd6020830185612998565b6130ca6040830184613031565b949350505050565b6000610100820190506130e8600083018b612998565b6130f5602083018a612998565b6131026040830189613031565b61310f6060830188613031565b61311c6080830187612a45565b61312960a0830186612a45565b61313660c0830185612998565b61314360e0830184613031565b9998505050505050505050565b60006040820190506131656000830185612998565b6131726020830184613031565b9392505050565b600060208201905061318e6000830184612a05565b92915050565b600060208201905081810360008301526131ae8184612a54565b905092915050565b600060208201905081810360008301526131cf81612a8d565b9050919050565b600060208201905081810360008301526131ef81612acd565b9050919050565b6000602082019050818103600083015261320f81612b0d565b9050919050565b6000602082019050818103600083015261322f81612b73565b9050919050565b6000602082019050818103600083015261324f81612bb3565b9050919050565b6000602082019050818103600083015261326f81612bf3565b9050919050565b6000602082019050818103600083015261328f81612c33565b9050919050565b600060208201905081810360008301526132af81612c99565b9050919050565b600060208201905081810360008301526132cf81612cff565b9050919050565b600060208201905081810360008301526132ef81612d3f565b9050919050565b6000602082019050818103600083015261330f81612d7f565b9050919050565b6000602082019050818103600083015261332f81612dbf565b9050919050565b6000602082019050818103600083015261334f81612e25565b9050919050565b6000602082019050818103600083015261336f81612e65565b9050919050565b6000602082019050818103600083015261338f81612ea5565b9050919050565b600060208201905081810360008301526133af81612ee5565b9050919050565b600060208201905081810360008301526133cf81612f25565b9050919050565b600060208201905081810360008301526133ef81612f8b565b9050919050565b6000602082019050818103600083015261340f81612ff1565b9050919050565b600060208201905061342b6000830184613031565b92915050565b600060a0820190506134466000830188613031565b6134536020830187612a45565b818103604083015261346581866129a7565b90506134746060830185612998565b6134816080830184613031565b9695505050505050565b6000604051905081810181811067ffffffffffffffff821117156134b2576134b16137c6565b5b8060405250919050565b600067ffffffffffffffff8211156134d7576134d66137c6565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061355e826136c0565b9150613569836136c0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561359e5761359d613768565b5b828201905092915050565b60006135b4826136c0565b91506135bf836136c0565b9250826135cf576135ce613797565b5b828204905092915050565b60006135e5826136c0565b91506135f0836136c0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561362957613628613768565b5b828202905092915050565b600061363f826136c0565b915061364a836136c0565b92508282101561365d5761365c613768565b5b828203905092915050565b6000613673826136a0565b9050919050565b60008115159050919050565b60006dffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b60006136e5826136c0565b9050919050565b60005b8381101561370a5780820151818401526020810190506136ef565b83811115613719576000848401525b50505050565b600061372a826136c0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561375d5761375c613768565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61380f81613668565b811461381a57600080fd5b50565b6138268161367a565b811461383157600080fd5b50565b61383d81613686565b811461384857600080fd5b50565b613854816136c0565b811461385f57600080fd5b50565b61386b816136ca565b811461387657600080fd5b5056fea26469706673582212202c1346dff28a0d738f027157c8131af15af9fae997d42d9f8020e3e99fc7b70964736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000098878b06940ae243284ca214f92bb71a2b032b8a0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000aa30ef758139ae4a7f798112902bf6d65612045f0000000000000000000000002d4e873f9ab279da9f1bb2c532d4f06f67755b77
-----Decoded View---------------
Arg [0] : targets (address[]): 0xAA30eF758139ae4a7f798112902Bf6d65612045f,0x2d4e873f9Ab279da9f1bb2c532d4F06f67755b77
Arg [1] : wnative (address): 0x98878B06940aE243284CA214f92Bb71a2b032B8A
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000098878b06940ae243284ca214f92bb71a2b032b8a
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [3] : 000000000000000000000000aa30ef758139ae4a7f798112902bf6d65612045f
Arg [4] : 0000000000000000000000002d4e873f9ab279da9f1bb2c532d4f06f67755b77
Deployed Bytecode Sourcemap
30101:12435:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30048:9;30034:23;;:10;:23;;;;30026:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;30101:12435;;;;;30307:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29544:86;;;;;;;;;;;;;:::i;:::-;;5622:103;;;;;;;;;;;;;:::i;:::-;;28365:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4971:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29638:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28437:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31563:917;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5880:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30307:31;;;;;;;;;;;;;:::o;29544:86::-;5202:12;:10;:12::i;:::-;5191:23;;:7;:5;:7::i;:::-;:23;;;5183:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29615:7:::1;;;;;;;;;;;29614:8;29604:7;;:18;;;;;;;;;;;;;;;;;;29544:86::o:0;5622:103::-;5202:12;:10;:12::i;:::-;5191:23;;:7;:5;:7::i;:::-;:23;;;5183:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5687:30:::1;5714:1;5687:18;:30::i;:::-;5622:103::o:0;28365:27::-;;;;;;;;;;;;;:::o;4971:87::-;5017:7;5044:6;;;;;;;;;;;5037:13;;4971:87;:::o;29638:342::-;5202:12;:10;:12::i;:::-;5191:23;;:7;:5;:7::i;:::-;:23;;;5183:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29803:10:::1;;:17;;29785:7;;:14;;:35;29777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29863:9;29858:115;29882:7;;:14;;29878:1;:18;29858:115;;;29948:10;;29959:1;29948:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29918:15;:27;29934:7;;29942:1;29934:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29918:27;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;29898:3;;;;;:::i;:::-;;;;29858:115;;;;29638:342:::0;;;;:::o;28437:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;31563:917::-;31958:22;28569:7;;;;;;;;;;;28565:102;;;28593:28;;;;;;;;;;:::i;:::-;;;;;;;;28565:102;31993:17:::1;32013:123;32039:25;32079:7;32101:24;32013:11;:123::i;:::-;31993:143;;32149:16;32168:226;32196:25;32236:12;32263:9;32287:11;32313:9;;32168:226;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32337:17;32369:14;32168:13;:226::i;:::-;32149:245;;32424:48;32438:8;32448:7;32457:14;32424:13;:48::i;:::-;32407:65;;28654:1;;31563:917:::0;;;;;;;;;;;;;:::o;5880:201::-;5202:12;:10;:12::i;:::-;5191:23;;:7;:5;:7::i;:::-;:23;;;5183:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5989:1:::1;5969:22;;:8;:22;;;;5961:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6045:28;6064:8;6045:18;:28::i;:::-;5880:201:::0;:::o;3691:98::-;3744:7;3771:10;3764:17;;3691:98;:::o;6241:191::-;6315:16;6334:6;;;;;;;;;;;6315:25;;6360:8;6351:6;;:17;;;;;;;;;;;;;;;;;;6415:8;6384:40;;6405:8;6384:40;;;;;;;;;;;;6241:191;;:::o;32488:764::-;32624:7;32665:1;32648:19;;:5;:19;;;32644:576;;32702:1;32692:7;:11;32684:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;32764:1;32751:9;:14;32743:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;32840:24;32836:292;;;32915:30;32934:10;32915:18;:30::i;:::-;32885:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;33069:5;33062:23;;;33086:10;33106:4;33062:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33052:60;;32836:292;33142:66;33173:10;33193:4;33200:7;33149:5;33142:30;;;;:66;;;;;;:::i;:::-;32644:576;33237:7;33230:14;;32488:764;;;;;:::o;34271:1607::-;34547:7;34567:23;34601:25;34638:24;34664;34692:52;34721:12;34692:14;:52::i;:::-;34637:107;;;;34804:16;34775:45;;:25;:45;;;;:107;;;;;34866:16;34837:45;;:25;:45;;;;34775:107;34757:541;;;34985:183;35014:25;35058:12;35089:7;35115:11;35145:8;34985:10;:183::i;:::-;34946:222;;;;;;;;34757:541;;;35221:25;35201:45;;35279:7;35261:25;;34757:541;35384:20;35406;35430:181;35462:17;35494:16;35525;35556:15;35586:14;35430:17;:181::i;:::-;35383:228;;;;35644:226;35674:16;35709;35744:12;35775;35806:16;35841:14;35644:11;:226::i;:::-;35624:246;;;;;;;;34271:1607;;;;;;;;;:::o;33260:718::-;33390:22;33425:28;33467:7;33456:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33425:58;;33496:44;33510:20;33532:7;33496:13;:44::i;:::-;33553:20;33583:7;33576:25;;;33610:4;33576:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33553:63;;33638:7;33627:27;;;33655:6;33627:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33759:12;33710:7;33703:25;;;33737:4;33703:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:68;;;;:::i;:::-;33673:98;;33808:12;33790:14;:30;;33782:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33856:56;33885:10;33897:14;33863:7;33856:28;;;;:56;;;;;:::i;:::-;33928:42;33934:10;33946:7;33955:14;33928:42;;;;;;;;:::i;:::-;;;;;;;;33260:718;;;;;;;:::o;7265:387::-;7325:4;7533:12;7600:7;7588:20;7580:28;;7643:1;7636:4;:8;7629:15;;;7265:387;;;:::o;15516:248::-;15660:96;15680:5;15710:27;;;15739:4;15745:2;15749:5;15687:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15660:19;:96::i;:::-;15516:248;;;;:::o;33986:277::-;34082:14;34098;34130:22;34170:12;34130:53;;34203:7;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34194:25;;34239:7;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34230:25;;33986:277;;;;:::o;37280:1860::-;37480:20;37502:25;37559:16;;;;;;;;;;;37544:31;;:11;:31;;;37540:262;;;37610:1;37600:7;:11;:35;;;;;37628:7;37615:9;:20;37600:35;37592:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;37696:16;;;;;;;;;;;37690:31;;;37730:7;37690:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37764:7;37773:16;;;;;;;;;;;37756:34;;;;;;37540:262;37814:19;37877:1;37848:31;;:17;:31;;;37844:270;;;37914:1;37904:7;:11;:35;;;;;37932:7;37919:9;:20;37904:35;37896:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;38008:7;37994:21;;37844:270;;;38048:54;38062:17;38081:11;38094:7;38048:13;:54::i;:::-;37844:270;38127:15;38144;38163:28;38178:12;38163:14;:28::i;:::-;38126:65;;;;38202:13;38225:7;38202:31;;38244:13;38267:7;38244:31;;38286:23;38312:6;:16;;;38337:4;38312:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38286:57;;38354:23;38380:6;:16;;;38405:4;38380:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38354:57;;38432:15;:28;38448:11;38432:28;;;;;;;;;;;;;;;;;;;;;;;;;38424:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;38498:12;38516:11;:16;;38540:11;38553:8;38516:46;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38497:65;;;38581:7;38573:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;38629:21;38700:15;38653:6;:16;;;38678:4;38653:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:62;;;;:::i;:::-;38629:86;;38726:21;38797:15;38750:6;:16;;;38775:4;38750:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:62;;;;:::i;:::-;38726:86;;38845:13;38829;:29;38825:235;;;38890:13;38875:28;;38938:7;38918:27;;38825:235;;;38993:13;38978:28;;39041:7;39021:27;;38825:235;39095:1;39080:12;:16;39072:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;37280:1860;;;;;;;;;;;;;;;;;;;:::o;39148:1614::-;39366:20;39388;39421:30;39505:14;39486:42;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39421:120;;39554:19;39605:12;:20;;;39626:16;39644;39605:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39554:118;;39684:12;39698;39716:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39683:51;;;;;;;;;39771:16;39749:38;;:18;:38;;;39745:1010;;;39804:20;39827:36;39849:4;39855:7;39827:21;:36::i;:::-;39804:59;;39952:1;39936:12;:17;39932:49;;39980:1;39970:7;:11;;;;:::i;:::-;39955:26;;39932:49;40011:194;40042:18;40079:16;40114:12;40145:14;40178:12;40011;:194::i;:::-;39996:209;;40245:12;40235:7;:22;;;;:::i;:::-;40220:37;;39745:1010;;;;40290:20;40313:36;40335:4;40341:7;40313:21;:36::i;:::-;40290:59;;40438:1;40422:12;:17;40418:49;;40466:1;40456:7;:11;;;;:::i;:::-;40441:26;;40418:49;40497:194;40528:18;40565:16;40600:12;40631:14;40664:12;40497;:194::i;:::-;40482:209;;40731:12;40721:7;:22;;;;:::i;:::-;40706:37;;39745:1010;;39148:1614;;;;;;;;;;;;:::o;35886:1386::-;36129:7;36149:61;36163:16;36181:14;36197:12;36149:13;:61::i;:::-;36221;36235:16;36253:14;36269:12;36221:13;:61::i;:::-;36296:15;36313;36330:10;36377:14;36344:71;;;36434:16;36469;36504:12;36535;36566:1;36586;36614:4;30232:66;36344:317;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36295:366;;;;;;36678:16;36674:569;;;36792:1;36782:7;36767:12;:22;;;;:::i;:::-;:26;36763:201;;;36814:134;36874:10;36922:7;36907:12;:22;;;;:::i;:::-;36821:16;36814:37;;;;:134;;;;;:::i;:::-;36763:201;37060:1;37050:7;37035:12;:22;;;;:::i;:::-;:26;37031:201;;;37082:134;37142:10;37190:7;37175:12;:22;;;;:::i;:::-;37089:16;37082:37;;;;:134;;;;;:::i;:::-;37031:201;36674:569;37262:2;37255:9;;;;;35886:1386;;;;;;;;:::o;28980:267::-;29055:13;29078:5;29055:29;;29142:1;29099:6;:16;;;29124:4;29131:7;29099:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;29095:145;;;29145:7;;;29095:145;29182:46;29201:7;29210:17;29182:6;:18;;;;:46;;;;;:::i;:::-;28980:267;;;;:::o;15297:211::-;15414:86;15434:5;15464:23;;;15489:2;15493:5;15441:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15414:19;:86::i;:::-;15297:211;;;:::o;17870:716::-;18294:23;18320:69;18348:4;18320:69;;;;;;;;;;;;;;;;;18328:5;18320:27;;;;:69;;;;;:::i;:::-;18294:95;;18424:1;18404:10;:17;:21;18400:179;;;18501:10;18490:30;;;;;;;;;;;;:::i;:::-;18482:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;18400:179;17870:716;;;:::o;29255:249::-;29380:13;29403:5;29380:29;;29420:30;29439:7;29448:1;29420:6;:18;;;;:30;;;;;:::i;:::-;29461:35;29480:7;29489:6;29461;:18;;;;:35;;;;;:::i;:::-;29255:249;;;;:::o;40770:304::-;40886:7;41062:4;41053;41041:9;:16;;;;:::i;:::-;40932:105;41013:7;41001:9;:19;;;;:::i;:::-;40989:7;40980:6;:16;;;;:::i;:::-;40979:42;;;;:::i;:::-;40966:9;:56;;;;:::i;:::-;40932:15;:105::i;:::-;:126;;;;:::i;:::-;40931:135;;;;:::i;:::-;40911:155;;40770:304;;;;:::o;41403:1130::-;41641:19;41706:23;41677:52;;:25;:52;;;41673:104;;;41753:12;41746:19;;;;41673:104;41789:70;41803:25;41830:14;41846:12;41789:13;:70::i;:::-;41872:12;41887;:20;;;41922:25;41962:23;41887:109;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41872:124;;42031:1;42015:18;;:4;:18;;;;42007:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;42066:21;42104:1;42090:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42066:40;;42127:25;42117:4;42122:1;42117:7;;;;;;;;;;;;;;;;;;;;;:35;;;;;;;;;;;42173:23;42163:4;42168:1;42163:7;;;;;;;;;;;;;;;;;;;;;:33;;;;;;;;;;;42242:14;42223:73;;;42315:12;42346:1;42366:4;42397;30232:66;42223:221;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42459:1;42445:4;:11;:15;;;;:::i;:::-;42223:238;;;;;;;;;;;;;;;;;;;;;;42209:252;;42496:1;42482:11;:15;42474:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;41403:1130;;;;;;;;;;:::o;16033:616::-;16406:1;16397:5;:10;16396:62;;;;16456:1;16413:5;:15;;;16437:4;16444:7;16413:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;16396:62;16374:166;;;;;;;;;;;;:::i;:::-;;;;;;;;;16551:90;16571:5;16601:22;;;16625:7;16634:5;16578:62;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16551:19;:90::i;:::-;16033:616;;;:::o;10071:229::-;10208:12;10240:52;10262:6;10270:4;10276:1;10279:12;10240:21;:52::i;:::-;10233:59;;10071:229;;;;;:::o;27558:326::-;27603:6;27630:1;27626;:5;27622:232;;;27652:1;27648:5;;27668:6;27685:1;27681;27677;:5;;;;:::i;:::-;:9;;;;:::i;:::-;27668:18;;27701:92;27712:1;27708;:5;27701:92;;;27738:1;27734:5;;27776:1;27771;27767;27763;:5;;;;:::i;:::-;:9;;;;:::i;:::-;27762:15;;;;:::i;:::-;27758:19;;27701:92;;;27622:232;;;;27819:1;27814;:6;27810:44;;27841:1;27837:5;;27810:44;27622:232;27558:326;;;:::o;11191:510::-;11361:12;11419:5;11394:21;:30;;11386:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;11486:18;11497:6;11486:10;:18::i;:::-;11478:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;11552:12;11566:23;11593:6;:11;;11612:5;11619:4;11593:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11551:73;;;;11642:51;11659:7;11668:10;11680:12;11642:16;:51::i;:::-;11635:58;;;;11191:510;;;;;;:::o;13877:712::-;14027:12;14056:7;14052:530;;;14087:10;14080:17;;;;14052:530;14221:1;14201:10;:17;:21;14197:374;;;14399:10;14393:17;14460:15;14447:10;14443:2;14439:19;14432:44;14347:148;14542:12;14535:20;;;;;;;;;;;:::i;:::-;;;;;;;;13877:712;;;;;;:::o;24:644:1:-;;156:80;171:64;228:6;171:64;:::i;:::-;156:80;:::i;:::-;147:89;;256:5;284:6;277:5;270:21;310:4;303:5;299:16;292:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;402:1;399;392:12;350:2;430:1;415:247;440:6;437:1;434:13;415:247;;;507:3;535:48;579:3;567:10;535:48;:::i;:::-;530:3;523:61;613:4;608:3;604:14;597:21;;647:4;642:3;638:14;631:21;;475:187;462:1;459;455:9;450:14;;415:247;;;419:14;137:531;;;;;;;:::o;674:139::-;;758:6;745:20;736:29;;774:33;801:5;774:33;:::i;:::-;726:87;;;;:::o;819:143::-;;907:6;901:13;892:22;;923:33;950:5;923:33;:::i;:::-;882:80;;;;:::o;985:367::-;;;1118:3;1111:4;1103:6;1099:17;1095:27;1085:2;;1136:1;1133;1126:12;1085:2;1172:6;1159:20;1149:30;;1202:18;1194:6;1191:30;1188:2;;;1234:1;1231;1224:12;1188:2;1271:4;1263:6;1259:17;1247:29;;1325:3;1317:4;1309:6;1305:17;1295:8;1291:32;1288:41;1285:2;;;1342:1;1339;1332:12;1285:2;1075:277;;;;;:::o;1372:364::-;;;1502:3;1495:4;1487:6;1483:17;1479:27;1469:2;;1520:1;1517;1510:12;1469:2;1556:6;1543:20;1533:30;;1586:18;1578:6;1575:30;1572:2;;;1618:1;1615;1608:12;1572:2;1655:4;1647:6;1643:17;1631:29;;1709:3;1701:4;1693:6;1689:17;1679:8;1675:32;1672:41;1669:2;;;1726:1;1723;1716:12;1669:2;1459:277;;;;;:::o;1759:318::-;;1890:3;1883:4;1875:6;1871:17;1867:27;1857:2;;1908:1;1905;1898:12;1857:2;1941:6;1935:13;1966:105;2067:3;2059:6;2052:4;2044:6;2040:17;1966:105;:::i;:::-;1957:114;;1847:230;;;;;:::o;2083:133::-;;2164:6;2151:20;2142:29;;2180:30;2204:5;2180:30;:::i;:::-;2132:84;;;;:::o;2222:137::-;;2307:6;2301:13;2292:22;;2323:30;2347:5;2323:30;:::i;:::-;2282:77;;;;:::o;2378:351::-;;;2495:3;2488:4;2480:6;2476:17;2472:27;2462:2;;2513:1;2510;2503:12;2462:2;2549:6;2536:20;2526:30;;2579:18;2571:6;2568:30;2565:2;;;2611:1;2608;2601:12;2565:2;2648:4;2640:6;2636:17;2624:29;;2702:3;2694:4;2686:6;2682:17;2672:8;2668:32;2665:41;2662:2;;;2719:1;2716;2709:12;2662:2;2452:277;;;;;:::o;2735:143::-;;2823:6;2817:13;2808:22;;2839:33;2866:5;2839:33;:::i;:::-;2798:80;;;;:::o;2884:139::-;;2968:6;2955:20;2946:29;;2984:33;3011:5;2984:33;:::i;:::-;2936:87;;;;:::o;3029:143::-;;3117:6;3111:13;3102:22;;3133:33;3160:5;3133:33;:::i;:::-;3092:80;;;;:::o;3178:141::-;;3265:6;3259:13;3250:22;;3281:32;3307:5;3281:32;:::i;:::-;3240:79;;;;:::o;3325:262::-;;3433:2;3421:9;3412:7;3408:23;3404:32;3401:2;;;3449:1;3446;3439:12;3401:2;3492:1;3517:53;3562:7;3553:6;3542:9;3538:22;3517:53;:::i;:::-;3507:63;;3463:117;3391:196;;;;:::o;3593:284::-;;3712:2;3700:9;3691:7;3687:23;3683:32;3680:2;;;3728:1;3725;3718:12;3680:2;3771:1;3796:64;3852:7;3843:6;3832:9;3828:22;3796:64;:::i;:::-;3786:74;;3742:128;3670:207;;;;:::o;3883:1695::-;;;;;;;;;;;;4158:3;4146:9;4137:7;4133:23;4129:33;4126:2;;;4175:1;4172;4165:12;4126:2;4218:1;4243:53;4288:7;4279:6;4268:9;4264:22;4243:53;:::i;:::-;4233:63;;4189:117;4345:2;4371:53;4416:7;4407:6;4396:9;4392:22;4371:53;:::i;:::-;4361:63;;4316:118;4473:2;4499:53;4544:7;4535:6;4524:9;4520:22;4499:53;:::i;:::-;4489:63;;4444:118;4601:2;4627:53;4672:7;4663:6;4652:9;4648:22;4627:53;:::i;:::-;4617:63;;4572:118;4729:3;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4700:119;4858:3;4885:53;4930:7;4921:6;4910:9;4906:22;4885:53;:::i;:::-;4875:63;;4829:119;5015:3;5004:9;5000:19;4987:33;5047:18;5039:6;5036:30;5033:2;;;5079:1;5076;5069:12;5033:2;5115:64;5171:7;5162:6;5151:9;5147:22;5115:64;:::i;:::-;5097:82;;;;4958:231;5228:3;5255:50;5297:7;5288:6;5277:9;5273:22;5255:50;:::i;:::-;5245:60;;5199:116;5354:3;5381:53;5426:7;5417:6;5406:9;5402:22;5381:53;:::i;:::-;5371:63;;5325:119;5483:3;5511:50;5553:7;5544:6;5533:9;5529:22;5511:50;:::i;:::-;5500:61;;5454:117;4116:1462;;;;;;;;;;;;;;:::o;5584:727::-;;;;;5776:2;5764:9;5755:7;5751:23;5747:32;5744:2;;;5792:1;5789;5782:12;5744:2;5863:1;5852:9;5848:17;5835:31;5893:18;5885:6;5882:30;5879:2;;;5925:1;5922;5915:12;5879:2;5961:80;6033:7;6024:6;6013:9;6009:22;5961:80;:::i;:::-;5943:98;;;;5806:245;6118:2;6107:9;6103:18;6090:32;6149:18;6141:6;6138:30;6135:2;;;6181:1;6178;6171:12;6135:2;6217:77;6286:7;6277:6;6266:9;6262:22;6217:77;:::i;:::-;6199:95;;;;6061:243;5734:577;;;;;;;:::o;6317:420::-;;6461:2;6449:9;6440:7;6436:23;6432:32;6429:2;;;6477:1;6474;6467:12;6429:2;6541:1;6530:9;6526:17;6520:24;6571:18;6563:6;6560:30;6557:2;;;6603:1;6600;6593:12;6557:2;6631:89;6712:7;6703:6;6692:9;6688:22;6631:89;:::i;:::-;6621:99;;6491:239;6419:318;;;;:::o;6743:256::-;;6848:2;6836:9;6827:7;6823:23;6819:32;6816:2;;;6864:1;6861;6854:12;6816:2;6907:1;6932:50;6974:7;6965:6;6954:9;6950:22;6932:50;:::i;:::-;6922:60;;6878:114;6806:193;;;;:::o;7005:278::-;;7121:2;7109:9;7100:7;7096:23;7092:32;7089:2;;;7137:1;7134;7127:12;7089:2;7180:1;7205:61;7258:7;7249:6;7238:9;7234:22;7205:61;:::i;:::-;7195:71;;7151:125;7079:204;;;;:::o;7289:594::-;;;;7441:2;7429:9;7420:7;7416:23;7412:32;7409:2;;;7457:1;7454;7447:12;7409:2;7500:1;7525:64;7581:7;7572:6;7561:9;7557:22;7525:64;:::i;:::-;7515:74;;7471:128;7638:2;7664:64;7720:7;7711:6;7700:9;7696:22;7664:64;:::i;:::-;7654:74;;7609:129;7777:2;7803:63;7858:7;7849:6;7838:9;7834:22;7803:63;:::i;:::-;7793:73;;7748:128;7399:484;;;;;:::o;7889:284::-;;8008:2;7996:9;7987:7;7983:23;7979:32;7976:2;;;8024:1;8021;8014:12;7976:2;8067:1;8092:64;8148:7;8139:6;8128:9;8124:22;8092:64;:::i;:::-;8082:74;;8038:128;7966:207;;;;:::o;8179:596::-;;;;8332:2;8320:9;8311:7;8307:23;8303:32;8300:2;;;8348:1;8345;8338:12;8300:2;8391:1;8416:64;8472:7;8463:6;8452:9;8448:22;8416:64;:::i;:::-;8406:74;;8362:128;8529:2;8555:64;8611:7;8602:6;8591:9;8587:22;8555:64;:::i;:::-;8545:74;;8500:129;8668:2;8694:64;8750:7;8741:6;8730:9;8726:22;8694:64;:::i;:::-;8684:74;;8639:129;8290:485;;;;;:::o;8781:179::-;;8871:46;8913:3;8905:6;8871:46;:::i;:::-;8949:4;8944:3;8940:14;8926:28;;8861:99;;;;:::o;8966:108::-;9043:24;9061:5;9043:24;:::i;:::-;9038:3;9031:37;9021:53;;:::o;9080:118::-;9167:24;9185:5;9167:24;:::i;:::-;9162:3;9155:37;9145:53;;:::o;9234:732::-;;9382:54;9430:5;9382:54;:::i;:::-;9452:86;9531:6;9526:3;9452:86;:::i;:::-;9445:93;;9562:56;9612:5;9562:56;:::i;:::-;9641:7;9672:1;9657:284;9682:6;9679:1;9676:13;9657:284;;;9758:6;9752:13;9785:63;9844:3;9829:13;9785:63;:::i;:::-;9778:70;;9871:60;9924:6;9871:60;:::i;:::-;9861:70;;9717:224;9704:1;9701;9697:9;9692:14;;9657:284;;;9661:14;9957:3;9950:10;;9358:608;;;;;;;:::o;9972:109::-;10053:21;10068:5;10053:21;:::i;:::-;10048:3;10041:34;10031:50;;:::o;10087:373::-;;10219:38;10251:5;10219:38;:::i;:::-;10273:88;10354:6;10349:3;10273:88;:::i;:::-;10266:95;;10370:52;10415:6;10410:3;10403:4;10396:5;10392:16;10370:52;:::i;:::-;10447:6;10442:3;10438:16;10431:23;;10195:265;;;;;:::o;10466:147::-;10561:45;10600:5;10561:45;:::i;:::-;10556:3;10549:58;10539:74;;:::o;10619:364::-;;10735:39;10768:5;10735:39;:::i;:::-;10790:71;10854:6;10849:3;10790:71;:::i;:::-;10783:78;;10870:52;10915:6;10910:3;10903:4;10896:5;10892:16;10870:52;:::i;:::-;10947:29;10969:6;10947:29;:::i;:::-;10942:3;10938:39;10931:46;;10711:272;;;;;:::o;10989:319::-;;11152:67;11216:2;11211:3;11152:67;:::i;:::-;11145:74;;11249:23;11245:1;11240:3;11236:11;11229:44;11299:2;11294:3;11290:12;11283:19;;11135:173;;;:::o;11314:322::-;;11477:67;11541:2;11536:3;11477:67;:::i;:::-;11470:74;;11574:26;11570:1;11565:3;11561:11;11554:47;11627:2;11622:3;11618:12;11611:19;;11460:176;;;:::o;11642:370::-;;11805:67;11869:2;11864:3;11805:67;:::i;:::-;11798:74;;11902:34;11898:1;11893:3;11889:11;11882:55;11968:8;11963:2;11958:3;11954:12;11947:30;12003:2;11998:3;11994:12;11987:19;;11788:224;;;:::o;12018:318::-;;12181:67;12245:2;12240:3;12181:67;:::i;:::-;12174:74;;12278:22;12274:1;12269:3;12265:11;12258:43;12327:2;12322:3;12318:12;12311:19;;12164:172;;;:::o;12342:317::-;;12505:67;12569:2;12564:3;12505:67;:::i;:::-;12498:74;;12602:21;12598:1;12593:3;12589:11;12582:42;12650:2;12645:3;12641:12;12634:19;;12488:171;;;:::o;12665:316::-;;12828:67;12892:2;12887:3;12828:67;:::i;:::-;12821:74;;12925:20;12921:1;12916:3;12912:11;12905:41;12972:2;12967:3;12963:12;12956:19;;12811:170;;;:::o;12987:370::-;;13150:67;13214:2;13209:3;13150:67;:::i;:::-;13143:74;;13247:34;13243:1;13238:3;13234:11;13227:55;13313:8;13308:2;13303:3;13299:12;13292:30;13348:2;13343:3;13339:12;13332:19;;13133:224;;;:::o;13363:367::-;;13526:67;13590:2;13585:3;13526:67;:::i;:::-;13519:74;;13623:34;13619:1;13614:3;13610:11;13603:55;13689:5;13684:2;13679:3;13675:12;13668:27;13721:2;13716:3;13712:12;13705:19;;13509:221;;;:::o;13736:318::-;;13899:67;13963:2;13958:3;13899:67;:::i;:::-;13892:74;;13996:22;13992:1;13987:3;13983:11;13976:43;14045:2;14040:3;14036:12;14029:19;;13882:172;;;:::o;14060:330::-;;14223:67;14287:2;14282:3;14223:67;:::i;:::-;14216:74;;14320:34;14316:1;14311:3;14307:11;14300:55;14381:2;14376:3;14372:12;14365:19;;14206:184;;;:::o;14396:321::-;;14559:67;14623:2;14618:3;14559:67;:::i;:::-;14552:74;;14656:25;14652:1;14647:3;14643:11;14636:46;14708:2;14703:3;14699:12;14692:19;;14542:175;;;:::o;14723:376::-;;14886:67;14950:2;14945:3;14886:67;:::i;:::-;14879:74;;14983:34;14979:1;14974:3;14970:11;14963:55;15049:14;15044:2;15039:3;15035:12;15028:36;15090:2;15085:3;15081:12;15074:19;;14869:230;;;:::o;15105:321::-;;15268:67;15332:2;15327:3;15268:67;:::i;:::-;15261:74;;15365:25;15361:1;15356:3;15352:11;15345:46;15417:2;15412:3;15408:12;15401:19;;15251:175;;;:::o;15432:329::-;;15595:67;15659:2;15654:3;15595:67;:::i;:::-;15588:74;;15692:33;15688:1;15683:3;15679:11;15672:54;15752:2;15747:3;15743:12;15736:19;;15578:183;;;:::o;15767:327::-;;15930:67;15994:2;15989:3;15930:67;:::i;:::-;15923:74;;16027:31;16023:1;16018:3;16014:11;16007:52;16085:2;16080:3;16076:12;16069:19;;15913:181;;;:::o;16100:315::-;;16263:67;16327:2;16322:3;16263:67;:::i;:::-;16256:74;;16360:19;16356:1;16351:3;16347:11;16340:40;16406:2;16401:3;16397:12;16390:19;;16246:169;;;:::o;16421:374::-;;16584:67;16648:2;16643:3;16584:67;:::i;:::-;16577:74;;16681:34;16677:1;16672:3;16668:11;16661:55;16747:12;16742:2;16737:3;16733:12;16726:34;16786:2;16781:3;16777:12;16770:19;;16567:228;;;:::o;16801:386::-;;16964:67;17028:2;17023:3;16964:67;:::i;:::-;16957:74;;17061:34;17057:1;17052:3;17048:11;17041:55;17127:24;17122:2;17117:3;17113:12;17106:46;17178:2;17173:3;17169:12;17162:19;;16947:240;;;:::o;17193:316::-;;17356:67;17420:2;17415:3;17356:67;:::i;:::-;17349:74;;17453:20;17449:1;17444:3;17440:11;17433:41;17500:2;17495:3;17491:12;17484:19;;17339:170;;;:::o;17515:118::-;17602:24;17620:5;17602:24;:::i;:::-;17597:3;17590:37;17580:53;;:::o;17639:271::-;;17791:93;17880:3;17871:6;17791:93;:::i;:::-;17784:100;;17901:3;17894:10;;17773:137;;;;:::o;17916:222::-;;18047:2;18036:9;18032:18;18024:26;;18060:71;18128:1;18117:9;18113:17;18104:6;18060:71;:::i;:::-;18014:124;;;;:::o;18144:332::-;;18303:2;18292:9;18288:18;18280:26;;18316:71;18384:1;18373:9;18369:17;18360:6;18316:71;:::i;:::-;18397:72;18465:2;18454:9;18450:18;18441:6;18397:72;:::i;:::-;18270:206;;;;;:::o;18482:442::-;;18669:2;18658:9;18654:18;18646:26;;18682:71;18750:1;18739:9;18735:17;18726:6;18682:71;:::i;:::-;18763:72;18831:2;18820:9;18816:18;18807:6;18763:72;:::i;:::-;18845;18913:2;18902:9;18898:18;18889:6;18845:72;:::i;:::-;18636:288;;;;;;:::o;18930:1029::-;;19273:3;19262:9;19258:19;19250:27;;19287:71;19355:1;19344:9;19340:17;19331:6;19287:71;:::i;:::-;19368:72;19436:2;19425:9;19421:18;19412:6;19368:72;:::i;:::-;19450;19518:2;19507:9;19503:18;19494:6;19450:72;:::i;:::-;19532;19600:2;19589:9;19585:18;19576:6;19532:72;:::i;:::-;19614:81;19690:3;19679:9;19675:19;19666:6;19614:81;:::i;:::-;19705;19781:3;19770:9;19766:19;19757:6;19705:81;:::i;:::-;19796:73;19864:3;19853:9;19849:19;19840:6;19796:73;:::i;:::-;19879;19947:3;19936:9;19932:19;19923:6;19879:73;:::i;:::-;19240:719;;;;;;;;;;;:::o;19965:332::-;;20124:2;20113:9;20109:18;20101:26;;20137:71;20205:1;20194:9;20190:17;20181:6;20137:71;:::i;:::-;20218:72;20286:2;20275:9;20271:18;20262:6;20218:72;:::i;:::-;20091:206;;;;;:::o;20303:210::-;;20428:2;20417:9;20413:18;20405:26;;20441:65;20503:1;20492:9;20488:17;20479:6;20441:65;:::i;:::-;20395:118;;;;:::o;20519:313::-;;20670:2;20659:9;20655:18;20647:26;;20719:9;20713:4;20709:20;20705:1;20694:9;20690:17;20683:47;20747:78;20820:4;20811:6;20747:78;:::i;:::-;20739:86;;20637:195;;;;:::o;20838:419::-;;21042:2;21031:9;21027:18;21019:26;;21091:9;21085:4;21081:20;21077:1;21066:9;21062:17;21055:47;21119:131;21245:4;21119:131;:::i;:::-;21111:139;;21009:248;;;:::o;21263:419::-;;21467:2;21456:9;21452:18;21444:26;;21516:9;21510:4;21506:20;21502:1;21491:9;21487:17;21480:47;21544:131;21670:4;21544:131;:::i;:::-;21536:139;;21434:248;;;:::o;21688:419::-;;21892:2;21881:9;21877:18;21869:26;;21941:9;21935:4;21931:20;21927:1;21916:9;21912:17;21905:47;21969:131;22095:4;21969:131;:::i;:::-;21961:139;;21859:248;;;:::o;22113:419::-;;22317:2;22306:9;22302:18;22294:26;;22366:9;22360:4;22356:20;22352:1;22341:9;22337:17;22330:47;22394:131;22520:4;22394:131;:::i;:::-;22386:139;;22284:248;;;:::o;22538:419::-;;22742:2;22731:9;22727:18;22719:26;;22791:9;22785:4;22781:20;22777:1;22766:9;22762:17;22755:47;22819:131;22945:4;22819:131;:::i;:::-;22811:139;;22709:248;;;:::o;22963:419::-;;23167:2;23156:9;23152:18;23144:26;;23216:9;23210:4;23206:20;23202:1;23191:9;23187:17;23180:47;23244:131;23370:4;23244:131;:::i;:::-;23236:139;;23134:248;;;:::o;23388:419::-;;23592:2;23581:9;23577:18;23569:26;;23641:9;23635:4;23631:20;23627:1;23616:9;23612:17;23605:47;23669:131;23795:4;23669:131;:::i;:::-;23661:139;;23559:248;;;:::o;23813:419::-;;24017:2;24006:9;24002:18;23994:26;;24066:9;24060:4;24056:20;24052:1;24041:9;24037:17;24030:47;24094:131;24220:4;24094:131;:::i;:::-;24086:139;;23984:248;;;:::o;24238:419::-;;24442:2;24431:9;24427:18;24419:26;;24491:9;24485:4;24481:20;24477:1;24466:9;24462:17;24455:47;24519:131;24645:4;24519:131;:::i;:::-;24511:139;;24409:248;;;:::o;24663:419::-;;24867:2;24856:9;24852:18;24844:26;;24916:9;24910:4;24906:20;24902:1;24891:9;24887:17;24880:47;24944:131;25070:4;24944:131;:::i;:::-;24936:139;;24834:248;;;:::o;25088:419::-;;25292:2;25281:9;25277:18;25269:26;;25341:9;25335:4;25331:20;25327:1;25316:9;25312:17;25305:47;25369:131;25495:4;25369:131;:::i;:::-;25361:139;;25259:248;;;:::o;25513:419::-;;25717:2;25706:9;25702:18;25694:26;;25766:9;25760:4;25756:20;25752:1;25741:9;25737:17;25730:47;25794:131;25920:4;25794:131;:::i;:::-;25786:139;;25684:248;;;:::o;25938:419::-;;26142:2;26131:9;26127:18;26119:26;;26191:9;26185:4;26181:20;26177:1;26166:9;26162:17;26155:47;26219:131;26345:4;26219:131;:::i;:::-;26211:139;;26109:248;;;:::o;26363:419::-;;26567:2;26556:9;26552:18;26544:26;;26616:9;26610:4;26606:20;26602:1;26591:9;26587:17;26580:47;26644:131;26770:4;26644:131;:::i;:::-;26636:139;;26534:248;;;:::o;26788:419::-;;26992:2;26981:9;26977:18;26969:26;;27041:9;27035:4;27031:20;27027:1;27016:9;27012:17;27005:47;27069:131;27195:4;27069:131;:::i;:::-;27061:139;;26959:248;;;:::o;27213:419::-;;27417:2;27406:9;27402:18;27394:26;;27466:9;27460:4;27456:20;27452:1;27441:9;27437:17;27430:47;27494:131;27620:4;27494:131;:::i;:::-;27486:139;;27384:248;;;:::o;27638:419::-;;27842:2;27831:9;27827:18;27819:26;;27891:9;27885:4;27881:20;27877:1;27866:9;27862:17;27855:47;27919:131;28045:4;27919:131;:::i;:::-;27911:139;;27809:248;;;:::o;28063:419::-;;28267:2;28256:9;28252:18;28244:26;;28316:9;28310:4;28306:20;28302:1;28291:9;28287:17;28280:47;28344:131;28470:4;28344:131;:::i;:::-;28336:139;;28234:248;;;:::o;28488:419::-;;28692:2;28681:9;28677:18;28669:26;;28741:9;28735:4;28731:20;28727:1;28716:9;28712:17;28705:47;28769:131;28895:4;28769:131;:::i;:::-;28761:139;;28659:248;;;:::o;28913:222::-;;29044:2;29033:9;29029:18;29021:26;;29057:71;29125:1;29114:9;29110:17;29101:6;29057:71;:::i;:::-;29011:124;;;;:::o;29141:831::-;;29442:3;29431:9;29427:19;29419:27;;29456:71;29524:1;29513:9;29509:17;29500:6;29456:71;:::i;:::-;29537:80;29613:2;29602:9;29598:18;29589:6;29537:80;:::i;:::-;29664:9;29658:4;29654:20;29649:2;29638:9;29634:18;29627:48;29692:108;29795:4;29786:6;29692:108;:::i;:::-;29684:116;;29810:72;29878:2;29867:9;29863:18;29854:6;29810:72;:::i;:::-;29892:73;29960:3;29949:9;29945:19;29936:6;29892:73;:::i;:::-;29409:563;;;;;;;;:::o;29978:283::-;;30044:2;30038:9;30028:19;;30086:4;30078:6;30074:17;30193:6;30181:10;30178:22;30157:18;30145:10;30142:34;30139:62;30136:2;;;30204:18;;:::i;:::-;30136:2;30244:10;30240:2;30233:22;30018:243;;;;:::o;30267:311::-;;30434:18;30426:6;30423:30;30420:2;;;30456:18;;:::i;:::-;30420:2;30506:4;30498:6;30494:17;30486:25;;30566:4;30560;30556:15;30548:23;;30349:229;;;:::o;30584:132::-;;30674:3;30666:11;;30704:4;30699:3;30695:14;30687:22;;30656:60;;;:::o;30722:114::-;;30823:5;30817:12;30807:22;;30796:40;;;:::o;30842:98::-;;30927:5;30921:12;30911:22;;30900:40;;;:::o;30946:99::-;;31032:5;31026:12;31016:22;;31005:40;;;:::o;31051:113::-;;31153:4;31148:3;31144:14;31136:22;;31126:38;;;:::o;31170:184::-;;31303:6;31298:3;31291:19;31343:4;31338:3;31334:14;31319:29;;31281:73;;;;:::o;31360:147::-;;31498:3;31483:18;;31473:34;;;;:::o;31513:169::-;;31631:6;31626:3;31619:19;31671:4;31666:3;31662:14;31647:29;;31609:73;;;;:::o;31688:305::-;;31747:20;31765:1;31747:20;:::i;:::-;31742:25;;31781:20;31799:1;31781:20;:::i;:::-;31776:25;;31935:1;31867:66;31863:74;31860:1;31857:81;31854:2;;;31941:18;;:::i;:::-;31854:2;31985:1;31982;31978:9;31971:16;;31732:261;;;;:::o;31999:185::-;;32056:20;32074:1;32056:20;:::i;:::-;32051:25;;32090:20;32108:1;32090:20;:::i;:::-;32085:25;;32129:1;32119:2;;32134:18;;:::i;:::-;32119:2;32176:1;32173;32169:9;32164:14;;32041:143;;;;:::o;32190:348::-;;32253:20;32271:1;32253:20;:::i;:::-;32248:25;;32287:20;32305:1;32287:20;:::i;:::-;32282:25;;32475:1;32407:66;32403:74;32400:1;32397:81;32392:1;32385:9;32378:17;32374:105;32371:2;;;32482:18;;:::i;:::-;32371:2;32530:1;32527;32523:9;32512:20;;32238:300;;;;:::o;32544:191::-;;32604:20;32622:1;32604:20;:::i;:::-;32599:25;;32638:20;32656:1;32638:20;:::i;:::-;32633:25;;32677:1;32674;32671:8;32668:2;;;32682:18;;:::i;:::-;32668:2;32727:1;32724;32720:9;32712:17;;32589:146;;;;:::o;32741:96::-;;32807:24;32825:5;32807:24;:::i;:::-;32796:35;;32786:51;;;:::o;32843:90::-;;32920:5;32913:13;32906:21;32895:32;;32885:48;;;:::o;32939:114::-;;33016:30;33009:5;33005:42;32994:53;;32984:69;;;:::o;33059:126::-;;33136:42;33129:5;33125:54;33114:65;;33104:81;;;:::o;33191:77::-;;33257:5;33246:16;;33236:32;;;:::o;33274:93::-;;33350:10;33343:5;33339:22;33328:33;;33318:49;;;:::o;33373:121::-;;33464:24;33482:5;33464:24;:::i;:::-;33451:37;;33441:53;;;:::o;33500:307::-;33568:1;33578:113;33592:6;33589:1;33586:13;33578:113;;;33677:1;33672:3;33668:11;33662:18;33658:1;33653:3;33649:11;33642:39;33614:2;33611:1;33607:10;33602:15;;33578:113;;;33709:6;33706:1;33703:13;33700:2;;;33789:1;33780:6;33775:3;33771:16;33764:27;33700:2;33549:258;;;;:::o;33813:233::-;;33875:24;33893:5;33875:24;:::i;:::-;33866:33;;33921:66;33914:5;33911:77;33908:2;;;33991:18;;:::i;:::-;33908:2;34038:1;34031:5;34027:13;34020:20;;33856:190;;;:::o;34052:180::-;34100:77;34097:1;34090:88;34197:4;34194:1;34187:15;34221:4;34218:1;34211:15;34238:180;34286:77;34283:1;34276:88;34383:4;34380:1;34373:15;34407:4;34404:1;34397:15;34424:180;34472:77;34469:1;34462:88;34569:4;34566:1;34559:15;34593:4;34590:1;34583:15;34610:102;;34702:2;34698:7;34693:2;34686:5;34682:14;34678:28;34668:38;;34658:54;;;:::o;34718:122::-;34791:24;34809:5;34791:24;:::i;:::-;34784:5;34781:35;34771:2;;34830:1;34827;34820:12;34771:2;34761:79;:::o;34846:116::-;34916:21;34931:5;34916:21;:::i;:::-;34909:5;34906:32;34896:2;;34952:1;34949;34942:12;34896:2;34886:76;:::o;34968:122::-;35041:24;35059:5;35041:24;:::i;:::-;35034:5;35031:35;35021:2;;35080:1;35077;35070:12;35021:2;35011:79;:::o;35096:122::-;35169:24;35187:5;35169:24;:::i;:::-;35162:5;35159:35;35149:2;;35208:1;35205;35198:12;35149:2;35139:79;:::o;35224:120::-;35296:23;35313:5;35296:23;:::i;:::-;35289:5;35286:34;35276:2;;35334:1;35331;35324:12;35276:2;35266:78;:::o
Swarm Source
ipfs://2c1346dff28a0d738f027157c8131af15af9fae997d42d9f8020e3e99fc7b709
Loading...
Loading
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.