Contract 0x404a895237c97b75d4cf96c8ad9760687692613a 2

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x8b4d0a856e065de96d6c253c5e2055916fa3780a53cb285d1324eee5c014a389Swap Exact Token...56496552023-12-01 11:47:305 hrs 29 mins ago0xe5d8a38750cb7854dddc769f8ac95cddaf211be1 IN  0x404a895237c97b75d4cf96c8ad9760687692613a0 MOVR0.000641052
0xadd66b2ef71043ec0cdb6feaae69c08d7899186afab7f01e05990e32837e269bSwap Exact ETH F...56496392023-12-01 11:44:065 hrs 32 mins ago0xe5d8a38750cb7854dddc769f8ac95cddaf211be1 IN  0x404a895237c97b75d4cf96c8ad9760687692613a0.1 MOVR0.000583632
0x77c14a6bce46f13124b18ae347683117caa5d8cabe7bd73a882467bb5da526cfSwap Exact Token...56485022023-12-01 7:38:309 hrs 38 mins ago0xfca85f249512ba4aef5a5367a10d02e242d993bd IN  0x404a895237c97b75d4cf96c8ad9760687692613a0 MOVR0.00058888692
0x8c9863f5bad3b4f4b853efed79045dd748ec4d6f690f779fb02d90d5746c478fSwap Exact Token...56449952023-11-30 19:10:3622 hrs 6 mins ago0xfca85f249512ba4aef5a5367a10d02e242d993bd IN  0x404a895237c97b75d4cf96c8ad9760687692613a0 MOVR0.00058888692
0xaaf3e5b6da28f45bef8b5c0375a73cf59f5ebffeb16cf3cb64752d2dbca754e7Swap Exact Token...56416472023-11-30 7:13:481 day 10 hrs ago0xfca85f249512ba4aef5a5367a10d02e242d993bd IN  0x404a895237c97b75d4cf96c8ad9760687692613a0 MOVR0.00058888692
0x15924eaac3148a715f68da2185bd67efdfa2c2658c853eb11c2e9961844c890aSwap Exact Token...56384882023-11-29 19:57:121 day 21 hrs ago0xfca85f249512ba4aef5a5367a10d02e242d993bd IN  0x404a895237c97b75d4cf96c8ad9760687692613a0 MOVR0.00058888692
0xd7a09492171d3052bd8fc313a7deb141150ed44d1659309f674b7a53f1cc1590Swap Exact Token...56359982023-11-29 11:17:422 days 5 hrs ago0xbb5905325ea3ebd3f2ecfe12e84b1b74c1cdbb1a IN  0x404a895237c97b75d4cf96c8ad9760687692613a0 MOVR0.000549428
0x58ba882d6aeccd1be810cff310e8eec55698119401f3314c9836632961858ac1Swap Exact Token...56355132023-11-29 9:36:302 days 7 hrs ago0xfca85f249512ba4aef5a5367a10d02e242d993bd IN  0x404a895237c97b75d4cf96c8ad9760687692613a0 MOVR0.000578712512
0xa7c7e191991e00b557ffefba8d8a238e465b65e06e19427c5cb2b3b16fd7eea4Swap Exact Token...56313732023-11-28 19:26:022 days 21 hrs ago0xfca85f249512ba4aef5a5367a10d02e242d993bd IN  0x404a895237c97b75d4cf96c8ad9760687692613a0 MOVR0.00058888692
0xa2b6f8c5db442fd2e7f9c11fb8fc0399d77b146f1dc85fcf8d516ee63f867c2bSwap Exact Token...56279952023-11-28 7:48:423 days 9 hrs ago0xfca85f249512ba4aef5a5367a10d02e242d993bd IN  0x404a895237c97b75d4cf96c8ad9760687692613a0 MOVR0.00058888692
0xbf01f5b9a28ff2a969c2a0f02d2f0734a339d0412e0f39657249ada78b446631Swap Exact Token...56278932023-11-28 7:27:363 days 9 hrs ago0x872af3cb1dad88907f2944f166a98a9d4a86dd93 IN  0x404a895237c97b75d4cf96c8ad9760687692613a0 MOVR0.00024974
0xd05d02e95a28fadecb289a1130c4b4ac47168df6b3f9ab1102f05d95029cb05aAdd Liquidity56278722023-11-28 7:23:243 days 9 hrs ago0x872af3cb1dad88907f2944f166a98a9d4a86dd93 IN  0x404a895237c97b75d4cf96c8ad9760687692613a0 MOVR0.000414815
0xa85b1c99504d8fd4418b9665ee40a0db00cc5d4ce9915b78fc366918b9880edeSwap Exact Token...56274132023-11-28 5:49:303 days 11 hrs ago0xaf96ce1e1952b2308eb36515867e041f32490ef4 IN  0x404a895237c97b75d4cf96c8ad9760687692613a0 MOVR0.00096708654
0x3bfbeea18b4361c497de82bc53033f44d51a2e847b6866b5705064602b81540bAdd Liquidity56271612023-11-28 4:58:063 days 12 hrs ago0x7ebc757425ea869b1aa85b8879165fceaf657c05 IN  0x404a895237c97b75d4cf96c8ad9760687692613a0 MOVR0.000746667
0x180d26076611b0d2958b0ae2a58820b0f21ea298831b50ef12c224ab21b60bffSwap ETH For Exa...56271392023-11-28 4:53:423 days 12 hrs ago0x7ebc757425ea869b1aa85b8879165fceaf657c05 IN  0x404a895237c97b75d4cf96c8ad9760687692613a0.602886478607121 MOVR0.000442611429
0x68874ec5435e4a02af1437503b6105eccda1637adf4ff0f2fbc95bbc6fc4b474Swap ETH For Exa...56271282023-11-28 4:51:303 days 12 hrs ago0x7ebc757425ea869b1aa85b8879165fceaf657c05 IN  0x404a895237c97b75d4cf96c8ad9760687692613a0.599357812135554 MOVR0.000601135474
0x75d7dd3a828563b7543b170672d73b7fdaca6a71e2d0fecea450902fa00671cfSwap Exact Token...56269192023-11-28 4:07:493 days 13 hrs ago0x7ebc757425ea869b1aa85b8879165fceaf657c05 IN  0x404a895237c97b75d4cf96c8ad9760687692613a0 MOVR0.00058888692
0xd5c845da83ebbb5aed948d6fcf6dd0e74cf631484872c8db630fe3b2b557144cSwap Exact Token...56250032023-11-27 21:32:303 days 19 hrs ago0xfca85f249512ba4aef5a5367a10d02e242d993bd IN  0x404a895237c97b75d4cf96c8ad9760687692613a0 MOVR0.000549428
0x60e96d9601a6175ebb58659d331c75be7260a52a936c9bc35e51a40a0243ebabSwap Exact Token...56241462023-11-27 18:37:063 days 22 hrs ago0x32fd57584c8f5c2ab98da5b668677788497e0c77 IN  0x404a895237c97b75d4cf96c8ad9760687692613a0 MOVR0.000854228627
0x84a5d2552382b1192793ad20e7657a181d7cefa418b5563530a3aee31f175bd8Swap Exact Token...56209252023-11-27 7:32:424 days 9 hrs ago0xfca85f249512ba4aef5a5367a10d02e242d993bd IN  0x404a895237c97b75d4cf96c8ad9760687692613a0 MOVR0.00058888692
0x83051289c293de79286d447ec4106e04448dda95762b950e3a69ed63a0a03957Swap Exact Token...56176542023-11-26 20:14:544 days 21 hrs ago0xfca85f249512ba4aef5a5367a10d02e242d993bd IN  0x404a895237c97b75d4cf96c8ad9760687692613a0 MOVR0.000549428
0x836c39056a4ba4eb05921af4fd5e7d519353a498ac6b5c8018450d205d9028c4Add Liquidity ET...56170482023-11-26 18:10:364 days 23 hrs ago0x491e549680a78109e510149f1b6917520ad33f6b IN  0x404a895237c97b75d4cf96c8ad9760687692613a0.51793437549257 MOVR0.000760782
0xdbb08e38bf30f966b1d5b0f01af4f018cf071b30dc8cbc71c319d897f0fc71a5Swap Exact Token...56170452023-11-26 18:09:544 days 23 hrs ago0x491e549680a78109e510149f1b6917520ad33f6b IN  0x404a895237c97b75d4cf96c8ad9760687692613a0 MOVR0.000549428
0xb9413122ac6c97651ae6775bcf9ea2e26d3467439b7dc4b7f89fb9c6514ab5d6Swap Exact Token...56162652023-11-26 15:28:365 days 1 hr ago0x607ce91180ec37cd68f0e0aae428478926aa9b11 IN  0x404a895237c97b75d4cf96c8ad9760687692613a0 MOVR0.000843623
0xe81b67a7dd4ff97848c5e47e1688d5066bd2a252cb760ed3a69fdf5d5fd240b1Swap Exact Token...56152742023-11-26 12:01:485 days 5 hrs ago0xea34b110623cf412ddbc7d3936b4b32f7cfebd43 IN  0x404a895237c97b75d4cf96c8ad9760687692613a0 MOVR0.000997009
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xadd66b2ef71043ec0cdb6feaae69c08d7899186afab7f01e05990e32837e269b56496392023-12-01 11:44:065 hrs 32 mins ago 0x404a895237c97b75d4cf96c8ad9760687692613a Moonbeam Foundation: WMOVR Token0.1 MOVR
0x77c14a6bce46f13124b18ae347683117caa5d8cabe7bd73a882467bb5da526cf56485022023-12-01 7:38:309 hrs 38 mins ago 0x404a895237c97b75d4cf96c8ad9760687692613a0xfca85f249512ba4aef5a5367a10d02e242d993bd0.149454347070514984 MOVR
0x77c14a6bce46f13124b18ae347683117caa5d8cabe7bd73a882467bb5da526cf56485022023-12-01 7:38:309 hrs 38 mins ago Moonbeam Foundation: WMOVR Token 0x404a895237c97b75d4cf96c8ad9760687692613a0.149454347070514984 MOVR
0x8c9863f5bad3b4f4b853efed79045dd748ec4d6f690f779fb02d90d5746c478f56449952023-11-30 19:10:3622 hrs 6 mins ago 0x404a895237c97b75d4cf96c8ad9760687692613a0xfca85f249512ba4aef5a5367a10d02e242d993bd0.142869220003804641 MOVR
0x8c9863f5bad3b4f4b853efed79045dd748ec4d6f690f779fb02d90d5746c478f56449952023-11-30 19:10:3622 hrs 6 mins ago Moonbeam Foundation: WMOVR Token 0x404a895237c97b75d4cf96c8ad9760687692613a0.142869220003804641 MOVR
0x15924eaac3148a715f68da2185bd67efdfa2c2658c853eb11c2e9961844c890a56384882023-11-29 19:57:121 day 21 hrs ago 0x404a895237c97b75d4cf96c8ad9760687692613a0xfca85f249512ba4aef5a5367a10d02e242d993bd0.139541387595683987 MOVR
0x15924eaac3148a715f68da2185bd67efdfa2c2658c853eb11c2e9961844c890a56384882023-11-29 19:57:121 day 21 hrs ago Moonbeam Foundation: WMOVR Token 0x404a895237c97b75d4cf96c8ad9760687692613a0.139541387595683987 MOVR
0xd7a09492171d3052bd8fc313a7deb141150ed44d1659309f674b7a53f1cc159056359982023-11-29 11:17:422 days 5 hrs ago 0x404a895237c97b75d4cf96c8ad9760687692613a0xbb5905325ea3ebd3f2ecfe12e84b1b74c1cdbb1a0.032047357617254337 MOVR
0xd7a09492171d3052bd8fc313a7deb141150ed44d1659309f674b7a53f1cc159056359982023-11-29 11:17:422 days 5 hrs ago Moonbeam Foundation: WMOVR Token 0x404a895237c97b75d4cf96c8ad9760687692613a0.032047357617254337 MOVR
0x58ba882d6aeccd1be810cff310e8eec55698119401f3314c9836632961858ac156355132023-11-29 9:36:302 days 7 hrs ago 0x404a895237c97b75d4cf96c8ad9760687692613a0xfca85f249512ba4aef5a5367a10d02e242d993bd0.164144316865908182 MOVR
0x58ba882d6aeccd1be810cff310e8eec55698119401f3314c9836632961858ac156355132023-11-29 9:36:302 days 7 hrs ago Moonbeam Foundation: WMOVR Token 0x404a895237c97b75d4cf96c8ad9760687692613a0.164144316865908182 MOVR
0xa7c7e191991e00b557ffefba8d8a238e465b65e06e19427c5cb2b3b16fd7eea456313732023-11-28 19:26:022 days 21 hrs ago 0x404a895237c97b75d4cf96c8ad9760687692613a0xfca85f249512ba4aef5a5367a10d02e242d993bd0.144345173142680284 MOVR
0xa7c7e191991e00b557ffefba8d8a238e465b65e06e19427c5cb2b3b16fd7eea456313732023-11-28 19:26:022 days 21 hrs ago Moonbeam Foundation: WMOVR Token 0x404a895237c97b75d4cf96c8ad9760687692613a0.144345173142680284 MOVR
0xa2b6f8c5db442fd2e7f9c11fb8fc0399d77b146f1dc85fcf8d516ee63f867c2b56279952023-11-28 7:48:423 days 9 hrs ago 0x404a895237c97b75d4cf96c8ad9760687692613a0xfca85f249512ba4aef5a5367a10d02e242d993bd0.127808377462711586 MOVR
0xa2b6f8c5db442fd2e7f9c11fb8fc0399d77b146f1dc85fcf8d516ee63f867c2b56279952023-11-28 7:48:423 days 9 hrs ago Moonbeam Foundation: WMOVR Token 0x404a895237c97b75d4cf96c8ad9760687692613a0.127808377462711586 MOVR
0xbf01f5b9a28ff2a969c2a0f02d2f0734a339d0412e0f39657249ada78b44663156278932023-11-28 7:27:363 days 9 hrs ago 0x404a895237c97b75d4cf96c8ad9760687692613a0x872af3cb1dad88907f2944f166a98a9d4a86dd930.204382318207020697 MOVR
0xbf01f5b9a28ff2a969c2a0f02d2f0734a339d0412e0f39657249ada78b44663156278932023-11-28 7:27:363 days 9 hrs ago Moonbeam Foundation: WMOVR Token 0x404a895237c97b75d4cf96c8ad9760687692613a0.204382318207020697 MOVR
0x180d26076611b0d2958b0ae2a58820b0f21ea298831b50ef12c224ab21b60bff56271392023-11-28 4:53:423 days 12 hrs ago 0x404a895237c97b75d4cf96c8ad9760687692613a0x7ebc757425ea869b1aa85b8879165fceaf657c050.002999435216950855 MOVR
0x180d26076611b0d2958b0ae2a58820b0f21ea298831b50ef12c224ab21b60bff56271392023-11-28 4:53:423 days 12 hrs ago 0x404a895237c97b75d4cf96c8ad9760687692613a Moonbeam Foundation: WMOVR Token0.599887043390171116 MOVR
0x68874ec5435e4a02af1437503b6105eccda1637adf4ff0f2fbc95bbc6fc4b47456271282023-11-28 4:51:303 days 12 hrs ago 0x404a895237c97b75d4cf96c8ad9760687692613a0x7ebc757425ea869b1aa85b8879165fceaf657c050.002981879662365944 MOVR
0x68874ec5435e4a02af1437503b6105eccda1637adf4ff0f2fbc95bbc6fc4b47456271282023-11-28 4:51:303 days 12 hrs ago 0x404a895237c97b75d4cf96c8ad9760687692613a Moonbeam Foundation: WMOVR Token0.596375932473188996 MOVR
0x75d7dd3a828563b7543b170672d73b7fdaca6a71e2d0fecea450902fa00671cf56269192023-11-28 4:07:493 days 13 hrs ago 0x404a895237c97b75d4cf96c8ad9760687692613a0x7ebc757425ea869b1aa85b8879165fceaf657c050.089932909897098564 MOVR
0x75d7dd3a828563b7543b170672d73b7fdaca6a71e2d0fecea450902fa00671cf56269192023-11-28 4:07:493 days 13 hrs ago Moonbeam Foundation: WMOVR Token 0x404a895237c97b75d4cf96c8ad9760687692613a0.089932909897098564 MOVR
0xd5c845da83ebbb5aed948d6fcf6dd0e74cf631484872c8db630fe3b2b557144c56250032023-11-27 21:32:303 days 19 hrs ago 0x404a895237c97b75d4cf96c8ad9760687692613a0xfca85f249512ba4aef5a5367a10d02e242d993bd0.174592705457823671 MOVR
0xd5c845da83ebbb5aed948d6fcf6dd0e74cf631484872c8db630fe3b2b557144c56250032023-11-27 21:32:303 days 19 hrs ago Moonbeam Foundation: WMOVR Token 0x404a895237c97b75d4cf96c8ad9760687692613a0.174592705457823671 MOVR
[ Download CSV Export 
Index Block
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AlphadexV1Router02

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at moonriver.moonscan.io on 2023-08-17
*/

pragma solidity =0.6.6;

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

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

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

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

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

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

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

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

// AlphadexLibrary 

library AlphadexV1Library {
    using SafeMath for uint;

    // returns sorted token addresses, used to handle return values from pairs sorted in this order
    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
        require(tokenA != tokenB, 'AlphadexV1Library: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'AlphadexV1Library: 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'6105f484dcbae8b01a9d72ce3c9716a5474e0cd4cb36d80563b18268bb5bfc82' // 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,) = IAlphadexV1Pair(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, 'AlphadexV1Library: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'AlphadexV1Library: 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, 'AlphadexV1Library: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'AlphadexV1Library: 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, 'AlphadexV1Library: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'AlphadexV1Library: 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, 'AlphadexV1Library: 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, 'AlphadexV1Library: 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);
        }
    }
}

//  IERC20 Contract Interface

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

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

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

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


//   Alphadex Factory Contract Interface

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

// Alphadex Pair Contract Interface

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

// Alphadex Router01 Contract Interface

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

interface IAlphadexV1Router02 is IAlphadexV1Router01 {
    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;
}


// Alphadex Router02 Contract

contract AlphadexV1Router02 is IAlphadexV1Router02 {
    using SafeMath for uint;

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

    modifier ensure(uint deadline) {
        require(deadline >= block.timestamp, 'AlphadexV1Router: 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 (IAlphadexV1Factory(factory).getPair(tokenA, tokenB) == address(0)) {
            IAlphadexV1Factory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = AlphadexV1Library.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = AlphadexV1Library.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'AlphadexV1Router: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = AlphadexV1Library.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'AlphadexV1Router: 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 = AlphadexV1Library.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IAlphadexV1Pair(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 = AlphadexV1Library.pairFor(factory, token, WETH);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWETH(WETH).deposit{value: amountETH}();
        assert(IWETH(WETH).transfer(pair, amountETH));
        liquidity = IAlphadexV1Pair(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 = AlphadexV1Library.pairFor(factory, tokenA, tokenB);
        IAlphadexV1Pair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint amount0, uint amount1) = IAlphadexV1Pair(pair).burn(to);
        (address token0,) = AlphadexV1Library.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'AlphadexV1Router: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'AlphadexV1Router: 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 = AlphadexV1Library.pairFor(factory, tokenA, tokenB);
        uint value = approveMax ? uint(-1) : liquidity;
        IAlphadexV1Pair(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 = AlphadexV1Library.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IAlphadexV1Pair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline);
    }

    // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) ****
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountETH) {
        (, amountETH) = removeLiquidity(
            token,
            WETH,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this)));
        IWETH(WETH).withdraw(amountETH);
        TransferHelper.safeTransferETH(to, amountETH);
    }
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountETH) {
        address pair = AlphadexV1Library.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IAlphadexV1Pair(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,) = AlphadexV1Library.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 ? AlphadexV1Library.pairFor(factory, output, path[i + 2]) : _to;
            IAlphadexV1Pair(AlphadexV1Library.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 = AlphadexV1Library.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'AlphadexV1Router: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, AlphadexV1Library.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 = AlphadexV1Library.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'AlphadexV1Router: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, AlphadexV1Library.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, 'AlphadexV1Router: INVALID_PATH');
        amounts = AlphadexV1Library.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'AlphadexV1Router: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(AlphadexV1Library.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, 'AlphadexV1Router: INVALID_PATH');
        amounts = AlphadexV1Library.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'AlphadexV1Router: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, AlphadexV1Library.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, 'AlphadexV1Router: INVALID_PATH');
        amounts = AlphadexV1Library.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'AlphadexV1Router: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, AlphadexV1Library.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, 'AlphadexV1Router: INVALID_PATH');
        amounts = AlphadexV1Library.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'AlphadexV1Router: EXCESSIVE_INPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(AlphadexV1Library.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,) = AlphadexV1Library.sortTokens(input, output);
            IAlphadexV1Pair pair = IAlphadexV1Pair(AlphadexV1Library.pairFor(factory, input, output));
            uint amountInput;
            uint amountOutput;
            { // scope to avoid stack too deep errors
            (uint reserve0, uint reserve1,) = pair.getReserves();
            (uint reserveInput, uint reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
            amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput);
            amountOutput = AlphadexV1Library.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? AlphadexV1Library.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, AlphadexV1Library.pairFor(factory, path[0], path[1]), amountIn
        );
        uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'AlphadexV1Router: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WETH, 'AlphadexV1Router: INVALID_PATH');
        uint amountIn = msg.value;
        IWETH(WETH).deposit{value: amountIn}();
        assert(IWETH(WETH).transfer(AlphadexV1Library.pairFor(factory, path[0], path[1]), amountIn));
        uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'AlphadexV1Router: 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, 'AlphadexV1Router: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, AlphadexV1Library.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20(WETH).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'AlphadexV1Router: 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 AlphadexV1Library.quote(amountA, reserveA, reserveB);
    }

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

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

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

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

Contract ABI

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

60c060405234801561001057600080fd5b5060405162004771380380620047718339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6145ec620001856000398061015f5280610ce45280610d1f5280610e16528061103452806113be528061152452806118eb52806119e55280611a9b5280611b695280611caf5280611d375280611f7c5280611ff752806120a652806121725280612207528061227b528061277952806129ec5280612a425280612a765280612aea5280612c8a5280612dcd5280612e55525080610ea45280610f7b52806110fa5280611133528061126e528061144c528061150252806116725280611bfc5280611d695280611ecc52806122ad528061250652806126fe5280612727528061275752806128c45280612a205280612d1d5280612e87528061372e52806137715280613a545280613bd3528061400352806140b1528061413152506145ec6000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b03813516906020013561189d565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b21565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e74565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e81565b34801561088157600080fd5b5061088a611f7a565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f9e565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fab565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b03813516906020013561212c565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124b8565b348015610a1c57600080fd5b5061088a6126fc565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612720945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561274d565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612861565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561299d565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612c42565b6000808242811015610cde576040805162461bcd60e51b815260206004820152601960248201526000805160206143e6833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124b8565b9093509150610d1d898685612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da5858361312e565b50965096945050505050565b6000610dbe848484613226565b949350505050565b60608142811015610e0c576040805162461bcd60e51b815260206004820152601960248201526000805160206143e6833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b815260206004820152601e6024820152600080516020614432833981519152604482015290519081900360640190fd5b610efd7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b815260040180806020018281038252602c815260200180614517602c913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b0316613462565b85600081518110610fe657fe5b6020026020010151613522565b6110328287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061367f915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b602002602001015161312e565b509695505050505050565b60606111207f000000000000000000000000000000000000000000000000000000000000000084846138c5565b90505b92915050565b60008060006111597f00000000000000000000000000000000000000000000000000000000000000008f8f613462565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f6124b8565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b815260206004820152601960248201526000805160206143e6833981519152604482015290519081900360640190fd5b6112c77f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b815260040180806020018281038252602c815260200180614517602c913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e88287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b606081428110156113b4576040805162461bcd60e51b815260206004820152601960248201526000805160206143e6833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b815260206004820152601e6024820152600080516020614432833981519152604482015290519081900360640190fd5b6114a57f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b81526004018080602001828103825260288152602001806144a26028913960400191505060405180910390fd5b6000806115487f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611fab565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b815260206004820152601960248201526000805160206143e6833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a613522565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b505160408051602088810282810182019093528882529293506117a49290918991899182918501908490808284376000920191909152508892506139fd915050565b8661185682888860001981018181106117b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d602081101561184857600080fd5b50519063ffffffff613d0816565b10156118935760405162461bcd60e51b815260040180806020018281038252602c815260200180614517602c913960400191505060405180910390fd5b5050505050505050565b80428110156118e1576040805162461bcd60e51b815260206004820152601960248201526000805160206143e6833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061191b57fe5b905060200201356001600160a01b03166001600160a01b031614611974576040805162461bcd60e51b815260206004820152601e6024820152600080516020614432833981519152604482015290519081900360640190fd5b6119848585600081811061165c57fe5b6119c28585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506139fd915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a2c57600080fd5b505afa158015611a40573d6000803e3d6000fd5b505050506040513d6020811015611a5657600080fd5b5051905086811015611a995760405162461bcd60e51b815260040180806020018281038252602c815260200180614517602c913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aff57600080fd5b505af1158015611b13573d6000803e3d6000fd5b50505050611893848261312e565b60608142811015611b67576040805162461bcd60e51b815260206004820152601960248201526000805160206143e6833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b9e57fe5b905060200201356001600160a01b03166001600160a01b031614611bf7576040805162461bcd60e51b815260206004820152601e6024820152600080516020614432833981519152604482015290519081900360640190fd5b611c557f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110611c6857fe5b60200260200101511015611cad5760405162461bcd60e51b815260040180806020018281038252602c815260200180614517602c913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611ce957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1c57600080fd5b505af1158015611d30573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d957f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110611da257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b505050506040513d6020811015611e2357600080fd5b5051611e2b57fe5b611e6a8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b5095945050505050565b6000610dbe848484613d58565b60608142811015611ec7576040805162461bcd60e51b815260206004820152601960248201526000805160206143e6833981519152604482015290519081900360640190fd5b611f257f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91508682600081518110611f3557fe5b6020026020010151111561131f5760405162461bcd60e51b81526004018080602001828103825260288152602001806144a26028913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613e48565b60008142811015611ff1576040805162461bcd60e51b815260206004820152601960248201526000805160206143e6833981519152604482015290519081900360640190fd5b612020887f000000000000000000000000000000000000000000000000000000000000000089898930896124b8565b604080516370a0823160e01b815230600482015290519194506120a492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561207357600080fd5b505afa158015612087573d6000803e3d6000fd5b505050506040513d602081101561209d57600080fd5b5051612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561210a57600080fd5b505af115801561211e573d6000803e3d6000fd5b505050506110e8848361312e565b8042811015612170576040805162461bcd60e51b815260206004820152601960248201526000805160206143e6833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106121a757fe5b905060200201356001600160a01b03166001600160a01b031614612200576040805162461bcd60e51b815260206004820152601e6024820152600080516020614432833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122d97f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561232957600080fd5b505af115801561233d573d6000803e3d6000fd5b505050506040513d602081101561235357600080fd5b505161235b57fe5b60008686600019810181811061236d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123d257600080fd5b505afa1580156123e6573d6000803e3d6000fd5b505050506040513d60208110156123fc57600080fd5b5051604080516020898102828101820190935289825292935061243e9290918a918a9182918501908490808284376000920191909152508992506139fd915050565b87611856828989600019810181811061245357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b60008082428110156124ff576040805162461bcd60e51b815260206004820152601960248201526000805160206143e6833981519152604482015290519081900360640190fd5b600061252c7f00000000000000000000000000000000000000000000000000000000000000008c8c613462565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561258757600080fd5b505af115801561259b573d6000803e3d6000fd5b505050506040513d60208110156125b157600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125fe57600080fd5b505af1158015612612573d6000803e3d6000fd5b505050506040513d604081101561262857600080fd5b508051602090910151909250905060006126428e8e613ef4565b509050806001600160a01b03168e6001600160a01b031614612665578183612668565b82825b90975095508a8710156126ac5760405162461bcd60e51b81526004018080602001828103825260278152602001806144ca6027913960400191505060405180910390fd5b898610156126eb5760405162461bcd60e51b81526004018080602001828103825260278152602001806144526027913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111207f00000000000000000000000000000000000000000000000000000000000000008484613316565b600080600061279d7f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613462565b90506000876127ac578c6127b0565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561282657600080fd5b505af115801561283a573d6000803e3d6000fd5b5050505061284c8e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b600080600083428110156128aa576040805162461bcd60e51b815260206004820152601960248201526000805160206143e6833981519152604482015290519081900360640190fd5b6128b88c8c8c8c8c8c613fd2565b909450925060006128ea7f00000000000000000000000000000000000000000000000000000000000000008e8e613462565b90506128f88d338388613522565b6129048c338387613522565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561295c57600080fd5b505af1158015612970573d6000803e3d6000fd5b505050506040513d602081101561298657600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129e6576040805162461bcd60e51b815260206004820152601960248201526000805160206143e6833981519152604482015290519081900360640190fd5b612a148a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613fd2565b90945092506000612a667f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050612a748b338388613522565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612acf57600080fd5b505af1158015612ae3573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b6857600080fd5b505af1158015612b7c573d6000803e3d6000fd5b505050506040513d6020811015612b9257600080fd5b5051612b9a57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612bf257600080fd5b505af1158015612c06573d6000803e3d6000fd5b505050506040513d6020811015612c1c57600080fd5b5051925034841015612c3457612c343385340361312e565b505096509650969350505050565b60608142811015612c88576040805162461bcd60e51b815260206004820152601960248201526000805160206143e6833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612cbf57fe5b905060200201356001600160a01b03166001600160a01b031614612d18576040805162461bcd60e51b815260206004820152601e6024820152600080516020614432833981519152604482015290519081900360640190fd5b612d767f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91503482600081518110612d8657fe5b60200260200101511115612dcb5760405162461bcd60e51b81526004018080602001828103825260288152602001806144a26028913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e0757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e3a57600080fd5b505af1158015612e4e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612eb37f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110612ec057fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b505050506040513d6020811015612f4157600080fd5b5051612f4957fe5b612f888287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b81600081518110612f9557fe5b6020026020010151341115611e6a57611e6a3383600081518110612fb557fe5b6020026020010151340361312e565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130415780518252601f199092019160209182019101613022565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130a3576040519150601f19603f3d011682016040523d82523d6000602084013e6130a8565b606091505b50915091508180156130d65750805115806130d657508080602001905160208110156130d357600080fd5b50515b613127576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061317a5780518252601f19909201916020918201910161315b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131dc576040519150601f19603f3d011682016040523d82523d6000602084013e6131e1565b606091505b50509050806132215760405162461bcd60e51b81526004018080602001828103825260238152602001806145436023913960400191505060405180910390fd5b505050565b60008084116132665760405162461bcd60e51b815260040180806020018281038252602c815260200180614406602c913960400191505060405180910390fd5b6000831180156132765750600082115b6132b15760405162461bcd60e51b81526004018080602001828103825260298152602001806144796029913960400191505060405180910390fd5b60006132c5856103e563ffffffff61424616565b905060006132d9828563ffffffff61424616565b905060006132ff836132f3886103e863ffffffff61424616565b9063ffffffff6142a916565b905080828161330a57fe5b04979650505050505050565b606060028251101561336f576040805162461bcd60e51b815260206004820152601f60248201527f416c70686164657856314c6962726172793a20494e56414c49445f5041544800604482015290519081900360640190fd5b815167ffffffffffffffff8111801561338757600080fd5b506040519080825280602002602001820160405280156133b1578160200160208202803683370190505b50905082816000815181106133c257fe5b60200260200101818152505060005b600183510381101561345a57600080613414878685815181106133f057fe5b602002602001015187866001018151811061340757fe5b60200260200101516142f8565b9150915061343684848151811061342757fe5b60200260200101518383613226565b84846001018151811061344557fe5b602090810291909101015250506001016133d1565b509392505050565b60008060006134718585613ef4565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f6105f484dcbae8b01a9d72ce3c9716a5474e0cd4cb36d80563b18268bb5bfc82609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135a75780518252601f199092019160209182019101613588565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613609576040519150601f19603f3d011682016040523d82523d6000602084013e61360e565b606091505b509150915081801561363c57508051158061363c575080806020019051602081101561363957600080fd5b50515b6136775760405162461bcd60e51b81526004018080602001828103825260248152602001806145936024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138bf5760008084838151811061369d57fe5b60200260200101518584600101815181106136b457fe5b60200260200101519150915060006136cc8383613ef4565b50905060008785600101815181106136e057fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461370e57826000613712565b6000835b91509150600060028a51038810613729578861376a565b61376a7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061375d57fe5b6020026020010151613462565b90506137977f00000000000000000000000000000000000000000000000000000000000000008888613462565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156137d4576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561384557818101518382015260200161382d565b50505050905090810190601f1680156138725780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561389457600080fd5b505af11580156138a8573d6000803e3d6000fd5b505060019099019850613682975050505050505050565b50505050565b606060028251101561391e576040805162461bcd60e51b815260206004820152601f60248201527f416c70686164657856314c6962726172793a20494e56414c49445f5041544800604482015290519081900360640190fd5b815167ffffffffffffffff8111801561393657600080fd5b50604051908082528060200260200182016040528015613960578160200160208202803683370190505b509050828160018351038151811061397457fe5b60209081029190910101528151600019015b801561345a576000806139b6878660018603815181106139a257fe5b602002602001015187868151811061340757fe5b915091506139d88484815181106139c957fe5b60200260200101518383613d58565b8460018503815181106139e757fe5b6020908102919091010152505060001901613986565b60005b600183510381101561322157600080848381518110613a1b57fe5b6020026020010151858460010181518110613a3257fe5b6020026020010151915091506000613a4a8383613ef4565b5090506000613a7a7f00000000000000000000000000000000000000000000000000000000000000008585613462565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613abb57600080fd5b505afa158015613acf573d6000803e3d6000fd5b505050506040513d6060811015613ae557600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613b1b578284613b1e565b83835b91509150613b7c828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b9550613b89868383613226565b945050505050600080856001600160a01b0316886001600160a01b031614613bb357826000613bb7565b6000835b91509150600060028c51038a10613bce578a613c02565b613c027f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061375d57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c8c578181015183820152602001613c74565b50505050905090810190601f168015613cb95780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613cdb57600080fd5b505af1158015613cef573d6000803e3d6000fd5b50506001909b019a50613a009950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613d985760405162461bcd60e51b815260040180806020018281038252602d815260200180614566602d913960400191505060405180910390fd5b600083118015613da85750600082115b613de35760405162461bcd60e51b81526004018080602001828103825260298152602001806144796029913960400191505060405180910390fd5b6000613e076103e8613dfb868863ffffffff61424616565b9063ffffffff61424616565b90506000613e216103e5613dfb868963ffffffff613d0816565b9050613e3e6001828481613e3157fe5b049063ffffffff6142a916565b9695505050505050565b6000808411613e885760405162461bcd60e51b81526004018080602001828103825260268152602001806144f16026913960400191505060405180910390fd5b600083118015613e985750600082115b613ed35760405162461bcd60e51b81526004018080602001828103825260298152602001806144796029913960400191505060405180910390fd5b82613ee4858463ffffffff61424616565b81613eeb57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613f485760405162461bcd60e51b81526004018080602001828103825260268152602001806143c06026913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613f68578284613f6b565b83835b90925090506001600160a01b038216613fcb576040805162461bcd60e51b815260206004820152601f60248201527f416c70686164657856314c6962726172793a205a45524f5f4144445245535300604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561404c57600080fd5b505afa158015614060573d6000803e3d6000fd5b505050506040513d602081101561407657600080fd5b50516001600160a01b0316141561412957604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156140fc57600080fd5b505af1158015614110573d6000803e3d6000fd5b505050506040513d602081101561412657600080fd5b50505b6000806141577f00000000000000000000000000000000000000000000000000000000000000008b8b6142f8565b91509150816000148015614169575080155b1561417957879350869250614239565b6000614186898484613e48565b90508781116141d957858110156141ce5760405162461bcd60e51b81526004018080602001828103825260278152602001806144526027913960400191505060405180910390fd5b889450925082614237565b60006141e6898486613e48565b9050898111156141f257fe5b878110156142315760405162461bcd60e51b81526004018080602001828103825260278152602001806144ca6027913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806142615750508082028282828161425e57fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006143078585613ef4565b509050600080614318888888613462565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561435057600080fd5b505afa158015614364573d6000803e3d6000fd5b505050506040513d606081101561437a57600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146143ad5780826143b0565b81815b9099909850965050505050505056fe416c70686164657856314c6962726172793a204944454e544943414c5f414444524553534553416c7068616465785631526f757465723a204558504952454400000000000000416c70686164657856314c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54416c7068616465785631526f757465723a20494e56414c49445f504154480000416c7068616465785631526f757465723a20494e53554646494349454e545f425f414d4f554e54416c70686164657856314c6962726172793a20494e53554646494349454e545f4c4951554944495459416c7068616465785631526f757465723a204558434553534956455f494e5055545f414d4f554e54416c7068616465785631526f757465723a20494e53554646494349454e545f415f414d4f554e54416c70686164657856314c6962726172793a20494e53554646494349454e545f414d4f554e54416c7068616465785631526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544416c70686164657856314c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a2646970667358221220d792bfaecb0855314f50001354b049522ea558cf1b461944c03b4335c80ca13764736f6c63430006060033000000000000000000000000dd9efcbdf9f422e2fc159efe77add3730d48056d00000000000000000000000098878b06940ae243284ca214f92bb71a2b032b8a

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

000000000000000000000000dd9efcbdf9f422e2fc159efe77add3730d48056d00000000000000000000000098878b06940ae243284ca214f92bb71a2b032b8a

-----Decoded View---------------
Arg [0] : _factory (address): 0xdd9efcbdf9f422e2fc159efe77add3730d48056d
Arg [1] : _WETH (address): 0x98878b06940ae243284ca214f92bb71a2b032b8a

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000dd9efcbdf9f422e2fc159efe77add3730d48056d
Arg [1] : 00000000000000000000000098878b06940ae243284ca214f92bb71a2b032b8a


Deployed ByteCode Sourcemap

15692:18620:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16177:10;-1:-1:-1;;;;;16191:4:0;16177:18;;16170:26;;;;15692:18620;;12:1:-1;9;2:12;20344:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20344:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20344:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33252:263;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33252:263:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33252:263:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27537:854;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27537:854:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27537:854:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27537:854:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27537:854:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27537:854:0;;-1:-1:-1;27537:854:0;-1:-1:-1;;;;;;27537:854:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;27537:854:0;;;;;;;;;;;;;;;;;34055:254;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34055:254:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34055:254:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34055:254:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34055:254:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34055:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34055:254:0;;-1:-1:-1;34055:254:0;;-1:-1:-1;;;;;34055:254:0:i;21023:679::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21023:679:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21023:679:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24740:631::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24740:631:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24740:631:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;24740:631:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24740:631:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;24740:631:0;;-1:-1:-1;24740:631:0;-1:-1:-1;;;;;;24740:631:0;;;;;;;;:::i;26699:832::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26699:832:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26699:832:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26699:832:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26699:832:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26699:832:0;;-1:-1:-1;26699:832:0;-1:-1:-1;;;;;;26699:832:0;;;;;;;;:::i;23164:720::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23164:720:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23164:720:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30584:716::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30584:716:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30584:716:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30584:716:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30584:716:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30584:716:0;;-1:-1:-1;30584:716:0;-1:-1:-1;;;;;;30584:716:0;;;;;;;;:::i;32165:846::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32165:846:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32165:846:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;32165:846:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32165:846:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;32165:846:0;;-1:-1:-1;32165:846:0;-1:-1:-1;;;;;;32165:846:0;;;;;;;;:::i;25992:701::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25992:701:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25992:701:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25992:701:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25992:701:0;;-1:-1:-1;25992:701:0;-1:-1:-1;;;;;;25992:701:0;;;;;;;;:::i;33523:262::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33523:262:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33523:262:0;;;;;;;;;;;;:::i;25377:609::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25377:609:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25377:609:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25377:609:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25377:609:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25377:609:0;;-1:-1:-1;25377:609:0;-1:-1:-1;;;;;;25377:609:0;;;;;;;;:::i;15830:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15830:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;15830:38:0;;;;;;;;;;;;;;33055:189;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33055:189:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33055:189:0;;;;;;;;;;;;:::i;22458:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22458:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22458:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31306:853::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31306:853:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31306:853:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31306:853:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31306:853:0;;-1:-1:-1;31306:853:0;-1:-1:-1;;;;;;31306:853:0;;;;;;;;:::i;19467:871::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19467:871:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19467:871:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15782:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15782:41:0;;;:::i;33793:254::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33793:254:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33793:254:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33793:254:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33793:254:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33793:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33793:254:0;;-1:-1:-1;33793:254:0;;-1:-1:-1;;;;;33793:254:0:i;21708:671::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21708:671:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21708:671:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17702:740::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17702:740:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;17702:740:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;18448:976;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18448:976:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28397:814::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28397:814:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28397:814:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28397:814:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28397:814:0;;-1:-1:-1;28397:814:0;-1:-1:-1;;;;;;28397:814:0;;;;;;;;:::i;20344:673::-;20581:16;20599:14;20562:8;15939:15;15927:8;:27;;15919:65;;;;;-1:-1:-1;;;15919:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15919:65:0;;;;;;;;;;;;;;;20653:196:::1;20683:5;20703:4;20722:9;20746:14;20775:12;20810:4;20830:8;20653:15;:196::i;:::-;20626:223:::0;;-1:-1:-1;20626:223:0;-1:-1:-1;20860:51:0::1;20888:5:::0;20895:2;20626:223;20860:27:::1;:51::i;:::-;20928:4;-1:-1:-1::0;;;;;20922:20:0::1;;20943:9;20922:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20922:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20922:31:0;;;;20964:45;20995:2;20999:9;20964:30;:45::i;:::-;20344:673:::0;;;;;;;;;;:::o;33252:263::-;33405:14;33444:63;33475:8;33485:9;33496:10;33444:30;:63::i;:::-;33437:70;33252:263;-1:-1:-1;;;;33252:263:0:o;27537:854::-;27751:21;27723:8;15939:15;15927:8;:27;;15919:65;;;;;-1:-1:-1;;;15919:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15919:65:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27823:4:0::1;27798:29;:4:::0;;-1:-1:-1;;27803:15:0;;27798:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27798:21:0::1;-1:-1:-1::0;;;;;27798:29:0::1;;27790:72;;;::::0;;-1:-1:-1;;;27790:72:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27790:72:0;;;;;;;;;;;;;::::1;;27883:56;27915:7;27924:8;27934:4;;27883:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27883:31:0::1;::::0;-1:-1:-1;;;27883:56:0:i:1;:::-;27873:66;;27989:12;27958:7;27983:1;27966:7;:14;:18;27958:27;;;;;;;;;;;;;;:43;;27950:100;;;;-1:-1:-1::0;;;27950:100:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28061:142;28107:4;;28112:1;28107:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28107:7:0::1;28116:10;28128:52;28154:7;28163:4;;28168:1;28163:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28163:7:0::1;28172:4;;28177:1;28172:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28172:7:0::1;28128:25;:52::i;:::-;28182:7;28190:1;28182:10;;;;;;;;;;;;;;28061:31;:142::i;:::-;28214:35;28220:7;28229:4;;28214:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28243:4:0::1;::::0;-1:-1:-1;28214:5:0::1;::::0;-1:-1:-1;;28214:35:0:i:1;:::-;28266:4;-1:-1:-1::0;;;;;28260:20:0::1;;28281:7;28306:1;28289:7;:14;:18;28281:27;;;;;;;;;;;;;;28260:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28260:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28260:49:0;;;;28320:63;28351:2;28355:7;28380:1;28363:7;:14;:18;28355:27;;;;;;;;;;;;;;28320:30;:63::i;:::-;27537:854:::0;;;;;;;;;:::o;34055:254::-;34199:21;34245:56;34276:7;34285:9;34296:4;34245:30;:56::i;:::-;34238:63;;34055:254;;;;;:::o;21023:679::-;21329:12;21343;21368;21383:50;21409:7;21418:6;21426;21383:25;:50::i;:::-;21368:65;;21444:10;21457;:33;;21481:9;21457:33;;;-1:-1:-1;;21457:33:0;21501:81;;;-1:-1:-1;;;21501:81:0;;21530:10;21501:81;;;;21550:4;21501:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21444:46;;-1:-1:-1;;;;;;21501:28:0;;;;;:81;;;;;-1:-1:-1;;21501:81:0;;;;;;;;-1:-1:-1;21501:28:0;:81;;;2:2:-1;;;;27:1;24;17:12;2:2;21501:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21501:81:0;;;;21614:80;21630:6;21638;21646:9;21657:10;21669;21681:2;21685:8;21614:15;:80::i;:::-;21593:101;;;;;;;;21023:679;;;;;;;;;;;;;;;;:::o;24740:631::-;24964:21;24945:8;15939:15;15927:8;:27;;15919:65;;;;;-1:-1:-1;;;15919:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15919:65:0;;;;;;;;;;;;;;;25008:56:::1;25040:7;25049:8;25059:4;;25008:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25008:31:0::1;::::0;-1:-1:-1;;;25008:56:0:i:1;:::-;24998:66;;25114:12;25083:7;25108:1;25091:7;:14;:18;25083:27;;;;;;;;;;;;;;:43;;25075:100;;;;-1:-1:-1::0;;;25075:100:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25186:142;25232:4;;25237:1;25232:7;;;;;;25186:142;25339:24;25345:7;25354:4;;25339:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25360:2:0;;-1:-1:-1;25339:5:0::1;::::0;-1:-1:-1;;25339:24:0:i:1;26699:832::-:0;26913:21;26885:8;15939:15;15927:8;:27;;15919:65;;;;;-1:-1:-1;;;15919:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15919:65:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;26985:4:0::1;26960:29;:4:::0;;-1:-1:-1;;26965:15:0;;26960:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;26960:21:0::1;-1:-1:-1::0;;;;;26960:29:0::1;;26952:72;;;::::0;;-1:-1:-1;;;26952:72:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26952:72:0;;;;;;;;;;;;;::::1;;27045:56;27076:7;27085:9;27096:4;;27045:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27045:30:0::1;::::0;-1:-1:-1;;;27045:56:0:i:1;:::-;27035:66;;27134:11;27120:7;27128:1;27120:10;;;;;;;;;;;;;;:25;;27112:78;;;;-1:-1:-1::0;;;27112:78:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23164:720:::0;23482:14;23509:12;23524:47;23550:7;23559:5;23566:4;23524:25;:47::i;:::-;23509:62;;23582:10;23595;:33;;23619:9;23595:33;;;-1:-1:-1;;23595:33:0;23639:81;;;-1:-1:-1;;;23639:81:0;;23668:10;23639:81;;;;23688:4;23639:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23582:46;;-1:-1:-1;;;;;;23639:28:0;;;;;:81;;;;;-1:-1:-1;;23639:81:0;;;;;;;;-1:-1:-1;23639:28:0;:81;;;2:2:-1;;;;27:1;24;17:12;2:2;23639:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23639:81:0;;;;23743:133;23805:5;23812:9;23823:14;23839:12;23853:2;23857:8;23743:47;:133::i;:::-;23731:145;23164:720;-1:-1:-1;;;;;;;;;;;;;23164:720:0:o;30584:716::-;30818:8;15939:15;15927:8;:27;;15919:65;;;;;-1:-1:-1;;;15919:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15919:65:0;;;;;;;;;;;;;;;30839:140:::1;30885:4;;30890:1;30885:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30885:7:0::1;30894:10;30906:52;30932:7;30941:4;;30946:1;30941:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30941:7:0::1;30950:4;;30955:1;30950:7;;;;;;30906:52;30960:8;30839:31;:140::i;:::-;30990:18;31018:4:::0;;-1:-1:-1;;31023:15:0;;31018:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31018:21:0::1;-1:-1:-1::0;;;;;31011:39:0::1;;31051:2;31011:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31011:43:0::1;-1:-1:-1::0;;;;;31011:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31011:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31011:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31011:43:0;31065:44:::1;::::0;;31011:43:::1;31065:44:::0;;::::1;::::0;;;;;;;;;;;31011:43;;-1:-1:-1;31065:44:0::1;::::0;;;31100:4;;;;;;31065:44;::::1;::::0;31100:4;;31065:44;31100:4;31065:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31106:2:0;;-1:-1:-1;31065:34:0::1;::::0;-1:-1:-1;;31065:44:0:i:1;:::-;31208:12:::0;31142:62:::1;31190:13:::0;31149:4;;-1:-1:-1;;31154:15:0;;31149:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31149:21:0::1;-1:-1:-1::0;;;;;31142:39:0::1;;31182:2;31142:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31142:43:0::1;-1:-1:-1::0;;;;;31142:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31142:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31142:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31142:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;31120:172;;;;-1:-1:-1::0;;;31120:172:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15995:1;30584:716:::0;;;;;;;:::o;32165:846::-;32432:8;15939:15;15927:8;:27;;15919:65;;;;;-1:-1:-1;;;15919:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15919:65:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32491:4:0::1;32466:29;:4:::0;;-1:-1:-1;;32471:15:0;;32466:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32466:21:0::1;-1:-1:-1::0;;;;;32466:29:0::1;;32458:72;;;::::0;;-1:-1:-1;;;32458:72:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32458:72:0;;;;;;;;;;;;;::::1;;32541:140;32587:4;;32592:1;32587:7;;;;;;32541:140;32692:55;32727:4;;32692:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32741:4:0::1;::::0;-1:-1:-1;32692:34:0::1;::::0;-1:-1:-1;;32692:55:0:i:1;:::-;32775:37;::::0;;-1:-1:-1;;;32775:37:0;;32806:4:::1;32775:37;::::0;::::1;::::0;;;32758:14:::1;::::0;-1:-1:-1;;;;;32782:4:0::1;32775:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;32775:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32775:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32775:37:0;;-1:-1:-1;32831:25:0;;::::1;;32823:82;;;;-1:-1:-1::0;;;32823:82:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32922:4;-1:-1:-1::0;;;;;32916:20:0::1;;32937:9;32916:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32916:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32916:31:0;;;;32958:45;32989:2;32993:9;32958:30;:45::i;25992:701::-:0;26208:21;26180:8;15939:15;15927:8;:27;;15919:65;;;;;-1:-1:-1;;;15919:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15919:65:0;;;;;;;;;;;;;;;26266:4:::1;-1:-1:-1::0;;;;;26255:15:0::1;:4;;26260:1;26255:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26255:7:0::1;-1:-1:-1::0;;;;;26255:15:0::1;;26247:58;;;::::0;;-1:-1:-1;;;26247:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26247:58:0;;;;;;;;;;;;;::::1;;26326:57;26358:7;26367:9;26378:4;;26326:57;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26326:31:0::1;::::0;-1:-1:-1;;;26326:57:0:i:1;:::-;26316:67;;26433:12;26402:7;26427:1;26410:7;:14;:18;26402:27;;;;;;;;;;;;;;:43;;26394:100;;;;-1:-1:-1::0;;;26394:100:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26511:4;-1:-1:-1::0;;;;;26505:19:0::1;;26532:7;26540:1;26532:10;;;;;;;;;;;;;;26505:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26505:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26505:40:0;;;;;26569:4;-1:-1:-1::0;;;;;26563:20:0::1;;26584:52;26610:7;26619:4;;26624:1;26619:7;;;;;;26584:52;26638:7;26646:1;26638:10;;;;;;;;;;;;;;26563:86;;;;;;;;;;;;;-1:-1:-1::0;;;;;26563:86:0::1;-1:-1:-1::0;;;;;26563:86:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26563:86:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26563:86:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26563:86:0;26556:94:::1;;;;26661:24;26667:7;26676:4;;26661:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26682:2:0;;-1:-1:-1;26661:5:0::1;::::0;-1:-1:-1;;26661:24:0:i:1;:::-;25992:701:::0;;;;;;;;:::o;33523:262::-;33676:13;33714:63;33744:9;33755;33766:10;33714:29;:63::i;25377:609::-;25601:21;25582:8;15939:15;15927:8;:27;;15919:65;;;;;-1:-1:-1;;;15919:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15919:65:0;;;;;;;;;;;;;;;25645:56:::1;25676:7;25685:9;25696:4;;25645:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25645:30:0::1;::::0;-1:-1:-1;;;25645:56:0:i:1;:::-;25635:66;;25734:11;25720:7;25728:1;25720:10;;;;;;;;;;;;;;:25;;25712:78;;;;-1:-1:-1::0;;;25712:78:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15830:38:::0;;;:::o;33055:189::-;33152:12;33184:52;33208:7;33217:8;33227;33184:23;:52::i;22458:700::-;22724:14;22705:8;15939:15;15927:8;:27;;15919:65;;;;;-1:-1:-1;;;15919:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15919:65:0;;;;;;;;;;;;;;;22767:196:::1;22797:5;22817:4;22836:9;22860:14;22889:12;22924:4;22944:8;22767:15;:196::i;:::-;23013:38;::::0;;-1:-1:-1;;;23013:38:0;;23045:4:::1;23013:38;::::0;::::1;::::0;;;22751:212;;-1:-1:-1;22974:78:0::1;::::0;-1:-1:-1;23002:5:0;;23009:2;;-1:-1:-1;;;;;23013:23:0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;23013:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23013:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23013:38:0;22974:27:::1;:78::i;:::-;23069:4;-1:-1:-1::0;;;;;23063:20:0::1;;23084:9;23063:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23063:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23063:31:0;;;;23105:45;23136:2;23140:9;23105:30;:45::i;31306:853::-:0;31566:8;15939:15;15927:8;:27;;15919:65;;;;;-1:-1:-1;;;15919:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15919:65:0;;;;;;;;;;;;;;;31611:4:::1;-1:-1:-1::0;;;;;31600:15:0::1;:4;;31605:1;31600:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31600:7:0::1;-1:-1:-1::0;;;;;31600:15:0::1;;31592:58;;;::::0;;-1:-1:-1;;;31592:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31592:58:0;;;;;;;;;;;;;::::1;;31661:13;31677:9;31661:25;;31703:4;-1:-1:-1::0;;;;;31697:19:0::1;;31724:8;31697:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31697:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31697:38:0;;;;;31759:4;-1:-1:-1::0;;;;;31753:20:0::1;;31774:52;31800:7;31809:4;;31814:1;31809:7;;;;;;31774:52;31828:8;31753:84;;;;;;;;;;;;;-1:-1:-1::0;;;;;31753:84:0::1;-1:-1:-1::0;;;;;31753:84:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31753:84:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31753:84:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31753:84:0;31746:92:::1;;;;31849:18;31877:4:::0;;-1:-1:-1;;31882:15:0;;31877:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31877:21:0::1;-1:-1:-1::0;;;;;31870:39:0::1;;31910:2;31870:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31870:43:0::1;-1:-1:-1::0;;;;;31870:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31870:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31870:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31870:43:0;31924:44:::1;::::0;;31870:43:::1;31924:44:::0;;::::1;::::0;;;;;;;;;;;31870:43;;-1:-1:-1;31924:44:0::1;::::0;;;31959:4;;;;;;31924:44;::::1;::::0;31959:4;;31924:44;31959:4;31924:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31965:2:0;;-1:-1:-1;31924:34:0::1;::::0;-1:-1:-1;;31924:44:0:i:1;:::-;32067:12:::0;32001:62:::1;32049:13:::0;32008:4;;-1:-1:-1;;32013:15:0;;32008:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32008:21:0::1;-1:-1:-1::0;;;;;32001:39:0::1;;32041:2;32001:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32001:43:0::1;-1:-1:-1::0;;;;;32001:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;19467:871:0::0;19721:12;19735;19702:8;15939:15;15927:8;:27;;15919:65;;;;;-1:-1:-1;;;15919:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15919:65:0;;;;;;;;;;;;;;;19760:12:::1;19775:50;19801:7;19810:6;19818;19775:25;:50::i;:::-;19836:63;::::0;;-1:-1:-1;;;19836:63:0;;19871:10:::1;19836:63;::::0;::::1;::::0;-1:-1:-1;;;;;19836:34:0;::::1;:63:::0;;;;;;;;;;;;;;19760:65;;-1:-1:-1;19836:34:0;;::::1;::::0;:63;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;19836:34:0;:63;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19836:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19836:63:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;19967:30:0::1;::::0;;-1:-1:-1;;;19967:30:0;;-1:-1:-1;;;;;19967:30:0;;::::1;;::::0;::::1;::::0;;;19937:12:::1;::::0;;;19967:26;;::::1;::::0;::::1;::::0;:30;;;;;;;;;;;19937:12;19967:26;:30;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19967:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19967:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19967:30:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;19967:30:0;-1:-1:-1;20009:14:0::1;20028:44;20057:6:::0;20065;20028:28:::1;:44::i;:::-;20008:64;;;20114:6;-1:-1:-1::0;;;;;20104:16:0::1;:6;-1:-1:-1::0;;;;;20104:16:0::1;;:58;;20145:7;20154;20104:58;;;20124:7;20133;20104:58;20083:79:::0;;-1:-1:-1;20083:79:0;-1:-1:-1;20181:21:0;;::::1;;20173:73;;;;-1:-1:-1::0;;;20173:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20276:10;20265:7;:21;;20257:73;;;;-1:-1:-1::0;;;20257:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15995:1;;;;19467:871:::0;;;;;;;;;;;:::o;15782:41::-;;;:::o;33793:254::-;33937:21;33983:56;34015:7;34024:8;34034:4;33983:31;:56::i;21708:671::-;21997:16;22015:14;22042:12;22057:47;22083:7;22092:5;22099:4;22057:25;:47::i;:::-;22042:62;;22115:10;22128;:33;;22152:9;22128:33;;;-1:-1:-1;;22128:33:0;22172:81;;;-1:-1:-1;;;22172:81:0;;22201:10;22172:81;;;;22221:4;22172:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22115:46;;-1:-1:-1;;;;;;22172:28:0;;;;;:81;;;;;-1:-1:-1;;22172:81:0;;;;;;;;-1:-1:-1;22172:28:0;:81;;;2:2:-1;;;;27:1;24;17:12;2:2;22172:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22172:81:0;;;;22291:80;22310:5;22317:9;22328:14;22344:12;22358:2;22362:8;22291:18;:80::i;:::-;22264:107;;;;-1:-1:-1;21708:671:0;-1:-1:-1;;;;;;;;;;;;;21708:671:0:o;17702:740::-;17990:12;18004;18018:14;17971:8;15939:15;15927:8;:27;;15919:65;;;;;-1:-1:-1;;;15919:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15919:65:0;;;;;;;;;;;;;;;18066:85:::1;18080:6;18088;18096:14;18112;18128:10;18140;18066:13;:85::i;:::-;18045:106:::0;;-1:-1:-1;18045:106:0;-1:-1:-1;18162:12:0::1;18177:50;18203:7;18212:6:::0;18220;18177:25:::1;:50::i;:::-;18162:65;;18238:66;18270:6;18278:10;18290:4;18296:7;18238:31;:66::i;:::-;18315;18347:6;18355:10;18367:4;18373:7;18315:31;:66::i;:::-;18420:4;-1:-1:-1::0;;;;;18404:26:0::1;;18431:2;18404:30;;;;;;;;;;;;;-1:-1:-1::0;;;;;18404:30:0::1;-1:-1:-1::0;;;;;18404:30:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18404:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18404:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18404:30:0;17702:740;;;;-1:-1:-1;18404:30:0;;-1:-1:-1;17702:740:0;;-1:-1:-1;;;;;;;;;17702:740:0:o;18448:976::-;18701:16;18719:14;18735;18682:8;15939:15;15927:8;:27;;15919:65;;;;;-1:-1:-1;;;15919:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15919:65:0;;;;;;;;;;;;;;;18789:176:::1;18817:5;18837:4;18856:18;18889:9;18913:14;18942:12;18789:13;:176::i;:::-;18762:203:::0;;-1:-1:-1;18762:203:0;-1:-1:-1;18976:12:0::1;18991:47;19017:7;19026:5:::0;19033:4:::1;18991:25;:47::i;:::-;18976:62;;19049:69;19081:5;19088:10;19100:4;19106:11;19049:31;:69::i;:::-;19135:4;-1:-1:-1::0;;;;;19129:19:0::1;;19156:9;19129:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19129:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19129:39:0;;;;;19192:4;-1:-1:-1::0;;;;;19186:20:0::1;;19207:4;19213:9;19186:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;19186:37:0::1;-1:-1:-1::0;;;;;19186:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19186:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19186:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19186:37:0;19179:45:::1;;;;19263:4;-1:-1:-1::0;;;;;19247:26:0::1;;19274:2;19247:30;;;;;;;;;;;;;-1:-1:-1::0;;;;;19247:30:0::1;-1:-1:-1::0;;;;;19247:30:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19247:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19247:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19247:30:0;;-1:-1:-1;19328:9:0::1;:21:::0;-1:-1:-1;19324:92:0::1;;;19351:65;19382:10;19406:9;19394;:21;19351:30;:65::i;:::-;15995:1;18448:976:::0;;;;;;;;;;;:::o;28397:814::-;28610:21;28582:8;15939:15;15927:8;:27;;15919:65;;;;;-1:-1:-1;;;15919:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15919:65:0;;;;;;;;;;;;;;;28668:4:::1;-1:-1:-1::0;;;;;28657:15:0::1;:4;;28662:1;28657:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28657:7:0::1;-1:-1:-1::0;;;;;28657:15:0::1;;28649:58;;;::::0;;-1:-1:-1;;;28649:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28649:58:0;;;;;;;;;;;;;::::1;;28728:56;28759:7;28768:9;28779:4;;28728:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28728:30:0::1;::::0;-1:-1:-1;;;28728:56:0:i:1;:::-;28718:66;;28817:9;28803:7;28811:1;28803:10;;;;;;;;;;;;;;:23;;28795:76;;;;-1:-1:-1::0;;;28795:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28888:4;-1:-1:-1::0;;;;;28882:19:0::1;;28909:7;28917:1;28909:10;;;;;;;;;;;;;;28882:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28882:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28882:40:0;;;;;28946:4;-1:-1:-1::0;;;;;28940:20:0::1;;28961:52;28987:7;28996:4;;29001:1;28996:7;;;;;;28961:52;29015:7;29023:1;29015:10;;;;;;;;;;;;;;28940:86;;;;;;;;;;;;;-1:-1:-1::0;;;;;28940:86:0::1;-1:-1:-1::0;;;;;28940:86:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28940:86:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28940:86:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28940:86:0;28933:94:::1;;;;29038:24;29044:7;29053:4;;29038:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29059:2:0;;-1:-1:-1;29038:5:0::1;::::0;-1:-1:-1;;29038:24:0:i:1;:::-;29125:7;29133:1;29125:10;;;;;;;;;;;;;;29113:9;:22;29109:94;;;29137:66;29168:10;29192:7;29200:1;29192:10;;;;;;;;;;;;;;29180:9;:22;29137:30;:66::i;1089:361::-:0;1284:45;;;-1:-1:-1;;;;;1284:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1284:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1273:57:0;;;;1238:12;;1252:17;;1273:10;;;;1284:45;1273:57;;;25:18:-1;1273:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1273:57:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1237:93:0;;;;1349:7;:57;;;;-1:-1:-1;1361:11:0;;:16;;:44;;;1392:4;1381:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1381:24:0;1361:44;1341:101;;;;;-1:-1:-1;;;1341:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1089:361;;;;;:::o;1868:195::-;1976:12;;;1938;1976;;;;;;;;;-1:-1:-1;;;;;1955:7:0;;;1969:5;;1955:34;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1955:34:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1937:52:0;;;2008:7;2000:55;;;;-1:-1:-1;;;2000:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1868:195;;;:::o;4188:519::-;4281:14;4327:1;4316:8;:12;4308:69;;;;-1:-1:-1;;;4308:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4408:1;4396:9;:13;:31;;;;;4426:1;4413:10;:14;4396:31;4388:85;;;;-1:-1:-1;;;4388:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4484:20;4507:17;:8;4520:3;4507:17;:12;:17;:::i;:::-;4484:40;-1:-1:-1;4535:14:0;4552:31;4484:40;4572:10;4552:31;:19;:31;:::i;:::-;4535:48;-1:-1:-1;4594:16:0;4613:40;4637:15;4613:19;:9;4627:4;4613:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;4594:59;;4688:11;4676:9;:23;;;;;;;4188:519;-1:-1:-1;;;;;;;4188:519:0:o;5384:512::-;5485:21;5542:1;5527:4;:11;:16;;5519:60;;;;;-1:-1:-1;;;5519:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5611:4;:11;5600:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;5600:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;5600:23:0;;5590:33;;5647:8;5634:7;5642:1;5634:10;;;;;;;;;;;;;:21;;;;;5671:6;5666:223;5697:1;5683:4;:11;:15;5679:1;:19;5666:223;;;5721:14;5737:15;5756:42;5768:7;5777:4;5782:1;5777:7;;;;;;;;;;;;;;5786:4;5791:1;5795;5791:5;5786:11;;;;;;;;;;;;;;5756;:42::i;:::-;5720:78;;;;5830:47;5843:7;5851:1;5843:10;;;;;;;;;;;;;;5855:9;5866:10;5830:12;:47::i;:::-;5813:7;5821:1;5825;5821:5;5813:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;5700:3:0;;5666:223;;;;5384:512;;;;;:::o;2702:478::-;2791:12;2817:14;2833;2851:26;2862:6;2870;2851:10;:26::i;:::-;3015:32;;;-1:-1:-1;;3015:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;3015:32:0;;;;;3005:43;;;;;;-1:-1:-1;;;;;;2918:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2918:251:0;;;;;;;2908:262;;;;;;;;;2702:478;-1:-1:-1;;;;;2702:478:0:o;1458:402::-;1683:51;;;-1:-1:-1;;;;;1683:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1683:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1672:63:0;;;;1637:12;;1651:17;;1672:10;;;;1683:51;1672:63;;;25:18:-1;1672:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1672:63:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1636:99:0;;;;1754:7;:57;;;;-1:-1:-1;1766:11:0;;:16;;:44;;;1797:4;1786:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1786:24:0;1766:44;1746:106;;;;-1:-1:-1;;;1746:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1458:402;;;;;;:::o;23995:739::-;24102:6;24097:630;24128:1;24114:4;:11;:15;24110:1;:19;24097:630;;;24152:13;24167:14;24186:4;24191:1;24186:7;;;;;;;;;;;;;;24195:4;24200:1;24204;24200:5;24195:11;;;;;;;;;;;;;;24151:56;;;;24223:14;24242:43;24271:5;24278:6;24242:28;:43::i;:::-;24222:63;;;24300:14;24317:7;24325:1;24329;24325:5;24317:14;;;;;;;;;;;;;;24300:31;;24347:15;24364;24392:6;-1:-1:-1;;;;;24383:15:0;:5;-1:-1:-1;;;;;24383:15:0;;:61;;24425:9;24441:1;24383:61;;;24407:1;24411:9;24383:61;24346:98;;;;24459:10;24490:1;24476:4;:11;:15;24472:1;:19;:83;;24552:3;24472:83;;;24494:55;24520:7;24529:6;24537:4;24542:1;24546;24542:5;24537:11;;;;;;;;;;;;;;24494:25;:55::i;:::-;24459:96;;24586:49;24612:7;24621:5;24628:6;24586:25;:49::i;:::-;-1:-1:-1;;;;;24570:71:0;;24660:10;24672;24684:2;24698:1;24688:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;24688:12:0;87:42:-1;143:17;;-1:-1;24688:12:0;;24570:145;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24570:145:0;-1:-1:-1;;;;;24570:145:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;24570:145:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24570:145:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;24131:3:0;;;;;-1:-1:-1;24097:630:0;;-1:-1:-1;;;;;;;;24097:630:0;;;23995:739;;;:::o;5977:533::-;6078:21;6135:1;6120:4;:11;:16;;6112:60;;;;;-1:-1:-1;;;6112:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;6204:4;:11;6193:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;6193:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;6193:23:0;;6183:33;;6257:9;6227:7;6252:1;6235:7;:14;:18;6227:27;;;;;;;;;;;;;;;;;:39;6291:11;;-1:-1:-1;;6291:15:0;6277:226;6308:5;;6277:226;;6336:14;6352:15;6371:42;6383:7;6392:4;6401:1;6397;:5;6392:11;;;;;;;;;;;;;;6405:4;6410:1;6405:7;;;;;;;6371:42;6335:78;;;;6445:46;6457:7;6465:1;6457:10;;;;;;;;;;;;;;6469:9;6480:10;6445:11;:46::i;:::-;6428:7;6440:1;6436;:5;6428:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;6315:3:0;6277:226;;29358:1220;29471:6;29466:1105;29497:1;29483:4;:11;:15;29479:1;:19;29466:1105;;;29521:13;29536:14;29555:4;29560:1;29555:7;;;;;;;;;;;;;;29564:4;29569:1;29573;29569:5;29564:11;;;;;;;;;;;;;;29520:56;;;;29592:14;29611:43;29640:5;29647:6;29611:28;:43::i;:::-;29591:63;;;29669:20;29708:49;29734:7;29743:5;29750:6;29708:25;:49::i;:::-;29669:89;;29773:16;29804:17;29892:13;29907;29925:4;-1:-1:-1;;;;;29925:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29925:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29925:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29925:18:0;;;;;;;-1:-1:-1;;;;;29891:52:0;;;;-1:-1:-1;29891:52:0;;-1:-1:-1;29959:17:0;;-1:-1:-1;;;;;30000:15:0;;;;;;;:61;;30042:8;30052;30000:61;;;30019:8;30029;30000:61;29958:103;;;;30090:56;30133:12;30097:5;-1:-1:-1;;;;;30090:23:0;;30122:4;30090:38;;;;;;;;;;;;;-1:-1:-1;;;;;30090:38:0;-1:-1:-1;;;;;30090:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;30090:56:0;30076:70;;30176:72;30207:11;30220:12;30234:13;30176:30;:72::i;:::-;30161:87;;29466:1105;;;;30279:15;30296;30324:6;-1:-1:-1;;;;;30315:15:0;:5;-1:-1:-1;;;;;30315:15:0;;:67;;30360:12;30379:1;30315:67;;;30339:1;30343:12;30315:67;30278:104;;;;30397:10;30428:1;30414:4;:11;:15;30410:1;:19;:83;;30490:3;30410:83;;;30432:55;30458:7;30467:6;30475:4;30480:1;30484;30480:5;30475:11;;;;;;;30432:55;30546:12;;;30556:1;30546:12;;;;;;;;;;-1:-1:-1;;;30508:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;30508:51:0;;;;;;;;;;;;;;;;;;;;;;30397:96;;-1:-1:-1;30508:9:0;;;;;;30518:10;;30530;;30397:96;;30546:12;;30508:51;;;;;;;;30546:12;;30508:51;;;;30546:12;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;30508:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30508:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29500:3:0;;;;;-1:-1:-1;29466:1105:0;;-1:-1:-1;;;;;;;;;;29466:1105:0;295:129;379:5;;;374:16;;;;366:50;;;;;-1:-1:-1;;;366:50:0;;;;;;;;;;;;-1:-1:-1;;;366:50:0;;;;;;;;;;;;;;4828:474;4921:13;4967:1;4955:9;:13;4947:71;;;;-1:-1:-1;;;4947:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5049:1;5037:9;:13;:31;;;;;5067:1;5054:10;:14;5037:31;5029:85;;;;-1:-1:-1;;;5029:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5125:14;5142:34;5171:4;5142:24;:9;5156;5142:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;5125:51;-1:-1:-1;5187:16:0;5206:34;5236:3;5206:25;:10;5221:9;5206:25;:14;:25;:::i;:34::-;5187:53;;5262:32;5292:1;5275:11;5263:9;:23;;;;;;;5262:32;:29;:32;:::i;:::-;5251:43;4828:474;-1:-1:-1;;;;;;4828:474:0:o;3743:323::-;3825:12;3868:1;3858:7;:11;3850:62;;;;-1:-1:-1;;;3850:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3942:1;3931:8;:12;:28;;;;;3958:1;3947:8;:12;3931:28;3923:82;;;;-1:-1:-1;;;3923:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4050:8;4026:21;:7;4038:8;4026:21;:11;:21;:::i;:::-;:32;;;;;;;3743:323;-1:-1:-1;;;;3743:323:0:o;2259:351::-;2334:14;2350;2395:6;-1:-1:-1;;;;;2385:16:0;:6;-1:-1:-1;;;;;2385:16:0;;;2377:67;;;;-1:-1:-1;;;2377:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2483:6;-1:-1:-1;;;;;2474:15:0;:6;-1:-1:-1;;;;;2474:15:0;;:53;;2512:6;2520;2474:53;;;2493:6;2501;2474:53;2455:72;;-1:-1:-1;2455:72:0;-1:-1:-1;;;;;;2546:20:0;;2538:64;;;;;-1:-1:-1;;;2538:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;2259:351;;;;;:::o;16299:1397::-;16612:51;;;-1:-1:-1;;;16612:51:0;;-1:-1:-1;;;;;16612:51:0;;;;;;;;;;;;;;;;16517:12;;;;;;16631:7;16612:35;;;;;;:51;;;;;;;;;;;;;;;:35;:51;;;2:2:-1;;;;27:1;24;17:12;2:2;16612:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16612:51:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16612:51:0;-1:-1:-1;;;;;16612:65:0;;16608:152;;;16694:54;;;-1:-1:-1;;;16694:54:0;;-1:-1:-1;;;;;16694:54:0;;;;;;;;;;;;;;;;16713:7;16694:38;;;;;;:54;;;;;;;;;;;;;;;-1:-1:-1;16694:38:0;:54;;;2:2:-1;;;;27:1;24;17:12;2:2;16694:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16694:54:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;16608:152:0;16771:13;16786;16803:54;16833:7;16842:6;16850;16803:29;:54::i;:::-;16770:87;;;;16872:8;16884:1;16872:13;:30;;;;-1:-1:-1;16889:13:0;;16872:30;16868:821;;;16941:14;;-1:-1:-1;16957:14:0;;-1:-1:-1;16868:821:0;;;17005:19;17027:59;17051:14;17067:8;17077;17027:23;:59::i;:::-;17005:81;;17123:14;17105;:32;17101:577;;17184:10;17166:14;:28;;17158:80;;;;-1:-1:-1;;;17158:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17279:14;;-1:-1:-1;17295:14:0;-1:-1:-1;17295:14:0;17101:577;;;17351:19;17373:59;17397:14;17413:8;17423;17373:23;:59::i;:::-;17351:81;;17476:14;17458;:32;;17451:40;;;;17536:10;17518:14;:28;;17510:80;;;;-1:-1:-1;;;17510:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17631:14;-1:-1:-1;17647:14:0;;-1:-1:-1;17101:577:0;16868:821;;16299:1397;;;;;;;;;;;:::o;432:142::-;484:6;511;;;:30;;-1:-1:-1;;526:5:0;;;540:1;535;526:5;535:1;521:15;;;;;:20;511:30;503:63;;;;;-1:-1:-1;;;503:63:0;;;;;;;;;;;;-1:-1:-1;;;503:63:0;;;;;;;;;;;;;;159:128;243:5;;;238:16;;;;230:49;;;;;-1:-1:-1;;;230:49:0;;;;;;;;;;;;-1:-1:-1;;;230:49:0;;;;;;;;;;;;;;3238:392;3331:13;3346;3373:14;3392:26;3403:6;3411;3392:10;:26::i;:::-;3372:46;;;3430:13;3445;3479:32;3487:7;3496:6;3504;3479:7;:32::i;:::-;-1:-1:-1;;;;;3463:61:0;;:63;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;3463:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3463:63:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;3463:63:0;;;;;;;-1:-1:-1;;;;;3429:97:0;;;;-1:-1:-1;3429:97:0;;-1:-1:-1;;;;;;3560:16:0;;;;;;;:62;;3603:8;3613;3560:62;;;3580:8;3590;3560:62;3537:85;;;;-1:-1:-1;3238:392:0;-1:-1:-1;;;;;;;3238:392:0:o

Swarm Source

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