Contract 0x1b02da8cb0d097eb8d57a175b88c7d8b47997506 13

 

Contract Overview

SushiSwap: Router
Balance:
0 ETH

ETH Value:
$0.00

Token:
Txn Hash
Block
From
To
Value [Txn Fee]
0x216312b1a419c407d0c2efec531cd707bc049daba7da7d1eddc99e979d4a116223275392021-10-18 8:17:382 mins ago0xbf57f59d35124f071001fc9185e5169a7c44da1b IN  SushiSwap: Router0.1088164127131 ETH0.001002261659 ETH
0x6cefa35e2b782d801a826d3c960ab02281b581fa0cfb5bbc0ca23345dbfcc49123275382021-10-18 8:17:382 mins ago0x966364061c7753d8db35afc8e650b896aa1314e0 IN  SushiSwap: Router0.18 ETH0.000984496432 ETH
0x3136cd9a7f324424298528b7de3546d1f8a3a13f262023227c711303c17b2dcb23275352021-10-18 8:17:382 mins ago0xb40e7daa5ff7c09b38f3bc485cc46bc14d635d4d IN  SushiSwap: Router0 ETH0.001216315658 ETH
0x71a33d844bde22cb5fda637048dd9669f7b845331efaf0ddfbb8732c6c65acd023275312021-10-18 8:17:382 mins ago0xd0496028027425ea900079ea3d9975adad2c3661 IN  SushiSwap: Router0 ETH0.00086166024 ETH
0xc423d4f42bf55e5d81d1748e47868f3e8985acc4ee549daf460c4bc726cddf2023275162021-10-18 8:17:382 mins ago0x966364061c7753d8db35afc8e650b896aa1314e0 IN  SushiSwap: Router0 ETH0.000863212824 ETH
0x0be2c7f83d70ab772bfc8c19d1338def023cc4f45db0aa733de7a69786c9fe6023275022021-10-18 8:16:533 mins ago0xb40e7daa5ff7c09b38f3bc485cc46bc14d635d4d IN  SushiSwap: Router0 ETH0.001111541396 ETH
0x6a5d0df0b94626f699b5fc6c684f91fd55c48bc5b3c819c19389dd48edcd511723274942021-10-18 8:16:533 mins ago0x8d8237c1392890a011ed138984f5cca397d023a3 IN  SushiSwap: Router0 ETH0.001060264543 ETH
0x223e0ae1b9b949ceb8606de5ede59080ad2dacc45c00a645fe8137e28e510ab323274702021-10-18 8:15:314 mins ago0x2ca3f99bc8e297fc64a48b7b3a409763fac671e9 IN  SushiSwap: Router0 ETH0.001097083061 ETH
0xca9bc767b5cf7a1340d54b9b268cea50ddbcc5bfef916b6ee7926952b26511ec23274512021-10-18 8:15:274 mins ago0x2ca3f99bc8e297fc64a48b7b3a409763fac671e9 IN  SushiSwap: Router0.06 ETH0.000974410134 ETH
0x6b32aab39c6e7b01c006876b52b61679324b1880afffd225c9da9ca5000f716523274342021-10-18 8:14:375 mins ago0x2c27f4e927aa1472ee374261832061b289d803aa IN  SushiSwap: Router0 ETH0.000860551925 ETH
0xf3d80ba6f88225ee514c64ab41b939372b27b27f8a15bb3d5f17802d1b6f38b523274272021-10-18 8:14:375 mins ago0x46189ae4a75a31587d19e973343362f7464c4c3c IN  SushiSwap: Router0 ETH0.000945641031 ETH
0x4f84ce469ffd6e76c852efc61c3326e811d88029fe3a178c54c18a2e2682d97a23274252021-10-18 8:14:375 mins ago0x2ca3f99bc8e297fc64a48b7b3a409763fac671e9 IN  SushiSwap: Router0 ETH0.001276488076 ETH
0x7763156d9112aaa4eb51c01568c4099419259d89bb2fe04d9e0ad64c2937bd4623274182021-10-18 8:13:136 mins ago0x55a3df57b7aaec16a162fd5316f35bec082821cf IN  SushiSwap: Router0.072785210288982 ETH0.001000838589 ETH
0x1fc4c7cd9d858f4793e6f2c128cb681aaa112f02efa7a46a68d565b3df78906623274152021-10-18 8:13:136 mins ago0x9a327df89abb841730faf01466173fffe14c5899 IN  SushiSwap: Router0 ETH0.001211478945 ETH
0x2e146ef7dfe9169c804c8a3f3e59eaa711f3971d08af0904b6bf8224060437ac23273462021-10-18 8:11:468 mins ago0xe5859cbc7a5c954d33480e67266c2bbc919a966e IN  SushiSwap: Router8.560094541051801 ETH0.001003581905 ETH
0x8fa99fe01dda5179997173e2ae3725b9752db7524a29980c9410c17a393cb52823273442021-10-18 8:11:468 mins ago0xbe7c0250bf580b28b6c2e9e1ddee5a4ec41070ab IN  SushiSwap: Router0 ETH0.000862755212 ETH
0x9e7ae6961e45ba6d7f9f4500a0566e43f0787e0a3850f02aa0310064eea6221e23273412021-10-18 8:11:468 mins ago0xc5a4275ea020d8107cad9d5e6d388fad49acd3a8 IN  SushiSwap: Router1 ETH0.000838163484 ETH
0xa2690f22334224c0410190748a1abade2c89955d54d233826ea27014317f1ec523272942021-10-18 8:09:5210 mins ago0x9bbd7f68d4458782b0b73c036d402fb2da77351b IN  SushiSwap: Router0 ETH0.00086166024 ETH
0xccb06873311524c9ddcd5f5352f445616ec8f455de949e913ab0d9aebfe8135e23272852021-10-18 8:09:2510 mins ago0xc5a4275ea020d8107cad9d5e6d388fad49acd3a8 IN  SushiSwap: Router1 ETH0.000840329879 ETH
0xc3be2f86777ebbc981099b94d2d4be758e84050cd28b5a1a1c62779132ff057523272252021-10-18 8:07:2112 mins ago0x7ddaa52513d32d0227e1ba009a53aeb0c87434f7 IN  SushiSwap: Router0.4 ETH0.001000340946 ETH
0xd754f39d02175346f434c3670494cac07ef1d21573dbb7e32b5a345f9972faac23272242021-10-18 8:07:2112 mins ago0x691ddaf6bd69f89b0333590b9a4a8944ea85d7f4 IN  SushiSwap: Router0 ETH0.000862749717 ETH
0xc09fb8bd89c6399ca3b9984ff4815fc03c7662e7d99641ec179b95b595f166b423272222021-10-18 8:06:5513 mins ago0x567f02bd4010082a740db2cf1b9a6611b7be6e2f IN  SushiSwap: Router0 ETH0.000856865128 ETH
0x48f3b99ee6ec71e14d4fb6468761e40f88b48d0b6d0350695855a049c8b0442623272142021-10-18 8:06:5513 mins ago0x1cc6335f6dd86733fa316f6569690e338f43b527 IN  SushiSwap: Router0.3 ETH0.000993386502 ETH
0x14103cd208e0f596d8636d74b60a6c5c1ceaa877c42fbdf442dca74bdc0a0ddb23271712021-10-18 8:05:1614 mins ago0x566e8d5359c33f3efe05bae5ef9b2d5db7239295 IN  SushiSwap: Router0 ETH0.000862736374 ETH
0xfd6b16a675515fd7c35b5171e0d04b22d11860e60bb6ba932dbbff3430f8483423271412021-10-18 8:03:0217 mins ago0x9a327df89abb841730faf01466173fffe14c5899 IN  SushiSwap: Router0 ETH0.000861843913 ETH
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
UniswapV2Router02

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at arbiscan.io on 2021-08-31
*/

/**
 *Submitted for verification at polygonscan.com on 2021-06-09
*/

// File: contracts/uniswapv2/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: contracts/uniswapv2/libraries/SafeMath.sol

pragma solidity =0.6.12;

// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)

library SafeMathUniswap {
    function add(uint x, uint y) internal pure returns (uint z) {
        require((z = x + y) >= x, 'ds-math-add-overflow');
    }

    function sub(uint x, uint y) internal pure returns (uint z) {
        require((z = x - y) <= x, 'ds-math-sub-underflow');
    }

    function mul(uint x, uint y) internal pure returns (uint z) {
        require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow');
    }
}

// File: contracts/uniswapv2/libraries/UniswapV2Library.sol

pragma solidity >=0.5.0;



library UniswapV2Library {
    using SafeMathUniswap for uint;

    // returns sorted token addresses, used to handle return values from pairs sorted in this order
    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
        require(tokenA != tokenB, 'UniswapV2Library: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'UniswapV2Library: ZERO_ADDRESS');
    }

    // calculates the CREATE2 address for a pair without making any external calls
    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {
        (address token0, address token1) = sortTokens(tokenA, tokenB);
        pair = address(uint(keccak256(abi.encodePacked(
                hex'ff',
                factory,
                keccak256(abi.encodePacked(token0, token1)),
                hex'e18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303' // init code hash
            ))));
    }

    // fetches and sorts the reserves for a pair
    function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) {
        (address token0,) = sortTokens(tokenA, tokenB);
        (uint reserve0, uint reserve1,) = IUniswapV2Pair(pairFor(factory, tokenA, tokenB)).getReserves();
        (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
    }

    // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset
    function quote(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) {
        require(amountA > 0, 'UniswapV2Library: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');
        amountB = amountA.mul(reserveB) / reserveA;
    }

    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) {
        require(amountIn > 0, 'UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(997);
        uint numerator = amountInWithFee.mul(reserveOut);
        uint denominator = reserveIn.mul(1000).add(amountInWithFee);
        amountOut = numerator / denominator;
    }

    // given an output amount of an asset and pair reserves, returns a required input amount of the other asset
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn) {
        require(amountOut > 0, 'UniswapV2Library: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');
        uint numerator = reserveIn.mul(amountOut).mul(1000);
        uint denominator = reserveOut.sub(amountOut).mul(997);
        amountIn = (numerator / denominator).add(1);
    }

    // performs chained getAmountOut calculations on any number of pairs
    function getAmountsOut(address factory, uint amountIn, address[] memory path) internal view returns (uint[] memory amounts) {
        require(path.length >= 2, 'UniswapV2Library: INVALID_PATH');
        amounts = new uint[](path.length);
        amounts[0] = amountIn;
        for (uint i; i < path.length - 1; i++) {
            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i], path[i + 1]);
            amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut);
        }
    }

    // performs chained getAmountIn calculations on any number of pairs
    function getAmountsIn(address factory, uint amountOut, address[] memory path) internal view returns (uint[] memory amounts) {
        require(path.length >= 2, 'UniswapV2Library: INVALID_PATH');
        amounts = new uint[](path.length);
        amounts[amounts.length - 1] = amountOut;
        for (uint i = path.length - 1; i > 0; i--) {
            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i]);
            amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut);
        }
    }
}

// File: contracts/uniswapv2/libraries/TransferHelper.sol

// SPDX-License-Identifier: GPL-3.0-or-later

pragma solidity >=0.6.0;

// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
    function safeApprove(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('approve(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED');
    }

    function safeTransfer(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED');
    }

    function safeTransferFrom(address token, address from, address to, uint value) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED');
    }

    function safeTransferETH(address to, uint value) internal {
        (bool success,) = to.call{value:value}(new bytes(0));
        require(success, 'TransferHelper: ETH_TRANSFER_FAILED');
    }
}

// File: contracts/uniswapv2/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: contracts/uniswapv2/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: contracts/uniswapv2/interfaces/IUniswapV2Factory.sol

pragma solidity >=0.5.0;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function migrator() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
    function setMigrator(address) external;
}

// File: contracts/uniswapv2/interfaces/IERC20.sol

pragma solidity >=0.5.0;

interface IERC20Uniswap {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view 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);
}

// File: contracts/uniswapv2/interfaces/IWETH.sol

pragma solidity >=0.5.0;

interface IWETH {
    function deposit() external payable;
    function transfer(address to, uint value) external returns (bool);
    function withdraw(uint) external;
}

// File: contracts/uniswapv2/UniswapV2Router02.sol

pragma solidity =0.6.12;








contract UniswapV2Router02 is IUniswapV2Router02 {
    using SafeMathUniswap for uint;

    address public immutable override factory;
    address public immutable override WETH;

    modifier ensure(uint deadline) {
        require(deadline >= block.timestamp, 'UniswapV2Router: EXPIRED');
        _;
    }

    constructor(address _factory, address _WETH) public {
        factory = _factory;
        WETH = _WETH;
    }

    receive() external payable {
        assert(msg.sender == WETH); // only accept ETH via fallback from the WETH contract
    }

    // **** ADD LIQUIDITY ****
    function _addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin
    ) internal virtual returns (uint amountA, uint amountB) {
        // create the pair if it doesn't exist yet
        if (IUniswapV2Factory(factory).getPair(tokenA, tokenB) == address(0)) {
            IUniswapV2Factory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = UniswapV2Library.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = UniswapV2Library.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'UniswapV2Router: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = UniswapV2Library.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'UniswapV2Router: INSUFFICIENT_A_AMOUNT');
                (amountA, amountB) = (amountAOptimal, amountBDesired);
            }
        }
    }
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint amountA, uint amountB, uint liquidity) {
        (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin);
        address pair = UniswapV2Library.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IUniswapV2Pair(pair).mint(to);
    }
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external virtual override payable ensure(deadline) returns (uint amountToken, uint amountETH, uint liquidity) {
        (amountToken, amountETH) = _addLiquidity(
            token,
            WETH,
            amountTokenDesired,
            msg.value,
            amountTokenMin,
            amountETHMin
        );
        address pair = UniswapV2Library.pairFor(factory, token, WETH);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWETH(WETH).deposit{value: amountETH}();
        assert(IWETH(WETH).transfer(pair, amountETH));
        liquidity = IUniswapV2Pair(pair).mint(to);
        // refund dust eth, if any
        if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH);
    }

    // **** REMOVE LIQUIDITY ****
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountA, uint amountB) {
        address pair = UniswapV2Library.pairFor(factory, tokenA, tokenB);
        IUniswapV2Pair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint amount0, uint amount1) = IUniswapV2Pair(pair).burn(to);
        (address token0,) = UniswapV2Library.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'UniswapV2Router: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'UniswapV2Router: INSUFFICIENT_B_AMOUNT');
    }
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountToken, uint amountETH) {
        (amountToken, amountETH) = removeLiquidity(
            token,
            WETH,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, amountToken);
        IWETH(WETH).withdraw(amountETH);
        TransferHelper.safeTransferETH(to, 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 virtual override returns (uint amountA, uint amountB) {
        address pair = UniswapV2Library.pairFor(factory, tokenA, tokenB);
        uint value = approveMax ? uint(-1) : liquidity;
        IUniswapV2Pair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline);
    }
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountToken, uint amountETH) {
        address pair = UniswapV2Library.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IUniswapV2Pair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline);
    }

    // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) ****
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountETH) {
        (, amountETH) = removeLiquidity(
            token,
            WETH,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, IERC20Uniswap(token).balanceOf(address(this)));
        IWETH(WETH).withdraw(amountETH);
        TransferHelper.safeTransferETH(to, amountETH);
    }
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountETH) {
        address pair = UniswapV2Library.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IUniswapV2Pair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        amountETH = removeLiquidityETHSupportingFeeOnTransferTokens(
            token, liquidity, amountTokenMin, amountETHMin, to, deadline
        );
    }

    // **** SWAP ****
    // requires the initial amount to have already been sent to the first pair
    function _swap(uint[] memory amounts, address[] memory path, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = UniswapV2Library.sortTokens(input, output);
            uint amountOut = amounts[i + 1];
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0));
            address to = i < path.length - 2 ? UniswapV2Library.pairFor(factory, output, path[i + 2]) : _to;
            IUniswapV2Pair(UniswapV2Library.pairFor(factory, input, output)).swap(
                amount0Out, amount1Out, to, new bytes(0)
            );
        }
    }
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint[] memory amounts) {
        amounts = UniswapV2Library.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint[] memory amounts) {
        amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WETH, 'UniswapV2Router: INVALID_PATH');
        amounts = UniswapV2Library.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
    }
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[path.length - 1] == WETH, 'UniswapV2Router: INVALID_PATH');
        amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWETH(WETH).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[path.length - 1] == WETH, 'UniswapV2Router: INVALID_PATH');
        amounts = UniswapV2Library.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWETH(WETH).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WETH, 'UniswapV2Router: INVALID_PATH');
        amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
        // refund dust eth, if any
        if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]);
    }

    // **** SWAP (supporting fee-on-transfer tokens) ****
    // requires the initial amount to have already been sent to the first pair
    function _swapSupportingFeeOnTransferTokens(address[] memory path, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = UniswapV2Library.sortTokens(input, output);
            IUniswapV2Pair pair = IUniswapV2Pair(UniswapV2Library.pairFor(factory, input, output));
            uint amountInput;
            uint amountOutput;
            { // scope to avoid stack too deep errors
            (uint reserve0, uint reserve1,) = pair.getReserves();
            (uint reserveInput, uint reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
            amountInput = IERC20Uniswap(input).balanceOf(address(pair)).sub(reserveInput);
            amountOutput = UniswapV2Library.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? UniswapV2Library.pairFor(factory, output, path[i + 2]) : _to;
            pair.swap(amount0Out, amount1Out, to, new bytes(0));
        }
    }
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) {
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amountIn
        );
        uint balanceBefore = IERC20Uniswap(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20Uniswap(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WETH, 'UniswapV2Router: INVALID_PATH');
        uint amountIn = msg.value;
        IWETH(WETH).deposit{value: amountIn}();
        assert(IWETH(WETH).transfer(UniswapV2Library.pairFor(factory, path[0], path[1]), amountIn));
        uint balanceBefore = IERC20Uniswap(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20Uniswap(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        ensure(deadline)
    {
        require(path[path.length - 1] == WETH, 'UniswapV2Router: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20Uniswap(WETH).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).withdraw(amountOut);
        TransferHelper.safeTransferETH(to, amountOut);
    }

    // **** LIBRARY FUNCTIONS ****
    function quote(uint amountA, uint reserveA, uint reserveB) public pure virtual override returns (uint amountB) {
        return UniswapV2Library.quote(amountA, reserveA, reserveB);
    }

    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut)
        public
        pure
        virtual
        override
        returns (uint amountOut)
    {
        return UniswapV2Library.getAmountOut(amountIn, reserveIn, reserveOut);
    }

    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut)
        public
        pure
        virtual
        override
        returns (uint amountIn)
    {
        return UniswapV2Library.getAmountIn(amountOut, reserveIn, reserveOut);
    }

    function getAmountsOut(uint amountIn, address[] memory path)
        public
        view
        virtual
        override
        returns (uint[] memory amounts)
    {
        return UniswapV2Library.getAmountsOut(factory, amountIn, path);
    }

    function getAmountsIn(uint amountOut, address[] memory path)
        public
        view
        virtual
        override
        returns (uint[] memory amounts)
    {
        return UniswapV2Library.getAmountsIn(factory, amountOut, path);
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","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":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405234801561001057600080fd5b50604051620046e7380380620046e78339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c614562620001856000398061015f5280610ce45280610d1f5280610e16528061103452806113be528061152452806118d352806119ae5280611a885280611b565280611c9c5280611d245280611f605280611fdb528061208f528061215b52806121f05280612264528061274752806129b15280612a075280612a3b5280612aaf5280612c3d5280612d805280612e08525080610ea45280610f7b52806110fa5280611133528061126e528061144c528061150252806116725280611be95280611d565280611eb0528061229652806124d452806126cc52806126f55280612725528061289252806129e55280612cd05280612e3a52806136c0528061370352806139dd5280613b535280613f445280613ffd52806140b052506145626000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b038135169060200135611885565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b0e565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e58565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e65565b34801561088157600080fd5b5061088a611f5e565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f82565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611f8f565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b038135169060200135612115565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612486565b348015610a1c57600080fd5b5061088a6126ca565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506126ee945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561271b565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e0013561282f565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612962565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612bf5565b6000808242811015610cde576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612486565b9093509150610d1d898685612f6e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da585836130d8565b50965096945050505050565b6000610dbe8484846131d0565b949350505050565b60608142811015610e0c576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b815260206004820152601d602482015260008051602061442a833981519152604482015290519081900360640190fd5b610efd7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506132a892505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b815260040180806020018281038252602b815260200180614493602b913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b03166133f4565b85600081518110610fe657fe5b60200260200101516134b4565b61103282878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613611915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b60200260200101516130d8565b509695505050505050565b60606111207f0000000000000000000000000000000000000000000000000000000000000000848461384e565b90505b92915050565b60008060006111597f00000000000000000000000000000000000000000000000000000000000000008f8f6133f4565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f612486565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b6112c77f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506132a892505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b815260040180806020018281038252602b815260200180614493602b913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e882878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613611915050565b606081428110156113b4576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b815260206004820152601d602482015260008051602061442a833981519152604482015290519081900360640190fd5b6114a57f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061384e92505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b81526004018080602001828103825260278152602001806144036027913960400191505060405180910390fd5b6000806115487f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006133f4565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611f8f565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a6134b4565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561172f57600080fd5b505afa158015611743573d6000803e3d6000fd5b505050506040513d602081101561175957600080fd5b5051604080516020888102828101820190935288825292935061179b929091899189918291850190849080828437600092019190915250889250613986915050565b8661183e82888860001981018181106117b057fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561180c57600080fd5b505afa158015611820573d6000803e3d6000fd5b505050506040513d602081101561183657600080fd5b505190613c88565b101561187b5760405162461bcd60e51b815260040180806020018281038252602b815260200180614493602b913960400191505060405180910390fd5b5050505050505050565b80428110156118c9576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061190357fe5b905060200201356001600160a01b03166001600160a01b03161461195c576040805162461bcd60e51b815260206004820152601d602482015260008051602061442a833981519152604482015290519081900360640190fd5b61196c8585600081811061165c57fe5b6119aa858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613986915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611a1957600080fd5b505afa158015611a2d573d6000803e3d6000fd5b505050506040513d6020811015611a4357600080fd5b5051905086811015611a865760405162461bcd60e51b815260040180806020018281038252602b815260200180614493602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aec57600080fd5b505af1158015611b00573d6000803e3d6000fd5b5050505061187b84826130d8565b60608142811015611b54576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b8b57fe5b905060200201356001600160a01b03166001600160a01b031614611be4576040805162461bcd60e51b815260206004820152601d602482015260008051602061442a833981519152604482015290519081900360640190fd5b611c427f0000000000000000000000000000000000000000000000000000000000000000348888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506132a892505050565b91508682600184510381518110611c5557fe5b60200260200101511015611c9a5760405162461bcd60e51b815260040180806020018281038252602b815260200180614493602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611cd657fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d0957600080fd5b505af1158015611d1d573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d827f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110611d8f57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611ddd57600080fd5b505af1158015611df1573d6000803e3d6000fd5b505050506040513d6020811015611e0757600080fd5b5051611e0f57fe5b611e4e82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613611915050565b5095945050505050565b6000610dbe848484613cd8565b60608142811015611eab576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b611f097f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061384e92505050565b91508682600081518110611f1957fe5b6020026020010151111561131f5760405162461bcd60e51b81526004018080602001828103825260278152602001806144036027913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613db0565b60008142811015611fd5576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b612004887f00000000000000000000000000000000000000000000000000000000000000008989893089612486565b90508092505061208d88858a6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561205c57600080fd5b505afa158015612070573d6000803e3d6000fd5b505050506040513d602081101561208657600080fd5b5051612f6e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156120f357600080fd5b505af1158015612107573d6000803e3d6000fd5b505050506110e884836130d8565b8042811015612159576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168585600081811061219057fe5b905060200201356001600160a01b03166001600160a01b0316146121e9576040805162461bcd60e51b815260206004820152601d602482015260008051602061442a833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561224957600080fd5b505af115801561225d573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122c27f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561230957600080fd5b505af115801561231d573d6000803e3d6000fd5b505050506040513d602081101561233357600080fd5b505161233b57fe5b60008686600019810181811061234d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156123a957600080fd5b505afa1580156123bd573d6000803e3d6000fd5b505050506040513d60208110156123d357600080fd5b505160408051602089810282810182019093528982529293506124159290918a918a918291850190849080828437600092019190915250899250613986915050565b8761183e828989600019810181811061242a57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561180c57600080fd5b60008082428110156124cd576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b60006124fa7f00000000000000000000000000000000000000000000000000000000000000008c8c6133f4565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561255557600080fd5b505af1158015612569573d6000803e3d6000fd5b505050506040513d602081101561257f57600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125cc57600080fd5b505af11580156125e0573d6000803e3d6000fd5b505050506040513d60408110156125f657600080fd5b508051602090910151909250905060006126108e8e613e56565b509050806001600160a01b03168e6001600160a01b031614612633578183612636565b82825b90975095508a87101561267a5760405162461bcd60e51b815260040180806020018281038252602681526020018061444a6026913960400191505060405180910390fd5b898610156126b95760405162461bcd60e51b81526004018080602001828103825260268152602001806143906026913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111207f000000000000000000000000000000000000000000000000000000000000000084846132a8565b600080600061276b7f00000000000000000000000000000000000000000000000000000000000000008e7f00000000000000000000000000000000000000000000000000000000000000006133f4565b905060008761277a578c61277e565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156127f457600080fd5b505af1158015612808573d6000803e3d6000fd5b5050505061281a8e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b60008060008342811015612878576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b6128868c8c8c8c8c8c613f34565b909450925060006128b87f00000000000000000000000000000000000000000000000000000000000000008e8e6133f4565b90506128c68d3383886134b4565b6128d28c3383876134b4565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b15801561292157600080fd5b505af1158015612935573d6000803e3d6000fd5b505050506040513d602081101561294b57600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129ab576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b6129d98a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613f34565b90945092506000612a2b7f00000000000000000000000000000000000000000000000000000000000000008c7f00000000000000000000000000000000000000000000000000000000000000006133f4565b9050612a398b3383886134b4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a9457600080fd5b505af1158015612aa8573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b2457600080fd5b505af1158015612b38573d6000803e3d6000fd5b505050506040513d6020811015612b4e57600080fd5b5051612b5657fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b158015612ba557600080fd5b505af1158015612bb9573d6000803e3d6000fd5b505050506040513d6020811015612bcf57600080fd5b5051925034841015612be757612be7338534036130d8565b505096509650969350505050565b60608142811015612c3b576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612c7257fe5b905060200201356001600160a01b03166001600160a01b031614612ccb576040805162461bcd60e51b815260206004820152601d602482015260008051602061442a833981519152604482015290519081900360640190fd5b612d297f00000000000000000000000000000000000000000000000000000000000000008888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061384e92505050565b91503482600081518110612d3957fe5b60200260200101511115612d7e5760405162461bcd60e51b81526004018080602001828103825260278152602001806144036027913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612dba57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612ded57600080fd5b505af1158015612e01573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612e667f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110612e7357fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612ec157600080fd5b505af1158015612ed5573d6000803e3d6000fd5b505050506040513d6020811015612eeb57600080fd5b5051612ef357fe5b612f3282878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613611915050565b81600081518110612f3f57fe5b6020026020010151341115611e4e57611e4e3383600081518110612f5f57fe5b602002602001015134036130d8565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310612feb5780518252601f199092019160209182019101612fcc565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461304d576040519150601f19603f3d011682016040523d82523d6000602084013e613052565b606091505b5091509150818015613080575080511580613080575080806020019051602081101561307d57600080fd5b50515b6130d1576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106131245780518252601f199092019160209182019101613105565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613186576040519150601f19603f3d011682016040523d82523d6000602084013e61318b565b606091505b50509050806131cb5760405162461bcd60e51b81526004018080602001828103825260238152602001806144706023913960400191505060405180910390fd5b505050565b60008084116132105760405162461bcd60e51b815260040180806020018281038252602b8152602001806144e2602b913960400191505060405180910390fd5b6000831180156132205750600082115b61325b5760405162461bcd60e51b81526004018080602001828103825260288152602001806143b66028913960400191505060405180910390fd5b6000613269856103e56141c5565b9050600061327782856141c5565b905060006132918361328b886103e86141c5565b90614228565b905080828161329c57fe5b04979650505050505050565b6060600282511015613301576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561331957600080fd5b50604051908082528060200260200182016040528015613343578160200160208202803683370190505b509050828160008151811061335457fe5b60200260200101818152505060005b60018351038110156133ec576000806133a68786858151811061338257fe5b602002602001015187866001018151811061339957fe5b6020026020010151614277565b915091506133c88484815181106133b957fe5b602002602001015183836131d0565b8484600101815181106133d757fe5b60209081029190910101525050600101613363565b509392505050565b60008060006134038585613e56565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527fe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135395780518252601f19909201916020918201910161351a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461359b576040519150601f19603f3d011682016040523d82523d6000602084013e6135a0565b606091505b50915091508180156135ce5750805115806135ce57508080602001905160208110156135cb57600080fd5b50515b6136095760405162461bcd60e51b81526004018080602001828103825260248152602001806144be6024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138485760008084838151811061362f57fe5b602002602001015185846001018151811061364657fe5b602002602001015191509150600061365e8383613e56565b509050600087856001018151811061367257fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146136a0578260006136a4565b6000835b91509150600060028a510388106136bb57886136fc565b6136fc7f0000000000000000000000000000000000000000000000000000000000000000878c8b600201815181106136ef57fe5b60200260200101516133f4565b90506137297f000000000000000000000000000000000000000000000000000000000000000088886133f4565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613766576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156137ce5781810151838201526020016137b6565b50505050905090810190601f1680156137fb5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561381d57600080fd5b505af1158015613831573d6000803e3d6000fd5b505060019099019850613614975050505050505050565b50505050565b60606002825110156138a7576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff811180156138bf57600080fd5b506040519080825280602002602001820160405280156138e9578160200160208202803683370190505b50905082816001835103815181106138fd57fe5b60209081029190910101528151600019015b80156133ec5760008061393f8786600186038151811061392b57fe5b602002602001015187868151811061339957fe5b9150915061396184848151811061395257fe5b60200260200101518383613cd8565b84600185038151811061397057fe5b602090810291909101015250506000190161390f565b60005b60018351038110156131cb576000808483815181106139a457fe5b60200260200101518584600101815181106139bb57fe5b60200260200101519150915060006139d38383613e56565b5090506000613a037f000000000000000000000000000000000000000000000000000000000000000085856133f4565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613a4457600080fd5b505afa158015613a58573d6000803e3d6000fd5b505050506040513d6060811015613a6e57600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613aa4578284613aa7565b83835b91509150613afc828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561180c57600080fd5b9550613b098683836131d0565b945050505050600080856001600160a01b0316886001600160a01b031614613b3357826000613b37565b6000835b91509150600060028c51038a10613b4e578a613b82565b613b827f0000000000000000000000000000000000000000000000000000000000000000898e8d600201815181106136ef57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c0c578181015183820152602001613bf4565b50505050905090810190601f168015613c395780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613c5b57600080fd5b505af1158015613c6f573d6000803e3d6000fd5b50506001909b019a506139899950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613d185760405162461bcd60e51b815260040180806020018281038252602c81526020018061433f602c913960400191505060405180910390fd5b600083118015613d285750600082115b613d635760405162461bcd60e51b81526004018080602001828103825260288152602001806143b66028913960400191505060405180910390fd5b6000613d7b6103e8613d7586886141c5565b906141c5565b90506000613d8f6103e5613d758689613c88565b9050613da66001828481613d9f57fe5b0490614228565b9695505050505050565b6000808411613df05760405162461bcd60e51b81526004018080602001828103825260258152602001806143de6025913960400191505060405180910390fd5b600083118015613e005750600082115b613e3b5760405162461bcd60e51b81526004018080602001828103825260288152602001806143b66028913960400191505060405180910390fd5b82613e4685846141c5565b81613e4d57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613eaa5760405162461bcd60e51b815260040180806020018281038252602581526020018061436b6025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613eca578284613ecd565b83835b90925090506001600160a01b038216613f2d576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b60008060006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e6a439058a8a6040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b158015613fc057600080fd5b505afa158015613fd4573d6000803e3d6000fd5b505050506040513d6020811015613fea57600080fd5b50516001600160a01b031614156140a8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c9c6539689896040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050602060405180830381600087803b15801561407b57600080fd5b505af115801561408f573d6000803e3d6000fd5b505050506040513d60208110156140a557600080fd5b50505b6000806140d67f00000000000000000000000000000000000000000000000000000000000000008b8b614277565b915091508160001480156140e8575080155b156140f8578793508692506141b8565b6000614105898484613db0565b9050878111614158578581101561414d5760405162461bcd60e51b81526004018080602001828103825260268152602001806143906026913960400191505060405180910390fd5b8894509250826141b6565b6000614165898486613db0565b90508981111561417157fe5b878110156141b05760405162461bcd60e51b815260040180806020018281038252602681526020018061444a6026913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806141e0575050808202828282816141dd57fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006142868585613e56565b5090506000806142978888886133f4565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156142cf57600080fd5b505afa1580156142e3573d6000803e3d6000fd5b505050506040513d60608110156142f957600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b038781169084161461432c57808261432f565b81815b9099909850965050505050505056fe556e697377617056324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056324c6962726172793a204944454e544943414c5f414444524553534553556e69737761705632526f757465723a20494e53554646494349454e545f425f414d4f554e54556e697377617056324c6962726172793a20494e53554646494349454e545f4c4951554944495459556e697377617056324c6962726172793a20494e53554646494349454e545f414d4f554e54556e69737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e54556e69737761705632526f757465723a20494e56414c49445f50415448000000556e69737761705632526f757465723a20494e53554646494349454e545f415f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544556e69737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544556e697377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54556e69737761705632526f757465723a20455850495245440000000000000000a26469706673582212201046181566cf8a35bd60f7e94b82dcde5a31b9e46aa697f15b739ad658b7871164736f6c634300060c0033000000000000000000000000c35dadb65012ec5796536bd9864ed8773abc74c400000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000c35dadb65012ec5796536bd9864ed8773abc74c400000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1

-----Decoded View---------------
Arg [0] : _factory (address): 0xc35dadb65012ec5796536bd9864ed8773abc74c4
Arg [1] : _WETH (address): 0x82af49447d8a07e3bd95bd0d56f35241523fbab1

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000c35dadb65012ec5796536bd9864ed8773abc74c4
Arg [1] : 00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1


Deployed ByteCode Sourcemap

16554:18605:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17043:10;-1:-1:-1;;;;;17057:4:0;17043:18;;17036:26;;;;16554:18605;;;;;21193:673;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21193:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;34103:262;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34103:262:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;28369:850;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28369:850:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28369:850:0;;;;;;;;;;;;-1:-1:-1;28369:850:0;-1:-1:-1;;;;;;28369:850:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34903:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34903:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34903:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34903:253:0;;-1:-1:-1;34903:253:0;;-1:-1:-1;;;;;34903:253:0:i;21872:677::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21872:677:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25586:628::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25586:628:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25586:628:0;;;;;;;;;;;;-1:-1:-1;25586:628:0;-1:-1:-1;;;;;;25586:628:0;;;;;;;;:::i;27535:828::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27535:828:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27535:828:0;;;;;;;;;;;;-1:-1:-1;27535:828:0;-1:-1:-1;;;;;;27535:828:0;;;;;;;;:::i;24016:718::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24016:718:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31409:728::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31409:728:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31409:728:0;;;;;;;;;;;;-1:-1:-1;31409:728:0;-1:-1:-1;;;;;;31409:728:0;;;;;;;;:::i;33013:850::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;33013:850:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;33013:850:0;;;;;;;;;;;;-1:-1:-1;33013:850:0;-1:-1:-1;;;;;;33013:850:0;;;;;;;;:::i;26832:697::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26832:697:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26832:697:0;;;;;;;;;;;;-1:-1:-1;26832:697:0;-1:-1:-1;;;;;;26832:697:0;;;;;;;;:::i;34373:261::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34373:261:0;;;;;;;;;;;;:::i;26220:606::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26220:606:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26220:606:0;;;;;;;;;;;;-1:-1:-1;26220:606:0;-1:-1:-1;;;;;;26220:606:0;;;;;;;;:::i;16697:38::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;16697:38:0;;;;;;;;;;;;;;33907:188;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33907:188:0;;;;;;;;;;;;:::i;23303:707::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23303:707:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32143:864::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32143:864:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32143:864:0;;;;;;;;;;;;-1:-1:-1;32143:864:0;-1:-1:-1;;;;;;32143:864:0;;;;;;;;:::i;20322:865::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20322:865:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16649:41::-;;;;;;;;;;;;;:::i;34642:253::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34642:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34642:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34642:253:0;;-1:-1:-1;34642:253:0;;-1:-1:-1;;;;;34642:253:0:i;22555:669::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22555:669:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18561:738::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18561:738:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;19305:974;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19305:974:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29225:810::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29225:810:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29225:810:0;;;;;;;;;;;;-1:-1:-1;29225:810:0;-1:-1:-1;;;;;;29225:810:0;;;;;;;;:::i;21193:673::-;21430:16;21448:14;21411:8;16806:15;16794:8;:27;;16786:64;;;;;-1:-1:-1;;;16786:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16786:64:0;;;;;;;;;;;;;;;21502:196:::1;21532:5;21552:4;21571:9;21595:14;21624:12;21659:4;21679:8;21502:15;:196::i;:::-;21475:223:::0;;-1:-1:-1;21475:223:0;-1:-1:-1;21709:51:0::1;21737:5:::0;21744:2;21475:223;21709:27:::1;:51::i;:::-;21777:4;-1:-1:-1::0;;;;;21771:20:0::1;;21792:9;21771:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21813:45;21844:2;21848:9;21813:30;:45::i;:::-;21193:673:::0;;;;;;;;;;:::o;34103:262::-;34256:14;34295:62;34325:8;34335:9;34346:10;34295:29;:62::i;:::-;34288:69;34103:262;-1:-1:-1;;;;34103:262:0:o;28369:850::-;28583:21;28555:8;16806:15;16794:8;:27;;16786:64;;;;;-1:-1:-1;;;16786:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16786:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28655:4:0::1;28630:29;:4:::0;;-1:-1:-1;;28635:15:0;;28630:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28630:21:0::1;-1:-1:-1::0;;;;;28630:29:0::1;;28622:71;;;::::0;;-1:-1:-1;;;28622:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28622:71:0;;;;;;;;;;;;;::::1;;28714:55;28745:7;28754:8;28764:4;;28714:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;28714:30:0::1;::::0;-1:-1:-1;;;28714:55:0:i:1;:::-;28704:65;;28819:12;28788:7;28813:1;28796:7;:14;:18;28788:27;;;;;;;;;;;;;;:43;;28780:99;;;;-1:-1:-1::0;;;28780:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28890:141;28936:4;;28941:1;28936:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28936:7:0::1;28945:10;28957:51;28982:7;28991:4;;28996:1;28991:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28991:7:0::1;29000:4;;29005:1;29000:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29000:7:0::1;28957:24;:51::i;:::-;29010:7;29018:1;29010:10;;;;;;;;;;;;;;28890:31;:141::i;:::-;29042:35;29048:7;29057:4;;29042:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29071:4:0::1;::::0;-1:-1:-1;29042:5:0::1;::::0;-1:-1:-1;;29042:35:0:i:1;:::-;29094:4;-1:-1:-1::0;;;;;29088:20:0::1;;29109:7;29134:1;29117:7;:14;:18;29109:27;;;;;;;;;;;;;;29088:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29148:63;29179:2;29183:7;29208:1;29191:7;:14;:18;29183:27;;;;;;;;;;;;;;29148:30;:63::i;:::-;28369:850:::0;;;;;;;;;:::o;34903:253::-;35047:21;35093:55;35123:7;35132:9;35143:4;35093:29;:55::i;:::-;35086:62;;34903:253;;;;;:::o;21872:677::-;22178:12;22192;22217;22232:49;22257:7;22266:6;22274;22232:24;:49::i;:::-;22217:64;;22292:10;22305;:33;;22329:9;22305:33;;;-1:-1:-1;;22305:33:0;22349:80;;;-1:-1:-1;;;22349:80:0;;22377:10;22349:80;;;;22397:4;22349:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22292:46;;-1:-1:-1;;;;;;22349:27:0;;;;;:80;;;;;-1:-1:-1;;22349:80:0;;;;;;;;-1:-1:-1;22349:27:0;:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22461;22477:6;22485;22493:9;22504:10;22516;22528:2;22532:8;22461:15;:80::i;:::-;22440:101;;;;;;;;21872:677;;;;;;;;;;;;;;;;:::o;25586:628::-;25810:21;25791:8;16806:15;16794:8;:27;;16786:64;;;;;-1:-1:-1;;;16786:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16786:64:0;;;;;;;;;;;;;;;25854:55:::1;25885:7;25894:8;25904:4;;25854:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;25854:30:0::1;::::0;-1:-1:-1;;;25854:55:0:i:1;:::-;25844:65;;25959:12;25928:7;25953:1;25936:7;:14;:18;25928:27;;;;;;;;;;;;;;:43;;25920:99;;;;-1:-1:-1::0;;;25920:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26030:141;26076:4;;26081:1;26076:7;;;;;;26030:141;26182:24;26188:7;26197:4;;26182:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;26203:2:0;;-1:-1:-1;26182:5:0::1;::::0;-1:-1:-1;;26182:24:0:i:1;27535:828::-:0;27749:21;27721:8;16806:15;16794:8;:27;;16786:64;;;;;-1:-1:-1;;;16786:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16786:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27821:4:0::1;27796:29;:4:::0;;-1:-1:-1;;27801:15:0;;27796:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27796:21:0::1;-1:-1:-1::0;;;;;27796:29:0::1;;27788:71;;;::::0;;-1:-1:-1;;;27788:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27788:71:0;;;;;;;;;;;;;::::1;;27880:55;27910:7;27919:9;27930:4;;27880:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27880:29:0::1;::::0;-1:-1:-1;;;27880:55:0:i:1;:::-;27870:65;;27968:11;27954:7;27962:1;27954:10;;;;;;;;;;;;;;:25;;27946:77;;;;-1:-1:-1::0;;;27946:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24016:718:::0;24334:14;24361:12;24376:46;24401:7;24410:5;24417:4;24376:24;:46::i;:::-;24361:61;;24433:10;24446;:33;;24470:9;24446:33;;;-1:-1:-1;;24446:33:0;24490:80;;;-1:-1:-1;;;24490:80:0;;24518:10;24490:80;;;;24538:4;24490:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24433:46;;-1:-1:-1;;;;;;24490:27:0;;;;;:80;;;;;-1:-1:-1;;24490:80:0;;;;;;;;-1:-1:-1;24490:27:0;:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24593:133;24655:5;24662:9;24673:14;24689:12;24703:2;24707:8;24593:47;:133::i;:::-;24581:145;24016:718;-1:-1:-1;;;;;;;;;;;;;24016:718:0:o;31409:728::-;31643:8;16806:15;16794:8;:27;;16786:64;;;;;-1:-1:-1;;;16786:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16786:64:0;;;;;;;;;;;;;;;31664:139:::1;31710:4;;31715:1;31710:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31710:7:0::1;31719:10;31731:51;31756:7;31765:4;;31770:1;31765:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31765:7:0::1;31774:4;;31779:1;31774:7;;;;;;31731:51;31784:8;31664:31;:139::i;:::-;31814:18;31849:4:::0;;-1:-1:-1;;31854:15:0;;31849:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31849:21:0::1;-1:-1:-1::0;;;;;31835:46:0::1;;31882:2;31835:50;;;;;;;;;;;;;-1:-1:-1::0;;;;;31835:50:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31835:50:0;31896:44:::1;::::0;;31835:50:::1;31896:44:::0;;::::1;::::0;;;;;;;;;;;31835:50;;-1:-1:-1;31896:44:0::1;::::0;;;31931:4;;;;;;31896:44;::::1;::::0;31931:4;;31896:44;31931:4;31896:44;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;31937:2:0;;-1:-1:-1;31896:34:0::1;::::0;-1:-1:-1;;31896:44:0:i:1;:::-;32046:12:::0;31973:69:::1;32028:13:::0;31987:4;;-1:-1:-1;;31992:15:0;;31987:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31987:21:0::1;-1:-1:-1::0;;;;;31973:46:0::1;;32020:2;31973:50;;;;;;;;;;;;;-1:-1:-1::0;;;;;31973:50:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31973:50:0;;:54:::1;:69::i;:::-;:85;;31951:178;;;;-1:-1:-1::0;;;31951:178:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16861:1;31409:728:::0;;;;;;;:::o;33013:850::-;33280:8;16806:15;16794:8;:27;;16786:64;;;;;-1:-1:-1;;;16786:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16786:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33339:4:0::1;33314:29;:4:::0;;-1:-1:-1;;33319:15:0;;33314:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33314:21:0::1;-1:-1:-1::0;;;;;33314:29:0::1;;33306:71;;;::::0;;-1:-1:-1;;;33306:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33306:71:0;;;;;;;;;;;;;::::1;;33388:139;33434:4;;33439:1;33434:7;;;;;;33388:139;33538:55;33573:4;;33538:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;33587:4:0::1;::::0;-1:-1:-1;33538:34:0::1;::::0;-1:-1:-1;;33538:55:0:i:1;:::-;33604:14;33635:4;-1:-1:-1::0;;;;;33621:29:0::1;;33659:4;33621:44;;;;;;;;;;;;;-1:-1:-1::0;;;;;33621:44:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;33621:44:0;;-1:-1:-1;33684:25:0;;::::1;;33676:81;;;;-1:-1:-1::0;;;33676:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33774:4;-1:-1:-1::0;;;;;33768:20:0::1;;33789:9;33768:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33810:45;33841:2;33845:9;33810:30;:45::i;26832:697::-:0;27048:21;27020:8;16806:15;16794:8;:27;;16786:64;;;;;-1:-1:-1;;;16786:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16786:64:0;;;;;;;;;;;;;;;27106:4:::1;-1:-1:-1::0;;;;;27095:15:0::1;:4;;27100:1;27095:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27095:7:0::1;-1:-1:-1::0;;;;;27095:15:0::1;;27087:57;;;::::0;;-1:-1:-1;;;27087:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27087:57:0;;;;;;;;;;;;;::::1;;27165:56;27196:7;27205:9;27216:4;;27165:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27165:30:0::1;::::0;-1:-1:-1;;;27165:56:0:i:1;:::-;27155:66;;27271:12;27240:7;27265:1;27248:7;:14;:18;27240:27;;;;;;;;;;;;;;:43;;27232:99;;;;-1:-1:-1::0;;;27232:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27348:4;-1:-1:-1::0;;;;;27342:19:0::1;;27369:7;27377:1;27369:10;;;;;;;;;;;;;;27342:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;27406:4;-1:-1:-1::0;;;;;27400:20:0::1;;27421:51;27446:7;27455:4;;27460:1;27455:7;;;;;;27421:51;27474:7;27482:1;27474:10;;;;;;;;;;;;;;27400:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;27400:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;27400:85:0;27393:93:::1;;;;27497:24;27503:7;27512:4;;27497:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27518:2:0;;-1:-1:-1;27497:5:0::1;::::0;-1:-1:-1;;27497:24:0:i:1;:::-;26832:697:::0;;;;;;;;:::o;34373:261::-;34526:13;34564:62;34593:9;34604;34615:10;34564:28;:62::i;26220:606::-;26444:21;26425:8;16806:15;16794:8;:27;;16786:64;;;;;-1:-1:-1;;;16786:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16786:64:0;;;;;;;;;;;;;;;26488:55:::1;26518:7;26527:9;26538:4;;26488:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;26488:29:0::1;::::0;-1:-1:-1;;;26488:55:0:i:1;:::-;26478:65;;26576:11;26562:7;26570:1;26562:10;;;;;;;;;;;;;;:25;;26554:77;;;;-1:-1:-1::0;;;26554:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16697:38:::0;;;:::o;33907:188::-;34004:12;34036:51;34059:7;34068:8;34078;34036:22;:51::i;23303:707::-;23569:14;23550:8;16806:15;16794:8;:27;;16786:64;;;;;-1:-1:-1;;;16786:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16786:64:0;;;;;;;;;;;;;;;23612:196:::1;23642:5;23662:4;23681:9;23705:14;23734:12;23769:4;23789:8;23612:15;:196::i;:::-;23596:212;;;;;;23819:85;23847:5;23854:2;23872:5;-1:-1:-1::0;;;;;23858:30:0::1;;23897:4;23858:45;;;;;;;;;;;;;-1:-1:-1::0;;;;;23858:45:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;23858:45:0;23819:27:::1;:85::i;:::-;23921:4;-1:-1:-1::0;;;;;23915:20:0::1;;23936:9;23915:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23957:45;23988:2;23992:9;23957:30;:45::i;32143:864::-:0;32403:8;16806:15;16794:8;:27;;16786:64;;;;;-1:-1:-1;;;16786:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16786:64:0;;;;;;;;;;;;;;;32448:4:::1;-1:-1:-1::0;;;;;32437:15:0::1;:4;;32442:1;32437:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32437:7:0::1;-1:-1:-1::0;;;;;32437:15:0::1;;32429:57;;;::::0;;-1:-1:-1;;;32429:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32429:57:0;;;;;;;;;;;;;::::1;;32497:13;32513:9;32497:25;;32539:4;-1:-1:-1::0;;;;;32533:19:0::1;;32560:8;32533:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;32595:4;-1:-1:-1::0;;;;;32589:20:0::1;;32610:51;32635:7;32644:4;;32649:1;32644:7;;;;;;32610:51;32663:8;32589:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;32589:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32589:83:0;32582:91:::1;;;;32684:18;32719:4:::0;;-1:-1:-1;;32724:15:0;;32719:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32719:21:0::1;-1:-1:-1::0;;;;;32705:46:0::1;;32752:2;32705:50;;;;;;;;;;;;;-1:-1:-1::0;;;;;32705:50:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32705:50:0;32766:44:::1;::::0;;32705:50:::1;32766:44:::0;;::::1;::::0;;;;;;;;;;;32705:50;;-1:-1:-1;32766:44:0::1;::::0;;;32801:4;;;;;;32766:44;::::1;::::0;32801:4;;32766:44;32801:4;32766:44;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;32807:2:0;;-1:-1:-1;32766:34:0::1;::::0;-1:-1:-1;;32766:44:0:i:1;:::-;32916:12:::0;32843:69:::1;32898:13:::0;32857:4;;-1:-1:-1;;32862:15:0;;32857:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32857:21:0::1;-1:-1:-1::0;;;;;32843:46:0::1;;32890:2;32843:50;;;;;;;;;;;;;-1:-1:-1::0;;;;;32843:50:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;20322:865:::0;20576:12;20590;20557:8;16806:15;16794:8;:27;;16786:64;;;;;-1:-1:-1;;;16786:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16786:64:0;;;;;;;;;;;;;;;20615:12:::1;20630:49;20655:7;20664:6;20672;20630:24;:49::i;:::-;20690:62;::::0;;-1:-1:-1;;;20690:62:0;;20724:10:::1;20690:62;::::0;::::1;::::0;-1:-1:-1;;;;;20690:33:0;::::1;:62:::0;;;;;;;;;;;;;;20615:64;;-1:-1:-1;20690:33:0;;::::1;::::0;:62;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20690:33:0;:62;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;20820:29:0::1;::::0;;-1:-1:-1;;;20820:29:0;;-1:-1:-1;;;;;20820:29:0;;::::1;;::::0;::::1;::::0;;;20790:12:::1;::::0;;;20820:25;;::::1;::::0;::::1;::::0;:29;;;;;;;;;;;20790:12;20820:25;:29;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;20820:29:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20820:29:0;-1:-1:-1;20861:14:0::1;20880:43;20908:6:::0;20916;20880:27:::1;:43::i;:::-;20860:63;;;20965:6;-1:-1:-1::0;;;;;20955:16:0::1;:6;-1:-1:-1::0;;;;;20955:16:0::1;;:58;;20996:7;21005;20955:58;;;20975:7;20984;20955:58;20934:79:::0;;-1:-1:-1;20934:79:0;-1:-1:-1;21032:21:0;;::::1;;21024:72;;;;-1:-1:-1::0;;;21024:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21126:10;21115:7;:21;;21107:72;;;;-1:-1:-1::0;;;21107:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16861:1;;;;20322:865:::0;;;;;;;;;;;:::o;16649:41::-;;;:::o;34642:253::-;34786:21;34832:55;34863:7;34872:8;34882:4;34832:30;:55::i;22555:669::-;22844:16;22862:14;22889:12;22904:46;22929:7;22938:5;22945:4;22904:24;:46::i;:::-;22889:61;;22961:10;22974;:33;;22998:9;22974:33;;;-1:-1:-1;;22974:33:0;23018:80;;;-1:-1:-1;;;23018:80:0;;23046:10;23018:80;;;;23066:4;23018:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22961:46;;-1:-1:-1;;;;;;23018:27:0;;;;;:80;;;;;-1:-1:-1;;23018:80:0;;;;;;;;-1:-1:-1;23018:27:0;:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23136;23155:5;23162:9;23173:14;23189:12;23203:2;23207:8;23136:18;:80::i;:::-;23109:107;;;;-1:-1:-1;22555:669:0;-1:-1:-1;;;;;;;;;;;;;22555:669:0:o;18561:738::-;18849:12;18863;18877:14;18830:8;16806:15;16794:8;:27;;16786:64;;;;;-1:-1:-1;;;16786:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16786:64:0;;;;;;;;;;;;;;;18925:85:::1;18939:6;18947;18955:14;18971;18987:10;18999;18925:13;:85::i;:::-;18904:106:::0;;-1:-1:-1;18904:106:0;-1:-1:-1;19021:12:0::1;19036:49;19061:7;19070:6:::0;19078;19036:24:::1;:49::i;:::-;19021:64;;19096:66;19128:6;19136:10;19148:4;19154:7;19096:31;:66::i;:::-;19173;19205:6;19213:10;19225:4;19231:7;19173:31;:66::i;:::-;19277:4;-1:-1:-1::0;;;;;19262:25:0::1;;19288:2;19262:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;19262:29:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19262:29:0;18561:738;;;;-1:-1:-1;19262:29:0;;-1:-1:-1;18561:738:0;;-1:-1:-1;;;;;;;;;18561:738:0:o;19305:974::-;19558:16;19576:14;19592;19539:8;16806:15;16794:8;:27;;16786:64;;;;;-1:-1:-1;;;16786:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16786:64:0;;;;;;;;;;;;;;;19646:176:::1;19674:5;19694:4;19713:18;19746:9;19770:14;19799:12;19646:13;:176::i;:::-;19619:203:::0;;-1:-1:-1;19619:203:0;-1:-1:-1;19833:12:0::1;19848:46;19873:7;19882:5:::0;19889:4:::1;19848:24;:46::i;:::-;19833:61;;19905:69;19937:5;19944:10;19956:4;19962:11;19905:31;:69::i;:::-;19991:4;-1:-1:-1::0;;;;;19985:19:0::1;;20012:9;19985:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;20048:4;-1:-1:-1::0;;;;;20042:20:0::1;;20063:4;20069:9;20042:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;20042:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;20042:37:0;20035:45:::1;;;;20118:4;-1:-1:-1::0;;;;;20103:25:0::1;;20129:2;20103:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;20103:29:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;20103:29:0;;-1:-1:-1;20183:9:0::1;:21:::0;-1:-1:-1;20179:92:0::1;;;20206:65;20237:10;20261:9;20249;:21;20206:30;:65::i;:::-;16861:1;19305:974:::0;;;;;;;;;;;:::o;29225:810::-;29438:21;29410:8;16806:15;16794:8;:27;;16786:64;;;;;-1:-1:-1;;;16786:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16786:64:0;;;;;;;;;;;;;;;29496:4:::1;-1:-1:-1::0;;;;;29485:15:0::1;:4;;29490:1;29485:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29485:7:0::1;-1:-1:-1::0;;;;;29485:15:0::1;;29477:57;;;::::0;;-1:-1:-1;;;29477:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;29477:57:0;;;;;;;;;;;;;::::1;;29555:55;29585:7;29594:9;29605:4;;29555:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29555:29:0::1;::::0;-1:-1:-1;;;29555:55:0:i:1;:::-;29545:65;;29643:9;29629:7;29637:1;29629:10;;;;;;;;;;;;;;:23;;29621:75;;;;-1:-1:-1::0;;;29621:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29713:4;-1:-1:-1::0;;;;;29707:19:0::1;;29734:7;29742:1;29734:10;;;;;;;;;;;;;;29707:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;29771:4;-1:-1:-1::0;;;;;29765:20:0::1;;29786:51;29811:7;29820:4;;29825:1;29820:7;;;;;;29786:51;29839:7;29847:1;29839:10;;;;;;;;;;;;;;29765:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;29765:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;29765:85:0;29758:93:::1;;;;29862:24;29868:7;29877:4;;29862:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29883:2:0;;-1:-1:-1;29862:5:0::1;::::0;-1:-1:-1;;29862:24:0:i:1;:::-;29949:7;29957:1;29949:10;;;;;;;;;;;;;;29937:9;:22;29933:94;;;29961:66;29992:10;30016:7;30024:1;30016:10;;;;;;;;;;;;;;30004:9;:22;29961:30;:66::i;8417:361::-:0;8612:45;;;-1:-1:-1;;;;;8612:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8612:45:0;-1:-1:-1;;;8612:45:0;;;8601:57;;;;8566:12;;8580:17;;8601:10;;;;8612:45;8601:57;;;8612:45;8601:57;;8612:45;8601:57;;;;;;;;;;-1:-1:-1;;8601:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8565:93;;;;8677:7;:57;;;;-1:-1:-1;8689:11:0;;:16;;:44;;;8720:4;8709:24;;;;;;;;;;;;;;;-1:-1:-1;8709:24:0;8689:44;8669:101;;;;;-1:-1:-1;;;8669:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8417:361;;;;;:::o;9196:195::-;9304:12;;;9266;9304;;;;;;;;;-1:-1:-1;;;;;9283:7:0;;;9297:5;;9283:34;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9283:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9265:52;;;9336:7;9328:55;;;;-1:-1:-1;;;9328:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9196:195;;;:::o;5449:517::-;5542:14;5588:1;5577:8;:12;5569:68;;;;-1:-1:-1;;;5569:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5668:1;5656:9;:13;:31;;;;;5686:1;5673:10;:14;5656:31;5648:84;;;;-1:-1:-1;;;5648:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5743:20;5766:17;:8;5779:3;5766:12;:17::i;:::-;5743:40;-1:-1:-1;5794:14:0;5811:31;5743:40;5831:10;5811:19;:31::i;:::-;5794:48;-1:-1:-1;5853:16:0;5872:40;5896:15;5872:19;:9;5886:4;5872:13;:19::i;:::-;:23;;:40::i;:::-;5853:59;;5947:11;5935:9;:23;;;;;;;5449:517;-1:-1:-1;;;;;;;5449:517:0:o;6641:511::-;6742:21;6799:1;6784:4;:11;:16;;6776:59;;;;;-1:-1:-1;;;6776:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;6867:4;:11;6856:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6856:23:0;;6846:33;;6903:8;6890:7;6898:1;6890:10;;;;;;;;;;;;;:21;;;;;6927:6;6922:223;6953:1;6939:4;:11;:15;6935:1;:19;6922:223;;;6977:14;6993:15;7012:42;7024:7;7033:4;7038:1;7033:7;;;;;;;;;;;;;;7042:4;7047:1;7051;7047:5;7042:11;;;;;;;;;;;;;;7012;:42::i;:::-;6976:78;;;;7086:47;7099:7;7107:1;7099:10;;;;;;;;;;;;;;7111:9;7122:10;7086:12;:47::i;:::-;7069:7;7077:1;7081;7077:5;7069:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;6956:3:0;;6922:223;;;;6641:511;;;;;:::o;3966:478::-;4055:12;4081:14;4097;4115:26;4126:6;4134;4115:10;:26::i;:::-;4279:32;;;-1:-1:-1;;4279:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4269:43;;;;;;-1:-1:-1;;;;;;4182:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4172:262;;;;;;;;;3966:478;-1:-1:-1;;;;;3966:478:0:o;8786:402::-;9011:51;;;-1:-1:-1;;;;;9011:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9011:51:0;-1:-1:-1;;;9011:51:0;;;9000:63;;;;8965:12;;8979:17;;9000:10;;;;9011:51;9000:63;;;9011:51;9000:63;;9011:51;9000:63;;;;;;;;;;-1:-1:-1;;9000:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8964:99;;;;9082:7;:57;;;;-1:-1:-1;9094:11:0;;:16;;:44;;;9125:4;9114:24;;;;;;;;;;;;;;;-1:-1:-1;9114:24:0;9094:44;9074:106;;;;-1:-1:-1;;;9074:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8786:402;;;;;;:::o;24845:735::-;24952:6;24947:626;24978:1;24964:4;:11;:15;24960:1;:19;24947:626;;;25002:13;25017:14;25036:4;25041:1;25036:7;;;;;;;;;;;;;;25045:4;25050:1;25054;25050:5;25045:11;;;;;;;;;;;;;;25001:56;;;;25073:14;25092:42;25120:5;25127:6;25092:27;:42::i;:::-;25072:62;;;25149:14;25166:7;25174:1;25178;25174:5;25166:14;;;;;;;;;;;;;;25149:31;;25196:15;25213;25241:6;-1:-1:-1;;;;;25232:15:0;:5;-1:-1:-1;;;;;25232:15:0;;:61;;25274:9;25290:1;25232:61;;;25256:1;25260:9;25232:61;25195:98;;;;25308:10;25339:1;25325:4;:11;:15;25321:1;:19;:82;;25400:3;25321:82;;;25343:54;25368:7;25377:6;25385:4;25390:1;25394;25390:5;25385:11;;;;;;;;;;;;;;25343:24;:54::i;:::-;25308:95;;25433:48;25458:7;25467:5;25474:6;25433:24;:48::i;:::-;-1:-1:-1;;;;;25418:69:0;;25506:10;25518;25530:2;25544:1;25534:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25534:12:0;;25418:143;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25418:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24981:3:0;;;;;-1:-1:-1;24947:626:0;;-1:-1:-1;;;;;;;;24947:626:0;;;24845:735;;;:::o;7233:532::-;7334:21;7391:1;7376:4;:11;:16;;7368:59;;;;;-1:-1:-1;;;7368:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7459:4;:11;7448:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7448:23:0;;7438:33;;7512:9;7482:7;7507:1;7490:7;:14;:18;7482:27;;;;;;;;;;;;;;;;;:39;7546:11;;-1:-1:-1;;7546:15:0;7532:226;7563:5;;7532:226;;7591:14;7607:15;7626:42;7638:7;7647:4;7656:1;7652;:5;7647:11;;;;;;;;;;;;;;7660:4;7665:1;7660:7;;;;;;;7626:42;7590:78;;;;7700:46;7712:7;7720:1;7712:10;;;;;;;;;;;;;;7724:9;7735:10;7700:11;:46::i;:::-;7683:7;7695:1;7691;:5;7683:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;7570:3:0;7532:226;;30182:1221;30295:6;30290:1106;30321:1;30307:4;:11;:15;30303:1;:19;30290:1106;;;30345:13;30360:14;30379:4;30384:1;30379:7;;;;;;;;;;;;;;30388:4;30393:1;30397;30393:5;30388:11;;;;;;;;;;;;;;30344:56;;;;30416:14;30435:42;30463:5;30470:6;30435:27;:42::i;:::-;30415:62;;;30492:19;30529:48;30554:7;30563:5;30570:6;30529:24;:48::i;:::-;30492:86;;30593:16;30624:17;30712:13;30727;30745:4;-1:-1:-1;;;;;30745:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30745:18:0;;;;;;;-1:-1:-1;;;;;30711:52:0;;;;-1:-1:-1;30711:52:0;;-1:-1:-1;30779:17:0;;-1:-1:-1;;;;;30820:15:0;;;;;;;:61;;30862:8;30872;30820:61;;;30839:8;30849;30820:61;30778:103;;;;30910:63;30960:12;30924:5;-1:-1:-1;;;;;30910:30:0;;30949:4;30910:45;;;;;;;;;;;;;-1:-1:-1;;;;;30910:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;:63;30896:77;;31003:71;31033:11;31046:12;31060:13;31003:29;:71::i;:::-;30988:86;;30290:1106;;;;31105:15;31122;31150:6;-1:-1:-1;;;;;31141:15:0;:5;-1:-1:-1;;;;;31141:15:0;;:67;;31186:12;31205:1;31141:67;;;31165:1;31169:12;31141:67;31104:104;;;;31223:10;31254:1;31240:4;:11;:15;31236:1;:19;:82;;31315:3;31236:82;;;31258:54;31283:7;31292:6;31300:4;31305:1;31309;31305:5;31300:11;;;;;;;31258:54;31371:12;;;31381:1;31371:12;;;;;;;;;;-1:-1:-1;;;31333:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;31333:51:0;;;;;;;;;;;;;;;;;;;;;;31223:95;;-1:-1:-1;31333:9:0;;;;;;31343:10;;31355;;31223:95;;31371:12;;31333:51;;;;;;;;31371:12;;31333:51;;;;31371:12;;31333:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30324:3:0;;;;;-1:-1:-1;30290:1106:0;;-1:-1:-1;;;;;;;;;;30290:1106:0;2972:129;3056:5;;;3051:16;;;;3043:50;;;;;-1:-1:-1;;;3043:50:0;;;;;;;;;;;;-1:-1:-1;;;3043:50:0;;;;;;;;;;;;;;6087:472;6180:13;6226:1;6214:9;:13;6206:70;;;;-1:-1:-1;;;6206:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6307:1;6295:9;:13;:31;;;;;6325:1;6312:10;:14;6295:31;6287:84;;;;-1:-1:-1;;;6287:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6382:14;6399:34;6428:4;6399:24;:9;6413;6399:13;:24::i;:::-;:28;;:34::i;:::-;6382:51;-1:-1:-1;6444:16:0;6463:34;6493:3;6463:25;:10;6478:9;6463:14;:25::i;:34::-;6444:53;;6519:32;6549:1;6532:11;6520:9;:23;;;;;;;6519:29;:32::i;:::-;6508:43;6087:472;-1:-1:-1;;;;;;6087:472:0:o;5006:321::-;5088:12;5131:1;5121:7;:11;5113:61;;;;-1:-1:-1;;;5113:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5204:1;5193:8;:12;:28;;;;;5220:1;5209:8;:12;5193:28;5185:81;;;;-1:-1:-1;;;5185:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5311:8;5287:21;:7;5299:8;5287:11;:21::i;:::-;:32;;;;;;;5006:321;-1:-1:-1;;;;5006:321:0:o;3525:349::-;3600:14;3616;3661:6;-1:-1:-1;;;;;3651:16:0;:6;-1:-1:-1;;;;;3651:16:0;;;3643:66;;;;-1:-1:-1;;;3643:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3748:6;-1:-1:-1;;;;;3739:15:0;:6;-1:-1:-1;;;;;3739:15:0;;:53;;3777:6;3785;3739:53;;;3758:6;3766;3739:53;3720:72;;-1:-1:-1;3720:72:0;-1:-1:-1;;;;;;3811:20:0;;3803:63;;;;;-1:-1:-1;;;3803:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3525:349;;;;;:::o;17165:1390::-;17383:12;17397;17540:1;-1:-1:-1;;;;;17478:64:0;17496:7;-1:-1:-1;;;;;17478:34:0;;17513:6;17521;17478:50;;;;;;;;;;;;;-1:-1:-1;;;;;17478:50:0;;;;;;-1:-1:-1;;;;;17478:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17478:50:0;-1:-1:-1;;;;;17478:64:0;;17474:150;;;17577:7;-1:-1:-1;;;;;17559:37:0;;17597:6;17605;17559:53;;;;;;;;;;;;;-1:-1:-1;;;;;17559:53:0;;;;;;-1:-1:-1;;;;;17559:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17474:150:0;17635:13;17650;17667:53;17696:7;17705:6;17713;17667:28;:53::i;:::-;17634:86;;;;17735:8;17747:1;17735:13;:30;;;;-1:-1:-1;17752:13:0;;17735:30;17731:817;;;17804:14;;-1:-1:-1;17820:14:0;;-1:-1:-1;17731:817:0;;;17868:19;17890:58;17913:14;17929:8;17939;17890:22;:58::i;:::-;17868:80;;17985:14;17967;:32;17963:574;;18046:10;18028:14;:28;;18020:79;;;;-1:-1:-1;;;18020:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18140:14;;-1:-1:-1;18156:14:0;-1:-1:-1;18156:14:0;17963:574;;;18212:19;18234:58;18257:14;18273:8;18283;18234:22;:58::i;:::-;18212:80;;18336:14;18318;:32;;18311:40;;;;18396:10;18378:14;:28;;18370:79;;;;-1:-1:-1;;;18370:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18490:14;-1:-1:-1;18506:14:0;;-1:-1:-1;17963:574:0;17731:817;;17165:1390;;;;;;;;;;;:::o;3109:142::-;3161:6;3188;;;:30;;-1:-1:-1;;3203:5:0;;;3217:1;3212;3203:5;3212:1;3198:15;;;;;:20;3188:30;3180:63;;;;;-1:-1:-1;;;3180:63:0;;;;;;;;;;;;-1:-1:-1;;;3180:63:0;;;;;;;;;;;;;;2836:128;2920:5;;;2915:16;;;;2907:49;;;;;-1:-1:-1;;;2907:49:0;;;;;;;;;;;;-1:-1:-1;;;2907:49:0;;;;;;;;;;;;;;4502:391;4595:13;4610;4637:14;4656:26;4667:6;4675;4656:10;:26::i;:::-;4636:46;;;4694:13;4709;4742:32;4750:7;4759:6;4767;4742:7;:32::i;:::-;-1:-1:-1;;;;;4727:60:0;;:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4727:62:0;;;;;;;-1:-1:-1;;;;;4693:96:0;;;;-1:-1:-1;4693:96:0;;-1:-1:-1;;;;;;4823:16:0;;;;;;;:62;;4866:8;4876;4823:62;;;4843:8;4853;4823:62;4800:85;;;;-1:-1:-1;4502:391:0;-1:-1:-1;;;;;;;4502:391:0:o

Swarm Source

ipfs://1046181566cf8a35bd60f7e94b82dcde5a31b9e46aa697f15b739ad658b78711
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.