Contract 0x70085a09d30d6f8c4ecf6ee10120d1847383bb57 1

Contract Overview

StellaSwap: Router v2.1
Balance:
0 GLMR

GLMR Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xd8d8fa605e84d32e83ab921b5595f5da6e652b4d29a80ef4a1201c30d95567b5Swap Exact Token...13240902022-06-27 18:14:1854 secs ago0xba53dc7f04dd857e8e5d5c6a1c179dfe6c260499 IN  StellaSwap: Router v2.10 GLMR0.01848275
0xafb8e904be9f7d0ba0f23844f72fbcc4e535c44b07810fef421f45bba0355787Swap Exact ETH F...13240882022-06-27 18:13:541 min ago0x0567c6ed430fdd5aee8332f0cd8f5a0ee97de317 IN  StellaSwap: Router v2.1143 GLMR0.0124486705
0x0909fd67f70e96e4060f53b77630fed3e733318e075b7738dd0e9d88ca11fdd9Swap Exact ETH F...13240882022-06-27 18:13:541 min ago0xba53dc7f04dd857e8e5d5c6a1c179dfe6c260499 IN  StellaSwap: Router v2.17.513670793430487 GLMR0.015815625
0xd24932ee9e50acdb9b321d342b562cadb8dc60ddb1fea9d4c262df2ce9908335Swap Exact Token...13240822022-06-27 18:12:422 mins ago0x0567c6ed430fdd5aee8332f0cd8f5a0ee97de317 IN  StellaSwap: Router v2.10 GLMR0.011906762
0x5b8adcdd505c02f42423a27591e331845234c6813c5ecd75bc91ab6f1fff5d85Swap Exact Token...13240822022-06-27 18:12:422 mins ago0xa48ad59da24949a90887cd4db4ff4d8fab0e0269 IN  StellaSwap: Router v2.10 GLMR0.012301394
0x4d11692c105649134ebb4c324b4920dc42645d4e31733d077d44b9c6a5a6ebecAdd Liquidity ET...13240812022-06-27 18:12:302 mins ago0xa3529e1f877a9453aa6053d66d7d4f07827e8e86 IN  StellaSwap: Router v2.199.817025078323313 GLMR0.0153933885
0xd9baf73f56071eb0345e9608318177badd591d6f45328c5cf2d3bb0580dcb5ebAdd Liquidity ET...13240792022-06-27 18:12:003 mins ago0xe943746c920aa8e751a650a36771dc0d023e5c26 IN  StellaSwap: Router v2.17.602234599079171 GLMR0.004800747
0xd5e5325692b816a3dacf8edc533cadd0090f23034382a37a89fecd1d2f933bb1Add Liquidity ET...13240762022-06-27 18:11:183 mins ago0xe943746c920aa8e751a650a36771dc0d023e5c26 IN  StellaSwap: Router v2.17.602234599079171 GLMR0.016028068
0x5060aec5573a6b559ed6e7b0cfd56c9910a60c313613ba62b8d51cf94f602a3eSwap Exact ETH F...13240752022-06-27 18:11:064 mins ago0xa3529e1f877a9453aa6053d66d7d4f07827e8e86 IN  StellaSwap: Router v2.1100 GLMR0.012647103
0x5f396764de3517ade236c70a44e7643b1d0052a1a2445f5f243fe03c0f2a6761Swap Exact Token...13240712022-06-27 18:10:065 mins ago0x02282d4342b0258e202b8e1a3497a5102720f703 IN  StellaSwap: Router v2.10 GLMR0.0159236245
0x3f7e667ee2926cb1e71440092e221feffa7423e8ef7536498214a1b66478fed0Remove Liquidity...13240692022-06-27 18:09:425 mins ago0xb39f72ff6666d670c189947c69b311a06c719366 IN  StellaSwap: Router v2.10 GLMR0.018983342
0x462c2ce6c28945286ee9cb80fe25a399d5f6d07e18ce31098bee7e52057907fdSwap Exact Token...13240682022-06-27 18:09:305 mins ago0x0567c6ed430fdd5aee8332f0cd8f5a0ee97de317 IN  StellaSwap: Router v2.10 GLMR0.0161256095
0x03ca3fa9efd24e72d3deba28d08b6243cde3cf2a63b0ce37bb218d4ac2794fcdSwap Exact Token...13240642022-06-27 18:08:366 mins ago0x0567c6ed430fdd5aee8332f0cd8f5a0ee97de317 IN  StellaSwap: Router v2.10 GLMR0.011443922
0xa3996ea9563f9b4eb51050881a8216d58349711c0a221a3f885b2cecba9b83b5Swap Exact ETH F...13240642022-06-27 18:08:366 mins ago0xc93e535d796dff10347e74f7e459853cb7225d93 IN  StellaSwap: Router v2.1600 GLMR0.0213454
0x43cff329310398036386ee4afb93cfe26f8d5563c98bec4081af98acd805c344Swap Exact ETH F...13240642022-06-27 18:08:366 mins ago0xcebb527e3bfdfa1283707de53751821197b9c2ab IN  StellaSwap: Router v2.1542 GLMR0.09071988
0x97ec011905fad6bab8f92331fbafbbe1f9e9ddb68ccacc45a27ff399372ea5baSwap Exact Token...13240632022-06-27 18:08:246 mins ago0x2b46c40b6d1f4d77a6719f92864cf40bb049e366 IN  StellaSwap: Router v2.10 GLMR0.078510708
0x2ed7db03e8050fc1c58c034ec6e56a6b064658d3668e515d2bd195b6534923d3Swap Exact ETH F...13240622022-06-27 18:08:127 mins ago0x7ee136128a88561b703b917557130f4242900306 IN  StellaSwap: Router v2.1720 GLMR0.0426908
0x2e92ea04d0e7b9dec9e2cda2e29aef647b121e43f87486b8373aefde56533923Swap Exact ETH F...13240622022-06-27 18:08:127 mins ago0xcebb527e3bfdfa1283707de53751821197b9c2ab IN  StellaSwap: Router v2.12,000 GLMR0.09071988
0x3473318ea02453f0a28c341e19cb7837be7a29fa57e37f78f20c3c1c17feb4afSwap Exact Token...13240612022-06-27 18:08:007 mins ago0x2b46c40b6d1f4d77a6719f92864cf40bb049e366 IN  StellaSwap: Router v2.10 GLMR0.078510708
0xa2d9042cb098f4c4f6cba47dbc834e595e2c5a46ee4371a7e252e4ae6b126106Swap Exact Token...13240592022-06-27 18:07:307 mins ago0x8d2876ad4d2a994c529f19d846ca541015dc3f05 IN  StellaSwap: Router v2.10 GLMR0.00846342
0x317fd799162fc8bb74332fb664ffa20f554f516fe44c02f66fb20ca1ec3bf7e2Swap Exact ETH F...13240592022-06-27 18:07:307 mins ago0x7ee136128a88561b703b917557130f4242900306 IN  StellaSwap: Router v2.1720 GLMR0.0426908
0x34fb726a98313ac8546e55118c7487881f36e2060610a1734e667b32c7a0662aSwap Exact Token...13240592022-06-27 18:07:307 mins ago0x2b46c40b6d1f4d77a6719f92864cf40bb049e366 IN  StellaSwap: Router v2.10 GLMR0.076553301
0x0a24822253fdc68e594ce2b93d147dbc7bd21cf0fbac1f2c099cc90bdb036ab0Swap Exact Token...13240592022-06-27 18:07:307 mins ago0xfffa285b4ca6ead9e537279e6b0d6d233d5e56bb IN  StellaSwap: Router v2.10 GLMR0.024364152
0x134421f9ceea1636ece9938762a00bef769df5fb67d2836dd8173f81fe50b44bSwap Exact ETH F...13240592022-06-27 18:07:307 mins ago0xcebb527e3bfdfa1283707de53751821197b9c2ab IN  StellaSwap: Router v2.12,000 GLMR0.09071988
0xe697c75cabbd1bf513dd038ffc91853b7ce65e3e3e672fe1eb94bd214cf21585Swap Exact Token...13240582022-06-27 18:07:068 mins ago0x2b46c40b6d1f4d77a6719f92864cf40bb049e366 IN  StellaSwap: Router v2.10 GLMR0.078506199
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xafb8e904be9f7d0ba0f23844f72fbcc4e535c44b07810fef421f45bba035578713240882022-06-27 18:13:541 min ago StellaSwap: Router v2.1 Moonbeam: WGLMR Token143 GLMR
0x0909fd67f70e96e4060f53b77630fed3e733318e075b7738dd0e9d88ca11fdd913240882022-06-27 18:13:541 min ago StellaSwap: Router v2.1 Moonbeam: WGLMR Token7.513670793430487661 GLMR
0xd24932ee9e50acdb9b321d342b562cadb8dc60ddb1fea9d4c262df2ce990833513240822022-06-27 18:12:422 mins ago StellaSwap: Router v2.10x0567c6ed430fdd5aee8332f0cd8f5a0ee97de317285.448952807425997636 GLMR
0xd24932ee9e50acdb9b321d342b562cadb8dc60ddb1fea9d4c262df2ce990833513240822022-06-27 18:12:422 mins ago Moonbeam: WGLMR Token StellaSwap: Router v2.1285.448952807425997636 GLMR
0x5b8adcdd505c02f42423a27591e331845234c6813c5ecd75bc91ab6f1fff5d8513240822022-06-27 18:12:422 mins ago StellaSwap: Router v2.10xa48ad59da24949a90887cd4db4ff4d8fab0e02697.274614546650179022 GLMR
0x5b8adcdd505c02f42423a27591e331845234c6813c5ecd75bc91ab6f1fff5d8513240822022-06-27 18:12:422 mins ago Moonbeam: WGLMR Token StellaSwap: Router v2.17.274614546650179022 GLMR
0x4d11692c105649134ebb4c324b4920dc42645d4e31733d077d44b9c6a5a6ebec13240812022-06-27 18:12:302 mins ago StellaSwap: Router v2.1 Moonbeam: WGLMR Token99.817025078323313128 GLMR
0xd5e5325692b816a3dacf8edc533cadd0090f23034382a37a89fecd1d2f933bb113240762022-06-27 18:11:183 mins ago StellaSwap: Router v2.1 Moonbeam: WGLMR Token7.602234599079171508 GLMR
0x5060aec5573a6b559ed6e7b0cfd56c9910a60c313613ba62b8d51cf94f602a3e13240752022-06-27 18:11:064 mins ago StellaSwap: Router v2.1 Moonbeam: WGLMR Token100 GLMR
0x3f7e667ee2926cb1e71440092e221feffa7423e8ef7536498214a1b66478fed013240692022-06-27 18:09:425 mins ago StellaSwap: Router v2.10xb39f72ff6666d670c189947c69b311a06c719366506.909506013510733861 GLMR
0x3f7e667ee2926cb1e71440092e221feffa7423e8ef7536498214a1b66478fed013240692022-06-27 18:09:425 mins ago Moonbeam: WGLMR Token StellaSwap: Router v2.1506.909506013510733861 GLMR
0x03ca3fa9efd24e72d3deba28d08b6243cde3cf2a63b0ce37bb218d4ac2794fcd13240642022-06-27 18:08:366 mins ago StellaSwap: Router v2.10x0567c6ed430fdd5aee8332f0cd8f5a0ee97de3170.766094781277974908 GLMR
0x03ca3fa9efd24e72d3deba28d08b6243cde3cf2a63b0ce37bb218d4ac2794fcd13240642022-06-27 18:08:366 mins ago Moonbeam: WGLMR Token StellaSwap: Router v2.10.766094781277974908 GLMR
0xa3996ea9563f9b4eb51050881a8216d58349711c0a221a3f885b2cecba9b83b513240642022-06-27 18:08:366 mins ago StellaSwap: Router v2.1 Moonbeam: WGLMR Token600 GLMR
0x43cff329310398036386ee4afb93cfe26f8d5563c98bec4081af98acd805c34413240642022-06-27 18:08:366 mins ago StellaSwap: Router v2.1 Moonbeam: WGLMR Token542 GLMR
0x2ed7db03e8050fc1c58c034ec6e56a6b064658d3668e515d2bd195b6534923d313240622022-06-27 18:08:127 mins ago StellaSwap: Router v2.1 Moonbeam: WGLMR Token720 GLMR
0x2e92ea04d0e7b9dec9e2cda2e29aef647b121e43f87486b8373aefde5653392313240622022-06-27 18:08:127 mins ago StellaSwap: Router v2.1 Moonbeam: WGLMR Token2,000 GLMR
0x317fd799162fc8bb74332fb664ffa20f554f516fe44c02f66fb20ca1ec3bf7e213240592022-06-27 18:07:307 mins ago StellaSwap: Router v2.1 Moonbeam: WGLMR Token720 GLMR
0x134421f9ceea1636ece9938762a00bef769df5fb67d2836dd8173f81fe50b44b13240592022-06-27 18:07:307 mins ago StellaSwap: Router v2.1 Moonbeam: WGLMR Token2,000 GLMR
0xb25454c20a6e1c6559e6a6ac2e64dd00c054ac07f3075a7471d20799537a989613240502022-06-27 18:05:249 mins ago StellaSwap: Router v2.1 Moonbeam: WGLMR Token0.997504555836885421 GLMR
0x29f4cc1a38d919ef4acd00105984736a616ff940023c846d179fa4ef71f2944a13240492022-06-27 18:05:1210 mins ago StellaSwap: Router v2.1 Moonbeam: WGLMR Token2.658977614572328473 GLMR
0x616d2657524780f1142e714b447e01d8a50c036a82e32f533ee25b3868b4e19713240492022-06-27 18:05:1210 mins ago StellaSwap: Router v2.10xadec5f057e54331cdc0d36289740b077d046740b600.264475212639935278 GLMR
0x616d2657524780f1142e714b447e01d8a50c036a82e32f533ee25b3868b4e19713240492022-06-27 18:05:1210 mins ago Moonbeam: WGLMR Token StellaSwap: Router v2.1600.264475212639935278 GLMR
0x6edb8b8653b9f5d72134ef76866d1a9d961607382dc932dd8b2d2bcbd36b498013240462022-06-27 18:04:3610 mins ago StellaSwap: Router v2.1 Moonbeam: WGLMR Token1 GLMR
0x8affb1705034c9d7ebfd499f36ec0208537cc72019809ce3583ff8890592025a13240362022-06-27 18:02:3612 mins ago StellaSwap: Router v2.10x61e284a649b9a636a85da9cbfe3df25331cfa4a5143.639063692062659093 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 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at moonbeam.moonscan.io on 2022-03-28
*/

// 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(9975);
        uint numerator = amountInWithFee.mul(reserveOut);
        uint denominator = reserveIn.mul(10000).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(10000);
        uint denominator = reserveOut.sub(amountOut).mul(9975);
        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"}]

60c060405234801561001057600080fd5b5060405162004702380380620047028339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c61457d620001856000398061015f5280610ce45280610d1f5280610e16528061103452806113be528061152452806118d352806119ae5280611a885280611b565280611c9c5280611d245280611f605280611fdb528061208f528061215b52806121f05280612264528061274752806129b15280612a075280612a3b5280612aaf5280612c3d5280612d805280612e08525080610ea45280610f7b52806110fa5280611133528061126e528061144c528061150252806116725280611be95280611d565280611eb0528061229652806124d452806126cc52806126f55280612725528061289252806129e55280612cd05280612e3a52806136aa52806136ed52806139b15280613b275280613f025280613fbb528061406e525061457d6000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b038135169060200135611885565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b0e565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e58565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e65565b34801561088157600080fd5b5061088a611f5e565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f82565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611f8f565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b038135169060200135612115565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612486565b348015610a1c57600080fd5b5061088a6126ca565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506126ee945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561271b565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e0013561282f565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612962565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612bf5565b6000808242811015610cde576040805162461bcd60e51b815260206004820152601b60248201526000805160206143a3833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612486565b9093509150610d1d898685612f6e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da585836130d8565b50965096945050505050565b6000610dbe8484846131d0565b949350505050565b60608142811015610e0c576040805162461bcd60e51b815260206004820152601b60248201526000805160206143a3833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b81526020600482018190526024820152600080516020614383833981519152604482015290519081900360640190fd5b610efd7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506132a892505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b815260040180806020018281038252602e815260200180614355602e913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b03166133de565b85600081518110610fe657fe5b602002602001015161349e565b611032828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506135fb915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b60200260200101516130d8565b509695505050505050565b60606111207f00000000000000000000000000000000000000000000000000000000000000008484613838565b90505b92915050565b60008060006111597f00000000000000000000000000000000000000000000000000000000000000008f8f6133de565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f612486565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b815260206004820152601b60248201526000805160206143a3833981519152604482015290519081900360640190fd5b6112c77f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506132a892505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b815260040180806020018281038252602e815260200180614355602e913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e8828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506135fb915050565b606081428110156113b4576040805162461bcd60e51b815260206004820152601b60248201526000805160206143a3833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b81526020600482018190526024820152600080516020614383833981519152604482015290519081900360640190fd5b6114a57f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061383892505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b815260040180806020018281038252602a8152602001806144f5602a913960400191505060405180910390fd5b6000806115487f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006133de565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611f8f565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b815260206004820152601b60248201526000805160206143a3833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a61349e565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561172f57600080fd5b505afa158015611743573d6000803e3d6000fd5b505050506040513d602081101561175957600080fd5b5051604080516020888102828101820190935288825292935061179b92909189918991829185019084908082843760009201919091525088925061395a915050565b8661183e82888860001981018181106117b057fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561180c57600080fd5b505afa158015611820573d6000803e3d6000fd5b505050506040513d602081101561183657600080fd5b505190613c5c565b101561187b5760405162461bcd60e51b815260040180806020018281038252602e815260200180614355602e913960400191505060405180910390fd5b5050505050505050565b80428110156118c9576040805162461bcd60e51b815260206004820152601b60248201526000805160206143a3833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061190357fe5b905060200201356001600160a01b03166001600160a01b03161461195c576040805162461bcd60e51b81526020600482018190526024820152600080516020614383833981519152604482015290519081900360640190fd5b61196c8585600081811061165c57fe5b6119aa85858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061395a915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611a1957600080fd5b505afa158015611a2d573d6000803e3d6000fd5b505050506040513d6020811015611a4357600080fd5b5051905086811015611a865760405162461bcd60e51b815260040180806020018281038252602e815260200180614355602e913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aec57600080fd5b505af1158015611b00573d6000803e3d6000fd5b5050505061187b84826130d8565b60608142811015611b54576040805162461bcd60e51b815260206004820152601b60248201526000805160206143a3833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b8b57fe5b905060200201356001600160a01b03166001600160a01b031614611be4576040805162461bcd60e51b81526020600482018190526024820152600080516020614383833981519152604482015290519081900360640190fd5b611c427f0000000000000000000000000000000000000000000000000000000000000000348888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506132a892505050565b91508682600184510381518110611c5557fe5b60200260200101511015611c9a5760405162461bcd60e51b815260040180806020018281038252602e815260200180614355602e913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611cd657fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d0957600080fd5b505af1158015611d1d573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d827f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110611d8f57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611ddd57600080fd5b505af1158015611df1573d6000803e3d6000fd5b505050506040513d6020811015611e0757600080fd5b5051611e0f57fe5b611e4e828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506135fb915050565b5095945050505050565b6000610dbe848484613cac565b60608142811015611eab576040805162461bcd60e51b815260206004820152601b60248201526000805160206143a3833981519152604482015290519081900360640190fd5b611f097f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061383892505050565b91508682600081518110611f1957fe5b6020026020010151111561131f5760405162461bcd60e51b815260040180806020018281038252602a8152602001806144f5602a913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613d84565b60008142811015611fd5576040805162461bcd60e51b815260206004820152601b60248201526000805160206143a3833981519152604482015290519081900360640190fd5b612004887f00000000000000000000000000000000000000000000000000000000000000008989893089612486565b90508092505061208d88858a6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561205c57600080fd5b505afa158015612070573d6000803e3d6000fd5b505050506040513d602081101561208657600080fd5b5051612f6e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156120f357600080fd5b505af1158015612107573d6000803e3d6000fd5b505050506110e884836130d8565b8042811015612159576040805162461bcd60e51b815260206004820152601b60248201526000805160206143a3833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168585600081811061219057fe5b905060200201356001600160a01b03166001600160a01b0316146121e9576040805162461bcd60e51b81526020600482018190526024820152600080516020614383833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561224957600080fd5b505af115801561225d573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122c27f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561230957600080fd5b505af115801561231d573d6000803e3d6000fd5b505050506040513d602081101561233357600080fd5b505161233b57fe5b60008686600019810181811061234d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156123a957600080fd5b505afa1580156123bd573d6000803e3d6000fd5b505050506040513d60208110156123d357600080fd5b505160408051602089810282810182019093528982529293506124159290918a918a91829185019084908082843760009201919091525089925061395a915050565b8761183e828989600019810181811061242a57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561180c57600080fd5b60008082428110156124cd576040805162461bcd60e51b815260206004820152601b60248201526000805160206143a3833981519152604482015290519081900360640190fd5b60006124fa7f00000000000000000000000000000000000000000000000000000000000000008c8c6133de565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561255557600080fd5b505af1158015612569573d6000803e3d6000fd5b505050506040513d602081101561257f57600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125cc57600080fd5b505af11580156125e0573d6000803e3d6000fd5b505050506040513d60408110156125f657600080fd5b508051602090910151909250905060006126108e8e613e2a565b509050806001600160a01b03168e6001600160a01b031614612633578183612636565b82825b90975095508a87101561267a5760405162461bcd60e51b815260040180806020018281038252602981526020018061451f6029913960400191505060405180910390fd5b898610156126b95760405162461bcd60e51b815260040180806020018281038252602981526020018061432c6029913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111207f000000000000000000000000000000000000000000000000000000000000000084846132a8565b600080600061276b7f00000000000000000000000000000000000000000000000000000000000000008e7f00000000000000000000000000000000000000000000000000000000000000006133de565b905060008761277a578c61277e565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156127f457600080fd5b505af1158015612808573d6000803e3d6000fd5b5050505061281a8e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b60008060008342811015612878576040805162461bcd60e51b815260206004820152601b60248201526000805160206143a3833981519152604482015290519081900360640190fd5b6128868c8c8c8c8c8c613ef2565b909450925060006128b87f00000000000000000000000000000000000000000000000000000000000000008e8e6133de565b90506128c68d33838861349e565b6128d28c33838761349e565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b15801561292157600080fd5b505af1158015612935573d6000803e3d6000fd5b505050506040513d602081101561294b57600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129ab576040805162461bcd60e51b815260206004820152601b60248201526000805160206143a3833981519152604482015290519081900360640190fd5b6129d98a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613ef2565b90945092506000612a2b7f00000000000000000000000000000000000000000000000000000000000000008c7f00000000000000000000000000000000000000000000000000000000000000006133de565b9050612a398b33838861349e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a9457600080fd5b505af1158015612aa8573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b2457600080fd5b505af1158015612b38573d6000803e3d6000fd5b505050506040513d6020811015612b4e57600080fd5b5051612b5657fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b158015612ba557600080fd5b505af1158015612bb9573d6000803e3d6000fd5b505050506040513d6020811015612bcf57600080fd5b5051925034841015612be757612be7338534036130d8565b505096509650969350505050565b60608142811015612c3b576040805162461bcd60e51b815260206004820152601b60248201526000805160206143a3833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612c7257fe5b905060200201356001600160a01b03166001600160a01b031614612ccb576040805162461bcd60e51b81526020600482018190526024820152600080516020614383833981519152604482015290519081900360640190fd5b612d297f00000000000000000000000000000000000000000000000000000000000000008888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061383892505050565b91503482600081518110612d3957fe5b60200260200101511115612d7e5760405162461bcd60e51b815260040180806020018281038252602a8152602001806144f5602a913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612dba57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612ded57600080fd5b505af1158015612e01573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612e667f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110612e7357fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612ec157600080fd5b505af1158015612ed5573d6000803e3d6000fd5b505050506040513d6020811015612eeb57600080fd5b5051612ef357fe5b612f32828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506135fb915050565b81600081518110612f3f57fe5b6020026020010151341115611e4e57611e4e3383600081518110612f5f57fe5b602002602001015134036130d8565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310612feb5780518252601f199092019160209182019101612fcc565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461304d576040519150601f19603f3d011682016040523d82523d6000602084013e613052565b606091505b5091509150818015613080575080511580613080575080806020019051602081101561307d57600080fd5b50515b6130d1576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106131245780518252601f199092019160209182019101613105565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613186576040519150601f19603f3d011682016040523d82523d6000602084013e61318b565b606091505b50509050806131cb5760405162461bcd60e51b81526004018080602001828103825260238152602001806144806023913960400191505060405180910390fd5b505050565b60008084116132105760405162461bcd60e51b815260040180806020018281038252602e8152602001806144a3602e913960400191505060405180910390fd5b6000831180156132205750600082115b61325b5760405162461bcd60e51b815260040180806020018281038252602b81526020018061440c602b913960400191505060405180910390fd5b6000613269856126f7614183565b905060006132778285614183565b905060006132918361328b88612710614183565b906141e6565b905080828161329c57fe5b04979650505050505050565b60606002825110156132eb5760405162461bcd60e51b81526004018080602001828103825260218152602001806143eb6021913960400191505060405180910390fd5b815167ffffffffffffffff8111801561330357600080fd5b5060405190808252806020026020018201604052801561332d578160200160208202803683370190505b509050828160008151811061333e57fe5b60200260200101818152505060005b60018351038110156133d6576000806133908786858151811061336c57fe5b602002602001015187866001018151811061338357fe5b6020026020010151614235565b915091506133b28484815181106133a357fe5b602002602001015183836131d0565b8484600101815181106133c157fe5b6020908102919091010152505060010161334d565b509392505050565b60008060006133ed8585613e2a565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f48a6ca3d52d0d0a6c53a83cc3c8688dd46ea4cb786b169ee959b95ad30f61643609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135235780518252601f199092019160209182019101613504565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613585576040519150601f19603f3d011682016040523d82523d6000602084013e61358a565b606091505b50915091508180156135b85750805115806135b857508080602001905160208110156135b557600080fd5b50515b6135f35760405162461bcd60e51b81526004018080602001828103825260248152602001806144d16024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138325760008084838151811061361957fe5b602002602001015185846001018151811061363057fe5b60200260200101519150915060006136488383613e2a565b509050600087856001018151811061365c57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461368a5782600061368e565b6000835b91509150600060028a510388106136a557886136e6565b6136e67f0000000000000000000000000000000000000000000000000000000000000000878c8b600201815181106136d957fe5b60200260200101516133de565b90506137137f000000000000000000000000000000000000000000000000000000000000000088886133de565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613750576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156137b85781810151838201526020016137a0565b50505050905090810190601f1680156137e55780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561380757600080fd5b505af115801561381b573d6000803e3d6000fd5b5050600190990198506135fe975050505050505050565b50505050565b606060028251101561387b5760405162461bcd60e51b81526004018080602001828103825260218152602001806143eb6021913960400191505060405180910390fd5b815167ffffffffffffffff8111801561389357600080fd5b506040519080825280602002602001820160405280156138bd578160200160208202803683370190505b50905082816001835103815181106138d157fe5b60209081029190910101528151600019015b80156133d657600080613913878660018603815181106138ff57fe5b602002602001015187868151811061338357fe5b9150915061393584848151811061392657fe5b60200260200101518383613cac565b84600185038151811061394457fe5b60209081029190910101525050600019016138e3565b60005b60018351038110156131cb5760008084838151811061397857fe5b602002602001015185846001018151811061398f57fe5b60200260200101519150915060006139a78383613e2a565b50905060006139d77f000000000000000000000000000000000000000000000000000000000000000085856133de565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613a1857600080fd5b505afa158015613a2c573d6000803e3d6000fd5b505050506040513d6060811015613a4257600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613a78578284613a7b565b83835b91509150613ad0828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561180c57600080fd5b9550613add8683836131d0565b945050505050600080856001600160a01b0316886001600160a01b031614613b0757826000613b0b565b6000835b91509150600060028c51038a10613b22578a613b56565b613b567f0000000000000000000000000000000000000000000000000000000000000000898e8d600201815181106136d957fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613be0578181015183820152602001613bc8565b50505050905090810190601f168015613c0d5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613c2f57600080fd5b505af1158015613c43573d6000803e3d6000fd5b50506001909b019a5061395d9950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613cec5760405162461bcd60e51b815260040180806020018281038252602f8152602001806142fd602f913960400191505060405180910390fd5b600083118015613cfc5750600082115b613d375760405162461bcd60e51b815260040180806020018281038252602b81526020018061440c602b913960400191505060405180910390fd5b6000613d4f612710613d498688614183565b90614183565b90506000613d636126f7613d498689613c5c565b9050613d7a6001828481613d7357fe5b04906141e6565b9695505050505050565b6000808411613dc45760405162461bcd60e51b81526004018080602001828103825260288152602001806143c36028913960400191505060405180910390fd5b600083118015613dd45750600082115b613e0f5760405162461bcd60e51b815260040180806020018281038252602b81526020018061440c602b913960400191505060405180910390fd5b82613e1a8584614183565b81613e2157fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613e7e5760405162461bcd60e51b81526004018080602001828103825260288152602001806144586028913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613e9e578284613ea1565b83835b90925090506001600160a01b038216613eeb5760405162461bcd60e51b81526004018080602001828103825260218152602001806144376021913960400191505060405180910390fd5b9250929050565b60008060006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e6a439058a8a6040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b158015613f7e57600080fd5b505afa158015613f92573d6000803e3d6000fd5b505050506040513d6020811015613fa857600080fd5b50516001600160a01b03161415614066577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c9c6539689896040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050602060405180830381600087803b15801561403957600080fd5b505af115801561404d573d6000803e3d6000fd5b505050506040513d602081101561406357600080fd5b50505b6000806140947f00000000000000000000000000000000000000000000000000000000000000008b8b614235565b915091508160001480156140a6575080155b156140b657879350869250614176565b60006140c3898484613d84565b9050878111614116578581101561410b5760405162461bcd60e51b815260040180806020018281038252602981526020018061432c6029913960400191505060405180910390fd5b889450925082614174565b6000614123898486613d84565b90508981111561412f57fe5b8781101561416e5760405162461bcd60e51b815260040180806020018281038252602981526020018061451f6029913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b600081158061419e5750508082028282828161419b57fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006142448585613e2a565b5090506000806142558888886133de565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561428d57600080fd5b505afa1580156142a1573d6000803e3d6000fd5b505050506040513d60608110156142b757600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146142ea5780826142ed565b81815b9099909850965050505050505056fe5374656c6c615377617056324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545374656c6c61537761705632526f757465723a20494e53554646494349454e545f425f414d4f554e545374656c6c61537761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545374656c6c61537761705632526f757465723a20494e56414c49445f504154485374656c6c61537761705632526f757465723a204558504952454400000000005374656c6c615377617056324c6962726172793a20494e53554646494349454e545f414d4f554e545374656c6c615377617056324c6962726172793a20494e56414c49445f504154485374656c6c615377617056324c6962726172793a20494e53554646494349454e545f4c49515549444954595374656c6c615377617056324c6962726172793a205a45524f5f414444524553535374656c6c615377617056324c6962726172793a204944454e544943414c5f4144445245535345535472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45445374656c6c615377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c45445374656c6c61537761705632526f757465723a204558434553534956455f494e5055545f414d4f554e545374656c6c61537761705632526f757465723a20494e53554646494349454e545f415f414d4f554e54a2646970667358221220dfc952936bd903dfc1c444a27ff6f5550a717473b04af57aa10ed5a8fc7636ca64736f6c634300060c003300000000000000000000000068a384d826d3678f78bb9fb1533c7e9577dacc0e000000000000000000000000acc15dc74880c9944775448304b263d191c6077f

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

16471:18788:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16972:10;-1:-1:-1;;;;;16986:4:0;16972:18;;16965:26;;;;16471:18788;;;;;21119:673;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21119:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;34191:265;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34191:265:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;28370:862;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28370:862:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28370:862:0;;;;;;;;;;;;-1:-1:-1;28370:862:0;-1:-1:-1;;;;;;28370:862:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35000:256;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;35000:256:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;35000:256:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35000:256:0;;-1:-1:-1;35000:256:0;;-1:-1:-1;;;;;35000:256:0:i;21798:683::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21798:683:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25545:637::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25545:637:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25545:637:0;;;;;;;;;;;;-1:-1:-1;25545:637:0;-1:-1:-1;;;;;;25545:637:0;;;;;;;;:::i;27524:840::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27524:840:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27524:840:0;;;;;;;;;;;;-1:-1:-1;27524:840:0;-1:-1:-1;;;;;;27524:840:0;;;;;;;;:::i;23957:724::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23957:724:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31455:740::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31455:740:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31455:740:0;;;;;;;;;;;;-1:-1:-1;31455:740:0;-1:-1:-1;;;;;;31455:740:0;;;;;;;;:::i;33086:862::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;33086:862:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;33086:862:0;;;;;;;;;;;;-1:-1:-1;33086:862:0;-1:-1:-1;;;;;;33086:862:0;;;;;;;;:::i;26809:709::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26809:709:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26809:709:0;;;;;;;;;;;;-1:-1:-1;26809:709:0;-1:-1:-1;;;;;;26809:709:0;;;;;;;;:::i;34464:264::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34464:264:0;;;;;;;;;;;;:::i;26188:615::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26188:615:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26188:615:0;;;;;;;;;;;;-1:-1:-1;26188:615:0;-1:-1:-1;;;;;;26188:615:0;;;;;;;;:::i;16623:38::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;16623:38:0;;;;;;;;;;;;;;33992:191;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33992:191:0;;;;;;;;;;;;:::i;23241:710::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23241:710:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32201:879::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32201:879:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32201:879:0;;;;;;;;;;;;-1:-1:-1;32201:879:0;-1:-1:-1;;;;;;32201:879:0;;;;;;;;:::i;20230:883::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20230:883:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16575:41::-;;;;;;;;;;;;;:::i;34736:256::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34736:256:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34736:256:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34736:256:0;;-1:-1:-1;34736:256:0;;-1:-1:-1;;;;;34736:256:0:i;22487:675::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22487:675:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18457:744::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18457:744:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;19207:980;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19207:980:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29238:822::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29238:822:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29238:822:0;;;;;;;;;;;;-1:-1:-1;29238:822:0;-1:-1:-1;;;;;;29238:822:0;;;;;;;;:::i;21119:673::-;21356:16;21374:14;21337:8;16732:15;16720:8;:27;;16712:67;;;;;-1:-1:-1;;;16712:67:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:67:0;;;;;;;;;;;;;;;21428:196:::1;21458:5;21478:4;21497:9;21521:14;21550:12;21585:4;21605:8;21428:15;:196::i;:::-;21401:223:::0;;-1:-1:-1;21401:223:0;-1:-1:-1;21635:51:0::1;21663:5:::0;21670:2;21401:223;21635:27:::1;:51::i;:::-;21703:4;-1:-1:-1::0;;;;;21697:20:0::1;;21718:9;21697:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21739:45;21770:2;21774:9;21739:30;:45::i;:::-;21119:673:::0;;;;;;;;;;:::o;34191:265::-;34344:14;34383:65;34416:8;34426:9;34437:10;34383:32;:65::i;:::-;34376:72;34191:265;-1:-1:-1;;;;34191:265:0:o;28370:862::-;28584:21;28556:8;16732:15;16720:8;:27;;16712:67;;;;;-1:-1:-1;;;16712:67:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28656:4:0::1;28631:29;:4:::0;;-1:-1:-1;;28636:15:0;;28631:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28631:21:0::1;-1:-1:-1::0;;;;;28631:29:0::1;;28623:74;;;::::0;;-1:-1:-1;;;28623:74:0;;::::1;;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;;;;;;;28623:74:0;;;;;;;;;;;;;::::1;;28718:58;28752:7;28761:8;28771:4;;28718:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;28718:33:0::1;::::0;-1:-1:-1;;;28718:58:0:i:1;:::-;28708:68;;28826:12;28795:7;28820:1;28803:7;:14;:18;28795:27;;;;;;;;;;;;;;:43;;28787:102;;;;-1:-1:-1::0;;;28787:102:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28900:144;28946:4;;28951:1;28946:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28946:7:0::1;28955:10;28967:54;28995:7;29004:4;;29009:1;29004:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29004:7:0::1;29013:4;;29018:1;29013:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29013:7:0::1;28967:27;:54::i;:::-;29023:7;29031:1;29023:10;;;;;;;;;;;;;;28900:31;:144::i;:::-;29055:35;29061:7;29070:4;;29055:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29084:4:0::1;::::0;-1:-1:-1;29055:5:0::1;::::0;-1:-1:-1;;29055:35:0:i:1;:::-;29107:4;-1:-1:-1::0;;;;;29101:20:0::1;;29122:7;29147:1;29130:7;:14;:18;29122:27;;;;;;;;;;;;;;29101:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29161:63;29192:2;29196:7;29221:1;29204:7;:14;:18;29196:27;;;;;;;;;;;;;;29161:30;:63::i;:::-;28370:862:::0;;;;;;;;;:::o;35000:256::-;35144:21;35190:58;35223:7;35232:9;35243:4;35190:32;:58::i;:::-;35183:65;;35000:256;;;;;:::o;21798:683::-;22104:12;22118;22143;22158:52;22186:7;22195:6;22203;22158:27;:52::i;:::-;22143:67;;22221:10;22234;:33;;22258:9;22234:33;;;-1:-1:-1;;22234:33:0;22278:83;;;-1:-1:-1;;;22278:83:0;;22309:10;22278:83;;;;22329:4;22278:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22221:46;;-1:-1:-1;;;;;;22278:30:0;;;;;:83;;;;;-1:-1:-1;;22278:83:0;;;;;;;;-1:-1:-1;22278:30:0;:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22393:80;22409:6;22417;22425:9;22436:10;22448;22460:2;22464:8;22393:15;:80::i;:::-;22372:101;;;;;;;;21798:683;;;;;;;;;;;;;;;;:::o;25545:637::-;25769:21;25750:8;16732:15;16720:8;:27;;16712:67;;;;;-1:-1:-1;;;16712:67:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:67:0;;;;;;;;;;;;;;;25813:58:::1;25847:7;25856:8;25866:4;;25813:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;25813:33:0::1;::::0;-1:-1:-1;;;25813:58:0:i:1;:::-;25803:68;;25921:12;25890:7;25915:1;25898:7;:14;:18;25890:27;;;;;;;;;;;;;;:43;;25882:102;;;;-1:-1:-1::0;;;25882:102:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25995:144;26041:4;;26046:1;26041:7;;;;;;25995:144;26150:24;26156:7;26165:4;;26150:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;26171:2:0;;-1:-1:-1;26150:5:0::1;::::0;-1:-1:-1;;26150:24:0:i:1;27524:840::-:0;27738:21;27710:8;16732:15;16720:8;:27;;16712:67;;;;;-1:-1:-1;;;16712:67:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27810:4:0::1;27785:29;:4:::0;;-1:-1:-1;;27790:15:0;;27785:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27785:21:0::1;-1:-1:-1::0;;;;;27785:29:0::1;;27777:74;;;::::0;;-1:-1:-1;;;27777:74:0;;::::1;;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;;;;;;;27777:74:0;;;;;;;;;;;;;::::1;;27872:58;27905:7;27914:9;27925:4;;27872:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27872:32:0::1;::::0;-1:-1:-1;;;27872:58:0:i:1;:::-;27862:68;;27963:11;27949:7;27957:1;27949:10;;;;;;;;;;;;;;:25;;27941:80;;;;-1:-1:-1::0;;;27941:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23957:724:::0;24275:14;24302:12;24317:49;24345:7;24354:5;24361:4;24317:27;:49::i;:::-;24302:64;;24377:10;24390;:33;;24414:9;24390:33;;;-1:-1:-1;;24390:33:0;24434:83;;;-1:-1:-1;;;24434:83:0;;24465:10;24434:83;;;;24485:4;24434:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24377:46;;-1:-1:-1;;;;;;24434:30:0;;;;;:83;;;;;-1:-1:-1;;24434:83:0;;;;;;;;-1:-1:-1;24434:30:0;:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24540:133;24602:5;24609:9;24620:14;24636:12;24650:2;24654:8;24540:47;:133::i;:::-;24528:145;23957:724;-1:-1:-1;;;;;;;;;;;;;23957:724:0:o;31455:740::-;31689:8;16732:15;16720:8;:27;;16712:67;;;;;-1:-1:-1;;;16712:67:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:67:0;;;;;;;;;;;;;;;31710:142:::1;31756:4;;31761:1;31756:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31756:7:0::1;31765:10;31777:54;31805:7;31814:4;;31819:1;31814:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31814:7:0::1;31823:4;;31828:1;31823:7;;;;;;31777:54;31833:8;31710:31;:142::i;:::-;31863:18;31901:4:::0;;-1:-1:-1;;31906:15:0;;31901:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31901:21:0::1;-1:-1:-1::0;;;;;31884:49:0::1;;31934:2;31884:53;;;;;;;;;;;;;-1:-1:-1::0;;;;;31884:53:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31884:53:0;31948:44:::1;::::0;;31884:53:::1;31948:44:::0;;::::1;::::0;;;;;;;;;;;31884:53;;-1:-1:-1;31948:44:0::1;::::0;;;31983:4;;;;;;31948:44;::::1;::::0;31983:4;;31948:44;31983:4;31948:44;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;31989:2:0;;-1:-1:-1;31948:34:0::1;::::0;-1:-1:-1;;31948:44:0:i:1;:::-;32101:12:::0;32025:72:::1;32083:13:::0;32042:4;;-1:-1:-1;;32047:15:0;;32042:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32042:21:0::1;-1:-1:-1::0;;;;;32025:49:0::1;;32075:2;32025:53;;;;;;;;;;;;;-1:-1:-1::0;;;;;32025:53:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32025:53:0;;:57:::1;:72::i;:::-;:88;;32003:184;;;;-1:-1:-1::0;;;32003:184:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16790:1;31455:740:::0;;;;;;;:::o;33086:862::-;33353:8;16732:15;16720:8;:27;;16712:67;;;;;-1:-1:-1;;;16712:67:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33412:4:0::1;33387:29;:4:::0;;-1:-1:-1;;33392:15:0;;33387:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33387:21:0::1;-1:-1:-1::0;;;;;33387:29:0::1;;33379:74;;;::::0;;-1:-1:-1;;;33379:74:0;;::::1;;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;;;;;;;33379:74:0;;;;;;;;;;;;;::::1;;33464:142;33510:4;;33515:1;33510:7;;;;;;33464:142;33617:55;33652:4;;33617:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;33666:4:0::1;::::0;-1:-1:-1;33617:34:0::1;::::0;-1:-1:-1;;33617:55:0:i:1;:::-;33683:14;33717:4;-1:-1:-1::0;;;;;33700:32:0::1;;33741:4;33700:47;;;;;;;;;;;;;-1:-1:-1::0;;;;;33700:47:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;33700:47:0;;-1:-1:-1;33766:25:0;;::::1;;33758:84;;;;-1:-1:-1::0;;;33758:84:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33859:4;-1:-1:-1::0;;;;;33853:20:0::1;;33874:9;33853:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33895:45;33926:2;33930:9;33895:30;:45::i;26809:709::-:0;27025:21;26997:8;16732:15;16720:8;:27;;16712:67;;;;;-1:-1:-1;;;16712:67:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:67:0;;;;;;;;;;;;;;;27083:4:::1;-1:-1:-1::0;;;;;27072:15:0::1;:4;;27077:1;27072:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27072:7:0::1;-1:-1:-1::0;;;;;27072:15:0::1;;27064:60;;;::::0;;-1:-1:-1;;;27064:60:0;;::::1;;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;;;;;;;27064:60:0;;;;;;;;;;;;;::::1;;27145:59;27179:7;27188:9;27199:4;;27145:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27145:33:0::1;::::0;-1:-1:-1;;;27145:59:0:i:1;:::-;27135:69;;27254:12;27223:7;27248:1;27231:7;:14;:18;27223:27;;;;;;;;;;;;;;:43;;27215:102;;;;-1:-1:-1::0;;;27215:102:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27334:4;-1:-1:-1::0;;;;;27328:19:0::1;;27355:7;27363:1;27355:10;;;;;;;;;;;;;;27328:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;27392:4;-1:-1:-1::0;;;;;27386:20:0::1;;27407:54;27435:7;27444:4;;27449:1;27444:7;;;;;;27407:54;27463:7;27471:1;27463:10;;;;;;;;;;;;;;27386:88;;;;;;;;;;;;;-1:-1:-1::0;;;;;27386:88:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;27386:88:0;27379:96:::1;;;;27486:24;27492:7;27501:4;;27486:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27507:2:0;;-1:-1:-1;27486:5:0::1;::::0;-1:-1:-1;;27486:24:0:i:1;:::-;26809:709:::0;;;;;;;;:::o;34464:264::-;34617:13;34655:65;34687:9;34698;34709:10;34655:31;:65::i;26188:615::-;26412:21;26393:8;16732:15;16720:8;:27;;16712:67;;;;;-1:-1:-1;;;16712:67:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:67:0;;;;;;;;;;;;;;;26456:58:::1;26489:7;26498:9;26509:4;;26456:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;26456:32:0::1;::::0;-1:-1:-1;;;26456:58:0:i:1;:::-;26446:68;;26547:11;26533:7;26541:1;26533:10;;;;;;;;;;;;;;:25;;26525:80;;;;-1:-1:-1::0;;;26525:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16623:38:::0;;;:::o;33992:191::-;34089:12;34121:54;34147:7;34156:8;34166;34121:25;:54::i;23241:710::-;23507:14;23488:8;16732:15;16720:8;:27;;16712:67;;;;;-1:-1:-1;;;16712:67:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:67:0;;;;;;;;;;;;;;;23550:196:::1;23580:5;23600:4;23619:9;23643:14;23672:12;23707:4;23727:8;23550:15;:196::i;:::-;23534:212;;;;;;23757:88;23785:5;23792:2;23813:5;-1:-1:-1::0;;;;;23796:33:0::1;;23838:4;23796:48;;;;;;;;;;;;;-1:-1:-1::0;;;;;23796:48:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;23796:48:0;23757:27:::1;:88::i;:::-;23862:4;-1:-1:-1::0;;;;;23856:20:0::1;;23877:9;23856:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23898:45;23929:2;23933:9;23898:30;:45::i;32201:879::-:0;32461:8;16732:15;16720:8;:27;;16712:67;;;;;-1:-1:-1;;;16712:67:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:67:0;;;;;;;;;;;;;;;32506:4:::1;-1:-1:-1::0;;;;;32495:15:0::1;:4;;32500:1;32495:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32495:7:0::1;-1:-1:-1::0;;;;;32495:15:0::1;;32487:60;;;::::0;;-1:-1:-1;;;32487:60:0;;::::1;;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;;;;;;;32487:60:0;;;;;;;;;;;;;::::1;;32558:13;32574:9;32558:25;;32600:4;-1:-1:-1::0;;;;;32594:19:0::1;;32621:8;32594:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;32656:4;-1:-1:-1::0;;;;;32650:20:0::1;;32671:54;32699:7;32708:4;;32713:1;32708:7;;;;;;32671:54;32727:8;32650:86;;;;;;;;;;;;;-1:-1:-1::0;;;;;32650:86:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32650:86:0;32643:94:::1;;;;32748:18;32786:4:::0;;-1:-1:-1;;32791:15:0;;32786:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32786:21:0::1;-1:-1:-1::0;;;;;32769:49:0::1;;32819:2;32769:53;;;;;;;;;;;;;-1:-1:-1::0;;;;;32769:53:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32769:53:0;32833:44:::1;::::0;;32769:53:::1;32833:44:::0;;::::1;::::0;;;;;;;;;;;32769:53;;-1:-1:-1;32833:44:0::1;::::0;;;32868:4;;;;;;32833:44;::::1;::::0;32868:4;;32833:44;32868:4;32833:44;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;32874:2:0;;-1:-1:-1;32833:34:0::1;::::0;-1:-1:-1;;32833:44:0:i:1;:::-;32986:12:::0;32910:72:::1;32968:13:::0;32927:4;;-1:-1:-1;;32932:15:0;;32927:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32927:21:0::1;-1:-1:-1::0;;;;;32910:49:0::1;;32960:2;32910:53;;;;;;;;;;;;;-1:-1:-1::0;;;;;32910:53:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;20230:883:::0;20484:12;20498;20465:8;16732:15;16720:8;:27;;16712:67;;;;;-1:-1:-1;;;16712:67:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:67:0;;;;;;;;;;;;;;;20523:12:::1;20538:52;20566:7;20575:6;20583;20538:27;:52::i;:::-;20601:65;::::0;;-1:-1:-1;;;20601:65:0;;20638:10:::1;20601:65;::::0;::::1;::::0;-1:-1:-1;;;;;20601:36:0;::::1;:65:::0;;;;;;;;;;;;;;20523:67;;-1:-1:-1;20601:36:0;;::::1;::::0;:65;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20601:36:0;:65;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;20734:32:0::1;::::0;;-1:-1:-1;;;20734:32:0;;-1:-1:-1;;;;;20734:32:0;;::::1;;::::0;::::1;::::0;;;20704:12:::1;::::0;;;20734:28;;::::1;::::0;::::1;::::0;:32;;;;;;;;;;;20704:12;20734:28;:32;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;20734:32:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20734:32:0;-1:-1:-1;20778:14:0::1;20797:46;20828:6:::0;20836;20797:30:::1;:46::i;:::-;20777:66;;;20885:6;-1:-1:-1::0;;;;;20875:16:0::1;:6;-1:-1:-1::0;;;;;20875:16:0::1;;:58;;20916:7;20925;20875:58;;;20895:7;20904;20875:58;20854:79:::0;;-1:-1:-1;20854:79:0;-1:-1:-1;20952:21:0;;::::1;;20944:75;;;;-1:-1:-1::0;;;20944:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21049:10;21038:7;:21;;21030:75;;;;-1:-1:-1::0;;;21030:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16790:1;;;;20230:883:::0;;;;;;;;;;;:::o;16575:41::-;;;:::o;34736:256::-;34880:21;34926:58;34960:7;34969:8;34979:4;34926:33;:58::i;22487:675::-;22776:16;22794:14;22821:12;22836:49;22864:7;22873:5;22880:4;22836:27;:49::i;:::-;22821:64;;22896:10;22909;:33;;22933:9;22909:33;;;-1:-1:-1;;22909:33:0;22953:83;;;-1:-1:-1;;;22953:83:0;;22984:10;22953:83;;;;23004:4;22953:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22896:46;;-1:-1:-1;;;;;;22953:30:0;;;;;:83;;;;;-1:-1:-1;;22953:83:0;;;;;;;;-1:-1:-1;22953:30:0;:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23074:80;23093:5;23100:9;23111:14;23127:12;23141:2;23145:8;23074:18;:80::i;:::-;23047:107;;;;-1:-1:-1;22487:675:0;-1:-1:-1;;;;;;;;;;;;;22487:675:0:o;18457:744::-;18745:12;18759;18773:14;18726:8;16732:15;16720:8;:27;;16712:67;;;;;-1:-1:-1;;;16712:67:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:67:0;;;;;;;;;;;;;;;18821:85:::1;18835:6;18843;18851:14;18867;18883:10;18895;18821:13;:85::i;:::-;18800:106:::0;;-1:-1:-1;18800:106:0;-1:-1:-1;18917:12:0::1;18932:52;18960:7;18969:6:::0;18977;18932:27:::1;:52::i;:::-;18917:67;;18995:66;19027:6;19035:10;19047:4;19053:7;18995:31;:66::i;:::-;19072;19104:6;19112:10;19124:4;19130:7;19072:31;:66::i;:::-;19179:4;-1:-1:-1::0;;;;;19161:28:0::1;;19190:2;19161:32;;;;;;;;;;;;;-1:-1:-1::0;;;;;19161:32:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19161:32:0;18457:744;;;;-1:-1:-1;19161:32:0;;-1:-1:-1;18457:744:0;;-1:-1:-1;;;;;;;;;18457:744:0:o;19207:980::-;19460:16;19478:14;19494;19441:8;16732:15;16720:8;:27;;16712:67;;;;;-1:-1:-1;;;16712:67:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:67:0;;;;;;;;;;;;;;;19548:176:::1;19576:5;19596:4;19615:18;19648:9;19672:14;19701:12;19548:13;:176::i;:::-;19521:203:::0;;-1:-1:-1;19521:203:0;-1:-1:-1;19735:12:0::1;19750:49;19778:7;19787:5:::0;19794:4:::1;19750:27;:49::i;:::-;19735:64;;19810:69;19842:5;19849:10;19861:4;19867:11;19810:31;:69::i;:::-;19896:4;-1:-1:-1::0;;;;;19890:19:0::1;;19917:9;19890:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;19953:4;-1:-1:-1::0;;;;;19947:20:0::1;;19968:4;19974:9;19947:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;19947:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19947:37:0;19940:45:::1;;;;20026:4;-1:-1:-1::0;;;;;20008:28:0::1;;20037:2;20008:32;;;;;;;;;;;;;-1:-1:-1::0;;;;;20008:32:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;20008:32:0;;-1:-1:-1;20091:9:0::1;:21:::0;-1:-1:-1;20087:92:0::1;;;20114:65;20145:10;20169:9;20157;:21;20114:30;:65::i;:::-;16790:1;19207:980:::0;;;;;;;;;;;:::o;29238:822::-;29451:21;29423:8;16732:15;16720:8;:27;;16712:67;;;;;-1:-1:-1;;;16712:67:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16712:67:0;;;;;;;;;;;;;;;29509:4:::1;-1:-1:-1::0;;;;;29498:15:0::1;:4;;29503:1;29498:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29498:7:0::1;-1:-1:-1::0;;;;;29498:15:0::1;;29490:60;;;::::0;;-1:-1:-1;;;29490:60:0;;::::1;;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;;;;;;;29490:60:0;;;;;;;;;;;;;::::1;;29571:58;29604:7;29613:9;29624:4;;29571:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29571:32:0::1;::::0;-1:-1:-1;;;29571:58:0:i:1;:::-;29561:68;;29662:9;29648:7;29656:1;29648:10;;;;;;;;;;;;;;:23;;29640:78;;;;-1:-1:-1::0;;;29640:78:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29735:4;-1:-1:-1::0;;;;;29729:19:0::1;;29756:7;29764:1;29756:10;;;;;;;;;;;;;;29729:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;29793:4;-1:-1:-1::0;;;;;29787:20:0::1;;29808:54;29836:7;29845:4;;29850:1;29845:7;;;;;;29808:54;29864:7;29872:1;29864:10;;;;;;;;;;;;;;29787:88;;;;;;;;;;;;;-1:-1:-1::0;;;;;29787:88:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;29787:88:0;29780:96:::1;;;;29887:24;29893:7;29902:4;;29887:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29908:2:0;;-1:-1:-1;29887:5:0::1;::::0;-1:-1:-1;;29887:24:0:i:1;:::-;29974:7;29982:1;29974:10;;;;;;;;;;;;;;29962:9;:22;29958:94;;;29986:66;30017:10;30041:7;30049:1;30041:10;;;;;;;;;;;;;;30029:9;:22;29986:30;:66::i;8317:361::-:0;8512:45;;;-1:-1:-1;;;;;8512:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8512:45:0;-1:-1:-1;;;8512:45:0;;;8501:57;;;;8466:12;;8480:17;;8501:10;;;;8512:45;8501:57;;;8512:45;8501:57;;8512:45;8501:57;;;;;;;;;;-1:-1:-1;;8501:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8465:93;;;;8577:7;:57;;;;-1:-1:-1;8589:11:0;;:16;;:44;;;8620:4;8609:24;;;;;;;;;;;;;;;-1:-1:-1;8609:24:0;8589:44;8569:101;;;;;-1:-1:-1;;;8569:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8317:361;;;;;:::o;9096:195::-;9204:12;;;9166;9204;;;;;;;;;-1:-1:-1;;;;;9183:7:0;;;9197:5;;9183:34;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9183:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9165:52;;;9236:7;9228:55;;;;-1:-1:-1;;;9228:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9096:195;;;:::o;5376:525::-;5469:14;5515:1;5504:8;:12;5496:71;;;;-1:-1:-1;;;5496:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5598:1;5586:9;:13;:31;;;;;5616:1;5603:10;:14;5586:31;5578:87;;;;-1:-1:-1;;;5578:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5676:20;5699:18;:8;5712:4;5699:12;:18::i;:::-;5676:41;-1:-1:-1;5728:14:0;5745:31;5676:41;5765:10;5745:19;:31::i;:::-;5728:48;-1:-1:-1;5787:16:0;5806:41;5831:15;5806:20;:9;5820:5;5806:13;:20::i;:::-;:24;;:41::i;:::-;5787:60;;5882:11;5870:9;:23;;;;;;;5376:525;-1:-1:-1;;;;;;;5376:525:0:o;6584:514::-;6685:21;6742:1;6727:4;:11;:16;;6719:62;;;;-1:-1:-1;;;6719:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6813:4;:11;6802:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6802:23:0;;6792:33;;6849:8;6836:7;6844:1;6836:10;;;;;;;;;;;;;:21;;;;;6873:6;6868:223;6899:1;6885:4;:11;:15;6881:1;:19;6868:223;;;6923:14;6939:15;6958:42;6970:7;6979:4;6984:1;6979:7;;;;;;;;;;;;;;6988:4;6993:1;6997;6993:5;6988:11;;;;;;;;;;;;;;6958;:42::i;:::-;6922:78;;;;7032:47;7045:7;7053:1;7045:10;;;;;;;;;;;;;;7057:9;7068:10;7032:12;:47::i;:::-;7015:7;7023:1;7027;7023:5;7015:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;6902:3:0;;6868:223;;;;6584:514;;;;;:::o;3884:478::-;3973:12;3999:14;4015;4033:26;4044:6;4052;4033:10;:26::i;:::-;4197:32;;;-1:-1:-1;;4197:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4187:43;;;;;;-1:-1:-1;;;;;;4100:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4090:262;;;;;;;;;3884:478;-1:-1:-1;;;;;3884:478:0:o;8686:402::-;8911:51;;;-1:-1:-1;;;;;8911:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8911:51:0;-1:-1:-1;;;8911:51:0;;;8900:63;;;;8865:12;;8879:17;;8900:10;;;;8911:51;8900:63;;;8911:51;8900:63;;8911:51;8900:63;;;;;;;;;;-1:-1:-1;;8900:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8864:99;;;;8982:7;:57;;;;-1:-1:-1;8994:11:0;;:16;;:44;;;9025:4;9014:24;;;;;;;;;;;;;;;-1:-1:-1;9014:24:0;8994:44;8974:106;;;;-1:-1:-1;;;8974:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8686:402;;;;;;:::o;24792:747::-;24899:6;24894:638;24925:1;24911:4;:11;:15;24907:1;:19;24894:638;;;24949:13;24964:14;24983:4;24988:1;24983:7;;;;;;;;;;;;;;24992:4;24997:1;25001;24997:5;24992:11;;;;;;;;;;;;;;24948:56;;;;25020:14;25039:45;25070:5;25077:6;25039:30;:45::i;:::-;25019:65;;;25099:14;25116:7;25124:1;25128;25124:5;25116:14;;;;;;;;;;;;;;25099:31;;25146:15;25163;25191:6;-1:-1:-1;;;;;25182:15:0;:5;-1:-1:-1;;;;;25182:15:0;;:61;;25224:9;25240:1;25182:61;;;25206:1;25210:9;25182:61;25145:98;;;;25258:10;25289:1;25275:4;:11;:15;25271:1;:19;:85;;25353:3;25271:85;;;25293:57;25321:7;25330:6;25338:4;25343:1;25347;25343:5;25338:11;;;;;;;;;;;;;;25293:27;:57::i;:::-;25258:98;;25389:51;25417:7;25426:5;25433:6;25389:27;:51::i;:::-;-1:-1:-1;;;;;25371:75:0;;25465:10;25477;25489:2;25503:1;25493:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25493:12:0;;25371:149;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25371:149:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24928:3:0;;;;;-1:-1:-1;24894:638:0;;-1:-1:-1;;;;;;;;24894:638:0;;;24792:747;;;:::o;7179:535::-;7280:21;7337:1;7322:4;:11;:16;;7314:62;;;;-1:-1:-1;;;7314:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7408:4;:11;7397:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7397:23:0;;7387:33;;7461:9;7431:7;7456:1;7439:7;:14;:18;7431:27;;;;;;;;;;;;;;;;;:39;7495:11;;-1:-1:-1;;7495:15:0;7481:226;7512:5;;7481:226;;7540:14;7556:15;7575:42;7587:7;7596:4;7605:1;7601;:5;7596:11;;;;;;;;;;;;;;7609:4;7614:1;7609:7;;;;;;;7575:42;7539:78;;;;7649:46;7661:7;7669:1;7661:10;;;;;;;;;;;;;;7673:9;7684:10;7649:11;:46::i;:::-;7632:7;7644:1;7640;:5;7632:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;7519:3:0;7481:226;;30207:1242;30320:6;30315:1127;30346:1;30332:4;:11;:15;30328:1;:19;30315:1127;;;30370:13;30385:14;30404:4;30409:1;30404:7;;;;;;;;;;;;;;30413:4;30418:1;30422;30418:5;30413:11;;;;;;;;;;;;;;30369:56;;;;30441:14;30460:45;30491:5;30498:6;30460:30;:45::i;:::-;30440:65;;;30520:22;30563:51;30591:7;30600:5;30607:6;30563:27;:51::i;:::-;30520:95;;30630:16;30661:17;30749:13;30764;30782:4;-1:-1:-1;;;;;30782:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30782:18:0;;;;;;;-1:-1:-1;;;;;30748:52:0;;;;-1:-1:-1;30748:52:0;;-1:-1:-1;30816:17:0;;-1:-1:-1;;;;;30857:15:0;;;;;;;:61;;30899:8;30909;30857:61;;;30876:8;30886;30857:61;30815:103;;;;30947:66;31000:12;30964:5;-1:-1:-1;;;;;30947:33:0;;30989:4;30947:48;;;;;;;;;;;;;-1:-1:-1;;;;;30947:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;:66;30933:80;;31043:74;31076:11;31089:12;31103:13;31043:32;:74::i;:::-;31028:89;;30315:1127;;;;31148:15;31165;31193:6;-1:-1:-1;;;;;31184:15:0;:5;-1:-1:-1;;;;;31184:15:0;;:67;;31229:12;31248:1;31184:67;;;31208:1;31212:12;31184:67;31147:104;;;;31266:10;31297:1;31283:4;:11;:15;31279:1;:19;:85;;31361:3;31279:85;;;31301:57;31329:7;31338:6;31346:4;31351:1;31355;31351:5;31346:11;;;;;;;31301:57;31417:12;;;31427:1;31417:12;;;;;;;;;;-1:-1:-1;;;31379:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;31379:51:0;;;;;;;;;;;;;;;;;;;;;;31266:98;;-1:-1:-1;31379:9:0;;;;;;31389:10;;31401;;31266:98;;31417:12;;31379:51;;;;;;;;31417:12;;31379:51;;;;31417:12;;31379:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30349:3:0;;;;;-1:-1:-1;30315:1127:0;;-1:-1:-1;;;;;;;;;;30315:1127:0;2880:129;2964:5;;;2959:16;;;;2951:50;;;;;-1:-1:-1;;;2951:50:0;;;;;;;;;;;;-1:-1:-1;;;2951:50:0;;;;;;;;;;;;;;6022:480;6115:13;6161:1;6149:9;:13;6141:73;;;;-1:-1:-1;;;6141:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6245:1;6233:9;:13;:31;;;;;6263:1;6250:10;:14;6233:31;6225:87;;;;-1:-1:-1;;;6225:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6323:14;6340:35;6369:5;6340:24;:9;6354;6340:13;:24::i;:::-;:28;;:35::i;:::-;6323:52;-1:-1:-1;6386:16:0;6405:35;6435:4;6405:25;:10;6420:9;6405:14;:25::i;:35::-;6386:54;;6462:32;6492:1;6475:11;6463:9;:23;;;;;;;6462:29;:32::i;:::-;6451:43;6022:480;-1:-1:-1;;;;;;6022:480:0:o;4927:327::-;5009:12;5052:1;5042:7;:11;5034:64;;;;-1:-1:-1;;;5034:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5128:1;5117:8;:12;:28;;;;;5144:1;5133:8;:12;5117:28;5109:84;;;;-1:-1:-1;;;5109:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5238:8;5214:21;:7;5226:8;5214:11;:21::i;:::-;:32;;;;;;;4927:327;-1:-1:-1;;;;4927:327:0:o;3437:355::-;3512:14;3528;3573:6;-1:-1:-1;;;;;3563:16:0;:6;-1:-1:-1;;;;;3563:16:0;;;3555:69;;;;-1:-1:-1;;;3555:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3663:6;-1:-1:-1;;;;;3654:15:0;:6;-1:-1:-1;;;;;3654:15:0;;:53;;3692:6;3700;3654:53;;;3673:6;3681;3654:53;3635:72;;-1:-1:-1;3635:72:0;-1:-1:-1;;;;;;3726:20:0;;3718:66;;;;-1:-1:-1;;;3718:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3437:355;;;;;:::o;17040:1411::-;17258:12;17272;17418:1;-1:-1:-1;;;;;17353:67:0;17374:7;-1:-1:-1;;;;;17353:37:0;;17391:6;17399;17353:53;;;;;;;;;;;;;-1:-1:-1;;;;;17353:53:0;;;;;;-1:-1:-1;;;;;17353:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17353:53:0;-1:-1:-1;;;;;17353:67:0;;17349:156;;;17458:7;-1:-1:-1;;;;;17437:40:0;;17478:6;17486;17437:56;;;;;;;;;;;;;-1:-1:-1;;;;;17437:56:0;;;;;;-1:-1:-1;;;;;17437:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17349:156:0;17516:13;17531;17548:56;17580:7;17589:6;17597;17548:31;:56::i;:::-;17515:89;;;;17619:8;17631:1;17619:13;:30;;;;-1:-1:-1;17636:13:0;;17619:30;17615:829;;;17688:14;;-1:-1:-1;17704:14:0;;-1:-1:-1;17615:829:0;;;17752:19;17774:61;17800:14;17816:8;17826;17774:25;:61::i;:::-;17752:83;;17872:14;17854;:32;17850:583;;17933:10;17915:14;:28;;17907:82;;;;-1:-1:-1;;;17907:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18030:14;;-1:-1:-1;18046:14:0;-1:-1:-1;18046:14:0;17850:583;;;18102:19;18124:61;18150:14;18166:8;18176;18124:25;:61::i;:::-;18102:83;;18229:14;18211;:32;;18204:40;;;;18289:10;18271:14;:28;;18263:82;;;;-1:-1:-1;;;18263:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18386:14;-1:-1:-1;18402:14:0;;-1:-1:-1;17850:583:0;17615:829;;17040:1411;;;;;;;;;;;:::o;3017:142::-;3069:6;3096;;;:30;;-1:-1:-1;;3111:5:0;;;3125:1;3120;3111:5;3120:1;3106:15;;;;;:20;3096:30;3088:63;;;;;-1:-1:-1;;;3088:63:0;;;;;;;;;;;;-1:-1:-1;;;3088:63:0;;;;;;;;;;;;;;2744:128;2828:5;;;2823:16;;;;2815:49;;;;;-1:-1:-1;;;2815:49:0;;;;;;;;;;;;-1:-1:-1;;;2815:49:0;;;;;;;;;;;;;;4420:394;4513:13;4528;4555:14;4574:26;4585:6;4593;4574:10;:26::i;:::-;4554:46;;;4612:13;4627;4663:32;4671:7;4680:6;4688;4663:7;:32::i;:::-;-1:-1:-1;;;;;4645:63:0;;:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4645:65:0;;;;;;;-1:-1:-1;;;;;4611:99:0;;;;-1:-1:-1;4611:99:0;;-1:-1:-1;;;;;;4744:16:0;;;;;;;:62;;4787:8;4797;4744:62;;;4764:8;4774;4744:62;4721:85;;;;-1:-1:-1;4420:394:0;-1:-1:-1;;;;;;;4420:394:0:o

Swarm Source

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