Contract 0xd9e1cE17f2641f24aE83637ab66a2cca9C378B9F 15

 
 
Txn Hash
Method
Block
From
To
Value
0xf0c7596894180bde652a2fd1585acb3de81874d9937ad9530f333a6fdd3892b8Swap Exact Token...(pending)2022-08-19 16:49:5050 secs ago0x12c63018f8d723b930e0c8a813be8a07970ba52e IN SushiSwap: Router0 Ether(Pending)(Pending)
0x3f464f6fa8fd14d13dce87af090eea53f1a04322afe818b450bec559f8b34225Swap Exact Token...(pending)2022-08-19 16:49:201 min ago0x11ce580b7d64fb08f73161aa95835202ae1c9417 IN SushiSwap: Router0 Ether(Pending)(Pending)
0x6c2c4d8e8572af6a91b6935a484b06baac3f1d49f6b1211031cd52d16221f0bcSwap Exact ETH F...(pending)2022-08-19 16:38:3212 mins ago0x96b6ff0189a3873f71665159356eb0dd7fd43c9b IN SushiSwap: Router0.001 Ether(Pending)(Pending)
0x8c411ae8f3f33b9e7352141579a6f57fb4ef0f2eaf55376939f35a2fbfb2dfcdSwap Exact ETH F...(pending)2022-08-19 16:35:1015 mins ago0x0365085e0bfd1f179a47f5284551da5e2569fcf7 IN SushiSwap: Router0.00000161 Ether(Pending)(Pending)
0x4bdd9cb6191b68f86f7abdacfafe82176ec7972700d88da4118ac8e79a735ad7Swap Exact ETH F...(pending)2022-08-19 15:54:4755 mins ago0x9116f64007d0057508a15d98829edfbfdf9af94a IN SushiSwap: Router0.00006 Ether(Pending)(Pending)
0x44e90ea6985f9079a126e92edf18ca886f2508b24e08ccb63dcb0c36c275f41fSwap Exact Token...(pending)2022-08-19 15:46:091 hr 4 mins ago0x8eeab549c1d3092ef2321570b6541985b2186e1a IN SushiSwap: Router0 Ether(Pending)(Pending)
0x4a1dd76f297d174870234f95297715b2466057aad84a42ea68bf9bddfce13abfSwap Exact ETH F...(pending)2022-08-19 15:32:461 hr 17 mins ago0xfcaaa0e51ef8612c4c5fde78e48a207e9f29fbdc IN SushiSwap: Router0.007 Ether(Pending)(Pending)
0xd2a01ee00d416ae7cf2a986bd5455bd665eb687c1f020b20c23b4cb1ef1825b6Swap Exact ETH F...(pending)2022-08-19 15:32:461 hr 17 mins ago0xfcaaa0e51ef8612c4c5fde78e48a207e9f29fbdc IN SushiSwap: Router0.005 Ether(Pending)(Pending)
0xb7e7476bc68decc7165340107ae4c971b2b286f61b636978140946e98b177fb6Swap ETH For Exa...(pending)2022-08-19 15:20:521 hr 29 mins ago0xcf3d8e453c6c5acf34906a0bfb8aa2c777f2c27f IN SushiSwap: Router0.022789543958240654 Ether(Pending)(Pending)
0x4cad69f08a39aba4a28e4b4fc338736ca3b8c355034386e742e8690912b25f03Swap Exact ETH F...(pending)2022-08-19 14:30:382 hrs 20 mins ago0xb4ae1b89632a6628ad5094875bdaa7a67ded3f91 IN SushiSwap: Router0.0028 Ether(Pending)(Pending)
0xfaeb9c43e54a2422523f6410b768f3fa7068dc40b3d7d4eba6fbbb21c8fbf466Swap Exact ETH F...(pending)2022-08-19 14:29:362 hrs 21 mins ago0xb4ae1b89632a6628ad5094875bdaa7a67ded3f91 IN SushiSwap: Router0.0028 Ether(Pending)(Pending)
0x39a5e31e98ef33c1fd1bf596dc8bafbe6e1fbb74fe2c2b9637c377911bdfcaf8Swap Exact ETH F...(pending)2022-08-19 14:27:002 hrs 23 mins ago0xb4ae1b89632a6628ad5094875bdaa7a67ded3f91 IN SushiSwap: Router0.0028 Ether(Pending)(Pending)
0x2ad7a282ca50b643213bb6a2ef97f282da74236dd54227496d905444e9239d65Swap Exact ETH F...(pending)2022-08-19 14:25:522 hrs 24 mins ago0xb4ae1b89632a6628ad5094875bdaa7a67ded3f91 IN SushiSwap: Router0.0028 Ether(Pending)(Pending)
0xcbbc11976aa300521ec713aa708060afb6a9c7607d909c0c459499666dce5444Swap Exact ETH F...(pending)2022-08-19 14:22:312 hrs 28 mins ago0xb4ae1b89632a6628ad5094875bdaa7a67ded3f91 IN SushiSwap: Router0.0009 Ether(Pending)(Pending)
0x213372ee09af97ba605a16ad438427039d88c18ee49378fc8524bae735fc50c5Swap Exact ETH F...(pending)2022-08-19 9:00:457 hrs 49 mins ago0xb82daba3c1057a20f41bd525a12626faab7057e1 IN SushiSwap: Router0.0281 Ether(Pending)(Pending)
0x4aa76471addd614fcfca93f88fdeeb9be4caa49453ba2ddd3f9f0ccbe1744957Add Liquidity ET...(pending)2022-08-18 17:16:5123 hrs 33 mins ago0x26c9b63e248cc9b736ef2843c362da3f56bd605f IN SushiSwap: Router0.000432079556770833 Ether(Pending)(Pending)
0x4215a6ca15ebe084952f8e31dc2dd6abde8f7601c7d7b0b2a9e000c88586b68bSwap Exact Token...(pending)2022-08-18 16:38:261 day 12 mins ago0x543af3018cfa6f325adc8a338268c5ac537de11f IN SushiSwap: Router0 Ether(Pending)(Pending)
0x6d26e3c4da5b8ce7fcf40e758c6f93ab961e71fae917dcf3444db0183f611304Remove Liquidity...(pending)2022-08-18 12:01:111 day 4 hrs ago0x7f9d402956d24933c73918fd23b8951d4fe29599 IN SushiSwap: Router0 Ether(Pending)(Pending)
0x27b6ffcd40a696787f7fcd7ea953fac4d118ed8d78fdc30bc1476c9d707b86b5Swap Exact ETH F...(pending)2022-08-18 10:09:191 day 6 hrs ago0xe9bd9af9ce9b3de7b090142046c8e6666fff018a IN SushiSwap: Router0.0003 Ether(Pending)(Pending)
0x9f4d5008f6468e41e43bdb5dbc41dc54642123ec21f5b71d0dca21e2161dd7acRemove Liquidity...(pending)2022-08-18 8:07:581 day 8 hrs ago0x05190ff26392bd741bb32dab2e595c91f5fb3fbe IN SushiSwap: Router0 Ether(Pending)(Pending)
0x44eaf7b2e3dfdb4150e3f7b1361112d74d9290cfa6c3424a09a9b834248c4471Swap Exact ETH F...(pending)2022-08-18 5:30:301 day 11 hrs ago0xa316414bb8ada73c79dd859f9ebf017d22644c16 IN SushiSwap: Router0.000008 Ether(Pending)(Pending)
0x24fac2b33ababa2e4285c6909e707e7c7ec35873893a59ae3c0d000180bf19f6Swap Exact ETH F...(pending)2022-08-18 0:07:181 day 16 hrs ago0x549c34bc9e440468feea1755c64d5cff67f7b847 IN SushiSwap: Router0.0008 Ether(Pending)(Pending)
0xd991220320020df5a8a8cfffa8fbf65088580a5c9bac96dd1561ae22dfb96060Swap Exact ETH F...(pending)2022-08-16 5:26:363 days 11 hrs ago0xa251ddd0cef9d9e94368ebdc516f70c6d0a9217d IN SushiSwap: Router0.003 Ether(Pending)(Pending)
0xce1680a30a8ae25bb293e4c4f0cf373166bbc7dcc0634cad21331736a09b514cSwap Exact ETH F...(pending)2022-08-16 1:57:383 days 14 hrs ago0xd9d5c0cba1c531c12135494b33aa7a3574bdf2b7 IN SushiSwap: Router0.0075 Ether(Pending)(Pending)
0xeb198b884340f1fd52b68f514d2675a8a966ebd935ed79872feeda4b66a151c8Swap Exact ETH F...(pending)2022-08-16 0:00:433 days 16 hrs ago0xc22f30ff444de84982516e37552ff473c1d6e5e3 IN SushiSwap: Router0.0008 Ether(Pending)(Pending)
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x4773a2139b19e062d797165e05e09aaef5bd9f2661b160c83ba48647094c1959153724582022-08-19 16:47:173 mins ago SushiSwap: Router0xe93827582b59eb3b2d2b5032ca7afc477495e8570.33998168 Ether
0x4773a2139b19e062d797165e05e09aaef5bd9f2661b160c83ba48647094c1959153724582022-08-19 16:47:173 mins ago Wrapped Ether SushiSwap: Router0.33998168 Ether
0x86cbc0368bdc86f01e0256f00c894c4f1f51e23a26ab371acda7760cbdfab5a0153724432022-08-19 16:44:206 mins ago SushiSwap: Router Wrapped Ether10 Ether
0x8c5aa070f1fe48408ef1b4227c2ed62ede7cecf374465fae35d40f2ebf0534f2153724192022-08-19 16:40:1910 mins ago SushiSwap: Router Wrapped Ether1 Ether
0x8c5aa070f1fe48408ef1b4227c2ed62ede7cecf374465fae35d40f2ebf0534f2153724192022-08-19 16:40:1910 mins ago 0x978671d5125c28ab7ee8acf2196f02d7cd75d009 SushiSwap: Router1 Ether
0xacbfb09f460291400e50b9d4f2eda7d2cf894d92f6458985798fcea4c09e0fc7153724172022-08-19 16:40:0910 mins ago SushiSwap: Router Wrapped Ether0.2 Ether
0x9ff39a6595c7a38a8059da013ffc5809315fddfec8eab14a503cdeb15e3f68ee153724042022-08-19 16:37:4912 mins ago SushiSwap: Router Wrapped Ether2 Ether
0x9ff39a6595c7a38a8059da013ffc5809315fddfec8eab14a503cdeb15e3f68ee153724042022-08-19 16:37:4912 mins ago 0x978671d5125c28ab7ee8acf2196f02d7cd75d009 SushiSwap: Router2 Ether
0xe911c3ebaf3f81f3563b007c632f2931b5f33d8a912c7e0a39349b4166997f27153724002022-08-19 16:37:2813 mins ago SushiSwap: Router0xd474d21d58caca907406c8c1a7219e62044249dc5 Ether
0xe911c3ebaf3f81f3563b007c632f2931b5f33d8a912c7e0a39349b4166997f27153724002022-08-19 16:37:2813 mins ago Wrapped Ether SushiSwap: Router5 Ether
0x43294349f5f3d7d8924d9f8e237b96b61841cec4cee6796eb57d56c40da1b91b153723982022-08-19 16:37:0213 mins ago SushiSwap: Router Wrapped Ether0.6 Ether
0x466b78d9f8b2dab653b0495452ee63ba46fa43de1eeb13d50ff573fd5dc449a4153723972022-08-19 16:36:4213 mins ago SushiSwap: Router Wrapped Ether2 Ether
0x466b78d9f8b2dab653b0495452ee63ba46fa43de1eeb13d50ff573fd5dc449a4153723972022-08-19 16:36:4213 mins ago 0x978671d5125c28ab7ee8acf2196f02d7cd75d009 SushiSwap: Router2 Ether
0x801b56c570df54d2e93d23bb7cbebbb8c4c020b959d36bd3a2e722c91d9a9168153723912022-08-19 16:35:2715 mins ago SushiSwap: Router Wrapped Ether1 Ether
0x801b56c570df54d2e93d23bb7cbebbb8c4c020b959d36bd3a2e722c91d9a9168153723912022-08-19 16:35:2715 mins ago 0x978671d5125c28ab7ee8acf2196f02d7cd75d009 SushiSwap: Router1 Ether
0xbe5e851f9b7fb504b4c8b7ccdbacd55ac7d769d1bcf9c252eaaf7460799a283b153723892022-08-19 16:35:0915 mins ago SushiSwap: Router0x4b9e26528493ed06fee210c5a3bbeef62eadfde41.20762655 Ether
0xbe5e851f9b7fb504b4c8b7ccdbacd55ac7d769d1bcf9c252eaaf7460799a283b153723892022-08-19 16:35:0915 mins ago Wrapped Ether SushiSwap: Router1.20762655 Ether
0x1f55cccd39b5a5b1f7b53414c1d06734a002af17a46aeede0fcfc8b16017afa4153723872022-08-19 16:34:4615 mins ago SushiSwap: Router0x7c2b81371eb12d5f1bfd34270dad104740d5d5c30.00497818 Ether
0x1f55cccd39b5a5b1f7b53414c1d06734a002af17a46aeede0fcfc8b16017afa4153723872022-08-19 16:34:4615 mins ago SushiSwap: Router Wrapped Ether0.99563719 Ether
0x3e01e4c940954c0195c8b129d8ffe9b9d77d11f325aaacf3d5a42fcc833cefcf153723832022-08-19 16:33:1817 mins ago SushiSwap: Router0x11584d6aaebfdbf48cd5a11599bf40b5bc3868370.05819395 Ether
0x3e01e4c940954c0195c8b129d8ffe9b9d77d11f325aaacf3d5a42fcc833cefcf153723832022-08-19 16:33:1817 mins ago Wrapped Ether SushiSwap: Router0.05819395 Ether
0xa5cbcab0706b1b502363b40d1c98d92779cffc5a606f9bd3133bed4c076258cf153723742022-08-19 16:31:3019 mins ago SushiSwap: Router0x18a56fa33df11d1a024aebe054755ddcf7db4dfa0.21889088 Ether
0xa5cbcab0706b1b502363b40d1c98d92779cffc5a606f9bd3133bed4c076258cf153723742022-08-19 16:31:3019 mins ago Wrapped Ether SushiSwap: Router0.21889088 Ether
0x6d97c93cc5ed4f5a8bc65b79858e165314c4048a8a20faabcf4610c1c507c507153723742022-08-19 16:31:3019 mins ago SushiSwap: RouterENS Name vault.punksotc.eth0.3560437 Ether
0x6d97c93cc5ed4f5a8bc65b79858e165314c4048a8a20faabcf4610c1c507c507153723742022-08-19 16:31:3019 mins ago Wrapped Ether SushiSwap: Router0.3560437 Ether
[ Download CSV Export 
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 Etherscan.io on 2020-09-04
*/

// 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 Security Audit

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"}]

60c060405234801561001057600080fd5b50604051620046e7380380620046e78339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c614562620001856000398061015f5280610ce45280610d1f5280610e16528061103452806113be528061152452806118d352806119ae5280611a885280611b565280611c9c5280611d245280611f605280611fdb528061208f528061215b52806121f05280612264528061274752806129b15280612a075280612a3b5280612aaf5280612c3d5280612d805280612e08525080610ea45280610f7b52806110fa5280611133528061126e528061144c528061150252806116725280611be95280611d565280611eb0528061229652806124d452806126cc52806126f55280612725528061289252806129e55280612cd05280612e3a52806136c0528061370352806139dd5280613b535280613f445280613ffd52806140b052506145626000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b038135169060200135611885565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b0e565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e58565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e65565b34801561088157600080fd5b5061088a611f5e565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f82565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611f8f565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b038135169060200135612115565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612486565b348015610a1c57600080fd5b5061088a6126ca565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506126ee945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561271b565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e0013561282f565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612962565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612bf5565b6000808242811015610cde576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612486565b9093509150610d1d898685612f6e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da585836130d8565b50965096945050505050565b6000610dbe8484846131d0565b949350505050565b60608142811015610e0c576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b815260206004820152601d602482015260008051602061442a833981519152604482015290519081900360640190fd5b610efd7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506132a892505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b815260040180806020018281038252602b815260200180614493602b913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b03166133f4565b85600081518110610fe657fe5b60200260200101516134b4565b61103282878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613611915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b60200260200101516130d8565b509695505050505050565b60606111207f0000000000000000000000000000000000000000000000000000000000000000848461384e565b90505b92915050565b60008060006111597f00000000000000000000000000000000000000000000000000000000000000008f8f6133f4565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f612486565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b6112c77f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506132a892505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b815260040180806020018281038252602b815260200180614493602b913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e882878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613611915050565b606081428110156113b4576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b815260206004820152601d602482015260008051602061442a833981519152604482015290519081900360640190fd5b6114a57f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061384e92505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b81526004018080602001828103825260278152602001806144036027913960400191505060405180910390fd5b6000806115487f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006133f4565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611f8f565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a6134b4565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561172f57600080fd5b505afa158015611743573d6000803e3d6000fd5b505050506040513d602081101561175957600080fd5b5051604080516020888102828101820190935288825292935061179b929091899189918291850190849080828437600092019190915250889250613986915050565b8661183e82888860001981018181106117b057fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561180c57600080fd5b505afa158015611820573d6000803e3d6000fd5b505050506040513d602081101561183657600080fd5b505190613c88565b101561187b5760405162461bcd60e51b815260040180806020018281038252602b815260200180614493602b913960400191505060405180910390fd5b5050505050505050565b80428110156118c9576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061190357fe5b905060200201356001600160a01b03166001600160a01b03161461195c576040805162461bcd60e51b815260206004820152601d602482015260008051602061442a833981519152604482015290519081900360640190fd5b61196c8585600081811061165c57fe5b6119aa858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613986915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611a1957600080fd5b505afa158015611a2d573d6000803e3d6000fd5b505050506040513d6020811015611a4357600080fd5b5051905086811015611a865760405162461bcd60e51b815260040180806020018281038252602b815260200180614493602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aec57600080fd5b505af1158015611b00573d6000803e3d6000fd5b5050505061187b84826130d8565b60608142811015611b54576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b8b57fe5b905060200201356001600160a01b03166001600160a01b031614611be4576040805162461bcd60e51b815260206004820152601d602482015260008051602061442a833981519152604482015290519081900360640190fd5b611c427f0000000000000000000000000000000000000000000000000000000000000000348888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506132a892505050565b91508682600184510381518110611c5557fe5b60200260200101511015611c9a5760405162461bcd60e51b815260040180806020018281038252602b815260200180614493602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611cd657fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d0957600080fd5b505af1158015611d1d573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d827f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110611d8f57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611ddd57600080fd5b505af1158015611df1573d6000803e3d6000fd5b505050506040513d6020811015611e0757600080fd5b5051611e0f57fe5b611e4e82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613611915050565b5095945050505050565b6000610dbe848484613cd8565b60608142811015611eab576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b611f097f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061384e92505050565b91508682600081518110611f1957fe5b6020026020010151111561131f5760405162461bcd60e51b81526004018080602001828103825260278152602001806144036027913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613db0565b60008142811015611fd5576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b612004887f00000000000000000000000000000000000000000000000000000000000000008989893089612486565b90508092505061208d88858a6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561205c57600080fd5b505afa158015612070573d6000803e3d6000fd5b505050506040513d602081101561208657600080fd5b5051612f6e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156120f357600080fd5b505af1158015612107573d6000803e3d6000fd5b505050506110e884836130d8565b8042811015612159576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168585600081811061219057fe5b905060200201356001600160a01b03166001600160a01b0316146121e9576040805162461bcd60e51b815260206004820152601d602482015260008051602061442a833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561224957600080fd5b505af115801561225d573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122c27f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561230957600080fd5b505af115801561231d573d6000803e3d6000fd5b505050506040513d602081101561233357600080fd5b505161233b57fe5b60008686600019810181811061234d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156123a957600080fd5b505afa1580156123bd573d6000803e3d6000fd5b505050506040513d60208110156123d357600080fd5b505160408051602089810282810182019093528982529293506124159290918a918a918291850190849080828437600092019190915250899250613986915050565b8761183e828989600019810181811061242a57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561180c57600080fd5b60008082428110156124cd576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b60006124fa7f00000000000000000000000000000000000000000000000000000000000000008c8c6133f4565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561255557600080fd5b505af1158015612569573d6000803e3d6000fd5b505050506040513d602081101561257f57600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125cc57600080fd5b505af11580156125e0573d6000803e3d6000fd5b505050506040513d60408110156125f657600080fd5b508051602090910151909250905060006126108e8e613e56565b509050806001600160a01b03168e6001600160a01b031614612633578183612636565b82825b90975095508a87101561267a5760405162461bcd60e51b815260040180806020018281038252602681526020018061444a6026913960400191505060405180910390fd5b898610156126b95760405162461bcd60e51b81526004018080602001828103825260268152602001806143906026913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111207f000000000000000000000000000000000000000000000000000000000000000084846132a8565b600080600061276b7f00000000000000000000000000000000000000000000000000000000000000008e7f00000000000000000000000000000000000000000000000000000000000000006133f4565b905060008761277a578c61277e565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156127f457600080fd5b505af1158015612808573d6000803e3d6000fd5b5050505061281a8e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b60008060008342811015612878576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b6128868c8c8c8c8c8c613f34565b909450925060006128b87f00000000000000000000000000000000000000000000000000000000000000008e8e6133f4565b90506128c68d3383886134b4565b6128d28c3383876134b4565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b15801561292157600080fd5b505af1158015612935573d6000803e3d6000fd5b505050506040513d602081101561294b57600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129ab576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b6129d98a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613f34565b90945092506000612a2b7f00000000000000000000000000000000000000000000000000000000000000008c7f00000000000000000000000000000000000000000000000000000000000000006133f4565b9050612a398b3383886134b4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a9457600080fd5b505af1158015612aa8573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b2457600080fd5b505af1158015612b38573d6000803e3d6000fd5b505050506040513d6020811015612b4e57600080fd5b5051612b5657fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b158015612ba557600080fd5b505af1158015612bb9573d6000803e3d6000fd5b505050506040513d6020811015612bcf57600080fd5b5051925034841015612be757612be7338534036130d8565b505096509650969350505050565b60608142811015612c3b576040805162461bcd60e51b8152602060048201526018602482015260008051602061450d833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612c7257fe5b905060200201356001600160a01b03166001600160a01b031614612ccb576040805162461bcd60e51b815260206004820152601d602482015260008051602061442a833981519152604482015290519081900360640190fd5b612d297f00000000000000000000000000000000000000000000000000000000000000008888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061384e92505050565b91503482600081518110612d3957fe5b60200260200101511115612d7e5760405162461bcd60e51b81526004018080602001828103825260278152602001806144036027913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612dba57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612ded57600080fd5b505af1158015612e01573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612e667f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110612e7357fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612ec157600080fd5b505af1158015612ed5573d6000803e3d6000fd5b505050506040513d6020811015612eeb57600080fd5b5051612ef357fe5b612f3282878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613611915050565b81600081518110612f3f57fe5b6020026020010151341115611e4e57611e4e3383600081518110612f5f57fe5b602002602001015134036130d8565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310612feb5780518252601f199092019160209182019101612fcc565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461304d576040519150601f19603f3d011682016040523d82523d6000602084013e613052565b606091505b5091509150818015613080575080511580613080575080806020019051602081101561307d57600080fd5b50515b6130d1576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106131245780518252601f199092019160209182019101613105565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613186576040519150601f19603f3d011682016040523d82523d6000602084013e61318b565b606091505b50509050806131cb5760405162461bcd60e51b81526004018080602001828103825260238152602001806144706023913960400191505060405180910390fd5b505050565b60008084116132105760405162461bcd60e51b815260040180806020018281038252602b8152602001806144e2602b913960400191505060405180910390fd5b6000831180156132205750600082115b61325b5760405162461bcd60e51b81526004018080602001828103825260288152602001806143b66028913960400191505060405180910390fd5b6000613269856103e56141c5565b9050600061327782856141c5565b905060006132918361328b886103e86141c5565b90614228565b905080828161329c57fe5b04979650505050505050565b6060600282511015613301576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561331957600080fd5b50604051908082528060200260200182016040528015613343578160200160208202803683370190505b509050828160008151811061335457fe5b60200260200101818152505060005b60018351038110156133ec576000806133a68786858151811061338257fe5b602002602001015187866001018151811061339957fe5b6020026020010151614277565b915091506133c88484815181106133b957fe5b602002602001015183836131d0565b8484600101815181106133d757fe5b60209081029190910101525050600101613363565b509392505050565b60008060006134038585613e56565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527fe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135395780518252601f19909201916020918201910161351a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461359b576040519150601f19603f3d011682016040523d82523d6000602084013e6135a0565b606091505b50915091508180156135ce5750805115806135ce57508080602001905160208110156135cb57600080fd5b50515b6136095760405162461bcd60e51b81526004018080602001828103825260248152602001806144be6024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138485760008084838151811061362f57fe5b602002602001015185846001018151811061364657fe5b602002602001015191509150600061365e8383613e56565b509050600087856001018151811061367257fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146136a0578260006136a4565b6000835b91509150600060028a510388106136bb57886136fc565b6136fc7f0000000000000000000000000000000000000000000000000000000000000000878c8b600201815181106136ef57fe5b60200260200101516133f4565b90506137297f000000000000000000000000000000000000000000000000000000000000000088886133f4565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613766576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156137ce5781810151838201526020016137b6565b50505050905090810190601f1680156137fb5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561381d57600080fd5b505af1158015613831573d6000803e3d6000fd5b505060019099019850613614975050505050505050565b50505050565b60606002825110156138a7576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff811180156138bf57600080fd5b506040519080825280602002602001820160405280156138e9578160200160208202803683370190505b50905082816001835103815181106138fd57fe5b60209081029190910101528151600019015b80156133ec5760008061393f8786600186038151811061392b57fe5b602002602001015187868151811061339957fe5b9150915061396184848151811061395257fe5b60200260200101518383613cd8565b84600185038151811061397057fe5b602090810291909101015250506000190161390f565b60005b60018351038110156131cb576000808483815181106139a457fe5b60200260200101518584600101815181106139bb57fe5b60200260200101519150915060006139d38383613e56565b5090506000613a037f000000000000000000000000000000000000000000000000000000000000000085856133f4565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613a4457600080fd5b505afa158015613a58573d6000803e3d6000fd5b505050506040513d6060811015613a6e57600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613aa4578284613aa7565b83835b91509150613afc828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561180c57600080fd5b9550613b098683836131d0565b945050505050600080856001600160a01b0316886001600160a01b031614613b3357826000613b37565b6000835b91509150600060028c51038a10613b4e578a613b82565b613b827f0000000000000000000000000000000000000000000000000000000000000000898e8d600201815181106136ef57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c0c578181015183820152602001613bf4565b50505050905090810190601f168015613c395780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613c5b57600080fd5b505af1158015613c6f573d6000803e3d6000fd5b50506001909b019a506139899950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613d185760405162461bcd60e51b815260040180806020018281038252602c81526020018061433f602c913960400191505060405180910390fd5b600083118015613d285750600082115b613d635760405162461bcd60e51b81526004018080602001828103825260288152602001806143b66028913960400191505060405180910390fd5b6000613d7b6103e8613d7586886141c5565b906141c5565b90506000613d8f6103e5613d758689613c88565b9050613da66001828481613d9f57fe5b0490614228565b9695505050505050565b6000808411613df05760405162461bcd60e51b81526004018080602001828103825260258152602001806143de6025913960400191505060405180910390fd5b600083118015613e005750600082115b613e3b5760405162461bcd60e51b81526004018080602001828103825260288152602001806143b66028913960400191505060405180910390fd5b82613e4685846141c5565b81613e4d57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613eaa5760405162461bcd60e51b815260040180806020018281038252602581526020018061436b6025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613eca578284613ecd565b83835b90925090506001600160a01b038216613f2d576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b60008060006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e6a439058a8a6040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b158015613fc057600080fd5b505afa158015613fd4573d6000803e3d6000fd5b505050506040513d6020811015613fea57600080fd5b50516001600160a01b031614156140a8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c9c6539689896040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050602060405180830381600087803b15801561407b57600080fd5b505af115801561408f573d6000803e3d6000fd5b505050506040513d60208110156140a557600080fd5b50505b6000806140d67f00000000000000000000000000000000000000000000000000000000000000008b8b614277565b915091508160001480156140e8575080155b156140f8578793508692506141b8565b6000614105898484613db0565b9050878111614158578581101561414d5760405162461bcd60e51b81526004018080602001828103825260268152602001806143906026913960400191505060405180910390fd5b8894509250826141b6565b6000614165898486613db0565b90508981111561417157fe5b878110156141b05760405162461bcd60e51b815260040180806020018281038252602681526020018061444a6026913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806141e0575050808202828282816141dd57fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006142868585613e56565b5090506000806142978888886133f4565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156142cf57600080fd5b505afa1580156142e3573d6000803e3d6000fd5b505050506040513d60608110156142f957600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b038781169084161461432c57808261432f565b81815b9099909850965050505050505056fe556e697377617056324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056324c6962726172793a204944454e544943414c5f414444524553534553556e69737761705632526f757465723a20494e53554646494349454e545f425f414d4f554e54556e697377617056324c6962726172793a20494e53554646494349454e545f4c4951554944495459556e697377617056324c6962726172793a20494e53554646494349454e545f414d4f554e54556e69737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e54556e69737761705632526f757465723a20494e56414c49445f50415448000000556e69737761705632526f757465723a20494e53554646494349454e545f415f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544556e69737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544556e697377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54556e69737761705632526f757465723a20455850495245440000000000000000a26469706673582212201a0e72eba857efceb7536b575054edf695c72ba17a7f5f982cae2177edf424ce64736f6c634300060c0033000000000000000000000000c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2

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

000000000000000000000000c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2

-----Decoded View---------------
Arg [0] : _factory (address): 0xc0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac
Arg [1] : _WETH (address): 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac
Arg [1] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2


Deployed ByteCode Sourcemap

16480:18605:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16969:10;-1:-1:-1;;;;;16983:4:0;16969:18;;16962:26;;;;16480:18605;;;;;21119:673;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21119:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;34029:262;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34029:262:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;28295:850;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28295:850:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28295:850:0;;;;;;;;;;;;-1:-1:-1;28295:850:0;-1:-1:-1;;;;;;28295:850:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34829:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34829:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34829:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34829:253:0;;-1:-1:-1;34829:253:0;;-1:-1:-1;;;;;34829:253:0:i;21798:677::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21798:677:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25512:628::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25512:628:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25512:628:0;;;;;;;;;;;;-1:-1:-1;25512:628:0;-1:-1:-1;;;;;;25512:628:0;;;;;;;;:::i;27461:828::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27461:828:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27461:828:0;;;;;;;;;;;;-1:-1:-1;27461:828:0;-1:-1:-1;;;;;;27461:828:0;;;;;;;;:::i;23942:718::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23942:718:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31335:728::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31335:728:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31335:728:0;;;;;;;;;;;;-1:-1:-1;31335:728:0;-1:-1:-1;;;;;;31335:728:0;;;;;;;;:::i;32939:850::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32939:850:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32939:850:0;;;;;;;;;;;;-1:-1:-1;32939:850:0;-1:-1:-1;;;;;;32939:850:0;;;;;;;;:::i;26758:697::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26758:697:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26758:697:0;;;;;;;;;;;;-1:-1:-1;26758:697:0;-1:-1:-1;;;;;;26758:697:0;;;;;;;;:::i;34299:261::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34299:261:0;;;;;;;;;;;;:::i;26146:606::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26146:606:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26146:606:0;;;;;;;;;;;;-1:-1:-1;26146:606:0;-1:-1:-1;;;;;;26146:606:0;;;;;;;;:::i;16623:38::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;16623:38:0;;;;;;;;;;;;;;33833:188;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33833:188:0;;;;;;;;;;;;:::i;23229:707::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23229:707:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32069:864::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32069:864:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32069:864:0;;;;;;;;;;;;-1:-1:-1;32069:864:0;-1:-1:-1;;;;;;32069:864:0;;;;;;;;:::i;20248:865::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20248:865:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16575:41::-;;;;;;;;;;;;;:::i;34568:253::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34568:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34568:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34568:253:0;;-1:-1:-1;34568:253:0;;-1:-1:-1;;;;;34568:253:0:i;22481:669::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22481:669:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18487:738::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18487:738:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;19231:974;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19231:974:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29151:810::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29151:810:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29151:810:0;;;;;;;;;;;;-1:-1:-1;29151:810:0;-1:-1:-1;;;;;;29151:810:0;;;;;;;;:::i;21119:673::-;21356:16;21374:14;21337:8;16732:15;16720:8;:27;;16712:64;;;;;-1:-1:-1;;;16712:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:64:0;;;;;;;;;;;;;;;21428:196:::1;21458:5;21478:4;21497:9;21521:14;21550:12;21585:4;21605:8;21428:15;:196::i;:::-;21401:223:::0;;-1:-1:-1;21401:223:0;-1:-1:-1;21635:51:0::1;21663:5:::0;21670:2;21401:223;21635:27:::1;:51::i;:::-;21703:4;-1:-1:-1::0;;;;;21697:20:0::1;;21718:9;21697:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21739:45;21770:2;21774:9;21739:30;:45::i;:::-;21119:673:::0;;;;;;;;;;:::o;34029:262::-;34182:14;34221:62;34251:8;34261:9;34272:10;34221:29;:62::i;:::-;34214:69;34029:262;-1:-1:-1;;;;34029:262:0:o;28295:850::-;28509:21;28481:8;16732:15;16720:8;:27;;16712:64;;;;;-1:-1:-1;;;16712:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28581:4:0::1;28556:29;:4:::0;;-1:-1:-1;;28561:15:0;;28556:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28556:21:0::1;-1:-1:-1::0;;;;;28556:29:0::1;;28548:71;;;::::0;;-1:-1:-1;;;28548:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28548:71:0;;;;;;;;;;;;;::::1;;28640:55;28671:7;28680:8;28690:4;;28640:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;28640:30:0::1;::::0;-1:-1:-1;;;28640:55:0:i:1;:::-;28630:65;;28745:12;28714:7;28739:1;28722:7;:14;:18;28714:27;;;;;;;;;;;;;;:43;;28706:99;;;;-1:-1:-1::0;;;28706:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28816:141;28862:4;;28867:1;28862:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28862:7:0::1;28871:10;28883:51;28908:7;28917:4;;28922:1;28917:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28917:7:0::1;28926:4;;28931:1;28926:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28926:7:0::1;28883:24;:51::i;:::-;28936:7;28944:1;28936:10;;;;;;;;;;;;;;28816:31;:141::i;:::-;28968:35;28974:7;28983:4;;28968:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;28997:4:0::1;::::0;-1:-1:-1;28968:5:0::1;::::0;-1:-1:-1;;28968:35:0:i:1;:::-;29020:4;-1:-1:-1::0;;;;;29014:20:0::1;;29035:7;29060:1;29043:7;:14;:18;29035:27;;;;;;;;;;;;;;29014:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29074:63;29105:2;29109:7;29134:1;29117:7;:14;:18;29109:27;;;;;;;;;;;;;;29074:30;:63::i;:::-;28295:850:::0;;;;;;;;;:::o;34829:253::-;34973:21;35019:55;35049:7;35058:9;35069:4;35019:29;:55::i;:::-;35012:62;;34829:253;;;;;:::o;21798:677::-;22104:12;22118;22143;22158:49;22183:7;22192:6;22200;22158:24;:49::i;:::-;22143:64;;22218:10;22231;:33;;22255:9;22231:33;;;-1:-1:-1;;22231:33:0;22275:80;;;-1:-1:-1;;;22275:80:0;;22303:10;22275:80;;;;22323:4;22275:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22218:46;;-1:-1:-1;;;;;;22275:27:0;;;;;:80;;;;;-1:-1:-1;;22275:80:0;;;;;;;;-1:-1:-1;22275:27:0;:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22387;22403:6;22411;22419:9;22430:10;22442;22454:2;22458:8;22387:15;:80::i;:::-;22366:101;;;;;;;;21798:677;;;;;;;;;;;;;;;;:::o;25512:628::-;25736:21;25717:8;16732:15;16720:8;:27;;16712:64;;;;;-1:-1:-1;;;16712:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:64:0;;;;;;;;;;;;;;;25780:55:::1;25811:7;25820:8;25830:4;;25780:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;25780:30:0::1;::::0;-1:-1:-1;;;25780:55:0:i:1;:::-;25770:65;;25885:12;25854:7;25879:1;25862:7;:14;:18;25854:27;;;;;;;;;;;;;;:43;;25846:99;;;;-1:-1:-1::0;;;25846:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25956:141;26002:4;;26007:1;26002:7;;;;;;25956:141;26108:24;26114:7;26123:4;;26108:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;26129:2:0;;-1:-1:-1;26108:5:0::1;::::0;-1:-1:-1;;26108:24:0:i:1;27461:828::-:0;27675:21;27647:8;16732:15;16720:8;:27;;16712:64;;;;;-1:-1:-1;;;16712:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27747:4:0::1;27722:29;:4:::0;;-1:-1:-1;;27727:15:0;;27722:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27722:21:0::1;-1:-1:-1::0;;;;;27722:29:0::1;;27714:71;;;::::0;;-1:-1:-1;;;27714:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27714:71:0;;;;;;;;;;;;;::::1;;27806:55;27836:7;27845:9;27856:4;;27806:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27806:29:0::1;::::0;-1:-1:-1;;;27806:55:0:i:1;:::-;27796:65;;27894:11;27880:7;27888:1;27880:10;;;;;;;;;;;;;;:25;;27872:77;;;;-1:-1:-1::0;;;27872:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23942:718:::0;24260:14;24287:12;24302:46;24327:7;24336:5;24343:4;24302:24;:46::i;:::-;24287:61;;24359:10;24372;:33;;24396:9;24372:33;;;-1:-1:-1;;24372:33:0;24416:80;;;-1:-1:-1;;;24416:80:0;;24444:10;24416:80;;;;24464:4;24416:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24359:46;;-1:-1:-1;;;;;;24416:27:0;;;;;:80;;;;;-1:-1:-1;;24416:80:0;;;;;;;;-1:-1:-1;24416:27:0;:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24519:133;24581:5;24588:9;24599:14;24615:12;24629:2;24633:8;24519:47;:133::i;:::-;24507:145;23942:718;-1:-1:-1;;;;;;;;;;;;;23942:718:0:o;31335:728::-;31569:8;16732:15;16720:8;:27;;16712:64;;;;;-1:-1:-1;;;16712:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:64:0;;;;;;;;;;;;;;;31590:139:::1;31636:4;;31641:1;31636:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31636:7:0::1;31645:10;31657:51;31682:7;31691:4;;31696:1;31691:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31691:7:0::1;31700:4;;31705:1;31700:7;;;;;;31657:51;31710:8;31590:31;:139::i;:::-;31740:18;31775:4:::0;;-1:-1:-1;;31780:15:0;;31775:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31775:21:0::1;-1:-1:-1::0;;;;;31761:46:0::1;;31808:2;31761:50;;;;;;;;;;;;;-1:-1:-1::0;;;;;31761:50:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31761:50:0;31822:44:::1;::::0;;31761:50:::1;31822:44:::0;;::::1;::::0;;;;;;;;;;;31761:50;;-1:-1:-1;31822:44:0::1;::::0;;;31857:4;;;;;;31822:44;::::1;::::0;31857:4;;31822:44;31857:4;31822:44;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;31863:2:0;;-1:-1:-1;31822:34:0::1;::::0;-1:-1:-1;;31822:44:0:i:1;:::-;31972:12:::0;31899:69:::1;31954:13:::0;31913:4;;-1:-1:-1;;31918:15:0;;31913:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31913:21:0::1;-1:-1:-1::0;;;;;31899:46:0::1;;31946:2;31899:50;;;;;;;;;;;;;-1:-1:-1::0;;;;;31899:50:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31899:50:0;;:54:::1;:69::i;:::-;:85;;31877:178;;;;-1:-1:-1::0;;;31877:178:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16787:1;31335:728:::0;;;;;;;:::o;32939:850::-;33206:8;16732:15;16720:8;:27;;16712:64;;;;;-1:-1:-1;;;16712:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33265:4:0::1;33240:29;:4:::0;;-1:-1:-1;;33245:15:0;;33240:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33240:21:0::1;-1:-1:-1::0;;;;;33240:29:0::1;;33232:71;;;::::0;;-1:-1:-1;;;33232:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33232:71:0;;;;;;;;;;;;;::::1;;33314:139;33360:4;;33365:1;33360:7;;;;;;33314:139;33464:55;33499:4;;33464:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;33513:4:0::1;::::0;-1:-1:-1;33464:34:0::1;::::0;-1:-1:-1;;33464:55:0:i:1;:::-;33530:14;33561:4;-1:-1:-1::0;;;;;33547:29:0::1;;33585:4;33547:44;;;;;;;;;;;;;-1:-1:-1::0;;;;;33547:44:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;33547:44:0;;-1:-1:-1;33610:25:0;;::::1;;33602:81;;;;-1:-1:-1::0;;;33602:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33700:4;-1:-1:-1::0;;;;;33694:20:0::1;;33715:9;33694:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33736:45;33767:2;33771:9;33736:30;:45::i;26758:697::-:0;26974:21;26946:8;16732:15;16720:8;:27;;16712:64;;;;;-1:-1:-1;;;16712:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:64:0;;;;;;;;;;;;;;;27032:4:::1;-1:-1:-1::0;;;;;27021:15:0::1;:4;;27026:1;27021:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27021:7:0::1;-1:-1:-1::0;;;;;27021:15:0::1;;27013:57;;;::::0;;-1:-1:-1;;;27013:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27013:57:0;;;;;;;;;;;;;::::1;;27091:56;27122:7;27131:9;27142:4;;27091:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27091:30:0::1;::::0;-1:-1:-1;;;27091:56:0:i:1;:::-;27081:66;;27197:12;27166:7;27191:1;27174:7;:14;:18;27166:27;;;;;;;;;;;;;;:43;;27158:99;;;;-1:-1:-1::0;;;27158:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27274:4;-1:-1:-1::0;;;;;27268:19:0::1;;27295:7;27303:1;27295:10;;;;;;;;;;;;;;27268:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;27332:4;-1:-1:-1::0;;;;;27326:20:0::1;;27347:51;27372:7;27381:4;;27386:1;27381:7;;;;;;27347:51;27400:7;27408:1;27400:10;;;;;;;;;;;;;;27326:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;27326:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;27326:85:0;27319:93:::1;;;;27423:24;27429:7;27438:4;;27423:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27444:2:0;;-1:-1:-1;27423:5:0::1;::::0;-1:-1:-1;;27423:24:0:i:1;:::-;26758:697:::0;;;;;;;;:::o;34299:261::-;34452:13;34490:62;34519:9;34530;34541:10;34490:28;:62::i;26146:606::-;26370:21;26351:8;16732:15;16720:8;:27;;16712:64;;;;;-1:-1:-1;;;16712:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:64:0;;;;;;;;;;;;;;;26414:55:::1;26444:7;26453:9;26464:4;;26414:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;26414:29:0::1;::::0;-1:-1:-1;;;26414:55:0:i:1;:::-;26404:65;;26502:11;26488:7;26496:1;26488:10;;;;;;;;;;;;;;:25;;26480:77;;;;-1:-1:-1::0;;;26480:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16623:38:::0;;;:::o;33833:188::-;33930:12;33962:51;33985:7;33994:8;34004;33962:22;:51::i;23229:707::-;23495:14;23476:8;16732:15;16720:8;:27;;16712:64;;;;;-1:-1:-1;;;16712:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:64:0;;;;;;;;;;;;;;;23538:196:::1;23568:5;23588:4;23607:9;23631:14;23660:12;23695:4;23715:8;23538:15;:196::i;:::-;23522:212;;;;;;23745:85;23773:5;23780:2;23798:5;-1:-1:-1::0;;;;;23784:30:0::1;;23823:4;23784:45;;;;;;;;;;;;;-1:-1:-1::0;;;;;23784:45:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;23784:45:0;23745:27:::1;:85::i;:::-;23847:4;-1:-1:-1::0;;;;;23841:20:0::1;;23862:9;23841:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23883:45;23914:2;23918:9;23883:30;:45::i;32069:864::-:0;32329:8;16732:15;16720:8;:27;;16712:64;;;;;-1:-1:-1;;;16712:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:64:0;;;;;;;;;;;;;;;32374:4:::1;-1:-1:-1::0;;;;;32363:15:0::1;:4;;32368:1;32363:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32363:7:0::1;-1:-1:-1::0;;;;;32363:15:0::1;;32355:57;;;::::0;;-1:-1:-1;;;32355:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32355:57:0;;;;;;;;;;;;;::::1;;32423:13;32439:9;32423:25;;32465:4;-1:-1:-1::0;;;;;32459:19:0::1;;32486:8;32459:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;32521:4;-1:-1:-1::0;;;;;32515:20:0::1;;32536:51;32561:7;32570:4;;32575:1;32570:7;;;;;;32536:51;32589:8;32515:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;32515:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32515:83:0;32508:91:::1;;;;32610:18;32645:4:::0;;-1:-1:-1;;32650:15:0;;32645:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32645:21:0::1;-1:-1:-1::0;;;;;32631:46:0::1;;32678:2;32631:50;;;;;;;;;;;;;-1:-1:-1::0;;;;;32631:50:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32631:50:0;32692:44:::1;::::0;;32631:50:::1;32692:44:::0;;::::1;::::0;;;;;;;;;;;32631:50;;-1:-1:-1;32692:44:0::1;::::0;;;32727:4;;;;;;32692:44;::::1;::::0;32727:4;;32692:44;32727:4;32692:44;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;32733:2:0;;-1:-1:-1;32692:34:0::1;::::0;-1:-1:-1;;32692:44:0:i:1;:::-;32842:12:::0;32769:69:::1;32824:13:::0;32783:4;;-1:-1:-1;;32788:15:0;;32783:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32783:21:0::1;-1:-1:-1::0;;;;;32769:46:0::1;;32816:2;32769:50;;;;;;;;;;;;;-1:-1:-1::0;;;;;32769:50:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;20248:865:::0;20502:12;20516;20483:8;16732:15;16720:8;:27;;16712:64;;;;;-1:-1:-1;;;16712:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:64:0;;;;;;;;;;;;;;;20541:12:::1;20556:49;20581:7;20590:6;20598;20556:24;:49::i;:::-;20616:62;::::0;;-1:-1:-1;;;20616:62:0;;20650:10:::1;20616:62;::::0;::::1;::::0;-1:-1:-1;;;;;20616:33:0;::::1;:62:::0;;;;;;;;;;;;;;20541:64;;-1:-1:-1;20616:33:0;;::::1;::::0;:62;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20616:33:0;:62;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;20746:29:0::1;::::0;;-1:-1:-1;;;20746:29:0;;-1:-1:-1;;;;;20746:29:0;;::::1;;::::0;::::1;::::0;;;20716:12:::1;::::0;;;20746:25;;::::1;::::0;::::1;::::0;:29;;;;;;;;;;;20716:12;20746:25;:29;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;20746:29:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20746:29:0;-1:-1:-1;20787:14:0::1;20806:43;20834:6:::0;20842;20806:27:::1;:43::i;:::-;20786:63;;;20891:6;-1:-1:-1::0;;;;;20881:16:0::1;:6;-1:-1:-1::0;;;;;20881:16:0::1;;:58;;20922:7;20931;20881:58;;;20901:7;20910;20881:58;20860:79:::0;;-1:-1:-1;20860:79:0;-1:-1:-1;20958:21:0;;::::1;;20950:72;;;;-1:-1:-1::0;;;20950:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21052:10;21041:7;:21;;21033:72;;;;-1:-1:-1::0;;;21033:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16787:1;;;;20248:865:::0;;;;;;;;;;;:::o;16575:41::-;;;:::o;34568:253::-;34712:21;34758:55;34789:7;34798:8;34808:4;34758:30;:55::i;22481:669::-;22770:16;22788:14;22815:12;22830:46;22855:7;22864:5;22871:4;22830:24;:46::i;:::-;22815:61;;22887:10;22900;:33;;22924:9;22900:33;;;-1:-1:-1;;22900:33:0;22944:80;;;-1:-1:-1;;;22944:80:0;;22972:10;22944:80;;;;22992:4;22944:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22887:46;;-1:-1:-1;;;;;;22944:27:0;;;;;:80;;;;;-1:-1:-1;;22944:80:0;;;;;;;;-1:-1:-1;22944:27:0;:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23062;23081:5;23088:9;23099:14;23115:12;23129:2;23133:8;23062:18;:80::i;:::-;23035:107;;;;-1:-1:-1;22481:669:0;-1:-1:-1;;;;;;;;;;;;;22481:669:0:o;18487:738::-;18775:12;18789;18803:14;18756:8;16732:15;16720:8;:27;;16712:64;;;;;-1:-1:-1;;;16712:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:64:0;;;;;;;;;;;;;;;18851:85:::1;18865:6;18873;18881:14;18897;18913:10;18925;18851:13;:85::i;:::-;18830:106:::0;;-1:-1:-1;18830:106:0;-1:-1:-1;18947:12:0::1;18962:49;18987:7;18996:6:::0;19004;18962:24:::1;:49::i;:::-;18947:64;;19022:66;19054:6;19062:10;19074:4;19080:7;19022:31;:66::i;:::-;19099;19131:6;19139:10;19151:4;19157:7;19099:31;:66::i;:::-;19203:4;-1:-1:-1::0;;;;;19188:25:0::1;;19214:2;19188:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;19188:29:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19188:29:0;18487:738;;;;-1:-1:-1;19188:29:0;;-1:-1:-1;18487:738:0;;-1:-1:-1;;;;;;;;;18487:738:0:o;19231:974::-;19484:16;19502:14;19518;19465:8;16732:15;16720:8;:27;;16712:64;;;;;-1:-1:-1;;;16712:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:64:0;;;;;;;;;;;;;;;19572:176:::1;19600:5;19620:4;19639:18;19672:9;19696:14;19725:12;19572:13;:176::i;:::-;19545:203:::0;;-1:-1:-1;19545:203:0;-1:-1:-1;19759:12:0::1;19774:46;19799:7;19808:5:::0;19815:4:::1;19774:24;:46::i;:::-;19759:61;;19831:69;19863:5;19870:10;19882:4;19888:11;19831:31;:69::i;:::-;19917:4;-1:-1:-1::0;;;;;19911:19:0::1;;19938:9;19911:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;19974:4;-1:-1:-1::0;;;;;19968:20:0::1;;19989:4;19995:9;19968:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;19968:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19968:37:0;19961:45:::1;;;;20044:4;-1:-1:-1::0;;;;;20029:25:0::1;;20055:2;20029:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;20029:29:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;20029:29:0;;-1:-1:-1;20109:9:0::1;:21:::0;-1:-1:-1;20105:92:0::1;;;20132:65;20163:10;20187:9;20175;:21;20132:30;:65::i;:::-;16787:1;19231:974:::0;;;;;;;;;;;:::o;29151:810::-;29364:21;29336:8;16732:15;16720:8;:27;;16712:64;;;;;-1:-1:-1;;;16712:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:64:0;;;;;;;;;;;;;;;29422:4:::1;-1:-1:-1::0;;;;;29411:15:0::1;:4;;29416:1;29411:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29411:7:0::1;-1:-1:-1::0;;;;;29411:15:0::1;;29403:57;;;::::0;;-1:-1:-1;;;29403:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;29403:57:0;;;;;;;;;;;;;::::1;;29481:55;29511:7;29520:9;29531:4;;29481:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29481:29:0::1;::::0;-1:-1:-1;;;29481:55:0:i:1;:::-;29471:65;;29569:9;29555:7;29563:1;29555:10;;;;;;;;;;;;;;:23;;29547:75;;;;-1:-1:-1::0;;;29547:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29639:4;-1:-1:-1::0;;;;;29633:19:0::1;;29660:7;29668:1;29660:10;;;;;;;;;;;;;;29633:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;29697:4;-1:-1:-1::0;;;;;29691:20:0::1;;29712:51;29737:7;29746:4;;29751:1;29746:7;;;;;;29712:51;29765:7;29773:1;29765:10;;;;;;;;;;;;;;29691:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;29691:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;29691:85:0;29684:93:::1;;;;29788:24;29794:7;29803:4;;29788:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29809:2:0;;-1:-1:-1;29788:5:0::1;::::0;-1:-1:-1;;29788:24:0:i:1;:::-;29875:7;29883:1;29875:10;;;;;;;;;;;;;;29863:9;:22;29859:94;;;29887:66;29918:10;29942:7;29950:1;29942:10;;;;;;;;;;;;;;29930:9;:22;29887:30;:66::i;8343:361::-:0;8538:45;;;-1:-1:-1;;;;;8538:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8538:45:0;-1:-1:-1;;;8538:45:0;;;8527:57;;;;8492:12;;8506:17;;8527:10;;;;8538:45;8527:57;;;8538:45;8527:57;;8538:45;8527:57;;;;;;;;;;-1:-1:-1;;8527:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8491:93;;;;8603:7;:57;;;;-1:-1:-1;8615:11:0;;:16;;:44;;;8646:4;8635:24;;;;;;;;;;;;;;;-1:-1:-1;8635:24:0;8615:44;8595:101;;;;;-1:-1:-1;;;8595:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8343:361;;;;;:::o;9122:195::-;9230:12;;;9192;9230;;;;;;;;;-1:-1:-1;;;;;9209:7:0;;;9223:5;;9209:34;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9209:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9191:52;;;9262:7;9254:55;;;;-1:-1:-1;;;9254:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9122:195;;;:::o;5375:517::-;5468:14;5514:1;5503:8;:12;5495:68;;;;-1:-1:-1;;;5495:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5594:1;5582:9;:13;:31;;;;;5612:1;5599:10;:14;5582:31;5574:84;;;;-1:-1:-1;;;5574:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5669:20;5692:17;:8;5705:3;5692:12;:17::i;:::-;5669:40;-1:-1:-1;5720:14:0;5737:31;5669:40;5757:10;5737:19;:31::i;:::-;5720:48;-1:-1:-1;5779:16:0;5798:40;5822:15;5798:19;:9;5812:4;5798:13;:19::i;:::-;:23;;:40::i;:::-;5779:59;;5873:11;5861:9;:23;;;;;;;5375:517;-1:-1:-1;;;;;;;5375:517:0:o;6567:511::-;6668:21;6725:1;6710:4;:11;:16;;6702:59;;;;;-1:-1:-1;;;6702:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;6793:4;:11;6782:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6782:23:0;;6772:33;;6829:8;6816:7;6824:1;6816:10;;;;;;;;;;;;;:21;;;;;6853:6;6848:223;6879:1;6865:4;:11;:15;6861:1;:19;6848:223;;;6903:14;6919:15;6938:42;6950:7;6959:4;6964:1;6959:7;;;;;;;;;;;;;;6968:4;6973:1;6977;6973:5;6968:11;;;;;;;;;;;;;;6938;:42::i;:::-;6902:78;;;;7012:47;7025:7;7033:1;7025:10;;;;;;;;;;;;;;7037:9;7048:10;7012:12;:47::i;:::-;6995:7;7003:1;7007;7003:5;6995:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;6882:3:0;;6848:223;;;;6567:511;;;;;:::o;3892:478::-;3981:12;4007:14;4023;4041:26;4052:6;4060;4041:10;:26::i;:::-;4205:32;;;-1:-1:-1;;4205:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4195:43;;;;;;-1:-1:-1;;;;;;4108:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4098:262;;;;;;;;;3892:478;-1:-1:-1;;;;;3892:478:0:o;8712:402::-;8937:51;;;-1:-1:-1;;;;;8937:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8937:51:0;-1:-1:-1;;;8937:51:0;;;8926:63;;;;8891:12;;8905:17;;8926:10;;;;8937:51;8926:63;;;8937:51;8926:63;;8937:51;8926:63;;;;;;;;;;-1:-1:-1;;8926:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8890:99;;;;9008:7;:57;;;;-1:-1:-1;9020:11:0;;:16;;:44;;;9051:4;9040:24;;;;;;;;;;;;;;;-1:-1:-1;9040:24:0;9020:44;9000:106;;;;-1:-1:-1;;;9000:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8712:402;;;;;;:::o;24771:735::-;24878:6;24873:626;24904:1;24890:4;:11;:15;24886:1;:19;24873:626;;;24928:13;24943:14;24962:4;24967:1;24962:7;;;;;;;;;;;;;;24971:4;24976:1;24980;24976:5;24971:11;;;;;;;;;;;;;;24927:56;;;;24999:14;25018:42;25046:5;25053:6;25018:27;:42::i;:::-;24998:62;;;25075:14;25092:7;25100:1;25104;25100:5;25092:14;;;;;;;;;;;;;;25075:31;;25122:15;25139;25167:6;-1:-1:-1;;;;;25158:15:0;:5;-1:-1:-1;;;;;25158:15:0;;:61;;25200:9;25216:1;25158:61;;;25182:1;25186:9;25158:61;25121:98;;;;25234:10;25265:1;25251:4;:11;:15;25247:1;:19;:82;;25326:3;25247:82;;;25269:54;25294:7;25303:6;25311:4;25316:1;25320;25316:5;25311:11;;;;;;;;;;;;;;25269:24;:54::i;:::-;25234:95;;25359:48;25384:7;25393:5;25400:6;25359:24;:48::i;:::-;-1:-1:-1;;;;;25344:69:0;;25432:10;25444;25456:2;25470:1;25460:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25460:12:0;;25344:143;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25344:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24907:3:0;;;;;-1:-1:-1;24873:626:0;;-1:-1:-1;;;;;;;;24873:626:0;;;24771:735;;;:::o;7159:532::-;7260:21;7317:1;7302:4;:11;:16;;7294:59;;;;;-1:-1:-1;;;7294:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7385:4;:11;7374:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7374:23:0;;7364:33;;7438:9;7408:7;7433:1;7416:7;:14;:18;7408:27;;;;;;;;;;;;;;;;;:39;7472:11;;-1:-1:-1;;7472:15:0;7458:226;7489:5;;7458:226;;7517:14;7533:15;7552:42;7564:7;7573:4;7582:1;7578;:5;7573:11;;;;;;;;;;;;;;7586:4;7591:1;7586:7;;;;;;;7552:42;7516:78;;;;7626:46;7638:7;7646:1;7638:10;;;;;;;;;;;;;;7650:9;7661:10;7626:11;:46::i;:::-;7609:7;7621:1;7617;:5;7609:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;7496:3:0;7458:226;;30108:1221;30221:6;30216:1106;30247:1;30233:4;:11;:15;30229:1;:19;30216:1106;;;30271:13;30286:14;30305:4;30310:1;30305:7;;;;;;;;;;;;;;30314:4;30319:1;30323;30319:5;30314:11;;;;;;;;;;;;;;30270:56;;;;30342:14;30361:42;30389:5;30396:6;30361:27;:42::i;:::-;30341:62;;;30418:19;30455:48;30480:7;30489:5;30496:6;30455:24;:48::i;:::-;30418:86;;30519:16;30550:17;30638:13;30653;30671:4;-1:-1:-1;;;;;30671:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30671:18:0;;;;;;;-1:-1:-1;;;;;30637:52:0;;;;-1:-1:-1;30637:52:0;;-1:-1:-1;30705:17:0;;-1:-1:-1;;;;;30746:15:0;;;;;;;:61;;30788:8;30798;30746:61;;;30765:8;30775;30746:61;30704:103;;;;30836:63;30886:12;30850:5;-1:-1:-1;;;;;30836:30:0;;30875:4;30836:45;;;;;;;;;;;;;-1:-1:-1;;;;;30836:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;:63;30822:77;;30929:71;30959:11;30972:12;30986:13;30929:29;:71::i;:::-;30914:86;;30216:1106;;;;31031:15;31048;31076:6;-1:-1:-1;;;;;31067:15:0;:5;-1:-1:-1;;;;;31067:15:0;;:67;;31112:12;31131:1;31067:67;;;31091:1;31095:12;31067:67;31030:104;;;;31149:10;31180:1;31166:4;:11;:15;31162:1;:19;:82;;31241:3;31162:82;;;31184:54;31209:7;31218:6;31226:4;31231:1;31235;31231:5;31226:11;;;;;;;31184:54;31297:12;;;31307:1;31297:12;;;;;;;;;;-1:-1:-1;;;31259:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;31259:51:0;;;;;;;;;;;;;;;;;;;;;;31149:95;;-1:-1:-1;31259:9:0;;;;;;31269:10;;31281;;31149:95;;31297:12;;31259:51;;;;;;;;31297:12;;31259:51;;;;31297:12;;31259:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30250:3:0;;;;;-1:-1:-1;30216:1106:0;;-1:-1:-1;;;;;;;;;;30216:1106:0;2898:129;2982:5;;;2977:16;;;;2969:50;;;;;-1:-1:-1;;;2969:50:0;;;;;;;;;;;;-1:-1:-1;;;2969:50:0;;;;;;;;;;;;;;6013:472;6106:13;6152:1;6140:9;:13;6132:70;;;;-1:-1:-1;;;6132:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6233:1;6221:9;:13;:31;;;;;6251:1;6238:10;:14;6221:31;6213:84;;;;-1:-1:-1;;;6213:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6308:14;6325:34;6354:4;6325:24;:9;6339;6325:13;:24::i;:::-;:28;;:34::i;:::-;6308:51;-1:-1:-1;6370:16:0;6389:34;6419:3;6389:25;:10;6404:9;6389:14;:25::i;:34::-;6370:53;;6445:32;6475:1;6458:11;6446:9;:23;;;;;;;6445:29;:32::i;:::-;6434:43;6013:472;-1:-1:-1;;;;;;6013:472:0:o;4932:321::-;5014:12;5057:1;5047:7;:11;5039:61;;;;-1:-1:-1;;;5039:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5130:1;5119:8;:12;:28;;;;;5146:1;5135:8;:12;5119:28;5111:81;;;;-1:-1:-1;;;5111:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5237:8;5213:21;:7;5225:8;5213:11;:21::i;:::-;:32;;;;;;;4932:321;-1:-1:-1;;;;4932:321:0:o;3451:349::-;3526:14;3542;3587:6;-1:-1:-1;;;;;3577:16:0;:6;-1:-1:-1;;;;;3577:16:0;;;3569:66;;;;-1:-1:-1;;;3569:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3674:6;-1:-1:-1;;;;;3665:15:0;:6;-1:-1:-1;;;;;3665:15:0;;:53;;3703:6;3711;3665:53;;;3684:6;3692;3665:53;3646:72;;-1:-1:-1;3646:72:0;-1:-1:-1;;;;;;3737:20:0;;3729:63;;;;;-1:-1:-1;;;3729:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3451:349;;;;;:::o;17091:1390::-;17309:12;17323;17466:1;-1:-1:-1;;;;;17404:64:0;17422:7;-1:-1:-1;;;;;17404:34:0;;17439:6;17447;17404:50;;;;;;;;;;;;;-1:-1:-1;;;;;17404:50:0;;;;;;-1:-1:-1;;;;;17404:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17404:50:0;-1:-1:-1;;;;;17404:64:0;;17400:150;;;17503:7;-1:-1:-1;;;;;17485:37:0;;17523:6;17531;17485:53;;;;;;;;;;;;;-1:-1:-1;;;;;17485:53:0;;;;;;-1:-1:-1;;;;;17485:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17400:150:0;17561:13;17576;17593:53;17622:7;17631:6;17639;17593:28;:53::i;:::-;17560:86;;;;17661:8;17673:1;17661:13;:30;;;;-1:-1:-1;17678:13:0;;17661:30;17657:817;;;17730:14;;-1:-1:-1;17746:14:0;;-1:-1:-1;17657:817:0;;;17794:19;17816:58;17839:14;17855:8;17865;17816:22;:58::i;:::-;17794:80;;17911:14;17893;:32;17889:574;;17972:10;17954:14;:28;;17946:79;;;;-1:-1:-1;;;17946:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18066:14;;-1:-1:-1;18082:14:0;-1:-1:-1;18082:14:0;17889:574;;;18138:19;18160:58;18183:14;18199:8;18209;18160:22;:58::i;:::-;18138:80;;18262:14;18244;:32;;18237:40;;;;18322:10;18304:14;:28;;18296:79;;;;-1:-1:-1;;;18296:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18416:14;-1:-1:-1;18432:14:0;;-1:-1:-1;17889:574:0;17657:817;;17091:1390;;;;;;;;;;;:::o;3035:142::-;3087:6;3114;;;:30;;-1:-1:-1;;3129:5:0;;;3143:1;3138;3129:5;3138:1;3124:15;;;;;:20;3114:30;3106:63;;;;;-1:-1:-1;;;3106:63:0;;;;;;;;;;;;-1:-1:-1;;;3106:63:0;;;;;;;;;;;;;;2762:128;2846:5;;;2841:16;;;;2833:49;;;;;-1:-1:-1;;;2833:49:0;;;;;;;;;;;;-1:-1:-1;;;2833:49:0;;;;;;;;;;;;;;4428:391;4521:13;4536;4563:14;4582:26;4593:6;4601;4582:10;:26::i;:::-;4562:46;;;4620:13;4635;4668:32;4676:7;4685:6;4693;4668:7;:32::i;:::-;-1:-1:-1;;;;;4653:60:0;;:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4653:62:0;;;;;;;-1:-1:-1;;;;;4619:96:0;;;;-1:-1:-1;4619:96:0;;-1:-1:-1;;;;;;4749:16:0;;;;;;;:62;;4792:8;4802;4749:62;;;4769:8;4779;4749:62;4726:85;;;;-1:-1:-1;4428:391:0;-1:-1:-1;;;;;;;4428:391:0:o

Swarm Source

ipfs://1a0e72eba857efceb7536b575054edf695c72ba17a7f5f982cae2177edf424ce
Block Transaction Difficulty Gas Used Reward
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.

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.