Contract 0xf164fC0Ec4E93095b804a4795bBe1e041497b92a 8

Txn Hash
Method
Block
From
To
Value
0xf6243b477fd1e7f4c3d028d60a17c66f3b6c2df82181f331eae54544566ccd36Swap Exact Token...113397512022-09-07 16:54:5521 days 21 hrs ago0x48ac73739d1aae5b5d4feb576ee146f5e3ddfd12 IN  0xf164fc0ec4e93095b804a4795bbe1e041497b92a0 Ether0.00004627 2.00000001
0x3c3b03000e04d87287f81dae039eb547557587c2e2647f0135f54ed61b3063a3Swap Exact ETH F...113097422022-09-02 10:24:2727 days 3 hrs ago0xcbfb15e6e34c946d5e3b098a13012b6ed42a1cab IN  0xf164fc0ec4e93095b804a4795bbe1e041497b92a0.02 Ether0.00015308 1.5
0x80576b2dfab3479c77ee417426a0225826fa742520d8ac6beba22050bc4f22e7Swap Exact Token...111482482022-08-05 8:05:1255 days 6 hrs ago0x4425798e74ab2b4a65e92689b9ec9f96046e798a IN  0xf164fc0ec4e93095b804a4795bbe1e041497b92a0 Ether0.0006407 10
0xcbd62e6d576d2ba0b6de6c930ed9d67095baab3fd741ae661615a99a6af69f39Swap Exact Token...111481972022-08-05 7:52:2555 days 6 hrs ago0x4425798e74ab2b4a65e92689b9ec9f96046e798a IN  0xf164fc0ec4e93095b804a4795bbe1e041497b92a0 Ether0.00064058 10
0x676ceef2c52c52b698587c33070970e5e761e759ec9ca862a2de5e9ae72fbdfbSwap Exact Token...111481892022-08-05 7:50:2555 days 6 hrs ago0x4425798e74ab2b4a65e92689b9ec9f96046e798a IN  0xf164fc0ec4e93095b804a4795bbe1e041497b92a0 Ether0.00051743 10
0x02a366f4e7a51b3e346629516609f92979ed09ec47d223368d9968486b55c78eSwap Exact Token...111480992022-08-05 7:27:5055 days 6 hrs ago0x4425798e74ab2b4a65e92689b9ec9f96046e798a IN  0xf164fc0ec4e93095b804a4795bbe1e041497b92a0 Ether0.00024399 10
0x389d9598f1f264e7096e33a0fa84ac0171dc06662dc979a1c598cf67b0f48b52Swap Exact Token...111480742022-08-05 7:21:3455 days 6 hrs ago0x4425798e74ab2b4a65e92689b9ec9f96046e798a IN  0xf164fc0ec4e93095b804a4795bbe1e041497b92a0 Ether0.00103912 10
0xf1a07789c8e48d0904d8c13fe39b612d5251c0b7c6f1f94dd4a4782f9e22af69Swap Exact Token...111480602022-08-05 7:18:0355 days 7 hrs ago0x4425798e74ab2b4a65e92689b9ec9f96046e798a IN  0xf164fc0ec4e93095b804a4795bbe1e041497b92a0 Ether0.00023492 10
0x55b9a296b96edeb25147dfcdede5dbc0b59fe199a6a7d7f76f6a4a4ce2ea4aadAdd Liquidity109510832022-07-02 0:47:0289 days 13 hrs ago0x9c95b0ef2d3e1d9ca479524ba738c87be28c1585 IN  0xf164fc0ec4e93095b804a4795bbe1e041497b92a0 Ether0.0040575 1.5
0x33373d6a5d855be6afc4293eb37e686a1aab614bf1db714609aa2f0a86b4eddfAdd Liquidity ET...109129022022-06-25 9:21:5496 days 4 hrs ago0x6321286f9b73f427c72e1f9f1bc6b3d25ef06605 IN  0xf164fc0ec4e93095b804a4795bbe1e041497b92a0.05 Ether0.00023528 1
0x9a6e40a7bfdd10f98ac0d934432e55dc880737d6986007c86ba29e341933dee9Add Liquidity ET...109128922022-06-25 9:19:2396 days 5 hrs ago0x6321286f9b73f427c72e1f9f1bc6b3d25ef06605 IN  0xf164fc0ec4e93095b804a4795bbe1e041497b92a0.05 Ether0.00005257 1.00000001
0xece5ccda412defd41530c1d356ae9447f10f986ed1338892df16c780b642e196Add Liquidity ET...109127272022-06-25 8:38:0396 days 5 hrs ago0x6321286f9b73f427c72e1f9f1bc6b3d25ef06605 IN  0xf164fc0ec4e93095b804a4795bbe1e041497b92a0.05 Ether0.00010514 2
0xb2fd6feaf3b8654266ab42f04211ce23a77fbf95b4fb485ca39bbab321f6a3e4Add Liquidity ET...109093322022-06-24 18:05:1096 days 20 hrs ago0x6321286f9b73f427c72e1f9f1bc6b3d25ef06605 IN  0xf164fc0ec4e93095b804a4795bbe1e041497b92a0.05 Ether0.00005257 1.00000001
0x7123fac547fb416628528bab27aea10d8b092049cc1b81d656cd931b7eaa5cf2Add Liquidity109092502022-06-24 17:44:3596 days 20 hrs ago0x6321286f9b73f427c72e1f9f1bc6b3d25ef06605 IN  0xf164fc0ec4e93095b804a4795bbe1e041497b92a0 Ether0.0000235 1.00000001
0xec49a7bf7e41e770a22324aed15efda737403f6dc51500b9ae1a99f37f94d93cAdd Liquidity ET...109090122022-06-24 16:44:5296 days 21 hrs ago0x6321286f9b73f427c72e1f9f1bc6b3d25ef06605 IN  0xf164fc0ec4e93095b804a4795bbe1e041497b92a0.05 Ether0.0000229 1
0xe5dc45b3f2926e7e09d83bd5d55de1946d702904f9824d2995231c8df1ac9522Add Liquidity107164612022-05-21 19:56:59130 days 18 hrs ago0xc0fa625c761f14b0691354e74a54bc65f664d7bb IN  0xf164fc0ec4e93095b804a4795bbe1e041497b92a0 Ether0.00677206 2.5
0xbfab7a274570a26440ef60e6260ab9ef88c06682bc3f802db3f7df468d6ee295Add Liquidity106208942022-05-05 2:45:12147 days 11 hrs ago0xb47d5c16b37cad20573db593f03e4c3387b5060b IN  0xf164fc0ec4e93095b804a4795bbe1e041497b92a0 Ether0.00034964 1.50000001
0x3cb6420a802e7a18146ccb7f46f1c39ecef9baeda59014c7eec22f699bb59608Swap Exact ETH F...106150512022-05-04 2:21:44148 days 11 hrs ago0x88fb637040591f997e541ea769be2fabcc78697b IN  0xf164fc0ec4e93095b804a4795bbe1e041497b92a0.1 Ether0.00017859 1.50000005
0x914e7a14dfdbc42f49d3206b104599a799d6c7fafc62390b3ce19c38343df908Add Liquidity105931012022-04-30 6:43:29152 days 7 hrs ago0xb47d5c16b37cad20573db593f03e4c3387b5060b IN  0xf164fc0ec4e93095b804a4795bbe1e041497b92a0 Ether0.00050661 2.17355721
0x53fa58a2b2bec136dd2abbd3a3197fda765d2b7b9f140dae0e2f6bde2960b752Add Liquidity105862092022-04-29 1:57:06153 days 12 hrs ago0xb47d5c16b37cad20573db593f03e4c3387b5060b IN  0xf164fc0ec4e93095b804a4795bbe1e041497b92a0 Ether0.00034964 1.50000002
0x235ad5fc06a78fb7044105b49c534006232a292312b0412589a133004e48b285Add Liquidity105861772022-04-29 1:49:06153 days 12 hrs ago0x68bcbc386a499fa537a9304fcfb709236d000fba IN  0xf164fc0ec4e93095b804a4795bbe1e041497b92a0 Ether0.00034962 1.50000001
0xe4b5ca585bec3a651f31e0cbd4a65286250c9f535bcca7c0f368ee03ffd3cc02Add Liquidity105805212022-04-28 2:11:48154 days 12 hrs ago0xb47d5c16b37cad20573db593f03e4c3387b5060b IN  0xf164fc0ec4e93095b804a4795bbe1e041497b92a0 Ether0.0003497 1.50000001
0x8664c81cefc3f28325745559eec851e5f9e7bfb0df6c0616b8056616d4c79113Add Liquidity105801262022-04-28 0:32:40154 days 13 hrs ago0xb47d5c16b37cad20573db593f03e4c3387b5060b IN  0xf164fc0ec4e93095b804a4795bbe1e041497b92a0 Ether0.0003497 1.50000002
0xbd178f90feb19868d2325a5e7eb51ab46ba9e56d6aa73fef9fc7e3b3b2969210Add Liquidity105769422022-04-27 11:13:12155 days 3 hrs ago0xb47d5c16b37cad20573db593f03e4c3387b5060b IN  0xf164fc0ec4e93095b804a4795bbe1e041497b92a0 Ether0.00193239 8.29064078
0xecae23f16ec8738c7b1247893a7ae214d9d4064752a86b2b8aa27a561c052df8Add Liquidity105764782022-04-27 9:16:38155 days 5 hrs ago0xb47d5c16b37cad20573db593f03e4c3387b5060b IN  0xf164fc0ec4e93095b804a4795bbe1e041497b92a0 Ether0.00471283 20.28604133
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x324ef4eb712ac4130139972544c238ed822f1ae8daa3176ff6de0821b1e5b186113384842022-09-07 11:24:3822 days 2 hrs ago 0xf164fc0ec4e93095b804a4795bbe1e041497b92a 0xbb6d2561a7543a8f6ad9efa787ce7ab3f2e5f3fc0 Ether
0x324ef4eb712ac4130139972544c238ed822f1ae8daa3176ff6de0821b1e5b186113384842022-09-07 11:24:3822 days 2 hrs ago 0xf164fc0ec4e93095b804a4795bbe1e041497b92a 0xf43384b3424fedebc8c9ad407e08e8ab9d900c270 Ether
0x324ef4eb712ac4130139972544c238ed822f1ae8daa3176ff6de0821b1e5b186113384842022-09-07 11:24:3822 days 2 hrs ago 0xf164fc0ec4e93095b804a4795bbe1e041497b92a 0x595b9eb3abcda586558b04f6ea39f68fa954c9000 Ether
0x324ef4eb712ac4130139972544c238ed822f1ae8daa3176ff6de0821b1e5b186113384842022-09-07 11:24:3822 days 2 hrs ago 0xf164fc0ec4e93095b804a4795bbe1e041497b92a 0xbb6d2561a7543a8f6ad9efa787ce7ab3f2e5f3fc0 Ether
0x324ef4eb712ac4130139972544c238ed822f1ae8daa3176ff6de0821b1e5b186113384842022-09-07 11:24:3822 days 2 hrs ago 0xf164fc0ec4e93095b804a4795bbe1e041497b92a 0x5c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f0 Ether
0x324ef4eb712ac4130139972544c238ed822f1ae8daa3176ff6de0821b1e5b186113384842022-09-07 11:24:3822 days 2 hrs ago 0x96631d878bba2d279b4d895b07f9a6f8904213d4 0xf164fc0ec4e93095b804a4795bbe1e041497b92a0 Ether
0x63e5eae5ec74e8a52044f82d21c8a64eba267e8918a82a4ef3c4bb3bae4666ce113384802022-09-07 11:23:3722 days 2 hrs ago 0xf164fc0ec4e93095b804a4795bbe1e041497b92a 0xbb6d2561a7543a8f6ad9efa787ce7ab3f2e5f3fc0 Ether
0x63e5eae5ec74e8a52044f82d21c8a64eba267e8918a82a4ef3c4bb3bae4666ce113384802022-09-07 11:23:3722 days 2 hrs ago 0xf164fc0ec4e93095b804a4795bbe1e041497b92a 0xf43384b3424fedebc8c9ad407e08e8ab9d900c270 Ether
0x63e5eae5ec74e8a52044f82d21c8a64eba267e8918a82a4ef3c4bb3bae4666ce113384802022-09-07 11:23:3722 days 2 hrs ago 0xf164fc0ec4e93095b804a4795bbe1e041497b92a 0x595b9eb3abcda586558b04f6ea39f68fa954c9000 Ether
0x63e5eae5ec74e8a52044f82d21c8a64eba267e8918a82a4ef3c4bb3bae4666ce113384802022-09-07 11:23:3722 days 2 hrs ago 0xf164fc0ec4e93095b804a4795bbe1e041497b92a 0xbb6d2561a7543a8f6ad9efa787ce7ab3f2e5f3fc0 Ether
0x63e5eae5ec74e8a52044f82d21c8a64eba267e8918a82a4ef3c4bb3bae4666ce113384802022-09-07 11:23:3722 days 2 hrs ago 0xf164fc0ec4e93095b804a4795bbe1e041497b92a 0x5c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f0 Ether
0x63e5eae5ec74e8a52044f82d21c8a64eba267e8918a82a4ef3c4bb3bae4666ce113384802022-09-07 11:23:3722 days 2 hrs ago 0x96631d878bba2d279b4d895b07f9a6f8904213d4 0xf164fc0ec4e93095b804a4795bbe1e041497b92a0 Ether
0x71312e41de2010dc5a1591d1ee9e702e7e900440663bc0ea3b7317beac8585b0113378412022-09-07 8:42:4522 days 5 hrs ago 0xf164fc0ec4e93095b804a4795bbe1e041497b92a 0xbb6d2561a7543a8f6ad9efa787ce7ab3f2e5f3fc0 Ether
0x71312e41de2010dc5a1591d1ee9e702e7e900440663bc0ea3b7317beac8585b0113378412022-09-07 8:42:4522 days 5 hrs ago 0xf164fc0ec4e93095b804a4795bbe1e041497b92a 0xbb6d2561a7543a8f6ad9efa787ce7ab3f2e5f3fc0 Ether
0x71312e41de2010dc5a1591d1ee9e702e7e900440663bc0ea3b7317beac8585b0113378412022-09-07 8:42:4522 days 5 hrs ago 0xc9001f2d47bac11dcdeca452cabdb1ee62ef9190 0xf164fc0ec4e93095b804a4795bbe1e041497b92a0 Ether
0xe45f2e5a3c3dabd18088b37d6f2f7c86ec9fcba992c7dcd47765d578f407fd09113377352022-09-07 8:16:0922 days 6 hrs ago 0xf164fc0ec4e93095b804a4795bbe1e041497b92a 0xbb6d2561a7543a8f6ad9efa787ce7ab3f2e5f3fc0 Ether
0xe45f2e5a3c3dabd18088b37d6f2f7c86ec9fcba992c7dcd47765d578f407fd09113377352022-09-07 8:16:0922 days 6 hrs ago 0xe6a35041ebc3d52bcbb735290830408ce1e434f4 0xf164fc0ec4e93095b804a4795bbe1e041497b92a0 Ether
0xb720639db1bbeae27b61bf17c74fa9787b3841d61c10187e1917f6d4172c1eca113376702022-09-07 7:59:3022 days 6 hrs ago 0xf164fc0ec4e93095b804a4795bbe1e041497b92a 0xbb6d2561a7543a8f6ad9efa787ce7ab3f2e5f3fc0 Ether
0xb720639db1bbeae27b61bf17c74fa9787b3841d61c10187e1917f6d4172c1eca113376702022-09-07 7:59:3022 days 6 hrs ago 0xf164fc0ec4e93095b804a4795bbe1e041497b92a 0xf43384b3424fedebc8c9ad407e08e8ab9d900c270 Ether
0xb720639db1bbeae27b61bf17c74fa9787b3841d61c10187e1917f6d4172c1eca113376702022-09-07 7:59:3022 days 6 hrs ago 0xf164fc0ec4e93095b804a4795bbe1e041497b92a 0x595b9eb3abcda586558b04f6ea39f68fa954c9000 Ether
0xb720639db1bbeae27b61bf17c74fa9787b3841d61c10187e1917f6d4172c1eca113376702022-09-07 7:59:3022 days 6 hrs ago 0xf164fc0ec4e93095b804a4795bbe1e041497b92a 0xbb6d2561a7543a8f6ad9efa787ce7ab3f2e5f3fc0 Ether
0xb720639db1bbeae27b61bf17c74fa9787b3841d61c10187e1917f6d4172c1eca113376702022-09-07 7:59:3022 days 6 hrs ago 0xf164fc0ec4e93095b804a4795bbe1e041497b92a 0x5c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f0 Ether
0xb720639db1bbeae27b61bf17c74fa9787b3841d61c10187e1917f6d4172c1eca113376702022-09-07 7:59:3022 days 6 hrs ago 0xe6a35041ebc3d52bcbb735290830408ce1e434f4 0xf164fc0ec4e93095b804a4795bbe1e041497b92a0 Ether
0x49504225fe8d19659150cf4117709a2c188f8855c489caf5d0cf17638094a1b8113376612022-09-07 7:57:1522 days 6 hrs ago 0xf164fc0ec4e93095b804a4795bbe1e041497b92a 0xbb6d2561a7543a8f6ad9efa787ce7ab3f2e5f3fc0 Ether
0x49504225fe8d19659150cf4117709a2c188f8855c489caf5d0cf17638094a1b8113376612022-09-07 7:57:1522 days 6 hrs ago 0xf164fc0ec4e93095b804a4795bbe1e041497b92a 0xf43384b3424fedebc8c9ad407e08e8ab9d900c270 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
UniswapV2Router01

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-05-12
*/

// File: @uniswap/v2-core/contracts/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 getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

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

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

// File: @uniswap/lib/contracts/libraries/TransferHelper.sol

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: @uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol

pragma solidity >=0.5.0;

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

// File: contracts/libraries/SafeMath.sol

pragma solidity =0.6.6;

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

library SafeMath {
    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/libraries/UniswapV2Library.sol

pragma solidity >=0.5.0;



library UniswapV2Library {
    using SafeMath 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'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f' // 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/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/interfaces/IERC20.sol

pragma solidity >=0.5.0;

interface IERC20 {
    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/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/UniswapV2Router01.sol

pragma solidity =0.6.6;







contract UniswapV2Router01 is IUniswapV2Router01 {
    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
    ) private 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 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 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);
        if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH); // refund dust eth, if any
    }

    // **** REMOVE LIQUIDITY ****
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) public 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 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 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 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);
    }

    // **** SWAP ****
    // requires the initial amount to have already been sent to the first pair
    function _swap(uint[] memory amounts, address[] memory path, address _to) private {
        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 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 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
        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
        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
        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
        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);
        if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]); // refund dust eth, if any
    }

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

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

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

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

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

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"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":"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":"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":"swapExactTokensForTokens","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":"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"}]

60c060405234801561001057600080fd5b506040516141273803806141278339818101604052604081101561003357600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c613feb61013c600039806101655280610b235280610b5e5280610c9b5280610f5e52806113b852806115e65280611799528061182e5280611afd5280611eb352806121e9528061223f528061227352806122f4528061250e52806126be5280612753525080610d8d5280610e8b5280611031528061106a528061121552806114aa52806116cc528061186d5280611a335280611ba65280611e385280611e615280611e91528061206e528061221d52806125f452806127925280613211528061325452806137e752806138c852806139485250613feb6000f3fe6080604052600436106101485760003560e01c80638803dbee116100c0578063d06ca61f11610074578063e8e3370011610059578063e8e3370014610937578063f305d719146109c4578063fb3bdb4114610a175761018e565b8063d06ca61f14610800578063ded9382a146108b75761018e565b8063ad615dec116100a5578063ad615dec1461074b578063baa2abde14610781578063c45a0155146107eb5761018e565b80638803dbee14610668578063ad5c46481461070d5761018e565b80632195995c116101175780634a25d94a116100fc5780634a25d94a146105305780637ff36ab5146105d557806385f8c2591461020c5761018e565b80632195995c1461040057806338ed17391461048b5761018e565b806302751cec14610193578063054d50d41461020c57806318cbafe5146102545780631f00ca74146103495761018e565b3661018e573373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461018c57fe5b005b600080fd5b34801561019f57600080fd5b506101f3600480360360c08110156101b657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a00135610aaa565b6040805192835260208301919091528051918290030190f35b34801561021857600080fd5b506102426004803603606081101561022f57600080fd5b5080359060208101359060400135610bfd565b60408051918252519081900360200190f35b34801561026057600080fd5b506102f9600480360360a081101561027757600080fd5b81359160208101359181019060608101604082013564010000000081111561029e57600080fd5b8201836020820111156102b057600080fd5b803590602001918460208302840111640100000000831117156102d257600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135610c12565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561033557818101518382015260200161031d565b505050509050019250505060405180910390f35b34801561035557600080fd5b506102f96004803603604081101561036c57600080fd5b8135919081019060408101602082013564010000000081111561038e57600080fd5b8201836020820111156103a057600080fd5b803590602001918460208302840111640100000000831117156103c257600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061102a945050505050565b34801561040c57600080fd5b506101f3600480360361016081101561042457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611060565b34801561049757600080fd5b506102f9600480360360a08110156104ae57600080fd5b8135916020810135918101906060810160408201356401000000008111156104d557600080fd5b8201836020820111156104e757600080fd5b8035906020019184602083028401116401000000008311171561050957600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff813516906020013561119e565b34801561053c57600080fd5b506102f9600480360360a081101561055357600080fd5b81359160208101359181019060608101604082013564010000000081111561057a57600080fd5b82018360208201111561058c57600080fd5b803590602001918460208302840111640100000000831117156105ae57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff813516906020013561132f565b6102f9600480360360808110156105eb57600080fd5b8135919081019060408101602082013564010000000081111561060d57600080fd5b82018360208201111561061f57600080fd5b8035906020019184602083028401116401000000008311171561064157600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611572565b34801561067457600080fd5b506102f9600480360360a081101561068b57600080fd5b8135916020810135918101906060810160408201356401000000008111156106b257600080fd5b8201836020820111156106c457600080fd5b803590602001918460208302840111640100000000831117156106e657600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356119bc565b34801561071957600080fd5b50610722611afb565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561075757600080fd5b506102426004803603606081101561076e57600080fd5b5080359060208101359060400135611b1f565b34801561078d57600080fd5b506101f3600480360360e08110156107a457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135611b2c565b3480156107f757600080fd5b50610722611e36565b34801561080c57600080fd5b506102f96004803603604081101561082357600080fd5b8135919081019060408101602082013564010000000081111561084557600080fd5b82018360208201111561085757600080fd5b8035906020019184602083028401116401000000008311171561087957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611e5a945050505050565b3480156108c357600080fd5b506101f360048036036101408110156108db57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611e87565b34801561094357600080fd5b506109a6600480360361010081101561095b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135611fdf565b60408051938452602084019290925282820152519081900360600190f35b6109a6600480360360c08110156109da57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a0013561216e565b6102f960048036036080811015610a2d57600080fd5b81359190810190604081016020820135640100000000811115610a4f57600080fd5b820183602082011115610a6157600080fd5b80359060200191846020830284011164010000000083111715610a8357600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff813516906020013561249a565b6000808242811015610b1d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b610b4c897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a611b2c565b9093509150610b5c8986856128e9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610bcf57600080fd5b505af1158015610be3573d6000803e3d6000fd5b50505050610bf18583612ac6565b50965096945050505050565b6000610c0a848484612c03565b949350505050565b60608142811015610c8457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110610ce957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d8857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b610de67f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612d2792505050565b91508682600184510381518110610df957fe5b60200260200101511015610e58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613f3c602b913960400191505060405180910390fd5b610f1d86866000818110610e6857fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1633610f037f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610eb757fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b6001818110610ee157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16612e8d565b85600081518110610f1057fe5b6020026020010151612f78565b610f5c82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613148915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d83600185510381518110610fa857fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610fe657600080fd5b505af1158015610ffa573d6000803e3d6000fd5b5050505061101f848360018551038151811061101257fe5b6020026020010151612ac6565b509695505050505050565b60606110577f000000000000000000000000000000000000000000000000000000000000000084846133cf565b90505b92915050565b60008060006110907f00000000000000000000000000000000000000000000000000000000000000008f8f612e8d565b905060008761109f578c6110c1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561115d57600080fd5b505af1158015611171573d6000803e3d6000fd5b505050506111848f8f8f8f8f8f8f611b2c565b809450819550505050509b509b9950505050505050505050565b6060814281101561121057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b61126e7f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612d2792505050565b9150868260018451038151811061128157fe5b602002602001015110156112e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613f3c602b913960400191505060405180910390fd5b6112f086866000818110610e6857fe5b61101f82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613148915050565b606081428110156113a157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061140657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114a557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b6115037f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133cf92505050565b9150868260008151811061151357fe5b60200260200101511115610e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180613ecc6027913960400191505060405180910390fd5b606081428110156115e457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168686600081811061162857fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116c757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b6117257f000000000000000000000000000000000000000000000000000000000000000034888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612d2792505050565b9150868260018451038151811061173857fe5b60200260200101511015611797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613f3c602b913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836000815181106117e057fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561181357600080fd5b505af1158015611827573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6118c37f00000000000000000000000000000000000000000000000000000000000000008989600081811061189957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a6001818110610ee157fe5b846000815181106118d057fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561194157600080fd5b505af1158015611955573d6000803e3d6000fd5b505050506040513d602081101561196b57600080fd5b505161197357fe5b6119b282878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613148915050565b5095945050505050565b60608142811015611a2e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b611a8c7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133cf92505050565b91508682600081518110611a9c57fe5b602002602001015111156112e0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180613ecc6027913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610c0a84848461355d565b6000808242811015611b9f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b6000611bcc7f00000000000000000000000000000000000000000000000000000000000000008c8c612e8d565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015611c4d57600080fd5b505af1158015611c61573d6000803e3d6000fd5b505050506040513d6020811015611c7757600080fd5b5050604080517f89afcb4400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015611cea57600080fd5b505af1158015611cfe573d6000803e3d6000fd5b505050506040513d6040811015611d1457600080fd5b50805160209091015190925090506000611d2e8e8e61363d565b5090508073ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614611d6b578183611d6e565b82825b90975095508a871015611dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613ef36026913960400191505060405180910390fd5b89861015611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e596026913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606110577f00000000000000000000000000000000000000000000000000000000000000008484612d27565b6000806000611ed77f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000612e8d565b9050600087611ee6578c611f08565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b158015611fa457600080fd5b505af1158015611fb8573d6000803e3d6000fd5b50505050611fca8e8e8e8e8e8e610aaa565b909f909e509c50505050505050505050505050565b6000806000834281101561205457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b6120628c8c8c8c8c8c613790565b909450925060006120947f00000000000000000000000000000000000000000000000000000000000000008e8e612e8d565b90506120a28d338388612f78565b6120ae8c338387612f78565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561212d57600080fd5b505af1158015612141573d6000803e3d6000fd5b505050506040513d602081101561215757600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156121e357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b6122118a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613790565b909450925060006122637f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000612e8d565b90506122718b338388612f78565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b1580156122d957600080fd5b505af11580156122ed573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561239957600080fd5b505af11580156123ad573d6000803e3d6000fd5b505050506040513d60208110156123c357600080fd5b50516123cb57fe5b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561244a57600080fd5b505af115801561245e573d6000803e3d6000fd5b505050506040513d602081101561247457600080fd5b505192503484101561248c5761248c33853403612ac6565b505096509650969350505050565b6060814281101561250c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f556e69737761705632526f757465723a20455850495245440000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168686600081811061255057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125ef57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f556e69737761705632526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b61264d7f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133cf92505050565b9150348260008151811061265d57fe5b602002602001015111156126bc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180613ecc6027913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061270557fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561273857600080fd5b505af115801561274c573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6127be7f00000000000000000000000000000000000000000000000000000000000000008989600081811061189957fe5b846000815181106127cb57fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561283c57600080fd5b505af1158015612850573d6000803e3d6000fd5b505050506040513d602081101561286657600080fd5b505161286e57fe5b6128ad82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613148915050565b816000815181106128ba57fe5b60200260200101513411156119b2576119b233836000815181106128da57fe5b60200260200101513403612ac6565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b602083106129bf57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612982565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612a21576040519150601f19603f3d011682016040523d82523d6000602084013e612a26565b606091505b5091509150818015612a54575080511580612a545750808060200190516020811015612a5157600080fd5b50515b612abf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310612b3d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612b00565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612b9f576040519150601f19603f3d011682016040523d82523d6000602084013e612ba4565b606091505b5050905080612bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613f196023913960400191505060405180910390fd5b505050565b6000808411612c5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613f8b602b913960400191505060405180910390fd5b600083118015612c6d5750600082115b612cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613e7f6028913960400191505060405180910390fd5b6000612cd6856103e563ffffffff613a9116565b90506000612cea828563ffffffff613a9116565b90506000612d1083612d04886103e863ffffffff613a9116565b9063ffffffff613b1716565b9050808281612d1b57fe5b04979650505050505050565b6060600282511015612d9a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff81118015612db257600080fd5b50604051908082528060200260200182016040528015612ddc578160200160208202803683370190505b5090508281600081518110612ded57fe5b60200260200101818152505060005b6001835103811015612e8557600080612e3f87868581518110612e1b57fe5b6020026020010151878660010181518110612e3257fe5b6020026020010151613b89565b91509150612e61848481518110612e5257fe5b60200260200101518383612c03565b848460010181518110612e7057fe5b60209081029190910101525050600101612dfc565b509392505050565b6000806000612e9c858561363d565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b6020831061305657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613019565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130b8576040519150601f19603f3d011682016040523d82523d6000602084013e6130bd565b606091505b50915091508180156130eb5750805115806130eb57508080602001905160208110156130e857600080fd5b50515b613140576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613f676024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156133c95760008084838151811061316657fe5b602002602001015185846001018151811061317d57fe5b6020026020010151915091506000613195838361363d565b50905060008785600101815181106131a957fe5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146131f1578260006131f5565b6000835b91509150600060028a5103881061320c578861324d565b61324d7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061324057fe5b6020026020010151612e8d565b905061327a7f00000000000000000000000000000000000000000000000000000000000000008888612e8d565b73ffffffffffffffffffffffffffffffffffffffff1663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156132c4576020820181803683370190505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561334f578181015183820152602001613337565b50505050905090810190601f16801561337c5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561339e57600080fd5b505af11580156133b2573d6000803e3d6000fd5b50506001909901985061314b975050505050505050565b50505050565b606060028251101561344257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561345a57600080fd5b50604051908082528060200260200182016040528015613484578160200160208202803683370190505b509050828160018351038151811061349857fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b8015612e85576000806134f8878660018603815181106134e457fe5b6020026020010151878681518110612e3257fe5b9150915061351a84848151811061350b57fe5b60200260200101518383613c71565b84600185038151811061352957fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016134c8565b60008084116135b7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613ea76025913960400191505060405180910390fd5b6000831180156135c75750600082115b61361c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613e7f6028913960400191505060405180910390fd5b8261362d858463ffffffff613a9116565b8161363457fe5b04949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156136c5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613e346025913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106136ff578284613702565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff821661378957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b604080517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561383057600080fd5b505afa158015613844573d6000803e3d6000fd5b505050506040513d602081101561385a57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff16141561394057604080517fc9c6539600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561391357600080fd5b505af1158015613927573d6000803e3d6000fd5b505050506040513d602081101561393d57600080fd5b50505b60008061396e7f00000000000000000000000000000000000000000000000000000000000000008b8b613b89565b91509150816000148015613980575080155b1561399057879350869250613a84565b600061399d89848461355d565b9050878111613a0a57858110156139ff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e596026913960400191505060405180910390fd5b889450925082613a82565b6000613a1789848661355d565b905089811115613a2357fe5b87811015613a7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613ef36026913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6000811580613aac57505080820282828281613aa957fe5b04145b61105a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b8082018281101561105a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b6000806000613b98858561363d565b509050600080613ba9888888612e8d565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613bee57600080fd5b505afa158015613c02573d6000803e3d6000fd5b505050506040513d6060811015613c1857600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff87811690841614613c5f578082613c62565b81815b90999098509650505050505050565b6000808411613ccb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613e08602c913960400191505060405180910390fd5b600083118015613cdb5750600082115b613d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613e7f6028913960400191505060405180910390fd5b6000613d546103e8613d48868863ffffffff613a9116565b9063ffffffff613a9116565b90506000613d6e6103e5613d48868963ffffffff613d9516565b9050613d8b6001828481613d7e57fe5b049063ffffffff613b1716565b9695505050505050565b8082038281111561105a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fdfe556e697377617056324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056324c6962726172793a204944454e544943414c5f414444524553534553556e69737761705632526f757465723a20494e53554646494349454e545f425f414d4f554e54556e697377617056324c6962726172793a20494e53554646494349454e545f4c4951554944495459556e697377617056324c6962726172793a20494e53554646494349454e545f414d4f554e54556e69737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e54556e69737761705632526f757465723a20494e53554646494349454e545f415f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544556e69737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544556e697377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54a2646970667358221220b430cc168eec157f24fadd56d0b90b2652ce5b0abb39cf9d64713138a400fb8c64736f6c634300060600330000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f000000000000000000000000c778417e063141139fce010982780140aa0cd5ab

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

0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f000000000000000000000000c778417e063141139fce010982780140aa0cd5ab

-----Decoded View---------------
Arg [0] : _factory (address): 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f
Arg [1] : _WETH (address): 0xc778417E063141139Fce010982780140Aa0cD5Ab

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f
Arg [1] : 000000000000000000000000c778417e063141139fce010982780140aa0cd5ab


Deployed ByteCode Sourcemap

14899:12657:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15349:10;:18;15363:4;15349:18;;15342:26;;;;14899:12657;;12:1:-1;9;2:12;19457:665:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19457:665:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;19457:665:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;26731:204;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26731:204:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;26731:204:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;24936:809;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24936:809:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24936:809:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;24936:809:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24936:809:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;24936:809:0;;-1:-1:-1;24936:809:0;-1:-1:-1;24936:809:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;24936:809:0;;;;;;;;;;;;;;;;;27358:195;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27358:195:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;27358:195:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;27358:195:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27358:195:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27358:195:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;27358:195:0;;-1:-1:-1;27358:195:0;;-1:-1:-1;;;;;27358:195:0:i;20128:669::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20128:669:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;20128:669:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22275:596::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22275:596:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;22275:596:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;22275:596:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;22275:596:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;22275:596:0;;-1:-1:-1;22275:596:0;-1:-1:-1;22275:596:0;;;;;;;;;:::i;24143:787::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24143:787:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24143:787:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;24143:787:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24143:787:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;24143:787:0;;-1:-1:-1;24143:787:0;-1:-1:-1;24143:787:0;;;;;;;;;:::i;23457:680::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;23457:680:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;23457:680:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;23457:680:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;23457:680:0;;-1:-1:-1;23457:680:0;-1:-1:-1;23457:680:0;;;;;;;;;:::i;22877:574::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22877:574:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;22877:574:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;22877:574:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;22877:574:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;22877:574:0;;-1:-1:-1;22877:574:0;-1:-1:-1;22877:574:0;;;;;;;;;:::i;15003:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15003:38:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26543:180;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26543:180:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;26543:180:0;;;;;;;;;;;;:::i;18594:857::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18594:857:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;18594:857:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14955:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14955:41:0;;;:::i;27155:195::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27155:195:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;27155:195:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;27155:195:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27155:195:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27155:195:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;27155:195:0;;-1:-1:-1;27155:195:0;;-1:-1:-1;;;;;27155:195:0:i;20803:661::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20803:661:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;20803:661:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16858:730::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16858:730:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;16858:730:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;17594:957;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;17594:957:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25751:784::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25751:784:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;25751:784:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25751:784:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25751:784:0;;-1:-1:-1;25751:784:0;-1:-1:-1;25751:784:0;;;;;;;;;:::i;19457:665::-;19686:16;19704:14;19667:8;15112:15;15100:8;:27;;15092:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19758:196:::1;19788:5;19808:4;19827:9;19851:14;19880:12;19915:4;19935:8;19758:15;:196::i;:::-;19731:223:::0;;-1:-1:-1;19731:223:0;-1:-1:-1;19965:51:0::1;19993:5:::0;20000:2;19731:223;19965:27:::1;:51::i;:::-;20033:4;20027:20;;;20048:9;20027:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20027:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20027:31:0;;;;20069:45;20100:2;20104:9;20069:30;:45::i;:::-;19457:665:::0;;;;;;;;;;:::o;26731:204::-;26831:14;26865:62;26895:8;26905:9;26916:10;26865:29;:62::i;:::-;26858:69;26731:204;-1:-1:-1;;;;26731:204:0:o;24936:809::-;25133:21;25105:8;15112:15;15100:8;:27;;15092:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25180:29:::1;25205:4;25180:29;:4:::0;;25185:15;;;25180:21;;::::1;;;;;;;;;;;;;:29;;;25172:71;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;25264:55;25295:7;25304:8;25314:4;;25264:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25264:30:0::1;::::0;-1:-1:-1;;;25264:55:0:i:1;:::-;25254:65;;25369:12;25338:7;25363:1;25346:7;:14;:18;25338:27;;;;;;;;;;;;;;:43;;25330:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25440:117;25472:4;;25477:1;25472:7;;;;;;;;;;;;;;;25481:10;25493:51;25518:7;25527:4;;25532:1;25527:7;;;;;;;;;;;;;;;25536:4;;25541:1;25536:7;;;;;;;;;;;;;;;25493:24;:51::i;:::-;25546:7;25554:1;25546:10;;;;;;;;;;;;;;25440:31;:117::i;:::-;25568:35;25574:7;25583:4;;25568:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25597:4:0::1;::::0;-1:-1:-1;25568:5:0::1;::::0;-1:-1:-1;;25568:35:0:i:1;:::-;25620:4;25614:20;;;25635:7;25660:1;25643:7;:14;:18;25635:27;;;;;;;;;;;;;;25614:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;25614:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25614:49:0;;;;25674:63;25705:2;25709:7;25734:1;25717:7;:14;:18;25709:27;;;;;;;;;;;;;;25674:30;:63::i;:::-;24936:809:::0;;;;;;;;;:::o;27358:195::-;27449:21;27490:55;27520:7;27529:9;27540:4;27490:29;:55::i;:::-;27483:62;;27358:195;;;;;:::o;20128:669::-;20426:12;20440;20465;20480:49;20505:7;20514:6;20522;20480:24;:49::i;:::-;20465:64;;20540:10;20553;:33;;20577:9;20553:33;;;20571:2;20553:33;20597:80;;;;;;20625:10;20597:80;;;;20645:4;20597:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20540:46;;-1:-1:-1;20597:27:0;;;;;;:80;;;;;-1:-1:-1;;20597:80:0;;;;;;;;-1:-1:-1;20597:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;20597:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20597:80:0;;;;20709;20725:6;20733;20741:9;20752:10;20764;20776:2;20780:8;20709:15;:80::i;:::-;20688:101;;;;;;;;20128:669;;;;;;;;;;;;;;;;:::o;22275:596::-;22491:21;22472:8;15112:15;15100:8;:27;;15092:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22535:55:::1;22566:7;22575:8;22585:4;;22535:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;22535:30:0::1;::::0;-1:-1:-1;;;22535:55:0:i:1;:::-;22525:65;;22640:12;22609:7;22634:1;22617:7;:14;:18;22609:27;;;;;;;;;;;;;;:43;;22601:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22711:117;22743:4;;22748:1;22743:7;;;;;;22711:117;22839:24;22845:7;22854:4;;22839:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;22860:2:0;;-1:-1:-1;22839:5:0::1;::::0;-1:-1:-1;;22839:24:0:i:1;24143:787::-:0;24340:21;24312:8;15112:15;15100:8;:27;;15092:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24387:29:::1;24412:4;24387:29;:4:::0;;24392:15;;;24387:21;;::::1;;;;;;;;;;;;;:29;;;24379:71;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;24471:55;24501:7;24510:9;24521:4;;24471:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24471:29:0::1;::::0;-1:-1:-1;;;24471:55:0:i:1;:::-;24461:65;;24559:11;24545:7;24553:1;24545:10;;;;;;;;;;;;;;:25;;24537:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23457:680:::0;23656:21;23628:8;15112:15;15100:8;:27;;15092:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23714:4:::1;23703:15;;:4;;23708:1;23703:7;;;;;;;;;;;;;;;:15;;;23695:57;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;23773:56;23804:7;23813:9;23824:4;;23773:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;23773:30:0::1;::::0;-1:-1:-1;;;23773:56:0:i:1;:::-;23763:66;;23879:12;23848:7;23873:1;23856:7;:14;:18;23848:27;;;;;;;;;;;;;;:43;;23840:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23956:4;23950:19;;;23977:7;23985:1;23977:10;;;;;;;;;;;;;;23950:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23950:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23950:40:0;;;;;24014:4;24008:20;;;24029:51;24054:7;24063:4;;24068:1;24063:7;;;;;;;;;;;;;;;24072:4;;24077:1;24072:7;;;;;;24029:51;24082:7;24090:1;24082:10;;;;;;;;;;;;;;24008:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24008:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24008:85:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;24008:85:0;24001:93:::1;;;;24105:24;24111:7;24120:4;;24105:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24126:2:0;;-1:-1:-1;24105:5:0::1;::::0;-1:-1:-1;;24105:24:0:i:1;:::-;23457:680:::0;;;;;;;;:::o;22877:574::-;23093:21;23074:8;15112:15;15100:8;:27;;15092:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23137:55:::1;23167:7;23176:9;23187:4;;23137:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;23137:29:0::1;::::0;-1:-1:-1;;;23137:55:0:i:1;:::-;23127:65;;23225:11;23211:7;23219:1;23211:10;;;;;;;;;;;;;;:25;;23203:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15003:38:::0;;;:::o;26543:180::-;26632:12;26664:51;26687:7;26696:8;26706;26664:22;:51::i;18594:857::-;18840:12;18854;18821:8;15112:15;15100:8;:27;;15092:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18879:12:::1;18894:49;18919:7;18928:6;18936;18894:24;:49::i;:::-;18954:62;::::0;;;;;18988:10:::1;18954:62;::::0;::::1;::::0;:33:::1;::::0;::::1;:62:::0;;;;;;;;;;;;;;18879:64;;-1:-1:-1;18954:33:0;;::::1;::::0;:62;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;18954:33:0;:62;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;18954:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18954:62:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;19084:29:0::1;::::0;;;;;:25:::1;:29:::0;;::::1;;::::0;::::1;::::0;;;19054:12:::1;::::0;;;19084:25;;::::1;::::0;::::1;::::0;:29;;;;;;;;;;;19054:12;19084:25;:29;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19084:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19084:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19084:29:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;19084:29:0;-1:-1:-1;19125:14:0::1;19144:43;19172:6:::0;19180;19144:27:::1;:43::i;:::-;19124:63;;;19229:6;19219:16;;:6;:16;;;:58;;19260:7;19269;19219:58;;;19239:7;19248;19219:58;19198:79:::0;;-1:-1:-1;19198:79:0;-1:-1:-1;19296:21:0;;::::1;;19288:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19390:10;19379:7;:21;;19371:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15167:1;;;;18594:857:::0;;;;;;;;;;;:::o;14955:41::-;;;:::o;27155:195::-;27246:21;27287:55;27318:7;27327:8;27337:4;27287:30;:55::i;20803:661::-;21084:16;21102:14;21129:12;21144:46;21169:7;21178:5;21185:4;21144:24;:46::i;:::-;21129:61;;21201:10;21214;:33;;21238:9;21214:33;;;21232:2;21214:33;21258:80;;;;;;21286:10;21258:80;;;;21306:4;21258:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21201:46;;-1:-1:-1;21258:27:0;;;;;;:80;;;;;-1:-1:-1;;21258:80:0;;;;;;;;-1:-1:-1;21258:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;21258:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21258:80:0;;;;21376;21395:5;21402:9;21413:14;21429:12;21443:2;21447:8;21376:18;:80::i;:::-;21349:107;;;;-1:-1:-1;20803:661:0;-1:-1:-1;;;;;;;;;;;;;20803:661:0:o;16858:730::-;17138:12;17152;17166:14;17119:8;15112:15;15100:8;:27;;15092:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17214:85:::1;17228:6;17236;17244:14;17260;17276:10;17288;17214:13;:85::i;:::-;17193:106:::0;;-1:-1:-1;17193:106:0;-1:-1:-1;17310:12:0::1;17325:49;17350:7;17359:6:::0;17367;17325:24:::1;:49::i;:::-;17310:64;;17385:66;17417:6;17425:10;17437:4;17443:7;17385:31;:66::i;:::-;17462;17494:6;17502:10;17514:4;17520:7;17462:31;:66::i;:::-;17566:4;17551:25;;;17577:2;17551:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;17551:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;17551:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;17551:29:0;16858:730;;;;-1:-1:-1;17551:29:0;;-1:-1:-1;16858:730:0;;-1:-1:-1;;;;;;;;;16858:730:0:o;17594:957::-;17839:16;17857:14;17873;17820:8;15112:15;15100:8;:27;;15092:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17927:176:::1;17955:5;17975:4;17994:18;18027:9;18051:14;18080:12;17927:13;:176::i;:::-;17900:203:::0;;-1:-1:-1;17900:203:0;-1:-1:-1;18114:12:0::1;18129:46;18154:7;18163:5:::0;18170:4:::1;18129:24;:46::i;:::-;18114:61;;18186:69;18218:5;18225:10;18237:4;18243:11;18186:31;:69::i;:::-;18272:4;18266:19;;;18293:9;18266:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18266:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18266:39:0;;;;;18329:4;18323:20;;;18344:4;18350:9;18323:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18323:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18323:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18323:37:0;18316:45:::1;;;;18399:4;18384:25;;;18410:2;18384:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18384:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18384:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18384:29:0;;-1:-1:-1;18428:9:0::1;:21:::0;-1:-1:-1;18424:92:0::1;;;18451:65;18482:10;18506:9;18494;:21;18451:30;:65::i;:::-;15167:1;17594:957:::0;;;;;;;;;;;:::o;25751:784::-;25947:21;25919:8;15112:15;15100:8;:27;;15092:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26005:4:::1;25994:15;;:4;;25999:1;25994:7;;;;;;;;;;;;;;;:15;;;25986:57;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;26064:55;26094:7;26103:9;26114:4;;26064:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26064:29:0::1;::::0;-1:-1:-1;;;26064:55:0:i:1;:::-;26054:65;;26152:9;26138:7;26146:1;26138:10;;;;;;;;;;;;;;:23;;26130:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26222:4;26216:19;;;26243:7;26251:1;26243:10;;;;;;;;;;;;;;26216:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26216:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26216:40:0;;;;;26280:4;26274:20;;;26295:51;26320:7;26329:4;;26334:1;26329:7;;;;;;26295:51;26348:7;26356:1;26348:10;;;;;;;;;;;;;;26274:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26274:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26274:85:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26274:85:0;26267:93:::1;;;;26371:24;26377:7;26386:4;;26371:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26392:2:0;;-1:-1:-1;26371:5:0::1;::::0;-1:-1:-1;;26371:24:0:i:1;:::-;26422:7;26430:1;26422:10;;;;;;;;;;;;;;26410:9;:22;26406:94;;;26434:66;26465:10;26489:7;26497:1;26489:10;;;;;;;;;;;;;;26477:9;:22;26434:30;:66::i;1352:361::-:0;1547:45;;;1536:10;1547:45;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1547:45:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;1547:45:0;179:29:-1;160:49;;1536:57:0;;;;1501:12;;1515:17;;1536:10;;;;1547:45;1536:57;;;25:18:-1;1536:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1536:57:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1500:93:0;;;;1612:7;:57;;;;-1:-1:-1;1624:11:0;;:16;;:44;;;1655:4;1644:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1644:24:0;1624:44;1604:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1352:361;;;;;:::o;2131:195::-;2239:12;;;2201;2239;;;;;;;;;2218:7;;;;2232:5;;2218:34;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2218:34:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;2200:52:0;;;2271:7;2263:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2131:195;;;:::o;7680:517::-;7773:14;7819:1;7808:8;:12;7800:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7899:1;7887:9;:13;:31;;;;;7917:1;7904:10;:14;7887:31;7879:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7974:20;7997:17;:8;8010:3;7997:17;:12;:17;:::i;:::-;7974:40;-1:-1:-1;8025:14:0;8042:31;7974:40;8062:10;8042:31;:19;:31;:::i;:::-;8025:48;-1:-1:-1;8084:16:0;8103:40;8127:15;8103:19;:9;8117:4;8103:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;8084:59;;8178:11;8166:9;:23;;;;;;;7680:517;-1:-1:-1;;;;;;;7680:517:0:o;8872:511::-;8973:21;9030:1;9015:4;:11;:16;;9007:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9098:4;:11;9087:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9087:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;9087:23:0;;9077:33;;9134:8;9121:7;9129:1;9121:10;;;;;;;;;;;;;:21;;;;;9158:6;9153:223;9184:1;9170:4;:11;:15;9166:1;:19;9153:223;;;9208:14;9224:15;9243:42;9255:7;9264:4;9269:1;9264:7;;;;;;;;;;;;;;9273:4;9278:1;9282;9278:5;9273:11;;;;;;;;;;;;;;9243;:42::i;:::-;9207:78;;;;9317:47;9330:7;9338:1;9330:10;;;;;;;;;;;;;;9342:9;9353:10;9317:12;:47::i;:::-;9300:7;9308:1;9312;9308:5;9300:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;9187:3:0;;9153:223;;;;8872:511;;;;;:::o;6197:478::-;6286:12;6312:14;6328;6346:26;6357:6;6365;6346:10;:26::i;:::-;6510:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;6510:32:0;;;;;6500:43;;;;;;6413:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;6413:251:0;;;;;;;6403:262;;;;;;;;;6197:478;-1:-1:-1;;;;;6197:478:0:o;1721:402::-;1946:51;;;1935:10;1946:51;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1946:51:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;1946:51:0;179:29:-1;160:49;;1935:63:0;;;;1900:12;;1914:17;;1935:10;;;;1946:51;1935:63;;;25:18:-1;1935:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;139:12;;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1935:63:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1899:99:0;;;;2017:7;:57;;;;-1:-1:-1;2029:11:0;;:16;;:44;;;2060:4;2049:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2049:24:0;2029:44;2009:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1721:402;;;;;;:::o;21575:694::-;21673:6;21668:594;21699:1;21685:4;:11;:15;21681:1;:19;21668:594;;;21723:13;21738:14;21757:4;21762:1;21757:7;;;;;;;;;;;;;;21766:4;21771:1;21775;21771:5;21766:11;;;;;;;;;;;;;;21722:56;;;;21794:14;21813:42;21841:5;21848:6;21813:27;:42::i;:::-;21793:62;;;21870:14;21887:7;21895:1;21899;21895:5;21887:14;;;;;;;;;;;;;;21870:31;;21917:15;21934;21962:6;21953:15;;:5;:15;;;:61;;21995:9;22011:1;21953:61;;;21977:1;21981:9;21953:61;21916:98;;;;22029:10;22060:1;22046:4;:11;:15;22042:1;:19;:82;;22121:3;22042:82;;;22064:54;22089:7;22098:6;22106:4;22111:1;22115;22111:5;22106:11;;;;;;;;;;;;;;22064:24;:54::i;:::-;22029:95;;22154:48;22179:7;22188:5;22195:6;22154:24;:48::i;:::-;22139:69;;;22209:10;22221;22233:2;22247:1;22237:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;22237:12:0;87:42:-1;143:17;;-1:-1;22237:12:0;;22139:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;22139:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22139:111:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;21702:3:0;;;;;-1:-1:-1;21668:594:0;;-1:-1:-1;;;;;;;;21668:594:0;;;21575:694;;;:::o;9464:532::-;9565:21;9622:1;9607:4;:11;:16;;9599:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9690:4;:11;9679:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9679:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;9679:23:0;;9669:33;;9743:9;9713:7;9738:1;9721:7;:14;:18;9713:27;;;;;;;;;;;;;;;;;:39;9777:11;;:15;;9763:226;9794:5;;9763:226;;9822:14;9838:15;9857:42;9869:7;9878:4;9887:1;9883;:5;9878:11;;;;;;;;;;;;;;9891:4;9896:1;9891:7;;;;;;;9857:42;9821:78;;;;9931:46;9943:7;9951:1;9943:10;;;;;;;;;;;;;;9955:9;9966:10;9931:11;:46::i;:::-;9914:7;9926:1;9922;:5;9914:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;9801:3:0;;9763:226;;7237:321;7319:12;7362:1;7352:7;:11;7344:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7435:1;7424:8;:12;:28;;;;;7451:1;7440:8;:12;7424:28;7416:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7542:8;7518:21;:7;7530:8;7518:21;:11;:21;:::i;:::-;:32;;;;;;;7237:321;-1:-1:-1;;;;7237:321:0:o;5756:349::-;5831:14;5847;5892:6;5882:16;;:6;:16;;;;5874:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5979:6;5970:15;;:6;:15;;;:53;;6008:6;6016;5970:53;;;5989:6;5997;5970:53;5951:72;;-1:-1:-1;5951:72:0;-1:-1:-1;6042:20:0;;;6034:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5756:349;;;;;:::o;15471:1381::-;15775:50;;;;;;:64;:50;;;;;;;;;;;;;;;;15680:12;;;;;;15793:7;15775:34;;;;;;:50;;;;;;;;;;;;;;;:34;:50;;;2:2:-1;;;;27:1;24;17:12;2:2;15775:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15775:50:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;15775:50:0;:64;;;15771:150;;;15856:53;;;;;;:37;:53;;;;;;;;;;;;;;;;15874:7;15856:37;;;;;;:53;;;;;;;;;;;;;;;-1:-1:-1;15856:37:0;:53;;;2:2:-1;;;;27:1;24;17:12;2:2;15856:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15856:53:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;15771:150:0;15932:13;15947;15964:53;15993:7;16002:6;16010;15964:28;:53::i;:::-;15931:86;;;;16032:8;16044:1;16032:13;:30;;;;-1:-1:-1;16049:13:0;;16032:30;16028:817;;;16101:14;;-1:-1:-1;16117:14:0;;-1:-1:-1;16028:817:0;;;16165:19;16187:58;16210:14;16226:8;16236;16187:22;:58::i;:::-;16165:80;;16282:14;16264;:32;16260:574;;16343:10;16325:14;:28;;16317:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16437:14;;-1:-1:-1;16453:14:0;-1:-1:-1;16453:14:0;16260:574;;;16509:19;16531:58;16554:14;16570:8;16580;16531:22;:58::i;:::-;16509:80;;16633:14;16615;:32;;16608:40;;;;16693:10;16675:14;:28;;16667:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16787:14;-1:-1:-1;16803:14:0;;-1:-1:-1;16260:574:0;16028:817;;15471:1381;;;;;;;;;;;:::o;5357:142::-;5409:6;5436;;;:30;;-1:-1:-1;;5451:5:0;;;5465:1;5460;5451:5;5460:1;5446:15;;;;;:20;5436:30;5428:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5084:128;5168:5;;;5163:16;;;;5155:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6733:391;6826:13;6841;6868:14;6887:26;6898:6;6906;6887:10;:26::i;:::-;6867:46;;;6925:13;6940;6973:32;6981:7;6990:6;6998;6973:7;:32::i;:::-;6958:60;;;:62;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;6958:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6958:62:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;6958:62:0;;;;;;;6924:96;;;;;-1:-1:-1;6924:96:0;;-1:-1:-1;7054:16:0;;;;;;;;:62;;7097:8;7107;7054:62;;;7074:8;7084;7054:62;7031:85;;;;-1:-1:-1;6733:391:0;-1:-1:-1;;;;;;;6733:391:0:o;8318:472::-;8411:13;8457:1;8445:9;:13;8437:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8538:1;8526:9;:13;:31;;;;;8556:1;8543:10;:14;8526:31;8518:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8613:14;8630:34;8659:4;8630:24;:9;8644;8630:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;8613:51;-1:-1:-1;8675:16:0;8694:34;8724:3;8694:25;:10;8709:9;8694:25;:14;:25;:::i;:34::-;8675:53;;8750:32;8780:1;8763:11;8751:9;:23;;;;;;;8750:32;:29;:32;:::i;:::-;8739:43;8318:472;-1:-1:-1;;;;;;8318:472:0:o;5220:129::-;5304:5;;;5299:16;;;;5291:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

ipfs://b430cc168eec157f24fadd56d0b90b2652ce5b0abb39cf9d64713138a400fb8c
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading

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.