Contract 0x6728f3c8241c44cc741c9553ff7824ba9e932a4a

 
 
Txn Hash
Block
From
To
Value [Txn Fee]
0xd59cc9c49a1e0e84bd80b37d5651849f107f947480bd8e26b3849c7bdee9097296113422021-07-30 20:20:5224 mins ago0xbee5348d07466997e566a4d7551a7c95470a0b05 IN  0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0 BNB0.000475315
0x6d35c2134ba907463e9411054d0103c646f4fb6177f2cfc860145ca14b513bdb96102052021-07-30 19:24:011 hr 21 mins ago0xca36e629a41d8e69a36abf805f5230970bad6896 IN  0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0 BNB0.00090588
0xfaaa7f6ea2ed55f7fa543c27d5786643858a1534ad1ef71d29b2ff0e1557381496101762021-07-30 19:22:341 hr 22 mins ago0xca36e629a41d8e69a36abf805f5230970bad6896 IN  0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0 BNB0.000783945
0x1771ccfefba8986098a851d86ef694a1dcb880696efc9abfdf1c7504a8c6085295966012021-07-30 7:47:3412 hrs 57 mins ago0x8b8fc1225f3a4a3e6075e41433fdc065a0b25281 IN  0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0.25 BNB0.000957605
0x90958e468aadc9dbbaf0094bd0091e41e5c22ae62e0254587f65dca60409eafb95908702021-07-30 2:56:1117 hrs 49 mins ago0xbae8d8e87e4f501111264994dbf6355ac8a87861 IN  0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0 BNB0.000565655
0x271d66563d97631eb1fb35d3e0d228bada1eab75d405731813294d75381b045a95906452021-07-30 2:44:5618 hrs ago0xc81e20d8af69d33c99425aff98514fc955510668 IN  0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0 BNB0.000475375
0xf9bc97b29f6217225b9344ab8b637cd7a04411e12673dffc63f53542ecb348d195901072021-07-30 2:16:0218 hrs 29 mins ago0x41f578249c091cd24487b4cedd36425f433427c0 IN  0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0 BNB0.000783945
0x7f904f9d95ee3a4917a671d16bea03d74fbd2d24c13661289efb3a4b8ebc23ca95873322021-07-29 23:55:4820 hrs 49 mins ago0x942ea7662057ffaebb3a61d8344bf136a4d20a28 IN  0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0 BNB0.000550315
0xc6e2b102a353ea4ed9bf072a6d6ff41a8339a0c642c1412f7a0953e54a2239da95850812021-07-29 21:55:1222 hrs 50 mins ago0x46e64e008ea78f9410a7eb66fb101eeaf04fa921 IN  0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0 BNB0.000565535
0x33d8081ce679b3ded789cbf3cb1565baa0caf8a95d55d696a61f42978bdf456495694252021-07-29 7:47:421 day 12 hrs ago0x827808fe822685e3430e90571dce03d6bde39f2d IN  0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0 BNB0.000783945
0xc707edbf16dd4b42fb8c35e438bfef143f9f6d9bcc904a4005a340ee13d91bdb95678842021-07-29 6:28:201 day 14 hrs ago0xf1c26ec830efb39df381591e0511a8c430c74cc2 IN  0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0.014325971260937 BNB0.000843495
0x7c075127d36bc70fef6ac20f5510918b647cbf665125cab80cf1de423f76173495602132021-07-28 23:49:321 day 20 hrs ago0xc81e20d8af69d33c99425aff98514fc955510668 IN  0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0 BNB0.000475375
0x921dab91dc55e862f9764b70c295058a1d4b6ac6b8a7ac8713cac751e84f9a7b95518562021-07-28 16:32:492 days 4 hrs ago0x075fccae7c7643d48c0837d9891269e5df8767e8 IN  0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0 BNB0.00047638587
0x01bf587982c28f70bef812450be094525f2827973edabbf3251603cde0bcce2a95488562021-07-28 13:36:002 days 7 hrs ago0xc66592d3028d0975a32a3be7596f9d73120e8d60 IN  0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0.06 BNB0.00054905
0x7ff7476d79490c6c0239790d0f7988ed586e54d62802c1dbc636f7cd90854f8e95467322021-07-28 11:38:522 days 9 hrs ago0xfd16a9014226a8afbf2e739d81ff025573889caf IN  0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0 BNB0.000565475
0x08cdb8d211ab4d47301b12ac77a6a793d9138f0d8727fea28925fa4fa4455c8695456342021-07-28 10:34:572 days 10 hrs ago0x738d670a8a9e290eb91738dd4d4822c923934115 IN  0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0 BNB0.000858945
0x23eb80dce7633bc678016661e7eb8cc86546d16799d9bffba319464f5646c28a95448082021-07-28 9:51:552 days 10 hrs ago0x030583a8b6880fd09269d95624c8a69f0cebab9b IN  0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0.33060689711556 BNB0.000589065
0x5509983c7e6b591a55070999f6cacc9760390124a9e6a5154086db87337deb9295433292021-07-28 8:27:092 days 12 hrs ago0xd014bf3e3a0590a0b85deacd0378f34de3d7784e IN  0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0 BNB0.000784005
0xe6934f5ee44f192a60fbf746a69a1a5b33437422d30891d01b3c32054c7b6e2d95357542021-07-28 1:44:342 days 19 hrs ago0x097c2feddd0d1d6fb46d982dd2b93fe2900011d8 IN  0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0 BNB0.000475255
0x7a5ba11979bbaf33fe680c6c3ce58d6a33cbe90d0d05a4a4a4ba6cc09c5842b595335332021-07-27 23:46:442 days 20 hrs ago0xca36e629a41d8e69a36abf805f5230970bad6896 IN  0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0 BNB0.000783945
0x09c19872d2984b97326e416394755910435d347653d09a9511903c94379364d795334192021-07-27 23:40:272 days 21 hrs ago0x942ea7662057ffaebb3a61d8344bf136a4d20a28 IN  0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0 BNB0.000792965
0x648a955d2066187ba8f02638b803c6e2a03f290aa618f3b62ce62d5a7bcaf5ec95333222021-07-27 23:35:352 days 21 hrs ago0xb81d163e3e03aa9a06cd5fc7d1434ef7b26d185c IN  0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0 BNB0.000565595
0x2f50719d369c8253dea62e49baa4300302754a88552537d643bcae53e5897a9295332262021-07-27 23:30:452 days 21 hrs ago0x942ea7662057ffaebb3a61d8344bf136a4d20a28 IN  0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0 BNB0.000565595
0x6e40d28d74a7e2608e895f107690af7b21c45f7d3833503a710300ffb9da674d95316532021-07-27 22:06:492 days 22 hrs ago0x46e64e008ea78f9410a7eb66fb101eeaf04fa921 IN  0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0 BNB0.000565475
0x21083a683ebef7667207ffcdf6c1a412694bdd4e0e45e39e13f098c13611d7df95315182021-07-27 22:00:042 days 22 hrs ago0xc81e20d8af69d33c99425aff98514fc955510668 IN  0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0.066076958129474 BNB0.000843195
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x1771ccfefba8986098a851d86ef694a1dcb880696efc9abfdf1c7504a8c6085295966012021-07-30 7:47:3412 hrs 57 mins ago 0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0x8b8fc1225f3a4a3e6075e41433fdc065a0b252811 wei
0x1771ccfefba8986098a851d86ef694a1dcb880696efc9abfdf1c7504a8c6085295966012021-07-30 7:47:3412 hrs 57 mins ago 0x6728f3c8241c44cc741c9553ff7824ba9e932a4a Binance: WBNB Token0.249999999999999999 BNB
0x90958e468aadc9dbbaf0094bd0091e41e5c22ae62e0254587f65dca60409eafb95908702021-07-30 2:56:1117 hrs 49 mins ago 0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0xbae8d8e87e4f501111264994dbf6355ac8a878610.098231345998340377 BNB
0x90958e468aadc9dbbaf0094bd0091e41e5c22ae62e0254587f65dca60409eafb95908702021-07-30 2:56:1117 hrs 49 mins ago Binance: WBNB Token 0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0.098231345998340377 BNB
0xc6e2b102a353ea4ed9bf072a6d6ff41a8339a0c642c1412f7a0953e54a2239da95850812021-07-29 21:55:1222 hrs 50 mins ago 0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0x46e64e008ea78f9410a7eb66fb101eeaf04fa9210.045070375708518134 BNB
0xc6e2b102a353ea4ed9bf072a6d6ff41a8339a0c642c1412f7a0953e54a2239da95850812021-07-29 21:55:1222 hrs 50 mins ago Binance: WBNB Token 0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0.045070375708518134 BNB
0xc707edbf16dd4b42fb8c35e438bfef143f9f6d9bcc904a4005a340ee13d91bdb95678842021-07-29 6:28:201 day 14 hrs ago 0x6728f3c8241c44cc741c9553ff7824ba9e932a4a Binance: WBNB Token0.014325971260937385 BNB
0x01bf587982c28f70bef812450be094525f2827973edabbf3251603cde0bcce2a95488562021-07-28 13:36:002 days 7 hrs ago 0x6728f3c8241c44cc741c9553ff7824ba9e932a4a Binance: WBNB Token0.06 BNB
0x7ff7476d79490c6c0239790d0f7988ed586e54d62802c1dbc636f7cd90854f8e95467322021-07-28 11:38:522 days 9 hrs ago 0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0xfd16a9014226a8afbf2e739d81ff025573889caf0.022707798587903576 BNB
0x7ff7476d79490c6c0239790d0f7988ed586e54d62802c1dbc636f7cd90854f8e95467322021-07-28 11:38:522 days 9 hrs ago Binance: WBNB Token 0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0.022707798587903576 BNB
0x23eb80dce7633bc678016661e7eb8cc86546d16799d9bffba319464f5646c28a95448082021-07-28 9:51:552 days 10 hrs ago 0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0x030583a8b6880fd09269d95624c8a69f0cebab9b0.001644810433410746 BNB
0x23eb80dce7633bc678016661e7eb8cc86546d16799d9bffba319464f5646c28a95448082021-07-28 9:51:552 days 10 hrs ago 0x6728f3c8241c44cc741c9553ff7824ba9e932a4a Binance: WBNB Token0.328962086682149357 BNB
0x648a955d2066187ba8f02638b803c6e2a03f290aa618f3b62ce62d5a7bcaf5ec95333222021-07-27 23:35:352 days 21 hrs ago 0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0xb81d163e3e03aa9a06cd5fc7d1434ef7b26d185c0.092465290056657365 BNB
0x648a955d2066187ba8f02638b803c6e2a03f290aa618f3b62ce62d5a7bcaf5ec95333222021-07-27 23:35:352 days 21 hrs ago Binance: WBNB Token 0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0.092465290056657365 BNB
0x2f50719d369c8253dea62e49baa4300302754a88552537d643bcae53e5897a9295332262021-07-27 23:30:452 days 21 hrs ago 0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0x942ea7662057ffaebb3a61d8344bf136a4d20a280.137926035260803434 BNB
0x2f50719d369c8253dea62e49baa4300302754a88552537d643bcae53e5897a9295332262021-07-27 23:30:452 days 21 hrs ago Binance: WBNB Token 0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0.137926035260803434 BNB
0x6e40d28d74a7e2608e895f107690af7b21c45f7d3833503a710300ffb9da674d95316532021-07-27 22:06:492 days 22 hrs ago 0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0x46e64e008ea78f9410a7eb66fb101eeaf04fa9210.053302820621187111 BNB
0x6e40d28d74a7e2608e895f107690af7b21c45f7d3833503a710300ffb9da674d95316532021-07-27 22:06:492 days 22 hrs ago Binance: WBNB Token 0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0.053302820621187111 BNB
0x21083a683ebef7667207ffcdf6c1a412694bdd4e0e45e39e13f098c13611d7df95315182021-07-27 22:00:042 days 22 hrs ago 0x6728f3c8241c44cc741c9553ff7824ba9e932a4a Binance: WBNB Token0.066076958129474333 BNB
0xfc7422ef7154c3ca54d8948978004239966839c01308de9afb239dd9789fc4e495315112021-07-27 21:59:432 days 22 hrs ago 0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0xc81e20d8af69d33c99425aff98514fc9555106680.14704802448922247 BNB
0xfc7422ef7154c3ca54d8948978004239966839c01308de9afb239dd9789fc4e495315112021-07-27 21:59:432 days 22 hrs ago Binance: WBNB Token 0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0.14704802448922247 BNB
0x0d648a83bff9e61a176dd26abb285ed79d59426b4fdcab32c57a60776b753b7c95032512021-07-26 20:42:224 days 3 mins ago 0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0xb93ce7fab5072d31fd88456fae385dd9f1b7c8b70.000005684227078305 BNB
0x0d648a83bff9e61a176dd26abb285ed79d59426b4fdcab32c57a60776b753b7c95032512021-07-26 20:42:224 days 3 mins ago 0x6728f3c8241c44cc741c9553ff7824ba9e932a4a Binance: WBNB Token0.001136845415661182 BNB
0xa154685a66dc39fd6d37be511d76542cc7dfad788face92e2ef6920a632957e994940572021-07-26 12:45:144 days 8 hrs ago 0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0x0a2d3dd46e44acec0da085268502880bb384bcc00.010560297582779921 BNB
0xa154685a66dc39fd6d37be511d76542cc7dfad788face92e2ef6920a632957e994940572021-07-26 12:45:144 days 8 hrs ago Binance: WBNB Token 0x6728f3c8241c44cc741c9553ff7824ba9e932a4a0.010560297582779921 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
UniswapV2Router02

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 9999 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 10 : UniswapV2Router02.sol
pragma solidity =0.6.12;


import './libraries/UniswapV2Library.sol';
import './libraries/SafeMath.sol';
import './libraries/TransferHelper.sol';
import './interfaces/IUniswapV2Router02.sol';
import './interfaces/IUniswapV2Factory.sol';
import './interfaces/IERC20.sol';
import './interfaces/IWETH.sol';

contract UniswapV2Router02 is IUniswapV2Router02 {
    using SafeMathUniswap for uint;

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

    modifier ensure(uint deadline) {
        require(deadline >= block.timestamp, '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 (IUniswapV2Factory(factory).getPair(tokenA, tokenB) == address(0)) {
            IUniswapV2Factory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = UniswapV2Library.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = UniswapV2Library.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = UniswapV2Library.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, '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 = UniswapV2Library.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IUniswapV2Pair(pair).mint(to);
    }
    function addLiquidityETH(
        address token,
        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 = UniswapV2Library.pairFor(factory, token, WETH);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWETH(WETH).deposit{value: amountETH}();
        assert(IWETH(WETH).transfer(pair, amountETH));
        liquidity = IUniswapV2Pair(pair).mint(to);
        // refund dust eth, if any
        if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH);
    }

    // **** REMOVE LIQUIDITY ****
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountA, uint amountB) {
        address pair = UniswapV2Library.pairFor(factory, tokenA, tokenB);
        IUniswapV2Pair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint amount0, uint amount1) = IUniswapV2Pair(pair).burn(to);
        (address token0,) = UniswapV2Library.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, '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 = UniswapV2Library.pairFor(factory, tokenA, tokenB);
        uint value = approveMax ? uint(-1) : liquidity;
        IUniswapV2Pair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline);
    }
    function removeLiquidityETHWithPermit(
        address token,
        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 = UniswapV2Library.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IUniswapV2Pair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline);
    }

    // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) ****
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        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, IERC20Uniswap(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 = UniswapV2Library.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IUniswapV2Pair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        amountETH = removeLiquidityETHSupportingFeeOnTransferTokens(
            token, liquidity, amountTokenMin, amountETHMin, to, deadline
        );
    }

    // **** SWAP ****
    // requires the initial amount to have already been sent to the first pair
    function _swap(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,) = UniswapV2Library.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 ? UniswapV2Library.pairFor(factory, output, path[i + 2]) : _to;
            IUniswapV2Pair(UniswapV2Library.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 = UniswapV2Library.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.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 = UniswapV2Library.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.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, 'INVALID_PATH');
        amounts = UniswapV2Library.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
    }
    function swapTokensForExactETH(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, 'INVALID_PATH');
        amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWETH(WETH).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }
    function swapExactTokensForETH(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, 'INVALID_PATH');
        amounts = UniswapV2Library.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWETH(WETH).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WETH, 'INVALID_PATH');
        amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'EXCESSIVE_INPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
        // refund dust eth, if any
        if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]);
    }

    // **** SWAP (supporting fee-on-transfer tokens) ****
    // requires the initial amount to have already been sent to the first pair
    function _swapSupportingFeeOnTransferTokens(address[] memory path, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = UniswapV2Library.sortTokens(input, output);
            IUniswapV2Pair pair = IUniswapV2Pair(UniswapV2Library.pairFor(factory, input, output));
            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 = IERC20Uniswap(input).balanceOf(address(pair)).sub(reserveInput);
            amountOutput = UniswapV2Library.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? UniswapV2Library.pairFor(factory, output, path[i + 2]) : _to;
            pair.swap(amount0Out, amount1Out, to, new bytes(0));
        }
    }
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) {
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amountIn
        );
        uint balanceBefore = IERC20Uniswap(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20Uniswap(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WETH, 'INVALID_PATH');
        uint amountIn = msg.value;
        IWETH(WETH).deposit{value: amountIn}();
        assert(IWETH(WETH).transfer(UniswapV2Library.pairFor(factory, path[0], path[1]), amountIn));
        uint balanceBefore = IERC20Uniswap(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20Uniswap(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            '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, 'INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20Uniswap(WETH).balanceOf(address(this));
        require(amountOut >= amountOutMin, '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 UniswapV2Library.quote(amountA, reserveA, reserveB);
    }

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

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

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

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

File 2 of 10 : IERC20.sol
pragma solidity >=0.5.0;

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

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

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

File 3 of 10 : IUniswapV2Factory.sol
pragma solidity >=0.5.0;

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

File 4 of 10 : IUniswapV2Pair.sol
pragma solidity >=0.5.0;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

File 5 of 10 : IUniswapV2Router01.sol
pragma solidity >=0.6.2;

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

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

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

File 6 of 10 : IUniswapV2Router02.sol
pragma solidity >=0.6.2;

import './IUniswapV2Router01.sol';

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

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

File 7 of 10 : IWETH.sol
pragma solidity >=0.5.0;

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

File 8 of 10 : SafeMath.sol
pragma solidity =0.6.12;

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

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

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

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

File 9 of 10 : TransferHelper.sol
// SPDX-License-Identifier: GPL-3.0-or-later

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

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

File 10 of 10 : UniswapV2Library.sol
pragma solidity >=0.5.0;

import '../interfaces/IUniswapV2Pair.sol';

import "./SafeMath.sol";

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

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

    // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset
    function quote(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) {
        require(amountA > 0, 'INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, '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, 'INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(997);
        uint numerator = amountInWithFee.mul(reserveOut);
        uint denominator = reserveIn.mul(1000).add(amountInWithFee);
        amountOut = numerator / denominator;
    }

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

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

Settings
{
  "remappings": [],
  "optimizer": {
    "enabled": true,
    "runs": 9999
  },
  "evmVersion": "istanbul",
  "libraries": {},
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

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"}]

60c060405234801561001057600080fd5b50604051620048f0380380620048f08339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c61476b620001856000398061019f5280610d365280610d715280610e6452806110aa528061145b52806115e952806119bf5280611aac5280611b9c5280611c665280611dd45280611e5c52806120aa528061212152806121d5528061229d528061234452806123b852806128f55280612b705280612bc65280612bfa5280612c6e5280612df85280612f635280612feb525080610f045280610ff1528061117052806111a952806112f952806114fb52806115c7528061174c5280611d0b5280611e8e5280611fe452806123ea5280612624528061287a52806128a352806128d35280612a555280612ba45280612e9d528061301d52806139dc5280613a1f5280613cf95280613e7652806142f652806143af5280614462525061476b6000f3fe60806040526004361061018f5760003560e01c80638803dbee116100d6578063c45a01551161007f578063e8e3370011610059578063e8e3370014610ba1578063f305d71914610c21578063fb3bdb4114610c67576101c8565b8063c45a015514610a62578063d06ca61f14610a77578063ded9382a14610b2e576101c8565b8063af2979eb116100b0578063af2979eb1461092c578063b6f9de951461097f578063baa2abde14610a05576101c8565b80638803dbee1461082d578063ad5c4648146108c5578063ad615dec146108f6576101c8565b80634a25d94a11610138578063791ac94711610112578063791ac947146106d95780637ff36ab51461077157806385f8c259146107f7576101c8565b80634a25d94a146105365780635b0d5984146105ce5780635c11d79514610641576101c8565b80631f00ca74116101695780631f00ca74146103695780632195995c1461042057806338ed17391461049e576101c8565b806302751cec146101cd578063054d50d41461023957806318cbafe514610281576101c8565b366101c857336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101c657fe5b005b600080fd5b3480156101d957600080fd5b50610220600480360360c08110156101f057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610ced565b6040805192835260208301919091528051918290030190f35b34801561024557600080fd5b5061026f6004803603606081101561025c57600080fd5b5080359060208101359060400135610e03565b60408051918252519081900360200190f35b34801561028d57600080fd5b50610319600480360360a08110156102a457600080fd5b8135916020810135918101906060810160408201356401000000008111156102cb57600080fd5b8201836020820111156102dd57600080fd5b803590602001918460208302840111640100000000831117156102ff57600080fd5b91935091506001600160a01b038135169060200135610e18565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561035557818101518382015260200161033d565b505050509050019250505060405180910390f35b34801561037557600080fd5b506103196004803603604081101561038c57600080fd5b813591908101906040810160208201356401000000008111156103ae57600080fd5b8201836020820111156103c057600080fd5b803590602001918460208302840111640100000000831117156103e257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611169945050505050565b34801561042c57600080fd5b50610220600480360361016081101561044457600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561119f565b3480156104aa57600080fd5b50610319600480360360a08110156104c157600080fd5b8135916020810135918101906060810160408201356401000000008111156104e857600080fd5b8201836020820111156104fa57600080fd5b8035906020019184602083028401116401000000008311171561051c57600080fd5b91935091506001600160a01b0381351690602001356112b2565b34801561054257600080fd5b50610319600480360360a081101561055957600080fd5b81359160208101359181019060608101604082013564010000000081111561058057600080fd5b82018360208201111561059257600080fd5b803590602001918460208302840111640100000000831117156105b457600080fd5b91935091506001600160a01b03813516906020013561140f565b3480156105da57600080fd5b5061026f60048036036101408110156105f257600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356115bf565b34801561064d57600080fd5b506101c6600480360360a081101561066457600080fd5b81359160208101359181019060608101604082013564010000000081111561068b57600080fd5b82018360208201111561069d57600080fd5b803590602001918460208302840111640100000000831117156106bf57600080fd5b91935091506001600160a01b0381351690602001356116e6565b3480156106e557600080fd5b506101c6600480360360a08110156106fc57600080fd5b81359160208101359181019060608101604082013564010000000081111561072357600080fd5b82018360208201111561073557600080fd5b8035906020019184602083028401116401000000008311171561075757600080fd5b91935091506001600160a01b038135169060200135611975565b6103196004803603608081101561078757600080fd5b813591908101906040810160208201356401000000008111156107a957600080fd5b8201836020820111156107bb57600080fd5b803590602001918460208302840111640100000000831117156107dd57600080fd5b91935091506001600160a01b038135169060200135611c22565b34801561080357600080fd5b5061026f6004803603606081101561081a57600080fd5b5080359060208101359060400135611f90565b34801561083957600080fd5b50610319600480360360a081101561085057600080fd5b81359160208101359181019060608101604082013564010000000081111561087757600080fd5b82018360208201111561088957600080fd5b803590602001918460208302840111640100000000831117156108ab57600080fd5b91935091506001600160a01b038135169060200135611f9d565b3480156108d157600080fd5b506108da6120a8565b604080516001600160a01b039092168252519081900360200190f35b34801561090257600080fd5b5061026f6004803603606081101561091957600080fd5b50803590602081013590604001356120cc565b34801561093857600080fd5b5061026f600480360360c081101561094f57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356120d9565b6101c66004803603608081101561099557600080fd5b813591908101906040810160208201356401000000008111156109b757600080fd5b8201836020820111156109c957600080fd5b803590602001918460208302840111640100000000831117156109eb57600080fd5b91935091506001600160a01b03813516906020013561225b565b348015610a1157600080fd5b50610220600480360360e0811015610a2857600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356125da565b348015610a6e57600080fd5b506108da612878565b348015610a8357600080fd5b5061031960048036036040811015610a9a57600080fd5b81359190810190604081016020820135640100000000811115610abc57600080fd5b820183602082011115610ace57600080fd5b80359060200191846020830284011164010000000083111715610af057600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061289c945050505050565b348015610b3a57600080fd5b506102206004803603610140811015610b5257600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356128c9565b348015610bad57600080fd5b50610c036004803603610100811015610bc557600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e001356129f6565b60408051938452602084019290925282820152519081900360600190f35b610c03600480360360c0811015610c3757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612b25565b61031960048036036080811015610c7d57600080fd5b81359190810190604081016020820135640100000000811115610c9f57600080fd5b820183602082011115610cb157600080fd5b80359060200191846020830284011164010000000083111715610cd357600080fd5b91935091506001600160a01b038135169060200135612db4565b6000808242811015610d30576040805162461bcd60e51b81526020600482015260076024820152661156141254915160ca1b604482015290519081900360640190fd5b610d5f897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6125da565b9093509150610d6f898685613151565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610dd557600080fd5b505af1158015610de9573d6000803e3d6000fd5b50505050610df78583613307565b50965096945050505050565b6000610e10848484613433565b949350505050565b60608142811015610e5a576040805162461bcd60e51b81526020600482015260076024820152661156141254915160ca1b604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e9457fe5b905060200201356001600160a01b03166001600160a01b031614610eff576040805162461bcd60e51b815260206004820152600c60248201527f494e56414c49445f504154480000000000000000000000000000000000000000604482015290519081900360640190fd5b610f5d7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061353792505050565b91508682600184510381518110610f7057fe5b60200260200101511015610fcb576040805162461bcd60e51b815260206004820152601a60248201527f494e53554646494349454e545f4f55545055545f414d4f554e54000000000000604482015290519081900360640190fd5b61106986866000818110610fdb57fe5b905060200201356001600160a01b03163361104f7f00000000000000000000000000000000000000000000000000000000000000008a8a600081811061101d57fe5b905060200201356001600160a01b03168b8b600181811061103a57fe5b905060200201356001600160a01b0316613683565b8560008151811061105c57fe5b602002602001015161376e565b6110a88287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061392d915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836001855103815181106110e757fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561112557600080fd5b505af1158015611139573d6000803e3d6000fd5b5050505061115e848360018551038151811061115157fe5b6020026020010151613307565b509695505050505050565b60606111967f00000000000000000000000000000000000000000000000000000000000000008484613b6a565b90505b92915050565b60008060006111cf7f00000000000000000000000000000000000000000000000000000000000000008f8f613683565b90506000876111de578c6111e2565b6000195b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561127157600080fd5b505af1158015611285573d6000803e3d6000fd5b505050506112988f8f8f8f8f8f8f6125da565b809450819550505050509b509b9950505050505050505050565b606081428110156112f4576040805162461bcd60e51b81526020600482015260076024820152661156141254915160ca1b604482015290519081900360640190fd5b6113527f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061353792505050565b9150868260018451038151811061136557fe5b602002602001015110156113c0576040805162461bcd60e51b815260206004820152601a60248201527f494e53554646494349454e545f4f55545055545f414d4f554e54000000000000604482015290519081900360640190fd5b6113d086866000818110610fdb57fe5b61115e8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061392d915050565b60608142811015611451576040805162461bcd60e51b81526020600482015260076024820152661156141254915160ca1b604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061148b57fe5b905060200201356001600160a01b03166001600160a01b0316146114f6576040805162461bcd60e51b815260206004820152600c60248201527f494e56414c49445f504154480000000000000000000000000000000000000000604482015290519081900360640190fd5b6115547f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613b6a92505050565b9150868260008151811061156457fe5b60200260200101511115610fcb576040805162461bcd60e51b815260206004820152601660248201527f4558434553534956455f494e5055545f414d4f554e5400000000000000000000604482015290519081900360640190fd5b60008061160d7f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613683565b905060008661161c578b611620565b6000195b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156116af57600080fd5b505af11580156116c3573d6000803e3d6000fd5b505050506116d58d8d8d8d8d8d6120d9565b9d9c50505050505050505050505050565b8042811015611726576040805162461bcd60e51b81526020600482015260076024820152661156141254915160ca1b604482015290519081900360640190fd5b61179b8585600081811061173657fe5b905060200201356001600160a01b0316336117957f00000000000000000000000000000000000000000000000000000000000000008989600081811061177857fe5b905060200201356001600160a01b03168a8a600181811061103a57fe5b8a61376e565b6000858560001981018181106117ad57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561180957600080fd5b505afa15801561181d573d6000803e3d6000fd5b505050506040513d602081101561183357600080fd5b50516040805160208881028281018201909352888252929350611875929091899189918291850190849080828437600092019190915250889250613ca2915050565b86611918828888600019810181811061188a57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156118e657600080fd5b505afa1580156118fa573d6000803e3d6000fd5b505050506040513d602081101561191057600080fd5b505190613fc4565b101561196b576040805162461bcd60e51b815260206004820152601a60248201527f494e53554646494349454e545f4f55545055545f414d4f554e54000000000000604482015290519081900360640190fd5b5050505050505050565b80428110156119b5576040805162461bcd60e51b81526020600482015260076024820152661156141254915160ca1b604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016858560001981018181106119ef57fe5b905060200201356001600160a01b03166001600160a01b031614611a5a576040805162461bcd60e51b815260206004820152600c60248201527f494e56414c49445f504154480000000000000000000000000000000000000000604482015290519081900360640190fd5b611a6a8585600081811061173657fe5b611aa8858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613ca2915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611b1757600080fd5b505afa158015611b2b573d6000803e3d6000fd5b505050506040513d6020811015611b4157600080fd5b5051905086811015611b9a576040805162461bcd60e51b815260206004820152601a60248201527f494e53554646494349454e545f4f55545055545f414d4f554e54000000000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611c0057600080fd5b505af1158015611c14573d6000803e3d6000fd5b5050505061196b8482613307565b60608142811015611c64576040805162461bcd60e51b81526020600482015260076024820152661156141254915160ca1b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611c9b57fe5b905060200201356001600160a01b03166001600160a01b031614611d06576040805162461bcd60e51b815260206004820152600c60248201527f494e56414c49445f504154480000000000000000000000000000000000000000604482015290519081900360640190fd5b611d647f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061353792505050565b91508682600184510381518110611d7757fe5b60200260200101511015611dd2576040805162461bcd60e51b815260206004820152601a60248201527f494e53554646494349454e545f4f55545055545f414d4f554e54000000000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611e0e57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611e4157600080fd5b505af1158015611e55573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611eba7f00000000000000000000000000000000000000000000000000000000000000008989600081811061177857fe5b84600081518110611ec757fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611f1557600080fd5b505af1158015611f29573d6000803e3d6000fd5b505050506040513d6020811015611f3f57600080fd5b5051611f4757fe5b611f868287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061392d915050565b5095945050505050565b6000610e1084848461401c565b60608142811015611fdf576040805162461bcd60e51b81526020600482015260076024820152661156141254915160ca1b604482015290519081900360640190fd5b61203d7f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613b6a92505050565b9150868260008151811061204d57fe5b602002602001015111156113c0576040805162461bcd60e51b815260206004820152601660248201527f4558434553534956455f494e5055545f414d4f554e5400000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610e10848484614120565b6000814281101561211b576040805162461bcd60e51b81526020600482015260076024820152661156141254915160ca1b604482015290519081900360640190fd5b61214a887f000000000000000000000000000000000000000000000000000000000000000089898930896125da565b9050809250506121d388858a6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156121a257600080fd5b505afa1580156121b6573d6000803e3d6000fd5b505050506040513d60208110156121cc57600080fd5b5051613151565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561223957600080fd5b505af115801561224d573d6000803e3d6000fd5b5050505061115e8483613307565b804281101561229b576040805162461bcd60e51b81526020600482015260076024820152661156141254915160ca1b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106122d257fe5b905060200201356001600160a01b03166001600160a01b03161461233d576040805162461bcd60e51b815260206004820152600c60248201527f494e56414c49445f504154480000000000000000000000000000000000000000604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561239d57600080fd5b505af11580156123b1573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6124167f00000000000000000000000000000000000000000000000000000000000000008989600081811061177857fe5b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561245d57600080fd5b505af1158015612471573d6000803e3d6000fd5b505050506040513d602081101561248757600080fd5b505161248f57fe5b6000868660001981018181106124a157fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156124fd57600080fd5b505afa158015612511573d6000803e3d6000fd5b505050506040513d602081101561252757600080fd5b505160408051602089810282810182019093528982529293506125699290918a918a918291850190849080828437600092019190915250899250613ca2915050565b87611918828989600019810181811061257e57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156118e657600080fd5b600080824281101561261d576040805162461bcd60e51b81526020600482015260076024820152661156141254915160ca1b604482015290519081900360640190fd5b600061264a7f00000000000000000000000000000000000000000000000000000000000000008c8c613683565b604080517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b1580156126be57600080fd5b505af11580156126d2573d6000803e3d6000fd5b505050506040513d60208110156126e857600080fd5b5050604080517f89afcb440000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561274e57600080fd5b505af1158015612762573d6000803e3d6000fd5b505050506040513d604081101561277857600080fd5b508051602090910151909250905060006127928e8e6141f2565b509050806001600160a01b03168e6001600160a01b0316146127b55781836127b8565b82825b90975095508a871015612812576040805162461bcd60e51b815260206004820152601560248201527f494e53554646494349454e545f415f414d4f554e540000000000000000000000604482015290519081900360640190fd5b89861015612867576040805162461bcd60e51b815260206004820152601560248201527f494e53554646494349454e545f425f414d4f554e540000000000000000000000604482015290519081900360640190fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111967f00000000000000000000000000000000000000000000000000000000000000008484613537565b60008060006129197f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613683565b9050600087612928578c61292c565b6000195b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156129bb57600080fd5b505af11580156129cf573d6000803e3d6000fd5b505050506129e18e8e8e8e8e8e610ced565b909f909e509c50505050505050505050505050565b60008060008342811015612a3b576040805162461bcd60e51b81526020600482015260076024820152661156141254915160ca1b604482015290519081900360640190fd5b612a498c8c8c8c8c8c6142e6565b90945092506000612a7b7f00000000000000000000000000000000000000000000000000000000000000008e8e613683565b9050612a898d33838861376e565b612a958c33838761376e565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b158015612ae457600080fd5b505af1158015612af8573d6000803e3d6000fd5b505050506040513d6020811015612b0e57600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015612b6a576040805162461bcd60e51b81526020600482015260076024820152661156141254915160ca1b604482015290519081900360640190fd5b612b988a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c6142e6565b90945092506000612bea7f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613683565b9050612bf88b33838861376e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612c5357600080fd5b505af1158015612c67573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612ce357600080fd5b505af1158015612cf7573d6000803e3d6000fd5b505050506040513d6020811015612d0d57600080fd5b5051612d1557fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b158015612d6457600080fd5b505af1158015612d78573d6000803e3d6000fd5b505050506040513d6020811015612d8e57600080fd5b5051925034841015612da657612da633853403613307565b505096509650969350505050565b60608142811015612df6576040805162461bcd60e51b81526020600482015260076024820152661156141254915160ca1b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612e2d57fe5b905060200201356001600160a01b03166001600160a01b031614612e98576040805162461bcd60e51b815260206004820152600c60248201527f494e56414c49445f504154480000000000000000000000000000000000000000604482015290519081900360640190fd5b612ef67f000000000000000000000000000000000000000000000000000000000000000088888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613b6a92505050565b91503482600081518110612f0657fe5b60200260200101511115612f61576040805162461bcd60e51b815260206004820152601660248201527f4558434553534956455f494e5055545f414d4f554e5400000000000000000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612f9d57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612fd057600080fd5b505af1158015612fe4573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6130497f00000000000000000000000000000000000000000000000000000000000000008989600081811061177857fe5b8460008151811061305657fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156130a457600080fd5b505af11580156130b8573d6000803e3d6000fd5b505050506040513d60208110156130ce57600080fd5b50516130d657fe5b6131158287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061392d915050565b8160008151811061312257fe5b6020026020010151341115611f8657611f86338360008151811061314257fe5b60200260200101513403613307565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b6020831061321a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016131dd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461327c576040519150601f19603f3d011682016040523d82523d6000602084013e613281565b606091505b50915091508180156132af5750805115806132af57508080602001905160208110156132ac57600080fd5b50515b613300576040805162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c45440000000000000000000000000000000000604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061337157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613334565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146133d3576040519150601f19603f3d011682016040523d82523d6000602084013e6133d8565b606091505b505090508061342e576040805162461bcd60e51b815260206004820152601360248201527f4253435f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b505050565b6000808411613489576040805162461bcd60e51b815260206004820152601960248201527f494e53554646494349454e545f494e5055545f414d4f554e5400000000000000604482015290519081900360640190fd5b6000831180156134995750600082115b6134ea576040805162461bcd60e51b815260206004820152601660248201527f494e53554646494349454e545f4c495155494449545900000000000000000000604482015290519081900360640190fd5b60006134f8856103e56145a3565b9050600061350682856145a3565b905060006135208361351a886103e86145a3565b9061460f565b905080828161352b57fe5b04979650505050505050565b6060600282511015613590576040805162461bcd60e51b815260206004820152600c60248201527f494e56414c49445f504154480000000000000000000000000000000000000000604482015290519081900360640190fd5b815167ffffffffffffffff811180156135a857600080fd5b506040519080825280602002602001820160405280156135d2578160200160208202803683370190505b50905082816000815181106135e357fe5b60200260200101818152505060005b600183510381101561367b576000806136358786858151811061361157fe5b602002602001015187866001018151811061362857fe5b6020026020010151614667565b9150915061365784848151811061364857fe5b60200260200101518383613433565b84846001018151811061366657fe5b602090810291909101015250506001016135f2565b509392505050565b600080600061369285856141f2565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f6d90885b4866ce73c2cb450002c250f386aa4cced6e7a07099a083e99fb5a796609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b6020831061383f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613802565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146138a1576040519150601f19603f3d011682016040523d82523d6000602084013e6138a6565b606091505b50915091508180156138d45750805115806138d457508080602001905160208110156138d157600080fd5b50515b613925576040805162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c4544000000000000000000000000604482015290519081900360640190fd5b505050505050565b60005b6001835103811015613b645760008084838151811061394b57fe5b602002602001015185846001018151811061396257fe5b602002602001015191509150600061397a83836141f2565b509050600087856001018151811061398e57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146139bc578260006139c0565b6000835b91509150600060028a510388106139d75788613a18565b613a187f0000000000000000000000000000000000000000000000000000000000000000878c8b60020181518110613a0b57fe5b6020026020010151613683565b9050613a457f00000000000000000000000000000000000000000000000000000000000000008888613683565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613a82576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613aea578181015183820152602001613ad2565b50505050905090810190601f168015613b175780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613b3957600080fd5b505af1158015613b4d573d6000803e3d6000fd5b505060019099019850613930975050505050505050565b50505050565b6060600282511015613bc3576040805162461bcd60e51b815260206004820152600c60248201527f494e56414c49445f504154480000000000000000000000000000000000000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613bdb57600080fd5b50604051908082528060200260200182016040528015613c05578160200160208202803683370190505b5090508281600183510381518110613c1957fe5b60209081029190910101528151600019015b801561367b57600080613c5b87866001860381518110613c4757fe5b602002602001015187868151811061362857fe5b91509150613c7d848481518110613c6e57fe5b6020026020010151838361401c565b846001850381518110613c8c57fe5b6020908102919091010152505060001901613c2b565b60005b600183510381101561342e57600080848381518110613cc057fe5b6020026020010151858460010181518110613cd757fe5b6020026020010151915091506000613cef83836141f2565b5090506000613d1f7f00000000000000000000000000000000000000000000000000000000000000008585613683565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613d6057600080fd5b505afa158015613d74573d6000803e3d6000fd5b505050506040513d6060811015613d8a57600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506000806001600160a01b038a811690891614613dc7578284613dca565b83835b91509150613e1f828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156118e657600080fd5b9550613e2c868383613433565b945050505050600080856001600160a01b0316886001600160a01b031614613e5657826000613e5a565b6000835b91509150600060028c51038a10613e71578a613ea5565b613ea57f0000000000000000000000000000000000000000000000000000000000000000898e8d60020181518110613a0b57fe5b60408051600080825260208201928390527f022c0d9f00000000000000000000000000000000000000000000000000000000835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613f48578181015183820152602001613f30565b50505050905090810190601f168015613f755780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613f9757600080fd5b505af1158015613fab573d6000803e3d6000fd5b50506001909b019a50613ca59950505050505050505050565b80820382811115611199576040805162461bcd60e51b815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411614072576040805162461bcd60e51b815260206004820152601a60248201527f494e53554646494349454e545f4f55545055545f414d4f554e54000000000000604482015290519081900360640190fd5b6000831180156140825750600082115b6140d3576040805162461bcd60e51b815260206004820152601660248201527f494e53554646494349454e545f4c495155494449545900000000000000000000604482015290519081900360640190fd5b60006140eb6103e86140e586886145a3565b906145a3565b905060006140ff6103e56140e58689613fc4565b9050614116600182848161410f57fe5b049061460f565b9695505050505050565b6000808411614176576040805162461bcd60e51b815260206004820152601360248201527f494e53554646494349454e545f414d4f554e5400000000000000000000000000604482015290519081900360640190fd5b6000831180156141865750600082115b6141d7576040805162461bcd60e51b815260206004820152601660248201527f494e53554646494349454e545f4c495155494449545900000000000000000000604482015290519081900360640190fd5b826141e285846145a3565b816141e957fe5b04949350505050565b600080826001600160a01b0316846001600160a01b0316141561425c576040805162461bcd60e51b815260206004820152601360248201527f4944454e544943414c5f41444452455353455300000000000000000000000000604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b03161061427c57828461427f565b83835b90925090506001600160a01b0382166142df576040805162461bcd60e51b815260206004820152600c60248201527f5a45524f5f414444524553530000000000000000000000000000000000000000604482015290519081900360640190fd5b9250929050565b60008060006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e6a439058a8a6040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b15801561437257600080fd5b505afa158015614386573d6000803e3d6000fd5b505050506040513d602081101561439c57600080fd5b50516001600160a01b0316141561445a577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c9c6539689896040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050602060405180830381600087803b15801561442d57600080fd5b505af1158015614441573d6000803e3d6000fd5b505050506040513d602081101561445757600080fd5b50505b6000806144887f00000000000000000000000000000000000000000000000000000000000000008b8b614667565b9150915081600014801561449a575080155b156144aa57879350869250614596565b60006144b7898484614120565b90508781116145205785811015614515576040805162461bcd60e51b815260206004820152601560248201527f494e53554646494349454e545f425f414d4f554e540000000000000000000000604482015290519081900360640190fd5b889450925082614594565b600061452d898486614120565b90508981111561453957fe5b8781101561458e576040805162461bcd60e51b815260206004820152601560248201527f494e53554646494349454e545f415f414d4f554e540000000000000000000000604482015290519081900360640190fd5b94508793505b505b5050965096945050505050565b60008115806145be575050808202828282816145bb57fe5b04145b611199576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b80820182811015611199576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b600080600061467685856141f2565b509050600080614687888888613683565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156146bf57600080fd5b505afa1580156146d3573d6000803e3d6000fd5b505050506040513d60608110156146e957600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b0387811690841614614723578082614726565b81815b9099909850965050505050505056fea26469706673582212202dba42ae2ee266693851bca90822af9470ca972e2def5c7af494016cfe2bccfa64736f6c634300060c0033000000000000000000000000c8c9ab92ab70e954af23c49f98aacc1f94ebeed7000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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

000000000000000000000000c8c9ab92ab70e954af23c49f98aacc1f94ebeed7000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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


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.