Contract 0xa871f514c70dc3399ab9605258eff5c78d5a95ae

 

Contract Overview

Balance:
0 BNB

BNB Value:
$0.00

Token:
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x6e878a87c01fdc4f090e826e34eac413aace9a3500cced3fd70ac2f6d6667bbdSwap Exact Token...109563862021-09-16 5:54:0019 hrs 49 mins ago0xe38874f4eb3f3d66fe08aebc20bbea096e83e0ec IN  0xa871f514c70dc3399ab9605258eff5c78d5a95ae0 BNB0.00057209
0x714ab048d2bee58e9e1fd56e9573bcbac6e6a57f41ddaac7ac978dd9ad30f817Swap Exact Token...109421172021-09-15 18:00:261 day 7 hrs ago0x52f40b7c26b0e856c2bf7150f5a16d00bb1480a4 IN  0xa871f514c70dc3399ab9605258eff5c78d5a95ae0 BNB0.00074622
0x787a3c8cb4d24c88b7fb4c3117cd87fcd693ca06bf7cf6159f21782e20e73108Swap Exact Token...109403452021-09-15 16:31:501 day 9 hrs ago0x10200b6bc7002f7f1bba1dc53e3e072e550c108c IN  0xa871f514c70dc3399ab9605258eff5c78d5a95ae0 BNB0.00067068
0x9583cc2a71b0fab062eab09d55679251a438f79eb8cd689f653e6f0f0a5428b6Remove Liquidity...109396872021-09-15 15:58:551 day 9 hrs ago0x23f1eca728b8ef7d013f1a18d79e50c5450a8ea6 IN  0xa871f514c70dc3399ab9605258eff5c78d5a95ae0 BNB0.00090951
0xb32da6035140a7a51915e69f495d2dac2450237ab94df6709e5512b576b01018Swap Exact Token...109396562021-09-15 15:57:221 day 9 hrs ago0x23f1eca728b8ef7d013f1a18d79e50c5450a8ea6 IN  0xa871f514c70dc3399ab9605258eff5c78d5a95ae0 BNB0.0007969
0x242590a992951e559c28daa3024791eed62943efb5c13de8bf0d76b7327cf017Swap Exact Token...109396312021-09-15 15:56:071 day 9 hrs ago0x23f1eca728b8ef7d013f1a18d79e50c5450a8ea6 IN  0xa871f514c70dc3399ab9605258eff5c78d5a95ae0 BNB0.000482035
0x01a7cbc90eb95f25e25946786ce410d6352c0193518c21fd311fa11046b0f1d8Remove Liquidity...109395462021-09-15 15:51:521 day 9 hrs ago0x23f1eca728b8ef7d013f1a18d79e50c5450a8ea6 IN  0xa871f514c70dc3399ab9605258eff5c78d5a95ae0 BNB0.001026525
0x6a6463b30e263cc9f406fa376872702e3e997c9e0791bac7f6793cb8f998cce1Swap Exact Token...109394652021-09-15 15:47:491 day 9 hrs ago0x23f1eca728b8ef7d013f1a18d79e50c5450a8ea6 IN  0xa871f514c70dc3399ab9605258eff5c78d5a95ae0 BNB0.00091552
0x7dbe4384ac5387e1915ae02301d469dfd5e9afb7a7331d1156ebb43f46937c0eSwap Exact Token...108974432021-09-14 4:37:122 days 21 hrs ago0x46f0469a56bea9487851fa0bd5228ee793ceaebb IN  0xa871f514c70dc3399ab9605258eff5c78d5a95ae0 BNB0.00067086
0xed06547be6d489bf88b8e40ea29bac7b320c167454f19903534ede1aa0b963caSwap Exact Token...108798852021-09-13 13:57:423 days 11 hrs ago0x8d12954977e2a82bade9dc0fd4932fb344da4e4d IN  0xa871f514c70dc3399ab9605258eff5c78d5a95ae0 BNB0.00055758
0x63377cf12c1318cbbc08957c8a29a2b5c11cfaab362dcfa74f37f9a1cd7a2d0fSwap Exact Token...108798652021-09-13 13:56:423 days 11 hrs ago0x8d12954977e2a82bade9dc0fd4932fb344da4e4d IN  0xa871f514c70dc3399ab9605258eff5c78d5a95ae0 BNB0.00055746
0x3e85d4ae1fc2404a023ef5b8cc370fd57f99b7088fa4a192a8543e31827eebddSwap Exact Token...108798512021-09-13 13:56:003 days 11 hrs ago0x8d12954977e2a82bade9dc0fd4932fb344da4e4d IN  0xa871f514c70dc3399ab9605258eff5c78d5a95ae0 BNB0.00063246
0x60653b8b2ec64d2b35eae73798897894adf36529462a13cca01f9303e947aeb2Swap Exact Token...108795402021-09-13 13:40:273 days 12 hrs ago0x8d12954977e2a82bade9dc0fd4932fb344da4e4d IN  0xa871f514c70dc3399ab9605258eff5c78d5a95ae0 BNB0.000481795
0xed5ed5473e1079a23ac9520492fdbb7dfc07a1d7418db82d497de847c4ecfbeaSwap Exact Token...108795272021-09-13 13:39:483 days 12 hrs ago0x8d12954977e2a82bade9dc0fd4932fb344da4e4d IN  0xa871f514c70dc3399ab9605258eff5c78d5a95ae0 BNB0.000482145
0xf589d39afc0ab6a21368e7cf0e939d4acfcb69de08164b54d514a91c56c555e3Swap Exact Token...108795032021-09-13 13:38:363 days 12 hrs ago0x8d12954977e2a82bade9dc0fd4932fb344da4e4d IN  0xa871f514c70dc3399ab9605258eff5c78d5a95ae0 BNB0.0008719
0x7ef3dde633ce0ca19e92f04bd1aa776c4e509920ab019f80f788709853765686Swap Exact Token...108794882021-09-13 13:37:513 days 12 hrs ago0x8d12954977e2a82bade9dc0fd4932fb344da4e4d IN  0xa871f514c70dc3399ab9605258eff5c78d5a95ae0 BNB0.000557025
0xea7ce5f57bc08b7f4cba1550d51d671717618fc25b5cfc196ef7f4d1b4f14276Swap Exact Token...108794712021-09-13 13:37:003 days 12 hrs ago0x8d12954977e2a82bade9dc0fd4932fb344da4e4d IN  0xa871f514c70dc3399ab9605258eff5c78d5a95ae0 BNB0.00091552
0x1538f9dc063f04b78d768b8a4dbbb283d2d15cf5492304a4934940941a5f50c6Swap Exact Token...108777962021-09-13 12:12:403 days 13 hrs ago0x43ff897eb872539be37a3093b8f49467a8ba4dc3 IN  0xa871f514c70dc3399ab9605258eff5c78d5a95ae0 BNB0.00098611
0x0f4d4862401d2988bf1229c0f1b966b887487069dda1c521f321385ce03d1d60Remove Liquidity...108739902021-09-13 9:01:213 days 16 hrs ago0xb285bf0b96031534fdd7f1908153343b4385def5 IN  0xa871f514c70dc3399ab9605258eff5c78d5a95ae0 BNB0.00090476
0x3b11ff48755f7e7e48e0c6edaecef26ad9ef0628d7bb5c7deff7e277dd0261bfSwap Exact Token...108660402021-09-13 2:23:383 days 23 hrs ago0xe38874f4eb3f3d66fe08aebc20bbea096e83e0ec IN  0xa871f514c70dc3399ab9605258eff5c78d5a95ae0 BNB0.000883895
0x7483e6d2a8e9ad467970248e6d86bf4a18b6754d54a9063ad25ce1f7c41224efSwap Exact Token...108372772021-09-12 2:24:214 days 23 hrs ago0xd0eba879929520e588717317af05d01fb793427d IN  0xa871f514c70dc3399ab9605258eff5c78d5a95ae0 BNB0.0006708
0xfd82e5e796a06494e69a062bd1b8ab4359dc33c471c0df79d9b3abc41485be75Add Liquidity ET...108195192021-09-11 11:29:185 days 14 hrs ago0x7ef6fb2b16fb7c689ddc097fa25226b3eefa5c2c IN  0xa871f514c70dc3399ab9605258eff5c78d5a95ae0.01731541218896 BNB0.00086639
0xc1008b2e148c68775bd344e7fdbc92a5f9030682ebee79967825c3dfa0523af0Swap Exact ETH F...108195032021-09-11 11:28:305 days 14 hrs ago0x7ef6fb2b16fb7c689ddc097fa25226b3eefa5c2c IN  0xa871f514c70dc3399ab9605258eff5c78d5a95ae0.02 BNB0.000657855
0x5013575805b695f4d728101908c8fea981c5f288fec4059e8e7329786c72123dSwap Exact Token...107958682021-09-10 15:29:536 days 10 hrs ago0x73ca6468a772c6b936aa0df9bc31f8b7d6c482df IN  0xa871f514c70dc3399ab9605258eff5c78d5a95ae0 BNB0.00123079
0xe6e5b5577882c4736d8c8e73bb5d1ab5dfbde71f8cef33cfc9eaa15cde6237efRemove Liquidity...107958052021-09-10 15:26:446 days 10 hrs ago0x73ca6468a772c6b936aa0df9bc31f8b7d6c482df IN  0xa871f514c70dc3399ab9605258eff5c78d5a95ae0 BNB0.00090798
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x6e878a87c01fdc4f090e826e34eac413aace9a3500cced3fd70ac2f6d6667bbd109563862021-09-16 5:54:0019 hrs 49 mins ago 0xa871f514c70dc3399ab9605258eff5c78d5a95ae0xe38874f4eb3f3d66fe08aebc20bbea096e83e0ec0.102424885677723257 BNB
0x6e878a87c01fdc4f090e826e34eac413aace9a3500cced3fd70ac2f6d6667bbd109563862021-09-16 5:54:0019 hrs 49 mins ago Binance: WBNB Token 0xa871f514c70dc3399ab9605258eff5c78d5a95ae0.102424885677723257 BNB
0x787a3c8cb4d24c88b7fb4c3117cd87fcd693ca06bf7cf6159f21782e20e73108109403452021-09-15 16:31:501 day 9 hrs ago 0xa871f514c70dc3399ab9605258eff5c78d5a95ae0x10200b6bc7002f7f1bba1dc53e3e072e550c108c0.01643841863593585 BNB
0x787a3c8cb4d24c88b7fb4c3117cd87fcd693ca06bf7cf6159f21782e20e73108109403452021-09-15 16:31:501 day 9 hrs ago Binance: WBNB Token 0xa871f514c70dc3399ab9605258eff5c78d5a95ae0.01643841863593585 BNB
0x01a7cbc90eb95f25e25946786ce410d6352c0193518c21fd311fa11046b0f1d8109395462021-09-15 15:51:521 day 9 hrs ago 0xa871f514c70dc3399ab9605258eff5c78d5a95ae0x23f1eca728b8ef7d013f1a18d79e50c5450a8ea60.175721004161047482 BNB
0x01a7cbc90eb95f25e25946786ce410d6352c0193518c21fd311fa11046b0f1d8109395462021-09-15 15:51:521 day 9 hrs ago Binance: WBNB Token 0xa871f514c70dc3399ab9605258eff5c78d5a95ae0.175721004161047482 BNB
0x7dbe4384ac5387e1915ae02301d469dfd5e9afb7a7331d1156ebb43f46937c0e108974432021-09-14 4:37:122 days 21 hrs ago 0xa871f514c70dc3399ab9605258eff5c78d5a95ae0x46f0469a56bea9487851fa0bd5228ee793ceaebb0.111679243236582712 BNB
0x7dbe4384ac5387e1915ae02301d469dfd5e9afb7a7331d1156ebb43f46937c0e108974432021-09-14 4:37:122 days 21 hrs ago Binance: WBNB Token 0xa871f514c70dc3399ab9605258eff5c78d5a95ae0.111679243236582712 BNB
0x1538f9dc063f04b78d768b8a4dbbb283d2d15cf5492304a4934940941a5f50c6108777962021-09-13 12:12:403 days 13 hrs ago 0xa871f514c70dc3399ab9605258eff5c78d5a95ae0x43ff897eb872539be37a3093b8f49467a8ba4dc30.020552631992648271 BNB
0x1538f9dc063f04b78d768b8a4dbbb283d2d15cf5492304a4934940941a5f50c6108777962021-09-13 12:12:403 days 13 hrs ago Binance: WBNB Token 0xa871f514c70dc3399ab9605258eff5c78d5a95ae0.020552631992648271 BNB
0x3b11ff48755f7e7e48e0c6edaecef26ad9ef0628d7bb5c7deff7e277dd0261bf108660402021-09-13 2:23:383 days 23 hrs ago 0xa871f514c70dc3399ab9605258eff5c78d5a95ae0xe38874f4eb3f3d66fe08aebc20bbea096e83e0ec0.100400958224294309 BNB
0x3b11ff48755f7e7e48e0c6edaecef26ad9ef0628d7bb5c7deff7e277dd0261bf108660402021-09-13 2:23:383 days 23 hrs ago Binance: WBNB Token 0xa871f514c70dc3399ab9605258eff5c78d5a95ae0.100400958224294309 BNB
0x7483e6d2a8e9ad467970248e6d86bf4a18b6754d54a9063ad25ce1f7c41224ef108372772021-09-12 2:24:214 days 23 hrs ago 0xa871f514c70dc3399ab9605258eff5c78d5a95ae0xd0eba879929520e588717317af05d01fb793427d0.052253772782866434 BNB
0x7483e6d2a8e9ad467970248e6d86bf4a18b6754d54a9063ad25ce1f7c41224ef108372772021-09-12 2:24:214 days 23 hrs ago Binance: WBNB Token 0xa871f514c70dc3399ab9605258eff5c78d5a95ae0.052253772782866434 BNB
0xfd82e5e796a06494e69a062bd1b8ab4359dc33c471c0df79d9b3abc41485be75108195192021-09-11 11:29:185 days 14 hrs ago 0xa871f514c70dc3399ab9605258eff5c78d5a95ae Binance: WBNB Token0.017315412188960011 BNB
0xc1008b2e148c68775bd344e7fdbc92a5f9030682ebee79967825c3dfa0523af0108195032021-09-11 11:28:305 days 14 hrs ago 0xa871f514c70dc3399ab9605258eff5c78d5a95ae Binance: WBNB Token0.02 BNB
0xbda5e5e8f52f6ecf3ad55640bfec4ef6e859f2728c65bb3277764e06c765c40d107891352021-09-10 9:49:346 days 15 hrs ago 0xa871f514c70dc3399ab9605258eff5c78d5a95ae0x0ff50eb9c72cdc85dfae57bdf7c9e27a5b5e3e040.008322930580636487 BNB
0xbda5e5e8f52f6ecf3ad55640bfec4ef6e859f2728c65bb3277764e06c765c40d107891352021-09-10 9:49:346 days 15 hrs ago Binance: WBNB Token 0xa871f514c70dc3399ab9605258eff5c78d5a95ae0.008322930580636487 BNB
0xc5f2ed68135f1e3174be24082377012091882f25d3cb7cf360f3049d2ab4b5f2107803482021-09-10 2:26:026 days 23 hrs ago 0xa871f514c70dc3399ab9605258eff5c78d5a95ae0xe38874f4eb3f3d66fe08aebc20bbea096e83e0ec0.075112000692802392 BNB
0xc5f2ed68135f1e3174be24082377012091882f25d3cb7cf360f3049d2ab4b5f2107803482021-09-10 2:26:026 days 23 hrs ago Binance: WBNB Token 0xa871f514c70dc3399ab9605258eff5c78d5a95ae0.075112000692802392 BNB
0x469ef22c5b00aea916d39677dfac90d960f09b1d96fdb94f619f47a630f97768107801432021-09-10 2:15:466 days 23 hrs ago 0xa871f514c70dc3399ab9605258eff5c78d5a95ae0xfb56a5096afbc57aed59949fa72504d9642348340.031758601750212055 BNB
0x469ef22c5b00aea916d39677dfac90d960f09b1d96fdb94f619f47a630f97768107801432021-09-10 2:15:466 days 23 hrs ago Binance: WBNB Token 0xa871f514c70dc3399ab9605258eff5c78d5a95ae0.031758601750212055 BNB
0x95efea6622c45418848fca9646babb3eb851d567ec68d7a384f9d47feae8c184107801112021-09-10 2:14:106 days 23 hrs ago 0xa871f514c70dc3399ab9605258eff5c78d5a95ae0xfb56a5096afbc57aed59949fa72504d9642348340.019040268074082491 BNB
0x95efea6622c45418848fca9646babb3eb851d567ec68d7a384f9d47feae8c184107801112021-09-10 2:14:106 days 23 hrs ago Binance: WBNB Token 0xa871f514c70dc3399ab9605258eff5c78d5a95ae0.019040268074082491 BNB
0xc141934fb17947aee9af61e87e42b2d6dd8a33c3f96712c44c5bbb63a2eae64e107668312021-09-09 15:04:167 days 10 hrs ago 0xa871f514c70dc3399ab9605258eff5c78d5a95ae0x43ff897eb872539be37a3093b8f49467a8ba4dc30.024059989197116538 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DollaremonRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-06-08
*/

// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0;

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

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

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

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

pragma solidity >=0.6.2;

interface IPancakeRouter01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

pragma solidity >=0.6.2;

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

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

pragma solidity >=0.5.0;

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

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

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

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

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

    function INIT_CODE_PAIR_HASH() external view returns (bytes32);
}

pragma solidity =0.6.6;

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

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

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

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

pragma solidity >=0.5.0;

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

pragma solidity >=0.5.0;



library PancakeLibrary {
    using SafeMath for uint;

    // returns sorted token addresses, used to handle return values from pairs sorted in this order
    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
        require(tokenA != tokenB, 'DollaremonLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'DollaremonLibrary: ZERO_ADDRESS');
    }

    // calculates the CREATE2 address for a pair without making any external calls
    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {
        (address token0, address token1) = sortTokens(tokenA, tokenB);
        pair = address(uint(keccak256(abi.encodePacked(
                hex'ff',
                factory,
                keccak256(abi.encodePacked(token0, token1)),
                hex'723adb1ad5c746ee1ef6c1bd1e062035dc9ad566e82912cff357a8689761385b' // init code hash
            ))));
    }

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

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

    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) {
        require(amountIn > 0, 'DollaremonLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'DollaremonLibrary: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(9975);
        uint numerator = amountInWithFee.mul(reserveOut);
        uint denominator = reserveIn.mul(10000).add(amountInWithFee);
        amountOut = numerator / denominator;
    }

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

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

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

pragma solidity >=0.5.0;

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

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

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


pragma solidity >=0.5.0;

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

pragma solidity =0.6.6;

contract DollaremonRouter is IPancakeRouter02 {
    using SafeMath for uint;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Contract Security Audit

Contract ABI

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

60c060405234801561001057600080fd5b506040516200477d3803806200477d8339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6145f8620001856000398061015f5280610ce45280610d1f5280610e16528061103452806113be528061152452806118eb52806119e55280611a9b5280611b695280611caf5280611d375280611f7c5280611ff752806120a652806121725280612207528061227b528061277952806129ec5280612a425280612a765280612aea5280612c8a5280612dcd5280612e55525080610ea45280610f7b52806110fa5280611133528061126e528061144c528061150252806116725280611bfc5280611d695280611ecc52806122ad528061250652806126fe5280612727528061275752806128c45280612a205280612d1d5280612e87528061372e52806137715280613a545280613bd3528061400352806140b1528061413152506145f86000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b03813516906020013561189d565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b21565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e74565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e81565b34801561088157600080fd5b5061088a611f7a565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f9e565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fab565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b03813516906020013561212c565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124b8565b348015610a1c57600080fd5b5061088a6126fc565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612720945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561274d565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612861565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561299d565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612c42565b6000808242811015610cde576040805162461bcd60e51b8152602060048201526019602482015260008051602061457d833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124b8565b9093509150610d1d898685612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da5858361312e565b50965096945050505050565b6000610dbe848484613226565b949350505050565b60608142811015610e0c576040805162461bcd60e51b8152602060048201526019602482015260008051602061457d833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b815260206004820152601e6024820152600080516020614539833981519152604482015290519081900360640190fd5b610efd7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b815260040180806020018281038252602c815260200180614497602c913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b0316613462565b85600081518110610fe657fe5b6020026020010151613522565b6110328287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061367f915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b602002602001015161312e565b509695505050505050565b60606111207f000000000000000000000000000000000000000000000000000000000000000084846138c5565b90505b92915050565b60008060006111597f00000000000000000000000000000000000000000000000000000000000000008f8f613462565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f6124b8565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b8152602060048201526019602482015260008051602061457d833981519152604482015290519081900360640190fd5b6112c77f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b815260040180806020018281038252602c815260200180614497602c913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e88287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b606081428110156113b4576040805162461bcd60e51b8152602060048201526019602482015260008051602061457d833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b815260206004820152601e6024820152600080516020614539833981519152604482015290519081900360640190fd5b6114a57f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b815260040180806020018281038252602881526020018061446f6028913960400191505060405180910390fd5b6000806115487f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611fab565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b8152602060048201526019602482015260008051602061457d833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a613522565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b505160408051602088810282810182019093528882529293506117a49290918991899182918501908490808284376000920191909152508892506139fd915050565b8661185682888860001981018181106117b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d602081101561184857600080fd5b50519063ffffffff613d0816565b10156118935760405162461bcd60e51b815260040180806020018281038252602c815260200180614497602c913960400191505060405180910390fd5b5050505050505050565b80428110156118e1576040805162461bcd60e51b8152602060048201526019602482015260008051602061457d833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061191b57fe5b905060200201356001600160a01b03166001600160a01b031614611974576040805162461bcd60e51b815260206004820152601e6024820152600080516020614539833981519152604482015290519081900360640190fd5b6119848585600081811061165c57fe5b6119c28585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506139fd915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a2c57600080fd5b505afa158015611a40573d6000803e3d6000fd5b505050506040513d6020811015611a5657600080fd5b5051905086811015611a995760405162461bcd60e51b815260040180806020018281038252602c815260200180614497602c913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aff57600080fd5b505af1158015611b13573d6000803e3d6000fd5b50505050611893848261312e565b60608142811015611b67576040805162461bcd60e51b8152602060048201526019602482015260008051602061457d833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b9e57fe5b905060200201356001600160a01b03166001600160a01b031614611bf7576040805162461bcd60e51b815260206004820152601e6024820152600080516020614539833981519152604482015290519081900360640190fd5b611c557f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110611c6857fe5b60200260200101511015611cad5760405162461bcd60e51b815260040180806020018281038252602c815260200180614497602c913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611ce957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1c57600080fd5b505af1158015611d30573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d957f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110611da257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b505050506040513d6020811015611e2357600080fd5b5051611e2b57fe5b611e6a8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b5095945050505050565b6000610dbe848484613d58565b60608142811015611ec7576040805162461bcd60e51b8152602060048201526019602482015260008051602061457d833981519152604482015290519081900360640190fd5b611f257f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91508682600081518110611f3557fe5b6020026020010151111561131f5760405162461bcd60e51b815260040180806020018281038252602881526020018061446f6028913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613e48565b60008142811015611ff1576040805162461bcd60e51b8152602060048201526019602482015260008051602061457d833981519152604482015290519081900360640190fd5b612020887f000000000000000000000000000000000000000000000000000000000000000089898930896124b8565b604080516370a0823160e01b815230600482015290519194506120a492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561207357600080fd5b505afa158015612087573d6000803e3d6000fd5b505050506040513d602081101561209d57600080fd5b5051612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561210a57600080fd5b505af115801561211e573d6000803e3d6000fd5b505050506110e8848361312e565b8042811015612170576040805162461bcd60e51b8152602060048201526019602482015260008051602061457d833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106121a757fe5b905060200201356001600160a01b03166001600160a01b031614612200576040805162461bcd60e51b815260206004820152601e6024820152600080516020614539833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122d97f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561232957600080fd5b505af115801561233d573d6000803e3d6000fd5b505050506040513d602081101561235357600080fd5b505161235b57fe5b60008686600019810181811061236d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123d257600080fd5b505afa1580156123e6573d6000803e3d6000fd5b505050506040513d60208110156123fc57600080fd5b5051604080516020898102828101820190935289825292935061243e9290918a918a9182918501908490808284376000920191909152508992506139fd915050565b87611856828989600019810181811061245357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b60008082428110156124ff576040805162461bcd60e51b8152602060048201526019602482015260008051602061457d833981519152604482015290519081900360640190fd5b600061252c7f00000000000000000000000000000000000000000000000000000000000000008c8c613462565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561258757600080fd5b505af115801561259b573d6000803e3d6000fd5b505050506040513d60208110156125b157600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125fe57600080fd5b505af1158015612612573d6000803e3d6000fd5b505050506040513d604081101561262857600080fd5b508051602090910151909250905060006126428e8e613ef4565b509050806001600160a01b03168e6001600160a01b031614612665578183612668565b82825b90975095508a8710156126ac5760405162461bcd60e51b81526004018080602001828103825260278152602001806143cc6027913960400191505060405180910390fd5b898610156126eb5760405162461bcd60e51b81526004018080602001828103825260278152602001806145126027913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111207f00000000000000000000000000000000000000000000000000000000000000008484613316565b600080600061279d7f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613462565b90506000876127ac578c6127b0565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561282657600080fd5b505af115801561283a573d6000803e3d6000fd5b5050505061284c8e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b600080600083428110156128aa576040805162461bcd60e51b8152602060048201526019602482015260008051602061457d833981519152604482015290519081900360640190fd5b6128b88c8c8c8c8c8c613fd2565b909450925060006128ea7f00000000000000000000000000000000000000000000000000000000000000008e8e613462565b90506128f88d338388613522565b6129048c338387613522565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561295c57600080fd5b505af1158015612970573d6000803e3d6000fd5b505050506040513d602081101561298657600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129e6576040805162461bcd60e51b8152602060048201526019602482015260008051602061457d833981519152604482015290519081900360640190fd5b612a148a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613fd2565b90945092506000612a667f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050612a748b338388613522565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612acf57600080fd5b505af1158015612ae3573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b6857600080fd5b505af1158015612b7c573d6000803e3d6000fd5b505050506040513d6020811015612b9257600080fd5b5051612b9a57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612bf257600080fd5b505af1158015612c06573d6000803e3d6000fd5b505050506040513d6020811015612c1c57600080fd5b5051925034841015612c3457612c343385340361312e565b505096509650969350505050565b60608142811015612c88576040805162461bcd60e51b8152602060048201526019602482015260008051602061457d833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612cbf57fe5b905060200201356001600160a01b03166001600160a01b031614612d18576040805162461bcd60e51b815260206004820152601e6024820152600080516020614539833981519152604482015290519081900360640190fd5b612d767f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91503482600081518110612d8657fe5b60200260200101511115612dcb5760405162461bcd60e51b815260040180806020018281038252602881526020018061446f6028913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e0757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e3a57600080fd5b505af1158015612e4e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612eb37f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110612ec057fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b505050506040513d6020811015612f4157600080fd5b5051612f4957fe5b612f888287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b81600081518110612f9557fe5b6020026020010151341115611e6a57611e6a3383600081518110612fb557fe5b6020026020010151340361312e565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130415780518252601f199092019160209182019101613022565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130a3576040519150601f19603f3d011682016040523d82523d6000602084013e6130a8565b606091505b50915091508180156130d65750805115806130d657508080602001905160208110156130d357600080fd5b50515b613127576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061317a5780518252601f19909201916020918201910161315b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131dc576040519150601f19603f3d011682016040523d82523d6000602084013e6131e1565b606091505b50509050806132215760405162461bcd60e51b81526004018080602001828103825260238152602001806144c36023913960400191505060405180910390fd5b505050565b60008084116132665760405162461bcd60e51b815260040180806020018281038252602c8152602001806144e6602c913960400191505060405180910390fd5b6000831180156132765750600082115b6132b15760405162461bcd60e51b81526004018080602001828103825260298152602001806144466029913960400191505060405180910390fd5b60006132c5856126f763ffffffff61424616565b905060006132d9828563ffffffff61424616565b905060006132ff836132f38861271063ffffffff61424616565b9063ffffffff6142a916565b905080828161330a57fe5b04979650505050505050565b606060028251101561336f576040805162461bcd60e51b815260206004820152601f60248201527f446f6c6c6172656d6f6e4c6962726172793a20494e56414c49445f5041544800604482015290519081900360640190fd5b815167ffffffffffffffff8111801561338757600080fd5b506040519080825280602002602001820160405280156133b1578160200160208202803683370190505b50905082816000815181106133c257fe5b60200260200101818152505060005b600183510381101561345a57600080613414878685815181106133f057fe5b602002602001015187866001018151811061340757fe5b60200260200101516142f8565b9150915061343684848151811061342757fe5b60200260200101518383613226565b84846001018151811061344557fe5b602090810291909101015250506001016133d1565b509392505050565b60008060006134718585613ef4565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f723adb1ad5c746ee1ef6c1bd1e062035dc9ad566e82912cff357a8689761385b609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135a75780518252601f199092019160209182019101613588565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613609576040519150601f19603f3d011682016040523d82523d6000602084013e61360e565b606091505b509150915081801561363c57508051158061363c575080806020019051602081101561363957600080fd5b50515b6136775760405162461bcd60e51b81526004018080602001828103825260248152602001806145596024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138bf5760008084838151811061369d57fe5b60200260200101518584600101815181106136b457fe5b60200260200101519150915060006136cc8383613ef4565b50905060008785600101815181106136e057fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461370e57826000613712565b6000835b91509150600060028a51038810613729578861376a565b61376a7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061375d57fe5b6020026020010151613462565b90506137977f00000000000000000000000000000000000000000000000000000000000000008888613462565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156137d4576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561384557818101518382015260200161382d565b50505050905090810190601f1680156138725780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561389457600080fd5b505af11580156138a8573d6000803e3d6000fd5b505060019099019850613682975050505050505050565b50505050565b606060028251101561391e576040805162461bcd60e51b815260206004820152601f60248201527f446f6c6c6172656d6f6e4c6962726172793a20494e56414c49445f5041544800604482015290519081900360640190fd5b815167ffffffffffffffff8111801561393657600080fd5b50604051908082528060200260200182016040528015613960578160200160208202803683370190505b509050828160018351038151811061397457fe5b60209081029190910101528151600019015b801561345a576000806139b6878660018603815181106139a257fe5b602002602001015187868151811061340757fe5b915091506139d88484815181106139c957fe5b60200260200101518383613d58565b8460018503815181106139e757fe5b6020908102919091010152505060001901613986565b60005b600183510381101561322157600080848381518110613a1b57fe5b6020026020010151858460010181518110613a3257fe5b6020026020010151915091506000613a4a8383613ef4565b5090506000613a7a7f00000000000000000000000000000000000000000000000000000000000000008585613462565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613abb57600080fd5b505afa158015613acf573d6000803e3d6000fd5b505050506040513d6060811015613ae557600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613b1b578284613b1e565b83835b91509150613b7c828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b9550613b89868383613226565b945050505050600080856001600160a01b0316886001600160a01b031614613bb357826000613bb7565b6000835b91509150600060028c51038a10613bce578a613c02565b613c027f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061375d57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c8c578181015183820152602001613c74565b50505050905090810190601f168015613cb95780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613cdb57600080fd5b505af1158015613cef573d6000803e3d6000fd5b50506001909b019a50613a009950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613d985760405162461bcd60e51b815260040180806020018281038252602d8152602001806143f3602d913960400191505060405180910390fd5b600083118015613da85750600082115b613de35760405162461bcd60e51b81526004018080602001828103825260298152602001806144466029913960400191505060405180910390fd5b6000613e07612710613dfb868863ffffffff61424616565b9063ffffffff61424616565b90506000613e216126f7613dfb868963ffffffff613d0816565b9050613e3e6001828481613e3157fe5b049063ffffffff6142a916565b9695505050505050565b6000808411613e885760405162461bcd60e51b815260040180806020018281038252602681526020018061459d6026913960400191505060405180910390fd5b600083118015613e985750600082115b613ed35760405162461bcd60e51b81526004018080602001828103825260298152602001806144466029913960400191505060405180910390fd5b82613ee4858463ffffffff61424616565b81613eeb57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613f485760405162461bcd60e51b81526004018080602001828103825260268152602001806144206026913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613f68578284613f6b565b83835b90925090506001600160a01b038216613fcb576040805162461bcd60e51b815260206004820152601f60248201527f446f6c6c6172656d6f6e4c6962726172793a205a45524f5f4144445245535300604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561404c57600080fd5b505afa158015614060573d6000803e3d6000fd5b505050506040513d602081101561407657600080fd5b50516001600160a01b0316141561412957604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156140fc57600080fd5b505af1158015614110573d6000803e3d6000fd5b505050506040513d602081101561412657600080fd5b50505b6000806141577f00000000000000000000000000000000000000000000000000000000000000008b8b6142f8565b91509150816000148015614169575080155b1561417957879350869250614239565b6000614186898484613e48565b90508781116141d957858110156141ce5760405162461bcd60e51b81526004018080602001828103825260278152602001806145126027913960400191505060405180910390fd5b889450925082614237565b60006141e6898486613e48565b9050898111156141f257fe5b878110156142315760405162461bcd60e51b81526004018080602001828103825260278152602001806143cc6027913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806142615750508082028282828161425e57fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006143078585613ef4565b509050614315868686613462565b50600080614324888888613462565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561435c57600080fd5b505afa158015614370573d6000803e3d6000fd5b505050506040513d606081101561438657600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146143b95780826143bc565b81815b9099909850965050505050505056fe446f6c6c6172656d6f6e526f757465723a20494e53554646494349454e545f415f414d4f554e54446f6c6c6172656d6f6e4c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54446f6c6c6172656d6f6e4c6962726172793a204944454e544943414c5f414444524553534553446f6c6c6172656d6f6e4c6962726172793a20494e53554646494349454e545f4c4951554944495459446f6c6c6172656d6f6e526f757465723a204558434553534956455f494e5055545f414d4f554e54446f6c6c6172656d6f6e526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544446f6c6c6172656d6f6e4c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54446f6c6c6172656d6f6e526f757465723a20494e53554646494349454e545f425f414d4f554e54446f6c6c6172656d6f6e526f757465723a20494e56414c49445f5041544800005472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544446f6c6c6172656d6f6e526f757465723a204558504952454400000000000000446f6c6c6172656d6f6e4c6962726172793a20494e53554646494349454e545f414d4f554e54a26469706673582212203e11f3e57bba7586d4e13eb444edebadc030dc1b5243523d2af2e3ffb3c9f2ca64736f6c63430006060033000000000000000000000000cb4ee9910811edb5ff3fe0e3ce3a8ced25e24079000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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

000000000000000000000000cb4ee9910811edb5ff3fe0e3ce3a8ced25e24079000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

-----Decoded View---------------
Arg [0] : _factory (address): 0xcb4ee9910811edb5ff3fe0e3ce3a8ced25e24079
Arg [1] : _WETH (address): 0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000cb4ee9910811edb5ff3fe0e3ce3a8ced25e24079
Arg [1] : 000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c


Deployed ByteCode Sourcemap

15842:18468:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16322:10;-1:-1:-1;;;;;16336:4:0;16322:18;;16315:26;;;;15842:18468;;12:1:-1;9;2:12;20450:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20450:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20450:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33262:260;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33262:260:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33262:260:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27589:848;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27589:848:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27589:848:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27589:848:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27589:848: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;27589:848:0;;-1:-1:-1;27589:848:0;-1:-1:-1;;;;;;27589:848: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;27589:848:0;;;;;;;;;;;;;;;;;34056:251;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34056:251:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34056:251:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34056:251:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34056:251: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;34056:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34056:251:0;;-1:-1:-1;34056:251:0;;-1:-1:-1;;;;;34056:251:0:i;21129:673::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21129:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21129:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24816:625::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24816:625:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24816:625:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;24816:625:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24816:625: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;24816:625:0;;-1:-1:-1;24816:625:0;-1:-1:-1;;;;;;24816:625:0;;;;;;;;:::i;26757:826::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26757:826:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26757:826:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26757:826:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26757:826:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26757:826:0;;-1:-1:-1;26757:826:0;-1:-1:-1;;;;;;26757:826:0;;;;;;;;:::i;23258:714::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23258:714:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23258:714:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30606:713::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30606:713:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30606:713:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30606:713:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30606:713: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;30606:713:0;;-1:-1:-1;30606:713:0;-1:-1:-1;;;;;;30606:713:0;;;;;;;;:::i;32181:843::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32181:843:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32181:843:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;32181:843:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32181:843:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;32181:843:0;;-1:-1:-1;32181:843:0;-1:-1:-1;;;;;;32181:843:0;;;;;;;;:::i;26056:695::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26056:695:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26056:695:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26056:695: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;26056:695:0;;-1:-1:-1;26056:695:0;-1:-1:-1;;;;;;26056:695:0;;;;;;;;:::i;33530:259::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33530:259:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33530:259:0;;;;;;;;;;;;:::i;25447:603::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25447:603:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25447:603:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25447:603:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25447:603: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;25447:603:0;;-1:-1:-1;25447:603:0;-1:-1:-1;;;;;;25447:603:0;;;;;;;;:::i;15975:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15975:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;15975:38:0;;;;;;;;;;;;;;33068:186;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33068:186:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33068:186:0;;;;;;;;;;;;:::i;22552:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22552:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22552:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31325:850::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31325:850:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31325:850:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31325:850:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31325:850:0;;-1:-1:-1;31325:850:0;-1:-1:-1;;;;;;31325:850:0;;;;;;;;:::i;19585:859::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19585:859:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19585:859:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15927:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15927:41:0;;;:::i;33797:251::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33797:251:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33797:251:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33797:251:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33797:251: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;33797:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33797:251:0;;-1:-1:-1;33797:251:0;;-1:-1:-1;;;;;33797:251:0:i;21808:665::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21808:665:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21808:665:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17832:734::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17832:734:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;17832:734:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;18572:970;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18572:970:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28443:808::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28443:808:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28443:808:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28443:808: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;28443:808:0;;-1:-1:-1;28443:808:0;-1:-1:-1;;;;;;28443:808:0;;;;;;;;:::i;20450:673::-;20687:16;20705:14;20668:8;16084:15;16072:8;:27;;16064:65;;;;;-1:-1:-1;;;16064:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16064:65:0;;;;;;;;;;;;;;;20759:196:::1;20789:5;20809:4;20828:9;20852:14;20881:12;20916:4;20936:8;20759:15;:196::i;:::-;20732:223:::0;;-1:-1:-1;20732:223:0;-1:-1:-1;20966:51:0::1;20994:5:::0;21001:2;20732:223;20966:27:::1;:51::i;:::-;21034:4;-1:-1:-1::0;;;;;21028:20:0::1;;21049:9;21028:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21028:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21028:31:0;;;;21070:45;21101:2;21105:9;21070:30;:45::i;:::-;20450:673:::0;;;;;;;;;;:::o;33262:260::-;33415:14;33454:60;33482:8;33492:9;33503:10;33454:27;:60::i;:::-;33447:67;33262:260;-1:-1:-1;;;;33262:260:0:o;27589:848::-;27803:21;27775:8;16084:15;16072:8;:27;;16064:65;;;;;-1:-1:-1;;;16064:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16064:65:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27875:4:0::1;27850:29;:4:::0;;-1:-1:-1;;27855:15:0;;27850:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27850:21:0::1;-1:-1:-1::0;;;;;27850:29:0::1;;27842:72;;;::::0;;-1:-1:-1;;;27842:72:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27842:72:0;;;;;;;;;;;;;::::1;;27935:53;27964:7;27973:8;27983:4;;27935:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27935:28:0::1;::::0;-1:-1:-1;;;27935:53:0:i:1;:::-;27925:63;;28038:12;28007:7;28032:1;28015:7;:14;:18;28007:27;;;;;;;;;;;;;;:43;;27999:100;;;;-1:-1:-1::0;;;27999:100:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28110:139;28156:4;;28161:1;28156:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28156:7:0::1;28165:10;28177:49;28200:7;28209:4;;28214:1;28209:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28209:7:0::1;28218:4;;28223:1;28218:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28218:7:0::1;28177:22;:49::i;:::-;28228:7;28236:1;28228:10;;;;;;;;;;;;;;28110:31;:139::i;:::-;28260:35;28266:7;28275:4;;28260:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28289:4:0::1;::::0;-1:-1:-1;28260:5:0::1;::::0;-1:-1:-1;;28260:35:0:i:1;:::-;28312:4;-1:-1:-1::0;;;;;28306:20:0::1;;28327:7;28352:1;28335:7;:14;:18;28327:27;;;;;;;;;;;;;;28306:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28306:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28306:49:0;;;;28366:63;28397:2;28401:7;28426:1;28409:7;:14;:18;28401:27;;;;;;;;;;;;;;28366:30;:63::i;:::-;27589:848:::0;;;;;;;;;:::o;34056:251::-;34200:21;34246:53;34274:7;34283:9;34294:4;34246:27;:53::i;:::-;34239:60;;34056:251;;;;;:::o;21129:673::-;21435:12;21449;21474;21489:47;21512:7;21521:6;21529;21489:22;:47::i;:::-;21474:62;;21547:10;21560;:33;;21584:9;21560:33;;;-1:-1:-1;;21560:33:0;21604:78;;;-1:-1:-1;;;21604:78:0;;21630:10;21604:78;;;;21650:4;21604:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21547:46;;-1:-1:-1;;;;;;21604:25:0;;;;;:78;;;;;-1:-1:-1;;21604:78:0;;;;;;;;-1:-1:-1;21604:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;21604:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21604:78:0;;;;21714:80;21730:6;21738;21746:9;21757:10;21769;21781:2;21785:8;21714:15;:80::i;:::-;21693:101;;;;;;;;21129:673;;;;;;;;;;;;;;;;:::o;24816:625::-;25040:21;25021:8;16084:15;16072:8;:27;;16064:65;;;;;-1:-1:-1;;;16064:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16064:65:0;;;;;;;;;;;;;;;25084:53:::1;25113:7;25122:8;25132:4;;25084:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25084:28:0::1;::::0;-1:-1:-1;;;25084:53:0:i:1;:::-;25074:63;;25187:12;25156:7;25181:1;25164:7;:14;:18;25156:27;;;;;;;;;;;;;;:43;;25148:100;;;;-1:-1:-1::0;;;25148:100:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25259:139;25305:4;;25310:1;25305:7;;;;;;25259:139;25409:24;25415:7;25424:4;;25409:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25430:2:0;;-1:-1:-1;25409:5:0::1;::::0;-1:-1:-1;;25409:24:0:i:1;26757:826::-:0;26971:21;26943:8;16084:15;16072:8;:27;;16064:65;;;;;-1:-1:-1;;;16064:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16064:65:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27043:4:0::1;27018:29;:4:::0;;-1:-1:-1;;27023:15:0;;27018:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27018:21:0::1;-1:-1:-1::0;;;;;27018:29:0::1;;27010:72;;;::::0;;-1:-1:-1;;;27010:72:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27010:72:0;;;;;;;;;;;;;::::1;;27103:53;27131:7;27140:9;27151:4;;27103:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27103:27:0::1;::::0;-1:-1:-1;;;27103:53:0:i:1;:::-;27093:63;;27189:11;27175:7;27183:1;27175:10;;;;;;;;;;;;;;:25;;27167:78;;;;-1:-1:-1::0;;;27167:78:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23258:714:::0;23576:14;23603:12;23618:44;23641:7;23650:5;23657:4;23618:22;:44::i;:::-;23603:59;;23673:10;23686;:33;;23710:9;23686:33;;;-1:-1:-1;;23686:33:0;23730:78;;;-1:-1:-1;;;23730:78:0;;23756:10;23730:78;;;;23776:4;23730:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23673:46;;-1:-1:-1;;;;;;23730:25:0;;;;;:78;;;;;-1:-1:-1;;23730:78:0;;;;;;;;-1:-1:-1;23730:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;23730:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23730:78:0;;;;23831:133;23893:5;23900:9;23911:14;23927:12;23941:2;23945:8;23831:47;:133::i;:::-;23819:145;23258:714;-1:-1:-1;;;;;;;;;;;;;23258:714:0:o;30606:713::-;30840:8;16084:15;16072:8;:27;;16064:65;;;;;-1:-1:-1;;;16064:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16064:65:0;;;;;;;;;;;;;;;30861:137:::1;30907:4;;30912:1;30907:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30907:7:0::1;30916:10;30928:49;30951:7;30960:4;;30965:1;30960:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30960:7:0::1;30969:4;;30974:1;30969:7;;;;;;30928:49;30979:8;30861:31;:137::i;:::-;31009:18;31037:4:::0;;-1:-1:-1;;31042:15:0;;31037:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31037:21:0::1;-1:-1:-1::0;;;;;31030:39:0::1;;31070:2;31030:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31030:43:0::1;-1:-1:-1::0;;;;;31030:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31030:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31030:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31030:43:0;31084:44:::1;::::0;;31030:43:::1;31084:44:::0;;::::1;::::0;;;;;;;;;;;31030:43;;-1:-1:-1;31084:44:0::1;::::0;;;31119:4;;;;;;31084:44;::::1;::::0;31119:4;;31084:44;31119:4;31084:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31125:2:0;;-1:-1:-1;31084:34:0::1;::::0;-1:-1:-1;;31084:44:0:i:1;:::-;31227:12:::0;31161:62:::1;31209:13:::0;31168:4;;-1:-1:-1;;31173:15:0;;31168:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31168:21:0::1;-1:-1:-1::0;;;;;31161:39:0::1;;31201:2;31161:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31161:43:0::1;-1:-1:-1::0;;;;;31161:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31161:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31161:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31161:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;31139:172;;;;-1:-1:-1::0;;;31139:172:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16140:1;30606:713:::0;;;;;;;:::o;32181:843::-;32448:8;16084:15;16072:8;:27;;16064:65;;;;;-1:-1:-1;;;16064:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16064:65:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32507:4:0::1;32482:29;:4:::0;;-1:-1:-1;;32487:15:0;;32482:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32482:21:0::1;-1:-1:-1::0;;;;;32482:29:0::1;;32474:72;;;::::0;;-1:-1:-1;;;32474:72:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32474:72:0;;;;;;;;;;;;;::::1;;32557:137;32603:4;;32608:1;32603:7;;;;;;32557:137;32705:55;32740:4;;32705:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32754:4:0::1;::::0;-1:-1:-1;32705:34:0::1;::::0;-1:-1:-1;;32705:55:0:i:1;:::-;32788:37;::::0;;-1:-1:-1;;;32788:37:0;;32819:4:::1;32788:37;::::0;::::1;::::0;;;32771:14:::1;::::0;-1:-1:-1;;;;;32795:4:0::1;32788:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;32788:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32788:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32788:37:0;;-1:-1:-1;32844:25:0;;::::1;;32836:82;;;;-1:-1:-1::0;;;32836:82:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32935:4;-1:-1:-1::0;;;;;32929:20:0::1;;32950:9;32929:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32929:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32929:31:0;;;;32971:45;33002:2;33006:9;32971:30;:45::i;26056:695::-:0;26272:21;26244:8;16084:15;16072:8;:27;;16064:65;;;;;-1:-1:-1;;;16064:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16064:65:0;;;;;;;;;;;;;;;26330:4:::1;-1:-1:-1::0;;;;;26319:15:0::1;:4;;26324:1;26319:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26319:7:0::1;-1:-1:-1::0;;;;;26319:15:0::1;;26311:58;;;::::0;;-1:-1:-1;;;26311:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26311:58:0;;;;;;;;;;;;;::::1;;26390:54;26419:7;26428:9;26439:4;;26390:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26390:28:0::1;::::0;-1:-1:-1;;;26390:54:0:i:1;:::-;26380:64;;26494:12;26463:7;26488:1;26471:7;:14;:18;26463:27;;;;;;;;;;;;;;:43;;26455:100;;;;-1:-1:-1::0;;;26455:100:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26572:4;-1:-1:-1::0;;;;;26566:19:0::1;;26593:7;26601:1;26593:10;;;;;;;;;;;;;;26566:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26566:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26566:40:0;;;;;26630:4;-1:-1:-1::0;;;;;26624:20:0::1;;26645:49;26668:7;26677:4;;26682:1;26677:7;;;;;;26645:49;26696:7;26704:1;26696:10;;;;;;;;;;;;;;26624:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;26624:83:0::1;-1:-1:-1::0;;;;;26624:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26624:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26624:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26624:83:0;26617:91:::1;;;;26719:24;26725:7;26734:4;;26719:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26740:2:0;;-1:-1:-1;26719:5:0::1;::::0;-1:-1:-1;;26719:24:0:i:1;:::-;26056:695:::0;;;;;;;;:::o;33530:259::-;33683:13;33721:60;33748:9;33759;33770:10;33721:26;:60::i;25447:603::-;25671:21;25652:8;16084:15;16072:8;:27;;16064:65;;;;;-1:-1:-1;;;16064:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16064:65:0;;;;;;;;;;;;;;;25715:53:::1;25743:7;25752:9;25763:4;;25715:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25715:27:0::1;::::0;-1:-1:-1;;;25715:53:0:i:1;:::-;25705:63;;25801:11;25787:7;25795:1;25787:10;;;;;;;;;;;;;;:25;;25779:78;;;;-1:-1:-1::0;;;25779:78:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15975:38:::0;;;:::o;33068:186::-;33165:12;33197:49;33218:7;33227:8;33237;33197:20;:49::i;22552:700::-;22818:14;22799:8;16084:15;16072:8;:27;;16064:65;;;;;-1:-1:-1;;;16064:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16064:65:0;;;;;;;;;;;;;;;22861:196:::1;22891:5;22911:4;22930:9;22954:14;22983:12;23018:4;23038:8;22861:15;:196::i;:::-;23107:38;::::0;;-1:-1:-1;;;23107:38:0;;23139:4:::1;23107:38;::::0;::::1;::::0;;;22845:212;;-1:-1:-1;23068:78:0::1;::::0;-1:-1:-1;23096:5:0;;23103:2;;-1:-1:-1;;;;;23107: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;23107:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23107:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23107:38:0;23068:27:::1;:78::i;:::-;23163:4;-1:-1:-1::0;;;;;23157:20:0::1;;23178:9;23157:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23157:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23157:31:0;;;;23199:45;23230:2;23234:9;23199:30;:45::i;31325:850::-:0;31585:8;16084:15;16072:8;:27;;16064:65;;;;;-1:-1:-1;;;16064:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16064:65:0;;;;;;;;;;;;;;;31630:4:::1;-1:-1:-1::0;;;;;31619:15:0::1;:4;;31624:1;31619:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31619:7:0::1;-1:-1:-1::0;;;;;31619:15:0::1;;31611:58;;;::::0;;-1:-1:-1;;;31611:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31611:58:0;;;;;;;;;;;;;::::1;;31680:13;31696:9;31680:25;;31722:4;-1:-1:-1::0;;;;;31716:19:0::1;;31743:8;31716:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31716:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31716:38:0;;;;;31778:4;-1:-1:-1::0;;;;;31772:20:0::1;;31793:49;31816:7;31825:4;;31830:1;31825:7;;;;;;31793:49;31844:8;31772:81;;;;;;;;;;;;;-1:-1:-1::0;;;;;31772:81:0::1;-1:-1:-1::0;;;;;31772:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31772:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31772:81:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31772:81:0;31765:89:::1;;;;31865:18;31893:4:::0;;-1:-1:-1;;31898:15:0;;31893:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31893:21:0::1;-1:-1:-1::0;;;;;31886:39:0::1;;31926:2;31886:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31886:43:0::1;-1:-1:-1::0;;;;;31886:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31886:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31886:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31886:43:0;31940:44:::1;::::0;;31886:43:::1;31940:44:::0;;::::1;::::0;;;;;;;;;;;31886:43;;-1:-1:-1;31940:44:0::1;::::0;;;31975:4;;;;;;31940:44;::::1;::::0;31975:4;;31940:44;31975:4;31940:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31981:2:0;;-1:-1:-1;31940:34:0::1;::::0;-1:-1:-1;;31940:44:0:i:1;:::-;32083:12:::0;32017:62:::1;32065:13:::0;32024:4;;-1:-1:-1;;32029:15:0;;32024:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32024:21:0::1;-1:-1:-1::0;;;;;32017:39:0::1;;32057:2;32017:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32017:43:0::1;-1:-1:-1::0;;;;;32017:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;19585:859:0::0;19839:12;19853;19820:8;16084:15;16072:8;:27;;16064:65;;;;;-1:-1:-1;;;16064:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16064:65:0;;;;;;;;;;;;;;;19878:12:::1;19893:47;19916:7;19925:6;19933;19893:22;:47::i;:::-;19951:60;::::0;;-1:-1:-1;;;19951:60:0;;19983:10:::1;19951:60;::::0;::::1;::::0;-1:-1:-1;;;;;19951:31:0;::::1;:60:::0;;;;;;;;;;;;;;19878:62;;-1:-1:-1;19951:31:0;;::::1;::::0;:60;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;19951:31:0;:60;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19951:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19951:60:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;20079:27:0::1;::::0;;-1:-1:-1;;;20079:27:0;;-1:-1:-1;;;;;20079:27:0;;::::1;;::::0;::::1;::::0;;;20049:12:::1;::::0;;;20079:23;;::::1;::::0;::::1;::::0;:27;;;;;;;;;;;20049:12;20079:23;:27;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20079:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20079:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20079:27:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20079:27:0;-1:-1:-1;20118:14:0::1;20137:41;20163:6:::0;20171;20137:25:::1;:41::i;:::-;20117:61;;;20220:6;-1:-1:-1::0;;;;;20210:16:0::1;:6;-1:-1:-1::0;;;;;20210:16:0::1;;:58;;20251:7;20260;20210:58;;;20230:7;20239;20210:58;20189:79:::0;;-1:-1:-1;20189:79:0;-1:-1:-1;20287:21:0;;::::1;;20279:73;;;;-1:-1:-1::0;;;20279:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20382:10;20371:7;:21;;20363:73;;;;-1:-1:-1::0;;;20363:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16140:1;;;;19585:859:::0;;;;;;;;;;;:::o;15927:41::-;;;:::o;33797:251::-;33941:21;33987:53;34016:7;34025:8;34035:4;33987:28;:53::i;21808:665::-;22097:16;22115:14;22142:12;22157:44;22180:7;22189:5;22196:4;22157:22;:44::i;:::-;22142:59;;22212:10;22225;:33;;22249:9;22225:33;;;-1:-1:-1;;22225:33:0;22269:78;;;-1:-1:-1;;;22269:78:0;;22295:10;22269:78;;;;22315:4;22269:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22212:46;;-1:-1:-1;;;;;;22269:25:0;;;;;:78;;;;;-1:-1:-1;;22269:78:0;;;;;;;;-1:-1:-1;22269:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;22269:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22269:78:0;;;;22385:80;22404:5;22411:9;22422:14;22438:12;22452:2;22456:8;22385:18;:80::i;:::-;22358:107;;;;-1:-1:-1;21808:665:0;-1:-1:-1;;;;;;;;;;;;;21808:665:0:o;17832:734::-;18120:12;18134;18148:14;18101:8;16084:15;16072:8;:27;;16064:65;;;;;-1:-1:-1;;;16064:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16064:65:0;;;;;;;;;;;;;;;18196:85:::1;18210:6;18218;18226:14;18242;18258:10;18270;18196:13;:85::i;:::-;18175:106:::0;;-1:-1:-1;18175:106:0;-1:-1:-1;18292:12:0::1;18307:47;18330:7;18339:6:::0;18347;18307:22:::1;:47::i;:::-;18292:62;;18365:66;18397:6;18405:10;18417:4;18423:7;18365:31;:66::i;:::-;18442;18474:6;18482:10;18494:4;18500:7;18442:31;:66::i;:::-;18544:4;-1:-1:-1::0;;;;;18531:23:0::1;;18555:2;18531:27;;;;;;;;;;;;;-1:-1:-1::0;;;;;18531:27:0::1;-1:-1:-1::0;;;;;18531:27:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18531:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18531:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18531:27:0;17832:734;;;;-1:-1:-1;18531:27:0;;-1:-1:-1;17832:734:0;;-1:-1:-1;;;;;;;;;17832:734:0:o;18572:970::-;18825:16;18843:14;18859;18806:8;16084:15;16072:8;:27;;16064:65;;;;;-1:-1:-1;;;16064:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16064:65:0;;;;;;;;;;;;;;;18913:176:::1;18941:5;18961:4;18980:18;19013:9;19037:14;19066:12;18913:13;:176::i;:::-;18886:203:::0;;-1:-1:-1;18886:203:0;-1:-1:-1;19100:12:0::1;19115:44;19138:7;19147:5:::0;19154:4:::1;19115:22;:44::i;:::-;19100:59;;19170:69;19202:5;19209:10;19221:4;19227:11;19170:31;:69::i;:::-;19256:4;-1:-1:-1::0;;;;;19250:19:0::1;;19277:9;19250:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19250:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19250:39:0;;;;;19313:4;-1:-1:-1::0;;;;;19307:20:0::1;;19328:4;19334:9;19307:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;19307:37:0::1;-1:-1:-1::0;;;;;19307:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19307:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19307:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19307:37:0;19300:45:::1;;;;19381:4;-1:-1:-1::0;;;;;19368:23:0::1;;19392:2;19368:27;;;;;;;;;;;;;-1:-1:-1::0;;;;;19368:27:0::1;-1:-1:-1::0;;;;;19368:27:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19368:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19368:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19368:27:0;;-1:-1:-1;19446:9:0::1;:21:::0;-1:-1:-1;19442:92:0::1;;;19469:65;19500:10;19524:9;19512;:21;19469:30;:65::i;:::-;16140:1;18572:970:::0;;;;;;;;;;;:::o;28443:808::-;28656:21;28628:8;16084:15;16072:8;:27;;16064:65;;;;;-1:-1:-1;;;16064:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16064:65:0;;;;;;;;;;;;;;;28714:4:::1;-1:-1:-1::0;;;;;28703:15:0::1;:4;;28708:1;28703:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28703:7:0::1;-1:-1:-1::0;;;;;28703:15:0::1;;28695:58;;;::::0;;-1:-1:-1;;;28695:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28695:58:0;;;;;;;;;;;;;::::1;;28774:53;28802:7;28811:9;28822:4;;28774:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28774:27:0::1;::::0;-1:-1:-1;;;28774:53:0:i:1;:::-;28764:63;;28860:9;28846:7;28854:1;28846:10;;;;;;;;;;;;;;:23;;28838:76;;;;-1:-1:-1::0;;;28838:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28931:4;-1:-1:-1::0;;;;;28925:19:0::1;;28952:7;28960:1;28952:10;;;;;;;;;;;;;;28925:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28925:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28925:40:0;;;;;28989:4;-1:-1:-1::0;;;;;28983:20:0::1;;29004:49;29027:7;29036:4;;29041:1;29036:7;;;;;;29004:49;29055:7;29063:1;29055:10;;;;;;;;;;;;;;28983:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;28983:83:0::1;-1:-1:-1::0;;;;;28983:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28983:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28983:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28983:83:0;28976:91:::1;;;;29078:24;29084:7;29093:4;;29078:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29099:2:0;;-1:-1:-1;29078:5:0::1;::::0;-1:-1:-1;;29078:24:0:i:1;:::-;29165:7;29173:1;29165:10;;;;;;;;;;;;;;29153:9;:22;29149:94;;;29177:66;29208:10;29232:7;29240:1;29232:10;;;;;;;;;;;;;;29220:9;:22;29177:30;:66::i;571:361::-:0;766:45;;;-1:-1:-1;;;;;766:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;766:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;755:57:0;;;;720:12;;734:17;;755:10;;;;766:45;755:57;;;25:18:-1;755: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;;;755: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;;719:93:0;;;;831:7;:57;;;;-1:-1:-1;843:11:0;;:16;;:44;;;874:4;863:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;863:24:0;843:44;823:101;;;;;-1:-1:-1;;;823:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;571:361;;;;;:::o;1350:195::-;1458:12;;;1420;1458;;;;;;;;;-1:-1:-1;;;;;1437:7:0;;;1451:5;;1437:34;;;;;;;;;;;;;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;;;1437:34: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;;1419:52:0;;;1490:7;1482:55;;;;-1:-1:-1;;;1482:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1350:195;;;:::o;12433:521::-;12526:14;12572:1;12561:8;:12;12553:69;;;;-1:-1:-1;;;12553:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12653:1;12641:9;:13;:31;;;;;12671:1;12658:10;:14;12641:31;12633:85;;;;-1:-1:-1;;;12633:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12729:20;12752:18;:8;12765:4;12752:18;:12;:18;:::i;:::-;12729:41;-1:-1:-1;12781:14:0;12798:31;12729:41;12818:10;12798:31;:19;:31;:::i;:::-;12781:48;-1:-1:-1;12840:16:0;12859:41;12884:15;12859:20;:9;12873:5;12859:20;:13;:20;:::i;:::-;:24;:41;:24;:41;:::i;:::-;12840:60;;12935:11;12923:9;:23;;;;;;;12433:521;-1:-1:-1;;;;;;;12433:521:0:o;13633:512::-;13734:21;13791:1;13776:4;:11;:16;;13768:60;;;;;-1:-1:-1;;;13768:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13860:4;:11;13849:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13849:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;13849:23:0;;13839:33;;13896:8;13883:7;13891:1;13883:10;;;;;;;;;;;;;:21;;;;;13920:6;13915:223;13946:1;13932:4;:11;:15;13928:1;:19;13915:223;;;13970:14;13986:15;14005:42;14017:7;14026:4;14031:1;14026:7;;;;;;;;;;;;;;14035:4;14040:1;14044;14040:5;14035:11;;;;;;;;;;;;;;14005;:42::i;:::-;13969:78;;;;14079:47;14092:7;14100:1;14092:10;;;;;;;;;;;;;;14104:9;14115:10;14079:12;:47::i;:::-;14062:7;14070:1;14074;14070:5;14062:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;13949:3:0;;13915:223;;;;13633:512;;;;;:::o;10907:478::-;10996:12;11022:14;11038;11056:26;11067:6;11075;11056:10;:26::i;:::-;11220:32;;;-1:-1:-1;;11220:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;11220:32:0;;;;;11210:43;;;;;;-1:-1:-1;;;;;;11123:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;11123:251:0;;;;;;;11113:262;;;;;;;;;10907:478;-1:-1:-1;;;;;10907:478:0:o;940:402::-;1165:51;;;-1:-1:-1;;;;;1165:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1165:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1154:63:0;;;;1119:12;;1133:17;;1154:10;;;;1165:51;1154:63;;;25:18:-1;1154: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;;;1154: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;;1118:99:0;;;;1236:7;:57;;;;-1:-1:-1;1248:11:0;;:16;;:44;;;1279:4;1268:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1268:24:0;1248:44;1228:106;;;;-1:-1:-1;;;1228:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;940:402;;;;;;:::o;24083:727::-;24190:6;24185:618;24216:1;24202:4;:11;:15;24198:1;:19;24185:618;;;24240:13;24255:14;24274:4;24279:1;24274:7;;;;;;;;;;;;;;24283:4;24288:1;24292;24288:5;24283:11;;;;;;;;;;;;;;24239:56;;;;24311:14;24330:40;24356:5;24363:6;24330:25;:40::i;:::-;24310:60;;;24385:14;24402:7;24410:1;24414;24410:5;24402:14;;;;;;;;;;;;;;24385:31;;24432:15;24449;24477:6;-1:-1:-1;;;;;24468:15:0;:5;-1:-1:-1;;;;;24468:15:0;;:61;;24510:9;24526:1;24468:61;;;24492:1;24496:9;24468:61;24431:98;;;;24544:10;24575:1;24561:4;:11;:15;24557:1;:19;:80;;24634:3;24557:80;;;24579:52;24602:7;24611:6;24619:4;24624:1;24628;24624:5;24619:11;;;;;;;;;;;;;;24579:22;:52::i;:::-;24544:93;;24665:46;24688:7;24697:5;24704:6;24665:22;:46::i;:::-;-1:-1:-1;;;;;24652:65:0;;24736:10;24748;24760:2;24774:1;24764:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;24764:12:0;87:42:-1;143:17;;-1:-1;24764:12:0;;24652:139;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24652:139:0;-1:-1:-1;;;;;24652:139: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;24652:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24652:139:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;24219:3:0;;;;;-1:-1:-1;24185:618:0;;-1:-1:-1;;;;;;;;24185:618:0;;;24083:727;;;:::o;14226:533::-;14327:21;14384:1;14369:4;:11;:16;;14361:60;;;;;-1:-1:-1;;;14361:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14453:4;:11;14442:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14442:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14442:23:0;;14432:33;;14506:9;14476:7;14501:1;14484:7;:14;:18;14476:27;;;;;;;;;;;;;;;;;:39;14540:11;;-1:-1:-1;;14540:15:0;14526:226;14557:5;;14526:226;;14585:14;14601:15;14620:42;14632:7;14641:4;14650:1;14646;:5;14641:11;;;;;;;;;;;;;;14654:4;14659:1;14654:7;;;;;;;14620:42;14584:78;;;;14694:46;14706:7;14714:1;14706:10;;;;;;;;;;;;;;14718:9;14729:10;14694:11;:46::i;:::-;14677:7;14689:1;14685;:5;14677:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;14564:3:0;14526:226;;29398:1202;29511:6;29506:1087;29537:1;29523:4;:11;:15;29519:1;:19;29506:1087;;;29561:13;29576:14;29595:4;29600:1;29595:7;;;;;;;;;;;;;;29604:4;29609:1;29613;29609:5;29604:11;;;;;;;;;;;;;;29560:56;;;;29632:14;29651:40;29677:5;29684:6;29651:25;:40::i;:::-;29631:60;;;29706:17;29739:46;29762:7;29771:5;29778:6;29739:22;:46::i;:::-;29706:80;;29801:16;29832:17;29920:13;29935;29953:4;-1:-1:-1;;;;;29953:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29953:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29953:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29953:18:0;;;;;;;-1:-1:-1;;;;;29919:52:0;;;;-1:-1:-1;29919:52:0;;-1:-1:-1;29987:17:0;;-1:-1:-1;;;;;30028:15:0;;;;;;;:61;;30070:8;30080;30028:61;;;30047:8;30057;30028:61;29986:103;;;;30118:56;30161:12;30125:5;-1:-1:-1;;;;;30118:23:0;;30150:4;30118:38;;;;;;;;;;;;;-1:-1:-1;;;;;30118:38:0;-1:-1:-1;;;;;30118:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;30118:56:0;30104:70;;30204:69;30232:11;30245:12;30259:13;30204:27;:69::i;:::-;30189:84;;29506:1087;;;;30304:15;30321;30349:6;-1:-1:-1;;;;;30340:15:0;:5;-1:-1:-1;;;;;30340:15:0;;:67;;30385:12;30404:1;30340:67;;;30364:1;30368:12;30340:67;30303:104;;;;30422:10;30453:1;30439:4;:11;:15;30435:1;:19;:80;;30512:3;30435:80;;;30457:52;30480:7;30489:6;30497:4;30502:1;30506;30502:5;30497:11;;;;;;;30457:52;30568:12;;;30578:1;30568:12;;;;;;;;;;-1:-1:-1;;;30530:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;30530:51:0;;;;;;;;;;;;;;;;;;;;;;30422:93;;-1:-1:-1;30530:9:0;;;;;;30540:10;;30552;;30422:93;;30568:12;;30530:51;;;;;;;;30568:12;;30530:51;;;;30568: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;30530:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30530:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29540:3:0;;;;;-1:-1:-1;29506:1087:0;;-1:-1:-1;;;;;;;;;;29506:1087:0;7507:129;7591:5;;;7586:16;;;;7578:50;;;;;-1:-1:-1;;;7578:50:0;;;;;;;;;;;;-1:-1:-1;;;7578:50:0;;;;;;;;;;;;;;13075:476;13168:13;13214:1;13202:9;:13;13194:71;;;;-1:-1:-1;;;13194:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13296:1;13284:9;:13;:31;;;;;13314:1;13301:10;:14;13284:31;13276:85;;;;-1:-1:-1;;;13276:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13372:14;13389:35;13418:5;13389:24;:9;13403;13389:24;:13;:24;:::i;:::-;:28;:35;:28;:35;:::i;:::-;13372:52;-1:-1:-1;13435:16:0;13454:35;13484:4;13454:25;:10;13469:9;13454:25;:14;:25;:::i;:35::-;13435:54;;13511:32;13541:1;13524:11;13512:9;:23;;;;;;;13511:32;:29;:32;:::i;:::-;13500:43;13075:476;-1:-1:-1;;;;;;13075:476:0:o;11988:323::-;12070:12;12113:1;12103:7;:11;12095:62;;;;-1:-1:-1;;;12095:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12187:1;12176:8;:12;:28;;;;;12203:1;12192:8;:12;12176:28;12168:82;;;;-1:-1:-1;;;12168:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12295:8;12271:21;:7;12283:8;12271:21;:11;:21;:::i;:::-;:32;;;;;;;11988:323;-1:-1:-1;;;;11988:323:0:o;10464:351::-;10539:14;10555;10600:6;-1:-1:-1;;;;;10590:16:0;:6;-1:-1:-1;;;;;10590:16:0;;;10582:67;;;;-1:-1:-1;;;10582:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10688:6;-1:-1:-1;;;;;10679:15:0;:6;-1:-1:-1;;;;;10679:15:0;;:53;;10717:6;10725;10679:53;;;10698:6;10706;10679:53;10660:72;;-1:-1:-1;10660:72:0;-1:-1:-1;;;;;;10751:20:0;;10743:64;;;;;-1:-1:-1;;;10743:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10464:351;;;;;:::o;16444:1382::-;16757:48;;;-1:-1:-1;;;16757:48:0;;-1:-1:-1;;;;;16757:48:0;;;;;;;;;;;;;;;;16662:12;;;;;;16773:7;16757:32;;;;;;:48;;;;;;;;;;;;;;;:32;:48;;;2:2:-1;;;;27:1;24;17:12;2:2;16757:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16757:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16757:48:0;-1:-1:-1;;;;;16757:62:0;;16753:146;;;16836:51;;;-1:-1:-1;;;16836:51:0;;-1:-1:-1;;;;;16836:51:0;;;;;;;;;;;;;;;;16852:7;16836:35;;;;;;:51;;;;;;;;;;;;;;;-1:-1:-1;16836:35:0;:51;;;2:2:-1;;;;27:1;24;17:12;2:2;16836:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16836:51:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;16753:146:0;16910:13;16925;16942:51;16969:7;16978:6;16986;16942:26;:51::i;:::-;16909:84;;;;17008:8;17020:1;17008:13;:30;;;;-1:-1:-1;17025:13:0;;17008:30;17004:815;;;17077:14;;-1:-1:-1;17093:14:0;;-1:-1:-1;17004:815:0;;;17141:19;17163:56;17184:14;17200:8;17210;17163:20;:56::i;:::-;17141:78;;17256:14;17238;:32;17234:574;;17317:10;17299:14;:28;;17291:80;;;;-1:-1:-1;;;17291:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17412:14;;-1:-1:-1;17428:14:0;-1:-1:-1;17428:14:0;17234:574;;;17484:19;17506:56;17527:14;17543:8;17553;17506:20;:56::i;:::-;17484:78;;17606:14;17588;:32;;17581:40;;;;17666:10;17648:14;:28;;17640:80;;;;-1:-1:-1;;;17640:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17761:14;-1:-1:-1;17777:14:0;;-1:-1:-1;17234:574:0;17004:815;;16444:1382;;;;;;;;;;;:::o;7644:142::-;7696:6;7723;;;:30;;-1:-1:-1;;7738:5:0;;;7752:1;7747;7738:5;7747:1;7733:15;;;;;:20;7723:30;7715:63;;;;;-1:-1:-1;;;7715:63:0;;;;;;;;;;;;-1:-1:-1;;;7715:63:0;;;;;;;;;;;;;;7371:128;7455:5;;;7450:16;;;;7442:49;;;;;-1:-1:-1;;;7442:49:0;;;;;;;;;;;;-1:-1:-1;;;7442:49:0;;;;;;;;;;;;;;11443:432;11536:13;11551;11578:14;11597:26;11608:6;11616;11597:10;:26::i;:::-;11577:46;;;11634:32;11642:7;11651:6;11659;11634:7;:32::i;:::-;;11678:13;11693;11724:32;11732:7;11741:6;11749;11724:7;:32::i;:::-;-1:-1:-1;;;;;11711:58:0;;:60;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11711:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11711:60:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11711:60:0;;;;;;;-1:-1:-1;;;;;11677:94:0;;;;-1:-1:-1;11677:94:0;;-1:-1:-1;;;;;;11805:16:0;;;;;;;:62;;11848:8;11858;11805:62;;;11825:8;11835;11805:62;11782:85;;;;-1:-1:-1;11443:432:0;-1:-1:-1;;;;;;;11443:432:0:o

Swarm Source

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