Contract 0xd0a01ec574d1fc6652edf79cb2f880fd47d34ab1

Contract Overview

StellaSwap: Router v2
Balance:
4.‍89135811 GLMR

GLMR Value:
$3.62 (@ $0.74/GLMR)

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x35ccfff23ca2e6433bdc814b3ae2805fdde0080f3b723742ee7e9e0026e66816Swap Exact ETH F...16355812022-08-12 8:34:181 hr 6 mins ago0xe1fa699860444be91d366c21de8fef56e3dec77a IN  StellaSwap: Router v2479.‍89 GLMR0.‍066521412
0xb815c6d2a7294a3b19a4f55d174a7bb0c66665d7740013c0beb4fcadb2ddcfd4Swap Exact ETH F...16355792022-08-12 8:33:541 hr 6 mins ago0xe1fa699860444be91d366c21de8fef56e3dec77a IN  StellaSwap: Router v2339.‍40999999999997 GLMR0.‍069123474
0x2ef434abf65cb7143ebf42262596a0fc65d52f75ded632abffb2a27200016257Swap Exact ETH F...16355792022-08-12 8:33:541 hr 6 mins ago0xc93e535d796dff10347e74f7e459853cb7225d93 IN  StellaSwap: Router v2257.‍99 GLMR0.‍066514752
0x3fe051339e0eafd69b655d6514233602a135a8af1adc52c70bb0a49cdca44a7eSwap Exact ETH F...16355792022-08-12 8:33:541 hr 6 mins ago0xc93e535d796dff10347e74f7e459853cb7225d93 IN  StellaSwap: Router v2257.‍99 GLMR0.‍06911748
0x0db2bdf86e87962e7ff64aa2c44e8e40efc9ee099c72c9ceda9cc72efd19ef68Swap Exact ETH F...16355782022-08-12 8:33:421 hr 6 mins ago0xe1fa699860444be91d366c21de8fef56e3dec77a IN  StellaSwap: Router v2473.‍9 GLMR0.‍069123474
0xb10ffc814cadefa6ff39d9990c45f560e6badd781797061d7519ad3936f6c1eaSwap Exact ETH F...16353312022-08-12 7:42:421 hr 57 mins ago0xc93e535d796dff10347e74f7e459853cb7225d93 IN  StellaSwap: Router v2254.‍99 GLMR0.‍06911748
0x33be2180e2b644238d205f497c1ab03678e3445c5c49bfe6981c42b1cea92075Swap Exact ETH F...16352102022-08-12 7:17:002 hrs 23 mins ago0xe1fa699860444be91d366c21de8fef56e3dec77a IN  StellaSwap: Router v2346.‍65999999999997 GLMR0.‍069123474
0x405dda486e7b5c2197d50cff4f819ed6d6c243632c4f3372b27a090fd101af43Swap Tokens For ...16349932022-08-12 6:31:303 hrs 9 mins ago0xbe19479be9ec4f78d3da0e92ef640c8d6354f7b1 IN  StellaSwap: Router v20 GLMR0.‍00679209
0xe211e4411b127f26269624461dcff331d033640c7e6491dc3f3fc4ae33bb245cSwap Tokens For ...16349802022-08-12 6:28:543 hrs 11 mins ago0xbe19479be9ec4f78d3da0e92ef640c8d6354f7b1 IN  StellaSwap: Router v20 GLMR0.‍006794622
0x27cf114821a9e731104c993c2fd130f486771c15c3f508520decc4182f133883Swap Exact ETH F...16332222022-08-12 0:21:009 hrs 19 mins ago0xe1fa699860444be91d366c21de8fef56e3dec77a IN  StellaSwap: Router v2347.‍62 GLMR0.‍06911748
0x02c1779a0c4b4196c377a754bef025664cde09f9451ba3b21ae318d2cbcb2a4cSwap Exact ETH F...16332202022-08-12 0:20:369 hrs 19 mins ago0xc93e535d796dff10347e74f7e459853cb7225d93 IN  StellaSwap: Router v2254.‍99 GLMR0.‍06911748
0xae60ff1e1ac43e68536680f70f5899db51844edcaf93fd7221488eb0403859bbSwap Exact ETH F...16332192022-08-12 0:20:249 hrs 20 mins ago0xc93e535d796dff10347e74f7e459853cb7225d93 IN  StellaSwap: Router v2255 GLMR0.‍06911748
0x9e3c34437616778a68a04f161034f0c4c20168c0968116ad5d29013aababf498Swap Exact ETH F...16332172022-08-12 0:20:009 hrs 20 mins ago0xe1fa699860444be91d366c21de8fef56e3dec77a IN  StellaSwap: Router v2346.‍5 GLMR0.‍069123474
0x79bde2c34971743740f81c37842013a27ed71f50939562ca6e6ea6e6866ab158Swap Exact ETH F...16332162022-08-12 0:19:489 hrs 20 mins ago0xc93e535d796dff10347e74f7e459853cb7225d93 IN  StellaSwap: Router v2255 GLMR0.‍066514752
0x38ddcb2961ab141155dd154ef203c99d8c480b00b26332542f98bd3fa9f139deSwap Exact ETH F...16332162022-08-12 0:19:489 hrs 20 mins ago0xc93e535d796dff10347e74f7e459853cb7225d93 IN  StellaSwap: Router v2255 GLMR0.‍06911748
0x3e4f5f6b4dca42f5e491fc3a75f4cbb1cb5d142d150433f3270db4284a68010cSwap Exact ETH F...16332142022-08-12 0:19:249 hrs 21 mins ago0xe1fa699860444be91d366c21de8fef56e3dec77a IN  StellaSwap: Router v2473.‍78999999999996 GLMR0.‍066521412
0x5d5d10d26a8dad0f4ac6b324463e305f57f0ea439ec46434d79be3ab9e708f36Swap Exact ETH F...16332042022-08-12 0:17:249 hrs 23 mins ago0xe1fa699860444be91d366c21de8fef56e3dec77a IN  StellaSwap: Router v2346.‍78999999999996 GLMR0.‍069123474
0x2165c7752b1801e742336319898bf214b50e621333b79d3f692de51bdac9c29eSwap Exact ETH F...16331882022-08-12 0:13:489 hrs 26 mins ago0xe1fa699860444be91d366c21de8fef56e3dec77a IN  StellaSwap: Router v2294.‍37 GLMR0.‍069123474
0x2bfc908145e2a7dda92805495262821a9292a064dd254cbd325dbfd0bf93e31eSwap Exact ETH F...16331842022-08-12 0:12:549 hrs 27 mins ago0xe1fa699860444be91d366c21de8fef56e3dec77a IN  StellaSwap: Router v2473.‍82 GLMR0.‍069123474
0x1c4c6fd0c3ea73cb71a8e5d3832e4a49e60d4d4bf52cbf1b0933b1cc6f34eb3aSwap Exact ETH F...16330202022-08-11 23:39:1810 hrs 1 min ago0xe1fa699860444be91d366c21de8fef56e3dec77a IN  StellaSwap: Router v2340.‍4 GLMR0.‍069123474
0x460ff3af5288f983c18540256a18b2c47bd43bb7d954604a27f6c45d0781ef9fSwap Exact ETH F...16330072022-08-11 23:36:3010 hrs 4 mins ago0xe1fa699860444be91d366c21de8fef56e3dec77a IN  StellaSwap: Router v2340.‍73 GLMR0.‍069123474
0xf3e822caa993912899aa7dd6ebf1638b826efa2c453e8a6b7b4421c3a471ead2Swap Exact ETH F...16330002022-08-11 23:35:0010 hrs 5 mins ago0xe1fa699860444be91d366c21de8fef56e3dec77a IN  StellaSwap: Router v2169.‍98 GLMR0.‍069123474
0x01c21242588d684943dda634e7669bb8500f1712a98b303ce88bd349a61e4b7dSwap Exact ETH F...16328782022-08-11 23:09:4210 hrs 30 mins ago0xe1fa699860444be91d366c21de8fef56e3dec77a IN  StellaSwap: Router v2169.‍66 GLMR0.‍069123474
0x68780dcb5ee74244985f033efcd536e72c50b458a84187e27535e31e3b180505Swap Exact ETH F...16328462022-08-11 23:03:0610 hrs 37 mins ago0xe1fa699860444be91d366c21de8fef56e3dec77a IN  StellaSwap: Router v2233.‍89 GLMR0.‍069123474
0x5da1e4e3b9668a947cd0321d5f7338cb20ab021896028bb509fac1bea4374973Swap Exact ETH F...16328452022-08-11 23:02:4810 hrs 37 mins ago0xc93e535d796dff10347e74f7e459853cb7225d93 IN  StellaSwap: Router v2255 GLMR0.‍066514752
[ Download CSV Export 

OVERVIEW

Router v2 contract label of StellaSwap.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xb68fddf364905226a925f29664f682a0875f61fbbc24500d276c85df71b4858e16358592022-08-12 9:32:367 mins ago StellaSwap: Router v2 0x01834cf26717f0351d9762cc9cca7dc059d140df0.‍031052071619834898 GLMR
0xb68fddf364905226a925f29664f682a0875f61fbbc24500d276c85df71b4858e16358592022-08-12 9:32:367 mins ago StellaSwap: Router v2 Moonbeam: WGLMR Token10.‍416447928380165102 GLMR
0xb68fddf364905226a925f29664f682a0875f61fbbc24500d276c85df71b4858e16358592022-08-12 9:32:367 mins ago 0x01834cf26717f0351d9762cc9cca7dc059d140df StellaSwap: Router v210.‍4475 GLMR
0xb68fddf364905226a925f29664f682a0875f61fbbc24500d276c85df71b4858e16358592022-08-12 9:32:367 mins ago StellaSwap: Router v2 Moonbeam: WGLMR Token10.‍4475 GLMR
0xb68fddf364905226a925f29664f682a0875f61fbbc24500d276c85df71b4858e16358592022-08-12 9:32:367 mins ago 0x01834cf26717f0351d9762cc9cca7dc059d140df StellaSwap: Router v210.‍4475 GLMR
0xcc53be4c3c1345297a5fe5a4268a030f633956579411ff9da5444c73efebd89616358122022-08-12 9:22:4217 mins ago StellaSwap: Router v2 0x01834cf26717f0351d9762cc9cca7dc059d140df0.‍01939452733029864 GLMR
0xcc53be4c3c1345297a5fe5a4268a030f633956579411ff9da5444c73efebd89616358122022-08-12 9:22:4217 mins ago StellaSwap: Router v2 Moonbeam: WGLMR Token6.‍44810547266970136 GLMR
0xcc53be4c3c1345297a5fe5a4268a030f633956579411ff9da5444c73efebd89616358122022-08-12 9:22:4217 mins ago 0x01834cf26717f0351d9762cc9cca7dc059d140df StellaSwap: Router v26.‍4675 GLMR
0xcc53be4c3c1345297a5fe5a4268a030f633956579411ff9da5444c73efebd89616358122022-08-12 9:22:4217 mins ago StellaSwap: Router v2 Moonbeam: WGLMR Token6.‍4675 GLMR
0xcc53be4c3c1345297a5fe5a4268a030f633956579411ff9da5444c73efebd89616358122022-08-12 9:22:4217 mins ago 0x01834cf26717f0351d9762cc9cca7dc059d140df StellaSwap: Router v26.‍4675 GLMR
0x96b9034205e215895e1833d519c0a57329c9939ece786234b0429b8d6463d7fe16356782022-08-12 8:55:1245 mins ago StellaSwap: Router v20xfa9cd807557a8e4c62d4110418b16d55389dc9f516.‍177643222597521299 GLMR
0x96b9034205e215895e1833d519c0a57329c9939ece786234b0429b8d6463d7fe16356782022-08-12 8:55:1245 mins ago Moonbeam: WGLMR Token StellaSwap: Router v216.‍177643222597521299 GLMR
0xa64ce397da6ac572bbfb95f515b3230e8d8634d2b9636e3f7c3fe3c337c697af16356462022-08-12 8:48:2452 mins ago StellaSwap: Router v2 0x01834cf26717f0351d9762cc9cca7dc059d140df0.‍820992868817063801 GLMR
0xa64ce397da6ac572bbfb95f515b3230e8d8634d2b9636e3f7c3fe3c337c697af16356462022-08-12 8:48:2452 mins ago StellaSwap: Router v2 Moonbeam: WGLMR Token277.‍779007131182936199 GLMR
0xa64ce397da6ac572bbfb95f515b3230e8d8634d2b9636e3f7c3fe3c337c697af16356462022-08-12 8:48:2452 mins ago 0x01834cf26717f0351d9762cc9cca7dc059d140df StellaSwap: Router v2278.‍6 GLMR
0xa64ce397da6ac572bbfb95f515b3230e8d8634d2b9636e3f7c3fe3c337c697af16356462022-08-12 8:48:2452 mins ago StellaSwap: Router v2 Moonbeam: WGLMR Token278.‍6 GLMR
0xa64ce397da6ac572bbfb95f515b3230e8d8634d2b9636e3f7c3fe3c337c697af16356462022-08-12 8:48:2452 mins ago 0x01834cf26717f0351d9762cc9cca7dc059d140df StellaSwap: Router v2278.‍6 GLMR
0xfc0ce7244f326f65904431934d7be5df608a60f4f55d32477fa8c33acf09ee6c16356142022-08-12 8:41:3059 mins ago StellaSwap: Router v2 0x01834cf26717f0351d9762cc9cca7dc059d140df0.‍010409108493744269 GLMR
0xfc0ce7244f326f65904431934d7be5df608a60f4f55d32477fa8c33acf09ee6c16356142022-08-12 8:41:3059 mins ago StellaSwap: Router v2 Moonbeam: WGLMR Token3.‍472090891506255731 GLMR
0xfc0ce7244f326f65904431934d7be5df608a60f4f55d32477fa8c33acf09ee6c16356142022-08-12 8:41:3059 mins ago 0x01834cf26717f0351d9762cc9cca7dc059d140df StellaSwap: Router v23.‍4825 GLMR
0xfc0ce7244f326f65904431934d7be5df608a60f4f55d32477fa8c33acf09ee6c16356142022-08-12 8:41:3059 mins ago StellaSwap: Router v2 Moonbeam: WGLMR Token3.‍4825 GLMR
0xfc0ce7244f326f65904431934d7be5df608a60f4f55d32477fa8c33acf09ee6c16356142022-08-12 8:41:3059 mins ago 0x01834cf26717f0351d9762cc9cca7dc059d140df StellaSwap: Router v23.‍4825 GLMR
0x35ccfff23ca2e6433bdc814b3ae2805fdde0080f3b723742ee7e9e0026e6681616355812022-08-12 8:34:181 hr 6 mins ago StellaSwap: Router v2 Moonbeam: WGLMR Token479.‍89 GLMR
0xb815c6d2a7294a3b19a4f55d174a7bb0c66665d7740013c0beb4fcadb2ddcfd416355792022-08-12 8:33:541 hr 6 mins ago StellaSwap: Router v2 Moonbeam: WGLMR Token339.‍40999999999997 GLMR
0x2ef434abf65cb7143ebf42262596a0fc65d52f75ded632abffb2a2720001625716355792022-08-12 8:33:541 hr 6 mins ago StellaSwap: Router v2 Moonbeam: WGLMR Token257.‍99 GLMR
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
StellaSwapV2Router02

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

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

// Sources flattened with hardhat v2.6.5 https://hardhat.org

// File contracts/amm/interfaces/IStellaSwapV2Pair.sol

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.5.0;

interface IStellaSwapV2Pair {
    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/amm/libraries/SafeMath.sol



pragma solidity =0.6.12;

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

library SafeMathStellaSwap {
    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/amm/libraries/StellaSwapV2Library.sol



pragma solidity >=0.5.0;

library StellaSwapV2Library {
    using SafeMathStellaSwap 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, 'StellaSwapV2Library: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'StellaSwapV2Library: 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'48a6ca3d52d0d0a6c53a83cc3c8688dd46ea4cb786b169ee959b95ad30f61643' // init code hash
            ))));
    }

    // fetches and sorts the reserves for a pair
    function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) {
        (address token0,) = sortTokens(tokenA, tokenB);
        (uint reserve0, uint reserve1,) = IStellaSwapV2Pair(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, 'StellaSwapV2Library: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'StellaSwapV2Library: 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, 'StellaSwapV2Library: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'StellaSwapV2Library: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(997);
        uint numerator = amountInWithFee.mul(reserveOut);
        uint denominator = reserveIn.mul(1000).add(amountInWithFee);
        amountOut = numerator / denominator;
    }

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

    // performs chained getAmountOut calculations on any number of pairs
    function getAmountsOut(address factory, uint amountIn, address[] memory path) internal view returns (uint[] memory amounts) {
        require(path.length >= 2, 'StellaSwapV2Library: 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, 'StellaSwapV2Library: 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/amm/libraries/TransferHelper.sol



pragma solidity >=0.6.0;

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

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

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

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


// File contracts/amm/interfaces/IStellaSwapV2Router01.sol



pragma solidity >=0.6.2;

interface IStellaSwapV2Router01 {
    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/amm/interfaces/IStellaSwapV2Router02.sol



pragma solidity >=0.6.2;

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

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


// File contracts/amm/interfaces/IStellaSwapV2Factory.sol



pragma solidity >=0.5.0;

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

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

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

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

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


// File contracts/amm/interfaces/IERC20.sol



pragma solidity >=0.5.0;

interface IERC20StellaSwap {
    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/amm/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/amm/StellaSwapV2Router02.sol



pragma solidity =0.6.12;







contract StellaSwapV2Router02 is IStellaSwapV2Router02 {
    using SafeMathStellaSwap for uint;

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

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

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

    receive() external payable {
        assert(msg.sender == WETH); 
    }

    // **** 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 (IStellaSwapV2Factory(factory).getPair(tokenA, tokenB) == address(0)) {
            IStellaSwapV2Factory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = StellaSwapV2Library.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = StellaSwapV2Library.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'StellaSwapV2Router: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = StellaSwapV2Library.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'StellaSwapV2Router: 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 = StellaSwapV2Library.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IStellaSwapV2Pair(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 = StellaSwapV2Library.pairFor(factory, token, WETH);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWETH(WETH).deposit{value: amountETH}();
        assert(IWETH(WETH).transfer(pair, amountETH));
        liquidity = IStellaSwapV2Pair(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 = StellaSwapV2Library.pairFor(factory, tokenA, tokenB);
        IStellaSwapV2Pair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint amount0, uint amount1) = IStellaSwapV2Pair(pair).burn(to);
        (address token0,) = StellaSwapV2Library.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'StellaSwapV2Router: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'StellaSwapV2Router: 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 = StellaSwapV2Library.pairFor(factory, tokenA, tokenB);
        uint value = approveMax ? uint(-1) : liquidity;
        IStellaSwapV2Pair(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 = StellaSwapV2Library.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IStellaSwapV2Pair(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, IERC20StellaSwap(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 = StellaSwapV2Library.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IStellaSwapV2Pair(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,) = StellaSwapV2Library.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 ? StellaSwapV2Library.pairFor(factory, output, path[i + 2]) : _to;
            IStellaSwapV2Pair(StellaSwapV2Library.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 = StellaSwapV2Library.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'StellaSwapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, StellaSwapV2Library.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 = StellaSwapV2Library.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'StellaSwapV2Router: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, StellaSwapV2Library.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, 'StellaSwapV2Router: INVALID_PATH');
        amounts = StellaSwapV2Library.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'StellaSwapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(StellaSwapV2Library.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, 'StellaSwapV2Router: INVALID_PATH');
        amounts = StellaSwapV2Library.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'StellaSwapV2Router: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, StellaSwapV2Library.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, 'StellaSwapV2Router: INVALID_PATH');
        amounts = StellaSwapV2Library.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'StellaSwapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, StellaSwapV2Library.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, 'StellaSwapV2Router: INVALID_PATH');
        amounts = StellaSwapV2Library.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'StellaSwapV2Router: EXCESSIVE_INPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(StellaSwapV2Library.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,) = StellaSwapV2Library.sortTokens(input, output);
            IStellaSwapV2Pair pair = IStellaSwapV2Pair(StellaSwapV2Library.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 = IERC20StellaSwap(input).balanceOf(address(pair)).sub(reserveInput);
            amountOutput = StellaSwapV2Library.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? StellaSwapV2Library.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, StellaSwapV2Library.pairFor(factory, path[0], path[1]), amountIn
        );
        uint balanceBefore = IERC20StellaSwap(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20StellaSwap(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'StellaSwapV2Router: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WETH, 'StellaSwapV2Router: INVALID_PATH');
        uint amountIn = msg.value;
        IWETH(WETH).deposit{value: amountIn}();
        assert(IWETH(WETH).transfer(StellaSwapV2Library.pairFor(factory, path[0], path[1]), amountIn));
        uint balanceBefore = IERC20StellaSwap(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20StellaSwap(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'StellaSwapV2Router: 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, 'StellaSwapV2Router: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, StellaSwapV2Library.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20StellaSwap(WETH).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'StellaSwapV2Router: 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 StellaSwapV2Library.quote(amountA, reserveA, reserveB);
    }

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

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

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

    function getAmountsIn(uint amountOut, address[] memory path)
        public
        view
        virtual
        override
        returns (uint[] memory amounts)
    {
        return StellaSwapV2Library.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"}]

60c060405234801561001057600080fd5b5060405162004859380380620048598339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6146d4620001856000398061019f5280610d3a5280610d755280610e6c528061109c5280611426528061159e528061194d5280611a3a5280611b145280611be25280611d3a5280611dc25280611ffe5280612079528061212d52806121f952806122a0528061231452806128105280612a7a5280612ad05280612b045280612b785280612d065280612e5b5280612ee3525080610f0c5280610fe35280611162528061119b52806112d652806114c6528061157c52806116ec5280611c875280611df45280611f4e52806123465280612584528061279552806127be52806127ee528061295b5280612aae5280612dab5280612f1552806137e052806138235280613ae75280613c645280614060528061411952806141cc52506146d46000f3fe60806040526004361061018f5760003560e01c80638803dbee116100d6578063c45a01551161007f578063e8e3370011610059578063e8e3370014610ba1578063f305d71914610c21578063fb3bdb4114610c67576101c8565b8063c45a015514610a62578063d06ca61f14610a77578063ded9382a14610b2e576101c8565b8063af2979eb116100b0578063af2979eb1461092c578063b6f9de951461097f578063baa2abde14610a05576101c8565b80638803dbee1461082d578063ad5c4648146108c5578063ad615dec146108f6576101c8565b80634a25d94a11610138578063791ac94711610112578063791ac947146106d95780637ff36ab51461077157806385f8c259146107f7576101c8565b80634a25d94a146105365780635b0d5984146105ce5780635c11d79514610641576101c8565b80631f00ca74116101695780631f00ca74146103695780632195995c1461042057806338ed17391461049e576101c8565b806302751cec146101cd578063054d50d41461023957806318cbafe514610281576101c8565b366101c857336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101c657fe5b005b600080fd5b3480156101d957600080fd5b50610220600480360360c08110156101f057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610ced565b6040805192835260208301919091528051918290030190f35b34801561024557600080fd5b5061026f6004803603606081101561025c57600080fd5b5080359060208101359060400135610e07565b60408051918252519081900360200190f35b34801561028d57600080fd5b50610319600480360360a08110156102a457600080fd5b8135916020810135918101906060810160408201356401000000008111156102cb57600080fd5b8201836020820111156102dd57600080fd5b803590602001918460208302840111640100000000831117156102ff57600080fd5b91935091506001600160a01b038135169060200135610e1c565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561035557818101518382015260200161033d565b505050509050019250505060405180910390f35b34801561037557600080fd5b506103196004803603604081101561038c57600080fd5b813591908101906040810160208201356401000000008111156103ae57600080fd5b8201836020820111156103c057600080fd5b803590602001918460208302840111640100000000831117156103e257600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061115b945050505050565b34801561042c57600080fd5b50610220600480360361016081101561044457600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611191565b3480156104aa57600080fd5b50610319600480360360a08110156104c157600080fd5b8135916020810135918101906060810160408201356401000000008111156104e857600080fd5b8201836020820111156104fa57600080fd5b8035906020019184602083028401116401000000008311171561051c57600080fd5b91935091506001600160a01b03813516906020013561128b565b34801561054257600080fd5b50610319600480360360a081101561055957600080fd5b81359160208101359181019060608101604082013564010000000081111561058057600080fd5b82018360208201111561059257600080fd5b803590602001918460208302840111640100000000831117156105b457600080fd5b91935091506001600160a01b0381351690602001356113d6565b3480156105da57600080fd5b5061026f60048036036101408110156105f257600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611574565b34801561064d57600080fd5b506101c6600480360360a081101561066457600080fd5b81359160208101359181019060608101604082013564010000000081111561068b57600080fd5b82018360208201111561069d57600080fd5b803590602001918460208302840111640100000000831117156106bf57600080fd5b91935091506001600160a01b038135169060200135611682565b3480156106e557600080fd5b506101c6600480360360a08110156106fc57600080fd5b81359160208101359181019060608101604082013564010000000081111561072357600080fd5b82018360208201111561073557600080fd5b8035906020019184602083028401116401000000008311171561075757600080fd5b91935091506001600160a01b0381351690602001356118ff565b6103196004803603608081101561078757600080fd5b813591908101906040810160208201356401000000008111156107a957600080fd5b8201836020820111156107bb57600080fd5b803590602001918460208302840111640100000000831117156107dd57600080fd5b91935091506001600160a01b038135169060200135611b9a565b34801561080357600080fd5b5061026f6004803603606081101561081a57600080fd5b5080359060208101359060400135611ef6565b34801561083957600080fd5b50610319600480360360a081101561085057600080fd5b81359160208101359181019060608101604082013564010000000081111561087757600080fd5b82018360208201111561088957600080fd5b803590602001918460208302840111640100000000831117156108ab57600080fd5b91935091506001600160a01b038135169060200135611f03565b3480156108d157600080fd5b506108da611ffc565b604080516001600160a01b039092168252519081900360200190f35b34801561090257600080fd5b5061026f6004803603606081101561091957600080fd5b5080359060208101359060400135612020565b34801561093857600080fd5b5061026f600480360360c081101561094f57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561202d565b6101c66004803603608081101561099557600080fd5b813591908101906040810160208201356401000000008111156109b757600080fd5b8201836020820111156109c957600080fd5b803590602001918460208302840111640100000000831117156109eb57600080fd5b91935091506001600160a01b0381351690602001356121b3565b348015610a1157600080fd5b50610220600480360360e0811015610a2857600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612536565b348015610a6e57600080fd5b506108da612793565b348015610a8357600080fd5b5061031960048036036040811015610a9a57600080fd5b81359190810190604081016020820135640100000000811115610abc57600080fd5b820183602082011115610ace57600080fd5b80359060200191846020830284011164010000000083111715610af057600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506127b7945050505050565b348015610b3a57600080fd5b506102206004803603610140811015610b5257600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356127e4565b348015610bad57600080fd5b50610c036004803603610100811015610bc557600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e001356128f8565b60408051938452602084019290925282820152519081900360600190f35b610c03600480360360c0811015610c3757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612a2b565b61031960048036036080811015610c7d57600080fd5b81359190810190604081016020820135640100000000811115610c9f57600080fd5b820183602082011115610cb157600080fd5b80359060200191846020830284011164010000000083111715610cd357600080fd5b91935091506001600160a01b038135169060200135612cbe565b6000808242811015610d34576040805162461bcd60e51b815260206004820152601b60248201526000805160206144fa833981519152604482015290519081900360640190fd5b610d63897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612536565b9093509150610d73898685613049565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610dd957600080fd5b505af1158015610ded573d6000803e3d6000fd5b50505050610dfb85836131e1565b50965096945050505050565b6000610e148484846132d9565b949350505050565b60608142811015610e62576040805162461bcd60e51b815260206004820152601b60248201526000805160206144fa833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e9c57fe5b905060200201356001600160a01b03166001600160a01b031614610f07576040805162461bcd60e51b815260206004820181905260248201527f5374656c6c61537761705632526f757465723a20494e56414c49445f50415448604482015290519081900360640190fd5b610f657f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133b192505050565b91508682600184510381518110610f7857fe5b60200260200101511015610fbd5760405162461bcd60e51b815260040180806020018281038252602e8152602001806144cc602e913960400191505060405180910390fd5b61105b86866000818110610fcd57fe5b905060200201356001600160a01b0316336110417f00000000000000000000000000000000000000000000000000000000000000008a8a600081811061100f57fe5b905060200201356001600160a01b03168b8b600181811061102c57fe5b905060200201356001600160a01b03166134e7565b8560008151811061104e57fe5b60200260200101516135bf565b61109a82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613731915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836001855103815181106110d957fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561111757600080fd5b505af115801561112b573d6000803e3d6000fd5b50505050611150848360018551038151811061114357fe5b60200260200101516131e1565b509695505050505050565b60606111887f0000000000000000000000000000000000000000000000000000000000000000848461396e565b90505b92915050565b60008060006111c17f00000000000000000000000000000000000000000000000000000000000000008f8f6134e7565b90506000876111d0578c6111d4565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561124a57600080fd5b505af115801561125e573d6000803e3d6000fd5b505050506112718f8f8f8f8f8f8f612536565b809450819550505050509b509b9950505050505050505050565b606081428110156112d1576040805162461bcd60e51b815260206004820152601b60248201526000805160206144fa833981519152604482015290519081900360640190fd5b61132f7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133b192505050565b9150868260018451038151811061134257fe5b602002602001015110156113875760405162461bcd60e51b815260040180806020018281038252602e8152602001806144cc602e913960400191505060405180910390fd5b61139786866000818110610fcd57fe5b61115082878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613731915050565b6060814281101561141c576040805162461bcd60e51b815260206004820152601b60248201526000805160206144fa833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061145657fe5b905060200201356001600160a01b03166001600160a01b0316146114c1576040805162461bcd60e51b815260206004820181905260248201527f5374656c6c61537761705632526f757465723a20494e56414c49445f50415448604482015290519081900360640190fd5b61151f7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061396e92505050565b9150868260008151811061152f57fe5b60200260200101511115610fbd5760405162461bcd60e51b815260040180806020018281038252602a81526020018061464c602a913960400191505060405180910390fd5b6000806115c27f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006134e7565b90506000866115d1578b6115d5565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561164b57600080fd5b505af115801561165f573d6000803e3d6000fd5b505050506116718d8d8d8d8d8d61202d565b9d9c50505050505050505050505050565b80428110156116c6576040805162461bcd60e51b815260206004820152601b60248201526000805160206144fa833981519152604482015290519081900360640190fd5b61173b858560008181106116d657fe5b905060200201356001600160a01b0316336117357f00000000000000000000000000000000000000000000000000000000000000008989600081811061171857fe5b905060200201356001600160a01b03168a8a600181811061102c57fe5b8a6135bf565b60008585600019810181811061174d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156117a957600080fd5b505afa1580156117bd573d6000803e3d6000fd5b505050506040513d60208110156117d357600080fd5b50516040805160208881028281018201909352888252929350611815929091899189918291850190849080828437600092019190915250889250613a90915050565b866118b8828888600019810181811061182a57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561188657600080fd5b505afa15801561189a573d6000803e3d6000fd5b505050506040513d60208110156118b057600080fd5b505190613db2565b10156118f55760405162461bcd60e51b815260040180806020018281038252602e8152602001806144cc602e913960400191505060405180910390fd5b5050505050505050565b8042811015611943576040805162461bcd60e51b815260206004820152601b60248201526000805160206144fa833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061197d57fe5b905060200201356001600160a01b03166001600160a01b0316146119e8576040805162461bcd60e51b815260206004820181905260248201527f5374656c6c61537761705632526f757465723a20494e56414c49445f50415448604482015290519081900360640190fd5b6119f8858560008181106116d657fe5b611a36858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613a90915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611aa557600080fd5b505afa158015611ab9573d6000803e3d6000fd5b505050506040513d6020811015611acf57600080fd5b5051905086811015611b125760405162461bcd60e51b815260040180806020018281038252602e8152602001806144cc602e913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611b7857600080fd5b505af1158015611b8c573d6000803e3d6000fd5b505050506118f584826131e1565b60608142811015611be0576040805162461bcd60e51b815260206004820152601b60248201526000805160206144fa833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611c1757fe5b905060200201356001600160a01b03166001600160a01b031614611c82576040805162461bcd60e51b815260206004820181905260248201527f5374656c6c61537761705632526f757465723a20494e56414c49445f50415448604482015290519081900360640190fd5b611ce07f0000000000000000000000000000000000000000000000000000000000000000348888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133b192505050565b91508682600184510381518110611cf357fe5b60200260200101511015611d385760405162461bcd60e51b815260040180806020018281038252602e8152602001806144cc602e913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611d7457fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611da757600080fd5b505af1158015611dbb573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611e207f00000000000000000000000000000000000000000000000000000000000000008989600081811061171857fe5b84600081518110611e2d57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611e7b57600080fd5b505af1158015611e8f573d6000803e3d6000fd5b505050506040513d6020811015611ea557600080fd5b5051611ead57fe5b611eec82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613731915050565b5095945050505050565b6000610e14848484613e0a565b60608142811015611f49576040805162461bcd60e51b815260206004820152601b60248201526000805160206144fa833981519152604482015290519081900360640190fd5b611fa77f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061396e92505050565b91508682600081518110611fb757fe5b602002602001015111156113875760405162461bcd60e51b815260040180806020018281038252602a81526020018061464c602a913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610e14848484613ee2565b60008142811015612073576040805162461bcd60e51b815260206004820152601b60248201526000805160206144fa833981519152604482015290519081900360640190fd5b6120a2887f00000000000000000000000000000000000000000000000000000000000000008989893089612536565b90508092505061212b88858a6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156120fa57600080fd5b505afa15801561210e573d6000803e3d6000fd5b505050506040513d602081101561212457600080fd5b5051613049565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561219157600080fd5b505af11580156121a5573d6000803e3d6000fd5b5050505061115084836131e1565b80428110156121f7576040805162461bcd60e51b815260206004820152601b60248201526000805160206144fa833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168585600081811061222e57fe5b905060200201356001600160a01b03166001600160a01b031614612299576040805162461bcd60e51b815260206004820181905260248201527f5374656c6c61537761705632526f757465723a20494e56414c49445f50415448604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156122f957600080fd5b505af115801561230d573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6123727f00000000000000000000000000000000000000000000000000000000000000008989600081811061171857fe5b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156123b957600080fd5b505af11580156123cd573d6000803e3d6000fd5b505050506040513d60208110156123e357600080fd5b50516123eb57fe5b6000868660001981018181106123fd57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561245957600080fd5b505afa15801561246d573d6000803e3d6000fd5b505050506040513d602081101561248357600080fd5b505160408051602089810282810182019093528982529293506124c59290918a918a918291850190849080828437600092019190915250899250613a90915050565b876118b882898960001981018181106124da57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561188657600080fd5b600080824281101561257d576040805162461bcd60e51b815260206004820152601b60248201526000805160206144fa833981519152604482015290519081900360640190fd5b60006125aa7f00000000000000000000000000000000000000000000000000000000000000008c8c6134e7565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561260557600080fd5b505af1158015612619573d6000803e3d6000fd5b505050506040513d602081101561262f57600080fd5b5050604080517f89afcb440000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561269557600080fd5b505af11580156126a9573d6000803e3d6000fd5b505050506040513d60408110156126bf57600080fd5b508051602090910151909250905060006126d98e8e613f88565b509050806001600160a01b03168e6001600160a01b0316146126fc5781836126ff565b82825b90975095508a8710156127435760405162461bcd60e51b81526004018080602001828103825260298152602001806146766029913960400191505060405180910390fd5b898610156127825760405162461bcd60e51b81526004018080602001828103825260298152602001806144a36029913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111887f000000000000000000000000000000000000000000000000000000000000000084846133b1565b60008060006128347f00000000000000000000000000000000000000000000000000000000000000008e7f00000000000000000000000000000000000000000000000000000000000000006134e7565b9050600087612843578c612847565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156128bd57600080fd5b505af11580156128d1573d6000803e3d6000fd5b505050506128e38e8e8e8e8e8e610ced565b909f909e509c50505050505050505050505050565b60008060008342811015612941576040805162461bcd60e51b815260206004820152601b60248201526000805160206144fa833981519152604482015290519081900360640190fd5b61294f8c8c8c8c8c8c614050565b909450925060006129817f00000000000000000000000000000000000000000000000000000000000000008e8e6134e7565b905061298f8d3383886135bf565b61299b8c3383876135bf565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b1580156129ea57600080fd5b505af11580156129fe573d6000803e3d6000fd5b505050506040513d6020811015612a1457600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015612a74576040805162461bcd60e51b815260206004820152601b60248201526000805160206144fa833981519152604482015290519081900360640190fd5b612aa28a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c614050565b90945092506000612af47f00000000000000000000000000000000000000000000000000000000000000008c7f00000000000000000000000000000000000000000000000000000000000000006134e7565b9050612b028b3383886135bf565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612b5d57600080fd5b505af1158015612b71573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612bed57600080fd5b505af1158015612c01573d6000803e3d6000fd5b505050506040513d6020811015612c1757600080fd5b5051612c1f57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b158015612c6e57600080fd5b505af1158015612c82573d6000803e3d6000fd5b505050506040513d6020811015612c9857600080fd5b5051925034841015612cb057612cb0338534036131e1565b505096509650969350505050565b60608142811015612d04576040805162461bcd60e51b815260206004820152601b60248201526000805160206144fa833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612d3b57fe5b905060200201356001600160a01b03166001600160a01b031614612da6576040805162461bcd60e51b815260206004820181905260248201527f5374656c6c61537761705632526f757465723a20494e56414c49445f50415448604482015290519081900360640190fd5b612e047f00000000000000000000000000000000000000000000000000000000000000008888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061396e92505050565b91503482600081518110612e1457fe5b60200260200101511115612e595760405162461bcd60e51b815260040180806020018281038252602a81526020018061464c602a913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e9557fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612ec857600080fd5b505af1158015612edc573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612f417f00000000000000000000000000000000000000000000000000000000000000008989600081811061171857fe5b84600081518110612f4e57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f9c57600080fd5b505af1158015612fb0573d6000803e3d6000fd5b505050506040513d6020811015612fc657600080fd5b5051612fce57fe5b61300d82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613731915050565b8160008151811061301a57fe5b6020026020010151341115611eec57611eec338360008151811061303a57fe5b602002602001015134036131e1565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b602083106130f45780518252601f1990920191602091820191016130d5565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613156576040519150601f19603f3d011682016040523d82523d6000602084013e61315b565b606091505b5091509150818015613189575080511580613189575080806020019051602081101561318657600080fd5b50515b6131da576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061322d5780518252601f19909201916020918201910161320e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461328f576040519150601f19603f3d011682016040523d82523d6000602084013e613294565b606091505b50509050806132d45760405162461bcd60e51b81526004018080602001828103825260238152602001806145d76023913960400191505060405180910390fd5b505050565b60008084116133195760405162461bcd60e51b815260040180806020018281038252602e8152602001806145fa602e913960400191505060405180910390fd5b6000831180156133295750600082115b6133645760405162461bcd60e51b815260040180806020018281038252602b815260200180614563602b913960400191505060405180910390fd5b6000613372856103e56142e1565b9050600061338082856142e1565b9050600061339a83613394886103e86142e1565b9061434d565b90508082816133a557fe5b04979650505050505050565b60606002825110156133f45760405162461bcd60e51b81526004018080602001828103825260218152602001806145426021913960400191505060405180910390fd5b815167ffffffffffffffff8111801561340c57600080fd5b50604051908082528060200260200182016040528015613436578160200160208202803683370190505b509050828160008151811061344757fe5b60200260200101818152505060005b60018351038110156134df576000806134998786858151811061347557fe5b602002602001015187866001018151811061348c57fe5b60200260200101516143a5565b915091506134bb8484815181106134ac57fe5b602002602001015183836132d9565b8484600101815181106134ca57fe5b60209081029190910101525050600101613456565b509392505050565b60008060006134f68585613f88565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f48a6ca3d52d0d0a6c53a83cc3c8688dd46ea4cb786b169ee959b95ad30f61643609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106136595780518252601f19909201916020918201910161363a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146136bb576040519150601f19603f3d011682016040523d82523d6000602084013e6136c0565b606091505b50915091508180156136ee5750805115806136ee57508080602001905160208110156136eb57600080fd5b50515b6137295760405162461bcd60e51b81526004018080602001828103825260248152602001806146286024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156139685760008084838151811061374f57fe5b602002602001015185846001018151811061376657fe5b602002602001015191509150600061377e8383613f88565b509050600087856001018151811061379257fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146137c0578260006137c4565b6000835b91509150600060028a510388106137db578861381c565b61381c7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061380f57fe5b60200260200101516134e7565b90506138497f000000000000000000000000000000000000000000000000000000000000000088886134e7565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613886576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156138ee5781810151838201526020016138d6565b50505050905090810190601f16801561391b5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561393d57600080fd5b505af1158015613951573d6000803e3d6000fd5b505060019099019850613734975050505050505050565b50505050565b60606002825110156139b15760405162461bcd60e51b81526004018080602001828103825260218152602001806145426021913960400191505060405180910390fd5b815167ffffffffffffffff811180156139c957600080fd5b506040519080825280602002602001820160405280156139f3578160200160208202803683370190505b5090508281600183510381518110613a0757fe5b60209081029190910101528151600019015b80156134df57600080613a4987866001860381518110613a3557fe5b602002602001015187868151811061348c57fe5b91509150613a6b848481518110613a5c57fe5b60200260200101518383613e0a565b846001850381518110613a7a57fe5b6020908102919091010152505060001901613a19565b60005b60018351038110156132d457600080848381518110613aae57fe5b6020026020010151858460010181518110613ac557fe5b6020026020010151915091506000613add8383613f88565b5090506000613b0d7f000000000000000000000000000000000000000000000000000000000000000085856134e7565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613b4e57600080fd5b505afa158015613b62573d6000803e3d6000fd5b505050506040513d6060811015613b7857600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506000806001600160a01b038a811690891614613bb5578284613bb8565b83835b91509150613c0d828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561188657600080fd5b9550613c1a8683836132d9565b945050505050600080856001600160a01b0316886001600160a01b031614613c4457826000613c48565b6000835b91509150600060028c51038a10613c5f578a613c93565b613c937f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061380f57fe5b60408051600080825260208201928390527f022c0d9f00000000000000000000000000000000000000000000000000000000835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613d36578181015183820152602001613d1e565b50505050905090810190601f168015613d635780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613d8557600080fd5b505af1158015613d99573d6000803e3d6000fd5b50506001909b019a50613a939950505050505050505050565b8082038281111561118b576040805162461bcd60e51b815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411613e4a5760405162461bcd60e51b815260040180806020018281038252602f815260200180614474602f913960400191505060405180910390fd5b600083118015613e5a5750600082115b613e955760405162461bcd60e51b815260040180806020018281038252602b815260200180614563602b913960400191505060405180910390fd5b6000613ead6103e8613ea786886142e1565b906142e1565b90506000613ec16103e5613ea78689613db2565b9050613ed86001828481613ed157fe5b049061434d565b9695505050505050565b6000808411613f225760405162461bcd60e51b815260040180806020018281038252602881526020018061451a6028913960400191505060405180910390fd5b600083118015613f325750600082115b613f6d5760405162461bcd60e51b815260040180806020018281038252602b815260200180614563602b913960400191505060405180910390fd5b82613f7885846142e1565b81613f7f57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613fdc5760405162461bcd60e51b81526004018080602001828103825260288152602001806145af6028913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613ffc578284613fff565b83835b90925090506001600160a01b0382166140495760405162461bcd60e51b815260040180806020018281038252602181526020018061458e6021913960400191505060405180910390fd5b9250929050565b60008060006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e6a439058a8a6040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b1580156140dc57600080fd5b505afa1580156140f0573d6000803e3d6000fd5b505050506040513d602081101561410657600080fd5b50516001600160a01b031614156141c4577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c9c6539689896040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050602060405180830381600087803b15801561419757600080fd5b505af11580156141ab573d6000803e3d6000fd5b505050506040513d60208110156141c157600080fd5b50505b6000806141f27f00000000000000000000000000000000000000000000000000000000000000008b8b6143a5565b91509150816000148015614204575080155b15614214578793508692506142d4565b6000614221898484613ee2565b905087811161427457858110156142695760405162461bcd60e51b81526004018080602001828103825260298152602001806144a36029913960400191505060405180910390fd5b8894509250826142d2565b6000614281898486613ee2565b90508981111561428d57fe5b878110156142cc5760405162461bcd60e51b81526004018080602001828103825260298152602001806146766029913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806142fc575050808202828282816142f957fe5b04145b61118b576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b8082018281101561118b576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b60008060006143b48585613f88565b5090506000806143c58888886134e7565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156143fd57600080fd5b505afa158015614411573d6000803e3d6000fd5b505050506040513d606081101561442757600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b0387811690841614614461578082614464565b81815b9099909850965050505050505056fe5374656c6c615377617056324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545374656c6c61537761705632526f757465723a20494e53554646494349454e545f425f414d4f554e545374656c6c61537761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545374656c6c61537761705632526f757465723a204558504952454400000000005374656c6c615377617056324c6962726172793a20494e53554646494349454e545f414d4f554e545374656c6c615377617056324c6962726172793a20494e56414c49445f504154485374656c6c615377617056324c6962726172793a20494e53554646494349454e545f4c49515549444954595374656c6c615377617056324c6962726172793a205a45524f5f414444524553535374656c6c615377617056324c6962726172793a204944454e544943414c5f4144445245535345535472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45445374656c6c615377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c45445374656c6c61537761705632526f757465723a204558434553534956455f494e5055545f414d4f554e545374656c6c61537761705632526f757465723a20494e53554646494349454e545f415f414d4f554e54a264697066735822122035ee52b196104ce258a46cd87e78e74a43aac03086b2a9d70f452af99ce2de0e64736f6c634300060c003300000000000000000000000068a384d826d3678f78bb9fb1533c7e9577dacc0e000000000000000000000000acc15dc74880c9944775448304b263d191c6077f

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

00000000000000000000000068a384d826d3678f78bb9fb1533c7e9577dacc0e000000000000000000000000acc15dc74880c9944775448304b263d191c6077f

-----Decoded View---------------
Arg [0] : _factory (address): 0x68a384d826d3678f78bb9fb1533c7e9577dacc0e
Arg [1] : _WETH (address): 0xacc15dc74880c9944775448304b263d191c6077f

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000068a384d826d3678f78bb9fb1533c7e9577dacc0e
Arg [1] : 000000000000000000000000acc15dc74880c9944775448304b263d191c6077f


Deployed ByteCode Sourcemap

16589:18788:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17090:10;-1:-1:-1;;;;;17104:4:0;17090:18;;17083:26;;;;16589:18788;;;;;21237:673;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21237:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;34309:265;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34309:265:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;28488:862;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28488:862:0;-1:-1:-1;;;;;;28488:862:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35118:256;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35118:256:0;;-1:-1:-1;35118:256:0;;-1:-1:-1;;;;;35118:256:0:i;21916:683::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21916:683:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25663:637::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25663:637:0;-1:-1:-1;;;;;;25663:637:0;;;;;;;;:::i;27642:840::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27642:840:0;-1:-1:-1;;;;;;27642:840:0;;;;;;;;:::i;24075:724::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24075:724:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31573:740::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31573:740:0;-1:-1:-1;;;;;;31573:740:0;;;;;;;;:::i;33204:862::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33204:862:0;-1:-1:-1;;;;;;33204:862:0;;;;;;;;:::i;26927:709::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26927:709:0;-1:-1:-1;;;;;;26927:709:0;;;;;;;;:::i;34582:264::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34582:264:0;;;;;;;;;;;;:::i;26306:615::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26306:615:0;-1:-1:-1;;;;;;26306:615:0;;;;;;;;:::i;16741:38::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;16741:38:0;;;;;;;;;;;;;;34110:191;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34110:191:0;;;;;;;;;;;;:::i;23359:710::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23359:710:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32319:879::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32319:879:0;-1:-1:-1;;;;;;32319:879:0;;;;;;;;:::i;20348:883::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20348:883:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16693:41::-;;;;;;;;;;;;;:::i;34854:256::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34854:256:0;;-1:-1:-1;34854:256:0;;-1:-1:-1;;;;;34854:256:0:i;22605:675::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22605:675:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18575:744::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18575:744:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;19325:980;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19325:980:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29356:822::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29356:822:0;-1:-1:-1;;;;;;29356:822:0;;;;;;;;:::i;21237:673::-;21474:16;21492:14;21455:8;16850:15;16838:8;:27;;16830:67;;;;;-1:-1:-1;;;16830:67:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16830:67:0;;;;;;;;;;;;;;;21546:196:::1;21576:5;21596:4;21615:9;21639:14;21668:12;21703:4;21723:8;21546:15;:196::i;:::-;21519:223:::0;;-1:-1:-1;21519:223:0;-1:-1:-1;21753:51:0::1;21781:5:::0;21788:2;21519:223;21753:27:::1;:51::i;:::-;21821:4;-1:-1:-1::0;;;;;21815:20:0::1;;21836:9;21815:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21857:45;21888:2;21892:9;21857:30;:45::i;:::-;21237:673:::0;;;;;;;;;;:::o;34309:265::-;34462:14;34501:65;34534:8;34544:9;34555:10;34501:32;:65::i;:::-;34494:72;34309:265;-1:-1:-1;;;;34309:265:0:o;28488:862::-;28702:21;28674:8;16850:15;16838:8;:27;;16830:67;;;;;-1:-1:-1;;;16830:67:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16830:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28774:4:0::1;28749:29;:4:::0;;-1:-1:-1;;28754:15:0;;28749:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28749:21:0::1;-1:-1:-1::0;;;;;28749:29:0::1;;28741:74;;;::::0;;-1:-1:-1;;;28741:74:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28836:58;28870:7;28879:8;28889:4;;28836:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;28836:33:0::1;::::0;-1:-1:-1;;;28836:58:0:i:1;:::-;28826:68;;28944:12;28913:7;28938:1;28921:7;:14;:18;28913:27;;;;;;;;;;;;;;:43;;28905:102;;;;-1:-1:-1::0;;;28905:102:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29018:144;29064:4;;29069:1;29064:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29064:7:0::1;29073:10;29085:54;29113:7;29122:4;;29127:1;29122:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29122:7:0::1;29131:4;;29136:1;29131:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29131:7:0::1;29085:27;:54::i;:::-;29141:7;29149:1;29141:10;;;;;;;;;;;;;;29018:31;:144::i;:::-;29173:35;29179:7;29188:4;;29173:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29202:4:0::1;::::0;-1:-1:-1;29173:5:0::1;::::0;-1:-1:-1;;29173:35:0:i:1;:::-;29225:4;-1:-1:-1::0;;;;;29219:20:0::1;;29240:7;29265:1;29248:7;:14;:18;29240:27;;;;;;;;;;;;;;29219:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29279:63;29310:2;29314:7;29339:1;29322:7;:14;:18;29314:27;;;;;;;;;;;;;;29279:30;:63::i;:::-;28488:862:::0;;;;;;;;;:::o;35118:256::-;35262:21;35308:58;35341:7;35350:9;35361:4;35308:32;:58::i;:::-;35301:65;;35118:256;;;;;:::o;21916:683::-;22222:12;22236;22261;22276:52;22304:7;22313:6;22321;22276:27;:52::i;:::-;22261:67;;22339:10;22352;:33;;22376:9;22352:33;;;-1:-1:-1;;22352:33:0;22396:83;;;-1:-1:-1;;;22396:83:0;;22427:10;22396:83;;;;22447:4;22396:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22339:46;;-1:-1:-1;;;;;;22396:30:0;;;;;:83;;;;;-1:-1:-1;;22396:83:0;;;;;;;;-1:-1:-1;22396:30:0;:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22511:80;22527:6;22535;22543:9;22554:10;22566;22578:2;22582:8;22511:15;:80::i;:::-;22490:101;;;;;;;;21916:683;;;;;;;;;;;;;;;;:::o;25663:637::-;25887:21;25868:8;16850:15;16838:8;:27;;16830:67;;;;;-1:-1:-1;;;16830:67:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16830:67:0;;;;;;;;;;;;;;;25931:58:::1;25965:7;25974:8;25984:4;;25931:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;25931:33:0::1;::::0;-1:-1:-1;;;25931:58:0:i:1;:::-;25921:68;;26039:12;26008:7;26033:1;26016:7;:14;:18;26008:27;;;;;;;;;;;;;;:43;;26000:102;;;;-1:-1:-1::0;;;26000:102:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26113:144;26159:4;;26164:1;26159:7;;;;;;26113:144;26268:24;26274:7;26283:4;;26268:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;26289:2:0;;-1:-1:-1;26268:5:0::1;::::0;-1:-1:-1;;26268:24:0:i:1;27642:840::-:0;27856:21;27828:8;16850:15;16838:8;:27;;16830:67;;;;;-1:-1:-1;;;16830:67:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16830:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27928:4:0::1;27903:29;:4:::0;;-1:-1:-1;;27908:15:0;;27903:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27903:21:0::1;-1:-1:-1::0;;;;;27903:29:0::1;;27895:74;;;::::0;;-1:-1:-1;;;27895:74:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27990:58;28023:7;28032:9;28043:4;;27990:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27990:32:0::1;::::0;-1:-1:-1;;;27990:58:0:i:1;:::-;27980:68;;28081:11;28067:7;28075:1;28067:10;;;;;;;;;;;;;;:25;;28059:80;;;;-1:-1:-1::0;;;28059:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24075:724:::0;24393:14;24420:12;24435:49;24463:7;24472:5;24479:4;24435:27;:49::i;:::-;24420:64;;24495:10;24508;:33;;24532:9;24508:33;;;-1:-1:-1;;24508:33:0;24552:83;;;-1:-1:-1;;;24552:83:0;;24583:10;24552:83;;;;24603:4;24552:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24495:46;;-1:-1:-1;;;;;;24552:30:0;;;;;:83;;;;;-1:-1:-1;;24552:83:0;;;;;;;;-1:-1:-1;24552:30:0;:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24658:133;24720:5;24727:9;24738:14;24754:12;24768:2;24772:8;24658:47;:133::i;:::-;24646:145;24075:724;-1:-1:-1;;;;;;;;;;;;;24075:724:0:o;31573:740::-;31807:8;16850:15;16838:8;:27;;16830:67;;;;;-1:-1:-1;;;16830:67:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16830:67:0;;;;;;;;;;;;;;;31828:142:::1;31874:4;;31879:1;31874:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31874:7:0::1;31883:10;31895:54;31923:7;31932:4;;31937:1;31932:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31932:7:0::1;31941:4;;31946:1;31941:7;;;;;;31895:54;31951:8;31828:31;:142::i;:::-;31981:18;32019:4:::0;;-1:-1:-1;;32024:15:0;;32019:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32019:21:0::1;-1:-1:-1::0;;;;;32002:49:0::1;;32052:2;32002:53;;;;;;;;;;;;;-1:-1:-1::0;;;;;32002:53:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32002:53:0;32066:44:::1;::::0;;32002:53:::1;32066:44:::0;;::::1;::::0;;;;;;;;;;;32002:53;;-1:-1:-1;32066:44:0::1;::::0;;;32101:4;;;;;;32066:44;::::1;::::0;32101:4;;32066:44;32101:4;32066:44;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;32107:2:0;;-1:-1:-1;32066:34:0::1;::::0;-1:-1:-1;;32066:44:0:i:1;:::-;32219:12:::0;32143:72:::1;32201:13:::0;32160:4;;-1:-1:-1;;32165:15:0;;32160:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32160:21:0::1;-1:-1:-1::0;;;;;32143:49:0::1;;32193:2;32143:53;;;;;;;;;;;;;-1:-1:-1::0;;;;;32143:53:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32143:53:0;;:57:::1;:72::i;:::-;:88;;32121:184;;;;-1:-1:-1::0;;;32121:184:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16908:1;31573:740:::0;;;;;;;:::o;33204:862::-;33471:8;16850:15;16838:8;:27;;16830:67;;;;;-1:-1:-1;;;16830:67:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16830:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33530:4:0::1;33505:29;:4:::0;;-1:-1:-1;;33510:15:0;;33505:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33505:21:0::1;-1:-1:-1::0;;;;;33505:29:0::1;;33497:74;;;::::0;;-1:-1:-1;;;33497:74:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;33582:142;33628:4;;33633:1;33628:7;;;;;;33582:142;33735:55;33770:4;;33735:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;33784:4:0::1;::::0;-1:-1:-1;33735:34:0::1;::::0;-1:-1:-1;;33735:55:0:i:1;:::-;33801:14;33835:4;-1:-1:-1::0;;;;;33818:32:0::1;;33859:4;33818:47;;;;;;;;;;;;;-1:-1:-1::0;;;;;33818:47:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;33818:47:0;;-1:-1:-1;33884:25:0;;::::1;;33876:84;;;;-1:-1:-1::0;;;33876:84:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33977:4;-1:-1:-1::0;;;;;33971:20:0::1;;33992:9;33971:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34013:45;34044:2;34048:9;34013:30;:45::i;26927:709::-:0;27143:21;27115:8;16850:15;16838:8;:27;;16830:67;;;;;-1:-1:-1;;;16830:67:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16830:67:0;;;;;;;;;;;;;;;27201:4:::1;-1:-1:-1::0;;;;;27190:15:0::1;:4;;27195:1;27190:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27190:7:0::1;-1:-1:-1::0;;;;;27190:15:0::1;;27182:60;;;::::0;;-1:-1:-1;;;27182:60:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27263:59;27297:7;27306:9;27317:4;;27263:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27263:33:0::1;::::0;-1:-1:-1;;;27263:59:0:i:1;:::-;27253:69;;27372:12;27341:7;27366:1;27349:7;:14;:18;27341:27;;;;;;;;;;;;;;:43;;27333:102;;;;-1:-1:-1::0;;;27333:102:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27452:4;-1:-1:-1::0;;;;;27446:19:0::1;;27473:7;27481:1;27473:10;;;;;;;;;;;;;;27446:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;27510:4;-1:-1:-1::0;;;;;27504:20:0::1;;27525:54;27553:7;27562:4;;27567:1;27562:7;;;;;;27525:54;27581:7;27589:1;27581:10;;;;;;;;;;;;;;27504:88;;;;;;;;;;;;;-1:-1:-1::0;;;;;27504:88:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;27504:88:0;27497:96:::1;;;;27604:24;27610:7;27619:4;;27604:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27625:2:0;;-1:-1:-1;27604:5:0::1;::::0;-1:-1:-1;;27604:24:0:i:1;:::-;26927:709:::0;;;;;;;;:::o;34582:264::-;34735:13;34773:65;34805:9;34816;34827:10;34773:31;:65::i;26306:615::-;26530:21;26511:8;16850:15;16838:8;:27;;16830:67;;;;;-1:-1:-1;;;16830:67:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16830:67:0;;;;;;;;;;;;;;;26574:58:::1;26607:7;26616:9;26627:4;;26574:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;26574:32:0::1;::::0;-1:-1:-1;;;26574:58:0:i:1;:::-;26564:68;;26665:11;26651:7;26659:1;26651:10;;;;;;;;;;;;;;:25;;26643:80;;;;-1:-1:-1::0;;;26643:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16741:38:::0;;;:::o;34110:191::-;34207:12;34239:54;34265:7;34274:8;34284;34239:25;:54::i;23359:710::-;23625:14;23606:8;16850:15;16838:8;:27;;16830:67;;;;;-1:-1:-1;;;16830:67:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16830:67:0;;;;;;;;;;;;;;;23668:196:::1;23698:5;23718:4;23737:9;23761:14;23790:12;23825:4;23845:8;23668:15;:196::i;:::-;23652:212;;;;;;23875:88;23903:5;23910:2;23931:5;-1:-1:-1::0;;;;;23914:33:0::1;;23956:4;23914:48;;;;;;;;;;;;;-1:-1:-1::0;;;;;23914:48:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;23914:48:0;23875:27:::1;:88::i;:::-;23980:4;-1:-1:-1::0;;;;;23974:20:0::1;;23995:9;23974:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24016:45;24047:2;24051:9;24016:30;:45::i;32319:879::-:0;32579:8;16850:15;16838:8;:27;;16830:67;;;;;-1:-1:-1;;;16830:67:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16830:67:0;;;;;;;;;;;;;;;32624:4:::1;-1:-1:-1::0;;;;;32613:15:0::1;:4;;32618:1;32613:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32613:7:0::1;-1:-1:-1::0;;;;;32613:15:0::1;;32605:60;;;::::0;;-1:-1:-1;;;32605:60:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;32676:13;32692:9;32676:25;;32718:4;-1:-1:-1::0;;;;;32712:19:0::1;;32739:8;32712:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;32774:4;-1:-1:-1::0;;;;;32768:20:0::1;;32789:54;32817:7;32826:4;;32831:1;32826:7;;;;;;32789:54;32845:8;32768:86;;;;;;;;;;;;;-1:-1:-1::0;;;;;32768:86:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32768:86:0;32761:94:::1;;;;32866:18;32904:4:::0;;-1:-1:-1;;32909:15:0;;32904:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32904:21:0::1;-1:-1:-1::0;;;;;32887:49:0::1;;32937:2;32887:53;;;;;;;;;;;;;-1:-1:-1::0;;;;;32887:53:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32887:53:0;32951:44:::1;::::0;;32887:53:::1;32951:44:::0;;::::1;::::0;;;;;;;;;;;32887:53;;-1:-1:-1;32951:44:0::1;::::0;;;32986:4;;;;;;32951:44;::::1;::::0;32986:4;;32951:44;32986:4;32951:44;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;32992:2:0;;-1:-1:-1;32951:34:0::1;::::0;-1:-1:-1;;32951:44:0:i:1;:::-;33104:12:::0;33028:72:::1;33086:13:::0;33045:4;;-1:-1:-1;;33050:15:0;;33045:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33045:21:0::1;-1:-1:-1::0;;;;;33028:49:0::1;;33078:2;33028:53;;;;;;;;;;;;;-1:-1:-1::0;;;;;33028:53:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;20348:883:::0;20602:12;20616;20583:8;16850:15;16838:8;:27;;16830:67;;;;;-1:-1:-1;;;16830:67:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16830:67:0;;;;;;;;;;;;;;;20641:12:::1;20656:52;20684:7;20693:6;20701;20656:27;:52::i;:::-;20719:65;::::0;;-1:-1:-1;;;20719:65:0;;20756:10:::1;20719:65;::::0;::::1;::::0;-1:-1:-1;;;;;20719:36:0;::::1;:65:::0;;;;;;;;;;;;;;20641:67;;-1:-1:-1;20719:36:0;;::::1;::::0;:65;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20719:36:0;:65;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;20852:32:0::1;::::0;;;;;-1:-1:-1;;;;;20852:32:0;;::::1;;::::0;::::1;::::0;;;20822:12:::1;::::0;;;20852:28;;::::1;::::0;::::1;::::0;:32;;;;;;;;;;;20822:12;20852:28;:32;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;20852:32:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20852:32:0;-1:-1:-1;20896:14:0::1;20915:46;20946:6:::0;20954;20915:30:::1;:46::i;:::-;20895:66;;;21003:6;-1:-1:-1::0;;;;;20993:16:0::1;:6;-1:-1:-1::0;;;;;20993:16:0::1;;:58;;21034:7;21043;20993:58;;;21013:7;21022;20993:58;20972:79:::0;;-1:-1:-1;20972:79:0;-1:-1:-1;21070:21:0;;::::1;;21062:75;;;;-1:-1:-1::0;;;21062:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21167:10;21156:7;:21;;21148:75;;;;-1:-1:-1::0;;;21148:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16908:1;;;;20348:883:::0;;;;;;;;;;;:::o;16693:41::-;;;:::o;34854:256::-;34998:21;35044:58;35078:7;35087:8;35097:4;35044:33;:58::i;22605:675::-;22894:16;22912:14;22939:12;22954:49;22982:7;22991:5;22998:4;22954:27;:49::i;:::-;22939:64;;23014:10;23027;:33;;23051:9;23027:33;;;-1:-1:-1;;23027:33:0;23071:83;;;-1:-1:-1;;;23071:83:0;;23102:10;23071:83;;;;23122:4;23071:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23014:46;;-1:-1:-1;;;;;;23071:30:0;;;;;:83;;;;;-1:-1:-1;;23071:83:0;;;;;;;;-1:-1:-1;23071:30:0;:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23192:80;23211:5;23218:9;23229:14;23245:12;23259:2;23263:8;23192:18;:80::i;:::-;23165:107;;;;-1:-1:-1;22605:675:0;-1:-1:-1;;;;;;;;;;;;;22605:675:0:o;18575:744::-;18863:12;18877;18891:14;18844:8;16850:15;16838:8;:27;;16830:67;;;;;-1:-1:-1;;;16830:67:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16830:67:0;;;;;;;;;;;;;;;18939:85:::1;18953:6;18961;18969:14;18985;19001:10;19013;18939:13;:85::i;:::-;18918:106:::0;;-1:-1:-1;18918:106:0;-1:-1:-1;19035:12:0::1;19050:52;19078:7;19087:6:::0;19095;19050:27:::1;:52::i;:::-;19035:67;;19113:66;19145:6;19153:10;19165:4;19171:7;19113:31;:66::i;:::-;19190;19222:6;19230:10;19242:4;19248:7;19190:31;:66::i;:::-;19297:4;-1:-1:-1::0;;;;;19279:28:0::1;;19308:2;19279:32;;;;;;;;;;;;;-1:-1:-1::0;;;;;19279:32:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19279:32:0;18575:744;;;;-1:-1:-1;19279:32:0;;-1:-1:-1;18575:744:0;;-1:-1:-1;;;;;;;;;18575:744:0:o;19325:980::-;19578:16;19596:14;19612;19559:8;16850:15;16838:8;:27;;16830:67;;;;;-1:-1:-1;;;16830:67:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16830:67:0;;;;;;;;;;;;;;;19666:176:::1;19694:5;19714:4;19733:18;19766:9;19790:14;19819:12;19666:13;:176::i;:::-;19639:203:::0;;-1:-1:-1;19639:203:0;-1:-1:-1;19853:12:0::1;19868:49;19896:7;19905:5:::0;19912:4:::1;19868:27;:49::i;:::-;19853:64;;19928:69;19960:5;19967:10;19979:4;19985:11;19928:31;:69::i;:::-;20014:4;-1:-1:-1::0;;;;;20008:19:0::1;;20035:9;20008:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;20071:4;-1:-1:-1::0;;;;;20065:20:0::1;;20086:4;20092:9;20065:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;20065:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;20065:37:0;20058:45:::1;;;;20144:4;-1:-1:-1::0;;;;;20126:28:0::1;;20155:2;20126:32;;;;;;;;;;;;;-1:-1:-1::0;;;;;20126:32:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;20126:32:0;;-1:-1:-1;20209:9:0::1;:21:::0;-1:-1:-1;20205:92:0::1;;;20232:65;20263:10;20287:9;20275;:21;20232:30;:65::i;:::-;16908:1;19325:980:::0;;;;;;;;;;;:::o;29356:822::-;29569:21;29541:8;16850:15;16838:8;:27;;16830:67;;;;;-1:-1:-1;;;16830:67:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16830:67:0;;;;;;;;;;;;;;;29627:4:::1;-1:-1:-1::0;;;;;29616:15:0::1;:4;;29621:1;29616:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29616:7:0::1;-1:-1:-1::0;;;;;29616:15:0::1;;29608:60;;;::::0;;-1:-1:-1;;;29608:60:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;29689:58;29722:7;29731:9;29742:4;;29689:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29689:32:0::1;::::0;-1:-1:-1;;;29689:58:0:i:1;:::-;29679:68;;29780:9;29766:7;29774:1;29766:10;;;;;;;;;;;;;;:23;;29758:78;;;;-1:-1:-1::0;;;29758:78:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29853:4;-1:-1:-1::0;;;;;29847:19:0::1;;29874:7;29882:1;29874:10;;;;;;;;;;;;;;29847:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;29911:4;-1:-1:-1::0;;;;;29905:20:0::1;;29926:54;29954:7;29963:4;;29968:1;29963:7;;;;;;29926:54;29982:7;29990:1;29982:10;;;;;;;;;;;;;;29905:88;;;;;;;;;;;;;-1:-1:-1::0;;;;;29905:88:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;29905:88:0;29898:96:::1;;;;30005:24;30011:7;30020:4;;30005:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;30026:2:0;;-1:-1:-1;30005:5:0::1;::::0;-1:-1:-1;;30005:24:0:i:1;:::-;30092:7;30100:1;30092:10;;;;;;;;;;;;;;30080:9;:22;30076:94;;;30104:66;30135:10;30159:7;30167:1;30159:10;;;;;;;;;;;;;;30147:9;:22;30104:30;:66::i;8435:361::-:0;8630:45;;;-1:-1:-1;;;;;8630:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8619:57;;;;8584:12;;8598:17;;8619:10;;;;8630:45;8619:57;;;8630:45;8619:57;;8630:45;8619:57;;;;;;;;;;-1:-1:-1;;8619:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8583:93;;;;8695:7;:57;;;;-1:-1:-1;8707:11:0;;:16;;:44;;;8738:4;8727:24;;;;;;;;;;;;;;;-1:-1:-1;8727:24:0;8707:44;8687:101;;;;;-1:-1:-1;;;8687:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8435:361;;;;;:::o;9214:195::-;9322:12;;;9284;9322;;;;;;;;;-1:-1:-1;;;;;9301:7:0;;;9315:5;;9301:34;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9301:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9283:52;;;9354:7;9346:55;;;;-1:-1:-1;;;9346:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9214:195;;;:::o;5498:523::-;5591:14;5637:1;5626:8;:12;5618:71;;;;-1:-1:-1;;;5618:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5720:1;5708:9;:13;:31;;;;;5738:1;5725:10;:14;5708:31;5700:87;;;;-1:-1:-1;;;5700:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5798:20;5821:17;:8;5834:3;5821:12;:17::i;:::-;5798:40;-1:-1:-1;5849:14:0;5866:31;5798:40;5886:10;5866:19;:31::i;:::-;5849:48;-1:-1:-1;5908:16:0;5927:40;5951:15;5927:19;:9;5941:4;5927:13;:19::i;:::-;:23;;:40::i;:::-;5908:59;;6002:11;5990:9;:23;;;;;;;5498:523;-1:-1:-1;;;;;;;5498:523:0:o;6702:514::-;6803:21;6860:1;6845:4;:11;:16;;6837:62;;;;-1:-1:-1;;;6837:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6931:4;:11;6920:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6920:23:0;;6910:33;;6967:8;6954:7;6962:1;6954:10;;;;;;;;;;;;;:21;;;;;6991:6;6986:223;7017:1;7003:4;:11;:15;6999:1;:19;6986:223;;;7041:14;7057:15;7076:42;7088:7;7097:4;7102:1;7097:7;;;;;;;;;;;;;;7106:4;7111:1;7115;7111:5;7106:11;;;;;;;;;;;;;;7076;:42::i;:::-;7040:78;;;;7150:47;7163:7;7171:1;7163:10;;;;;;;;;;;;;;7175:9;7186:10;7150:12;:47::i;:::-;7133:7;7141:1;7145;7141:5;7133:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;7020:3:0;;6986:223;;;;6702:514;;;;;:::o;4006:478::-;4095:12;4121:14;4137;4155:26;4166:6;4174;4155:10;:26::i;:::-;4319:32;;;-1:-1:-1;;4319:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4309:43;;;;;;4222:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4212:262;;;;;;;;;4006:478;-1:-1:-1;;;;;4006:478:0:o;8804:402::-;9029:51;;;-1:-1:-1;;;;;9029:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9029:51:0;;;9018:63;;;;8983:12;;8997:17;;9018:10;;;;9029:51;9018:63;;;9029:51;9018:63;;9029:51;9018:63;;;;;;;;;;-1:-1:-1;;9018:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8982:99;;;;9100:7;:57;;;;-1:-1:-1;9112:11:0;;:16;;:44;;;9143:4;9132:24;;;;;;;;;;;;;;;-1:-1:-1;9132:24:0;9112:44;9092:106;;;;-1:-1:-1;;;9092:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8804:402;;;;;;:::o;24910:747::-;25017:6;25012:638;25043:1;25029:4;:11;:15;25025:1;:19;25012:638;;;25067:13;25082:14;25101:4;25106:1;25101:7;;;;;;;;;;;;;;25110:4;25115:1;25119;25115:5;25110:11;;;;;;;;;;;;;;25066:56;;;;25138:14;25157:45;25188:5;25195:6;25157:30;:45::i;:::-;25137:65;;;25217:14;25234:7;25242:1;25246;25242:5;25234:14;;;;;;;;;;;;;;25217:31;;25264:15;25281;25309:6;-1:-1:-1;;;;;25300:15:0;:5;-1:-1:-1;;;;;25300:15:0;;:61;;25342:9;25358:1;25300:61;;;25324:1;25328:9;25300:61;25263:98;;;;25376:10;25407:1;25393:4;:11;:15;25389:1;:19;:85;;25471:3;25389:85;;;25411:57;25439:7;25448:6;25456:4;25461:1;25465;25461:5;25456:11;;;;;;;;;;;;;;25411:27;:57::i;:::-;25376:98;;25507:51;25535:7;25544:5;25551:6;25507:27;:51::i;:::-;-1:-1:-1;;;;;25489:75:0;;25583:10;25595;25607:2;25621:1;25611:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25611:12:0;;25489:149;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25489:149:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25046:3:0;;;;;-1:-1:-1;25012:638:0;;-1:-1:-1;;;;;;;;25012:638:0;;;24910:747;;;:::o;7297:535::-;7398:21;7455:1;7440:4;:11;:16;;7432:62;;;;-1:-1:-1;;;7432:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7526:4;:11;7515:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7515:23:0;;7505:33;;7579:9;7549:7;7574:1;7557:7;:14;:18;7549:27;;;;;;;;;;;;;;;;;:39;7613:11;;-1:-1:-1;;7613:15:0;7599:226;7630:5;;7599:226;;7658:14;7674:15;7693:42;7705:7;7714:4;7723:1;7719;:5;7714:11;;;;;;;;;;;;;;7727:4;7732:1;7727:7;;;;;;;7693:42;7657:78;;;;7767:46;7779:7;7787:1;7779:10;;;;;;;;;;;;;;7791:9;7802:10;7767:11;:46::i;:::-;7750:7;7762:1;7758;:5;7750:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;7637:3:0;7599:226;;30325:1242;30438:6;30433:1127;30464:1;30450:4;:11;:15;30446:1;:19;30433:1127;;;30488:13;30503:14;30522:4;30527:1;30522:7;;;;;;;;;;;;;;30531:4;30536:1;30540;30536:5;30531:11;;;;;;;;;;;;;;30487:56;;;;30559:14;30578:45;30609:5;30616:6;30578:30;:45::i;:::-;30558:65;;;30638:22;30681:51;30709:7;30718:5;30725:6;30681:27;:51::i;:::-;30638:95;;30748:16;30779:17;30867:13;30882;30900:4;-1:-1:-1;;;;;30900:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30900:18:0;;;;;;;30866:52;;;;;-1:-1:-1;30866:52:0;;-1:-1:-1;30934:17:0;;-1:-1:-1;;;;;30975:15:0;;;;;;;:61;;31017:8;31027;30975:61;;;30994:8;31004;30975:61;30933:103;;;;31065:66;31118:12;31082:5;-1:-1:-1;;;;;31065:33:0;;31107:4;31065:48;;;;;;;;;;;;;-1:-1:-1;;;;;31065:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;:66;31051:80;;31161:74;31194:11;31207:12;31221:13;31161:32;:74::i;:::-;31146:89;;30433:1127;;;;31266:15;31283;31311:6;-1:-1:-1;;;;;31302:15:0;:5;-1:-1:-1;;;;;31302:15:0;;:67;;31347:12;31366:1;31302:67;;;31326:1;31330:12;31302:67;31265:104;;;;31384:10;31415:1;31401:4;:11;:15;31397:1;:19;:85;;31479:3;31397:85;;;31419:57;31447:7;31456:6;31464:4;31469:1;31473;31469:5;31464:11;;;;;;;31419:57;31535:12;;;31545:1;31535:12;;;;;;;;;;31497:51;;;;;;;;;;;;;;;-1:-1:-1;;;;;31497:51:0;;;;;;;;;;;;;;;;;;;;;;31384:98;;-1:-1:-1;31497:9:0;;;;;;31507:10;;31519;;31384:98;;31535:12;;31497:51;;;;;;;;31535:12;;31497:51;;;;31535:12;;31497:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30467:3:0;;;;;-1:-1:-1;30433:1127:0;;-1:-1:-1;;;;;;;;;;30433:1127:0;3002:129;3086:5;;;3081:16;;;;3073:50;;;;;-1:-1:-1;;;3073:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;6142:478;6235:13;6281:1;6269:9;:13;6261:73;;;;-1:-1:-1;;;6261:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6365:1;6353:9;:13;:31;;;;;6383:1;6370:10;:14;6353:31;6345:87;;;;-1:-1:-1;;;6345:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6443:14;6460:34;6489:4;6460:24;:9;6474;6460:13;:24::i;:::-;:28;;:34::i;:::-;6443:51;-1:-1:-1;6505:16:0;6524:34;6554:3;6524:25;:10;6539:9;6524:14;:25::i;:34::-;6505:53;;6580:32;6610:1;6593:11;6581:9;:23;;;;;;;6580:29;:32::i;:::-;6569:43;6142:478;-1:-1:-1;;;;;;6142:478:0:o;5049:327::-;5131:12;5174:1;5164:7;:11;5156:64;;;;-1:-1:-1;;;5156:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5250:1;5239:8;:12;:28;;;;;5266:1;5255:8;:12;5239:28;5231:84;;;;-1:-1:-1;;;5231:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5360:8;5336:21;:7;5348:8;5336:11;:21::i;:::-;:32;;;;;;;5049:327;-1:-1:-1;;;;5049:327:0:o;3559:355::-;3634:14;3650;3695:6;-1:-1:-1;;;;;3685:16:0;:6;-1:-1:-1;;;;;3685:16:0;;;3677:69;;;;-1:-1:-1;;;3677:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3785:6;-1:-1:-1;;;;;3776:15:0;:6;-1:-1:-1;;;;;3776:15:0;;:53;;3814:6;3822;3776:53;;;3795:6;3803;3776:53;3757:72;;-1:-1:-1;3757:72:0;-1:-1:-1;;;;;;3848:20:0;;3840:66;;;;-1:-1:-1;;;3840:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3559:355;;;;;:::o;17158:1411::-;17376:12;17390;17536:1;-1:-1:-1;;;;;17471:67:0;17492:7;-1:-1:-1;;;;;17471:37:0;;17509:6;17517;17471:53;;;;;;;;;;;;;-1:-1:-1;;;;;17471:53:0;;;;;;-1:-1:-1;;;;;17471:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17471:53:0;-1:-1:-1;;;;;17471:67:0;;17467:156;;;17576:7;-1:-1:-1;;;;;17555:40:0;;17596:6;17604;17555:56;;;;;;;;;;;;;-1:-1:-1;;;;;17555:56:0;;;;;;-1:-1:-1;;;;;17555:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17467:156:0;17634:13;17649;17666:56;17698:7;17707:6;17715;17666:31;:56::i;:::-;17633:89;;;;17737:8;17749:1;17737:13;:30;;;;-1:-1:-1;17754:13:0;;17737:30;17733:829;;;17806:14;;-1:-1:-1;17822:14:0;;-1:-1:-1;17733:829:0;;;17870:19;17892:61;17918:14;17934:8;17944;17892:25;:61::i;:::-;17870:83;;17990:14;17972;:32;17968:583;;18051:10;18033:14;:28;;18025:82;;;;-1:-1:-1;;;18025:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18148:14;;-1:-1:-1;18164:14:0;-1:-1:-1;18164:14:0;17968:583;;;18220:19;18242:61;18268:14;18284:8;18294;18242:25;:61::i;:::-;18220:83;;18347:14;18329;:32;;18322:40;;;;18407:10;18389:14;:28;;18381:82;;;;-1:-1:-1;;;18381:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18504:14;-1:-1:-1;18520:14:0;;-1:-1:-1;17968:583:0;17733:829;;17158:1411;;;;;;;;;;;:::o;3139:142::-;3191:6;3218;;;:30;;-1:-1:-1;;3233:5:0;;;3247:1;3242;3233:5;3242:1;3228:15;;;;;:20;3218:30;3210:63;;;;;-1:-1:-1;;;3210:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;2866:128;2950:5;;;2945:16;;;;2937:49;;;;;-1:-1:-1;;;2937:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;4542:394;4635:13;4650;4677:14;4696:26;4707:6;4715;4696:10;:26::i;:::-;4676:46;;;4734:13;4749;4785:32;4793:7;4802:6;4810;4785:7;:32::i;:::-;-1:-1:-1;;;;;4767:63:0;;:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4767:65:0;;;;;;;4733:99;;;;;-1:-1:-1;4733:99:0;;-1:-1:-1;;;;;;4866:16:0;;;;;;;:62;;4909:8;4919;4866:62;;;4886:8;4896;4866:62;4843:85;;;;-1:-1:-1;4542:394:0;-1:-1:-1;;;;;;;4542:394:0:o

Swarm Source

ipfs://35ee52b196104ce258a46cd87e78e74a43aac03086b2a9d70f452af99ce2de0e
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.