Contract 0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf28 3

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x6b7a12b6899f3fa8fe722124010bb1ce6eae56d72f157b6cf5d88248d232d5ceSwap Exact Token...86654892023-06-06 2:17:3510 mins ago0x12c8de40ba484fad04bf6de085f2f29d5663070e IN  0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf280 CRO0.7679403471080
0x9bfa43b366d972276f2eb7c38f023a51a4ba28aa75233447f28c966c50b1c8daAdd Liquidity86648792023-06-06 1:20:011 hr 8 mins agoCronos ID Name mindyourcrypto.cro IN  0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf280 CRO0.7690714967830
0x8d6d20fc5ccc32fa1f88088725307b5445fa1b37ebbb7fb53459b5885505c1ceSwap Exact Token...86648322023-06-06 1:15:361 hr 12 mins ago0xe75f3c4d9fefc6cc14319cfb04ff8aa1c652df54 IN  0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf280 CRO0.768002061790
0x4a895e2d7807358d998770e4c84d562c9269c8eb9cb31c168775635dc5f7d1e7Swap Exact Token...86636402023-06-05 23:23:103 hrs 4 mins ago0x84c3a23e021931ed4ba8f6d6afec8e329f0764ac IN  0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf280 CRO0.7680109213060
0xeee0619f9271a578495064fdf65d7e81dd7c9605149a5ab68bb7f0cc660136a0Swap Exact Token...86633462023-06-05 22:55:263 hrs 32 mins ago0x659c228b329190c1d8cc523d5e7e2ff5939158d7 IN  0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf280 CRO0.7680131273330
0x123eb4ff0b2bcea989f6689ef767ea692d15039e1b79c0dbb4f608d6f9fe079dAdd Liquidity86628482023-06-05 22:08:264 hrs 19 mins ago0x536aebe06893d92e73084728ee28a2d888fbfc0a IN  0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf280 CRO13.2022632873440
0x7a916d2b1f767f3a94d6fb550405cdfddbf9b73957423eb7dd2880c7f9265205Swap Exact ETH F...86628232023-06-05 22:06:044 hrs 21 mins ago0x536aebe06893d92e73084728ee28a2d888fbfc0a IN  0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf2830 CRO0.5954362468140
0x072a731db73408805994e3e3a571e0cf593aa0f81c82dc640e98f6b2eddbf752Swap Exact Token...86627802023-06-05 22:02:004 hrs 26 mins ago0x12c8de40ba484fad04bf6de085f2f29d5663070e IN  0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf280 CRO0.7679605063740
0x63920df54251a78f0e0f241610d4b7661cf288656d46986ea4e3a33d4ff3be6bSwap Exact Token...86626922023-06-05 21:53:414 hrs 34 mins agoCronos ID Name vamos.cro IN  0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf280 CRO0.7680747500290
0xd4860fca8fba59b8f3157856890a5e521dc30214038a1b2d56af8f2738344452Swap Exact Token...86625372023-06-05 21:39:014 hrs 49 mins ago0x2ae5aa38418e5f3a3b6ac662503083740b19fc60 IN  0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf280 CRO0.5697859481570
0xd641832eda18aadf1757f9d4eee5390d3a5c7f07c2d574ee509ea8a3197f0d0eSwap Exact Token...86621242023-06-05 21:00:005 hrs 28 mins ago0x54102e6b58d0687579f6ffdce66befab7885b324 IN  0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf280 CRO0.674691882536 4,970.398863555
0xabf49e816068167874aed9f97e7bf15bd7b8403f693507979a7ad6ee140dc540Add Liquidity ET...86616482023-06-05 20:14:576 hrs 13 mins ago0x66400eec26454514f2e5cebf5499596026b90010 IN  0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf28129.5886341794294 CRO0.816648929842 4,735.23982003
0x5dec1c0f42ce6cd25f860293b1bc539fe99d67936f03b6ea5cbb7c4a21c14aa9Swap Exact Token...86616162023-06-05 20:11:546 hrs 16 mins ago0x66400eec26454514f2e5cebf5499596026b90010 IN  0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf280 CRO0.745596886323 4,735.241280628
0x4267eafa482e0ea03a895fe7c69e444272e12f9ecf3806087d21a8392179fdd9Swap Exact ETH F...86615992023-06-05 20:10:186 hrs 17 mins ago0x04e823d9c3b4e7cbe1e28081dabad4c0c7e09c82 IN  0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf28180 CRO0.686027662625 4,735.242051021
0x62261949ec66175b8a532ef47384f35e7fd627dfe1db8f6aa0f77eeca883edaeSwap Exact ETH F...86615962023-06-05 20:10:016 hrs 18 mins ago0x04e823d9c3b4e7cbe1e28081dabad4c0c7e09c82 IN  0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf28180 CRO0.686027681886 4,735.242183968
0xcfc57c2d4709d73e0aadea37f53c38ad57f2ed7cc83da29d3cedfa68783a7e07Swap Exact ETH F...86615942023-06-05 20:09:506 hrs 18 mins ago0x04e823d9c3b4e7cbe1e28081dabad4c0c7e09c82 IN  0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf28180 CRO0.746207889209 4,735.24227539
0x6dc242fd677805f3c5fc925f4fc307288482985b078b05d5f2570c89840d2406Swap Exact ETH F...86615922023-06-05 20:09:386 hrs 18 mins ago0x04e823d9c3b4e7cbe1e28081dabad4c0c7e09c82 IN  0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf28180 CRO0.686027708475 4,735.242367497
0x688636a24aab9ca3f65a7a73513dd5d93f5cb02fcfff9416407344ad184b97a8Swap Exact Token...86615692023-06-05 20:07:276 hrs 20 mins ago0xbc48fb17381acfc5a1da190c773985b8e6e8d8e0 IN  0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf280 CRO0.7679694269180
0xe99f73fd5e3fe1c23c7a76b453dc829a48688171769886eec9d22b976ab334b7Swap Exact Token...86612672023-06-05 19:38:516 hrs 49 mins ago0x2b3dfa886450cc431ac39ffe89d3125c97d16085 IN  0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf280 CRO2.0852105178560
0x13e856859eae6df44a213b5362bc67a5dd3f49c9ff518c9c2830144a151352e2Swap Exact ETH F...86609722023-06-05 19:10:577 hrs 17 mins ago0xa090220ec6d17dc9ddcd683ed234668492da262a IN  0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf28470.445870045898637 CRO0.6858712260580
0x672e10ab35d1569fe4d00b7163858ab8a9e97b072d91c7825ea7a8422c97e018Swap Exact Token...86609002023-06-05 19:04:087 hrs 23 mins ago0x12c8de40ba484fad04bf6de085f2f29d5663070e IN  0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf280 CRO0.7679742739630
0x1175784f53401a984895e81e1b48cd151d2f1b463b19bcdc37a16df1b6c72261Swap Exact Token...86608372023-06-05 18:58:107 hrs 29 mins ago0x4bd5bb37eba2c314afca0b029dd0fbea78bc15e8 IN  0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf280 CRO0.768031530230
0x662d10dab7f392c0d93d8f6625258832d467cca0b840974ecd0471f43bdd93b2Swap Exact Token...86604032023-06-05 18:17:158 hrs 10 mins ago0x76a76e83e70ecd640f4c0f75b0cbc4327ab70ed3 IN  0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf280 CRO0.7679211316580
0x99e9938792f2e58f4c71effdc9c1ad346e8b947cf0ae57badd76add1035c20e8Swap Exact ETH F...86603932023-06-05 18:16:188 hrs 11 mins ago0x5be4a5705e4fd2e842b3f95bbd24e1b2776e7cc2 IN  0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf281,801 CRO0.6858750376830
0xcda33cb51d7c4b50679c486ef2e358c598c2283580fb232fb08b2402675a4747Swap Exact Token...86603522023-06-05 18:12:258 hrs 15 mins ago0x12c8de40ba484fad04bf6de085f2f29d5663070e IN  0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf280 CRO0.7679783286060
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x6b7a12b6899f3fa8fe722124010bb1ce6eae56d72f157b6cf5d88248d232d5ce86654892023-06-06 2:17:3510 mins ago 0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf280x12c8de40ba484fad04bf6de085f2f29d5663070e86.392474161275017889 CRO
0x6b7a12b6899f3fa8fe722124010bb1ce6eae56d72f157b6cf5d88248d232d5ce86654892023-06-06 2:17:3510 mins ago Cronos: WCRO Token 0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf2886.392474161275017889 CRO
0x8d6d20fc5ccc32fa1f88088725307b5445fa1b37ebbb7fb53459b5885505c1ce86648322023-06-06 1:15:361 hr 12 mins ago 0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf280xe75f3c4d9fefc6cc14319cfb04ff8aa1c652df5430.849761986067210599 CRO
0x8d6d20fc5ccc32fa1f88088725307b5445fa1b37ebbb7fb53459b5885505c1ce86648322023-06-06 1:15:361 hr 12 mins ago Cronos: WCRO Token 0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf2830.849761986067210599 CRO
0x929f35d60de70072cb17412bc36d519e167f344acb05ab6f700e19a55b34396886647302023-06-06 1:06:001 hr 22 mins ago 0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf28 0xf58cd1dde050cbe8e77bc25c9801e93ad433108f10.723697230002981539 CRO
0x929f35d60de70072cb17412bc36d519e167f344acb05ab6f700e19a55b34396886647302023-06-06 1:06:001 hr 22 mins ago 0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf28 Cronos: WCRO Token67.024100392062748461 CRO
0x929f35d60de70072cb17412bc36d519e167f344acb05ab6f700e19a55b34396886647302023-06-06 1:06:001 hr 22 mins ago 0xf58cd1dde050cbe8e77bc25c9801e93ad433108f 0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf2877.74779762206573 CRO
0x480b42c23cc5d1f8b1fc06d17b1625c3b585697715dc8a210740c63e0acadb5886647252023-06-06 1:05:311 hr 22 mins ago 0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf28 0xf58cd1dde050cbe8e77bc25c9801e93ad433108f187.010556213003302537 CRO
0x480b42c23cc5d1f8b1fc06d17b1625c3b585697715dc8a210740c63e0acadb5886647252023-06-06 1:05:311 hr 22 mins ago 0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf28 Cronos: WCRO Token1,168.966381732080297463 CRO
0x480b42c23cc5d1f8b1fc06d17b1625c3b585697715dc8a210740c63e0acadb5886647252023-06-06 1:05:311 hr 22 mins ago 0xf58cd1dde050cbe8e77bc25c9801e93ad433108f 0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf281,355.9769379450836 CRO
0x4a895e2d7807358d998770e4c84d562c9269c8eb9cb31c168775635dc5f7d1e786636402023-06-05 23:23:103 hrs 4 mins ago 0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf280x84c3a23e021931ed4ba8f6d6afec8e329f0764ac255.030736314571971896 CRO
0x4a895e2d7807358d998770e4c84d562c9269c8eb9cb31c168775635dc5f7d1e786636402023-06-05 23:23:103 hrs 4 mins ago Cronos: WCRO Token 0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf28255.030736314571971896 CRO
0xeee0619f9271a578495064fdf65d7e81dd7c9605149a5ab68bb7f0cc660136a086633462023-06-05 22:55:263 hrs 32 mins ago 0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf280x659c228b329190c1d8cc523d5e7e2ff5939158d712.559019445990362427 CRO
0xeee0619f9271a578495064fdf65d7e81dd7c9605149a5ab68bb7f0cc660136a086633462023-06-05 22:55:263 hrs 32 mins ago Cronos: WCRO Token 0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf2812.559019445990362427 CRO
0x123eb4ff0b2bcea989f6689ef767ea692d15039e1b79c0dbb4f608d6f9fe079d86628482023-06-05 22:08:264 hrs 19 mins ago 0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf28 Cronos: WCRO Token0.77202109674253608 CRO
0x123eb4ff0b2bcea989f6689ef767ea692d15039e1b79c0dbb4f608d6f9fe079d86628482023-06-05 22:08:264 hrs 19 mins ago Crooks Finance: CRKS Token 0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf280.77202109674253608 CRO
0x123eb4ff0b2bcea989f6689ef767ea692d15039e1b79c0dbb4f608d6f9fe079d86628482023-06-05 22:08:264 hrs 19 mins ago 0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf28 Crooks Finance: CRKS Token4.374786214874371138 CRO
0x123eb4ff0b2bcea989f6689ef767ea692d15039e1b79c0dbb4f608d6f9fe079d86628482023-06-05 22:08:264 hrs 19 mins ago Cronos: WCRO Token 0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf284.374786214874371138 CRO
0x7a916d2b1f767f3a94d6fb550405cdfddbf9b73957423eb7dd2880c7f926520586628232023-06-05 22:06:044 hrs 21 mins ago 0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf28 Cronos: WCRO Token30 CRO
0x072a731db73408805994e3e3a571e0cf593aa0f81c82dc640e98f6b2eddbf75286627802023-06-05 22:02:004 hrs 26 mins ago 0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf280x12c8de40ba484fad04bf6de085f2f29d5663070e65.004473286225515656 CRO
0x072a731db73408805994e3e3a571e0cf593aa0f81c82dc640e98f6b2eddbf75286627802023-06-05 22:02:004 hrs 26 mins ago Cronos: WCRO Token 0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf2865.004473286225515656 CRO
0x63920df54251a78f0e0f241610d4b7661cf288656d46986ea4e3a33d4ff3be6b86626922023-06-05 21:53:414 hrs 34 mins ago 0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf28Cronos ID Name vamos.cro22.348661940536079263 CRO
0x63920df54251a78f0e0f241610d4b7661cf288656d46986ea4e3a33d4ff3be6b86626922023-06-05 21:53:414 hrs 34 mins ago Cronos: WCRO Token 0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf2822.348661940536079263 CRO
0xd4860fca8fba59b8f3157856890a5e521dc30214038a1b2d56af8f273834445286625372023-06-05 21:39:014 hrs 49 mins ago 0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf280x2ae5aa38418e5f3a3b6ac662503083740b19fc6066.88051976880407933 CRO
0xd4860fca8fba59b8f3157856890a5e521dc30214038a1b2d56af8f273834445286625372023-06-05 21:39:014 hrs 49 mins ago Cronos: WCRO Token 0x62bc82f8ae8b6ebbebc5aef9147f88ddede7cf2866.88051976880407933 CRO
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PhenixV2Router

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2023-01-29
*/

pragma solidity =0.6.6;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint256);

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;

    function setPairTradeFee(
        address _pair,
        uint256 _tradeFee,
        uint256 _tradeFeeDenominator
    ) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function tradeFee() external view returns (uint256);

    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    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 (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to) external returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function setTradeFee(uint256 _tradeFee, uint256 _tradeFeeDenominator) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut,
        uint256 tradeFee
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut,
        uint256 tradeFee
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

interface IERC20 {
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);
}

interface IWETH {
    function deposit() external payable;

    function transfer(address to, uint256 value) external returns (bool);

    function withdraw(uint256) external;
}

contract PhenixV2Router is IUniswapV2Router02 {
    using SafeMath for uint256;

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

    modifier ensure(uint256 deadline) {
        require(deadline >= block.timestamp, 'PhenixV2Router: 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,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin
    ) internal virtual returns (uint256 amountA, uint256 amountB) {
        // create the pair if it doesn't exist yet
        if (IUniswapV2Factory(factory).getPair(tokenA, tokenB) == address(0)) {
            IUniswapV2Factory(factory).createPair(tokenA, tokenB);
        }
        (uint256 reserveA, uint256 reserveB) = UniswapV2Library.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint256 amountBOptimal = UniswapV2Library.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'PhenixV2Router: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint256 amountAOptimal = UniswapV2Library.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'PhenixV2Router: INSUFFICIENT_A_AMOUNT');
                (amountA, amountB) = (amountAOptimal, amountBDesired);
            }
        }
    }

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        virtual
        override
        ensure(deadline)
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        )
    {
        (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin);
        address pair = UniswapV2Library.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IUniswapV2Pair(pair).mint(to);
    }

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        virtual
        override
        ensure(deadline)
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        )
    {
        (amountToken, amountETH) = _addLiquidity(token, WETH, amountTokenDesired, msg.value, amountTokenMin, amountETHMin);
        address pair = UniswapV2Library.pairFor(factory, token, WETH);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWETH(WETH).deposit{ value: amountETH }();
        assert(IWETH(WETH).transfer(pair, amountETH));
        liquidity = IUniswapV2Pair(pair).mint(to);
        // refund dust eth, if any
        if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH);
    }

    // **** REMOVE LIQUIDITY ****
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) public virtual override ensure(deadline) returns (uint256 amountA, uint256 amountB) {
        address pair = UniswapV2Library.pairFor(factory, tokenA, tokenB);
        IUniswapV2Pair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint256 amount0, uint256 amount1) = IUniswapV2Pair(pair).burn(to);
        (address token0, ) = UniswapV2Library.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'PhenixV2Router: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'PhenixV2Router: INSUFFICIENT_B_AMOUNT');
    }

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) public virtual override ensure(deadline) returns (uint256 amountToken, uint256 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,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external virtual override returns (uint256 amountA, uint256 amountB) {
        address pair = UniswapV2Library.pairFor(factory, tokenA, tokenB);
        uint256 value = approveMax ? uint256(-1) : liquidity;
        IUniswapV2Pair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline);
    }

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external virtual override returns (uint256 amountToken, uint256 amountETH) {
        address pair = UniswapV2Library.pairFor(factory, token, WETH);
        uint256 value = approveMax ? uint256(-1) : liquidity;
        IUniswapV2Pair(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,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) public virtual override ensure(deadline) returns (uint256 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,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external virtual override returns (uint256 amountETH) {
        address pair = UniswapV2Library.pairFor(factory, token, WETH);
        uint256 value = approveMax ? uint256(-1) : liquidity;
        IUniswapV2Pair(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(
        uint256[] memory amounts,
        address[] memory path,
        address _to
    ) internal virtual {
        for (uint256 i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0, ) = UniswapV2Library.sortTokens(input, output);
            uint256 amountOut = amounts[i + 1];
            (uint256 amount0Out, uint256 amount1Out) = input == token0 ? (uint256(0), amountOut) : (amountOut, uint256(0));
            address to = i < path.length - 2 ? UniswapV2Library.pairFor(factory, output, path[i + 2]) : _to;
            IUniswapV2Pair(UniswapV2Library.pairFor(factory, input, output)).swap(amount0Out, amount1Out, to, new bytes(0));
        }
    }

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external virtual override ensure(deadline) returns (uint256[] memory amounts) {
        amounts = UniswapV2Library.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'PhenixV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]);
        _swap(amounts, path, to);
    }

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external virtual override ensure(deadline) returns (uint256[] memory amounts) {
        amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'PhenixV2Router: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]);
        _swap(amounts, path, to);
    }

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable virtual override ensure(deadline) returns (uint256[] memory amounts) {
        require(path[0] == WETH, 'PhenixV2Router: INVALID_PATH');
        amounts = UniswapV2Library.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'PhenixV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).deposit{ value: amounts[0] }();
        assert(IWETH(WETH).transfer(UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
    }

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external virtual override ensure(deadline) returns (uint256[] memory amounts) {
        require(path[path.length - 1] == WETH, 'PhenixV2Router: INVALID_PATH');
        amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'PhenixV2Router: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]);
        _swap(amounts, path, address(this));
        IWETH(WETH).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external virtual override ensure(deadline) returns (uint256[] memory amounts) {
        require(path[path.length - 1] == WETH, 'PhenixV2Router: INVALID_PATH');
        amounts = UniswapV2Library.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'PhenixV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]);
        _swap(amounts, path, address(this));
        IWETH(WETH).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable virtual override ensure(deadline) returns (uint256[] memory amounts) {
        require(path[0] == WETH, 'PhenixV2Router: INVALID_PATH');
        amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'PhenixV2Router: EXCESSIVE_INPUT_AMOUNT');
        IWETH(WETH).deposit{ value: amounts[0] }();
        assert(IWETH(WETH).transfer(UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
        // 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 (uint256 i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0, ) = UniswapV2Library.sortTokens(input, output);
            IUniswapV2Pair pair = IUniswapV2Pair(UniswapV2Library.pairFor(factory, input, output));
            uint256 amountInput;
            uint256 amountOutput;
            {
                // scope to avoid stack too deep errors
                (uint256 reserve0, uint256 reserve1, ) = pair.getReserves();
                (uint256 reserveInput, uint256 reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
                amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput);
                amountOutput = UniswapV2Library.getAmountOut(amountInput, reserveInput, reserveOutput, pair.tradeFee());
            }
            (uint256 amount0Out, uint256 amount1Out) = input == token0 ? (uint256(0), amountOutput) : (amountOutput, uint256(0));
            address to = i < path.length - 2 ? UniswapV2Library.pairFor(factory, output, path[i + 2]) : _to;
            pair.swap(amount0Out, amount1Out, to, new bytes(0));
        }
    }

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external virtual override ensure(deadline) {
        TransferHelper.safeTransferFrom(path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amountIn);
        uint256 balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'PhenixV2Router: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable virtual override ensure(deadline) {
        require(path[0] == WETH, 'PhenixV2Router: INVALID_PATH');
        uint256 amountIn = msg.value;
        IWETH(WETH).deposit{ value: amountIn }();
        assert(IWETH(WETH).transfer(UniswapV2Library.pairFor(factory, path[0], path[1]), amountIn));
        uint256 balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'PhenixV2Router: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external virtual override ensure(deadline) {
        require(path[path.length - 1] == WETH, 'PhenixV2Router: INVALID_PATH');
        TransferHelper.safeTransferFrom(path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amountIn);
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint256 amountOut = IERC20(WETH).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'PhenixV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).withdraw(amountOut);
        TransferHelper.safeTransferETH(to, amountOut);
    }

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

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

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut,
        uint256 tradeFee
    ) public pure virtual override returns (uint256 amountIn) {
        return UniswapV2Library.getAmountIn(amountOut, reserveIn, reserveOut, tradeFee);
    }

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

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

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

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

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

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

library UniswapV2Library {
    using SafeMath for uint256;

    // 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, 'PhenixV2Library: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'PhenixV2Library: 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(
            uint256(
                keccak256(
                    abi.encodePacked(
                        hex'ff',
                        factory,
                        keccak256(abi.encodePacked(token0, token1)),
                        hex'3e96e661fa6aba8ad6e3f53f8dbd07e407ae9afb2751ba93c642efb05a02ff52' // init code hash
                    )
                )
            )
        );
    }

    // fetches and sorts the reserves for a pair
    function getReserves(
        address factory,
        address tokenA,
        address tokenB
    ) internal view returns (uint256 reserveA, uint256 reserveB) {
        (address token0, ) = sortTokens(tokenA, tokenB);
        (uint256 reserve0, uint256 reserve1, ) = IUniswapV2Pair(pairFor(factory, tokenA, tokenB)).getReserves();
        (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
    }

    // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset
    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) internal pure returns (uint256 amountB) {
        require(amountA > 0, 'PhenixV2Library: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'PhenixV2Library: INSUFFICIENT_LIQUIDITY');
        amountB = amountA.mul(reserveB) / reserveA;
    }

    function getTradeFee(
        address factory,
        address tokenA,
        address tokenB
    ) internal view returns (uint256 tradeFee) {
        tradeFee = IUniswapV2Pair(pairFor(factory, tokenA, tokenB)).tradeFee();
    }

    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset
    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut,
        uint256 tradeFee
    ) internal pure returns (uint256 amountOut) {
        require(amountIn > 0, 'PhenixV2Library: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'PhenixV2Library: INSUFFICIENT_LIQUIDITY');
        uint256 amountInWithFee = amountIn.mul(uint256(100000).sub(tradeFee));
        uint256 numerator = amountInWithFee.mul(reserveOut);
        uint256 denominator = reserveIn.mul(100000).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(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut,
        uint256 tradeFee
    ) internal pure returns (uint256 amountIn) {
        require(amountOut > 0, 'PhenixV2Library: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'PhenixV2Library: INSUFFICIENT_LIQUIDITY');
        uint256 numerator = reserveIn.mul(amountOut).mul(100000);
        uint256 denominator = reserveOut.sub(amountOut).mul(uint256(100000).sub(tradeFee));
        amountIn = (numerator / denominator).add(1);
    }

    // performs chained getAmountOut calculations on any number of pairs
    function getAmountsOut(
        address factory,
        uint256 amountIn,
        address[] memory path
    ) internal view returns (uint256[] memory amounts) {
        require(path.length >= 2, 'PhenixV2Library: INVALID_PATH');
        amounts = new uint256[](path.length);
        amounts[0] = amountIn;
        for (uint256 i; i < path.length - 1; i++) {
            (uint256 reserveIn, uint256 reserveOut) = getReserves(factory, path[i], path[i + 1]);
            amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut, getTradeFee(factory, path[i], path[i + 1]));
        }
    }

    // performs chained getAmountIn calculations on any number of pairs
    function getAmountsIn(
        address factory,
        uint256 amountOut,
        address[] memory path
    ) internal view returns (uint256[] memory amounts) {
        require(path.length >= 2, 'PhenixV2Library: INVALID_PATH');
        amounts = new uint256[](path.length);
        amounts[amounts.length - 1] = amountOut;
        for (uint256 i = path.length - 1; i > 0; i--) {
            (uint256 reserveIn, uint256 reserveOut) = getReserves(factory, path[i - 1], path[i]);
            amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut, getTradeFee(factory, path[i - 1], path[i]));
        }
    }
}

// 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: 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: 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: TRANSFER_FROM_FAILED');
    }

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

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"},{"internalType":"uint256","name":"tradeFee","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"},{"internalType":"uint256","name":"tradeFee","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"}]

60c060405234801561001057600080fd5b50604051620048d4380380620048d48339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c61474f620001856000398061015f5280610cf05280610d2b5280610e0d528061102b52806113b5528061154052806119075280611a015280611ab75280611b855280611ccb5280611d535280611f8b528061200e52806120bd5280612189528061221e528061229252806127905280612a035280612a595280612a8d5280612b015280612ca15280612de45280612e6c525080610e9b5280610f7252806110f1528061112a52806112655280611443528061151e528061168e5280611c185280611d855280611edb52806122c4528061251d5280612715528061273e528061276e52806128db5280612a375280612d345280612e9e528061368952806136cc5280613bdb5280613dbf52806140ff52806141ad528061422d525061474f6000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a1c578063d06ca61f14610a31578063ded9382a14610ae6578063e8e3370014610b59578063f305d71914610bd9578063fb3bdb4114610c1f57610188565b80638803dbee146107eb578063ad5c464814610881578063ad615dec146108b2578063af2979eb146108e8578063b6f9de951461093b578063baa2abde146109bf57610188565b806352707d8c1161010857806352707d8c1461053e578063571fd0121461058c5780635b0d5984146105c85780635c11d7951461063b578063791ac947146106d15780637ff36ab51461076757610188565b806302751cec1461018d57806318cbafe5146101f95780631f00ca74146102df5780632195995c1461039457806338ed1739146104125780634a25d94a146104a857610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610ca3565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061028f600480360360a081101561021c57600080fd5b813591602081013591810190606081016040820135600160201b81111561024257600080fd5b82018360208201111561025457600080fd5b803590602001918460208302840111600160201b8311171561027557600080fd5b91935091506001600160a01b038135169060200135610dbd565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102cb5781810151838201526020016102b3565b505050509050019250505060405180910390f35b3480156102eb57600080fd5b5061028f6004803603604081101561030257600080fd5b81359190810190604081016020820135600160201b81111561032357600080fd5b82018360208201111561033557600080fd5b803590602001918460208302840111600160201b8311171561035657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110ea945050505050565b3480156103a057600080fd5b506101e060048036036101608110156103b857600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611120565b34801561041e57600080fd5b5061028f600480360360a081101561043557600080fd5b813591602081013591810190606081016040820135600160201b81111561045b57600080fd5b82018360208201111561046d57600080fd5b803590602001918460208302840111600160201b8311171561048e57600080fd5b91935091506001600160a01b03813516906020013561121a565b3480156104b457600080fd5b5061028f600480360360a08110156104cb57600080fd5b813591602081013591810190606081016040820135600160201b8111156104f157600080fd5b82018360208201111561050357600080fd5b803590602001918460208302840111600160201b8311171561052457600080fd5b91935091506001600160a01b038135169060200135611365565b34801561054a57600080fd5b5061057a6004803603608081101561056157600080fd5b50803590602081013590604081013590606001356114f1565b60408051918252519081900360200190f35b34801561059857600080fd5b5061057a600480360360808110156105af57600080fd5b5080359060208101359060408101359060600135611508565b3480156105d457600080fd5b5061057a60048036036101408110156105ec57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611516565b34801561064757600080fd5b50610186600480360360a081101561065e57600080fd5b813591602081013591810190606081016040820135600160201b81111561068457600080fd5b82018360208201111561069657600080fd5b803590602001918460208302840111600160201b831117156106b757600080fd5b91935091506001600160a01b038135169060200135611624565b3480156106dd57600080fd5b50610186600480360360a08110156106f457600080fd5b813591602081013591810190606081016040820135600160201b81111561071a57600080fd5b82018360208201111561072c57600080fd5b803590602001918460208302840111600160201b8311171561074d57600080fd5b91935091506001600160a01b0381351690602001356118b9565b61028f6004803603608081101561077d57600080fd5b81359190810190604081016020820135600160201b81111561079e57600080fd5b8201836020820111156107b057600080fd5b803590602001918460208302840111600160201b831117156107d157600080fd5b91935091506001600160a01b038135169060200135611b3d565b3480156107f757600080fd5b5061028f600480360360a081101561080e57600080fd5b813591602081013591810190606081016040820135600160201b81111561083457600080fd5b82018360208201111561084657600080fd5b803590602001918460208302840111600160201b8311171561086757600080fd5b91935091506001600160a01b038135169060200135611e90565b34801561088d57600080fd5b50610896611f89565b604080516001600160a01b039092168252519081900360200190f35b3480156108be57600080fd5b5061057a600480360360608110156108d557600080fd5b5080359060208101359060400135611fad565b3480156108f457600080fd5b5061057a600480360360c081101561090b57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fc2565b6101866004803603608081101561095157600080fd5b81359190810190604081016020820135600160201b81111561097257600080fd5b82018360208201111561098457600080fd5b803590602001918460208302840111600160201b831117156109a557600080fd5b91935091506001600160a01b038135169060200135612143565b3480156109cb57600080fd5b506101e0600480360360e08110156109e257600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124cf565b348015610a2857600080fd5b50610896612713565b348015610a3d57600080fd5b5061028f60048036036040811015610a5457600080fd5b81359190810190604081016020820135600160201b811115610a7557600080fd5b820183602082011115610a8757600080fd5b803590602001918460208302840111600160201b83111715610aa857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612737945050505050565b348015610af257600080fd5b506101e06004803603610140811015610b0a57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612764565b348015610b6557600080fd5b50610bbb6004803603610100811015610b7d57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612878565b60408051938452602084019290925282820152519081900360600190f35b610bbb600480360360c0811015610bef57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356129b4565b61028f60048036036080811015610c3557600080fd5b81359190810190604081016020820135600160201b811115610c5657600080fd5b820183602082011115610c6857600080fd5b803590602001918460208302840111600160201b83111715610c8957600080fd5b91935091506001600160a01b038135169060200135612c59565b6000808242811015610cea576040805162461bcd60e51b815260206004820152601760248201526000805160206146b1833981519152604482015290519081900360640190fd5b610d19897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124cf565b9093509150610d29898685612fdb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8f57600080fd5b505af1158015610da3573d6000803e3d6000fd5b50505050610db18583613145565b50965096945050505050565b60608142811015610e03576040805162461bcd60e51b815260206004820152601760248201526000805160206146b1833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e3d57fe5b905060200201356001600160a01b03166001600160a01b031614610e96576040805162461bcd60e51b815260206004820152601c602482015260008051602061455f833981519152604482015290519081900360640190fd5b610ef47f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061323d92505050565b91508682600184510381518110610f0757fe5b60200260200101511015610f4c5760405162461bcd60e51b815260040180806020018281038252602a815260200180614535602a913960400191505060405180910390fd5b610fea86866000818110610f5c57fe5b905060200201356001600160a01b031633610fd07f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610f9e57fe5b905060200201356001600160a01b03168b8b6001818110610fbb57fe5b905060200201356001600160a01b03166133bd565b85600081518110610fdd57fe5b602002602001015161347d565b611029828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506135da915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061106857fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110a657600080fd5b505af11580156110ba573d6000803e3d6000fd5b505050506110df84836001855103815181106110d257fe5b6020026020010151613145565b509695505050505050565b60606111177f00000000000000000000000000000000000000000000000000000000000000008484613820565b90505b92915050565b60008060006111507f00000000000000000000000000000000000000000000000000000000000000008f8f6133bd565b905060008761115f578c611163565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111d957600080fd5b505af11580156111ed573d6000803e3d6000fd5b505050506112008f8f8f8f8f8f8f6124cf565b809450819550505050509b509b9950505050505050505050565b60608142811015611260576040805162461bcd60e51b815260206004820152601760248201526000805160206146b1833981519152604482015290519081900360640190fd5b6112be7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061323d92505050565b915086826001845103815181106112d157fe5b602002602001015110156113165760405162461bcd60e51b815260040180806020018281038252602a815260200180614535602a913960400191505060405180910390fd5b61132686866000818110610f5c57fe5b6110df828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506135da915050565b606081428110156113ab576040805162461bcd60e51b815260206004820152601760248201526000805160206146b1833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113e557fe5b905060200201356001600160a01b03166001600160a01b03161461143e576040805162461bcd60e51b815260206004820152601c602482015260008051602061455f833981519152604482015290519081900360640190fd5b61149c7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061382092505050565b915086826000815181106114ac57fe5b60200260200101511115610f4c5760405162461bcd60e51b815260040180806020018281038252602681526020018061457f6026913960400191505060405180910390fd5b60006114ff8585858561397f565b95945050505050565b60006114ff85858585613a82565b6000806115647f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006133bd565b9050600086611573578b611577565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115ed57600080fd5b505af1158015611601573d6000803e3d6000fd5b505050506116138d8d8d8d8d8d611fc2565b9d9c50505050505050505050505050565b8042811015611668576040805162461bcd60e51b815260206004820152601760248201526000805160206146b1833981519152604482015290519081900360640190fd5b6116dd8585600081811061167857fe5b905060200201356001600160a01b0316336116d77f0000000000000000000000000000000000000000000000000000000000000000898960008181106116ba57fe5b905060200201356001600160a01b03168a8a6001818110610fbb57fe5b8a61347d565b6000858560001981018181106116ef57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561175457600080fd5b505afa158015611768573d6000803e3d6000fd5b505050506040513d602081101561177e57600080fd5b505160408051602088810282810182019093528882529293506117c0929091899189918291850190849080828437600092019190915250889250613b84915050565b8661187282888860001981018181106117d557fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561183a57600080fd5b505afa15801561184e573d6000803e3d6000fd5b505050506040513d602081101561186457600080fd5b50519063ffffffff613ef416565b10156118af5760405162461bcd60e51b815260040180806020018281038252602a815260200180614535602a913960400191505060405180910390fd5b5050505050505050565b80428110156118fd576040805162461bcd60e51b815260206004820152601760248201526000805160206146b1833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061193757fe5b905060200201356001600160a01b03166001600160a01b031614611990576040805162461bcd60e51b815260206004820152601c602482015260008051602061455f833981519152604482015290519081900360640190fd5b6119a08585600081811061167857fe5b6119de858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613b84915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a4857600080fd5b505afa158015611a5c573d6000803e3d6000fd5b505050506040513d6020811015611a7257600080fd5b5051905086811015611ab55760405162461bcd60e51b815260040180806020018281038252602a815260200180614535602a913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611b1b57600080fd5b505af1158015611b2f573d6000803e3d6000fd5b505050506118af8482613145565b60608142811015611b83576040805162461bcd60e51b815260206004820152601760248201526000805160206146b1833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611bba57fe5b905060200201356001600160a01b03166001600160a01b031614611c13576040805162461bcd60e51b815260206004820152601c602482015260008051602061455f833981519152604482015290519081900360640190fd5b611c717f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061323d92505050565b91508682600184510381518110611c8457fe5b60200260200101511015611cc95760405162461bcd60e51b815260040180806020018281038252602a815260200180614535602a913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611d0557fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d3857600080fd5b505af1158015611d4c573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611db17f0000000000000000000000000000000000000000000000000000000000000000898960008181106116ba57fe5b84600081518110611dbe57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611e1557600080fd5b505af1158015611e29573d6000803e3d6000fd5b505050506040513d6020811015611e3f57600080fd5b5051611e4757fe5b611e86828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506135da915050565b5095945050505050565b60608142811015611ed6576040805162461bcd60e51b815260206004820152601760248201526000805160206146b1833981519152604482015290519081900360640190fd5b611f347f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061382092505050565b91508682600081518110611f4457fe5b602002602001015111156113165760405162461bcd60e51b815260040180806020018281038252602681526020018061457f6026913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000611fba848484613f44565b949350505050565b60008142811015612008576040805162461bcd60e51b815260206004820152601760248201526000805160206146b1833981519152604482015290519081900360640190fd5b612037887f000000000000000000000000000000000000000000000000000000000000000089898930896124cf565b604080516370a0823160e01b815230600482015290519194506120bb92508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561208a57600080fd5b505afa15801561209e573d6000803e3d6000fd5b505050506040513d60208110156120b457600080fd5b5051612fdb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561212157600080fd5b505af1158015612135573d6000803e3d6000fd5b505050506110df8483613145565b8042811015612187576040805162461bcd60e51b815260206004820152601760248201526000805160206146b1833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106121be57fe5b905060200201356001600160a01b03166001600160a01b031614612217576040805162461bcd60e51b815260206004820152601c602482015260008051602061455f833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561227757600080fd5b505af115801561228b573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122f07f0000000000000000000000000000000000000000000000000000000000000000898960008181106116ba57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561234057600080fd5b505af1158015612354573d6000803e3d6000fd5b505050506040513d602081101561236a57600080fd5b505161237257fe5b60008686600019810181811061238457fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123e957600080fd5b505afa1580156123fd573d6000803e3d6000fd5b505050506040513d602081101561241357600080fd5b505160408051602089810282810182019093528982529293506124559290918a918a918291850190849080828437600092019190915250899250613b84915050565b87611872828989600019810181811061246a57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561183a57600080fd5b6000808242811015612516576040805162461bcd60e51b815260206004820152601760248201526000805160206146b1833981519152604482015290519081900360640190fd5b60006125437f00000000000000000000000000000000000000000000000000000000000000008c8c6133bd565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561259e57600080fd5b505af11580156125b2573d6000803e3d6000fd5b505050506040513d60208110156125c857600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561261557600080fd5b505af1158015612629573d6000803e3d6000fd5b505050506040513d604081101561263f57600080fd5b508051602090910151909250905060006126598e8e613ff0565b509050806001600160a01b03168e6001600160a01b03161461267c57818361267f565b82825b90975095508a8710156126c35760405162461bcd60e51b81526004018080602001828103825260258152602001806146d16025913960400191505060405180910390fd5b898610156127025760405162461bcd60e51b81526004018080602001828103825260258152602001806146686025913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111177f0000000000000000000000000000000000000000000000000000000000000000848461323d565b60008060006127b47f00000000000000000000000000000000000000000000000000000000000000008e7f00000000000000000000000000000000000000000000000000000000000000006133bd565b90506000876127c3578c6127c7565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561283d57600080fd5b505af1158015612851573d6000803e3d6000fd5b505050506128638e8e8e8e8e8e610ca3565b909f909e509c50505050505050505050505050565b600080600083428110156128c1576040805162461bcd60e51b815260206004820152601760248201526000805160206146b1833981519152604482015290519081900360640190fd5b6128cf8c8c8c8c8c8c6140ce565b909450925060006129017f00000000000000000000000000000000000000000000000000000000000000008e8e6133bd565b905061290f8d33838861347d565b61291b8c33838761347d565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561297357600080fd5b505af1158015612987573d6000803e3d6000fd5b505050506040513d602081101561299d57600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129fd576040805162461bcd60e51b815260206004820152601760248201526000805160206146b1833981519152604482015290519081900360640190fd5b612a2b8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c6140ce565b90945092506000612a7d7f00000000000000000000000000000000000000000000000000000000000000008c7f00000000000000000000000000000000000000000000000000000000000000006133bd565b9050612a8b8b33838861347d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612ae657600080fd5b505af1158015612afa573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b7f57600080fd5b505af1158015612b93573d6000803e3d6000fd5b505050506040513d6020811015612ba957600080fd5b5051612bb157fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612c0957600080fd5b505af1158015612c1d573d6000803e3d6000fd5b505050506040513d6020811015612c3357600080fd5b5051925034841015612c4b57612c4b33853403613145565b505096509650969350505050565b60608142811015612c9f576040805162461bcd60e51b815260206004820152601760248201526000805160206146b1833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612cd657fe5b905060200201356001600160a01b03166001600160a01b031614612d2f576040805162461bcd60e51b815260206004820152601c602482015260008051602061455f833981519152604482015290519081900360640190fd5b612d8d7f00000000000000000000000000000000000000000000000000000000000000008888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061382092505050565b91503482600081518110612d9d57fe5b60200260200101511115612de25760405162461bcd60e51b815260040180806020018281038252602681526020018061457f6026913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e1e57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e5157600080fd5b505af1158015612e65573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612eca7f0000000000000000000000000000000000000000000000000000000000000000898960008181106116ba57fe5b84600081518110612ed757fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f2e57600080fd5b505af1158015612f42573d6000803e3d6000fd5b505050506040513d6020811015612f5857600080fd5b5051612f6057fe5b612f9f828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506135da915050565b81600081518110612fac57fe5b6020026020010151341115611e8657611e863383600081518110612fcc57fe5b60200260200101513403613145565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130585780518252601f199092019160209182019101613039565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130ba576040519150601f19603f3d011682016040523d82523d6000602084013e6130bf565b606091505b50915091508180156130ed5750805115806130ed57508080602001905160208110156130ea57600080fd5b50515b61313e576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106131915780518252601f199092019160209182019101613172565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131f3576040519150601f19603f3d011682016040523d82523d6000602084013e6131f8565b606091505b50509050806132385760405162461bcd60e51b81526004018080602001828103825260238152602001806146456023913960400191505060405180910390fd5b505050565b6060600282511015613296576040805162461bcd60e51b815260206004820152601d60248201527f5068656e697856324c6962726172793a20494e56414c49445f50415448000000604482015290519081900360640190fd5b815167ffffffffffffffff811180156132ae57600080fd5b506040519080825280602002602001820160405280156132d8578160200160208202803683370190505b50905082816000815181106132e957fe5b60200260200101818152505060005b60018351038110156133b55760008061333b8786858151811061331757fe5b602002602001015187866001018151811061332e57fe5b6020026020010151614342565b9150915061339184848151811061334e57fe5b6020026020010151838361338c8b8a898151811061336857fe5b60200260200101518b8a6001018151811061337f57fe5b6020026020010151614409565b61397f565b8484600101815181106133a057fe5b602090810291909101015250506001016132f8565b509392505050565b60008060006133cc8585613ff0565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f3e96e661fa6aba8ad6e3f53f8dbd07e407ae9afb2751ba93c642efb05a02ff52609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135025780518252601f1990920191602091820191016134e3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613564576040519150601f19603f3d011682016040523d82523d6000602084013e613569565b606091505b5091509150818015613597575080511580613597575080806020019051602081101561359457600080fd5b50515b6135d25760405162461bcd60e51b815260040180806020018281038252602481526020018061468d6024913960400191505060405180910390fd5b505050505050565b60005b600183510381101561381a576000808483815181106135f857fe5b602002602001015185846001018151811061360f57fe5b60200260200101519150915060006136278383613ff0565b509050600087856001018151811061363b57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146136695782600061366d565b6000835b91509150600060028a5103881061368457886136c5565b6136c57f0000000000000000000000000000000000000000000000000000000000000000878c8b600201815181106136b857fe5b60200260200101516133bd565b90506136f27f000000000000000000000000000000000000000000000000000000000000000088886133bd565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f19166020018201604052801561372f576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156137a0578181015183820152602001613788565b50505050905090810190601f1680156137cd5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156137ef57600080fd5b505af1158015613803573d6000803e3d6000fd5b5050600190990198506135dd975050505050505050565b50505050565b6060600282511015613879576040805162461bcd60e51b815260206004820152601d60248201527f5068656e697856324c6962726172793a20494e56414c49445f50415448000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561389157600080fd5b506040519080825280602002602001820160405280156138bb578160200160208202803683370190505b50905082816001835103815181106138cf57fe5b60209081029190910101528151600019015b80156133b557600080613911878660018603815181106138fd57fe5b602002602001015187868151811061332e57fe5b9150915061395a84848151811061392457fe5b602002602001015183836139558b8a60018a038151811061394157fe5b60200260200101518b8a8151811061337f57fe5b613a82565b84600185038151811061396957fe5b60209081029190910101525050600019016138e1565b60008085116139bf5760405162461bcd60e51b815260040180806020018281038252602a81526020018061461b602a913960400191505060405180910390fd5b6000841180156139cf5750600083115b613a0a5760405162461bcd60e51b81526004018080602001828103825260278152602001806145f46027913960400191505060405180910390fd5b6000613a2f613a22620186a08563ffffffff613ef416565b879063ffffffff61448216565b90506000613a43828663ffffffff61448216565b90506000613a6a83613a5e89620186a063ffffffff61448216565b9063ffffffff6144e516565b9050808281613a7557fe5b0498975050505050505050565b6000808511613ac25760405162461bcd60e51b815260040180806020018281038252602b8152602001806145c9602b913960400191505060405180910390fd5b600084118015613ad25750600083115b613b0d5760405162461bcd60e51b81526004018080602001828103825260278152602001806145f46027913960400191505060405180910390fd5b6000613b32620186a0613b26878963ffffffff61448216565b9063ffffffff61448216565b90506000613b5c613b4c620186a08663ffffffff613ef416565b613b26878a63ffffffff613ef416565b9050613b796001828481613b6c57fe5b049063ffffffff6144e516565b979650505050505050565b60005b600183510381101561323857600080848381518110613ba257fe5b6020026020010151858460010181518110613bb957fe5b6020026020010151915091506000613bd18383613ff0565b5090506000613c017f000000000000000000000000000000000000000000000000000000000000000085856133bd565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613c4257600080fd5b505afa158015613c56573d6000803e3d6000fd5b505050506040513d6060811015613c6c57600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613ca2578284613ca5565b83835b91509150613d03828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561183a57600080fd5b9550613d758683838a6001600160a01b03166324bcdfbd6040518163ffffffff1660e01b815260040160206040518083038186803b158015613d4457600080fd5b505afa158015613d58573d6000803e3d6000fd5b505050506040513d6020811015613d6e57600080fd5b505161397f565b945050505050600080856001600160a01b0316886001600160a01b031614613d9f57826000613da3565b6000835b91509150600060028c51038a10613dba578a613dee565b613dee7f0000000000000000000000000000000000000000000000000000000000000000898e8d600201815181106136b857fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613e78578181015183820152602001613e60565b50505050905090810190601f168015613ea55780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613ec757600080fd5b505af1158015613edb573d6000803e3d6000fd5b50506001909b019a50613b879950505050505050505050565b8082038281111561111a576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613f845760405162461bcd60e51b81526004018080602001828103825260248152602001806146f66024913960400191505060405180910390fd5b600083118015613f945750600082115b613fcf5760405162461bcd60e51b81526004018080602001828103825260278152602001806145f46027913960400191505060405180910390fd5b82613fe0858463ffffffff61448216565b81613fe757fe5b04949350505050565b600080826001600160a01b0316846001600160a01b031614156140445760405162461bcd60e51b81526004018080602001828103825260248152602001806145a56024913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610614064578284614067565b83835b90925090506001600160a01b0382166140c7576040805162461bcd60e51b815260206004820152601d60248201527f5068656e697856324c6962726172793a205a45524f5f41444452455353000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561414857600080fd5b505afa15801561415c573d6000803e3d6000fd5b505050506040513d602081101561417257600080fd5b50516001600160a01b0316141561422557604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156141f857600080fd5b505af115801561420c573d6000803e3d6000fd5b505050506040513d602081101561422257600080fd5b50505b6000806142537f00000000000000000000000000000000000000000000000000000000000000008b8b614342565b91509150816000148015614265575080155b1561427557879350869250614335565b6000614282898484613f44565b90508781116142d557858110156142ca5760405162461bcd60e51b81526004018080602001828103825260258152602001806146686025913960400191505060405180910390fd5b889450925082614333565b60006142e2898486613f44565b9050898111156142ee57fe5b8781101561432d5760405162461bcd60e51b81526004018080602001828103825260258152602001806146d16025913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008060006143518585613ff0565b5090506000806143628888886133bd565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561439a57600080fd5b505afa1580156143ae573d6000803e3d6000fd5b505050506040513d60608110156143c457600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146143f75780826143fa565b81815b90999098509650505050505050565b60006144168484846133bd565b6001600160a01b03166324bcdfbd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561444e57600080fd5b505afa158015614462573d6000803e3d6000fd5b505050506040513d602081101561447857600080fd5b5051949350505050565b600081158061449d5750508082028282828161449a57fe5b04145b61111a576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b8082018281101561111a576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe5068656e69785632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545068656e69785632526f757465723a20494e56414c49445f50415448000000005068656e69785632526f757465723a204558434553534956455f494e5055545f414d4f554e545068656e697856324c6962726172793a204944454e544943414c5f4144445245535345535068656e697856324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545068656e697856324c6962726172793a20494e53554646494349454e545f4c49515549444954595068656e697856324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45445068656e69785632526f757465723a20494e53554646494349454e545f425f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c45445068656e69785632526f757465723a20455850495245440000000000000000005068656e69785632526f757465723a20494e53554646494349454e545f415f414d4f554e545068656e697856324c6962726172793a20494e53554646494349454e545f414d4f554e54a2646970667358221220dbfa20a349d607fad35170f7676d26929cf45e4c0cae010963f5d5c9de32a5c664736f6c634300060600330000000000000000000000006bae09822c36a9359d563a22fc7d134ef27a5f600000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23

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

0000000000000000000000006bae09822c36a9359d563a22fc7d134ef27a5f600000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23

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

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000006bae09822c36a9359d563a22fc7d134ef27a5f60
Arg [1] : 0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23


Deployed ByteCode Sourcemap

10459:18717:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10943:10;-1:-1:-1;;;;;10957:4:0;10943:18;;10936:26;;;;10459:18717;;12:1:-1;9;2:12;15317:589:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15317:589:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;15317:589:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22436:838;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22436:838:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;22436:838:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;22436:838:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;22436:838: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;22436:838:0;;-1:-1:-1;22436:838:0;-1:-1:-1;;;;;;22436:838: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;22436:838:0;;;;;;;;;;;;;;;;;28964:209;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28964:209:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;28964:209:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28964:209:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28964:209: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;28964:209:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;28964:209:0;;-1:-1:-1;28964:209:0;;-1:-1:-1;;;;;28964:209:0:i;15914:728::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15914:728:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;15914:728:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19690:615::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19690:615:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;19690:615:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;19690:615:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;19690:615: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;19690:615:0;;-1:-1:-1;19690:615:0;-1:-1:-1;;;;;;19690:615:0;;;;;;;;:::i;21612:816::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21612:816:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;21612:816:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;21612:816:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;21612:816: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;21612:816:0;;-1:-1:-1;21612:816:0;-1:-1:-1;;;;;;21612:816:0;;;;;;;;:::i;28142:295::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28142:295:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;28142:295:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;28445:294;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28445:294:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;28445:294:0;;;;;;;;;;;;;;;;;:::i;18070:742::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18070:742:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18070:742:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25539:701::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25539:701:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25539:701:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25539:701:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25539:701: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;25539:701:0;;-1:-1:-1;25539:701:0;-1:-1:-1;;;;;;25539:701:0;;;;;;;;:::i;27068:788::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27068:788:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27068:788:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27068:788:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27068:788: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;27068:788:0;;-1:-1:-1;27068:788:0;-1:-1:-1;;;;;;27068:788:0;;;;;;;;:::i;20914:690::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;20914:690:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;20914:690:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;20914:690: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;20914:690:0;;-1:-1:-1;20914:690:0;-1:-1:-1;;;;;;20914:690:0;;;;;;;;:::i;20313:593::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20313:593:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;20313:593:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;20313:593:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;20313:593: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;20313:593:0;;-1:-1:-1;20313:593:0;-1:-1:-1;;;;;;20313:593:0;;;;;;;;:::i;10595:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10595:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;10595:38:0;;;;;;;;;;;;;;27900:234;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27900:234:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;27900:234:0;;;;;;;;;;;;:::i;17449:613::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17449:613:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;17449:613:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;26248:812::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26248:812:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26248:812:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26248:812: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;26248:812:0;;-1:-1:-1;26248:812:0;-1:-1:-1;;;;;;26248:812:0;;;;;;;;:::i;14421:888::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14421:888:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;14421:888:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;10547:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10547:41:0;;;:::i;28747:209::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28747:209:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;28747:209:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28747:209:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28747:209: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;28747:209:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;28747:209:0;;-1:-1:-1;28747:209:0;;-1:-1:-1;;;;;28747:209:0:i;16650:720::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16650:720:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;16650:720:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;12491:862::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12491:862:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;12491:862:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;13361:1017;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;13361:1017:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23282:803::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;23282:803:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;23282:803:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;23282:803: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;23282:803:0;;-1:-1:-1;23282:803:0;-1:-1:-1;;;;;;23282:803:0;;;;;;;;:::i;15317:589::-;15566:19;15587:17;15547:8;10707:15;10695:8;:27;;10687:63;;;;;-1:-1:-1;;;10687:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10687:63:0;;;;;;;;;;;;;;;15644:94:::1;15660:5;15667:4;15673:9;15684:14;15700:12;15722:4;15729:8;15644:15;:94::i;:::-;15617:121:::0;;-1:-1:-1;15617:121:0;-1:-1:-1;15749:51:0::1;15777:5:::0;15784:2;15617:121;15749:27:::1;:51::i;:::-;15817:4;-1:-1:-1::0;;;;;15811:20:0::1;;15832:9;15811:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;15811:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;15811:31:0;;;;15853:45;15884:2;15888:9;15853:30;:45::i;:::-;15317:589:::0;;;;;;;;;;:::o;22436:838::-;22666:24;22647:8;10707:15;10695:8;:27;;10687:63;;;;;-1:-1:-1;;;10687:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10687:63:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;22736:4:0::1;22711:29;:4:::0;;-1:-1:-1;;22716:15:0;;22711:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;22711:21:0::1;-1:-1:-1::0;;;;;22711:29:0::1;;22703:70;;;::::0;;-1:-1:-1;;;22703:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;22703:70:0;;;;;;;;;;;;;::::1;;22794:55;22825:7;22834:8;22844:4;;22794:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;22794:30:0::1;::::0;-1:-1:-1;;;22794:55:0:i:1;:::-;22784:65;;22899:12;22868:7;22893:1;22876:7;:14;:18;22868:27;;;;;;;;;;;;;;:43;;22860:98;;;;-1:-1:-1::0;;;22860:98:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22969:117;23001:4;;23006:1;23001:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;23001:7:0::1;23010:10;23022:51;23047:7;23056:4;;23061:1;23056:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;23056:7:0::1;23065:4;;23070:1;23065:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;23065:7:0::1;23022:24;:51::i;:::-;23075:7;23083:1;23075:10;;;;;;;;;;;;;;22969:31;:117::i;:::-;23097:35;23103:7;23112:4;;23097:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;23126:4:0::1;::::0;-1:-1:-1;23097:5:0::1;::::0;-1:-1:-1;;23097:35:0:i:1;:::-;23149:4;-1:-1:-1::0;;;;;23143:20:0::1;;23164:7;23189:1;23172:7;:14;:18;23164:27;;;;;;;;;;;;;;23143:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23143:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23143:49:0;;;;23203:63;23234:2;23238:7;23263:1;23246:7;:14;:18;23238:27;;;;;;;;;;;;;;23203:30;:63::i;:::-;22436:838:::0;;;;;;;;;:::o;28964:209::-;29066:24;29110:55;29140:7;29149:9;29160:4;29110:29;:55::i;:::-;29103:62;;28964:209;;;;;:::o;15914:728::-;16259:15;16276;16304:12;16319:49;16344:7;16353:6;16361;16319:24;:49::i;:::-;16304:64;;16379:13;16395:10;:36;;16422:9;16395:36;;;-1:-1:-1;;16395:36:0;16442:80;;;-1:-1:-1;;;16442:80:0;;16470:10;16442:80;;;;16490:4;16442:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16379:52;;-1:-1:-1;;;;;;16442:27:0;;;;;:80;;;;;-1:-1:-1;;16442:80:0;;;;;;;;-1:-1:-1;16442:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;16442:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16442:80:0;;;;16554;16570:6;16578;16586:9;16597:10;16609;16621:2;16625:8;16554:15;:80::i;:::-;16533:101;;;;;;;;15914:728;;;;;;;;;;;;;;;;:::o;19690:615::-;19923:24;19904:8;10707:15;10695:8;:27;;10687:63;;;;;-1:-1:-1;;;10687:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10687:63:0;;;;;;;;;;;;;;;19970:55:::1;20001:7;20010:8;20020:4;;19970:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;19970:30:0::1;::::0;-1:-1:-1;;;19970:55:0:i:1;:::-;19960:65;;20075:12;20044:7;20069:1;20052:7;:14;:18;20044:27;;;;;;;;;;;;;;:43;;20036:98;;;;-1:-1:-1::0;;;20036:98:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20145:117;20177:4;;20182:1;20177:7;;;;;;20145:117;20273:24;20279:7;20288:4;;20273:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;20294:2:0;;-1:-1:-1;20273:5:0::1;::::0;-1:-1:-1;;20273:24:0:i:1;21612:816::-:0;21842:24;21823:8;10707:15;10695:8;:27;;10687:63;;;;;-1:-1:-1;;;10687:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10687:63:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;21912:4:0::1;21887:29;:4:::0;;-1:-1:-1;;21892:15:0;;21887:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;21887:21:0::1;-1:-1:-1::0;;;;;21887:29:0::1;;21879:70;;;::::0;;-1:-1:-1;;;21879:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;21879:70:0;;;;;;;;;;;;;::::1;;21970:55;22000:7;22009:9;22020:4;;21970:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;21970:29:0::1;::::0;-1:-1:-1;;;21970:55:0:i:1;:::-;21960:65;;22058:11;22044:7;22052:1;22044:10;;;;;;;;;;;;;;:25;;22036:76;;;;-1:-1:-1::0;;;22036:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28142:295:::0;28320:17;28357:72;28387:8;28397:9;28408:10;28420:8;28357:29;:72::i;:::-;28350:79;28142:295;-1:-1:-1;;;;;28142:295:0:o;28445:294::-;28623:16;28659:72;28688:9;28699;28710:10;28722:8;28659:28;:72::i;18070:742::-;18427:17;18457:12;18472:46;18497:7;18506:5;18513:4;18472:24;:46::i;:::-;18457:61;;18529:13;18545:10;:36;;18572:9;18545:36;;;-1:-1:-1;;18545:36:0;18592:80;;;-1:-1:-1;;;18592:80:0;;18620:10;18592:80;;;;18640:4;18592:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18529:52;;-1:-1:-1;;;;;;18592:27:0;;;;;:80;;;;;-1:-1:-1;;18592:80:0;;;;;;;;-1:-1:-1;18592:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;18592:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18592:80:0;;;;18695:109;18743:5;18750:9;18761:14;18777:12;18791:2;18795:8;18695:47;:109::i;:::-;18683:121;18070:742;-1:-1:-1;;;;;;;;;;;;;18070:742:0:o;25539:701::-;25782:8;10707:15;10695:8;:27;;10687:63;;;;;-1:-1:-1;;;10687:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10687:63:0;;;;;;;;;;;;;;;25803:115:::1;25835:4;;25840:1;25835:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;25835:7:0::1;25844:10;25856:51;25881:7;25890:4;;25895:1;25890:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;25890:7:0::1;25899:4;;25904:1;25899:7;;;;;;25856:51;25909:8;25803:31;:115::i;:::-;25929:21;25960:4:::0;;-1:-1:-1;;25965:15:0;;25960:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;25960:21:0::1;-1:-1:-1::0;;;;;25953:39:0::1;;25993:2;25953:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;25953:43:0::1;-1:-1:-1::0;;;;;25953:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;25953:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25953:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;25953:43:0;26007:44:::1;::::0;;25953:43:::1;26007:44:::0;;::::1;::::0;;;;;;;;;;;25953:43;;-1:-1:-1;26007:44:0::1;::::0;;;26042:4;;;;;;26007:44;::::1;::::0;26042:4;;26007:44;26042:4;26007:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26048:2:0;;-1:-1:-1;26007:34:0::1;::::0;-1:-1:-1;;26007:44:0:i:1;:::-;26150:12:::0;26084:62:::1;26132:13:::0;26091:4;;-1:-1:-1;;26096:15:0;;26091:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;26091:21:0::1;-1:-1:-1::0;;;;;26084:39:0::1;;26124:2;26084:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;26084:43:0::1;-1:-1:-1::0;;;;;26084:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26084:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26084:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26084:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;26062:170;;;;-1:-1:-1::0;;;26062:170:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10761:1;25539:701:::0;;;;;;;:::o;27068:788::-;27308:8;10707:15;10695:8;:27;;10687:63;;;;;-1:-1:-1;;;10687:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10687:63:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27362:4:0::1;27337:29;:4:::0;;-1:-1:-1;;27342:15:0;;27337:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27337:21:0::1;-1:-1:-1::0;;;;;27337:29:0::1;;27329:70;;;::::0;;-1:-1:-1;;;27329:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27329:70:0;;;;;;;;;;;;;::::1;;27410:115;27442:4;;27447:1;27442:7;;;;;;27410:115;27536:55;27571:4;;27536:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27585:4:0::1;::::0;-1:-1:-1;27536:34:0::1;::::0;-1:-1:-1;;27536:55:0:i:1;:::-;27622:37;::::0;;-1:-1:-1;;;27622:37:0;;27653:4:::1;27622:37;::::0;::::1;::::0;;;27602:17:::1;::::0;-1:-1:-1;;;;;27629:4:0::1;27622:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;27622:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27622:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27622:37:0;;-1:-1:-1;27678:25:0;;::::1;;27670:80;;;;-1:-1:-1::0;;;27670:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27767:4;-1:-1:-1::0;;;;;27761:20:0::1;;27782:9;27761:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27761:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27761:31:0;;;;27803:45;27834:2;27838:9;27803:30;:45::i;20914:690::-:0;21125:24;21106:8;10707:15;10695:8;:27;;10687:63;;;;;-1:-1:-1;;;10687:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10687:63:0;;;;;;;;;;;;;;;21181:4:::1;-1:-1:-1::0;;;;;21170:15:0::1;:4;;21175:1;21170:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;21170:7:0::1;-1:-1:-1::0;;;;;21170:15:0::1;;21162:56;;;::::0;;-1:-1:-1;;;21162:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;21162:56:0;;;;;;;;;;;;;::::1;;21239;21270:7;21279:9;21290:4;;21239:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;21239:30:0::1;::::0;-1:-1:-1;;;21239:56:0:i:1;:::-;21229:66;;21345:12;21314:7;21339:1;21322:7;:14;:18;21314:27;;;;;;;;;;;;;;:43;;21306:98;;;;-1:-1:-1::0;;;21306:98:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21421:4;-1:-1:-1::0;;;;;21415:19:0::1;;21443:7;21451:1;21443:10;;;;;;;;;;;;;;21415:42;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21415:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21415:42:0;;;;;21481:4;-1:-1:-1::0;;;;;21475:20:0::1;;21496:51;21521:7;21530:4;;21535:1;21530:7;;;;;;21496:51;21549:7;21557:1;21549:10;;;;;;;;;;;;;;21475:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;21475:85:0::1;-1:-1:-1::0;;;;;21475:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21475:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21475:85:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;21475:85:0;21468:93:::1;;;;21572:24;21578:7;21587:4;;21572:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;21593:2:0;;-1:-1:-1;21572:5:0::1;::::0;-1:-1:-1;;21572:24:0:i:1;:::-;20914:690:::0;;;;;;;;:::o;20313:593::-;20546:24;20527:8;10707:15;10695:8;:27;;10687:63;;;;;-1:-1:-1;;;10687:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10687:63:0;;;;;;;;;;;;;;;20593:55:::1;20623:7;20632:9;20643:4;;20593:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;20593:29:0::1;::::0;-1:-1:-1;;;20593:55:0:i:1;:::-;20583:65;;20681:11;20667:7;20675:1;20667:10;;;;;;;;;;;;;;:25;;20659:76;;;;-1:-1:-1::0;;;20659:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10595:38:::0;;;:::o;27900:234::-;28040:15;28075:51;28098:7;28107:8;28117;28075:22;:51::i;:::-;28068:58;27900:234;-1:-1:-1;;;;27900:234:0:o;17449:613::-;17727:17;17708:8;10707:15;10695:8;:27;;10687:63;;;;;-1:-1:-1;;;10687:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10687:63:0;;;;;;;;;;;;;;;17773:94:::1;17789:5;17796:4;17802:9;17813:14;17829:12;17851:4;17858:8;17773:15;:94::i;:::-;17917:38;::::0;;-1:-1:-1;;;17917:38:0;;17949:4:::1;17917:38;::::0;::::1;::::0;;;17757:110;;-1:-1:-1;17878:78:0::1;::::0;-1:-1:-1;17906:5:0;;17913:2;;-1:-1:-1;;;;;17917: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;17917:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;17917:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;17917:38:0;17878:27:::1;:78::i;:::-;17973:4;-1:-1:-1::0;;;;;17967:20:0::1;;17988:9;17967:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;17967:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;17967:31:0;;;;18009:45;18040:2;18044:9;18009:30;:45::i;26248:812::-:0;26469:8;10707:15;10695:8;:27;;10687:63;;;;;-1:-1:-1;;;10687:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10687:63:0;;;;;;;;;;;;;;;26509:4:::1;-1:-1:-1::0;;;;;26498:15:0::1;:4;;26503:1;26498:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26498:7:0::1;-1:-1:-1::0;;;;;26498:15:0::1;;26490:56;;;::::0;;-1:-1:-1;;;26490:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26490:56:0;;;;;;;;;;;;;::::1;;26557:16;26576:9;26557:28;;26602:4;-1:-1:-1::0;;;;;26596:19:0::1;;26624:8;26596:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26596:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26596:40:0;;;;;26660:4;-1:-1:-1::0;;;;;26654:20:0::1;;26675:51;26700:7;26709:4;;26714:1;26709:7;;;;;;26675:51;26728:8;26654:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;26654:83:0::1;-1:-1:-1::0;;;;;26654:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26654:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26654:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26654:83:0;26647:91:::1;;;;26749:21;26780:4:::0;;-1:-1:-1;;26785:15:0;;26780:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;26780:21:0::1;-1:-1:-1::0;;;;;26773:39:0::1;;26813:2;26773:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;26773:43:0::1;-1:-1:-1::0;;;;;26773:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26773:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26773:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26773:43:0;26827:44:::1;::::0;;26773:43:::1;26827:44:::0;;::::1;::::0;;;;;;;;;;;26773:43;;-1:-1:-1;26827:44:0::1;::::0;;;26862:4;;;;;;26827:44;::::1;::::0;26862:4;;26827:44;26862:4;26827:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26868:2:0;;-1:-1:-1;26827:34:0::1;::::0;-1:-1:-1;;26827:44:0:i:1;:::-;26970:12:::0;26904:62:::1;26952:13:::0;26911:4;;-1:-1:-1;;26916:15:0;;26911:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;26911:21:0::1;-1:-1:-1::0;;;;;26904:39:0::1;;26944:2;26904:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;26904:43:0::1;-1:-1:-1::0;;;;;26904:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;14421:888:0::0;14687:15;14704;14668:8;10707:15;10695:8;:27;;10687:63;;;;;-1:-1:-1;;;10687:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10687:63:0;;;;;;;;;;;;;;;14732:12:::1;14747:49;14772:7;14781:6;14789;14747:24;:49::i;:::-;14807:62;::::0;;-1:-1:-1;;;14807:62:0;;14841:10:::1;14807:62;::::0;::::1;::::0;-1:-1:-1;;;;;14807:33:0;::::1;:62:::0;;;;;;;;;;;;;;14732:64;;-1:-1:-1;14807:33:0;;::::1;::::0;:62;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;14807:33:0;:62;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;14807:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;14807:62:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;14943:29:0::1;::::0;;-1:-1:-1;;;14943:29:0;;-1:-1:-1;;;;;14943:29:0;;::::1;;::::0;::::1;::::0;;;14907:15:::1;::::0;;;14943:25;;::::1;::::0;::::1;::::0;:29;;;;;;;;;;;14907:15;14943:25;:29;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;14943:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;14943:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;14943:29:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;14943:29:0;-1:-1:-1;14984:14:0::1;15004:43;15032:6:::0;15040;15004:27:::1;:43::i;:::-;14983:64;;;15089:6;-1:-1:-1::0;;;;;15079:16:0::1;:6;-1:-1:-1::0;;;;;15079:16:0::1;;:58;;15120:7;15129;15079:58;;;15099:7;15108;15079:58;15058:79:::0;;-1:-1:-1;15058:79:0;-1:-1:-1;15156:21:0;;::::1;;15148:71;;;;-1:-1:-1::0;;;15148:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15249:10;15238:7;:21;;15230:71;;;;-1:-1:-1::0;;;15230:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10761:1;;;;14421:888:::0;;;;;;;;;;;:::o;10547:41::-;;;:::o;28747:209::-;28849:24;28893:55;28924:7;28933:8;28943:4;28893:30;:55::i;16650:720::-;16978:19;16999:17;17029:12;17044:46;17069:7;17078:5;17085:4;17044:24;:46::i;:::-;17029:61;;17101:13;17117:10;:36;;17144:9;17117:36;;;-1:-1:-1;;17117:36:0;17164:80;;;-1:-1:-1;;;17164:80:0;;17192:10;17164:80;;;;17212:4;17164:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17101:52;;-1:-1:-1;;;;;;17164:27:0;;;;;:80;;;;;-1:-1:-1;;17164:80:0;;;;;;;;-1:-1:-1;17164:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;17164:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17164:80:0;;;;17282;17301:5;17308:9;17319:14;17335:12;17349:2;17353:8;17282:18;:80::i;:::-;17255:107;;;;-1:-1:-1;16650:720:0;-1:-1:-1;;;;;;;;;;;;;16650:720:0:o;12491:862::-;12853:15;12883;12913:17;12811:8;10707:15;10695:8;:27;;10687:63;;;;;-1:-1:-1;;;10687:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10687:63:0;;;;;;;;;;;;;;;12979:85:::1;12993:6;13001;13009:14;13025;13041:10;13053;12979:13;:85::i;:::-;12958:106:::0;;-1:-1:-1;12958:106:0;-1:-1:-1;13075:12:0::1;13090:49;13115:7;13124:6:::0;13132;13090:24:::1;:49::i;:::-;13075:64;;13150:66;13182:6;13190:10;13202:4;13208:7;13150:31;:66::i;:::-;13227;13259:6;13267:10;13279:4;13285:7;13227:31;:66::i;:::-;13331:4;-1:-1:-1::0;;;;;13316:25:0::1;;13342:2;13316:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;13316:29:0::1;-1:-1:-1::0;;;;;13316:29:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;13316:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;13316:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;13316:29:0;12491:862;;;;-1:-1:-1;13316:29:0;;-1:-1:-1;12491:862:0;;-1:-1:-1;;;;;;;;;12491:862:0:o;13361:1017::-;13694:19;13728:17;13760;13652:8;10707:15;10695:8;:27;;10687:63;;;;;-1:-1:-1;;;10687:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10687:63:0;;;;;;;;;;;;;;;13832:87:::1;13846:5;13853:4;13859:18;13879:9;13890:14;13906:12;13832:13;:87::i;:::-;13805:114:::0;;-1:-1:-1;13805:114:0;-1:-1:-1;13930:12:0::1;13945:46;13970:7;13979:5:::0;13986:4:::1;13945:24;:46::i;:::-;13930:61;;14002:69;14034:5;14041:10;14053:4;14059:11;14002:31;:69::i;:::-;14088:4;-1:-1:-1::0;;;;;14082:19:0::1;;14110:9;14082:41;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;14082:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;14082:41:0;;;;;14147:4;-1:-1:-1::0;;;;;14141:20:0::1;;14162:4;14168:9;14141:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;14141:37:0::1;-1:-1:-1::0;;;;;14141:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;14141:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;14141:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;14141:37:0;14134:45:::1;;;;14217:4;-1:-1:-1::0;;;;;14202:25:0::1;;14228:2;14202:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;14202:29:0::1;-1:-1:-1::0;;;;;14202:29:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;14202:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;14202:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;14202:29:0;;-1:-1:-1;14282:9:0::1;:21:::0;-1:-1:-1;14278:92:0::1;;;14305:65;14336:10;14360:9;14348;:21;14305:30;:65::i;:::-;10761:1;13361:1017:::0;;;;;;;;;;;:::o;23282:803::-;23490:24;23471:8;10707:15;10695:8;:27;;10687:63;;;;;-1:-1:-1;;;10687:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;10687:63:0;;;;;;;;;;;;;;;23546:4:::1;-1:-1:-1::0;;;;;23535:15:0::1;:4;;23540:1;23535:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;23535:7:0::1;-1:-1:-1::0;;;;;23535:15:0::1;;23527:56;;;::::0;;-1:-1:-1;;;23527:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;23527:56:0;;;;;;;;;;;;;::::1;;23604:55;23634:7;23643:9;23654:4;;23604:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;23604:29:0::1;::::0;-1:-1:-1;;;23604:55:0:i:1;:::-;23594:65;;23692:9;23678:7;23686:1;23678:10;;;;;;;;;;;;;;:23;;23670:74;;;;-1:-1:-1::0;;;23670:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23761:4;-1:-1:-1::0;;;;;23755:19:0::1;;23783:7;23791:1;23783:10;;;;;;;;;;;;;;23755:42;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23755:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23755:42:0;;;;;23821:4;-1:-1:-1::0;;;;;23815:20:0::1;;23836:51;23861:7;23870:4;;23875:1;23870:7;;;;;;23836:51;23889:7;23897:1;23889:10;;;;;;;;;;;;;;23815:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;23815:85:0::1;-1:-1:-1::0;;;;;23815:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23815:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23815:85:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23815:85:0;23808:93:::1;;;;23912:24;23918:7;23927:4;;23912:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;23933:2:0;;-1:-1:-1;23912:5:0::1;::::0;-1:-1:-1;;23912:24:0:i:1;:::-;23999:7;24007:1;23999:10;;;;;;;;;;;;;;23987:9;:22;23983:94;;;24011:66;24042:10;24066:7;24074:1;24066:10;;;;;;;;;;;;;;24054:9;:22;24011:30;:66::i;35629:398::-:0;35861:45;;;-1:-1:-1;;;;;35861:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;35861:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;35850:57:0;;;;35815:12;;35829:17;;35850:10;;;;35861:45;35850:57;;;25:18:-1;35850: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;;;35850: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;;35814:93:0;;;;35926:7;:57;;;;-1:-1:-1;35938:11:0;;:16;;:44;;;35969:4;35958:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35958:24:0;35938:44;35918:101;;;;;-1:-1:-1;;;35918:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35629:398;;;;;:::o;36491:202::-;36606:12;;;36564;36606;;;;;;;;;-1:-1:-1;;;;;36582:7:0;;;36598:5;;36582:37;;;;;;;;;;;;;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;;;36582:37: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;;36563:56:0;;;36638:7;36630:55;;;;-1:-1:-1;;;36630:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36491:202;;;:::o;33763:606::-;33901:24;33961:1;33946:4;:11;:16;;33938:58;;;;;-1:-1:-1;;;33938:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;34031:4;:11;34017:26;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34017:26:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;34017:26:0;;34007:36;;34067:8;34054:7;34062:1;34054:10;;;;;;;;;;;;;:21;;;;;34091:9;34086:276;34120:1;34106:4;:11;:15;34102:1;:19;34086:276;;;34144:17;34163:18;34185:42;34197:7;34206:4;34211:1;34206:7;;;;;;;;;;;;;;34215:4;34220:1;34224;34220:5;34215:11;;;;;;;;;;;;;;34185;:42::i;:::-;34143:84;;;;34259:91;34272:7;34280:1;34272:10;;;;;;;;;;;;;;34284:9;34295:10;34307:42;34319:7;34328:4;34333:1;34328:7;;;;;;;;;;;;;;34337:4;34342:1;34346;34342:5;34337:11;;;;;;;;;;;;;;34307;:42::i;:::-;34259:12;:91::i;:::-;34242:7;34250:1;34254;34250:5;34242:14;;;;;;;;;;;;;;;;;:108;-1:-1:-1;;34123:3:0;;34086:276;;;;33763:606;;;;;:::o;30368:651::-;30491:12;30517:14;30533;30551:26;30562:6;30570;30551:10;:26::i;:::-;30796:32;;;-1:-1:-1;;30796:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;30796:32:0;;;;;30786:43;;;;;;-1:-1:-1;;;;;;30675:291:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;30675:291:0;;;;;;;30643:342;;;;;;;;;30368:651;-1:-1:-1;;;;;30368:651:0:o;36035:448::-;36306:51;;;-1:-1:-1;;;;;36306:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;36306:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;36295:63:0;;;;36260:12;;36274:17;;36295:10;;;;36306:51;36295:63;;;25:18:-1;36295: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;;;36295: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;;36259:99:0;;;;36377:7;:57;;;;-1:-1:-1;36389:11:0;;:16;;:44;;;36420:4;36409:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;36409:24:0;36389:44;36369:106;;;;-1:-1:-1;;;36369:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36035:448;;;;;;:::o;18923:759::-;19067:9;19062:613;19096:1;19082:4;:11;:15;19078:1;:19;19062:613;;;19120:13;19135:14;19154:4;19159:1;19154:7;;;;;;;;;;;;;;19163:4;19168:1;19172;19168:5;19163:11;;;;;;;;;;;;;;19119:56;;;;19191:14;19211:42;19239:5;19246:6;19211:27;:42::i;:::-;19190:63;;;19268:17;19288:7;19296:1;19300;19296:5;19288:14;;;;;;;;;;;;;;19268:34;;19318:18;19338;19369:6;-1:-1:-1;;;;;19360:15:0;:5;-1:-1:-1;;;;;19360:15:0;;:67;;19405:9;19424:1;19360:67;;;19387:1;19391:9;19360:67;19317:110;;;;19442:10;19473:1;19459:4;:11;:15;19455:1;:19;:82;;19534:3;19455:82;;;19477:54;19502:7;19511:6;19519:4;19524:1;19528;19524:5;19519:11;;;;;;;;;;;;;;19477:24;:54::i;:::-;19442:95;;19567:48;19592:7;19601:5;19608:6;19567:24;:48::i;:::-;-1:-1:-1;;;;;19552:69:0;;19622:10;19634;19646:2;19660:1;19650:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;19650:12:0;87:42:-1;143:17;;-1:-1;19650:12:0;;19552:111;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19552:111:0;-1:-1:-1;;;;;19552:111: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;19552:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19552:111:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;19099:3:0;;;;;-1:-1:-1;19062:613:0;;-1:-1:-1;;;;;;;;19062:613:0;;;18923:759;;;:::o;34450:627::-;34588:24;34648:1;34633:4;:11;:16;;34625:58;;;;;-1:-1:-1;;;34625:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;34718:4;:11;34704:26;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34704:26:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;34704:26:0;;34694:36;;34771:9;34741:7;34766:1;34749:7;:14;:18;34741:27;;;;;;;;;;;;;;;;;:39;34808:11;;-1:-1:-1;;34808:15:0;34791:279;34825:5;;34791:279;;34853:17;34872:18;34894:42;34906:7;34915:4;34924:1;34920;:5;34915:11;;;;;;;;;;;;;;34928:4;34933:1;34928:7;;;;;;;34894:42;34852:84;;;;34968:90;34980:7;34988:1;34980:10;;;;;;;;;;;;;;34992:9;35003:10;35015:42;35027:7;35036:4;35045:1;35041;:5;35036:11;;;;;;;;;;;;;;35049:4;35054:1;35049:7;;;;;;;35015:42;34968:11;:90::i;:::-;34951:7;34963:1;34959;:5;34951:14;;;;;;;;;;;;;;;;;:107;-1:-1:-1;;;;34832:3:0;34791:279;;32358:625;32521:17;32570:1;32559:8;:12;32551:67;;;;-1:-1:-1;;;32551:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32649:1;32637:9;:13;:31;;;;;32667:1;32654:10;:14;32637:31;32629:83;;;;-1:-1:-1;;;32629:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32723:23;32749:43;32762:29;32770:6;32782:8;32762:29;:19;:29;:::i;:::-;32749:8;;:43;:12;:43;:::i;:::-;32723:69;-1:-1:-1;32803:17:0;32823:31;32723:69;32843:10;32823:31;:19;:31;:::i;:::-;32803:51;-1:-1:-1;32865:19:0;32887:42;32913:15;32887:21;:9;32901:6;32887:21;:13;:21;:::i;:::-;:25;:42;:25;:42;:::i;:::-;32865:64;;32964:11;32952:9;:23;;;;;;;32358:625;-1:-1:-1;;;;;;;;32358:625:0:o;33104:577::-;33267:16;33316:1;33304:9;:13;33296:69;;;;-1:-1:-1;;;33296:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33396:1;33384:9;:13;:31;;;;;33414:1;33401:10;:14;33384:31;33376:83;;;;-1:-1:-1;;;33376:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33470:17;33490:36;33519:6;33490:24;:9;33504;33490:24;:13;:24;:::i;:::-;:28;:36;:28;:36;:::i;:::-;33470:56;-1:-1:-1;33537:19:0;33559:60;33589:29;33597:6;33609:8;33589:29;:19;:29;:::i;:::-;33559:25;:10;33574:9;33559:25;:14;:25;:::i;:60::-;33537:82;;33641:32;33671:1;33654:11;33642:9;:23;;;;;;;33641:32;:29;:32;:::i;:::-;33630:43;33104:577;-1:-1:-1;;;;;;;33104:577:0:o;24232:1299::-;24345:9;24340:1184;24374:1;24360:4;:11;:15;24356:1;:19;24340:1184;;;24398:13;24413:14;24432:4;24437:1;24432:7;;;;;;;;;;;;;;24441:4;24446:1;24450;24446:5;24441:11;;;;;;;;;;;;;;24397:56;;;;24469:14;24489:42;24517:5;24524:6;24489:27;:42::i;:::-;24468:63;;;24546:19;24583:48;24608:7;24617:5;24624:6;24583:24;:48::i;:::-;24546:86;;24647:19;24681:20;24793:16;24811;24833:4;-1:-1:-1;;;;;24833:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24833:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24833:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;24833:18:0;;;;;;;-1:-1:-1;;;;;24792:59:0;;;;-1:-1:-1;24792:59:0;;-1:-1:-1;24871:20:0;;-1:-1:-1;;;;;24918:15:0;;;;;;;:61;;24960:8;24970;24918:61;;;24937:8;24947;24918:61;24870:109;;;;25012:56;25055:12;25019:5;-1:-1:-1;;;;;25012:23:0;;25044:4;25012:38;;;;;;;;;;;;;-1:-1:-1;;;;;25012:38:0;-1:-1:-1;;;;;25012:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;25012:56:0;24998:70;;25102:88;25132:11;25145:12;25159:13;25174:4;-1:-1:-1;;;;;25174:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25174:15:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25174:15:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;25174:15:0;25102:29;:88::i;:::-;25087:103;;24340:1184;;;;25221:18;25241;25272:6;-1:-1:-1;;;;;25263:15:0;:5;-1:-1:-1;;;;;25263:15:0;;:73;;25311:12;25333:1;25263:73;;;25290:1;25294:12;25263:73;25220:116;;;;25351:10;25382:1;25368:4;:11;:15;25364:1;:19;:82;;25443:3;25364:82;;;25386:54;25411:7;25420:6;25428:4;25433:1;25437;25433:5;25428:11;;;;;;;25386:54;25499:12;;;25509:1;25499:12;;;;;;;;;;-1:-1:-1;;;25461:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;25461:51:0;;;;;;;;;;;;;;;;;;;;;;25351:95;;-1:-1:-1;25461:9:0;;;;;;25471:10;;25483;;25351:95;;25499:12;;25461:51;;;;;;;;25499:12;;25461:51;;;;25499: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;25461:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25461:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;24377:3:0;;;;;-1:-1:-1;24340:1184:0;;-1:-1:-1;;;;;;;;;;24340:1184:0;29457:138;29550:5;;;29545:16;;;;29537:50;;;;;-1:-1:-1;;;29537:50:0;;;;;;;;;;;;-1:-1:-1;;;29537:50:0;;;;;;;;;;;;;;31629:365;31754:15;31800:1;31790:7;:11;31782:60;;;;-1:-1:-1;;;31782:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31872:1;31861:8;:12;:28;;;;;31888:1;31877:8;:12;31861:28;31853:80;;;;-1:-1:-1;;;31853:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31978:8;31954:21;:7;31966:8;31954:21;:11;:21;:::i;:::-;:32;;;;;;;31629:365;-1:-1:-1;;;;31629:365:0:o;29929:347::-;30004:14;30020;30065:6;-1:-1:-1;;;;;30055:16:0;:6;-1:-1:-1;;;;;30055:16:0;;;30047:65;;;;-1:-1:-1;;;30047:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30151:6;-1:-1:-1;;;;;30142:15:0;:6;-1:-1:-1;;;;;30142:15:0;;:53;;30180:6;30188;30142:53;;;30161:6;30169;30142:53;30123:72;;-1:-1:-1;30123:72:0;-1:-1:-1;;;;;;30214:20:0;;30206:62;;;;;-1:-1:-1;;;30206:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;29929:347;;;;;:::o;11065:1418::-;11396:50;;;-1:-1:-1;;;11396:50:0;;-1:-1:-1;;;;;11396:50:0;;;;;;;;;;;;;;;;11295:15;;;;;;11414:7;11396:34;;;;;;:50;;;;;;;;;;;;;;;:34;:50;;;2:2:-1;;;;27:1;24;17:12;2:2;11396:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11396:50:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11396:50:0;-1:-1:-1;;;;;11396:64:0;;11392:150;;;11477:53;;;-1:-1:-1;;;11477:53:0;;-1:-1:-1;;;;;11477:53:0;;;;;;;;;;;;;;;;11495:7;11477:37;;;;;;:53;;;;;;;;;;;;;;;-1:-1:-1;11477:37:0;:53;;;2:2:-1;;;;27:1;24;17:12;2:2;11477:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11477:53:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;11392:150:0;11553:16;11571;11591:53;11620:7;11629:6;11637;11591:28;:53::i;:::-;11552:92;;;;11659:8;11671:1;11659:13;:30;;;;-1:-1:-1;11676:13:0;;11659:30;11655:821;;;11728:14;;-1:-1:-1;11744:14:0;;-1:-1:-1;11655:821:0;;;11792:22;11817:58;11840:14;11856:8;11866;11817:22;:58::i;:::-;11792:83;;11912:14;11894;:32;11890:575;;11973:10;11955:14;:28;;11947:78;;;;-1:-1:-1;;;11947:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12066:14;;-1:-1:-1;12082:14:0;-1:-1:-1;12082:14:0;11890:575;;;12138:22;12163:58;12186:14;12202:8;12212;12163:22;:58::i;:::-;12138:83;;12265:14;12247;:32;;12240:40;;;;12325:10;12307:14;:28;;12299:78;;;;-1:-1:-1;;;12299:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12418:14;-1:-1:-1;12434:14:0;;-1:-1:-1;11890:575:0;11655:821;;11065:1418;;;;;;;;;;;:::o;31077:439::-;31204:16;31222;31252:14;31272:26;31283:6;31291;31272:10;:26::i;:::-;31251:47;;;31310:16;31328;31365:32;31373:7;31382:6;31390;31365:7;:32::i;:::-;-1:-1:-1;;;;;31350:60:0;;:62;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31350:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31350:62:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;31350:62:0;;;;;;;-1:-1:-1;;;;;31309:103:0;;;;-1:-1:-1;31309:103:0;;-1:-1:-1;;;;;;31446:16:0;;;;;;;:62;;31489:8;31499;31446:62;;;31466:8;31476;31446:62;31423:85;;;;-1:-1:-1;31077:439:0;-1:-1:-1;;;;;;;31077:439:0:o;32002:234::-;32129:16;32184:32;32192:7;32201:6;32209;32184:7;:32::i;:::-;-1:-1:-1;;;;;32169:57:0;;:59;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32169:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32169:59:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32169:59:0;;32002:234;-1:-1:-1;;;;32002:234:0:o;29603:151::-;29661:9;29691:6;;;:30;;-1:-1:-1;;29706:5:0;;;29720:1;29715;29706:5;29715:1;29701:15;;;;;:20;29691:30;29683:63;;;;;-1:-1:-1;;;29683:63:0;;;;;;;;;;;;-1:-1:-1;;;29683:63:0;;;;;;;;;;;;;;29312:137;29405:5;;;29400:16;;;;29392:49;;;;;-1:-1:-1;;;29392:49:0;;;;;;;;;;;;-1:-1:-1;;;29392:49:0;;;;;;;;;;;;;

Swarm Source

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