More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 41,131 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Beef Out And Swa... | 11350571 | 385 days ago | IN | 0 CRO | 1.92327305 | ||||
Beef Out And Swa... | 11342145 | 386 days ago | IN | 0 CRO | 2.05844607 | ||||
Beef Out And Swa... | 11342132 | 386 days ago | IN | 0 CRO | 1.89368004 | ||||
Beef Out And Swa... | 11339338 | 386 days ago | IN | 0 CRO | 1.8687454 | ||||
Beef Out And Swa... | 11339323 | 386 days ago | IN | 0 CRO | 1.9074534 | ||||
Beef Out And Swa... | 11339312 | 386 days ago | IN | 0 CRO | 1.89195577 | ||||
Beef Out And Swa... | 11339297 | 386 days ago | IN | 0 CRO | 1.89655004 | ||||
Beef Out And Swa... | 11332140 | 387 days ago | IN | 0 CRO | 1.89319437 | ||||
Beef Out And Swa... | 11330319 | 387 days ago | IN | 0 CRO | 1.94143662 | ||||
Beef Out And Swa... | 11330117 | 387 days ago | IN | 0 CRO | 2.10793536 | ||||
Beef Out And Swa... | 11327578 | 387 days ago | IN | 0 CRO | 1.94618843 | ||||
Beef In ETH | 11327572 | 387 days ago | IN | 1,400 CRO | 0.92141044 | ||||
Beef In ETH | 11327569 | 387 days ago | IN | 1,400 CRO | 0.92141045 | ||||
Beef Out And Swa... | 11325506 | 387 days ago | IN | 0 CRO | 1.92365074 | ||||
Beef In | 11321054 | 387 days ago | IN | 0 CRO | 3.07556148 | ||||
Beef In ETH | 11319320 | 387 days ago | IN | 10 CRO | 3.27689373 | ||||
Beef In ETH | 11314111 | 388 days ago | IN | 25,500 CRO | 0.92145201 | ||||
Beef In ETH | 11314080 | 388 days ago | IN | 25,500 CRO | 0.92145228 | ||||
Beef In ETH | 11314065 | 388 days ago | IN | 25,500 CRO | 0.92145242 | ||||
Beef In ETH | 11311225 | 388 days ago | IN | 150 CRO | 0.92147758 | ||||
Beef In ETH | 11310917 | 388 days ago | IN | 1,000 CRO | 0.92148035 | ||||
Beef In ETH | 11310905 | 388 days ago | IN | 1,000 CRO | 0.92148048 | ||||
Beef In | 11310899 | 388 days ago | IN | 0 CRO | 3.44445834 | ||||
Beef In ETH | 11310830 | 388 days ago | IN | 1,000 CRO | 0.92148113 | ||||
Beef In ETH | 11309284 | 388 days ago | IN | 250 CRO | 0.92149489 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
11350571 | 385 days ago | 180,537.31552321 CRO | ||||
11350571 | 385 days ago | 180,537.31552321 CRO | ||||
11342132 | 386 days ago | 19.98414811 CRO | ||||
11342132 | 386 days ago | 19.98414811 CRO | ||||
11339323 | 386 days ago | 19.81853324 CRO | ||||
11339323 | 386 days ago | 19.81853324 CRO | ||||
11339312 | 386 days ago | 19.89877298 CRO | ||||
11339312 | 386 days ago | 19.89877298 CRO | ||||
11339297 | 386 days ago | 19.98296154 CRO | ||||
11339297 | 386 days ago | 19.98296154 CRO | ||||
11332140 | 387 days ago | 19,553.6471413 CRO | ||||
11332140 | 387 days ago | 19,553.6471413 CRO | ||||
11330117 | 387 days ago | 5,093.48542446 CRO | ||||
11330117 | 387 days ago | 5,093.48542446 CRO | ||||
11327572 | 387 days ago | 1,400 CRO | ||||
11327569 | 387 days ago | 1,400 CRO | ||||
11325506 | 387 days ago | 987.89528054 CRO | ||||
11325506 | 387 days ago | 987.89528054 CRO | ||||
11319320 | 387 days ago | 0.00001289 CRO | ||||
11319320 | 387 days ago | 0.00001289 CRO | ||||
11319320 | 387 days ago | 10 CRO | ||||
11314111 | 388 days ago | 25,500 CRO | ||||
11314080 | 388 days ago | 25,500 CRO | ||||
11314065 | 388 days ago | 25,500 CRO | ||||
11311225 | 388 days ago | 150 CRO |
Loading...
Loading
Contract Name:
BeefyZapUniswapV2
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-01-14 */ /** *Submitted for verification at polygonscan.com on 2021-07-09 */ // SPDX-License-Identifier: GPLv2 // File: @uniswap/v3-core/contracts/libraries/LowGasSafeMath.sol pragma solidity >=0.7.0; /// @title Optimized overflow and underflow safe math operations /// @notice Contains methods for doing math operations that revert on overflow or underflow for minimal gas cost library LowGasSafeMath { /// @notice Returns x + y, reverts if sum overflows uint256 /// @param x The augend /// @param y The addend /// @return z The sum of x and y function add(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x + y) >= x); } /// @notice Returns x - y, reverts if underflows /// @param x The minuend /// @param y The subtrahend /// @return z The difference of x and y function sub(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x - y) <= x); } /// @notice Returns x * y, reverts if overflows /// @param x The multiplicand /// @param y The multiplier /// @return z The product of x and y function mul(uint256 x, uint256 y) internal pure returns (uint256 z) { require(x == 0 || (z = x * y) / x == y); } /// @notice Returns x + y, reverts if overflows or underflows /// @param x The augend /// @param y The addend /// @return z The sum of x and y function add(int256 x, int256 y) internal pure returns (int256 z) { require((z = x + y) >= x == (y >= 0)); } /// @notice Returns x - y, reverts if overflows or underflows /// @param x The minuend /// @param y The subtrahend /// @return z The difference of x and y function sub(int256 x, int256 y) internal pure returns (int256 z) { require((z = x - y) <= x == (y >= 0)); } } // File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol 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/IUniswapV2Router02.sol 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-core/contracts/interfaces/IUniswapV2Pair.sol 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/Babylonian.sol 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 { // credit for this implementation goes to // https://github.com/abdk-consulting/abdk-libraries-solidity/blob/master/ABDKMath64x64.sol#L687 function sqrt(uint256 x) internal pure returns (uint256) { if (x == 0) return 0; // this block is equivalent to r = uint256(1) << (BitMath.mostSignificantBit(x) / 2); // however that code costs significantly more gas uint256 xx = x; uint256 r = 1; if (xx >= 0x100000000000000000000000000000000) { xx >>= 128; r <<= 64; } if (xx >= 0x10000000000000000) { xx >>= 64; r <<= 32; } if (xx >= 0x100000000) { xx >>= 32; r <<= 16; } if (xx >= 0x10000) { xx >>= 16; r <<= 8; } if (xx >= 0x100) { xx >>= 8; r <<= 4; } if (xx >= 0x10) { xx >>= 4; r <<= 2; } if (xx >= 0x8) { r <<= 1; } r = (r + x / r) >> 1; r = (r + x / r) >> 1; r = (r + x / r) >> 1; r = (r + x / r) >> 1; r = (r + x / r) >> 1; r = (r + x / r) >> 1; r = (r + x / r) >> 1; // Seven iterations should be enough uint256 r1 = x / r; return (r < r1 ? r : r1); } } // File: @openzeppelin/contracts/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; // solhint-disable-next-line no-inline-assembly 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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol 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/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' // solhint-disable-next-line max-line-length 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 // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: BeefyZapUniswapV2.sol // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // @author Wivern for Beefy.Finance // @notice This contract adds liquidity to Uniswap V2 compatible liquidity pair pools and stake. pragma solidity >=0.7.6; interface IWETH is IERC20 { function deposit() external payable; function withdraw(uint256 wad) external; } interface IBeefyVault is IERC20 { function deposit(uint256 amount) external; function withdraw(uint256 shares) external; function want() external pure returns (address); // Beefy Vault V6 function token() external pure returns (address); // Beefy Vault V5 } contract BeefyZapUniswapV2 { using LowGasSafeMath for uint256; using SafeERC20 for IERC20; using SafeERC20 for IBeefyVault; IUniswapV2Router02 public immutable router; address public immutable WETH; uint256 public constant minimumAmount = 1000; constructor(address _router, address _WETH) { // Safety checks to ensure WETH token address IWETH(_WETH).deposit{value: 0}(); IWETH(_WETH).withdraw(0); router = IUniswapV2Router02(_router); WETH = _WETH; } receive() external payable { assert(msg.sender == WETH); } function beefInETH (address beefyVault, uint256 tokenAmountOutMin) external payable { require(msg.value >= minimumAmount, 'Beefy: Insignificant input amount'); IWETH(WETH).deposit{value: msg.value}(); _swapAndStake(beefyVault, tokenAmountOutMin, WETH); } function beefIn (address beefyVault, uint256 tokenAmountOutMin, address tokenIn, uint256 tokenInAmount) external { require(tokenInAmount >= minimumAmount, 'Beefy: Insignificant input amount'); require(IERC20(tokenIn).allowance(msg.sender, address(this)) >= tokenInAmount, 'Beefy: Input token is not approved'); IERC20(tokenIn).safeTransferFrom(msg.sender, address(this), tokenInAmount); _swapAndStake(beefyVault, tokenAmountOutMin, tokenIn); } function beefOut (address beefyVault, uint256 withdrawAmount) external { (IBeefyVault vault, IUniswapV2Pair pair) = _getVaultPair(beefyVault); IERC20(beefyVault).safeTransferFrom(msg.sender, address(this), withdrawAmount); vault.withdraw(withdrawAmount); if (pair.token0() != WETH && pair.token1() != WETH) { return _removeLiquidity(address(pair), msg.sender); } _removeLiquidity(address(pair), address(this)); address[] memory tokens = new address[](2); tokens[0] = pair.token0(); tokens[1] = pair.token1(); _returnAssets(tokens); } function beefOutAndSwap(address beefyVault, uint256 withdrawAmount, address desiredToken, uint256 desiredTokenOutMin) external { (IBeefyVault vault, IUniswapV2Pair pair) = _getVaultPair(beefyVault); address token0 = pair.token0(); address token1 = pair.token1(); require(token0 == desiredToken || token1 == desiredToken, 'Beefy: desired token not present in liquidity pair'); vault.safeTransferFrom(msg.sender, address(this), withdrawAmount); vault.withdraw(withdrawAmount); _removeLiquidity(address(pair), address(this)); address swapToken = token1 == desiredToken ? token0 : token1; address[] memory path = new address[](2); path[0] = swapToken; path[1] = desiredToken; _approveTokenIfNeeded(path[0], address(router)); router.swapExactTokensForTokens(IERC20(swapToken).balanceOf(address(this)), desiredTokenOutMin, path, address(this), block.timestamp); _returnAssets(path); } function _removeLiquidity(address pair, address to) private { IERC20(pair).safeTransfer(pair, IERC20(pair).balanceOf(address(this))); (uint256 amount0, uint256 amount1) = IUniswapV2Pair(pair).burn(to); require(amount0 >= minimumAmount, 'UniswapV2Router: INSUFFICIENT_A_AMOUNT'); require(amount1 >= minimumAmount, 'UniswapV2Router: INSUFFICIENT_B_AMOUNT'); } function _getVaultPair (address beefyVault) private view returns (IBeefyVault vault, IUniswapV2Pair pair) { vault = IBeefyVault(beefyVault); try vault.want() returns (address pairAddress) { pair = IUniswapV2Pair(pairAddress); // Vault V6 } catch { pair = IUniswapV2Pair(vault.token()); // Vault V5 } require(pair.factory() == router.factory(), 'Beefy: Incompatible liquidity pair factory'); } function _swapAndStake(address beefyVault, uint256 tokenAmountOutMin, address tokenIn) private { (IBeefyVault vault, IUniswapV2Pair pair) = _getVaultPair(beefyVault); (uint256 reserveA, uint256 reserveB,) = pair.getReserves(); require(reserveA > minimumAmount && reserveB > minimumAmount, 'Beefy: Liquidity pair reserves too low'); bool isInputA = pair.token0() == tokenIn; require(isInputA || pair.token1() == tokenIn, 'Beefy: Input token not present in liquidity pair'); address[] memory path = new address[](2); path[0] = tokenIn; path[1] = isInputA ? pair.token1() : pair.token0(); uint256 fullInvestment = IERC20(tokenIn).balanceOf(address(this)); uint256 swapAmountIn; if (isInputA) { swapAmountIn = _getSwapAmount(fullInvestment, reserveA, reserveB); } else { swapAmountIn = _getSwapAmount(fullInvestment, reserveB, reserveA); } _approveTokenIfNeeded(path[0], address(router)); uint256[] memory swapedAmounts = router .swapExactTokensForTokens(swapAmountIn, tokenAmountOutMin, path, address(this), block.timestamp); _approveTokenIfNeeded(path[1], address(router)); (,, uint256 amountLiquidity) = router .addLiquidity(path[0], path[1], fullInvestment.sub(swapedAmounts[0]), swapedAmounts[1], 1, 1, address(this), block.timestamp); _approveTokenIfNeeded(address(pair), address(vault)); vault.deposit(amountLiquidity); vault.safeTransfer(msg.sender, vault.balanceOf(address(this))); _returnAssets(path); } function _returnAssets(address[] memory tokens) private { uint256 balance; for (uint256 i; i < tokens.length; i++) { balance = IERC20(tokens[i]).balanceOf(address(this)); if (balance > 0) { if (tokens[i] == WETH) { IWETH(WETH).withdraw(balance); (bool success,) = msg.sender.call{value: balance}(new bytes(0)); require(success, 'Beefy: ETH transfer failed'); } else { IERC20(tokens[i]).safeTransfer(msg.sender, balance); } } } } function _getSwapAmount(uint256 investmentA, uint256 reserveA, uint256 reserveB) private view returns (uint256 swapAmount) { uint256 halfInvestment = investmentA / 2; uint256 nominator = router.getAmountOut(halfInvestment, reserveA, reserveB); uint256 denominator = router.quote(halfInvestment, reserveA.add(halfInvestment), reserveB.sub(nominator)); swapAmount = investmentA.sub(Babylonian.sqrt(halfInvestment * halfInvestment * nominator / denominator)); } function estimateSwap(address beefyVault, address tokenIn, uint256 fullInvestmentIn) public view returns(uint256 swapAmountIn, uint256 swapAmountOut, address swapTokenOut) { (, IUniswapV2Pair pair) = _getVaultPair(beefyVault); bool isInputA = pair.token0() == tokenIn; require(isInputA || pair.token1() == tokenIn, 'Beefy: Input token not present in liquidity pair'); (uint256 reserveA, uint256 reserveB,) = pair.getReserves(); (reserveA, reserveB) = isInputA ? (reserveA, reserveB) : (reserveB, reserveA); swapAmountIn = _getSwapAmount(fullInvestmentIn, reserveA, reserveB); swapAmountOut = router.getAmountOut(swapAmountIn, reserveA, reserveB); swapTokenOut = isInputA ? pair.token1() : pair.token0(); } function _approveTokenIfNeeded(address token, address spender) private { if (IERC20(token).allowance(address(this), spender) == 0) { IERC20(token).safeApprove(spender, type(uint256).max); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_WETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"beefyVault","type":"address"},{"internalType":"uint256","name":"tokenAmountOutMin","type":"uint256"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"tokenInAmount","type":"uint256"}],"name":"beefIn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"beefyVault","type":"address"},{"internalType":"uint256","name":"tokenAmountOutMin","type":"uint256"}],"name":"beefInETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"beefyVault","type":"address"},{"internalType":"uint256","name":"withdrawAmount","type":"uint256"}],"name":"beefOut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"beefyVault","type":"address"},{"internalType":"uint256","name":"withdrawAmount","type":"uint256"},{"internalType":"address","name":"desiredToken","type":"address"},{"internalType":"uint256","name":"desiredTokenOutMin","type":"uint256"}],"name":"beefOutAndSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"beefyVault","type":"address"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"fullInvestmentIn","type":"uint256"}],"name":"estimateSwap","outputs":[{"internalType":"uint256","name":"swapAmountIn","type":"uint256"},{"internalType":"uint256","name":"swapAmountOut","type":"uint256"},{"internalType":"address","name":"swapTokenOut","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040523480156200001157600080fd5b5060405162002d5e38038062002d5e833981016040819052620000349162000125565b806001600160a01b031663d0e30db060006040518263ffffffff1660e01b81526004016000604051808303818588803b1580156200007157600080fd5b505af115801562000086573d6000803e3d6000fd5b5050604051632e1a7d4d60e01b8152600060048201526001600160a01b0385169350632e1a7d4d92506024019050600060405180830381600087803b158015620000cf57600080fd5b505af1158015620000e4573d6000803e3d6000fd5b50505050606091821b6001600160601b0319908116608052911b1660a0526200015c565b80516001600160a01b03811681146200012057600080fd5b919050565b6000806040838503121562000138578182fd5b620001438362000108565b9150620001536020840162000108565b90509250929050565b60805160601c60a05160601c612b6e620001f060003960008181608f0152818161017f01528181610a4d01528181610ac601528181610b7001528181610c1d0152818161174501526117ba01526000818161020f0152818161044f015281816108d4015281816109150152818161108001528181611237015281816112bf01528181611dcd0152611e8a0152612b6e6000f3fe60806040526004361061007f5760003560e01c8063ad5c46481161004e578063ad5c46481461016d578063bb0c8298146101b9578063f5d07b60146101dd578063f887ea40146101fd57600080fd5b80633f2f869a146100d157806351c9cf911461011a57806370fae20d1461013a578063a28c361b1461014d57600080fd5b366100cc57336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146100ca57634e487b7160e01b600052600160045260246000fd5b005b600080fd5b3480156100dd57600080fd5b506100f16100ec3660046126a7565b610231565b6040805193845260208401929092526001600160a01b0316908201526060015b60405180910390f35b34801561012657600080fd5b506100ca610135366004612712565b6105ce565b6100ca6101483660046126e7565b610a29565b34801561015957600080fd5b506100ca6101683660046126e7565b610aee565b34801561017957600080fd5b506101a17f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610111565b3480156101c557600080fd5b506101cf6103e881565b604051908152602001610111565b3480156101e957600080fd5b506100ca6101f8366004612712565b610e76565b34801561020957600080fd5b506101a17f000000000000000000000000000000000000000000000000000000000000000081565b60008060008061024087610f90565b9150506000866001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561028857600080fd5b505afa15801561029c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102c0919061268b565b6001600160a01b031614905080806103595750866001600160a01b0316826001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561031657600080fd5b505afa15801561032a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034e919061268b565b6001600160a01b0316145b61037e5760405162461bcd60e51b81526004016103759061297f565b60405180910390fd5b600080836001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156103ba57600080fd5b505afa1580156103ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f29190612839565b506001600160701b031691506001600160701b0316915082610415578082610418565b81815b90925090506104288883836111f7565b604051630153543560e21b81526004810182905260248101849052604481018390529097507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063054d50d49060640160206040518083038186803b15801561049957600080fd5b505afa1580156104ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d19190612887565b95508261054e57836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561051157600080fd5b505afa158015610525573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610549919061268b565b6105bf565b836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561058757600080fd5b505afa15801561059b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105bf919061268b565b94505050505093509350939050565b6000806105da86610f90565b915091506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561061957600080fd5b505afa15801561062d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610651919061268b565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561068e57600080fd5b505afa1580156106a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c6919061268b565b9050856001600160a01b0316826001600160a01b031614806106f95750856001600160a01b0316816001600160a01b0316145b6107605760405162461bcd60e51b815260206004820152603260248201527f42656566793a206465736972656420746f6b656e206e6f742070726573656e746044820152711034b7103634b8bab4b234ba3c903830b4b960711b6064820152608401610375565b6107756001600160a01b03851633308a6113b4565b604051632e1a7d4d60e01b8152600481018890526001600160a01b03851690632e1a7d4d90602401600060405180830381600087803b1580156107b757600080fd5b505af11580156107cb573d6000803e3d6000fd5b505050506107d9833061141f565b6000866001600160a01b0316826001600160a01b0316146107fa57816107fc565b825b6040805160028082526060820183529293506000929091602083019080368337019050509050818160008151811061084457634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050878160018151811061088657634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250506108f8816000815181106108ca57634e487b7160e01b600052603260045260246000fd5b60200260200101517f00000000000000000000000000000000000000000000000000000000000000006115f2565b6040516370a0823160e01b81523060048201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116916338ed1739918516906370a082319060240160206040518083038186803b15801561096157600080fd5b505afa158015610975573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109999190612887565b898430426040518663ffffffff1660e01b81526004016109bd9594939291906129cf565b600060405180830381600087803b1580156109d757600080fd5b505af11580156109eb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a139190810190612759565b50610a1d8161168b565b50505050505050505050565b6103e8341015610a4b5760405162461bcd60e51b81526004016103759061293e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610aa657600080fd5b505af1158015610aba573d6000803e3d6000fd5b5050505050610aea82827f0000000000000000000000000000000000000000000000000000000000000000611933565b5050565b600080610afa84610f90565b9092509050610b146001600160a01b0385163330866113b4565b604051632e1a7d4d60e01b8152600481018490526001600160a01b03831690632e1a7d4d90602401600060405180830381600087803b158015610b5657600080fd5b505af1158015610b6a573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610bd157600080fd5b505afa158015610be5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c09919061268b565b6001600160a01b031614158015610cc257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610c7e57600080fd5b505afa158015610c92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb6919061268b565b6001600160a01b031614155b15610cd757610cd1813361141f565b50505050565b610ce1813061141f565b604080516002808252606082018352600092602083019080368337019050509050816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610d3b57600080fd5b505afa158015610d4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d73919061268b565b81600081518110610d9457634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050816001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610ded57600080fd5b505afa158015610e01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e25919061268b565b81600181518110610e4657634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050610e6f8161168b565b5050505050565b6103e8811015610e985760405162461bcd60e51b81526004016103759061293e565b604051636eb1769f60e11b815233600482015230602482015281906001600160a01b0384169063dd62ed3e9060440160206040518083038186803b158015610edf57600080fd5b505afa158015610ef3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f179190612887565b1015610f705760405162461bcd60e51b815260206004820152602260248201527f42656566793a20496e70757420746f6b656e206973206e6f7420617070726f76604482015261195960f21b6064820152608401610375565b610f856001600160a01b0383163330846113b4565b610cd1848484611933565b600080829150816001600160a01b0316631f1fcd516040518163ffffffff1660e01b815260040160206040518083038186803b158015610fcf57600080fd5b505afa925050508015610fff575060408051601f3d908101601f19168201909252610ffc9181019061268b565b60015b61107b57816001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561103c57600080fd5b505afa158015611050573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611074919061268b565b905061107e565b90505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156110d757600080fd5b505afa1580156110eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110f919061268b565b6001600160a01b0316816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561115157600080fd5b505afa158015611165573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611189919061268b565b6001600160a01b0316146111f25760405162461bcd60e51b815260206004820152602a60248201527f42656566793a20496e636f6d70617469626c65206c6971756964697479207061604482015269697220666163746f727960b01b6064820152608401610375565b915091565b600080611205600286612a57565b604051630153543560e21b81526004810182905260248101869052604481018590529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063054d50d49060640160206040518083038186803b15801561127957600080fd5b505afa15801561128d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b19190612887565b905060006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663ad615dec846112ef8982612125565b6112f98987612146565b6040516001600160e01b031960e086901b16815260048101939093526024830191909152604482015260640160206040518083038186803b15801561133d57600080fd5b505afa158015611351573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113759190612887565b90506113a96113a282846113898780612a77565b6113939190612a77565b61139d9190612a57565b612161565b8890612146565b979650505050505050565b6040516001600160a01b0380851660248301528316604482015260648101829052610cd19085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526122df565b6040516370a0823160e01b81523060048201526114ad9083906001600160a01b038216906370a082319060240160206040518083038186803b15801561146457600080fd5b505afa158015611478573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149c9190612887565b6001600160a01b03851691906123b1565b60405163226bf2d160e21b81526001600160a01b03828116600483015260009182918516906389afcb44906024016040805180830381600087803b1580156114f457600080fd5b505af1158015611508573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152c919061289f565b915091506103e88210156115915760405162461bcd60e51b815260206004820152602660248201527f556e69737761705632526f757465723a20494e53554646494349454e545f415f604482015265105353d5539560d21b6064820152608401610375565b6103e8811015610cd15760405162461bcd60e51b815260206004820152602660248201527f556e69737761705632526f757465723a20494e53554646494349454e545f425f604482015265105353d5539560d21b6064820152608401610375565b604051636eb1769f60e11b81523060048201526001600160a01b03828116602483015283169063dd62ed3e9060440160206040518083038186803b15801561163957600080fd5b505afa15801561164d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116719190612887565b610aea57610aea6001600160a01b038316826000196123e1565b6000805b825181101561192e578281815181106116b857634e487b7160e01b600052603260045260246000fd5b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561170357600080fd5b505afa158015611717573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173b9190612887565b9150811561191c577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683828151811061178d57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031614156118d757604051632e1a7d4d60e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561180657600080fd5b505af115801561181a573d6000803e3d6000fd5b505060408051600080825260208201928390529350339250859161183e91906128ef565b60006040518083038185875af1925050503d806000811461187b576040519150601f19603f3d011682016040523d82523d6000602084013e611880565b606091505b50509050806118d15760405162461bcd60e51b815260206004820152601a60248201527f42656566793a20455448207472616e73666572206661696c65640000000000006044820152606401610375565b5061191c565b61191c33838584815181106118fc57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166123b19092919063ffffffff16565b8061192681612ad9565b91505061168f565b505050565b60008061193f85610f90565b91509150600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561197f57600080fd5b505afa158015611993573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b79190612839565b506001600160701b031691506001600160701b031691506103e8821180156119e057506103e881115b611a3b5760405162461bcd60e51b815260206004820152602660248201527f42656566793a204c6971756964697479207061697220726573657276657320746044820152656f6f206c6f7760d01b6064820152608401610375565b6000856001600160a01b0316846001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015611a8057600080fd5b505afa158015611a94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab8919061268b565b6001600160a01b03161490508080611b515750856001600160a01b0316846001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015611b0e57600080fd5b505afa158015611b22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b46919061268b565b6001600160a01b0316145b611b6d5760405162461bcd60e51b81526004016103759061297f565b6040805160028082526060820183526000926020830190803683370190505090508681600081518110611bb057634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b03168152505081611c4b57846001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015611c0e57600080fd5b505afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c46919061268b565b611cbc565b846001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015611c8457600080fd5b505afa158015611c98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cbc919061268b565b81600181518110611cdd57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526040516370a0823160e01b81523060048201526000918916906370a082319060240160206040518083038186803b158015611d2d57600080fd5b505afa158015611d41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d659190612887565b905060008315611d8157611d7a8287876111f7565b9050611d8f565b611d8c8286886111f7565b90505b611db3836000815181106108ca57634e487b7160e01b600052603260045260246000fd5b6040516338ed173960e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906338ed173990611e0a9085908f908990309042906004016129cf565b600060405180830381600087803b158015611e2457600080fd5b505af1158015611e38573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611e609190810190612759565b9050611e86846001815181106108ca57634e487b7160e01b600052603260045260246000fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e8e3370086600081518110611ed857634e487b7160e01b600052603260045260246000fd5b602002602001015187600181518110611f0157634e487b7160e01b600052603260045260246000fd5b6020026020010151611f4486600081518110611f2d57634e487b7160e01b600052603260045260246000fd5b60200260200101518961214690919063ffffffff16565b86600181518110611f6557634e487b7160e01b600052603260045260246000fd5b60209081029190910101516040516001600160e01b031960e087901b1681526001600160a01b0394851660048201529390921660248401526044830152606482015260016084820181905260a48201523060c48201524260e482015261010401606060405180830381600087803b158015611fdf57600080fd5b505af1158015611ff3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201791906128c2565b92505050612025898b6115f2565b60405163b6b55f2560e01b8152600481018290526001600160a01b038b169063b6b55f2590602401600060405180830381600087803b15801561206757600080fd5b505af115801561207b573d6000803e3d6000fd5b50506040516370a0823160e01b815230600482015261210d92503391506001600160a01b038d16906370a082319060240160206040518083038186803b1580156120c457600080fd5b505afa1580156120d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120fc9190612887565b6001600160a01b038d1691906123b1565b6121168561168b565b50505050505050505050505050565b6000826121328382612a3f565b915081101561214057600080fd5b92915050565b6000826121538382612a96565b915081111561214057600080fd5b60008161217057506000919050565b816001600160801b82106121895760809190911c9060401b5b6801000000000000000082106121a45760409190911c9060201b5b64010000000082106121bb5760209190911c9060101b5b6201000082106121d05760109190911c9060081b5b61010082106121e45760089190911c9060041b5b601082106121f75760049190911c9060021b5b600882106122035760011b5b600161220f8286612a57565b6122199083612a3f565b901c905060016122298286612a57565b6122339083612a3f565b901c905060016122438286612a57565b61224d9083612a3f565b901c9050600161225d8286612a57565b6122679083612a3f565b901c905060016122778286612a57565b6122819083612a3f565b901c905060016122918286612a57565b61229b9083612a3f565b901c905060016122ab8286612a57565b6122b59083612a3f565b901c905060006122c58286612a57565b90508082106122d457806122d6565b815b95945050505050565b6000612334826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166125059092919063ffffffff16565b80519091501561192e57808060200190518101906123529190612819565b61192e5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610375565b6040516001600160a01b03831660248201526044810182905261192e90849063a9059cbb60e01b906064016113e8565b80158061246a5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e9060440160206040518083038186803b15801561243057600080fd5b505afa158015612444573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124689190612887565b155b6124d55760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610375565b6040516001600160a01b03831660248201526044810182905261192e90849063095ea7b360e01b906064016113e8565b6060612514848460008561251e565b90505b9392505050565b60608247101561257f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610375565b843b6125cd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610375565b600080866001600160a01b031685876040516125e991906128ef565b60006040518083038185875af1925050503d8060008114612626576040519150601f19603f3d011682016040523d82523d6000602084013e61262b565b606091505b50915091506113a982828660608315612645575081612517565b8251156126555782518084602001fd5b8160405162461bcd60e51b8152600401610375919061290b565b80516001600160701b038116811461268657600080fd5b919050565b60006020828403121561269c578081fd5b815161251781612b20565b6000806000606084860312156126bb578182fd5b83356126c681612b20565b925060208401356126d681612b20565b929592945050506040919091013590565b600080604083850312156126f9578182fd5b823561270481612b20565b946020939093013593505050565b60008060008060808587031215612727578081fd5b843561273281612b20565b935060208501359250604085013561274981612b20565b9396929550929360600135925050565b6000602080838503121561276b578182fd5b825167ffffffffffffffff80821115612782578384fd5b818501915085601f830112612795578384fd5b8151818111156127a7576127a7612b0a565b8060051b604051601f19603f830116810181811085821117156127cc576127cc612b0a565b604052828152858101935084860182860187018a10156127ea578788fd5b8795505b8386101561280c5780518552600195909501949386019386016127ee565b5098975050505050505050565b60006020828403121561282a578081fd5b81518015158114612517578182fd5b60008060006060848603121561284d578283fd5b6128568461266f565b92506128646020850161266f565b9150604084015163ffffffff8116811461287c578182fd5b809150509250925092565b600060208284031215612898578081fd5b5051919050565b600080604083850312156128b1578182fd5b505080516020909101519092909150565b6000806000606084860312156128d6578283fd5b8351925060208401519150604084015190509250925092565b60008251612901818460208701612aad565b9190910192915050565b602081526000825180602084015261292a816040850160208701612aad565b601f01601f19169190910160400192915050565b60208082526021908201527f42656566793a20496e7369676e69666963616e7420696e70757420616d6f756e6040820152601d60fa1b606082015260800190565b60208082526030908201527f42656566793a20496e70757420746f6b656e206e6f742070726573656e74206960408201526f37103634b8bab4b234ba3c903830b4b960811b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612a1e5784516001600160a01b0316835293830193918301916001016129f9565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612a5257612a52612af4565b500190565b600082612a7257634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612a9157612a91612af4565b500290565b600082821015612aa857612aa8612af4565b500390565b60005b83811015612ac8578181015183820152602001612ab0565b83811115610cd15750506000910152565b6000600019821415612aed57612aed612af4565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612b3557600080fd5b5056fea26469706673582212208e2c26ce7e7807848e7bd054a1880a9b6eea280d407c8cf60986b70a7346941264736f6c63430008040033000000000000000000000000145863eb42cf62847a6ca784e6416c1682b1b2ae0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23
Deployed Bytecode
0x60806040526004361061007f5760003560e01c8063ad5c46481161004e578063ad5c46481461016d578063bb0c8298146101b9578063f5d07b60146101dd578063f887ea40146101fd57600080fd5b80633f2f869a146100d157806351c9cf911461011a57806370fae20d1461013a578063a28c361b1461014d57600080fd5b366100cc57336001600160a01b037f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae2316146100ca57634e487b7160e01b600052600160045260246000fd5b005b600080fd5b3480156100dd57600080fd5b506100f16100ec3660046126a7565b610231565b6040805193845260208401929092526001600160a01b0316908201526060015b60405180910390f35b34801561012657600080fd5b506100ca610135366004612712565b6105ce565b6100ca6101483660046126e7565b610a29565b34801561015957600080fd5b506100ca6101683660046126e7565b610aee565b34801561017957600080fd5b506101a17f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae2381565b6040516001600160a01b039091168152602001610111565b3480156101c557600080fd5b506101cf6103e881565b604051908152602001610111565b3480156101e957600080fd5b506100ca6101f8366004612712565b610e76565b34801561020957600080fd5b506101a17f000000000000000000000000145863eb42cf62847a6ca784e6416c1682b1b2ae81565b60008060008061024087610f90565b9150506000866001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561028857600080fd5b505afa15801561029c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102c0919061268b565b6001600160a01b031614905080806103595750866001600160a01b0316826001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561031657600080fd5b505afa15801561032a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034e919061268b565b6001600160a01b0316145b61037e5760405162461bcd60e51b81526004016103759061297f565b60405180910390fd5b600080836001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156103ba57600080fd5b505afa1580156103ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f29190612839565b506001600160701b031691506001600160701b0316915082610415578082610418565b81815b90925090506104288883836111f7565b604051630153543560e21b81526004810182905260248101849052604481018390529097507f000000000000000000000000145863eb42cf62847a6ca784e6416c1682b1b2ae6001600160a01b03169063054d50d49060640160206040518083038186803b15801561049957600080fd5b505afa1580156104ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d19190612887565b95508261054e57836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561051157600080fd5b505afa158015610525573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610549919061268b565b6105bf565b836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561058757600080fd5b505afa15801561059b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105bf919061268b565b94505050505093509350939050565b6000806105da86610f90565b915091506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561061957600080fd5b505afa15801561062d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610651919061268b565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561068e57600080fd5b505afa1580156106a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c6919061268b565b9050856001600160a01b0316826001600160a01b031614806106f95750856001600160a01b0316816001600160a01b0316145b6107605760405162461bcd60e51b815260206004820152603260248201527f42656566793a206465736972656420746f6b656e206e6f742070726573656e746044820152711034b7103634b8bab4b234ba3c903830b4b960711b6064820152608401610375565b6107756001600160a01b03851633308a6113b4565b604051632e1a7d4d60e01b8152600481018890526001600160a01b03851690632e1a7d4d90602401600060405180830381600087803b1580156107b757600080fd5b505af11580156107cb573d6000803e3d6000fd5b505050506107d9833061141f565b6000866001600160a01b0316826001600160a01b0316146107fa57816107fc565b825b6040805160028082526060820183529293506000929091602083019080368337019050509050818160008151811061084457634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050878160018151811061088657634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250506108f8816000815181106108ca57634e487b7160e01b600052603260045260246000fd5b60200260200101517f000000000000000000000000145863eb42cf62847a6ca784e6416c1682b1b2ae6115f2565b6040516370a0823160e01b81523060048201526001600160a01b037f000000000000000000000000145863eb42cf62847a6ca784e6416c1682b1b2ae8116916338ed1739918516906370a082319060240160206040518083038186803b15801561096157600080fd5b505afa158015610975573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109999190612887565b898430426040518663ffffffff1660e01b81526004016109bd9594939291906129cf565b600060405180830381600087803b1580156109d757600080fd5b505af11580156109eb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a139190810190612759565b50610a1d8161168b565b50505050505050505050565b6103e8341015610a4b5760405162461bcd60e51b81526004016103759061293e565b7f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610aa657600080fd5b505af1158015610aba573d6000803e3d6000fd5b5050505050610aea82827f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23611933565b5050565b600080610afa84610f90565b9092509050610b146001600160a01b0385163330866113b4565b604051632e1a7d4d60e01b8152600481018490526001600160a01b03831690632e1a7d4d90602401600060405180830381600087803b158015610b5657600080fd5b505af1158015610b6a573d6000803e3d6000fd5b505050507f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b0316816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610bd157600080fd5b505afa158015610be5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c09919061268b565b6001600160a01b031614158015610cc257507f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b0316816001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610c7e57600080fd5b505afa158015610c92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb6919061268b565b6001600160a01b031614155b15610cd757610cd1813361141f565b50505050565b610ce1813061141f565b604080516002808252606082018352600092602083019080368337019050509050816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610d3b57600080fd5b505afa158015610d4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d73919061268b565b81600081518110610d9457634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050816001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610ded57600080fd5b505afa158015610e01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e25919061268b565b81600181518110610e4657634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050610e6f8161168b565b5050505050565b6103e8811015610e985760405162461bcd60e51b81526004016103759061293e565b604051636eb1769f60e11b815233600482015230602482015281906001600160a01b0384169063dd62ed3e9060440160206040518083038186803b158015610edf57600080fd5b505afa158015610ef3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f179190612887565b1015610f705760405162461bcd60e51b815260206004820152602260248201527f42656566793a20496e70757420746f6b656e206973206e6f7420617070726f76604482015261195960f21b6064820152608401610375565b610f856001600160a01b0383163330846113b4565b610cd1848484611933565b600080829150816001600160a01b0316631f1fcd516040518163ffffffff1660e01b815260040160206040518083038186803b158015610fcf57600080fd5b505afa925050508015610fff575060408051601f3d908101601f19168201909252610ffc9181019061268b565b60015b61107b57816001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561103c57600080fd5b505afa158015611050573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611074919061268b565b905061107e565b90505b7f000000000000000000000000145863eb42cf62847a6ca784e6416c1682b1b2ae6001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156110d757600080fd5b505afa1580156110eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110f919061268b565b6001600160a01b0316816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561115157600080fd5b505afa158015611165573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611189919061268b565b6001600160a01b0316146111f25760405162461bcd60e51b815260206004820152602a60248201527f42656566793a20496e636f6d70617469626c65206c6971756964697479207061604482015269697220666163746f727960b01b6064820152608401610375565b915091565b600080611205600286612a57565b604051630153543560e21b81526004810182905260248101869052604481018590529091506000906001600160a01b037f000000000000000000000000145863eb42cf62847a6ca784e6416c1682b1b2ae169063054d50d49060640160206040518083038186803b15801561127957600080fd5b505afa15801561128d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b19190612887565b905060006001600160a01b037f000000000000000000000000145863eb42cf62847a6ca784e6416c1682b1b2ae1663ad615dec846112ef8982612125565b6112f98987612146565b6040516001600160e01b031960e086901b16815260048101939093526024830191909152604482015260640160206040518083038186803b15801561133d57600080fd5b505afa158015611351573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113759190612887565b90506113a96113a282846113898780612a77565b6113939190612a77565b61139d9190612a57565b612161565b8890612146565b979650505050505050565b6040516001600160a01b0380851660248301528316604482015260648101829052610cd19085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526122df565b6040516370a0823160e01b81523060048201526114ad9083906001600160a01b038216906370a082319060240160206040518083038186803b15801561146457600080fd5b505afa158015611478573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149c9190612887565b6001600160a01b03851691906123b1565b60405163226bf2d160e21b81526001600160a01b03828116600483015260009182918516906389afcb44906024016040805180830381600087803b1580156114f457600080fd5b505af1158015611508573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152c919061289f565b915091506103e88210156115915760405162461bcd60e51b815260206004820152602660248201527f556e69737761705632526f757465723a20494e53554646494349454e545f415f604482015265105353d5539560d21b6064820152608401610375565b6103e8811015610cd15760405162461bcd60e51b815260206004820152602660248201527f556e69737761705632526f757465723a20494e53554646494349454e545f425f604482015265105353d5539560d21b6064820152608401610375565b604051636eb1769f60e11b81523060048201526001600160a01b03828116602483015283169063dd62ed3e9060440160206040518083038186803b15801561163957600080fd5b505afa15801561164d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116719190612887565b610aea57610aea6001600160a01b038316826000196123e1565b6000805b825181101561192e578281815181106116b857634e487b7160e01b600052603260045260246000fd5b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561170357600080fd5b505afa158015611717573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173b9190612887565b9150811561191c577f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b031683828151811061178d57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031614156118d757604051632e1a7d4d60e01b8152600481018390527f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561180657600080fd5b505af115801561181a573d6000803e3d6000fd5b505060408051600080825260208201928390529350339250859161183e91906128ef565b60006040518083038185875af1925050503d806000811461187b576040519150601f19603f3d011682016040523d82523d6000602084013e611880565b606091505b50509050806118d15760405162461bcd60e51b815260206004820152601a60248201527f42656566793a20455448207472616e73666572206661696c65640000000000006044820152606401610375565b5061191c565b61191c33838584815181106118fc57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166123b19092919063ffffffff16565b8061192681612ad9565b91505061168f565b505050565b60008061193f85610f90565b91509150600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561197f57600080fd5b505afa158015611993573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b79190612839565b506001600160701b031691506001600160701b031691506103e8821180156119e057506103e881115b611a3b5760405162461bcd60e51b815260206004820152602660248201527f42656566793a204c6971756964697479207061697220726573657276657320746044820152656f6f206c6f7760d01b6064820152608401610375565b6000856001600160a01b0316846001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015611a8057600080fd5b505afa158015611a94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab8919061268b565b6001600160a01b03161490508080611b515750856001600160a01b0316846001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015611b0e57600080fd5b505afa158015611b22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b46919061268b565b6001600160a01b0316145b611b6d5760405162461bcd60e51b81526004016103759061297f565b6040805160028082526060820183526000926020830190803683370190505090508681600081518110611bb057634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b03168152505081611c4b57846001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015611c0e57600080fd5b505afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c46919061268b565b611cbc565b846001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015611c8457600080fd5b505afa158015611c98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cbc919061268b565b81600181518110611cdd57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526040516370a0823160e01b81523060048201526000918916906370a082319060240160206040518083038186803b158015611d2d57600080fd5b505afa158015611d41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d659190612887565b905060008315611d8157611d7a8287876111f7565b9050611d8f565b611d8c8286886111f7565b90505b611db3836000815181106108ca57634e487b7160e01b600052603260045260246000fd5b6040516338ed173960e01b81526000906001600160a01b037f000000000000000000000000145863eb42cf62847a6ca784e6416c1682b1b2ae16906338ed173990611e0a9085908f908990309042906004016129cf565b600060405180830381600087803b158015611e2457600080fd5b505af1158015611e38573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611e609190810190612759565b9050611e86846001815181106108ca57634e487b7160e01b600052603260045260246000fd5b60007f000000000000000000000000145863eb42cf62847a6ca784e6416c1682b1b2ae6001600160a01b031663e8e3370086600081518110611ed857634e487b7160e01b600052603260045260246000fd5b602002602001015187600181518110611f0157634e487b7160e01b600052603260045260246000fd5b6020026020010151611f4486600081518110611f2d57634e487b7160e01b600052603260045260246000fd5b60200260200101518961214690919063ffffffff16565b86600181518110611f6557634e487b7160e01b600052603260045260246000fd5b60209081029190910101516040516001600160e01b031960e087901b1681526001600160a01b0394851660048201529390921660248401526044830152606482015260016084820181905260a48201523060c48201524260e482015261010401606060405180830381600087803b158015611fdf57600080fd5b505af1158015611ff3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201791906128c2565b92505050612025898b6115f2565b60405163b6b55f2560e01b8152600481018290526001600160a01b038b169063b6b55f2590602401600060405180830381600087803b15801561206757600080fd5b505af115801561207b573d6000803e3d6000fd5b50506040516370a0823160e01b815230600482015261210d92503391506001600160a01b038d16906370a082319060240160206040518083038186803b1580156120c457600080fd5b505afa1580156120d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120fc9190612887565b6001600160a01b038d1691906123b1565b6121168561168b565b50505050505050505050505050565b6000826121328382612a3f565b915081101561214057600080fd5b92915050565b6000826121538382612a96565b915081111561214057600080fd5b60008161217057506000919050565b816001600160801b82106121895760809190911c9060401b5b6801000000000000000082106121a45760409190911c9060201b5b64010000000082106121bb5760209190911c9060101b5b6201000082106121d05760109190911c9060081b5b61010082106121e45760089190911c9060041b5b601082106121f75760049190911c9060021b5b600882106122035760011b5b600161220f8286612a57565b6122199083612a3f565b901c905060016122298286612a57565b6122339083612a3f565b901c905060016122438286612a57565b61224d9083612a3f565b901c9050600161225d8286612a57565b6122679083612a3f565b901c905060016122778286612a57565b6122819083612a3f565b901c905060016122918286612a57565b61229b9083612a3f565b901c905060016122ab8286612a57565b6122b59083612a3f565b901c905060006122c58286612a57565b90508082106122d457806122d6565b815b95945050505050565b6000612334826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166125059092919063ffffffff16565b80519091501561192e57808060200190518101906123529190612819565b61192e5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610375565b6040516001600160a01b03831660248201526044810182905261192e90849063a9059cbb60e01b906064016113e8565b80158061246a5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e9060440160206040518083038186803b15801561243057600080fd5b505afa158015612444573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124689190612887565b155b6124d55760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610375565b6040516001600160a01b03831660248201526044810182905261192e90849063095ea7b360e01b906064016113e8565b6060612514848460008561251e565b90505b9392505050565b60608247101561257f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610375565b843b6125cd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610375565b600080866001600160a01b031685876040516125e991906128ef565b60006040518083038185875af1925050503d8060008114612626576040519150601f19603f3d011682016040523d82523d6000602084013e61262b565b606091505b50915091506113a982828660608315612645575081612517565b8251156126555782518084602001fd5b8160405162461bcd60e51b8152600401610375919061290b565b80516001600160701b038116811461268657600080fd5b919050565b60006020828403121561269c578081fd5b815161251781612b20565b6000806000606084860312156126bb578182fd5b83356126c681612b20565b925060208401356126d681612b20565b929592945050506040919091013590565b600080604083850312156126f9578182fd5b823561270481612b20565b946020939093013593505050565b60008060008060808587031215612727578081fd5b843561273281612b20565b935060208501359250604085013561274981612b20565b9396929550929360600135925050565b6000602080838503121561276b578182fd5b825167ffffffffffffffff80821115612782578384fd5b818501915085601f830112612795578384fd5b8151818111156127a7576127a7612b0a565b8060051b604051601f19603f830116810181811085821117156127cc576127cc612b0a565b604052828152858101935084860182860187018a10156127ea578788fd5b8795505b8386101561280c5780518552600195909501949386019386016127ee565b5098975050505050505050565b60006020828403121561282a578081fd5b81518015158114612517578182fd5b60008060006060848603121561284d578283fd5b6128568461266f565b92506128646020850161266f565b9150604084015163ffffffff8116811461287c578182fd5b809150509250925092565b600060208284031215612898578081fd5b5051919050565b600080604083850312156128b1578182fd5b505080516020909101519092909150565b6000806000606084860312156128d6578283fd5b8351925060208401519150604084015190509250925092565b60008251612901818460208701612aad565b9190910192915050565b602081526000825180602084015261292a816040850160208701612aad565b601f01601f19169190910160400192915050565b60208082526021908201527f42656566793a20496e7369676e69666963616e7420696e70757420616d6f756e6040820152601d60fa1b606082015260800190565b60208082526030908201527f42656566793a20496e70757420746f6b656e206e6f742070726573656e74206960408201526f37103634b8bab4b234ba3c903830b4b960811b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612a1e5784516001600160a01b0316835293830193918301916001016129f9565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612a5257612a52612af4565b500190565b600082612a7257634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612a9157612a91612af4565b500290565b600082821015612aa857612aa8612af4565b500390565b60005b83811015612ac8578181015183820152602001612ab0565b83811115610cd15750506000910152565b6000600019821415612aed57612aed612af4565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612b3557600080fd5b5056fea26469706673582212208e2c26ce7e7807848e7bd054a1880a9b6eea280d407c8cf60986b70a7346941264736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000145863eb42cf62847a6ca784e6416c1682b1b2ae0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23
-----Decoded View---------------
Arg [0] : _router (address): 0x145863Eb42Cf62847A6Ca784e6416C1682b1b2Ae
Arg [1] : _WETH (address): 0x5C7F8A570d578ED84E63fdFA7b1eE72dEae1AE23
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000145863eb42cf62847a6ca784e6416c1682b1b2ae
Arg [1] : 0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23
Deployed Bytecode Sourcemap
26934:7851:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27528:10;-1:-1:-1;;;;;27542:4:0;27528:18;;27521:26;;-1:-1:-1;;;27521:26:0;;;;;;;;;26934:7851;;;;;33757:788;;;;;;;;;;-1:-1:-1;33757:788:0;;;;;:::i;:::-;;:::i;:::-;;;;12990:25:1;;;13046:2;13031:18;;13024:34;;;;-1:-1:-1;;;;;13094:32:1;13074:18;;;13067:60;12978:2;12963:18;33757:788:0;;;;;;;;29016:1017;;;;;;;;;;-1:-1:-1;29016:1017:0;;;;;:::i;:::-;;:::i;27563:290::-;;;;;;:::i;:::-;;:::i;28357:651::-;;;;;;;;;;-1:-1:-1;28357:651:0;;;;;:::i;:::-;;:::i;27129:29::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4980:32:1;;;4962:51;;4950:2;4935:18;27129:29:0;4917:102:1;27165:44:0;;;;;;;;;;;;27205:4;27165:44;;;;;12752:25:1;;;12740:2;12725:18;27165:44:0;12707:76:1;27861:488:0;;;;;;;;;;-1:-1:-1;27861:488:0;;;;;:::i;:::-;;:::i;27080:42::-;;;;;;;;;;;;;;;33757:788;33862:20;33884:21;33907:20;33943:19;33966:25;33980:10;33966:13;:25::i;:::-;33940:51;;;34004:13;34037:7;-1:-1:-1;;;;;34020:24:0;:4;-1:-1:-1;;;;;34020:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34020:24:0;;34004:40;;34063:8;:36;;;;34092:7;-1:-1:-1;;;;;34075:24:0;:4;-1:-1:-1;;;;;34075:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34075:24:0;;34063:36;34055:97;;;;-1:-1:-1;;;34055:97:0;;;;;;;:::i;:::-;;;;;;;;;34166:16;34184;34205:4;-1:-1:-1;;;;;34205:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34165:58;-1:-1:-1;;;;;34165:58:0;;;-1:-1:-1;;;;;34165:58:0;;;34257:8;:54;;34292:8;34302;34257:54;;;34269:8;34279;34257:54;34234:77;;-1:-1:-1;34234:77:0;-1:-1:-1;34339:52:0;34354:16;34234:77;;34339:14;:52::i;:::-;34418:53;;-1:-1:-1;;;34418:53:0;;;;;14320:25:1;;;14361:18;;;14354:34;;;14404:18;;;14397:34;;;34324:67:0;;-1:-1:-1;34418:6:0;-1:-1:-1;;;;;34418:19:0;;;;14293:18:1;;34418:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34402:69;;34497:8;:40;;34524:4;-1:-1:-1;;;;;34524:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34497:40;;;34508:4;-1:-1:-1;;;;;34508:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34482:55;;33757:788;;;;;;;;;;;:::o;29016:1017::-;29155:17;29174:19;29197:25;29211:10;29197:13;:25::i;:::-;29154:68;;;;29233:14;29250:4;-1:-1:-1;;;;;29250:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29233:30;;29274:14;29291:4;-1:-1:-1;;;;;29291:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29274:30;;29333:12;-1:-1:-1;;;;;29323:22:0;:6;-1:-1:-1;;;;;29323:22:0;;:48;;;;29359:12;-1:-1:-1;;;;;29349:22:0;:6;-1:-1:-1;;;;;29349:22:0;;29323:48;29315:111;;;;-1:-1:-1;;;29315:111:0;;7581:2:1;29315:111:0;;;7563:21:1;7620:2;7600:18;;;7593:30;7659:34;7639:18;;;7632:62;-1:-1:-1;;;7710:18:1;;;7703:48;7768:19;;29315:111:0;7553:240:1;29315:111:0;29439:65;-1:-1:-1;;;;;29439:22:0;;29462:10;29482:4;29489:14;29439:22;:65::i;:::-;29515:30;;-1:-1:-1;;;29515:30:0;;;;;12752:25:1;;;-1:-1:-1;;;;;29515:14:0;;;;;12725:18:1;;29515:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29556:46;29581:4;29596;29556:16;:46::i;:::-;29615:17;29645:12;-1:-1:-1;;;;;29635:22:0;:6;-1:-1:-1;;;;;29635:22:0;;:40;;29669:6;29635:40;;;29660:6;29635:40;29710:16;;;29724:1;29710:16;;;;;;;;29615:60;;-1:-1:-1;29686:21:0;;29710:16;;;;;;;;;;;;-1:-1:-1;29710:16:0;29686:40;;29747:9;29737:4;29742:1;29737:7;;;;;;-1:-1:-1;;;29737:7:0;;;;;;;;;;;;;;:19;-1:-1:-1;;;;;29737:19:0;;;-1:-1:-1;;;;;29737:19:0;;;;;29777:12;29767:4;29772:1;29767:7;;;;;;-1:-1:-1;;;29767:7:0;;;;;;;;;;;;;;:22;-1:-1:-1;;;;;29767:22:0;;;-1:-1:-1;;;;;29767:22:0;;;;;29802:47;29824:4;29829:1;29824:7;;;;;;-1:-1:-1;;;29824:7:0;;;;;;;;;;;;;;;29841:6;29802:21;:47::i;:::-;29892:42;;-1:-1:-1;;;29892:42:0;;29928:4;29892:42;;;4962:51:1;-1:-1:-1;;;;;29860:6:0;:31;;;;;29892:27;;;;;4935:18:1;;29892:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29936:18;29956:4;29970;29977:15;29860:133;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29860:133:0;;;;;;;;;;;;:::i;:::-;;30006:19;30020:4;30006:13;:19::i;:::-;29016:1017;;;;;;;;;;:::o;27563:290::-;27205:4;27666:9;:26;;27658:72;;;;-1:-1:-1;;;27658:72:0;;;;;;;:::i;:::-;27749:4;-1:-1:-1;;;;;27743:19:0;;27770:9;27743:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27795:50;27809:10;27821:17;27840:4;27795:13;:50::i;:::-;27563:290;;:::o;28357:651::-;28440:17;28459:19;28482:25;28496:10;28482:13;:25::i;:::-;28439:68;;-1:-1:-1;28439:68:0;-1:-1:-1;28520:78:0;-1:-1:-1;;;;;28520:35:0;;28556:10;28576:4;28583:14;28520:35;:78::i;:::-;28609:30;;-1:-1:-1;;;28609:30:0;;;;;12752:25:1;;;-1:-1:-1;;;;;28609:14:0;;;;;12725:18:1;;28609:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28673:4;-1:-1:-1;;;;;28656:21:0;:4;-1:-1:-1;;;;;28656:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28656:21:0;;;:46;;;;;28698:4;-1:-1:-1;;;;;28681:21:0;:4;-1:-1:-1;;;;;28681:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28681:21:0;;;28656:46;28652:129;;;28726:43;28751:4;28758:10;28726:16;:43::i;:::-;28719:50;;28357:651;;:::o;28652:129::-;28793:46;28818:4;28833;28793:16;:46::i;:::-;28878:16;;;28892:1;28878:16;;;;;;;;28852:23;;28878:16;;;;;;;;;;-1:-1:-1;28878:16:0;28852:42;;28917:4;-1:-1:-1;;;;;28917:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28905:6;28912:1;28905:9;;;;;;-1:-1:-1;;;28905:9:0;;;;;;;;;;;;;;:25;-1:-1:-1;;;;;28905:25:0;;;-1:-1:-1;;;;;28905:25:0;;;;;28953:4;-1:-1:-1;;;;;28953:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28941:6;28948:1;28941:9;;;;;;-1:-1:-1;;;28941:9:0;;;;;;;;;;;;;;:25;-1:-1:-1;;;;;28941:25:0;;;-1:-1:-1;;;;;28941:25:0;;;;;28979:21;28993:6;28979:13;:21::i;:::-;28357:651;;;;;:::o;27861:488::-;27205:4;27993:13;:30;;27985:76;;;;-1:-1:-1;;;27985:76:0;;;;;;;:::i;:::-;28080:52;;-1:-1:-1;;;28080:52:0;;28106:10;28080:52;;;5236:34:1;28126:4:0;5286:18:1;;;5279:43;28136:13:0;;-1:-1:-1;;;;;28080:25:0;;;;;5171:18:1;;28080:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:69;;28072:116;;;;-1:-1:-1;;;28072:116:0;;10395:2:1;28072:116:0;;;10377:21:1;10434:2;10414:18;;;10407:30;10473:34;10453:18;;;10446:62;-1:-1:-1;;;10524:18:1;;;10517:32;10566:19;;28072:116:0;10367:224:1;28072:116:0;28201:74;-1:-1:-1;;;;;28201:32:0;;28234:10;28254:4;28261:13;28201:32;:74::i;:::-;28288:53;28302:10;28314:17;28333:7;28288:13;:53::i;30449:472::-;30515:17;30534:19;30586:10;30566:31;;30614:5;-1:-1:-1;;;;;30614:10:0;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30614:12:0;;;;;;;;-1:-1:-1;;30614:12:0;;;;;;;;;;;;:::i;:::-;;;30610:202;;30774:5;-1:-1:-1;;;;;30774:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30752:36;;30610:202;;;30694:11;-1:-1:-1;30610:202:0;30850:6;-1:-1:-1;;;;;30850:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30832:34:0;:4;-1:-1:-1;;;;;30832:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30832:34:0;;30824:89;;;;-1:-1:-1;;;30824:89:0;;10798:2:1;30824:89:0;;;10780:21:1;10837:2;10817:18;;;10810:30;10876:34;10856:18;;;10849:62;-1:-1:-1;;;10927:18:1;;;10920:40;10977:19;;30824:89:0;10770:232:1;30824:89:0;30449:472;;;:::o;33250:499::-;33353:18;;33409:15;33423:1;33409:11;:15;:::i;:::-;33455:55;;-1:-1:-1;;;33455:55:0;;;;;14320:25:1;;;14361:18;;;14354:34;;;14404:18;;;14397:34;;;33384:40:0;;-1:-1:-1;33435:17:0;;-1:-1:-1;;;;;33455:6:0;:19;;;;14293:18:1;;33455:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33435:75;-1:-1:-1;33521:19:0;-1:-1:-1;;;;;33543:6:0;:12;;33556:14;33572:28;:8;33556:14;33572:12;:28::i;:::-;33602:23;:8;33615:9;33602:12;:23::i;:::-;33543:83;;-1:-1:-1;;;;;;33543:83:0;;;;;;;;;;14320:25:1;;;;14361:18;;;14354:34;;;;14404:18;;;14397:34;14293:18;;33543:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33521:105;-1:-1:-1;33650:91:0;33666:74;33521:105;33716:9;33682:31;33699:14;;33682:31;:::i;:::-;:43;;;;:::i;:::-;:57;;;;:::i;:::-;33666:15;:74::i;:::-;33650:11;;:15;:91::i;:::-;33637:104;33250:499;-1:-1:-1;;;;;;;33250:499:0:o;22778:205::-;22906:68;;-1:-1:-1;;;;;5591:15:1;;;22906:68:0;;;5573:34:1;5643:15;;5623:18;;;5616:43;5675:18;;;5668:34;;;22879:96:0;;22899:5;;-1:-1:-1;;;22929:27:0;5508:18:1;;22906:68:0;;;;-1:-1:-1;;22906:68:0;;;;;;;;;;;;;;-1:-1:-1;;;;;22906:68:0;-1:-1:-1;;;;;;22906:68:0;;;;;;;;;;22879:19;:96::i;30041:400::-;30144:37;;-1:-1:-1;;;30144:37:0;;30175:4;30144:37;;;4962:51:1;30112:70:0;;30138:4;;-1:-1:-1;;;;;30144:22:0;;;;;4935:18:1;;30144:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30112:25:0;;;:70;:25;:70::i;:::-;30230:29;;-1:-1:-1;;;30230:29:0;;-1:-1:-1;;;;;4980:32:1;;;30230:29:0;;;4962:51:1;30194:15:0;;;;30230:25;;;;;4935:18:1;;30230:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30193:66;;;;27205:4;30280:7;:24;;30272:75;;;;-1:-1:-1;;;30272:75:0;;11567:2:1;30272:75:0;;;11549:21:1;11606:2;11586:18;;;11579:30;11645:34;11625:18;;;11618:62;-1:-1:-1;;;11696:18:1;;;11689:36;11742:19;;30272:75:0;11539:228:1;30272:75:0;27205:4;30366:7;:24;;30358:75;;;;-1:-1:-1;;;30358:75:0;;9581:2:1;30358:75:0;;;9563:21:1;9620:2;9600:18;;;9593:30;9659:34;9639:18;;;9632:62;-1:-1:-1;;;9710:18:1;;;9703:36;9756:19;;30358:75:0;9553:228:1;34553:227:0;34639:47;;-1:-1:-1;;;34639:47:0;;34671:4;34639:47;;;5236:34:1;-1:-1:-1;;;;;5306:15:1;;;5286:18;;;5279:43;34639:23:0;;;;;5171:18:1;;34639:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34635:138;;34708:53;-1:-1:-1;;;;;34708:25:0;;34734:7;-1:-1:-1;;34708:25:0;:53::i;32608:634::-;32675:15;32706:9;32701:534;32721:6;:13;32717:1;:17;32701:534;;;32773:6;32780:1;32773:9;;;;;;-1:-1:-1;;;32773:9:0;;;;;;;;;;;;;;;;;;;32766:42;;-1:-1:-1;;;32766:42:0;;32802:4;32766:42;;;4962:51:1;-1:-1:-1;;;;;32766:27:0;;;;;;4935:18:1;;32766:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32756:52;-1:-1:-1;32827:11:0;;32823:401;;32876:4;-1:-1:-1;;;;;32863:17:0;:6;32870:1;32863:9;;;;;;-1:-1:-1;;;32863:9:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32863:17:0;;32859:350;;;32905:29;;-1:-1:-1;;;32905:29:0;;;;;12752:25:1;;;32911:4:0;-1:-1:-1;;;;;32905:20:0;;;;12725:18:1;;32905:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33007:12:0;;;32958;33007;;;;;;;;;;32958;-1:-1:-1;32975:10:0;;-1:-1:-1;32998:7:0;;32975:45;;33007:12;32975:45;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32957:63;;;33051:7;33043:46;;;;-1:-1:-1;;;33043:46:0;;8000:2:1;33043:46:0;;;7982:21:1;8039:2;8019:18;;;8012:30;8078:28;8058:18;;;8051:56;8124:18;;33043:46:0;7972:176:1;33043:46:0;32859:350;;;;33138:51;33169:10;33181:7;33145:6;33152:1;33145:9;;;;;;-1:-1:-1;;;33145:9:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33138:30:0;;;:51;;;;;:::i;:::-;32736:3;;;;:::i;:::-;;;;32701:534;;;;32608:634;;:::o;30929:1671::-;31036:17;31055:19;31078:25;31092:10;31078:13;:25::i;:::-;31035:68;;;;31117:16;31135;31156:4;-1:-1:-1;;;;;31156:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31116:58;-1:-1:-1;;;;;31116:58:0;;;-1:-1:-1;;;;;31116:58:0;;;27205:4;31193:8;:24;:52;;;;;27205:4;31221:8;:24;31193:52;31185:103;;;;-1:-1:-1;;;31185:103:0;;9174:2:1;31185:103:0;;;9156:21:1;9213:2;9193:18;;;9186:30;9252:34;9232:18;;;9225:62;-1:-1:-1;;;9303:18:1;;;9296:36;9349:19;;31185:103:0;9146:228:1;31185:103:0;31301:13;31334:7;-1:-1:-1;;;;;31317:24:0;:4;-1:-1:-1;;;;;31317:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31317:24:0;;31301:40;;31360:8;:36;;;;31389:7;-1:-1:-1;;;;;31372:24:0;:4;-1:-1:-1;;;;;31372:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31372:24:0;;31360:36;31352:97;;;;-1:-1:-1;;;31352:97:0;;;;;;;:::i;:::-;31486:16;;;31500:1;31486:16;;;;;;;;31462:21;;31486:16;;;;;;;;;;-1:-1:-1;31486:16:0;31462:40;;31523:7;31513:4;31518:1;31513:7;;;;;;-1:-1:-1;;;31513:7:0;;;;;;;;;;;;;;:17;-1:-1:-1;;;;;31513:17:0;;;-1:-1:-1;;;;;31513:17:0;;;;;31551:8;:40;;31578:4;-1:-1:-1;;;;;31578:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31551:40;;;31562:4;-1:-1:-1;;;;;31562:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31541:4;31546:1;31541:7;;;;;;-1:-1:-1;;;31541:7:0;;;;;;;;;-1:-1:-1;;;;;31541:50:0;;;:7;;;;;;;;;:50;31629:40;;-1:-1:-1;;;31629:40:0;;31663:4;31629:40;;;4962:51:1;31604:22:0;;31629:25;;;;;4935:18:1;;31629:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31604:65;;31680:20;31715:8;31711:204;;;31755:50;31770:14;31786:8;31796;31755:14;:50::i;:::-;31740:65;;31711:204;;;31853:50;31868:14;31884:8;31894;31853:14;:50::i;:::-;31838:65;;31711:204;31927:47;31949:4;31954:1;31949:7;;;;;;-1:-1:-1;;;31949:7:0;;;;;;;;31927:47;32018:116;;-1:-1:-1;;;32018:116:0;;31985:30;;-1:-1:-1;;;;;32018:6:0;:45;;;;:116;;32064:12;;32078:17;;32097:4;;32111;;32118:15;;32018:116;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32018:116:0;;;;;;;;;;;;:::i;:::-;31985:149;;32147:47;32169:4;32174:1;32169:7;;;;;;-1:-1:-1;;;32169:7:0;;;;;;;;32147:47;32209:23;32236:6;-1:-1:-1;;;;;32236:33:0;;32270:4;32275:1;32270:7;;;;;;-1:-1:-1;;;32270:7:0;;;;;;;;;;;;;;;32279:4;32284:1;32279:7;;;;;;-1:-1:-1;;;32279:7:0;;;;;;;;;;;;;;;32288:36;32307:13;32321:1;32307:16;;;;;;-1:-1:-1;;;32307:16:0;;;;;;;;;;;;;;;32288:14;:18;;:36;;;;:::i;:::-;32326:13;32340:1;32326:16;;;;;;-1:-1:-1;;;32326:16:0;;;;;;;;;;;;;;;;;;;32236:145;;-1:-1:-1;;;;;;32236:145:0;;;;;;;-1:-1:-1;;;;;6128:15:1;;;32236:145:0;;;6110:34:1;6180:15;;;;6160:18;;;6153:43;6212:18;;;6205:34;6255:18;;;6248:34;32344:1:0;6298:19:1;;;6291:35;;;6342:19;;;6335:35;32358:4:0;6386:19:1;;;6379:44;32365:15:0;6439:19:1;;;6432:35;6044:19;;32236:145:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32205:176;;;;32394:52;32424:4;32439:5;32394:21;:52::i;:::-;32457:30;;-1:-1:-1;;;32457:30:0;;;;;12752:25:1;;;-1:-1:-1;;;;;32457:13:0;;;;;12725:18:1;;32457:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32531:30:0;;-1:-1:-1;;;32531:30:0;;32555:4;32531:30;;;4962:51:1;32500:62:0;;-1:-1:-1;32519:10:0;;-1:-1:-1;;;;;;32531:15:0;;;;;4935:18:1;;32531:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32500:18:0;;;:62;:18;:62::i;:::-;32573:19;32587:4;32573:13;:19::i;:::-;30929:1671;;;;;;;;;;;;;:::o;578:113::-;636:9;681:1;671:5;675:1;681;671:5;:::i;:::-;667:9;;;666:16;;658:25;;;;;;578:113;;;;:::o;861:::-;919:9;964:1;954:5;958:1;964;954:5;:::i;:::-;950:9;;;949:16;;941:25;;;;;9902:1239;9950:7;9974:6;9970:20;;-1:-1:-1;9989:1:0;;9902:1239;-1:-1:-1;9902:1239:0:o;9970:20::-;10168:1;10192;-1:-1:-1;;;10208:41:0;;10204:107;;10273:3;10266:10;;;;;10297:2;10291:8;10204:107;10331:19;10325:2;:25;10321:90;;10374:2;10367:9;;;;;10397:2;10391:8;10321:90;10431:11;10425:2;:17;10421:82;;10466:2;10459:9;;;;;10489:2;10483:8;10421:82;10523:7;10517:2;:13;10513:77;;10554:2;10547:9;;;;;10577:1;10571:7;10513:77;10610:5;10604:2;:11;10600:74;;10639:1;10632:8;;;;;10661:1;10655:7;10600:74;10694:4;10688:2;:10;10684:73;;10722:1;10715:8;;;;;10744:1;10738:7;10684:73;10777:3;10771:2;:9;10767:49;;10803:1;10797:7;10767:49;10845:1;10835:5;10839:1;10835;:5;:::i;:::-;10831:9;;:1;:9;:::i;:::-;10830:16;;;-1:-1:-1;10876:1:0;10866:5;10830:16;10866:1;:5;:::i;:::-;10862:9;;:1;:9;:::i;:::-;10861:16;;;-1:-1:-1;10907:1:0;10897:5;10861:16;10897:1;:5;:::i;:::-;10893:9;;:1;:9;:::i;:::-;10892:16;;;-1:-1:-1;10938:1:0;10928:5;10892:16;10928:1;:5;:::i;:::-;10924:9;;:1;:9;:::i;:::-;10923:16;;;-1:-1:-1;10969:1:0;10959:5;10923:16;10959:1;:5;:::i;:::-;10955:9;;:1;:9;:::i;:::-;10954:16;;;-1:-1:-1;11000:1:0;10990:5;10954:16;10990:1;:5;:::i;:::-;10986:9;;:1;:9;:::i;:::-;10985:16;;;-1:-1:-1;11031:1:0;11021:5;10985:16;11021:1;:5;:::i;:::-;11017:9;;:1;:9;:::i;:::-;11016:16;;;-1:-1:-1;11080:10:0;11093:5;11016:16;11093:1;:5;:::i;:::-;11080:18;;11121:2;11117:1;:6;:15;;11130:2;11117:15;;;11126:1;11117:15;11109:24;9902:1239;-1:-1:-1;;;;;9902:1239:0:o;25027:761::-;25451:23;25477:69;25505:4;25477:69;;;;;;;;;;;;;;;;;25485:5;-1:-1:-1;;;;;25477:27:0;;;:69;;;;;:::i;:::-;25561:17;;25451:95;;-1:-1:-1;25561:21:0;25557:224;;25703:10;25692:30;;;;;;;;;;;;:::i;:::-;25684:85;;;;-1:-1:-1;;;25684:85:0;;11974:2:1;25684:85:0;;;11956:21:1;12013:2;11993:18;;;11986:30;12052:34;12032:18;;;12025:62;-1:-1:-1;;;12103:18:1;;;12096:40;12153:19;;25684:85:0;11946:232:1;22593:177:0;22703:58;;-1:-1:-1;;;;;6670:32:1;;22703:58:0;;;6652:51:1;6719:18;;;6712:34;;;22676:86:0;;22696:5;;-1:-1:-1;;;22726:23:0;6625:18:1;;22703:58:0;6607:145:1;23252:622:0;23622:10;;;23621:62;;-1:-1:-1;23638:39:0;;-1:-1:-1;;;23638:39:0;;23662:4;23638:39;;;5236:34:1;-1:-1:-1;;;;;5306:15:1;;;5286:18;;;5279:43;23638:15:0;;;;;5171:18:1;;23638:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;23621:62;23613:152;;;;-1:-1:-1;;;23613:152:0;;12385:2:1;23613:152:0;;;12367:21:1;12424:2;12404:18;;;12397:30;12463:34;12443:18;;;12436:62;-1:-1:-1;;;12514:18:1;;;12507:52;12576:19;;23613:152:0;12357:244:1;23613:152:0;23803:62;;-1:-1:-1;;;;;6670:32:1;;23803:62:0;;;6652:51:1;6719:18;;;6712:34;;;23776:90:0;;23796:5;;-1:-1:-1;;;23826:22:0;6625:18:1;;23803:62:0;6607:145:1;14828:195:0;14931:12;14963:52;14985:6;14993:4;14999:1;15002:12;14963:21;:52::i;:::-;14956:59;;14828:195;;;;;;:::o;15880:530::-;16007:12;16065:5;16040:21;:30;;16032:81;;;;-1:-1:-1;;;16032:81:0;;9988:2:1;16032:81:0;;;9970:21:1;10027:2;10007:18;;;10000:30;10066:34;10046:18;;;10039:62;-1:-1:-1;;;10117:18:1;;;10110:36;10163:19;;16032:81:0;9960:228:1;16032:81:0;12277:20;;16124:60;;;;-1:-1:-1;;;16124:60:0;;11209:2:1;16124:60:0;;;11191:21:1;11248:2;11228:18;;;11221:30;11287:31;11267:18;;;11260:59;11336:18;;16124:60:0;11181:179:1;16124:60:0;16258:12;16272:23;16299:6;-1:-1:-1;;;;;16299:11:0;16319:5;16327:4;16299:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16257:75;;;;16350:52;16368:7;16377:10;16389:12;18535;18564:7;18560:595;;;-1:-1:-1;18595:10:0;18588:17;;18560:595;18709:17;;:21;18705:439;;18972:10;18966:17;19033:15;19020:10;19016:2;19012:19;19005:44;18920:148;19115:12;19108:20;;-1:-1:-1;;;19108:20:0;;;;;;;;:::i;14:188:1:-;93:13;;-1:-1:-1;;;;;135:42:1;;125:53;;115:2;;192:1;189;182:12;115:2;74:128;;;:::o;207:261::-;277:6;330:2;318:9;309:7;305:23;301:32;298:2;;;351:6;343;336:22;298:2;388:9;382:16;407:31;432:5;407:31;:::i;473:466::-;550:6;558;566;619:2;607:9;598:7;594:23;590:32;587:2;;;640:6;632;625:22;587:2;684:9;671:23;703:31;728:5;703:31;:::i;:::-;753:5;-1:-1:-1;810:2:1;795:18;;782:32;823:33;782:32;823:33;:::i;:::-;577:362;;875:7;;-1:-1:-1;;;929:2:1;914:18;;;;901:32;;577:362::o;944:325::-;1012:6;1020;1073:2;1061:9;1052:7;1048:23;1044:32;1041:2;;;1094:6;1086;1079:22;1041:2;1138:9;1125:23;1157:31;1182:5;1157:31;:::i;:::-;1207:5;1259:2;1244:18;;;;1231:32;;-1:-1:-1;;;1031:238:1:o;1274:535::-;1360:6;1368;1376;1384;1437:3;1425:9;1416:7;1412:23;1408:33;1405:2;;;1459:6;1451;1444:22;1405:2;1503:9;1490:23;1522:31;1547:5;1522:31;:::i;:::-;1572:5;-1:-1:-1;1624:2:1;1609:18;;1596:32;;-1:-1:-1;1680:2:1;1665:18;;1652:32;1693:33;1652:32;1693:33;:::i;:::-;1395:414;;;;-1:-1:-1;1745:7:1;;1799:2;1784:18;1771:32;;-1:-1:-1;;1395:414:1:o;1814:1161::-;1909:6;1940:2;1983;1971:9;1962:7;1958:23;1954:32;1951:2;;;2004:6;1996;1989:22;1951:2;2042:9;2036:16;2071:18;2112:2;2104:6;2101:14;2098:2;;;2133:6;2125;2118:22;2098:2;2176:6;2165:9;2161:22;2151:32;;2221:7;2214:4;2210:2;2206:13;2202:27;2192:2;;2248:6;2240;2233:22;2192:2;2282;2276:9;2304:2;2300;2297:10;2294:2;;;2310:18;;:::i;:::-;2356:2;2353:1;2349:10;2388:2;2382:9;2451:2;2447:7;2442:2;2438;2434:11;2430:25;2422:6;2418:38;2506:6;2494:10;2491:22;2486:2;2474:10;2471:18;2468:46;2465:2;;;2517:18;;:::i;:::-;2553:2;2546:22;2603:18;;;2637:15;;;;-1:-1:-1;2672:11:1;;;2702;;;2698:20;;2695:33;-1:-1:-1;2692:2:1;;;2746:6;2738;2731:22;2692:2;2773:6;2764:15;;2788:156;2802:2;2799:1;2796:9;2788:156;;;2859:10;;2847:23;;2820:1;2813:9;;;;;2890:12;;;;2922;;2788:156;;;-1:-1:-1;2963:6:1;1920:1055;-1:-1:-1;;;;;;;;1920:1055:1:o;2980:297::-;3047:6;3100:2;3088:9;3079:7;3075:23;3071:32;3068:2;;;3121:6;3113;3106:22;3068:2;3158:9;3152:16;3211:5;3204:13;3197:21;3190:5;3187:32;3177:2;;3238:6;3230;3223:22;3282:470;3369:6;3377;3385;3438:2;3426:9;3417:7;3413:23;3409:32;3406:2;;;3459:6;3451;3444:22;3406:2;3487:40;3517:9;3487:40;:::i;:::-;3477:50;;3546:49;3591:2;3580:9;3576:18;3546:49;:::i;:::-;3536:59;;3638:2;3627:9;3623:18;3617:25;3682:10;3675:5;3671:22;3664:5;3661:33;3651:2;;3713:6;3705;3698:22;3651:2;3741:5;3731:15;;;3396:356;;;;;:::o;3757:194::-;3827:6;3880:2;3868:9;3859:7;3855:23;3851:32;3848:2;;;3901:6;3893;3886:22;3848:2;-1:-1:-1;3929:16:1;;3838:113;-1:-1:-1;3838:113:1:o;3956:255::-;4035:6;4043;4096:2;4084:9;4075:7;4071:23;4067:32;4064:2;;;4117:6;4109;4102:22;4064:2;-1:-1:-1;;4145:16:1;;4201:2;4186:18;;;4180:25;4145:16;;4180:25;;-1:-1:-1;4054:157:1:o;4216:316::-;4304:6;4312;4320;4373:2;4361:9;4352:7;4348:23;4344:32;4341:2;;;4394:6;4386;4379:22;4341:2;4428:9;4422:16;4412:26;;4478:2;4467:9;4463:18;4457:25;4447:35;;4522:2;4511:9;4507:18;4501:25;4491:35;;4331:201;;;;;:::o;4537:274::-;4666:3;4704:6;4698:13;4720:53;4766:6;4761:3;4754:4;4746:6;4742:17;4720:53;:::i;:::-;4789:16;;;;;4674:137;-1:-1:-1;;4674:137:1:o;6991:383::-;7140:2;7129:9;7122:21;7103:4;7172:6;7166:13;7215:6;7210:2;7199:9;7195:18;7188:34;7231:66;7290:6;7285:2;7274:9;7270:18;7265:2;7257:6;7253:15;7231:66;:::i;:::-;7358:2;7337:15;-1:-1:-1;;7333:29:1;7318:45;;;;7365:2;7314:54;;7112:262;-1:-1:-1;;7112:262:1:o;8153:397::-;8355:2;8337:21;;;8394:2;8374:18;;;8367:30;8433:34;8428:2;8413:18;;8406:62;-1:-1:-1;;;8499:2:1;8484:18;;8477:31;8540:3;8525:19;;8327:223::o;8555:412::-;8757:2;8739:21;;;8796:2;8776:18;;;8769:30;8835:34;8830:2;8815:18;;8808:62;-1:-1:-1;;;8901:2:1;8886:18;;8879:46;8957:3;8942:19;;8729:238::o;13138:975::-;13392:4;13440:3;13429:9;13425:19;13471:6;13460:9;13453:25;13497:2;13535:6;13530:2;13519:9;13515:18;13508:34;13578:3;13573:2;13562:9;13558:18;13551:31;13602:6;13637;13631:13;13668:6;13660;13653:22;13706:3;13695:9;13691:19;13684:26;;13745:2;13737:6;13733:15;13719:29;;13766:4;13779:195;13793:6;13790:1;13787:13;13779:195;;;13858:13;;-1:-1:-1;;;;;13854:39:1;13842:52;;13949:15;;;;13914:12;;;;13890:1;13808:9;13779:195;;;-1:-1:-1;;;;;;;14030:32:1;;;;14025:2;14010:18;;14003:60;-1:-1:-1;;;14094:3:1;14079:19;14072:35;13991:3;13401:712;-1:-1:-1;;;13401:712:1:o;14442:128::-;14482:3;14513:1;14509:6;14506:1;14503:13;14500:2;;;14519:18;;:::i;:::-;-1:-1:-1;14555:9:1;;14490:80::o;14575:217::-;14615:1;14641;14631:2;;-1:-1:-1;;;14666:31:1;;14720:4;14717:1;14710:15;14748:4;14673:1;14738:15;14631:2;-1:-1:-1;14777:9:1;;14621:171::o;14797:168::-;14837:7;14903:1;14899;14895:6;14891:14;14888:1;14885:21;14880:1;14873:9;14866:17;14862:45;14859:2;;;14910:18;;:::i;:::-;-1:-1:-1;14950:9:1;;14849:116::o;14970:125::-;15010:4;15038:1;15035;15032:8;15029:2;;;15043:18;;:::i;:::-;-1:-1:-1;15080:9:1;;15019:76::o;15100:258::-;15172:1;15182:113;15196:6;15193:1;15190:13;15182:113;;;15272:11;;;15266:18;15253:11;;;15246:39;15218:2;15211:10;15182:113;;;15313:6;15310:1;15307:13;15304:2;;;-1:-1:-1;;15348:1:1;15330:16;;15323:27;15153:205::o;15363:135::-;15402:3;-1:-1:-1;;15423:17:1;;15420:2;;;15443:18;;:::i;:::-;-1:-1:-1;15490:1:1;15479:13;;15410:88::o;15503:127::-;15564:10;15559:3;15555:20;15552:1;15545:31;15595:4;15592:1;15585:15;15619:4;15616:1;15609:15;15635:127;15696:10;15691:3;15687:20;15684:1;15677:31;15727:4;15724:1;15717:15;15751:4;15748:1;15741:15;15767:131;-1:-1:-1;;;;;15842:31:1;;15832:42;;15822:2;;15888:1;15885;15878:12;15822:2;15812:86;:::o
Swarm Source
ipfs://8e2c26ce7e7807848e7bd054a1880a9b6eea280d407c8cf60986b70a73469412
Loading...
Loading
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.