Contract 0xcd7d16fb918511bf7269ec4f48d61d79fb26f918 3

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xb1d08163e575a457b8b7c776649ee99028111c43828a5d99ff77185048f0d3acSwap Exact Token...34970092022-07-02 2:45:595 mins ago0xa897312a1882dbb79827db2c5e0abab438f38c6f IN  CronaSwap: Router0 CRO0.669381090
0xb2aa260f61c5fa3971c06042bafb295c62f504fa0e3186f4f2ff15f2faa5fa78Swap Exact Token...34969812022-07-02 2:43:197 mins ago0x65f2d99d94bc83aae612dcf4f33a87e6877faac6 IN  CronaSwap: Router0 CRO0.72611 5,000
0x388de18a561bfb3c13c8cc6384ab52ddd420aa9d937f95fafe95bf54bb4fd43aSwap Exact Token...34969642022-07-02 2:41:439 mins ago0xb3c506d60d45abb917ee10a947749a098b497d3d IN  CronaSwap: Router0 CRO0.6680450
0xe7c19dd22489b85bf01d37f25eca673baa0df87ece131408bcbe87605a06b012Add Liquidity ET...34969592022-07-02 2:41:1410 mins ago0x004233b38d55b01567be35bafe40b8c53351bd20 IN  CronaSwap: Router154.709475755185805 CRO1.0039931788440
0x56ac1326d02801bba5ec3439d3c510c6ae5bc33d3d224effdabec2f27c10f41dSwap Exact Token...34969482022-07-02 2:40:1211 mins ago0x5c31523f33f7bb255c2005af97ac47f5ab403aff IN  CronaSwap: Router0 CRO0.68875 5,000
0x0e2f5421a13af47653b6582ac84dccdde7f653bb1be28e11a2f506f3e134fa6eSwap Exact Token...34969302022-07-02 2:38:2912 mins ago0x42a35da64af872ae57b41de182d6dda1bf442145 IN  CronaSwap: Router0 CRO0.760855 5,000
0xbc8f9420d8b463d61bdf8175fb0d0b7889f5f9838f98b134a615d54b4cc035bdSwap Exact Token...34969192022-07-02 2:37:2613 mins ago0xc079993277db89450e37752a33c8fdb0b8bd4011 IN  CronaSwap: Router0 CRO0.743875 5,000
0xaebd3fef92f2505c6bea1dca8048355be07167d4f58ac61b5690f230b29d6ae0Swap Exact Token...34969062022-07-02 2:36:1315 mins ago0xac1dcd1950ea857c87c0f1e6bc0b3d9a2d5f28aa IN  CronaSwap: Router0 CRO0.72606 5,000
0x54ee9160793d16755d7f3d6a8c4de3c7107adb7c7c0480a7bb382da3b1cac52fSwap Exact ETH F...34968922022-07-02 2:34:5416 mins ago0x004233b38d55b01567be35bafe40b8c53351bd20 IN  CronaSwap: Router155 CRO0.7504468009720
0xdff2019a7c3dd4aa5665c23adf1280d9a0d9c5f447d51bf0c793dc9a81620f16Swap Exact Token...34968652022-07-02 2:32:2018 mins ago0x03f1fd8fe3d21ae095e0c39f2c9323b9f1e750c2 IN  CronaSwap: Router0 CRO0.790635 5,000
0x3b009f5adcb1a4396bef845917ccb434d869808bd248b954d4037136f141215dSwap Exact Token...34968622022-07-02 2:32:0319 mins ago0x78c62fe8297f9096262780cc7c66eaaf28780f11 IN  CronaSwap: Router0 CRO0.6680450
0x2ba95e833e95f1dc956bc38145d68a85491a01ef725f3a806c9531719c53f0baSwap Exact ETH F...34968542022-07-02 2:31:1719 mins ago0x6f86b52676c76561c0d435092c817def06773856 IN  CronaSwap: Router190.264465 CRO0.7550
0x75e17e644142b4b73c1dbcdb6b81f9f99d8e33bb14ef732b8e509cacc26ee8efSwap Exact Token...34968532022-07-02 2:31:1220 mins ago0x78c62fe8297f9096262780cc7c66eaaf28780f11 IN  CronaSwap: Router0 CRO0.6680450
0x2983cb7df2fd24c6cfc0a18df7518110f3fe402b4020f232fd4aa72990513b41Swap Exact ETH F...34968472022-07-02 2:30:3820 mins ago0xa56ea248773cb0e6d74d9cab4b36329661716acc IN  CronaSwap: Router355 CRO1.0356750
0xd13d6eea76c882c994c0c7424bfe0e8f1432cd7f38f5702413f8180fae649fa0Swap Exact Token...34968242022-07-02 2:28:2722 mins ago0x791b4403db7d000c11f37da4ed8d3fb448c86e98 IN  CronaSwap: Router0 CRO0.70226 5,000
0xcab80a3c8165fce17899be8b50986907c0fb52563bdb5ae7b0ece9ac54346555Swap Exact ETH F...34968162022-07-02 2:27:4223 mins ago0xc0d5d5f85c5f9cd27538018d3ffc7351d54fb464 IN  CronaSwap: Router1,500 CRO0.66062 5,000
0xbb4c08868c1f890a6abcf45cc49cebe01c123491cf01ffec3c49edbec951d4fcSwap Exact Token...34968112022-07-02 2:27:1324 mins ago0x25129af08cecf540642f3183ad64f22938f44242 IN  CronaSwap: Router0 CRO0.6278650
0x44fb9e0decb10157e51567d642fb6d3fac5e92390845873f95c5120069784c71Swap Exact Token...34967682022-07-02 2:23:0928 mins ago0x12024013a980f426f487872b689edf5655706ac7 IN  CronaSwap: Router0 CRO1.016624 7,000
0x39200eca6973054cab4e2389716871cecf786f39fe678eb61e6c17656de20880Remove Liquidity...34967632022-07-02 2:22:4028 mins ago0x25129af08cecf540642f3183ad64f22938f44242 IN  CronaSwap: Router0 CRO1.1296624492650
0x89028e53026c594af84ba8a333a47f0433954e885a54666a72176382f77c7929Swap Exact ETH F...34967582022-07-02 2:22:1229 mins ago0xeed47bf8b17b48a4c2619ccc5ce0b835ec81264b IN  CronaSwap: Router10.428871240728666 CRO0.7353350
0xeeebc89dd88cffe0e852fb392c4cc3d2a1d426fe159064f6a3884f296b1dcbcdSwap Exact Token...34967232022-07-02 2:18:4932 mins ago0xaa8cb504c22ec8b84c2593bf33c617f819182680 IN  CronaSwap: Router0 CRO0.709118534 5,002
0x9a452b6f4a8d642ae1d801f2c765cc4c4ece8b0fa4fd9a66ad8483aa244c85e2Swap ETH For Exa...34967222022-07-02 2:18:4332 mins ago0xbbcd2a3f497aa6ecb44fd9f983d90db0c1624e80 IN  CronaSwap: Router16,102.397134997039354 CRO1.019263 7,000
0x8972e941d1cc7825325238147d7cf13b919346dc7ff757fb74086f83b7f6ec3bSwap ETH For Exa...34967102022-07-02 2:17:3633 mins ago0x354bfe2a02331e0205f5688a5e32801069f6062e IN  CronaSwap: Router186.229859277084603 CRO0.728045 5,000
0x880837b1a8a11e3a6786ed60a1db60d0191ebabf376370e7517ae09e5f6e0eacSwap Exact ETH F...34967082022-07-02 2:17:2433 mins ago0x8996a1680be4c4d0e1bd40090d64b4f5f038c26a IN  CronaSwap: Router950 CRO1.035675 5,000
0xb2ee34a68742e03b1e3e807401408e489b20dc6db3478b9e700c58b19ec73264Swap ETH For Exa...34967012022-07-02 2:16:4434 mins ago0x354bfe2a02331e0205f5688a5e32801069f6062e IN  CronaSwap: Router345.641152686725439 CRO0.728045 5,000
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xb2aa260f61c5fa3971c06042bafb295c62f504fa0e3186f4f2ff15f2faa5fa7834969812022-07-02 2:43:197 mins ago CronaSwap: Router0x65f2d99d94bc83aae612dcf4f33a87e6877faac668.84188339005682533 CRO
0xb2aa260f61c5fa3971c06042bafb295c62f504fa0e3186f4f2ff15f2faa5fa7834969812022-07-02 2:43:197 mins ago Cronos: WCRO Token CronaSwap: Router68.84188339005682533 CRO
0xe7c19dd22489b85bf01d37f25eca673baa0df87ece131408bcbe87605a06b01234969592022-07-02 2:41:1410 mins ago CronaSwap: Router Cronos: WCRO Token154.709475755185805031 CRO
0x56ac1326d02801bba5ec3439d3c510c6ae5bc33d3d224effdabec2f27c10f41d34969482022-07-02 2:40:1211 mins ago CronaSwap: Router0x5c31523f33f7bb255c2005af97ac47f5ab403aff3,425.072705513708197792 CRO
0x56ac1326d02801bba5ec3439d3c510c6ae5bc33d3d224effdabec2f27c10f41d34969482022-07-02 2:40:1211 mins ago Cronos: WCRO Token CronaSwap: Router3,425.072705513708197792 CRO
0x0e2f5421a13af47653b6582ac84dccdde7f653bb1be28e11a2f506f3e134fa6e34969302022-07-02 2:38:2912 mins ago CronaSwap: Router0x42a35da64af872ae57b41de182d6dda1bf442145169.210309201993447752 CRO
0x0e2f5421a13af47653b6582ac84dccdde7f653bb1be28e11a2f506f3e134fa6e34969302022-07-02 2:38:2912 mins ago Cronos: WCRO Token CronaSwap: Router169.210309201993447752 CRO
0xbc8f9420d8b463d61bdf8175fb0d0b7889f5f9838f98b134a615d54b4cc035bd34969192022-07-02 2:37:2613 mins ago CronaSwap: Router0xc079993277db89450e37752a33c8fdb0b8bd401126.694567950142055121 CRO
0xbc8f9420d8b463d61bdf8175fb0d0b7889f5f9838f98b134a615d54b4cc035bd34969192022-07-02 2:37:2613 mins ago Cronos: WCRO Token CronaSwap: Router26.694567950142055121 CRO
0xaebd3fef92f2505c6bea1dca8048355be07167d4f58ac61b5690f230b29d6ae034969062022-07-02 2:36:1315 mins ago CronaSwap: Router0xac1dcd1950ea857c87c0f1e6bc0b3d9a2d5f28aa83.318324206122784645 CRO
0xaebd3fef92f2505c6bea1dca8048355be07167d4f58ac61b5690f230b29d6ae034969062022-07-02 2:36:1315 mins ago Cronos: WCRO Token CronaSwap: Router83.318324206122784645 CRO
0x54ee9160793d16755d7f3d6a8c4de3c7107adb7c7c0480a7bb382da3b1cac52f34968922022-07-02 2:34:5416 mins ago CronaSwap: Router Cronos: WCRO Token155 CRO
0xdff2019a7c3dd4aa5665c23adf1280d9a0d9c5f447d51bf0c793dc9a81620f1634968652022-07-02 2:32:2018 mins ago CronaSwap: Router0x03f1fd8fe3d21ae095e0c39f2c9323b9f1e750c21,084.224513897946088133 CRO
0xdff2019a7c3dd4aa5665c23adf1280d9a0d9c5f447d51bf0c793dc9a81620f1634968652022-07-02 2:32:2018 mins ago Cronos: WCRO Token CronaSwap: Router1,084.224513897946088133 CRO
0x2ba95e833e95f1dc956bc38145d68a85491a01ef725f3a806c9531719c53f0ba34968542022-07-02 2:31:1719 mins ago CronaSwap: Router Cronos: WCRO Token190.264465 CRO
0x2983cb7df2fd24c6cfc0a18df7518110f3fe402b4020f232fd4aa72990513b4134968472022-07-02 2:30:3820 mins ago CronaSwap: Router Cronos: WCRO Token355 CRO
0xd13d6eea76c882c994c0c7424bfe0e8f1432cd7f38f5702413f8180fae649fa034968242022-07-02 2:28:2722 mins ago CronaSwap: Router0x791b4403db7d000c11f37da4ed8d3fb448c86e988.878053607045553038 CRO
0xd13d6eea76c882c994c0c7424bfe0e8f1432cd7f38f5702413f8180fae649fa034968242022-07-02 2:28:2722 mins ago Cronos: WCRO Token CronaSwap: Router8.878053607045553038 CRO
0xcab80a3c8165fce17899be8b50986907c0fb52563bdb5ae7b0ece9ac5434655534968162022-07-02 2:27:4223 mins ago CronaSwap: Router Cronos: WCRO Token1,500 CRO
0x44fb9e0decb10157e51567d642fb6d3fac5e92390845873f95c5120069784c7134967682022-07-02 2:23:0928 mins ago CronaSwap: Router0x12024013a980f426f487872b689edf5655706ac7221.686459528239586836 CRO
0x44fb9e0decb10157e51567d642fb6d3fac5e92390845873f95c5120069784c7134967682022-07-02 2:23:0928 mins ago Cronos: WCRO Token CronaSwap: Router221.686459528239586836 CRO
0x89028e53026c594af84ba8a333a47f0433954e885a54666a72176382f77c792934967582022-07-02 2:22:1229 mins ago CronaSwap: Router Cronos: WCRO Token10.428871240728666392 CRO
0xeeebc89dd88cffe0e852fb392c4cc3d2a1d426fe159064f6a3884f296b1dcbcd34967232022-07-02 2:18:4932 mins ago CronaSwap: Router0xaa8cb504c22ec8b84c2593bf33c617f81918268067.454582795960728858 CRO
0xeeebc89dd88cffe0e852fb392c4cc3d2a1d426fe159064f6a3884f296b1dcbcd34967232022-07-02 2:18:4932 mins ago Cronos: WCRO Token CronaSwap: Router67.454582795960728858 CRO
0x9a452b6f4a8d642ae1d801f2c765cc4c4ece8b0fa4fd9a66ad8483aa244c85e234967222022-07-02 2:18:4332 mins ago CronaSwap: Router0xbbcd2a3f497aa6ecb44fd9f983d90db0c1624e8088.142649437819677012 CRO
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CronaSwapRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-01-08
*/

// Dependency file: contracts/interfaces/IWETH.sol

// SPDX-License-Identifier: MIT
// pragma solidity >=0.5.0;

interface IWETH {
    function deposit() external payable;
    function transfer(address to, uint value) external returns (bool);
    function withdraw(uint) external;
}


// Dependency file: contracts/interfaces/IERC20.sol

// pragma solidity >=0.5.0;

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

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

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


// Dependency file: contracts/libraries/SafeMath.sol

// pragma solidity >=0.5.16;

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

library SafeMath {
    function add(uint x, uint y) internal pure returns (uint z) {
        require((z = x + y) >= x, 'ds-math-add-overflow');
    }

    function sub(uint x, uint y) internal pure returns (uint z) {
        require((z = x - y) <= x, 'ds-math-sub-underflow');
    }

    function mul(uint x, uint y) internal pure returns (uint z) {
        require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow');
    }
}


// Dependency file: contracts/libraries/TransferHelper.sol


// pragma solidity >=0.6.0;

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

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

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

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

// Dependency file: contracts/interfaces/ICronaSwapFactory.sol

// pragma solidity >=0.5.0;

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

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

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

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

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

// Dependency file: contracts/interfaces/ICronaSwapRouter01.sol

// pragma solidity >=0.6.2;

interface ICronaSwapRouter01 {
    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);
}


// Dependency file: contracts/interfaces/ICronaSwapRouter02.sol

// pragma solidity >=0.6.2;

// import 'contracts/interfaces/ICronaSwapRouter01.sol';

interface ICronaSwapRouter02 is ICronaSwapRouter01 {
    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;
}


// Dependency file: contracts/interfaces/ICronaSwapPair.sol

// pragma solidity >=0.5.0;

interface ICronaSwapPair {
    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;
}


// Dependency file: contracts/libraries/CronaSwapLibrary.sol

// pragma solidity >=0.5.0;

// import "contracts/libraries/SafeMath.sol";
// import 'contracts/interfaces/ICronaSwapPair.sol';

library CronaSwapLibrary {
    using SafeMath for uint;

    // returns sorted token addresses, used to handle return values from pairs sorted in this order
    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
        require(tokenA != tokenB, 'CronaSwapLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'CronaSwapLibrary: 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'c93158cffa5b575e32566e81e847754ce517f8fa988d3e25cf346d916216e06f' // init code hash
            ))));
    }

    // fetches and sorts the reserves for a pair
    function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) {
        (address token0,) = sortTokens(tokenA, tokenB);
        pairFor(factory, tokenA, tokenB);
        (uint reserve0, uint reserve1,) = ICronaSwapPair(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, 'CronaSwapLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'CronaSwapLibrary: 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, 'CronaSwapLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'CronaSwapLibrary: 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, 'CronaSwapLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'CronaSwapLibrary: 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, 'CronaSwapLibrary: 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, 'CronaSwapLibrary: 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);
        }
    }
}


// Root file: contracts/swap/CronaSwapRouter.sol

pragma solidity =0.6.6;

// import 'contracts/interfaces/IWETH.sol';
// import 'contracts/interfaces/IERC20.sol';
// import 'contracts/libraries/SafeMath.sol';
// import 'contracts/libraries/TransferHelper.sol';
// import 'contracts/interfaces/ICronaSwapFactory.sol';
// import 'contracts/interfaces/ICronaSwapRouter02.sol';
// import 'contracts/libraries/CronaSwapLibrary.sol';

contract CronaSwapRouter is ICronaSwapRouter02 {
    using SafeMath for uint;

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

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

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

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

    // **** ADD LIQUIDITY ****
    function _addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin
    ) internal virtual returns (uint amountA, uint amountB) {
        // create the pair if it doesn't exist yet
        if (ICronaSwapFactory(factory).getPair(tokenA, tokenB) == address(0)) {
            ICronaSwapFactory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = CronaSwapLibrary.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = CronaSwapLibrary.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'CronaSwapRouter: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = CronaSwapLibrary.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'CronaSwapRouter: 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 = CronaSwapLibrary.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = ICronaSwapPair(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 = CronaSwapLibrary.pairFor(factory, token, WETH);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWETH(WETH).deposit{value: amountETH}();
        assert(IWETH(WETH).transfer(pair, amountETH));
        liquidity = ICronaSwapPair(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 = CronaSwapLibrary.pairFor(factory, tokenA, tokenB);
        ICronaSwapPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint amount0, uint amount1) = ICronaSwapPair(pair).burn(to);
        (address token0,) = CronaSwapLibrary.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'CronaSwapRouter: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'CronaSwapRouter: 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 = CronaSwapLibrary.pairFor(factory, tokenA, tokenB);
        uint value = approveMax ? uint(-1) : liquidity;
        ICronaSwapPair(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 = CronaSwapLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        ICronaSwapPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline);
    }

    // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) ****
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountETH) {
        (, amountETH) = removeLiquidity(
            token,
            WETH,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this)));
        IWETH(WETH).withdraw(amountETH);
        TransferHelper.safeTransferETH(to, amountETH);
    }

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountETH) {
        address pair = CronaSwapLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        ICronaSwapPair(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,) = CronaSwapLibrary.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 ? CronaSwapLibrary.pairFor(factory, output, path[i + 2]) : _to;
            ICronaSwapPair(CronaSwapLibrary.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 = CronaSwapLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'CronaSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, CronaSwapLibrary.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 = CronaSwapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'CronaSwapRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, CronaSwapLibrary.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, 'CronaSwapRouter: INVALID_PATH');
        amounts = CronaSwapLibrary.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'CronaSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(CronaSwapLibrary.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, 'CronaSwapRouter: INVALID_PATH');
        amounts = CronaSwapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'CronaSwapRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, CronaSwapLibrary.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, 'CronaSwapRouter: INVALID_PATH');
        amounts = CronaSwapLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'CronaSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, CronaSwapLibrary.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, 'CronaSwapRouter: INVALID_PATH');
        amounts = CronaSwapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'CronaSwapRouter: EXCESSIVE_INPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(CronaSwapLibrary.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,) = CronaSwapLibrary.sortTokens(input, output);
            ICronaSwapPair pair = ICronaSwapPair(CronaSwapLibrary.pairFor(factory, input, output));
            uint amountInput;
            uint amountOutput;
            { // scope to avoid stack too deep errors
            (uint reserve0, uint reserve1,) = pair.getReserves();
            (uint reserveInput, uint reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
            amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput);
            amountOutput = CronaSwapLibrary.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? CronaSwapLibrary.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, CronaSwapLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'CronaSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WETH, 'CronaSwapRouter: INVALID_PATH');
        uint amountIn = msg.value;
        IWETH(WETH).deposit{value: amountIn}();
        assert(IWETH(WETH).transfer(CronaSwapLibrary.pairFor(factory, path[0], path[1]), amountIn));
        uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'CronaSwapRouter: 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, 'CronaSwapRouter: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, CronaSwapLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20(WETH).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'CronaSwapRouter: 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 CronaSwapLibrary.quote(amountA, reserveA, reserveB);
    }

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

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

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

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

60c060405234801561001057600080fd5b50604051620047a9380380620047a98339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c614624620001856000398061015f5280610ce45280610d1f5280610e16528061103452806113be528061152452806118eb52806119e55280611a9b5280611b695280611caf5280611d375280611f7c5280611ff752806120a652806121725280612207528061227b528061277952806129ec5280612a425280612a765280612aea5280612c8a5280612dcd5280612e55525080610ea45280610f7b52806110fa5280611133528061126e528061144c528061150252806116725280611bfc5280611d695280611ecc52806122ad528061250652806126fe5280612727528061275752806128c45280612a205280612d1d5280612e875280613718528061375b5280613a3e5280613bbd5280613fed528061409b528061411b52506146246000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b03813516906020013561189d565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b21565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e74565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e81565b34801561088157600080fd5b5061088a611f7a565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f9e565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fab565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b03813516906020013561212c565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124b8565b348015610a1c57600080fd5b5061088a6126fc565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612720945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561274d565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612861565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561299d565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612c42565b6000808242811015610cde576040805162461bcd60e51b815260206004820152601860248201526000805160206144bd833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124b8565b9093509150610d1d898685612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da58583613118565b50965096945050505050565b6000610dbe848484613210565b949350505050565b60608142811015610e0c576040805162461bcd60e51b815260206004820152601860248201526000805160206144bd833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b815260206004820152601d60248201526000805160206145a4833981519152604482015290519081900360640190fd5b610efd7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061330092505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b815260040180806020018281038252602b815260200180614439602b913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b031661344c565b85600081518110610fe657fe5b602002602001015161350c565b61103282878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613669915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b6020026020010151613118565b509695505050505050565b60606111207f000000000000000000000000000000000000000000000000000000000000000084846138af565b90505b92915050565b60008060006111597f00000000000000000000000000000000000000000000000000000000000000008f8f61344c565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f6124b8565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b815260206004820152601860248201526000805160206144bd833981519152604482015290519081900360640190fd5b6112c77f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061330092505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b815260040180806020018281038252602b815260200180614439602b913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e882878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613669915050565b606081428110156113b4576040805162461bcd60e51b815260206004820152601860248201526000805160206144bd833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b815260206004820152601d60248201526000805160206145a4833981519152604482015290519081900360640190fd5b6114a57f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138af92505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b81526004018080602001828103825260278152602001806145286027913960400191505060405180910390fd5b6000806115487f00000000000000000000000000000000000000000000000000000000000000008d7f000000000000000000000000000000000000000000000000000000000000000061344c565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611fab565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b815260206004820152601860248201526000805160206144bd833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a61350c565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b505160408051602088810282810182019093528882529293506117a49290918991899182918501908490808284376000920191909152508892506139e7915050565b8661185682888860001981018181106117b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d602081101561184857600080fd5b50519063ffffffff613cf216565b10156118935760405162461bcd60e51b815260040180806020018281038252602b815260200180614439602b913960400191505060405180910390fd5b5050505050505050565b80428110156118e1576040805162461bcd60e51b815260206004820152601860248201526000805160206144bd833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061191b57fe5b905060200201356001600160a01b03166001600160a01b031614611974576040805162461bcd60e51b815260206004820152601d60248201526000805160206145a4833981519152604482015290519081900360640190fd5b6119848585600081811061165c57fe5b6119c28585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506139e7915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a2c57600080fd5b505afa158015611a40573d6000803e3d6000fd5b505050506040513d6020811015611a5657600080fd5b5051905086811015611a995760405162461bcd60e51b815260040180806020018281038252602b815260200180614439602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aff57600080fd5b505af1158015611b13573d6000803e3d6000fd5b505050506118938482613118565b60608142811015611b67576040805162461bcd60e51b815260206004820152601860248201526000805160206144bd833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b9e57fe5b905060200201356001600160a01b03166001600160a01b031614611bf7576040805162461bcd60e51b815260206004820152601d60248201526000805160206145a4833981519152604482015290519081900360640190fd5b611c557f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061330092505050565b91508682600184510381518110611c6857fe5b60200260200101511015611cad5760405162461bcd60e51b815260040180806020018281038252602b815260200180614439602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611ce957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1c57600080fd5b505af1158015611d30573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d957f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110611da257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b505050506040513d6020811015611e2357600080fd5b5051611e2b57fe5b611e6a82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613669915050565b5095945050505050565b6000610dbe848484613d42565b60608142811015611ec7576040805162461bcd60e51b815260206004820152601860248201526000805160206144bd833981519152604482015290519081900360640190fd5b611f257f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138af92505050565b91508682600081518110611f3557fe5b6020026020010151111561131f5760405162461bcd60e51b81526004018080602001828103825260278152602001806145286027913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613e32565b60008142811015611ff1576040805162461bcd60e51b815260206004820152601860248201526000805160206144bd833981519152604482015290519081900360640190fd5b612020887f000000000000000000000000000000000000000000000000000000000000000089898930896124b8565b604080516370a0823160e01b815230600482015290519194506120a492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561207357600080fd5b505afa158015612087573d6000803e3d6000fd5b505050506040513d602081101561209d57600080fd5b5051612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561210a57600080fd5b505af115801561211e573d6000803e3d6000fd5b505050506110e88483613118565b8042811015612170576040805162461bcd60e51b815260206004820152601860248201526000805160206144bd833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106121a757fe5b905060200201356001600160a01b03166001600160a01b031614612200576040805162461bcd60e51b815260206004820152601d60248201526000805160206145a4833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122d97f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561232957600080fd5b505af115801561233d573d6000803e3d6000fd5b505050506040513d602081101561235357600080fd5b505161235b57fe5b60008686600019810181811061236d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123d257600080fd5b505afa1580156123e6573d6000803e3d6000fd5b505050506040513d60208110156123fc57600080fd5b5051604080516020898102828101820190935289825292935061243e9290918a918a9182918501908490808284376000920191909152508992506139e7915050565b87611856828989600019810181811061245357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b60008082428110156124ff576040805162461bcd60e51b815260206004820152601860248201526000805160206144bd833981519152604482015290519081900360640190fd5b600061252c7f00000000000000000000000000000000000000000000000000000000000000008c8c61344c565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561258757600080fd5b505af115801561259b573d6000803e3d6000fd5b505050506040513d60208110156125b157600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125fe57600080fd5b505af1158015612612573d6000803e3d6000fd5b505050506040513d604081101561262857600080fd5b508051602090910151909250905060006126428e8e613ede565b509050806001600160a01b03168e6001600160a01b031614612665578183612668565b82825b90975095508a8710156126ac5760405162461bcd60e51b81526004018080602001828103825260268152602001806143b66026913960400191505060405180910390fd5b898610156126eb5760405162461bcd60e51b81526004018080602001828103825260268152602001806144dd6026913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111207f00000000000000000000000000000000000000000000000000000000000000008484613300565b600080600061279d7f00000000000000000000000000000000000000000000000000000000000000008e7f000000000000000000000000000000000000000000000000000000000000000061344c565b90506000876127ac578c6127b0565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561282657600080fd5b505af115801561283a573d6000803e3d6000fd5b5050505061284c8e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b600080600083428110156128aa576040805162461bcd60e51b815260206004820152601860248201526000805160206144bd833981519152604482015290519081900360640190fd5b6128b88c8c8c8c8c8c613fbc565b909450925060006128ea7f00000000000000000000000000000000000000000000000000000000000000008e8e61344c565b90506128f88d33838861350c565b6129048c33838761350c565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561295c57600080fd5b505af1158015612970573d6000803e3d6000fd5b505050506040513d602081101561298657600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129e6576040805162461bcd60e51b815260206004820152601860248201526000805160206144bd833981519152604482015290519081900360640190fd5b612a148a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613fbc565b90945092506000612a667f00000000000000000000000000000000000000000000000000000000000000008c7f000000000000000000000000000000000000000000000000000000000000000061344c565b9050612a748b33838861350c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612acf57600080fd5b505af1158015612ae3573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b6857600080fd5b505af1158015612b7c573d6000803e3d6000fd5b505050506040513d6020811015612b9257600080fd5b5051612b9a57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612bf257600080fd5b505af1158015612c06573d6000803e3d6000fd5b505050506040513d6020811015612c1c57600080fd5b5051925034841015612c3457612c3433853403613118565b505096509650969350505050565b60608142811015612c88576040805162461bcd60e51b815260206004820152601860248201526000805160206144bd833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612cbf57fe5b905060200201356001600160a01b03166001600160a01b031614612d18576040805162461bcd60e51b815260206004820152601d60248201526000805160206145a4833981519152604482015290519081900360640190fd5b612d767f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138af92505050565b91503482600081518110612d8657fe5b60200260200101511115612dcb5760405162461bcd60e51b81526004018080602001828103825260278152602001806145286027913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e0757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e3a57600080fd5b505af1158015612e4e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612eb37f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110612ec057fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b505050506040513d6020811015612f4157600080fd5b5051612f4957fe5b612f8882878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613669915050565b81600081518110612f9557fe5b6020026020010151341115611e6a57611e6a3383600081518110612fb557fe5b60200260200101513403613118565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130415780518252601f199092019160209182019101613022565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130a3576040519150601f19603f3d011682016040523d82523d6000602084013e6130a8565b606091505b50915091508180156130d65750805115806130d657508080602001905160208110156130d357600080fd5b50515b6131115760405162461bcd60e51b815260040180806020018281038252602d815260200180614577602d913960400191505060405180910390fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106131645780518252601f199092019160209182019101613145565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131c6576040519150601f19603f3d011682016040523d82523d6000602084013e6131cb565b606091505b505090508061320b5760405162461bcd60e51b81526004018080602001828103825260348152602001806144646034913960400191505060405180910390fd5b505050565b60008084116132505760405162461bcd60e51b815260040180806020018281038252602b8152602001806145c4602b913960400191505060405180910390fd5b6000831180156132605750600082115b61329b5760405162461bcd60e51b815260040180806020018281038252602881526020018061454f6028913960400191505060405180910390fd5b60006132af856126f763ffffffff61423016565b905060006132c3828563ffffffff61423016565b905060006132e9836132dd8861271063ffffffff61423016565b9063ffffffff61429316565b90508082816132f457fe5b04979650505050505050565b6060600282511015613359576040805162461bcd60e51b815260206004820152601e60248201527f43726f6e61537761704c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561337157600080fd5b5060405190808252806020026020018201604052801561339b578160200160208202803683370190505b50905082816000815181106133ac57fe5b60200260200101818152505060005b6001835103811015613444576000806133fe878685815181106133da57fe5b60200260200101518786600101815181106133f157fe5b60200260200101516142e2565b9150915061342084848151811061341157fe5b60200260200101518383613210565b84846001018151811061342f57fe5b602090810291909101015250506001016133bb565b509392505050565b600080600061345b8585613ede565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527fc93158cffa5b575e32566e81e847754ce517f8fa988d3e25cf346d916216e06f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135915780518252601f199092019160209182019101613572565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146135f3576040519150601f19603f3d011682016040523d82523d6000602084013e6135f8565b606091505b5091509150818015613626575080511580613626575080806020019051602081101561362357600080fd5b50515b6136615760405162461bcd60e51b81526004018080602001828103825260318152602001806143dc6031913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138a95760008084838151811061368757fe5b602002602001015185846001018151811061369e57fe5b60200260200101519150915060006136b68383613ede565b50905060008785600101815181106136ca57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146136f8578260006136fc565b6000835b91509150600060028a510388106137135788613754565b6137547f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061374757fe5b602002602001015161344c565b90506137817f0000000000000000000000000000000000000000000000000000000000000000888861344c565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156137be576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561382f578181015183820152602001613817565b50505050905090810190601f16801561385c5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561387e57600080fd5b505af1158015613892573d6000803e3d6000fd5b50506001909901985061366c975050505050505050565b50505050565b6060600282511015613908576040805162461bcd60e51b815260206004820152601e60248201527f43726f6e61537761704c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561392057600080fd5b5060405190808252806020026020018201604052801561394a578160200160208202803683370190505b509050828160018351038151811061395e57fe5b60209081029190910101528151600019015b8015613444576000806139a08786600186038151811061398c57fe5b60200260200101518786815181106133f157fe5b915091506139c28484815181106139b357fe5b60200260200101518383613d42565b8460018503815181106139d157fe5b6020908102919091010152505060001901613970565b60005b600183510381101561320b57600080848381518110613a0557fe5b6020026020010151858460010181518110613a1c57fe5b6020026020010151915091506000613a348383613ede565b5090506000613a647f0000000000000000000000000000000000000000000000000000000000000000858561344c565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613aa557600080fd5b505afa158015613ab9573d6000803e3d6000fd5b505050506040513d6060811015613acf57600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613b05578284613b08565b83835b91509150613b66828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b9550613b73868383613210565b945050505050600080856001600160a01b0316886001600160a01b031614613b9d57826000613ba1565b6000835b91509150600060028c51038a10613bb8578a613bec565b613bec7f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061374757fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c76578181015183820152602001613c5e565b50505050905090810190601f168015613ca35780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613cc557600080fd5b505af1158015613cd9573d6000803e3d6000fd5b50506001909b019a506139ea9950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613d825760405162461bcd60e51b815260040180806020018281038252602c81526020018061440d602c913960400191505060405180910390fd5b600083118015613d925750600082115b613dcd5760405162461bcd60e51b815260040180806020018281038252602881526020018061454f6028913960400191505060405180910390fd5b6000613df1612710613de5868863ffffffff61423016565b9063ffffffff61423016565b90506000613e0b6126f7613de5868963ffffffff613cf216565b9050613e286001828481613e1b57fe5b049063ffffffff61429316565b9695505050505050565b6000808411613e725760405162461bcd60e51b81526004018080602001828103825260258152602001806145036025913960400191505060405180910390fd5b600083118015613e825750600082115b613ebd5760405162461bcd60e51b815260040180806020018281038252602881526020018061454f6028913960400191505060405180910390fd5b82613ece858463ffffffff61423016565b81613ed557fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613f325760405162461bcd60e51b81526004018080602001828103825260258152602001806144986025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613f52578284613f55565b83835b90925090506001600160a01b038216613fb5576040805162461bcd60e51b815260206004820152601e60248201527f43726f6e61537761704c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561403657600080fd5b505afa15801561404a573d6000803e3d6000fd5b505050506040513d602081101561406057600080fd5b50516001600160a01b0316141561411357604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156140e657600080fd5b505af11580156140fa573d6000803e3d6000fd5b505050506040513d602081101561411057600080fd5b50505b6000806141417f00000000000000000000000000000000000000000000000000000000000000008b8b6142e2565b91509150816000148015614153575080155b1561416357879350869250614223565b6000614170898484613e32565b90508781116141c357858110156141b85760405162461bcd60e51b81526004018080602001828103825260268152602001806144dd6026913960400191505060405180910390fd5b889450925082614221565b60006141d0898486613e32565b9050898111156141dc57fe5b8781101561421b5760405162461bcd60e51b81526004018080602001828103825260268152602001806143b66026913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b600081158061424b5750508082028282828161424857fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006142f18585613ede565b5090506142ff86868661344c565b5060008061430e88888861344c565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561434657600080fd5b505afa15801561435a573d6000803e3d6000fd5b505050506040513d606081101561437057600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146143a35780826143a6565b81815b9099909850965050505050505056fe43726f6e6153776170526f757465723a20494e53554646494349454e545f415f414d4f554e545472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c656443726f6e61537761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e5443726f6e6153776170526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c656443726f6e61537761704c6962726172793a204944454e544943414c5f41444452455353455343726f6e6153776170526f757465723a2045585049524544000000000000000043726f6e6153776170526f757465723a20494e53554646494349454e545f425f414d4f554e5443726f6e61537761704c6962726172793a20494e53554646494349454e545f414d4f554e5443726f6e6153776170526f757465723a204558434553534956455f494e5055545f414d4f554e5443726f6e61537761704c6962726172793a20494e53554646494349454e545f4c49515549444954595472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c656443726f6e6153776170526f757465723a20494e56414c49445f5041544800000043726f6e61537761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54a2646970667358221220ba936349eca591894373028fb28c3cdd6d4d5267a60879759ebdffa85f482b6a64736f6c6343000606003300000000000000000000000073a48f8f521eb31c55c0e1274db0898de599cb110000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23

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

00000000000000000000000073a48f8f521eb31c55c0e1274db0898de599cb110000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23

-----Decoded View---------------
Arg [0] : _factory (address): 0x73a48f8f521eb31c55c0e1274db0898de599cb11
Arg [1] : _WETH (address): 0x5c7f8a570d578ed84e63fdfa7b1ee72deae1ae23

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000073a48f8f521eb31c55c0e1274db0898de599cb11
Arg [1] : 0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23


Deployed ByteCode Sourcemap

17237:18577:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17717:10;-1:-1:-1;;;;;17731:4:0;17717:18;;17710:26;;;;17237:18577;;12:1:-1;9;2:12;21873:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21873:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21873:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;34758:262;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34758:262:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34758:262:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;29058:850;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29058:850:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29058:850:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;29058:850:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29058:850:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;29058:850:0;;-1:-1:-1;29058:850:0;-1:-1:-1;;;;;;29058:850:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;29058:850:0;;;;;;;;;;;;;;;;;35558:253;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35558:253:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;35558:253:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;35558:253:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;35558:253:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;35558:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;35558:253:0;;-1:-1:-1;35558:253:0;;-1:-1:-1;;;;;35558:253:0:i;22554:677::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22554:677:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22554:677:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;26267:628::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26267:628:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26267:628:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26267:628:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26267:628:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26267:628:0;;-1:-1:-1;26267:628:0;-1:-1:-1;;;;;;26267:628:0;;;;;;;;:::i;28222:828::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28222:828:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28222:828:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28222:828:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28222:828:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28222:828:0;;-1:-1:-1;28222:828:0;-1:-1:-1;;;;;;28222:828:0;;;;;;;;:::i;24695:718::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24695:718:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;24695:718:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32095:714::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32095:714:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32095:714:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;32095:714:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32095:714:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;32095:714:0;;-1:-1:-1;32095:714:0;-1:-1:-1;;;;;;32095:714:0;;;;;;;;:::i;33675:843::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33675:843:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;33675:843:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33675:843:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33675:843:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33675:843:0;;-1:-1:-1;33675:843:0;-1:-1:-1;;;;;;33675:843:0;;;;;;;;:::i;27517:697::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27517:697:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27517:697:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27517:697:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27517:697:0;;-1:-1:-1;27517:697:0;-1:-1:-1;;;;;;27517:697:0;;;;;;;;:::i;35028:261::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35028:261:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35028:261:0;;;;;;;;;;;;:::i;26903:606::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26903:606:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26903:606:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26903:606:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26903:606:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26903:606:0;;-1:-1:-1;26903:606:0;-1:-1:-1;;;;;;26903:606:0;;;;;;;;:::i;17371:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17371:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;17371:38:0;;;;;;;;;;;;;;34562:188;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34562:188:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34562:188:0;;;;;;;;;;;;:::i;23987:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23987:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23987:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32817:850::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32817:850:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;32817:850:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32817:850:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;32817:850:0;;-1:-1:-1;32817:850:0;-1:-1:-1;;;;;;32817:850:0;;;;;;;;:::i;21000:865::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21000:865:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21000:865:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17323:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17323:41:0;;;:::i;35297:253::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35297:253:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;35297:253:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;35297:253:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;35297:253:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;35297:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;35297:253:0;;-1:-1:-1;35297:253:0;;-1:-1:-1;;;;;35297:253:0:i;23239:669::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23239:669:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23239:669:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19237:738::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19237:738:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19237:738:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;19983:974;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19983:974:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29916:810::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29916:810:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;29916:810:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29916:810:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;29916:810:0;;-1:-1:-1;29916:810:0;-1:-1:-1;;;;;;29916:810:0;;;;;;;;:::i;21873:673::-;22110:16;22128:14;22091:8;17480:15;17468:8;:27;;17460:64;;;;;-1:-1:-1;;;17460:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17460:64:0;;;;;;;;;;;;;;;22182:196:::1;22212:5;22232:4;22251:9;22275:14;22304:12;22339:4;22359:8;22182:15;:196::i;:::-;22155:223:::0;;-1:-1:-1;22155:223:0;-1:-1:-1;22389:51:0::1;22417:5:::0;22424:2;22155:223;22389:27:::1;:51::i;:::-;22457:4;-1:-1:-1::0;;;;;22451:20:0::1;;22472:9;22451:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22451:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22451:31:0;;;;22493:45;22524:2;22528:9;22493:30;:45::i;:::-;21873:673:::0;;;;;;;;;;:::o;34758:262::-;34911:14;34950:62;34980:8;34990:9;35001:10;34950:29;:62::i;:::-;34943:69;34758:262;-1:-1:-1;;;;34758:262:0:o;29058:850::-;29272:21;29244:8;17480:15;17468:8;:27;;17460:64;;;;;-1:-1:-1;;;17460:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17460:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;29344:4:0::1;29319:29;:4:::0;;-1:-1:-1;;29324:15:0;;29319:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;29319:21:0::1;-1:-1:-1::0;;;;;29319:29:0::1;;29311:71;;;::::0;;-1:-1:-1;;;29311:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;29311:71:0;;;;;;;;;;;;;::::1;;29403:55;29434:7;29443:8;29453:4;;29403:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29403:30:0::1;::::0;-1:-1:-1;;;29403:55:0:i:1;:::-;29393:65;;29508:12;29477:7;29502:1;29485:7;:14;:18;29477:27;;;;;;;;;;;;;;:43;;29469:99;;;;-1:-1:-1::0;;;29469:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29579:141;29625:4;;29630:1;29625:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29625:7:0::1;29634:10;29646:51;29671:7;29680:4;;29685:1;29680:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29680:7:0::1;29689:4;;29694:1;29689:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29689:7:0::1;29646:24;:51::i;:::-;29699:7;29707:1;29699:10;;;;;;;;;;;;;;29579:31;:141::i;:::-;29731:35;29737:7;29746:4;;29731:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29760:4:0::1;::::0;-1:-1:-1;29731:5:0::1;::::0;-1:-1:-1;;29731:35:0:i:1;:::-;29783:4;-1:-1:-1::0;;;;;29777:20:0::1;;29798:7;29823:1;29806:7;:14;:18;29798:27;;;;;;;;;;;;;;29777:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29777:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29777:49:0;;;;29837:63;29868:2;29872:7;29897:1;29880:7;:14;:18;29872:27;;;;;;;;;;;;;;29837:30;:63::i;:::-;29058:850:::0;;;;;;;;;:::o;35558:253::-;35702:21;35748:55;35778:7;35787:9;35798:4;35748:29;:55::i;:::-;35741:62;;35558:253;;;;;:::o;22554:677::-;22860:12;22874;22899;22914:49;22939:7;22948:6;22956;22914:24;:49::i;:::-;22899:64;;22974:10;22987;:33;;23011:9;22987:33;;;-1:-1:-1;;22987:33:0;23031:80;;;-1:-1:-1;;;23031:80:0;;23059:10;23031:80;;;;23079:4;23031:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22974:46;;-1:-1:-1;;;;;;23031:27:0;;;;;:80;;;;;-1:-1:-1;;23031:80:0;;;;;;;;-1:-1:-1;23031:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;23031:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23031:80:0;;;;23143;23159:6;23167;23175:9;23186:10;23198;23210:2;23214:8;23143:15;:80::i;:::-;23122:101;;;;;;;;22554:677;;;;;;;;;;;;;;;;:::o;26267:628::-;26491:21;26472:8;17480:15;17468:8;:27;;17460:64;;;;;-1:-1:-1;;;17460:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17460:64:0;;;;;;;;;;;;;;;26535:55:::1;26566:7;26575:8;26585:4;;26535:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26535:30:0::1;::::0;-1:-1:-1;;;26535:55:0:i:1;:::-;26525:65;;26640:12;26609:7;26634:1;26617:7;:14;:18;26609:27;;;;;;;;;;;;;;:43;;26601:99;;;;-1:-1:-1::0;;;26601:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26711:141;26757:4;;26762:1;26757:7;;;;;;26711:141;26863:24;26869:7;26878:4;;26863:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26884:2:0;;-1:-1:-1;26863:5:0::1;::::0;-1:-1:-1;;26863:24:0:i:1;28222:828::-:0;28436:21;28408:8;17480:15;17468:8;:27;;17460:64;;;;;-1:-1:-1;;;17460:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17460:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28508:4:0::1;28483:29;:4:::0;;-1:-1:-1;;28488:15:0;;28483:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28483:21:0::1;-1:-1:-1::0;;;;;28483:29:0::1;;28475:71;;;::::0;;-1:-1:-1;;;28475:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28475:71:0;;;;;;;;;;;;;::::1;;28567:55;28597:7;28606:9;28617:4;;28567:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28567:29:0::1;::::0;-1:-1:-1;;;28567:55:0:i:1;:::-;28557:65;;28655:11;28641:7;28649:1;28641:10;;;;;;;;;;;;;;:25;;28633:77;;;;-1:-1:-1::0;;;28633:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24695:718:::0;25013:14;25040:12;25055:46;25080:7;25089:5;25096:4;25055:24;:46::i;:::-;25040:61;;25112:10;25125;:33;;25149:9;25125:33;;;-1:-1:-1;;25125:33:0;25169:80;;;-1:-1:-1;;;25169:80:0;;25197:10;25169:80;;;;25217:4;25169:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25112:46;;-1:-1:-1;;;;;;25169:27:0;;;;;:80;;;;;-1:-1:-1;;25169:80:0;;;;;;;;-1:-1:-1;25169:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;25169:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25169:80:0;;;;25272:133;25334:5;25341:9;25352:14;25368:12;25382:2;25386:8;25272:47;:133::i;:::-;25260:145;24695:718;-1:-1:-1;;;;;;;;;;;;;24695:718:0:o;32095:714::-;32329:8;17480:15;17468:8;:27;;17460:64;;;;;-1:-1:-1;;;17460:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17460:64:0;;;;;;;;;;;;;;;32350:139:::1;32396:4;;32401:1;32396:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32396:7:0::1;32405:10;32417:51;32442:7;32451:4;;32456:1;32451:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32451:7:0::1;32460:4;;32465:1;32460:7;;;;;;32417:51;32470:8;32350:31;:139::i;:::-;32500:18;32528:4:::0;;-1:-1:-1;;32533:15:0;;32528:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32528:21:0::1;-1:-1:-1::0;;;;;32521:39:0::1;;32561:2;32521:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32521:43:0::1;-1:-1:-1::0;;;;;32521:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32521:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32521:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32521:43:0;32575:44:::1;::::0;;32521:43:::1;32575:44:::0;;::::1;::::0;;;;;;;;;;;32521:43;;-1:-1:-1;32575:44:0::1;::::0;;;32610:4;;;;;;32575:44;::::1;::::0;32610:4;;32575:44;32610:4;32575:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32616:2:0;;-1:-1:-1;32575:34:0::1;::::0;-1:-1:-1;;32575:44:0:i:1;:::-;32718:12:::0;32652:62:::1;32700:13:::0;32659:4;;-1:-1:-1;;32664:15:0;;32659:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32659:21:0::1;-1:-1:-1::0;;;;;32652:39:0::1;;32692:2;32652:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32652:43:0::1;-1:-1:-1::0;;;;;32652:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32652:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32652:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32652:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;32630:171;;;;-1:-1:-1::0;;;32630:171:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17535:1;32095:714:::0;;;;;;;:::o;33675:843::-;33942:8;17480:15;17468:8;:27;;17460:64;;;;;-1:-1:-1;;;17460:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17460:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;34001:4:0::1;33976:29;:4:::0;;-1:-1:-1;;33981:15:0;;33976:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33976:21:0::1;-1:-1:-1::0;;;;;33976:29:0::1;;33968:71;;;::::0;;-1:-1:-1;;;33968:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33968:71:0;;;;;;;;;;;;;::::1;;34050:139;34096:4;;34101:1;34096:7;;;;;;34050:139;34200:55;34235:4;;34200:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;34249:4:0::1;::::0;-1:-1:-1;34200:34:0::1;::::0;-1:-1:-1;;34200:55:0:i:1;:::-;34283:37;::::0;;-1:-1:-1;;;34283:37:0;;34314:4:::1;34283:37;::::0;::::1;::::0;;;34266:14:::1;::::0;-1:-1:-1;;;;;34290:4:0::1;34283:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;34283:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34283:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;34283:37:0;;-1:-1:-1;34339:25:0;;::::1;;34331:81;;;;-1:-1:-1::0;;;34331:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34429:4;-1:-1:-1::0;;;;;34423:20:0::1;;34444:9;34423:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34423:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34423:31:0;;;;34465:45;34496:2;34500:9;34465:30;:45::i;27517:697::-:0;27733:21;27705:8;17480:15;17468:8;:27;;17460:64;;;;;-1:-1:-1;;;17460:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17460:64:0;;;;;;;;;;;;;;;27791:4:::1;-1:-1:-1::0;;;;;27780:15:0::1;:4;;27785:1;27780:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27780:7:0::1;-1:-1:-1::0;;;;;27780:15:0::1;;27772:57;;;::::0;;-1:-1:-1;;;27772:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27772:57:0;;;;;;;;;;;;;::::1;;27850:56;27881:7;27890:9;27901:4;;27850:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27850:30:0::1;::::0;-1:-1:-1;;;27850:56:0:i:1;:::-;27840:66;;27956:12;27925:7;27950:1;27933:7;:14;:18;27925:27;;;;;;;;;;;;;;:43;;27917:99;;;;-1:-1:-1::0;;;27917:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28033:4;-1:-1:-1::0;;;;;28027:19:0::1;;28054:7;28062:1;28054:10;;;;;;;;;;;;;;28027:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28027:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28027:40:0;;;;;28091:4;-1:-1:-1::0;;;;;28085:20:0::1;;28106:51;28131:7;28140:4;;28145:1;28140:7;;;;;;28106:51;28159:7;28167:1;28159:10;;;;;;;;;;;;;;28085:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;28085:85:0::1;-1:-1:-1::0;;;;;28085:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28085:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28085:85:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28085:85:0;28078:93:::1;;;;28182:24;28188:7;28197:4;;28182:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28203:2:0;;-1:-1:-1;28182:5:0::1;::::0;-1:-1:-1;;28182:24:0:i:1;:::-;27517:697:::0;;;;;;;;:::o;35028:261::-;35181:13;35219:62;35248:9;35259;35270:10;35219:28;:62::i;26903:606::-;27127:21;27108:8;17480:15;17468:8;:27;;17460:64;;;;;-1:-1:-1;;;17460:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17460:64:0;;;;;;;;;;;;;;;27171:55:::1;27201:7;27210:9;27221:4;;27171:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27171:29:0::1;::::0;-1:-1:-1;;;27171:55:0:i:1;:::-;27161:65;;27259:11;27245:7;27253:1;27245:10;;;;;;;;;;;;;;:25;;27237:77;;;;-1:-1:-1::0;;;27237:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17371:38:::0;;;:::o;34562:188::-;34659:12;34691:51;34714:7;34723:8;34733;34691:22;:51::i;23987:700::-;24253:14;24234:8;17480:15;17468:8;:27;;17460:64;;;;;-1:-1:-1;;;17460:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17460:64:0;;;;;;;;;;;;;;;24296:196:::1;24326:5;24346:4;24365:9;24389:14;24418:12;24453:4;24473:8;24296:15;:196::i;:::-;24542:38;::::0;;-1:-1:-1;;;24542:38:0;;24574:4:::1;24542:38;::::0;::::1;::::0;;;24280:212;;-1:-1:-1;24503:78:0::1;::::0;-1:-1:-1;24531:5:0;;24538:2;;-1:-1:-1;;;;;24542:23:0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;24542:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24542:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;24542:38:0;24503:27:::1;:78::i;:::-;24598:4;-1:-1:-1::0;;;;;24592:20:0::1;;24613:9;24592:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24592:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24592:31:0;;;;24634:45;24665:2;24669:9;24634:30;:45::i;32817:850::-:0;33077:8;17480:15;17468:8;:27;;17460:64;;;;;-1:-1:-1;;;17460:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17460:64:0;;;;;;;;;;;;;;;33122:4:::1;-1:-1:-1::0;;;;;33111:15:0::1;:4;;33116:1;33111:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;33111:7:0::1;-1:-1:-1::0;;;;;33111:15:0::1;;33103:57;;;::::0;;-1:-1:-1;;;33103:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33103:57:0;;;;;;;;;;;;;::::1;;33171:13;33187:9;33171:25;;33213:4;-1:-1:-1::0;;;;;33207:19:0::1;;33234:8;33207:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33207:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33207:38:0;;;;;33269:4;-1:-1:-1::0;;;;;33263:20:0::1;;33284:51;33309:7;33318:4;;33323:1;33318:7;;;;;;33284:51;33337:8;33263:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;33263:83:0::1;-1:-1:-1::0;;;;;33263:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33263:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33263:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33263:83:0;33256:91:::1;;;;33358:18;33386:4:::0;;-1:-1:-1;;33391:15:0;;33386:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33386:21:0::1;-1:-1:-1::0;;;;;33379:39:0::1;;33419:2;33379:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;33379:43:0::1;-1:-1:-1::0;;;;;33379:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33379:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33379:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33379:43:0;33433:44:::1;::::0;;33379:43:::1;33433:44:::0;;::::1;::::0;;;;;;;;;;;33379:43;;-1:-1:-1;33433:44:0::1;::::0;;;33468:4;;;;;;33433:44;::::1;::::0;33468:4;;33433:44;33468:4;33433:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33474:2:0;;-1:-1:-1;33433:34:0::1;::::0;-1:-1:-1;;33433:44:0:i:1;:::-;33576:12:::0;33510:62:::1;33558:13:::0;33517:4;;-1:-1:-1;;33522:15:0;;33517:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33517:21:0::1;-1:-1:-1::0;;;;;33510:39:0::1;;33550:2;33510:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;33510:43:0::1;-1:-1:-1::0;;;;;33510:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;21000:865:0::0;21254:12;21268;21235:8;17480:15;17468:8;:27;;17460:64;;;;;-1:-1:-1;;;17460:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17460:64:0;;;;;;;;;;;;;;;21293:12:::1;21308:49;21333:7;21342:6;21350;21308:24;:49::i;:::-;21368:62;::::0;;-1:-1:-1;;;21368:62:0;;21402:10:::1;21368:62;::::0;::::1;::::0;-1:-1:-1;;;;;21368:33:0;::::1;:62:::0;;;;;;;;;;;;;;21293:64;;-1:-1:-1;21368:33:0;;::::1;::::0;:62;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;21368:33:0;:62;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;21368:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21368:62:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;21498:29:0::1;::::0;;-1:-1:-1;;;21498:29:0;;-1:-1:-1;;;;;21498:29:0;;::::1;;::::0;::::1;::::0;;;21468:12:::1;::::0;;;21498:25;;::::1;::::0;::::1;::::0;:29;;;;;;;;;;;21468:12;21498:25;:29;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;21498:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21498:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;21498:29:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;21498:29:0;-1:-1:-1;21539:14:0::1;21558:43;21586:6:::0;21594;21558:27:::1;:43::i;:::-;21538:63;;;21643:6;-1:-1:-1::0;;;;;21633:16:0::1;:6;-1:-1:-1::0;;;;;21633:16:0::1;;:58;;21674:7;21683;21633:58;;;21653:7;21662;21633:58;21612:79:::0;;-1:-1:-1;21612:79:0;-1:-1:-1;21710:21:0;;::::1;;21702:72;;;;-1:-1:-1::0;;;21702:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21804:10;21793:7;:21;;21785:72;;;;-1:-1:-1::0;;;21785:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17535:1;;;;21000:865:::0;;;;;;;;;;;:::o;17323:41::-;;;:::o;35297:253::-;35441:21;35487:55;35518:7;35527:8;35537:4;35487:30;:55::i;23239:669::-;23528:16;23546:14;23573:12;23588:46;23613:7;23622:5;23629:4;23588:24;:46::i;:::-;23573:61;;23645:10;23658;:33;;23682:9;23658:33;;;-1:-1:-1;;23658:33:0;23702:80;;;-1:-1:-1;;;23702:80:0;;23730:10;23702:80;;;;23750:4;23702:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23645:46;;-1:-1:-1;;;;;;23702:27:0;;;;;:80;;;;;-1:-1:-1;;23702:80:0;;;;;;;;-1:-1:-1;23702:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;23702:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23702:80:0;;;;23820;23839:5;23846:9;23857:14;23873:12;23887:2;23891:8;23820:18;:80::i;:::-;23793:107;;;;-1:-1:-1;23239:669:0;-1:-1:-1;;;;;;;;;;;;;23239:669:0:o;19237:738::-;19525:12;19539;19553:14;19506:8;17480:15;17468:8;:27;;17460:64;;;;;-1:-1:-1;;;17460:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17460:64:0;;;;;;;;;;;;;;;19601:85:::1;19615:6;19623;19631:14;19647;19663:10;19675;19601:13;:85::i;:::-;19580:106:::0;;-1:-1:-1;19580:106:0;-1:-1:-1;19697:12:0::1;19712:49;19737:7;19746:6:::0;19754;19712:24:::1;:49::i;:::-;19697:64;;19772:66;19804:6;19812:10;19824:4;19830:7;19772:31;:66::i;:::-;19849;19881:6;19889:10;19901:4;19907:7;19849:31;:66::i;:::-;19953:4;-1:-1:-1::0;;;;;19938:25:0::1;;19964:2;19938:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;19938:29:0::1;-1:-1:-1::0;;;;;19938:29:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19938:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19938:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19938:29:0;19237:738;;;;-1:-1:-1;19938:29:0;;-1:-1:-1;19237:738:0;;-1:-1:-1;;;;;;;;;19237:738:0:o;19983:974::-;20236:16;20254:14;20270;20217:8;17480:15;17468:8;:27;;17460:64;;;;;-1:-1:-1;;;17460:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17460:64:0;;;;;;;;;;;;;;;20324:176:::1;20352:5;20372:4;20391:18;20424:9;20448:14;20477:12;20324:13;:176::i;:::-;20297:203:::0;;-1:-1:-1;20297:203:0;-1:-1:-1;20511:12:0::1;20526:46;20551:7;20560:5:::0;20567:4:::1;20526:24;:46::i;:::-;20511:61;;20583:69;20615:5;20622:10;20634:4;20640:11;20583:31;:69::i;:::-;20669:4;-1:-1:-1::0;;;;;20663:19:0::1;;20690:9;20663:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20663:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20663:39:0;;;;;20726:4;-1:-1:-1::0;;;;;20720:20:0::1;;20741:4;20747:9;20720:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;20720:37:0::1;-1:-1:-1::0;;;;;20720:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20720:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20720:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20720:37:0;20713:45:::1;;;;20796:4;-1:-1:-1::0;;;;;20781:25:0::1;;20807:2;20781:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;20781:29:0::1;-1:-1:-1::0;;;;;20781:29:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20781:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20781:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20781:29:0;;-1:-1:-1;20861:9:0::1;:21:::0;-1:-1:-1;20857:92:0::1;;;20884:65;20915:10;20939:9;20927;:21;20884:30;:65::i;:::-;17535:1;19983:974:::0;;;;;;;;;;;:::o;29916:810::-;30129:21;30101:8;17480:15;17468:8;:27;;17460:64;;;;;-1:-1:-1;;;17460:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17460:64:0;;;;;;;;;;;;;;;30187:4:::1;-1:-1:-1::0;;;;;30176:15:0::1;:4;;30181:1;30176:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30176:7:0::1;-1:-1:-1::0;;;;;30176:15:0::1;;30168:57;;;::::0;;-1:-1:-1;;;30168:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;30168:57:0;;;;;;;;;;;;;::::1;;30246:55;30276:7;30285:9;30296:4;;30246:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30246:29:0::1;::::0;-1:-1:-1;;;30246:55:0:i:1;:::-;30236:65;;30334:9;30320:7;30328:1;30320:10;;;;;;;;;;;;;;:23;;30312:75;;;;-1:-1:-1::0;;;30312:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30404:4;-1:-1:-1::0;;;;;30398:19:0::1;;30425:7;30433:1;30425:10;;;;;;;;;;;;;;30398:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30398:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30398:40:0;;;;;30462:4;-1:-1:-1::0;;;;;30456:20:0::1;;30477:51;30502:7;30511:4;;30516:1;30511:7;;;;;;30477:51;30530:7;30538:1;30530:10;;;;;;;;;;;;;;30456:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;30456:85:0::1;-1:-1:-1::0;;;;;30456:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30456:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30456:85:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30456:85:0;30449:93:::1;;;;30553:24;30559:7;30568:4;;30553:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30574:2:0;;-1:-1:-1;30553:5:0::1;::::0;-1:-1:-1;;30553:24:0:i:1;:::-;30640:7;30648:1;30640:10;;;;;;;;;;;;;;30628:9;:22;30624:94;;;30652:66;30683:10;30707:7;30715:1;30707:10;;;;;;;;;;;;;;30695:9;:22;30652:30;:66::i;2533:449::-:0;2765:45;;;-1:-1:-1;;;;;2765:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2765:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;2754:57:0;;;;2719:12;;2733:17;;2754:10;;;;2765:45;2754:57;;;25:18:-1;2754:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2754:57:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;2718:93:0;;;;2844:7;:57;;;;-1:-1:-1;2856:11:0;;:16;;:44;;;2887:4;2876:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2876:24:0;2856:44;2822:152;;;;-1:-1:-1;;;2822:152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2533:449;;;;;:::o;3496:217::-;3609:12;;;3569;3609;;;;;;;;;-1:-1:-1;;;;;3587:7:0;;;3602:5;;3587:35;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;3587:35:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;3568:54:0;;;3641:7;3633:72;;;;-1:-1:-1;;;3633:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3496:217;;;:::o;14466:519::-;14559:14;14605:1;14594:8;:12;14586:68;;;;-1:-1:-1;;;14586:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14685:1;14673:9;:13;:31;;;;;14703:1;14690:10;:14;14673:31;14665:84;;;;-1:-1:-1;;;14665:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14760:20;14783:18;:8;14796:4;14783:18;:12;:18;:::i;:::-;14760:41;-1:-1:-1;14812:14:0;14829:31;14760:41;14849:10;14829:31;:19;:31;:::i;:::-;14812:48;-1:-1:-1;14871:16:0;14890:41;14915:15;14890:20;:9;14904:5;14890:20;:13;:20;:::i;:::-;:24;:41;:24;:41;:::i;:::-;14871:60;;14966:11;14954:9;:23;;;;;;;14466:519;-1:-1:-1;;;;;;;14466:519:0:o;15662:511::-;15763:21;15820:1;15805:4;:11;:16;;15797:59;;;;;-1:-1:-1;;;15797:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15888:4;:11;15877:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15877:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;15877:23:0;;15867:33;;15924:8;15911:7;15919:1;15911:10;;;;;;;;;;;;;:21;;;;;15948:6;15943:223;15974:1;15960:4;:11;:15;15956:1;:19;15943:223;;;15998:14;16014:15;16033:42;16045:7;16054:4;16059:1;16054:7;;;;;;;;;;;;;;16063:4;16068:1;16072;16068:5;16063:11;;;;;;;;;;;;;;16033;:42::i;:::-;15997:78;;;;16107:47;16120:7;16128:1;16120:10;;;;;;;;;;;;;;16132:9;16143:10;16107:12;:47::i;:::-;16090:7;16098:1;16102;16098:5;16090:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;15977:3:0;;15943:223;;;;15662:511;;;;;:::o;12940:478::-;13029:12;13055:14;13071;13089:26;13100:6;13108;13089:10;:26::i;:::-;13253:32;;;-1:-1:-1;;13253:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;13253:32:0;;;;;13243:43;;;;;;-1:-1:-1;;;;;;13156:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;13156:251:0;;;;;;;13146:262;;;;;;;;;12940:478;-1:-1:-1;;;;;12940:478:0:o;2990:498::-;3261:51;;;-1:-1:-1;;;;;3261:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;3261:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;3250:63:0;;;;3215:12;;3229:17;;3250:10;;;;3261:51;3250:63;;;25:18:-1;3250:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;3250:63:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;3214:99:0;;;;3346:7;:57;;;;-1:-1:-1;3358:11:0;;:16;;:44;;;3389:4;3378:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;3378:24:0;3358:44;3324:156;;;;-1:-1:-1;;;3324:156:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2990:498;;;;;;:::o;25524:735::-;25631:6;25626:626;25657:1;25643:4;:11;:15;25639:1;:19;25626:626;;;25681:13;25696:14;25715:4;25720:1;25715:7;;;;;;;;;;;;;;25724:4;25729:1;25733;25729:5;25724:11;;;;;;;;;;;;;;25680:56;;;;25752:14;25771:42;25799:5;25806:6;25771:27;:42::i;:::-;25751:62;;;25828:14;25845:7;25853:1;25857;25853:5;25845:14;;;;;;;;;;;;;;25828:31;;25875:15;25892;25920:6;-1:-1:-1;;;;;25911:15:0;:5;-1:-1:-1;;;;;25911:15:0;;:61;;25953:9;25969:1;25911:61;;;25935:1;25939:9;25911:61;25874:98;;;;25987:10;26018:1;26004:4;:11;:15;26000:1;:19;:82;;26079:3;26000:82;;;26022:54;26047:7;26056:6;26064:4;26069:1;26073;26069:5;26064:11;;;;;;;;;;;;;;26022:24;:54::i;:::-;25987:95;;26112:48;26137:7;26146:5;26153:6;26112:24;:48::i;:::-;-1:-1:-1;;;;;26097:69:0;;26185:10;26197;26209:2;26223:1;26213:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;26213:12:0;87:42:-1;143:17;;-1:-1;26213:12:0;;26097:143;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26097:143:0;-1:-1:-1;;;;;26097:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;26097:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26097:143:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;25660:3:0;;;;;-1:-1:-1;25626:626:0;;-1:-1:-1;;;;;;;;25626:626:0;;;25524:735;;;:::o;16254:532::-;16355:21;16412:1;16397:4;:11;:16;;16389:59;;;;;-1:-1:-1;;;16389:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16480:4;:11;16469:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16469:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;16469:23:0;;16459:33;;16533:9;16503:7;16528:1;16511:7;:14;:18;16503:27;;;;;;;;;;;;;;;;;:39;16567:11;;-1:-1:-1;;16567:15:0;16553:226;16584:5;;16553:226;;16612:14;16628:15;16647:42;16659:7;16668:4;16677:1;16673;:5;16668:11;;;;;;;;;;;;;;16681:4;16686:1;16681:7;;;;;;;16647:42;16611:78;;;;16721:46;16733:7;16741:1;16733:10;;;;;;;;;;;;;;16745:9;16756:10;16721:11;:46::i;:::-;16704:7;16716:1;16712;:5;16704:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;16591:3:0;16553:226;;30873:1214;30986:6;30981:1099;31012:1;30998:4;:11;:15;30994:1;:19;30981:1099;;;31036:13;31051:14;31070:4;31075:1;31070:7;;;;;;;;;;;;;;31079:4;31084:1;31088;31084:5;31079:11;;;;;;;;;;;;;;31035:56;;;;31107:14;31126:42;31154:5;31161:6;31126:27;:42::i;:::-;31106:62;;;31183:19;31220:48;31245:7;31254:5;31261:6;31220:24;:48::i;:::-;31183:86;;31284:16;31315:17;31403:13;31418;31436:4;-1:-1:-1;;;;;31436:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31436:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31436:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;31436:18:0;;;;;;;-1:-1:-1;;;;;31402:52:0;;;;-1:-1:-1;31402:52:0;;-1:-1:-1;31470:17:0;;-1:-1:-1;;;;;31511:15:0;;;;;;;:61;;31553:8;31563;31511:61;;;31530:8;31540;31511:61;31469:103;;;;31601:56;31644:12;31608:5;-1:-1:-1;;;;;31601:23:0;;31633:4;31601:38;;;;;;;;;;;;;-1:-1:-1;;;;;31601:38:0;-1:-1:-1;;;;;31601:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;31601:56:0;31587:70;;31687:71;31717:11;31730:12;31744:13;31687:29;:71::i;:::-;31672:86;;30981:1099;;;;31789:15;31806;31834:6;-1:-1:-1;;;;;31825:15:0;:5;-1:-1:-1;;;;;31825:15:0;;:67;;31870:12;31889:1;31825:67;;;31849:1;31853:12;31825:67;31788:104;;;;31907:10;31938:1;31924:4;:11;:15;31920:1;:19;:82;;31999:3;31920:82;;;31942:54;31967:7;31976:6;31984:4;31989:1;31993;31989:5;31984:11;;;;;;;31942:54;32055:12;;;32065:1;32055:12;;;;;;;;;;-1:-1:-1;;;32017:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;32017:51:0;;;;;;;;;;;;;;;;;;;;;;31907:95;;-1:-1:-1;32017:9:0;;;;;;32027:10;;32039;;31907:95;;32055:12;;32017:51;;;;;;;;32055:12;;32017:51;;;;32055:12;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;32017:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32017:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;31015:3:0;;;;;-1:-1:-1;30981:1099:0;;-1:-1:-1;;;;;;;;;;30981:1099:0;1555:129;1639:5;;;1634:16;;;;1626:50;;;;;-1:-1:-1;;;1626:50:0;;;;;;;;;;;;-1:-1:-1;;;1626:50:0;;;;;;;;;;;;;;15106:474;15199:13;15245:1;15233:9;:13;15225:70;;;;-1:-1:-1;;;15225:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15326:1;15314:9;:13;:31;;;;;15344:1;15331:10;:14;15314:31;15306:84;;;;-1:-1:-1;;;15306:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15401:14;15418:35;15447:5;15418:24;:9;15432;15418:24;:13;:24;:::i;:::-;:28;:35;:28;:35;:::i;:::-;15401:52;-1:-1:-1;15464:16:0;15483:35;15513:4;15483:25;:10;15498:9;15483:25;:14;:25;:::i;:35::-;15464:54;;15540:32;15570:1;15553:11;15541:9;:23;;;;;;;15540:32;:29;:32;:::i;:::-;15529:43;15106:474;-1:-1:-1;;;;;;15106:474:0:o;14023:321::-;14105:12;14148:1;14138:7;:11;14130:61;;;;-1:-1:-1;;;14130:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14221:1;14210:8;:12;:28;;;;;14237:1;14226:8;:12;14210:28;14202:81;;;;-1:-1:-1;;;14202:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14328:8;14304:21;:7;14316:8;14304:21;:11;:21;:::i;:::-;:32;;;;;;;14023:321;-1:-1:-1;;;;14023:321:0:o;12499:349::-;12574:14;12590;12635:6;-1:-1:-1;;;;;12625:16:0;:6;-1:-1:-1;;;;;12625:16:0;;;12617:66;;;;-1:-1:-1;;;12617:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12722:6;-1:-1:-1;;;;;12713:15:0;:6;-1:-1:-1;;;;;12713:15:0;;:53;;12751:6;12759;12713:53;;;12732:6;12740;12713:53;12694:72;;-1:-1:-1;12694:72:0;-1:-1:-1;;;;;;12785:20:0;;12777:63;;;;;-1:-1:-1;;;12777:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12499:349;;;;;:::o;17839:1390::-;18152:50;;;-1:-1:-1;;;18152:50:0;;-1:-1:-1;;;;;18152:50:0;;;;;;;;;;;;;;;;18057:12;;;;;;18170:7;18152:34;;;;;;:50;;;;;;;;;;;;;;;:34;:50;;;2:2:-1;;;;27:1;24;17:12;2:2;18152:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18152:50:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;18152:50:0;-1:-1:-1;;;;;18152:64:0;;18148:150;;;18233:53;;;-1:-1:-1;;;18233:53:0;;-1:-1:-1;;;;;18233:53:0;;;;;;;;;;;;;;;;18251:7;18233:37;;;;;;:53;;;;;;;;;;;;;;;-1:-1:-1;18233:37:0;:53;;;2:2:-1;;;;27:1;24;17:12;2:2;18233:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18233:53:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;18148:150:0;18309:13;18324;18341:53;18370:7;18379:6;18387;18341:28;:53::i;:::-;18308:86;;;;18409:8;18421:1;18409:13;:30;;;;-1:-1:-1;18426:13:0;;18409:30;18405:817;;;18478:14;;-1:-1:-1;18494:14:0;;-1:-1:-1;18405:817:0;;;18542:19;18564:58;18587:14;18603:8;18613;18564:22;:58::i;:::-;18542:80;;18659:14;18641;:32;18637:574;;18720:10;18702:14;:28;;18694:79;;;;-1:-1:-1;;;18694:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18814:14;;-1:-1:-1;18830:14:0;-1:-1:-1;18830:14:0;18637:574;;;18886:19;18908:58;18931:14;18947:8;18957;18908:22;:58::i;:::-;18886:80;;19010:14;18992;:32;;18985:40;;;;19070:10;19052:14;:28;;19044:79;;;;-1:-1:-1;;;19044:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19164:14;-1:-1:-1;19180:14:0;;-1:-1:-1;18637:574:0;18405:817;;17839:1390;;;;;;;;;;;:::o;1692:142::-;1744:6;1771;;;:30;;-1:-1:-1;;1786:5:0;;;1800:1;1795;1786:5;1795:1;1781:15;;;;;:20;1771:30;1763:63;;;;;-1:-1:-1;;;1763:63:0;;;;;;;;;;;;-1:-1:-1;;;1763:63:0;;;;;;;;;;;;;;1419:128;1503:5;;;1498:16;;;;1490:49;;;;;-1:-1:-1;;;1490:49:0;;;;;;;;;;;;-1:-1:-1;;;1490:49:0;;;;;;;;;;;;;;13476:434;13569:13;13584;13611:14;13630:26;13641:6;13649;13630:10;:26::i;:::-;13610:46;;;13667:32;13675:7;13684:6;13692;13667:7;:32::i;:::-;;13711:13;13726;13759:32;13767:7;13776:6;13784;13759:7;:32::i;:::-;-1:-1:-1;;;;;13744:60:0;;:62;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13744:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13744:62:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;13744:62:0;;;;;;;-1:-1:-1;;;;;13710:96:0;;;;-1:-1:-1;13710:96:0;;-1:-1:-1;;;;;;13840:16:0;;;;;;;:62;;13883:8;13893;13840:62;;;13860:8;13870;13840:62;13817:85;;;;-1:-1:-1;13476:434:0;-1:-1:-1;;;;;;;13476:434:0:o

Swarm Source

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