Contract 0x40f1fef0fe68fd10ff904070ee00a7769ee7fe34

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x12d707be9df875c50fcf1a9cd9e04516a7048e627cac62bccf8425213edd09b3Swap Exact Token...24120462022-11-30 22:22:4812 hrs 33 mins ago0x77e9fec1bae22a93b975f2eb00208b6cf4cc44d4 IN  PADSwap: Router0 GLMR0.01866179
0x60edae49fba6384053991bb8fc675d2b765baea1b91d222ab69e9c186b8800c7Swap Exact Token...24055432022-11-30 0:08:361 day 10 hrs ago0xdb0132c875ea7a00c4a6283da592ae6500205396 IN  PADSwap: Router0 GLMR0.011639817
0xce2a76f6d01a3d51d93f61439882909afa9dec7bcd40d4d8ba71037b7270f120Swap Exact Token...24034102022-11-29 16:56:541 day 17 hrs ago0x02c945bb330f10e9bcda40ac1659f35e4da69c24 IN  PADSwap: Router0 GLMR0.022709407
0xc6e126ae4d983e15a74286cfd8fbc5755e9c97b784e17af56186a4103c872b89Swap Exact Token...24002562022-11-29 6:18:422 days 4 hrs ago0x1702a27ce72743b05ad20b781edd1bb618eabaf3 IN  PADSwap: Router0 GLMR0.024083514
0xe312110e04275666cbec5ec3781e7571b4ca14b78d58904032988b2360a577bbRemove Liquidity...24002492022-11-29 6:17:182 days 4 hrs ago0x1702a27ce72743b05ad20b781edd1bb618eabaf3 IN  PADSwap: Router0 GLMR0.018841648
0x3b8995c36158b55e67820be4d62dc8fd861c55c02acb4d81a1bda04f05a79508Swap Exact Token...23978722022-11-28 22:16:002 days 12 hrs ago0x77e9fec1bae22a93b975f2eb00208b6cf4cc44d4 IN  PADSwap: Router0 GLMR0.0119373135
0xd433dd8a5e030a798c7a238cb183839f01473d3e12a83bcd0ab6a22d8eb5151dSwap Exact Token...23968392022-11-28 18:46:542 days 16 hrs ago0x02c945bb330f10e9bcda40ac1659f35e4da69c24 IN  PADSwap: Router0 GLMR0.02467465
0x11df8a7f4b29e9727909795d3776406c7da82b3d0892ea5f3f7e001ac3222f72Add Liquidity23946052022-11-28 11:13:182 days 23 hrs ago0xf566b5879be6cc78809fc6cafc05b2291c4ba90c IN  PADSwap: Router0 GLMR0.0177768115
0xe790ce9c1e0ec89df644a93c32b04658979f6c370fba1ca27a1336c75a531f9eSwap Exact Token...23895742022-11-27 18:12:003 days 16 hrs ago0x02c945bb330f10e9bcda40ac1659f35e4da69c24 IN  PADSwap: Router0 GLMR0.018661587
0xf2316f3b242d1572e3512666c659b5de7e12355542aab24f56c21e2720222d2bSwap Exact Token...23893682022-11-27 17:30:183 days 17 hrs ago0x16fd78f2f4fe452e39f5c6d18b6e42b93dd54ada IN  PADSwap: Router0 GLMR0.0102028815
0x8d10ab31daed53a7405bea585a3c7f4ede051b9d8fa0c0d76b5422f88409cb48Remove Liquidity...23887202022-11-27 15:19:003 days 19 hrs ago0xc24ef870854bc7d1619df76be4bfcd6a4ab43635 IN  PADSwap: Router0 GLMR0.024655568
0x2a956cbd28def9129433a345fac7e92cd019940d9ab845c3cb3f099c04b5a3ddRemove Liquidity...23887172022-11-27 15:18:303 days 19 hrs ago0xc24ef870854bc7d1619df76be4bfcd6a4ab43635 IN  PADSwap: Router0 GLMR0.0189787745
0x7d2fb73feef0f293deb84ba11560237d6f4d59feec79cfe7c7e9eb2e98b37270Add Liquidity ET...23885402022-11-27 14:41:543 days 20 hrs ago0x41996e920fb57e57ccb80f370d5cfc135a4859f5 IN  PADSwap: Router29.532278747848897 GLMR0.0176166445
0xd85b6a2ee694317c5377617f5e853fe5d24323bb43819302c7655ebce9211e8cSwap Exact Token...23885332022-11-27 14:40:363 days 20 hrs ago0x41996e920fb57e57ccb80f370d5cfc135a4859f5 IN  PADSwap: Router0 GLMR0.012128235
0x9c67374039e02b4d0f0e73f1cf3bc25994e76739dc83e0c8716a6a0501acee3cSwap Exact Token...23875822022-11-27 11:27:543 days 23 hrs ago0xf594ff31ad2bc73324039a8d5ef0b07ad6105dda IN  PADSwap: Router0 GLMR0.011561256
0x9f3f70d510d1e218bea8d0ec47670b5739020e88c15d3f178f59eed1ba0603b7Swap Exact Token...23875812022-11-27 11:27:363 days 23 hrs ago0xf594ff31ad2bc73324039a8d5ef0b07ad6105dda IN  PADSwap: Router0 GLMR0.0159904115
0xff72f5f0f2a4b8d159ce14b709b0b22e126d31ba85b4bfcd7e08e050b88b195bRemove Liquidity...23875752022-11-27 11:26:243 days 23 hrs ago0xf594ff31ad2bc73324039a8d5ef0b07ad6105dda IN  PADSwap: Router0 GLMR0.0174540415
0x8e0d112d9e5ee1c7fa7f3b1ff82ca9299ae928c885bc7033af3100b241145785Remove Liquidity...23875732022-11-27 11:26:003 days 23 hrs ago0xf594ff31ad2bc73324039a8d5ef0b07ad6105dda IN  PADSwap: Router0 GLMR0.022090663
0x399ad25002646a0457e95960ab21be687e2aad9addd04c8b691ad86f937ccb80Swap Exact Token...23855392022-11-27 4:34:244 days 6 hrs ago0x77e9fec1bae22a93b975f2eb00208b6cf4cc44d4 IN  PADSwap: Router0 GLMR0.0119373135
0x6d681b19470e94bdc1c405ed509f9d332c421e969c51028c89da1a8719bb480bSwap Exact ETH F...23789412022-11-26 6:16:485 days 4 hrs ago0xf6c3645861e7e6f4ae70c00cc1361b62b7e9fa51 IN  PADSwap: Router1 GLMR0.016311862
0x8380971304e80026f4290068a60a546eea7beebb6453e24b858f68d131fe8328Swap Exact Token...23743912022-11-25 14:48:425 days 20 hrs ago0x02c945bb330f10e9bcda40ac1659f35e4da69c24 IN  PADSwap: Router0 GLMR0.017720276
0x578a2738e41a72e44f628e3cf352ad9b5ea52563f45d8c9f58a408b4733bf2afSwap Exact Token...23715382022-11-25 5:11:306 days 5 hrs ago0x1702a27ce72743b05ad20b781edd1bb618eabaf3 IN  PADSwap: Router0 GLMR0.018529231
0x0a5793d39eb23ed8df8f8d368e7a839f7af493fd2b4245d1bdb971ea1ff9db41Remove Liquidity...23715342022-11-25 5:10:426 days 5 hrs ago0x1702a27ce72743b05ad20b781edd1bb618eabaf3 IN  PADSwap: Router0 GLMR0.018841648
0x56fcd10b21c4cc323591d409dd430b64340af1559308286b047790364171508fAdd Liquidity23679542022-11-24 17:06:366 days 17 hrs ago0xfff3c70762516b82274555906d9cdbab62a5c0c3 IN  PADSwap: Router0 GLMR0.019161765
0xe8b6de2ff6d754ccc4bd396fadd6e14e6e465bf7183379694847af58c6cdd527Swap Exact ETH F...23679432022-11-24 17:04:246 days 17 hrs ago0xfff3c70762516b82274555906d9cdbab62a5c0c3 IN  PADSwap: Router1 GLMR0.018647895
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x60edae49fba6384053991bb8fc675d2b765baea1b91d222ab69e9c186b8800c724055432022-11-30 0:08:361 day 10 hrs ago PADSwap: Router0xdb0132c875ea7a00c4a6283da592ae65002053960.65220267113671085 GLMR
0x60edae49fba6384053991bb8fc675d2b765baea1b91d222ab69e9c186b8800c724055432022-11-30 0:08:361 day 10 hrs ago 0xe3db50049c74de2f7d7269823af3178cf22fd5e3 PADSwap: Router0.65220267113671085 GLMR
0xc6e126ae4d983e15a74286cfd8fbc5755e9c97b784e17af56186a4103c872b8924002562022-11-29 6:18:422 days 4 hrs ago PADSwap: Router0x1702a27ce72743b05ad20b781edd1bb618eabaf32.126560008242210542 GLMR
0xc6e126ae4d983e15a74286cfd8fbc5755e9c97b784e17af56186a4103c872b8924002562022-11-29 6:18:422 days 4 hrs ago 0xe3db50049c74de2f7d7269823af3178cf22fd5e3 PADSwap: Router2.126560008242210542 GLMR
0x8d10ab31daed53a7405bea585a3c7f4ede051b9d8fa0c0d76b5422f88409cb4823887202022-11-27 15:19:003 days 19 hrs ago PADSwap: Router0xc24ef870854bc7d1619df76be4bfcd6a4ab43635119.679005320047226777 GLMR
0x8d10ab31daed53a7405bea585a3c7f4ede051b9d8fa0c0d76b5422f88409cb4823887202022-11-27 15:19:003 days 19 hrs ago 0xe3db50049c74de2f7d7269823af3178cf22fd5e3 PADSwap: Router119.679005320047226777 GLMR
0x7d2fb73feef0f293deb84ba11560237d6f4d59feec79cfe7c7e9eb2e98b3727023885402022-11-27 14:41:543 days 20 hrs ago PADSwap: Router 0xe3db50049c74de2f7d7269823af3178cf22fd5e329.532278747848897902 GLMR
0xd85b6a2ee694317c5377617f5e853fe5d24323bb43819302c7655ebce9211e8c23885332022-11-27 14:40:363 days 20 hrs ago PADSwap: Router0x41996e920fb57e57ccb80f370d5cfc135a4859f529.473376022230902889 GLMR
0xd85b6a2ee694317c5377617f5e853fe5d24323bb43819302c7655ebce9211e8c23885332022-11-27 14:40:363 days 20 hrs ago 0xe3db50049c74de2f7d7269823af3178cf22fd5e3 PADSwap: Router29.473376022230902889 GLMR
0x8e0d112d9e5ee1c7fa7f3b1ff82ca9299ae928c885bc7033af3100b24114578523875732022-11-27 11:26:003 days 23 hrs ago PADSwap: Router0xf594ff31ad2bc73324039a8d5ef0b07ad6105dda0.759940042013251227 GLMR
0x8e0d112d9e5ee1c7fa7f3b1ff82ca9299ae928c885bc7033af3100b24114578523875732022-11-27 11:26:003 days 23 hrs ago 0xe3db50049c74de2f7d7269823af3178cf22fd5e3 PADSwap: Router0.759940042013251227 GLMR
0x6d681b19470e94bdc1c405ed509f9d332c421e969c51028c89da1a8719bb480b23789412022-11-26 6:16:485 days 4 hrs ago PADSwap: Router 0xe3db50049c74de2f7d7269823af3178cf22fd5e31 GLMR
0x578a2738e41a72e44f628e3cf352ad9b5ea52563f45d8c9f58a408b4733bf2af23715382022-11-25 5:11:306 days 5 hrs ago PADSwap: Router0x1702a27ce72743b05ad20b781edd1bb618eabaf31.075710852651813073 GLMR
0x578a2738e41a72e44f628e3cf352ad9b5ea52563f45d8c9f58a408b4733bf2af23715382022-11-25 5:11:306 days 5 hrs ago 0xe3db50049c74de2f7d7269823af3178cf22fd5e3 PADSwap: Router1.075710852651813073 GLMR
0xe8b6de2ff6d754ccc4bd396fadd6e14e6e465bf7183379694847af58c6cdd52723679432022-11-24 17:04:246 days 17 hrs ago PADSwap: Router 0xe3db50049c74de2f7d7269823af3178cf22fd5e31 GLMR
0xd3cb64dc164fdf4ed77892ad71c529c5d961d93af8a589c489ea7389cce296a023679342022-11-24 17:02:366 days 17 hrs ago PADSwap: Router 0xe3db50049c74de2f7d7269823af3178cf22fd5e31 GLMR
0x8edecfd16a6f7f0f13570d2bbc0e9b7668302c414bc817394a0f6afdb37bc79823590022022-11-23 10:52:188 days 3 mins ago PADSwap: Router 0xe3db50049c74de2f7d7269823af3178cf22fd5e350 GLMR
0xd9fb95af95d909a14c9f2b6f64d9e2771e061adf13c539987ea700d532c75ab423589892022-11-23 10:49:428 days 6 mins ago PADSwap: Router 0xe3db50049c74de2f7d7269823af3178cf22fd5e350 GLMR
0xa1f4779844d2c2b72179137a486a14db947835afc8e7954fe9bbcc318ced805023589782022-11-23 10:47:308 days 8 mins ago PADSwap: Router 0xe3db50049c74de2f7d7269823af3178cf22fd5e350 GLMR
0x25cf80f89953b145bb8c6818db65e672fec730319151e15506743285af3976d223589282022-11-23 10:37:248 days 18 mins ago PADSwap: Router0x12c13e485c8f4ceef61f7d6774a196f94f53bf145.933921712114286285 GLMR
0x25cf80f89953b145bb8c6818db65e672fec730319151e15506743285af3976d223589282022-11-23 10:37:248 days 18 mins ago 0xe3db50049c74de2f7d7269823af3178cf22fd5e3 PADSwap: Router5.933921712114286285 GLMR
0x57921106a63032362ce1cba675b2bdb641ca855396dde87adc4c3678ff25901223552582022-11-22 22:14:308 days 12 hrs ago PADSwap: Router0x4169fc450a9236dfae7b7b98558e50c0936eaed40.158115565754553547 GLMR
0x57921106a63032362ce1cba675b2bdb641ca855396dde87adc4c3678ff25901223552582022-11-22 22:14:308 days 12 hrs ago 0xe3db50049c74de2f7d7269823af3178cf22fd5e3 PADSwap: Router0.158115565754553547 GLMR
0x3758f080dbd4b7d5bca2586f0d69436866d3002879d0021227ac184ccd24afd923486552022-11-21 23:57:489 days 10 hrs ago PADSwap: Router0xdb0132c875ea7a00c4a6283da592ae65002053960.406312960657405525 GLMR
0x3758f080dbd4b7d5bca2586f0d69436866d3002879d0021227ac184ccd24afd923486552022-11-21 23:57:489 days 10 hrs ago 0xe3db50049c74de2f7d7269823af3178cf22fd5e3 PADSwap: Router0.406312960657405525 GLMR
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PadRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at moonbeam.moonscan.io on 2022-02-01
*/

// 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/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/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/interfaces/IPadPair.sol

pragma solidity >=0.6.6;

interface IPadPair {
    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/PadLibrary.sol

pragma solidity >=0.5.0;



library PadLibrary {
    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, 'PadLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'PadLibrary: 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'3eb475f0bc063c4f457199bae925b27d909f4af70ef7db78ba734972fc1a8543' // 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);
        pairFor(factory, tokenA, tokenB);
        (uint reserve0, uint reserve1,) = IPadPair(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, 'PadLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'PadLibrary: 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, 'PadLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'PadLibrary: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(998);
        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, 'PadLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'PadLibrary: INSUFFICIENT_LIQUIDITY');
        uint numerator = reserveIn.mul(amountOut).mul(1000);
        uint denominator = reserveOut.sub(amountOut).mul(998);
        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, 'PadLibrary: 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, 'PadLibrary: 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/IPadRouter01.sol

pragma solidity >=0.6.2;

interface IPadRouter01 {
    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/IPadRouter02.sol

pragma solidity >=0.6.2;


interface IPadRouter02 is IPadRouter01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

// File: @uniswap/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,
        uint256 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::safeApprove: approve failed'
        );
    }

    function safeTransfer(
        address token,
        address to,
        uint256 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::safeTransfer: transfer failed'
        );
    }

    function safeTransferFrom(
        address token,
        address from,
        address to,
        uint256 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::transferFrom: transferFrom failed'
        );
    }

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

// File: contracts/interfaces/IPadFactory.sol

pragma solidity >=0.6.6;

interface IPadFactory {
    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: contracts/PadRouter.sol

pragma solidity =0.6.6;








contract PadRouter is IPadRouter02 {
    using SafeMath for uint;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Contract ABI

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

60c060405234801561001057600080fd5b506040516200476f3803806200476f8339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6145ea620001856000398061015f5280610ce45280610d1f5280610e16528061103452806113be528061152452806118eb52806119e55280611a9b5280611b695280611caf5280611d375280611f7c5280611ff752806120a652806121725280612207528061227b52806127a55280612a185280612a6e5280612aa25280612b165280612cb65280612df95280612e81525080610ea45280610f7b52806110fa5280611133528061126e528061144c528061150252806116725280611bfc5280611d695280611ecc52806122ad5280612506528061272a5280612753528061278352806128f05280612a4c5280612d495280612eb3528061373f52806137825280613a605280613bdf528061403b52806140e9528061416952506145ea6000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b03813516906020013561189d565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b21565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e74565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e81565b34801561088157600080fd5b5061088a611f7a565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f9e565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fab565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b03813516906020013561212c565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124b8565b348015610a1c57600080fd5b5061088a612728565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061274c945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612779565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e0013561288d565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356129c9565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612c6e565b6000808242811015610cde576040805162461bcd60e51b815260206004820152601260248201526000805160206144b5833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124b8565b9093509150610d1d898685612ff0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da58583613144565b50965096945050505050565b6000610dbe84848461323c565b949350505050565b60608142811015610e0c576040805162461bcd60e51b815260206004820152601260248201526000805160206144b5833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b81526020600482015260176024820152600080516020614430833981519152604482015290519081900360640190fd5b610efd7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061332c92505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b81526004018080602001828103825260258152602001806145206025913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b0316613473565b85600081518110610fe657fe5b6020026020010151613533565b61103282878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613690915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b6020026020010151613144565b509695505050505050565b60606111207f000000000000000000000000000000000000000000000000000000000000000084846138d6565b90505b92915050565b60008060006111597f00000000000000000000000000000000000000000000000000000000000000008f8f613473565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f6124b8565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b815260206004820152601260248201526000805160206144b5833981519152604482015290519081900360640190fd5b6112c77f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061332c92505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b81526004018080602001828103825260258152602001806145206025913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e882878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613690915050565b606081428110156113b4576040805162461bcd60e51b815260206004820152601260248201526000805160206144b5833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b81526020600482015260176024820152600080516020614430833981519152604482015290519081900360640190fd5b6114a57f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138d692505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b81526004018080602001828103825260218152602001806145456021913960400191505060405180910390fd5b6000806115487f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613473565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611fab565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b815260206004820152601260248201526000805160206144b5833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a613533565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b505160408051602088810282810182019093528882529293506117a4929091899189918291850190849080828437600092019190915250889250613a09915050565b8661185682888860001981018181106117b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d602081101561184857600080fd5b50519063ffffffff613d1416565b10156118935760405162461bcd60e51b81526004018080602001828103825260258152602001806145206025913960400191505060405180910390fd5b5050505050505050565b80428110156118e1576040805162461bcd60e51b815260206004820152601260248201526000805160206144b5833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061191b57fe5b905060200201356001600160a01b03166001600160a01b031614611974576040805162461bcd60e51b81526020600482015260176024820152600080516020614430833981519152604482015290519081900360640190fd5b6119848585600081811061165c57fe5b6119c2858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613a09915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a2c57600080fd5b505afa158015611a40573d6000803e3d6000fd5b505050506040513d6020811015611a5657600080fd5b5051905086811015611a995760405162461bcd60e51b81526004018080602001828103825260258152602001806145206025913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aff57600080fd5b505af1158015611b13573d6000803e3d6000fd5b505050506118938482613144565b60608142811015611b67576040805162461bcd60e51b815260206004820152601260248201526000805160206144b5833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b9e57fe5b905060200201356001600160a01b03166001600160a01b031614611bf7576040805162461bcd60e51b81526020600482015260176024820152600080516020614430833981519152604482015290519081900360640190fd5b611c557f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061332c92505050565b91508682600184510381518110611c6857fe5b60200260200101511015611cad5760405162461bcd60e51b81526004018080602001828103825260258152602001806145206025913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611ce957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1c57600080fd5b505af1158015611d30573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d957f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110611da257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b505050506040513d6020811015611e2357600080fd5b5051611e2b57fe5b611e6a82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613690915050565b5095945050505050565b6000610dbe848484613d64565b60608142811015611ec7576040805162461bcd60e51b815260206004820152601260248201526000805160206144b5833981519152604482015290519081900360640190fd5b611f257f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138d692505050565b91508682600081518110611f3557fe5b6020026020010151111561131f5760405162461bcd60e51b81526004018080602001828103825260218152602001806145456021913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613e54565b60008142811015611ff1576040805162461bcd60e51b815260206004820152601260248201526000805160206144b5833981519152604482015290519081900360640190fd5b612020887f000000000000000000000000000000000000000000000000000000000000000089898930896124b8565b604080516370a0823160e01b815230600482015290519194506120a492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561207357600080fd5b505afa158015612087573d6000803e3d6000fd5b505050506040513d602081101561209d57600080fd5b5051612ff0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561210a57600080fd5b505af115801561211e573d6000803e3d6000fd5b505050506110e88483613144565b8042811015612170576040805162461bcd60e51b815260206004820152601260248201526000805160206144b5833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106121a757fe5b905060200201356001600160a01b03166001600160a01b031614612200576040805162461bcd60e51b81526020600482015260176024820152600080516020614430833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122d97f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561232957600080fd5b505af115801561233d573d6000803e3d6000fd5b505050506040513d602081101561235357600080fd5b505161235b57fe5b60008686600019810181811061236d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123d257600080fd5b505afa1580156123e6573d6000803e3d6000fd5b505050506040513d60208110156123fc57600080fd5b5051604080516020898102828101820190935289825292935061243e9290918a918a918291850190849080828437600092019190915250899250613a09915050565b87611856828989600019810181811061245357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b60008082428110156124ff576040805162461bcd60e51b815260206004820152601260248201526000805160206144b5833981519152604482015290519081900360640190fd5b600061252c7f00000000000000000000000000000000000000000000000000000000000000008c8c613473565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561258757600080fd5b505af115801561259b573d6000803e3d6000fd5b505050506040513d60208110156125b157600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125fe57600080fd5b505af1158015612612573d6000803e3d6000fd5b505050506040513d604081101561262857600080fd5b508051602090910151909250905060006126428e8e613f16565b509050806001600160a01b03168e6001600160a01b031614612665578183612668565b82825b90975095508a8710156126c2576040805162461bcd60e51b815260206004820181905260248201527f506164526f757465723a20494e53554646494349454e545f415f414d4f554e54604482015290519081900360640190fd5b89861015612717576040805162461bcd60e51b815260206004820181905260248201527f506164526f757465723a20494e53554646494349454e545f425f414d4f554e54604482015290519081900360640190fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111207f0000000000000000000000000000000000000000000000000000000000000000848461332c565b60008060006127c97f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613473565b90506000876127d8578c6127dc565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561285257600080fd5b505af1158015612866573d6000803e3d6000fd5b505050506128788e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b600080600083428110156128d6576040805162461bcd60e51b815260206004820152601260248201526000805160206144b5833981519152604482015290519081900360640190fd5b6128e48c8c8c8c8c8c61400a565b909450925060006129167f00000000000000000000000000000000000000000000000000000000000000008e8e613473565b90506129248d338388613533565b6129308c338387613533565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561298857600080fd5b505af115801561299c573d6000803e3d6000fd5b505050506040513d60208110156129b257600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015612a12576040805162461bcd60e51b815260206004820152601260248201526000805160206144b5833981519152604482015290519081900360640190fd5b612a408a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c61400a565b90945092506000612a927f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613473565b9050612aa08b338388613533565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612afb57600080fd5b505af1158015612b0f573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b9457600080fd5b505af1158015612ba8573d6000803e3d6000fd5b505050506040513d6020811015612bbe57600080fd5b5051612bc657fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612c1e57600080fd5b505af1158015612c32573d6000803e3d6000fd5b505050506040513d6020811015612c4857600080fd5b5051925034841015612c6057612c6033853403613144565b505096509650969350505050565b60608142811015612cb4576040805162461bcd60e51b815260206004820152601260248201526000805160206144b5833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612ceb57fe5b905060200201356001600160a01b03166001600160a01b031614612d44576040805162461bcd60e51b81526020600482015260176024820152600080516020614430833981519152604482015290519081900360640190fd5b612da27f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138d692505050565b91503482600081518110612db257fe5b60200260200101511115612df75760405162461bcd60e51b81526004018080602001828103825260218152602001806145456021913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e3357fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e6657600080fd5b505af1158015612e7a573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612edf7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110612eec57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f4357600080fd5b505af1158015612f57573d6000803e3d6000fd5b505050506040513d6020811015612f6d57600080fd5b5051612f7557fe5b612fb482878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613690915050565b81600081518110612fc157fe5b6020026020010151341115611e6a57611e6a3383600081518110612fe157fe5b60200260200101513403613144565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b6020831061306d5780518252601f19909201916020918201910161304e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130cf576040519150601f19603f3d011682016040523d82523d6000602084013e6130d4565b606091505b509150915081801561310257508051158061310257508080602001905160208110156130ff57600080fd5b50515b61313d5760405162461bcd60e51b815260040180806020018281038252602d815260200180614566602d913960400191505060405180910390fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106131905780518252601f199092019160209182019101613171565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131f2576040519150601f19603f3d011682016040523d82523d6000602084013e6131f7565b606091505b50509050806132375760405162461bcd60e51b81526004018080602001828103825260348152602001806144816034913960400191505060405180910390fd5b505050565b600080841161327c5760405162461bcd60e51b81526004018080602001828103825260258152602001806144fb6025913960400191505060405180910390fd5b60008311801561328c5750600082115b6132c75760405162461bcd60e51b81526004018080602001828103825260228152602001806145936022913960400191505060405180910390fd5b60006132db856103e663ffffffff6142aa16565b905060006132ef828563ffffffff6142aa16565b9050600061331583613309886103e863ffffffff6142aa16565b9063ffffffff61430d16565b905080828161332057fe5b04979650505050505050565b6060600282511015613380576040805162461bcd60e51b81526020600482015260186024820152770a0c2c898d2c4e4c2e4f27440929cac82989288bea082a8960431b604482015290519081900360640190fd5b815167ffffffffffffffff8111801561339857600080fd5b506040519080825280602002602001820160405280156133c2578160200160208202803683370190505b50905082816000815181106133d357fe5b60200260200101818152505060005b600183510381101561346b576000806134258786858151811061340157fe5b602002602001015187866001018151811061341857fe5b602002602001015161435c565b9150915061344784848151811061343857fe5b6020026020010151838361323c565b84846001018151811061345657fe5b602090810291909101015250506001016133e2565b509392505050565b60008060006134828585613f16565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f3eb475f0bc063c4f457199bae925b27d909f4af70ef7db78ba734972fc1a8543609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135b85780518252601f199092019160209182019101613599565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461361a576040519150601f19603f3d011682016040523d82523d6000602084013e61361f565b606091505b509150915081801561364d57508051158061364d575080806020019051602081101561364a57600080fd5b50515b6136885760405162461bcd60e51b81526004018080602001828103825260318152602001806144506031913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138d0576000808483815181106136ae57fe5b60200260200101518584600101815181106136c557fe5b60200260200101519150915060006136dd8383613f16565b50905060008785600101815181106136f157fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461371f57826000613723565b6000835b91509150600060028a5103881061373a578861377b565b61377b7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061376e57fe5b6020026020010151613473565b90506137a87f00000000000000000000000000000000000000000000000000000000000000008888613473565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156137e5576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561385657818101518382015260200161383e565b50505050905090810190601f1680156138835780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156138a557600080fd5b505af11580156138b9573d6000803e3d6000fd5b505060019099019850613693975050505050505050565b50505050565b606060028251101561392a576040805162461bcd60e51b81526020600482015260186024820152770a0c2c898d2c4e4c2e4f27440929cac82989288bea082a8960431b604482015290519081900360640190fd5b815167ffffffffffffffff8111801561394257600080fd5b5060405190808252806020026020018201604052801561396c578160200160208202803683370190505b509050828160018351038151811061398057fe5b60209081029190910101528151600019015b801561346b576000806139c2878660018603815181106139ae57fe5b602002602001015187868151811061341857fe5b915091506139e48484815181106139d557fe5b60200260200101518383613d64565b8460018503815181106139f357fe5b6020908102919091010152505060001901613992565b60005b600183510381101561323757600080848381518110613a2757fe5b6020026020010151858460010181518110613a3e57fe5b6020026020010151915091506000613a568383613f16565b5090506000613a867f00000000000000000000000000000000000000000000000000000000000000008585613473565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613ac757600080fd5b505afa158015613adb573d6000803e3d6000fd5b505050506040513d6060811015613af157600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613b27578284613b2a565b83835b91509150613b88828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b9550613b9586838361323c565b945050505050600080856001600160a01b0316886001600160a01b031614613bbf57826000613bc3565b6000835b91509150600060028c51038a10613bda578a613c0e565b613c0e7f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061376e57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c98578181015183820152602001613c80565b50505050905090810190601f168015613cc55780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613ce757600080fd5b505af1158015613cfb573d6000803e3d6000fd5b50506001909b019a50613a0c9950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613da45760405162461bcd60e51b81526004018080602001828103825260268152602001806144d56026913960400191505060405180910390fd5b600083118015613db45750600082115b613def5760405162461bcd60e51b81526004018080602001828103825260228152602001806145936022913960400191505060405180910390fd5b6000613e136103e8613e07868863ffffffff6142aa16565b9063ffffffff6142aa16565b90506000613e2d6103e6613e07868963ffffffff613d1416565b9050613e4a6001828481613e3d57fe5b049063ffffffff61430d16565b9695505050505050565b6000808411613eaa576040805162461bcd60e51b815260206004820152601f60248201527f5061644c6962726172793a20494e53554646494349454e545f414d4f554e5400604482015290519081900360640190fd5b600083118015613eba5750600082115b613ef55760405162461bcd60e51b81526004018080602001828103825260228152602001806145936022913960400191505060405180910390fd5b82613f06858463ffffffff6142aa16565b81613f0d57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613f80576040805162461bcd60e51b815260206004820152601f60248201527f5061644c6962726172793a204944454e544943414c5f41444452455353455300604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b031610613fa0578284613fa3565b83835b90925090506001600160a01b038216614003576040805162461bcd60e51b815260206004820152601860248201527f5061644c6962726172793a205a45524f5f414444524553530000000000000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561408457600080fd5b505afa158015614098573d6000803e3d6000fd5b505050506040513d60208110156140ae57600080fd5b50516001600160a01b0316141561416157604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561413457600080fd5b505af1158015614148573d6000803e3d6000fd5b505050506040513d602081101561415e57600080fd5b50505b60008061418f7f00000000000000000000000000000000000000000000000000000000000000008b8b61435c565b915091508160001480156141a1575080155b156141b15787935086925061429d565b60006141be898484613e54565b9050878111614227578581101561421c576040805162461bcd60e51b815260206004820181905260248201527f506164526f757465723a20494e53554646494349454e545f425f414d4f554e54604482015290519081900360640190fd5b88945092508261429b565b6000614234898486613e54565b90508981111561424057fe5b87811015614295576040805162461bcd60e51b815260206004820181905260248201527f506164526f757465723a20494e53554646494349454e545f415f414d4f554e54604482015290519081900360640190fd5b94508793505b505b5050965096945050505050565b60008115806142c5575050808202828282816142c257fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b600080600061436b8585613f16565b509050614379868686613473565b50600080614388888888613473565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156143c057600080fd5b505afa1580156143d4573d6000803e3d6000fd5b505050506040513d60608110156143ea57600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b038781169084161461441d578082614420565b81815b9099909850965050505050505056fe506164526f757465723a20494e56414c49445f504154480000000000000000005472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c6564506164526f757465723a204558504952454400000000000000000000000000005061644c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545061644c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54506164526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54506164526f757465723a204558434553534956455f494e5055545f414d4f554e545472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c65645061644c6962726172793a20494e53554646494349454e545f4c4951554944495459a2646970667358221220b91ac39c762420459bc9654c1dd3e67de73a67a51c29d4c2f53b439e8f09f6a364736f6c63430006060033000000000000000000000000663a07a2648296f1a3c02ee86a126fe1407888e5000000000000000000000000e3db50049c74de2f7d7269823af3178cf22fd5e3

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

000000000000000000000000663a07a2648296f1a3c02ee86a126fe1407888e5000000000000000000000000e3db50049c74de2f7d7269823af3178cf22fd5e3

-----Decoded View---------------
Arg [0] : _factory (address): 0x663a07a2648296f1a3c02ee86a126fe1407888e5
Arg [1] : _WETH (address): 0xe3db50049c74de2f7d7269823af3178cf22fd5e3

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000663a07a2648296f1a3c02ee86a126fe1407888e5
Arg [1] : 000000000000000000000000e3db50049c74de2f7d7269823af3178cf22fd5e3


Deployed ByteCode Sourcemap

16422:18121:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16884:10;-1:-1:-1;;;;;16898:4:0;16884:18;;16877:26;;;;16422:18121;;12:1:-1;9;2:12;20932:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20932:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20932:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33511:256;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33511:256:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33511:256:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27957:826;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27957:826:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27957:826:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27957:826:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27957:826:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27957:826:0;;-1:-1:-1;27957:826:0;-1:-1:-1;;;;;;27957:826: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;27957:826:0;;;;;;;;;;;;;;;;;34293:247;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34293:247:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34293:247:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34293:247:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34293:247:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34293:247:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34293:247:0;;-1:-1:-1;34293:247:0;;-1:-1:-1;;;;;34293:247:0:i;21611:665::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21611:665:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21611:665:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25258:610::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25258:610:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25258:610:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25258:610:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25258:610:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25258:610:0;;-1:-1:-1;25258:610:0;-1:-1:-1;;;;;;25258:610:0;;;;;;;;:::i;27147:804::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27147:804:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27147:804:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27147:804:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27147:804:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27147:804:0;;-1:-1:-1;27147:804:0;-1:-1:-1;;;;;;27147:804:0;;;;;;;;:::i;23724:706::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23724:706:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23724:706:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30906:702::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30906:702:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30906:702:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30906:702:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30906:702:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30906:702:0;;-1:-1:-1;30906:702:0;-1:-1:-1;;;;;;30906:702:0;;;;;;;;:::i;32452:825::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32452:825:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32452:825:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;32452:825:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32452:825:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;32452:825:0;;-1:-1:-1;32452:825:0;-1:-1:-1;;;;;;32452:825:0;;;;;;;;:::i;26468:673::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26468:673:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26468:673:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26468:673:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26468:673:0;;-1:-1:-1;26468:673:0;-1:-1:-1;;;;;;26468:673:0;;;;;;;;:::i;33775:255::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33775:255:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33775:255:0;;;;;;;;;;;;:::i;25874:588::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25874:588:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25874:588:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25874:588:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25874:588:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25874:588:0;;-1:-1:-1;25874:588:0;-1:-1:-1;;;;;;25874:588:0;;;;;;;;:::i;16544:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16544:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;16544:38:0;;;;;;;;;;;;;;33321:182;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33321:182:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33321:182:0;;;;;;;;;;;;:::i;23018:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23018:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23018:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31614:832::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31614:832:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31614:832:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31614:832:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31614:832:0;;-1:-1:-1;31614:832:0;-1:-1:-1;;;;;;31614:832:0;;;;;;;;:::i;20097:829::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20097:829:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20097:829:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16496:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16496:41:0;;;:::i;34038:247::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34038:247:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34038:247:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34038:247:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34038:247:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34038:247:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34038:247:0;;-1:-1:-1;34038:247:0;;-1:-1:-1;;;;;34038:247:0:i;22282:657::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22282:657:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22282:657:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18360:726::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18360:726:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18360:726:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;19092:962;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19092:962:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28789:786::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28789:786:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28789:786:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28789:786:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28789:786:0;;-1:-1:-1;28789:786:0;-1:-1:-1;;;;;;28789:786:0;;;;;;;;:::i;20932:673::-;21169:16;21187:14;21150:8;16653:15;16641:8;:27;;16633:58;;;;;-1:-1:-1;;;16633:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16633:58:0;;;;;;;;;;;;;;;21241:196:::1;21271:5;21291:4;21310:9;21334:14;21363:12;21398:4;21418:8;21241:15;:196::i;:::-;21214:223:::0;;-1:-1:-1;21214:223:0;-1:-1:-1;21448:51:0::1;21476:5:::0;21483:2;21214:223;21448:27:::1;:51::i;:::-;21516:4;-1:-1:-1::0;;;;;21510:20:0::1;;21531:9;21510:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21510:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21510:31:0;;;;21552:45;21583:2;21587:9;21552:30;:45::i;:::-;20932:673:::0;;;;;;;;;;:::o;33511:256::-;33664:14;33703:56;33727:8;33737:9;33748:10;33703:23;:56::i;:::-;33696:63;33511:256;-1:-1:-1;;;;33511:256:0:o;27957:826::-;28171:21;28143:8;16653:15;16641:8;:27;;16633:58;;;;;-1:-1:-1;;;16633:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16633:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28243:4:0::1;28218:29;:4:::0;;-1:-1:-1;;28223:15:0;;28218:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28218:21:0::1;-1:-1:-1::0;;;;;28218:29:0::1;;28210:65;;;::::0;;-1:-1:-1;;;28210:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28210:65:0;;;;;;;;;;;;;::::1;;28296:49;28321:7;28330:8;28340:4;;28296:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28296:24:0::1;::::0;-1:-1:-1;;;28296:49:0:i:1;:::-;28286:59;;28395:12;28364:7;28389:1;28372:7;:14;:18;28364:27;;;;;;;;;;;;;;:43;;28356:93;;;;-1:-1:-1::0;;;28356:93:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28460:135;28506:4;;28511:1;28506:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28506:7:0::1;28515:10;28527:45;28546:7;28555:4;;28560:1;28555:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28555:7:0::1;28564:4;;28569:1;28564:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28564:7:0::1;28527:18;:45::i;:::-;28574:7;28582:1;28574:10;;;;;;;;;;;;;;28460:31;:135::i;:::-;28606:35;28612:7;28621:4;;28606:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28635:4:0::1;::::0;-1:-1:-1;28606:5:0::1;::::0;-1:-1:-1;;28606:35:0:i:1;:::-;28658:4;-1:-1:-1::0;;;;;28652:20:0::1;;28673:7;28698:1;28681:7;:14;:18;28673:27;;;;;;;;;;;;;;28652:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28652:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28652:49:0;;;;28712:63;28743:2;28747:7;28772:1;28755:7;:14;:18;28747:27;;;;;;;;;;;;;;28712:30;:63::i;:::-;27957:826:::0;;;;;;;;;:::o;34293:247::-;34437:21;34483:49;34507:7;34516:9;34527:4;34483:23;:49::i;:::-;34476:56;;34293:247;;;;;:::o;21611:665::-;21917:12;21931;21956;21971:43;21990:7;21999:6;22007;21971:18;:43::i;:::-;21956:58;;22025:10;22038;:33;;22062:9;22038:33;;;-1:-1:-1;;22038:33:0;22082:74;;;-1:-1:-1;;;22082:74:0;;22104:10;22082:74;;;;22124:4;22082:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22025:46;;-1:-1:-1;;;;;;22082:21:0;;;;;:74;;;;;-1:-1:-1;;22082:74:0;;;;;;;;-1:-1:-1;22082:21:0;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;22082:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22082:74:0;;;;22188:80;22204:6;22212;22220:9;22231:10;22243;22255:2;22259:8;22188:15;:80::i;:::-;22167:101;;;;;;;;21611:665;;;;;;;;;;;;;;;;:::o;25258:610::-;25482:21;25463:8;16653:15;16641:8;:27;;16633:58;;;;;-1:-1:-1;;;16633:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16633:58:0;;;;;;;;;;;;;;;25526:49:::1;25551:7;25560:8;25570:4;;25526:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25526:24:0::1;::::0;-1:-1:-1;;;25526:49:0:i:1;:::-;25516:59;;25625:12;25594:7;25619:1;25602:7;:14;:18;25594:27;;;;;;;;;;;;;;:43;;25586:93;;;;-1:-1:-1::0;;;25586:93:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25690:135;25736:4;;25741:1;25736:7;;;;;;25690:135;25836:24;25842:7;25851:4;;25836:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25857:2:0;;-1:-1:-1;25836:5:0::1;::::0;-1:-1:-1;;25836:24:0:i:1;27147:804::-:0;27361:21;27333:8;16653:15;16641:8;:27;;16633:58;;;;;-1:-1:-1;;;16633:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16633:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27433:4:0::1;27408:29;:4:::0;;-1:-1:-1;;27413:15:0;;27408:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27408:21:0::1;-1:-1:-1::0;;;;;27408:29:0::1;;27400:65;;;::::0;;-1:-1:-1;;;27400:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27400:65:0;;;;;;;;;;;;;::::1;;27486:49;27510:7;27519:9;27530:4;;27486:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27486:23:0::1;::::0;-1:-1:-1;;;27486:49:0:i:1;:::-;27476:59;;27568:11;27554:7;27562:1;27554:10;;;;;;;;;;;;;;:25;;27546:71;;;;-1:-1:-1::0;;;27546:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23724:706:::0;24042:14;24069:12;24084:40;24103:7;24112:5;24119:4;24084:18;:40::i;:::-;24069:55;;24135:10;24148;:33;;24172:9;24148:33;;;-1:-1:-1;;24148:33:0;24192:74;;;-1:-1:-1;;;24192:74:0;;24214:10;24192:74;;;;24234:4;24192:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24135:46;;-1:-1:-1;;;;;;24192:21:0;;;;;:74;;;;;-1:-1:-1;;24192:74:0;;;;;;;;-1:-1:-1;24192:21:0;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;24192:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24192:74:0;;;;24289:133;24351:5;24358:9;24369:14;24385:12;24399:2;24403:8;24289:47;:133::i;:::-;24277:145;23724:706;-1:-1:-1;;;;;;;;;;;;;23724:706:0:o;30906:702::-;31140:8;16653:15;16641:8;:27;;16633:58;;;;;-1:-1:-1;;;16633:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16633:58:0;;;;;;;;;;;;;;;31161:133:::1;31207:4;;31212:1;31207:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31207:7:0::1;31216:10;31228:45;31247:7;31256:4;;31261:1;31256:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31256:7:0::1;31265:4;;31270:1;31265:7;;;;;;31228:45;31275:8;31161:31;:133::i;:::-;31305:18;31333:4:::0;;-1:-1:-1;;31338:15:0;;31333:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31333:21:0::1;-1:-1:-1::0;;;;;31326:39:0::1;;31366:2;31326:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31326:43:0::1;-1:-1:-1::0;;;;;31326:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31326:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31326:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31326:43:0;31380:44:::1;::::0;;31326:43:::1;31380:44:::0;;::::1;::::0;;;;;;;;;;;31326:43;;-1:-1:-1;31380:44:0::1;::::0;;;31415:4;;;;;;31380:44;::::1;::::0;31415:4;;31380:44;31415:4;31380:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31421:2:0;;-1:-1:-1;31380:34:0::1;::::0;-1:-1:-1;;31380:44:0:i:1;:::-;31523:12:::0;31457:62:::1;31505:13:::0;31464:4;;-1:-1:-1;;31469:15:0;;31464:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31464:21:0::1;-1:-1:-1::0;;;;;31457:39:0::1;;31497:2;31457:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31457:43:0::1;-1:-1:-1::0;;;;;31457:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31457:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31457:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31457:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;31435:165;;;;-1:-1:-1::0;;;31435:165:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16702:1;30906:702:::0;;;;;;;:::o;32452:825::-;32719:8;16653:15;16641:8;:27;;16633:58;;;;;-1:-1:-1;;;16633:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16633:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32778:4:0::1;32753:29;:4:::0;;-1:-1:-1;;32758:15:0;;32753:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32753:21:0::1;-1:-1:-1::0;;;;;32753:29:0::1;;32745:65;;;::::0;;-1:-1:-1;;;32745:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32745:65:0;;;;;;;;;;;;;::::1;;32821:133;32867:4;;32872:1;32867:7;;;;;;32821:133;32965:55;33000:4;;32965:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33014:4:0::1;::::0;-1:-1:-1;32965:34:0::1;::::0;-1:-1:-1;;32965:55:0:i:1;:::-;33048:37;::::0;;-1:-1:-1;;;33048:37:0;;33079:4:::1;33048:37;::::0;::::1;::::0;;;33031:14:::1;::::0;-1:-1:-1;;;;;33055:4:0::1;33048:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;33048:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33048:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33048:37:0;;-1:-1:-1;33104:25:0;;::::1;;33096:75;;;;-1:-1:-1::0;;;33096:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33188:4;-1:-1:-1::0;;;;;33182:20:0::1;;33203:9;33182:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33182:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33182:31:0;;;;33224:45;33255:2;33259:9;33224:30;:45::i;26468:673::-:0;26684:21;26656:8;16653:15;16641:8;:27;;16633:58;;;;;-1:-1:-1;;;16633:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16633:58:0;;;;;;;;;;;;;;;26742:4:::1;-1:-1:-1::0;;;;;26731:15:0::1;:4;;26736:1;26731:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26731:7:0::1;-1:-1:-1::0;;;;;26731:15:0::1;;26723:51;;;::::0;;-1:-1:-1;;;26723:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26723:51:0;;;;;;;;;;;;;::::1;;26795:50;26820:7;26829:9;26840:4;;26795:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26795:24:0::1;::::0;-1:-1:-1;;;26795:50:0:i:1;:::-;26785:60;;26895:12;26864:7;26889:1;26872:7;:14;:18;26864:27;;;;;;;;;;;;;;:43;;26856:93;;;;-1:-1:-1::0;;;26856:93:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26966:4;-1:-1:-1::0;;;;;26960:19:0::1;;26987:7;26995:1;26987:10;;;;;;;;;;;;;;26960:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26960:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26960:40:0;;;;;27024:4;-1:-1:-1::0;;;;;27018:20:0::1;;27039:45;27058:7;27067:4;;27072:1;27067:7;;;;;;27039:45;27086:7;27094:1;27086:10;;;;;;;;;;;;;;27018:79;;;;;;;;;;;;;-1:-1:-1::0;;;;;27018:79:0::1;-1:-1:-1::0;;;;;27018:79:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27018:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27018:79:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27018:79:0;27011:87:::1;;;;27109:24;27115:7;27124:4;;27109:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27130:2:0;;-1:-1:-1;27109:5:0::1;::::0;-1:-1:-1;;27109:24:0:i:1;:::-;26468:673:::0;;;;;;;;:::o;33775:255::-;33928:13;33966:56;33989:9;34000;34011:10;33966:22;:56::i;25874:588::-;26098:21;26079:8;16653:15;16641:8;:27;;16633:58;;;;;-1:-1:-1;;;16633:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16633:58:0;;;;;;;;;;;;;;;26142:49:::1;26166:7;26175:9;26186:4;;26142:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26142:23:0::1;::::0;-1:-1:-1;;;26142:49:0:i:1;:::-;26132:59;;26224:11;26210:7;26218:1;26210:10;;;;;;;;;;;;;;:25;;26202:71;;;;-1:-1:-1::0;;;26202:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16544:38:::0;;;:::o;33321:182::-;33418:12;33450:45;33467:7;33476:8;33486;33450:16;:45::i;23018:700::-;23284:14;23265:8;16653:15;16641:8;:27;;16633:58;;;;;-1:-1:-1;;;16633:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16633:58:0;;;;;;;;;;;;;;;23327:196:::1;23357:5;23377:4;23396:9;23420:14;23449:12;23484:4;23504:8;23327:15;:196::i;:::-;23573:38;::::0;;-1:-1:-1;;;23573:38:0;;23605:4:::1;23573:38;::::0;::::1;::::0;;;23311:212;;-1:-1:-1;23534:78:0::1;::::0;-1:-1:-1;23562:5:0;;23569:2;;-1:-1:-1;;;;;23573:23:0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;23573:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23573:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23573:38:0;23534:27:::1;:78::i;:::-;23629:4;-1:-1:-1::0;;;;;23623:20:0::1;;23644:9;23623:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23623:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23623:31:0;;;;23665:45;23696:2;23700:9;23665:30;:45::i;31614:832::-:0;31874:8;16653:15;16641:8;:27;;16633:58;;;;;-1:-1:-1;;;16633:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16633:58:0;;;;;;;;;;;;;;;31919:4:::1;-1:-1:-1::0;;;;;31908:15:0::1;:4;;31913:1;31908:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31908:7:0::1;-1:-1:-1::0;;;;;31908:15:0::1;;31900:51;;;::::0;;-1:-1:-1;;;31900:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31900:51:0;;;;;;;;;;;;;::::1;;31962:13;31978:9;31962:25;;32004:4;-1:-1:-1::0;;;;;31998:19:0::1;;32025:8;31998:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31998:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31998:38:0;;;;;32060:4;-1:-1:-1::0;;;;;32054:20:0::1;;32075:45;32094:7;32103:4;;32108:1;32103:7;;;;;;32075:45;32122:8;32054:77;;;;;;;;;;;;;-1:-1:-1::0;;;;;32054:77:0::1;-1:-1:-1::0;;;;;32054:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32054:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32054:77:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32054:77:0;32047:85:::1;;;;32143:18;32171:4:::0;;-1:-1:-1;;32176:15:0;;32171:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32171:21:0::1;-1:-1:-1::0;;;;;32164:39:0::1;;32204:2;32164:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32164:43:0::1;-1:-1:-1::0;;;;;32164:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32164:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32164:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32164:43:0;32218:44:::1;::::0;;32164:43:::1;32218:44:::0;;::::1;::::0;;;;;;;;;;;32164:43;;-1:-1:-1;32218:44:0::1;::::0;;;32253:4;;;;;;32218:44;::::1;::::0;32253:4;;32218:44;32253:4;32218:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32259:2:0;;-1:-1:-1;32218:34:0::1;::::0;-1:-1:-1;;32218:44:0:i:1;:::-;32361:12:::0;32295:62:::1;32343:13:::0;32302:4;;-1:-1:-1;;32307:15:0;;32302:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32302:21:0::1;-1:-1:-1::0;;;;;32295:39:0::1;;32335:2;32295:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32295:43:0::1;-1:-1:-1::0;;;;;32295:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;20097:829:0::0;20351:12;20365;20332:8;16653:15;16641:8;:27;;16633:58;;;;;-1:-1:-1;;;16633:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16633:58:0;;;;;;;;;;;;;;;20390:12:::1;20405:43;20424:7;20433:6;20441;20405:18;:43::i;:::-;20459:56;::::0;;-1:-1:-1;;;20459:56:0;;20487:10:::1;20459:56;::::0;::::1;::::0;-1:-1:-1;;;;;20459:27:0;::::1;:56:::0;;;;;;;;;;;;;;20390:58;;-1:-1:-1;20459:27:0;;::::1;::::0;:56;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20459:27:0;:56;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20459:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20459:56:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;20583:23:0::1;::::0;;-1:-1:-1;;;20583:23:0;;-1:-1:-1;;;;;20583:23:0;;::::1;;::::0;::::1;::::0;;;20553:12:::1;::::0;;;20583:19;;::::1;::::0;::::1;::::0;:23;;;;;;;;;;;20553:12;20583:19;:23;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20583:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20583:23:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20583:23:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20583:23:0;-1:-1:-1;20618:14:0::1;20637:37;20659:6:::0;20667;20637:21:::1;:37::i;:::-;20617:57;;;20716:6;-1:-1:-1::0;;;;;20706:16:0::1;:6;-1:-1:-1::0;;;;;20706:16:0::1;;:58;;20747:7;20756;20706:58;;;20726:7;20735;20706:58;20685:79:::0;;-1:-1:-1;20685:79:0;-1:-1:-1;20783:21:0;;::::1;;20775:66;;;::::0;;-1:-1:-1;;;20775:66:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;20871:10;20860:7;:21;;20852:66;;;::::0;;-1:-1:-1;;;20852:66:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;16702:1;;;;20097:829:::0;;;;;;;;;;;:::o;16496:41::-;;;:::o;34038:247::-;34182:21;34228:49;34253:7;34262:8;34272:4;34228:24;:49::i;22282:657::-;22571:16;22589:14;22616:12;22631:40;22650:7;22659:5;22666:4;22631:18;:40::i;:::-;22616:55;;22682:10;22695;:33;;22719:9;22695:33;;;-1:-1:-1;;22695:33:0;22739:74;;;-1:-1:-1;;;22739:74:0;;22761:10;22739:74;;;;22781:4;22739:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22682:46;;-1:-1:-1;;;;;;22739:21:0;;;;;:74;;;;;-1:-1:-1;;22739:74:0;;;;;;;;-1:-1:-1;22739:21:0;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;22739:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22739:74:0;;;;22851:80;22870:5;22877:9;22888:14;22904:12;22918:2;22922:8;22851:18;:80::i;:::-;22824:107;;;;-1:-1:-1;22282:657:0;-1:-1:-1;;;;;;;;;;;;;22282:657:0:o;18360:726::-;18648:12;18662;18676:14;18629:8;16653:15;16641:8;:27;;16633:58;;;;;-1:-1:-1;;;16633:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16633:58:0;;;;;;;;;;;;;;;18724:85:::1;18738:6;18746;18754:14;18770;18786:10;18798;18724:13;:85::i;:::-;18703:106:::0;;-1:-1:-1;18703:106:0;-1:-1:-1;18820:12:0::1;18835:43;18854:7;18863:6:::0;18871;18835:18:::1;:43::i;:::-;18820:58;;18889:66;18921:6;18929:10;18941:4;18947:7;18889:31;:66::i;:::-;18966;18998:6;19006:10;19018:4;19024:7;18966:31;:66::i;:::-;19064:4;-1:-1:-1::0;;;;;19055:19:0::1;;19075:2;19055:23;;;;;;;;;;;;;-1:-1:-1::0;;;;;19055:23:0::1;-1:-1:-1::0;;;;;19055:23:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19055:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19055:23:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19055:23:0;18360:726;;;;-1:-1:-1;19055:23:0;;-1:-1:-1;18360:726:0;;-1:-1:-1;;;;;;;;;18360:726:0:o;19092:962::-;19345:16;19363:14;19379;19326:8;16653:15;16641:8;:27;;16633:58;;;;;-1:-1:-1;;;16633:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16633:58:0;;;;;;;;;;;;;;;19433:176:::1;19461:5;19481:4;19500:18;19533:9;19557:14;19586:12;19433:13;:176::i;:::-;19406:203:::0;;-1:-1:-1;19406:203:0;-1:-1:-1;19620:12:0::1;19635:40;19654:7;19663:5:::0;19670:4:::1;19635:18;:40::i;:::-;19620:55;;19686:69;19718:5;19725:10;19737:4;19743:11;19686:31;:69::i;:::-;19772:4;-1:-1:-1::0;;;;;19766:19:0::1;;19793:9;19766:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19766:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19766:39:0;;;;;19829:4;-1:-1:-1::0;;;;;19823:20:0::1;;19844:4;19850:9;19823:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;19823:37:0::1;-1:-1:-1::0;;;;;19823:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19823:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19823:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19823:37:0;19816:45:::1;;;;19893:4;-1:-1:-1::0;;;;;19884:19:0::1;;19904:2;19884:23;;;;;;;;;;;;;-1:-1:-1::0;;;;;19884:23:0::1;-1:-1:-1::0;;;;;19884:23:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19884:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19884:23:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19884:23:0;;-1:-1:-1;19958:9:0::1;:21:::0;-1:-1:-1;19954:92:0::1;;;19981:65;20012:10;20036:9;20024;:21;19981:30;:65::i;:::-;16702:1;19092:962:::0;;;;;;;;;;;:::o;28789:786::-;29002:21;28974:8;16653:15;16641:8;:27;;16633:58;;;;;-1:-1:-1;;;16633:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16633:58:0;;;;;;;;;;;;;;;29060:4:::1;-1:-1:-1::0;;;;;29049:15:0::1;:4;;29054:1;29049:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29049:7:0::1;-1:-1:-1::0;;;;;29049:15:0::1;;29041:51;;;::::0;;-1:-1:-1;;;29041:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;29041:51:0;;;;;;;;;;;;;::::1;;29113:49;29137:7;29146:9;29157:4;;29113:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29113:23:0::1;::::0;-1:-1:-1;;;29113:49:0:i:1;:::-;29103:59;;29195:9;29181:7;29189:1;29181:10;;;;;;;;;;;;;;:23;;29173:69;;;;-1:-1:-1::0;;;29173:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29259:4;-1:-1:-1::0;;;;;29253:19:0::1;;29280:7;29288:1;29280:10;;;;;;;;;;;;;;29253:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29253:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29253:40:0;;;;;29317:4;-1:-1:-1::0;;;;;29311:20:0::1;;29332:45;29351:7;29360:4;;29365:1;29360:7;;;;;;29332:45;29379:7;29387:1;29379:10;;;;;;;;;;;;;;29311:79;;;;;;;;;;;;;-1:-1:-1::0;;;;;29311:79:0::1;-1:-1:-1::0;;;;;29311:79:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29311:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29311:79:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29311:79:0;29304:87:::1;;;;29402:24;29408:7;29417:4;;29402:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29423:2:0;;-1:-1:-1;29402:5:0::1;::::0;-1:-1:-1;;29402:24:0:i:1;:::-;29489:7;29497:1;29489:10;;;;;;;;;;;;;;29477:9;:22;29473:94;;;29501:66;29532:10;29556:7;29564:1;29556:10;;;;;;;;;;;;;;29544:9;:22;29501:30;:66::i;14435:449::-:0;14667:45;;;-1:-1:-1;;;;;14667:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;14667:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;14656:57:0;;;;14621:12;;14635:17;;14656:10;;;;14667:45;14656:57;;;25:18:-1;14656:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;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;;;14656: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;;14620:93:0;;;;14746:7;:57;;;;-1:-1:-1;14758:11:0;;:16;;:44;;;14789:4;14778:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;14778:24:0;14758:44;14724:152;;;;-1:-1:-1;;;14724:152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14435:449;;;;;:::o;15398:217::-;15511:12;;;15471;15511;;;;;;;;;-1:-1:-1;;;;;15489:7:0;;;15504:5;;15489:35;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;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;;;15489:35: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;;15470:54:0;;;15543:7;15535:72;;;;-1:-1:-1;;;15535:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15398:217;;;:::o;6456:505::-;6549:14;6595:1;6584:8;:12;6576:62;;;;-1:-1:-1;;;6576:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6669:1;6657:9;:13;:31;;;;;6687:1;6674:10;:14;6657:31;6649:78;;;;-1:-1:-1;;;6649:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6738:20;6761:17;:8;6774:3;6761:17;:12;:17;:::i;:::-;6738:40;-1:-1:-1;6789:14:0;6806:31;6738:40;6826:10;6806:31;:19;:31;:::i;:::-;6789:48;-1:-1:-1;6848:16:0;6867:40;6891:15;6867:19;:9;6881:4;6867:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;6848:59;;6942:11;6930:9;:23;;;;;;;6456:505;-1:-1:-1;;;;;;;6456:505:0:o;7624:::-;7725:21;7782:1;7767:4;:11;:16;;7759:53;;;;;-1:-1:-1;;;7759:53:0;;;;;;;;;;;;-1:-1:-1;;;7759:53:0;;;;;;;;;;;;;;;7844:4;:11;7833:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;7833:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;7833:23:0;;7823:33;;7880:8;7867:7;7875:1;7867:10;;;;;;;;;;;;;:21;;;;;7904:6;7899:223;7930:1;7916:4;:11;:15;7912:1;:19;7899:223;;;7954:14;7970:15;7989:42;8001:7;8010:4;8015:1;8010:7;;;;;;;;;;;;;;8019:4;8024:1;8028;8024:5;8019:11;;;;;;;;;;;;;;7989;:42::i;:::-;7953:78;;;;8063:47;8076:7;8084:1;8076:10;;;;;;;;;;;;;;8088:9;8099:10;8063:12;:47::i;:::-;8046:7;8054:1;8058;8054:5;8046:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;7933:3:0;;7899:223;;;;7624:505;;;;;:::o;4945:481::-;5034:12;5060:14;5076;5094:26;5105:6;5113;5094:10;:26::i;:::-;5258:32;;;-1:-1:-1;;5258:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;5258:32:0;;;;;5248:43;;;;;;-1:-1:-1;;;;;;5161:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;5161:251:0;;;;;;;5151:262;;;;;;;;;4945:481;-1:-1:-1;;;;;4945:481:0:o;14892:498::-;15163:51;;;-1:-1:-1;;;;;15163:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;15163:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;15152:63:0;;;;15117:12;;15131:17;;15152:10;;;;15163:51;15152:63;;;25:18:-1;15152:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;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;;;15152: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;;15116:99:0;;;;15248:7;:57;;;;-1:-1:-1;15260:11:0;;:16;;:44;;;15291:4;15280:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;15280:24:0;15260:44;15226:156;;;;-1:-1:-1;;;15226:156:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14892:498;;;;;;:::o;24541:711::-;24648:6;24643:602;24674:1;24660:4;:11;:15;24656:1;:19;24643:602;;;24698:13;24713:14;24732:4;24737:1;24732:7;;;;;;;;;;;;;;24741:4;24746:1;24750;24746:5;24741:11;;;;;;;;;;;;;;24697:56;;;;24769:14;24788:36;24810:5;24817:6;24788:21;:36::i;:::-;24768:56;;;24839:14;24856:7;24864:1;24868;24864:5;24856:14;;;;;;;;;;;;;;24839:31;;24886:15;24903;24931:6;-1:-1:-1;;;;;24922:15:0;:5;-1:-1:-1;;;;;24922:15:0;;:61;;24964:9;24980:1;24922:61;;;24946:1;24950:9;24922:61;24885:98;;;;24998:10;25029:1;25015:4;:11;:15;25011:1;:19;:76;;25084:3;25011:76;;;25033:48;25052:7;25061:6;25069:4;25074:1;25078;25074:5;25069:11;;;;;;;;;;;;;;25033:18;:48::i;:::-;24998:89;;25111:42;25130:7;25139:5;25146:6;25111:18;:42::i;:::-;-1:-1:-1;;;;;25102:57:0;;25178:10;25190;25202:2;25216:1;25206:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;25206:12:0;87:42:-1;143:17;;-1:-1;25206:12:0;;25102:131;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25102:131:0;-1:-1:-1;;;;;25102:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;25102:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25102:131:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;24677:3:0;;;;;-1:-1:-1;24643:602:0;;-1:-1:-1;;;;;;;;24643:602:0;;;24541:711;;;:::o;8210:526::-;8311:21;8368:1;8353:4;:11;:16;;8345:53;;;;;-1:-1:-1;;;8345:53:0;;;;;;;;;;;;-1:-1:-1;;;8345:53:0;;;;;;;;;;;;;;;8430:4;:11;8419:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;8419:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;8419:23:0;;8409:33;;8483:9;8453:7;8478:1;8461:7;:14;:18;8453:27;;;;;;;;;;;;;;;;;:39;8517:11;;-1:-1:-1;;8517:15:0;8503:226;8534:5;;8503:226;;8562:14;8578:15;8597:42;8609:7;8618:4;8627:1;8623;:5;8618:11;;;;;;;;;;;;;;8631:4;8636:1;8631:7;;;;;;;8597:42;8561:78;;;;8671:46;8683:7;8691:1;8683:10;;;;;;;;;;;;;;8695:9;8706:10;8671:11;:46::i;:::-;8654:7;8666:1;8662;:5;8654:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;8541:3:0;8503:226;;29722:1178;29835:6;29830:1063;29861:1;29847:4;:11;:15;29843:1;:19;29830:1063;;;29885:13;29900:14;29919:4;29924:1;29919:7;;;;;;;;;;;;;;29928:4;29933:1;29937;29933:5;29928:11;;;;;;;;;;;;;;29884:56;;;;29956:14;29975:36;29997:5;30004:6;29975:21;:36::i;:::-;29955:56;;;30026:13;30051:42;30070:7;30079:5;30086:6;30051:18;:42::i;:::-;30026:68;;30109:16;30140:17;30228:13;30243;30261:4;-1:-1:-1;;;;;30261:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30261:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30261:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30261:18:0;;;;;;;-1:-1:-1;;;;;30227:52:0;;;;-1:-1:-1;30227:52:0;;-1:-1:-1;30295:17:0;;-1:-1:-1;;;;;30336:15:0;;;;;;;:61;;30378:8;30388;30336:61;;;30355:8;30365;30336:61;30294:103;;;;30426:56;30469:12;30433:5;-1:-1:-1;;;;;30426:23:0;;30458:4;30426:38;;;;;;;;;;;;;-1:-1:-1;;;;;30426:38:0;-1:-1:-1;;;;;30426:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;30426:56:0;30412:70;;30512:65;30536:11;30549:12;30563:13;30512:23;:65::i;:::-;30497:80;;29830:1063;;;;30608:15;30625;30653:6;-1:-1:-1;;;;;30644:15:0;:5;-1:-1:-1;;;;;30644:15:0;;:67;;30689:12;30708:1;30644:67;;;30668:1;30672:12;30644:67;30607:104;;;;30726:10;30757:1;30743:4;:11;:15;30739:1;:19;:76;;30812:3;30739:76;;;30761:48;30780:7;30789:6;30797:4;30802:1;30806;30802:5;30797:11;;;;;;;30761:48;30868:12;;;30878:1;30868:12;;;;;;;;;;-1:-1:-1;;;30830:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;30830:51:0;;;;;;;;;;;;;;;;;;;;;;30726:89;;-1:-1:-1;30830:9:0;;;;;;30840:10;;30852;;30726:89;;30868:12;;30830:51;;;;;;;;30868:12;;30830:51;;;;30868:12;;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;30830:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30830:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29864:3:0;;;;;-1:-1:-1;29830:1063:0;;-1:-1:-1;;;;;;;;;;29830:1063:0;1474:129;1558:5;;;1553:16;;;;1545:50;;;;;-1:-1:-1;;;1545:50:0;;;;;;;;;;;;-1:-1:-1;;;1545:50:0;;;;;;;;;;;;;;7082:460;7175:13;7221:1;7209:9;:13;7201:64;;;;-1:-1:-1;;;7201:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7296:1;7284:9;:13;:31;;;;;7314:1;7301:10;:14;7284:31;7276:78;;;;-1:-1:-1;;;7276:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7365:14;7382:34;7411:4;7382:24;:9;7396;7382:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;7365:51;-1:-1:-1;7427:16:0;7446:34;7476:3;7446:25;:10;7461:9;7446:25;:14;:25;:::i;:34::-;7427:53;;7502:32;7532:1;7515:11;7503:9;:23;;;;;;;7502:32;:29;:32;:::i;:::-;7491:43;7082:460;-1:-1:-1;;;;;;7082:460:0:o;6025:309::-;6107:12;6150:1;6140:7;:11;6132:55;;;;;-1:-1:-1;;;6132:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;6217:1;6206:8;:12;:28;;;;;6233:1;6222:8;:12;6206:28;6198:75;;;;-1:-1:-1;;;6198:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6318:8;6294:21;:7;6306:8;6294:21;:11;:21;:::i;:::-;:32;;;;;;;6025:309;-1:-1:-1;;;;6025:309:0:o;4516:337::-;4591:14;4607;4652:6;-1:-1:-1;;;;;4642:16:0;:6;-1:-1:-1;;;;;4642:16:0;;;4634:60;;;;;-1:-1:-1;;;4634:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4733:6;-1:-1:-1;;;;;4724:15:0;:6;-1:-1:-1;;;;;4724:15:0;;:53;;4762:6;4770;4724:53;;;4743:6;4751;4724:53;4705:72;;-1:-1:-1;4705:72:0;-1:-1:-1;;;;;;4796:20:0;;4788:57;;;;;-1:-1:-1;;;4788:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4516:337;;;;;:::o;17006:1348::-;17319:44;;;-1:-1:-1;;;17319:44:0;;-1:-1:-1;;;;;17319:44:0;;;;;;;;;;;;;;;;17224:12;;;;;;17331:7;17319:28;;;;;;:44;;;;;;;;;;;;;;;:28;:44;;;2:2:-1;;;;27:1;24;17:12;2:2;17319:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17319:44:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17319:44:0;-1:-1:-1;;;;;17319:58:0;;17315:138;;;17394:47;;;-1:-1:-1;;;17394:47:0;;-1:-1:-1;;;;;17394:47:0;;;;;;;;;;;;;;;;17406:7;17394:31;;;;;;:47;;;;;;;;;;;;;;;-1:-1:-1;17394:31:0;:47;;;2:2:-1;;;;27:1;24;17:12;2:2;17394:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17394:47:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;17315:138:0;17464:13;17479;17496:47;17519:7;17528:6;17536;17496:22;:47::i;:::-;17463:80;;;;17558:8;17570:1;17558:13;:30;;;;-1:-1:-1;17575:13:0;;17558:30;17554:793;;;17627:14;;-1:-1:-1;17643:14:0;;-1:-1:-1;17554:793:0;;;17691:19;17713:52;17730:14;17746:8;17756;17713:16;:52::i;:::-;17691:74;;17802:14;17784;:32;17780:556;;17863:10;17845:14;:28;;17837:73;;;;;-1:-1:-1;;;17837:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17951:14;;-1:-1:-1;17967:14:0;-1:-1:-1;17967:14:0;17780:556;;;18023:19;18045:52;18062:14;18078:8;18088;18045:16;:52::i;:::-;18023:74;;18141:14;18123;:32;;18116:40;;;;18201:10;18183:14;:28;;18175:73;;;;;-1:-1:-1;;;18175:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18289:14;-1:-1:-1;18305:14:0;;-1:-1:-1;17780:556:0;17554:793;;17006:1348;;;;;;;;;;;:::o;1611:142::-;1663:6;1690;;;:30;;-1:-1:-1;;1705:5:0;;;1719:1;1714;1705:5;1714:1;1700:15;;;;;:20;1690:30;1682:63;;;;;-1:-1:-1;;;1682:63:0;;;;;;;;;;;;-1:-1:-1;;;1682:63:0;;;;;;;;;;;;;;1338:128;1422:5;;;1417:16;;;;1409:49;;;;;-1:-1:-1;;;1409:49:0;;;;;;;;;;;;-1:-1:-1;;;1409:49:0;;;;;;;;;;;;;;5484:428;5577:13;5592;5619:14;5638:26;5649:6;5657;5638:10;:26::i;:::-;5618:46;;;5675:32;5683:7;5692:6;5700;5675:7;:32::i;:::-;;5719:13;5734;5761:32;5769:7;5778:6;5786;5761:7;:32::i;:::-;-1:-1:-1;;;;;5752:54:0;;:56;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;5752:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5752:56:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;5752:56:0;;;;;;;-1:-1:-1;;;;;5718:90:0;;;;-1:-1:-1;5718:90:0;;-1:-1:-1;;;;;;5842:16:0;;;;;;;:62;;5885:8;5895;5842:62;;;5862:8;5872;5842:62;5819:85;;;;-1:-1:-1;5484:428:0;-1:-1:-1;;;;;;;5484:428:0:o

Swarm Source

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