Contract 0xbd67d157502a23309db761c41965600c2ec788b2

 
Ad
Ad
Txn Hash
Block
From
To
Value [Txn Fee]
0xe8da38601dc1ed9b8166734aa0511ea98cbcb26f9a78d3f3c6a9aff6195ffa8f(pending)2021-03-02 17:45:421 sec ago0xa39e90bd94bc866307d59fe5103f8f2eeb98082e IN 0xbd67d157502a23309db761c41965600c2ec788b20.039445846077664706 BNB(Pending)
0xa7a9e23ac6571648b58be9b21c57cdb89d4182aabf126b7494e37a90dff101a753359492021-03-02 17:45:376 secs ago0xc40f081cb5e0b504bbb1bc3261084174882e47da IN  Just Liquidity: Router0.433337 BNB0.00116657
0x8fb6a5750dbd0efecc709563617ee1a1ea70d3c5c0a5eeaaafd6e0150e6098da53359492021-03-02 17:45:376 secs ago0x19d195392a17595a9166bc8586d7d209d1047970 IN  Just Liquidity: Router0 BNB0.00157207
0x489cfa3d7abd5c0887b75d31a2b59843ad6e8e861c1f94352eb2ef1cebad86c153359492021-03-02 17:45:376 secs ago0x535a56c27a56d647f485b09ab00f162950873de4 IN  Just Liquidity: Router0 BNB0.001051127
0x042c3a3fc11aba7aa422144ad9f0abc87b4f1c95a42ec3e78521d56d6b7930db53359492021-03-02 17:45:376 secs ago0x12473fcda38a384296f7e728178ade563c39d70b IN  Just Liquidity: Router0 BNB0.00256938
0x79aa058049be38507d8541e16bacfa68ed8c50902488f9d76021451421e16b5853359482021-03-02 17:45:349 secs ago0x9b7874a1eb2a06059084a3886899005f68353926 IN  Just Liquidity: Router25.097044382049208 BNB0.00177785
0xa5ca652d2dc575a9f767428e274b6764eb2cd212f4dba4116b00763a0fda2d9153359472021-03-02 17:45:3112 secs ago0xfec832830d82c88ddc50428b957fc496b47ef54b IN  Just Liquidity: Router0 BNB0.001252944
0xe11c800647099cd1ae1747863d3681bb34adc5adc63a1a0400d12642a798c58553359472021-03-02 17:45:3112 secs ago0x2937edfed59ca80f40bd94e7232595c972453d48 IN  Just Liquidity: Router0 BNB0.00256236
0x48f8684480d621130231e18dbb3cf25b0dd6ef421c221ffee122024fa83245fd53359472021-03-02 17:45:3112 secs ago0x6f8b2b5e416cfae983c375244e353f2d0f743da6 IN  Just Liquidity: Router0 BNB0.0025689
0xec0c5869b54bd8581cd0f21ecdbbc061fd4fab9cea0667d2d9f37221395024c353359472021-03-02 17:45:3112 secs ago0xbc707179790486f7f13ca9be80a6c435d6893d84 IN  Just Liquidity: Router0 BNB0.00221462
0xd27c0aee988f40e6ad1c6e8ad55968eed99c0f1f5dbf54a5f8ec9ecce1c5eebd53359472021-03-02 17:45:3112 secs ago0x10f675ffd5673c6d824afe0f694c735be6b25e35 IN  Just Liquidity: Router0 BNB0.00257644
0x00d9fb1246d454ab38272401bd545ee412e9455881c62bd4dced3b581f67c37a53359462021-03-02 17:45:2815 secs ago0xd5153662441e1613fd6808613ac5ae1310533d76 IN  Just Liquidity: Router0 BNB0.00128469
0x809ad3905612c7a71bd33455f2e784c7c9ba192f63c5f4b846999fa4589ea10f53359442021-03-02 17:45:2221 secs ago0xbc707179790486f7f13ca9be80a6c435d6893d84 IN  Just Liquidity: Router0 BNB0.00267944
0xd63fe0abb1bab60ac5eef5d2ab38c0051a668db226456fe98b3e3e400abc0f2b53359432021-03-02 17:45:1924 secs ago0x83cf7d8c861c7222bb8dbf6b2fe561353ab34703 IN  Just Liquidity: Router0 BNB0.00380628
0x1901ab85904c808ef68c8cdae5cb64520e5e9f9693b0a0488841d5a98527586c53359422021-03-02 17:45:1627 secs ago0x2937edfed59ca80f40bd94e7232595c972453d48 IN  Just Liquidity: Router0 BNB0.00252884
0x61eb06bd35c66ae7cb8aaaecc6234c7d535d8df81db6999844bebc1f9f182f6653359412021-03-02 17:45:1330 secs ago0xc40f081cb5e0b504bbb1bc3261084174882e47da IN  Just Liquidity: Router0 BNB0.00128926
0x4ec8d9700b923ae12f6b55b3edac3f34512b34454cc890e65ab2793a9257af1853359412021-03-02 17:45:1330 secs ago0x2b436a47cbab08106464eed7e924d0509ece0730 IN  Just Liquidity: Router0 BNB0.00268786
0xf1ddebd27a1d669b8d02671898d41a9610aeafd22fa5c8bf0c521491c79af62753359402021-03-02 17:45:1033 secs ago0x8a35e304a9c5590e8f1b3cbb3c485cbc3ff047d2 IN  Just Liquidity: Router0.158221 BNB0.00220366
0xf6897c19631f56326598b90334aab315ee18f4927d3ad0d91249e78d65a6cdd053359392021-03-02 17:45:0736 secs ago0xca8028c9f1498439b99cdc49d7023fa008f75ec1 IN  Just Liquidity: Router0 BNB0.00133442
0x01ae35589d85f719cba611bce30bbbf9b835b15752b76e971bc3cefb32a8563053359392021-03-02 17:45:0736 secs ago0x12473fcda38a384296f7e728178ade563c39d70b IN  Just Liquidity: Router0 BNB0.00232618
0xe39aa6a009a9b7d96588e24987e5d1ff3ede22ef3b042c3b409ac961bb97ef8153359392021-03-02 17:45:0736 secs ago0x12a70453f00aea7b3f9b4daa66051a29db343231 IN  Just Liquidity: Router0 BNB0.00257476
0xcc502e57f7d049d0cdeb98a2fb34c6ace6e3063155d33f4f2c15f636911eedc653359392021-03-02 17:45:0736 secs ago0xe741f82de452743acbb7d3fe80d887d13cb36c61 IN  Just Liquidity: Router0 BNB0.00256962
0xd1b3a6b8bddd3bd5203020d0d5f22d401282f518f3318e70c79e1046e14a0a3753359392021-03-02 17:45:0736 secs ago0xa9e104318277f095b9c293ca5dd75202782a798b IN  Just Liquidity: Router0 BNB0.00232918
0xe534894ad065f2145f7fe2a89af8a99d9b9bf3d78c8e8e6a16716b70f0e66d9c53359382021-03-02 17:45:0439 secs ago0x35c11d071f13b7eb59b2a493177e8014e5eab83d IN  Just Liquidity: Router0 BNB0.00179104
0x3dbb061da2ba776ad75a7a0c0b4a795cdfa97e5263f62a43ad6fb416f5282e5b53359382021-03-02 17:45:0439 secs ago0x9b7874a1eb2a06059084a3886899005f68353926 IN  Just Liquidity: Router0 BNB0.0012881
[ Download CSV Export 

OVERVIEW

JulSwap offers the same trading engine and analytics as Uniswap and some additional features from Sushiswap.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xa7a9e23ac6571648b58be9b21c57cdb89d4182aabf126b7494e37a90dff101a753359492021-03-02 17:45:376 secs ago Just Liquidity: Router 0x629009974f651378a2286ced36f16d43fa46e9e30 BNB
0xa7a9e23ac6571648b58be9b21c57cdb89d4182aabf126b7494e37a90dff101a753359492021-03-02 17:45:376 secs ago Just Liquidity: Router Binance: WBNB Token0 BNB
0xa7a9e23ac6571648b58be9b21c57cdb89d4182aabf126b7494e37a90dff101a753359492021-03-02 17:45:376 secs ago Just Liquidity: Router Binance: WBNB Token0.433337 BNB
0xa7a9e23ac6571648b58be9b21c57cdb89d4182aabf126b7494e37a90dff101a753359492021-03-02 17:45:376 secs ago Just Liquidity: Router 0x629009974f651378a2286ced36f16d43fa46e9e30 BNB
0x8fb6a5750dbd0efecc709563617ee1a1ea70d3c5c0a5eeaaafd6e0150e6098da53359492021-03-02 17:45:376 secs ago Just Liquidity: Router 0x746768bcead5ae77539e641aba9cdd14807b4a120 BNB
0x8fb6a5750dbd0efecc709563617ee1a1ea70d3c5c0a5eeaaafd6e0150e6098da53359492021-03-02 17:45:376 secs ago Just Liquidity: Router 0xc7b562725080dfceaea155cfa297b195c06a86cb0 BNB
0x8fb6a5750dbd0efecc709563617ee1a1ea70d3c5c0a5eeaaafd6e0150e6098da53359492021-03-02 17:45:376 secs ago Just Liquidity: Router Just Liquidity: JULb Token0 BNB
0x8fb6a5750dbd0efecc709563617ee1a1ea70d3c5c0a5eeaaafd6e0150e6098da53359492021-03-02 17:45:376 secs ago Just Liquidity: Router 0x746768bcead5ae77539e641aba9cdd14807b4a120 BNB
0x8fb6a5750dbd0efecc709563617ee1a1ea70d3c5c0a5eeaaafd6e0150e6098da53359492021-03-02 17:45:376 secs ago Just Liquidity: Router 0xc7b562725080dfceaea155cfa297b195c06a86cb0 BNB
0x489cfa3d7abd5c0887b75d31a2b59843ad6e8e861c1f94352eb2ef1cebad86c153359492021-03-02 17:45:376 secs ago Just Liquidity: Router 0xd72cee36e22779a2035f1b56ee8466621ce349280 BNB
0x489cfa3d7abd5c0887b75d31a2b59843ad6e8e861c1f94352eb2ef1cebad86c153359492021-03-02 17:45:376 secs ago Just Liquidity: Router Binance: BUSD Stablecoin0 BNB
0x489cfa3d7abd5c0887b75d31a2b59843ad6e8e861c1f94352eb2ef1cebad86c153359492021-03-02 17:45:376 secs ago Just Liquidity: Router 0xd72cee36e22779a2035f1b56ee8466621ce349280 BNB
0x042c3a3fc11aba7aa422144ad9f0abc87b4f1c95a42ec3e78521d56d6b7930db53359492021-03-02 17:45:376 secs ago Just Liquidity: Router0x12473fcda38a384296f7e728178ade563c39d70b0.90901459570590996 BNB
0x042c3a3fc11aba7aa422144ad9f0abc87b4f1c95a42ec3e78521d56d6b7930db53359492021-03-02 17:45:376 secs ago Binance: WBNB Token Just Liquidity: Router0.90901459570590996 BNB
0x042c3a3fc11aba7aa422144ad9f0abc87b4f1c95a42ec3e78521d56d6b7930db53359492021-03-02 17:45:376 secs ago Just Liquidity: Router Binance: WBNB Token0 BNB
0x042c3a3fc11aba7aa422144ad9f0abc87b4f1c95a42ec3e78521d56d6b7930db53359492021-03-02 17:45:376 secs ago Just Liquidity: Router 0x0c8f9a56544cc988f1873a038de2f3e4c6fe6f270 BNB
0x042c3a3fc11aba7aa422144ad9f0abc87b4f1c95a42ec3e78521d56d6b7930db53359492021-03-02 17:45:376 secs ago Just Liquidity: Router Just Liquidity: JulD Token0 BNB
0x042c3a3fc11aba7aa422144ad9f0abc87b4f1c95a42ec3e78521d56d6b7930db53359492021-03-02 17:45:376 secs ago Just Liquidity: Router 0x0c8f9a56544cc988f1873a038de2f3e4c6fe6f270 BNB
0x79aa058049be38507d8541e16bacfa68ed8c50902488f9d76021451421e16b5853359482021-03-02 17:45:349 secs ago Just Liquidity: Router0x9b7874a1eb2a06059084a3886899005f683539260.013686213575745948 BNB
0x79aa058049be38507d8541e16bacfa68ed8c50902488f9d76021451421e16b5853359482021-03-02 17:45:349 secs ago Just Liquidity: Router 0xccfe1a5b6e4ad16a4e41a9142673dec829f394020 BNB
0x79aa058049be38507d8541e16bacfa68ed8c50902488f9d76021451421e16b5853359482021-03-02 17:45:349 secs ago Just Liquidity: Router Binance: WBNB Token0 BNB
0x79aa058049be38507d8541e16bacfa68ed8c50902488f9d76021451421e16b5853359482021-03-02 17:45:349 secs ago Just Liquidity: Router Binance: WBNB Token25.083358168473462086 BNB
0x79aa058049be38507d8541e16bacfa68ed8c50902488f9d76021451421e16b5853359482021-03-02 17:45:349 secs ago Just Liquidity: Router Just Liquidity: JULb Token0 BNB
0x79aa058049be38507d8541e16bacfa68ed8c50902488f9d76021451421e16b5853359482021-03-02 17:45:349 secs ago Just Liquidity: Router 0xccfe1a5b6e4ad16a4e41a9142673dec829f394020 BNB
0x79aa058049be38507d8541e16bacfa68ed8c50902488f9d76021451421e16b5853359482021-03-02 17:45:349 secs ago Just Liquidity: Router 0x553990f2cba90272390f62c5bdb1681ffc8996750 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BSCswapRouter

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2020-10-04
*/

// File: contracts/bscswap/interfaces/IBSCswapPair.sol

// SPDX-License-Identifier: GPL-3.0-or-later

pragma solidity >=0.5.0;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

// File: contracts/bscswap/libraries/SafeMath.sol

pragma solidity =0.6.12;

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

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

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

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

// File: contracts/bscswap/libraries/BSCswapLibrary.sol

pragma solidity >=0.5.0;

library BSCswapLibrary {
    using SafeMathBSCswap 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, 'BSCswapLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'BSCswapLibrary: 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'b1e98e21a5335633815a8cfb3b580071c2e4561c50afd57a8746def9ed890b18' // 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,) = IBSCswapPair(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, 'BSCswapLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'BSCswapLibrary: 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, 'BSCswapLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'BSCswapLibrary: 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, 'BSCswapLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'BSCswapLibrary: 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, 'BSCswapLibrary: 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, 'BSCswapLibrary: 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);
        }
    }
}

// File: contracts/bscswap/libraries/TransferHelper.sol

pragma solidity >=0.6.0;

// helper methods for interacting with BEP20 tokens and sending BNB 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 safeTransferBNB(address to, uint value) internal {
        (bool success,) = to.call{value:value}(new bytes(0));
        require(success, 'TransferHelper: BNB_TRANSFER_FAILED');
    }
}

// File: contracts/bscswap/interfaces/IBSCswapRouter01.sol

pragma solidity >=0.6.2;

interface IBSCswapRouter01 {
    function factory() external pure returns (address);
    function WBNB() 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 addLiquidityBNB(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountBNBMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountBNB, 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 removeLiquidityBNB(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountBNBMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountBNB);
    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 removeLiquidityBNBWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountBNBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountBNB);
    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 swapExactBNBForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactBNB(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForBNB(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapBNBForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

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

// File: contracts/bscswap/interfaces/IBSCswapRouter02.sol

pragma solidity >=0.6.2;


interface IBSCswapRouter02 is IBSCswapRouter01 {
    function removeLiquidityBNBSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountBNBMin,
        address to,
        uint deadline
    ) external returns (uint amountBNB);
    function removeLiquidityBNBWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountBNBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountBNB);

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

// File: contracts/bscswap/interfaces/IBSCswapFactory.sol

pragma solidity >=0.5.0;

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

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

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

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

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

// File: contracts/bscswap/interfaces/IBEP20.sol

pragma solidity >=0.5.0;

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

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

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

// File: contracts/bscswap/interfaces/IWBNB.sol

pragma solidity >=0.5.0;

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

// File: contracts/bscswap/BSCswapRouter.sol

pragma solidity =0.6.12;

contract BSCswapRouter is IBSCswapRouter02 {
    using SafeMathBSCswap for uint;

    address public immutable override factory;
    address public immutable override WBNB;

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

    constructor(address _factory, address _WBNB) public {
        factory = _factory;
        WBNB = _WBNB;
    }

    receive() external payable {
        assert(msg.sender == WBNB); // only accept BNB via fallback from the WBNB 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 (IBSCswapFactory(factory).getPair(tokenA, tokenB) == address(0)) {
            IBSCswapFactory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = BSCswapLibrary.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = BSCswapLibrary.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'BSCswapRouter: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = BSCswapLibrary.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'BSCswapRouter: 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 = BSCswapLibrary.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IBSCswapPair(pair).mint(to);
    }
    function addLiquidityBNB(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountBNBMin,
        address to,
        uint deadline
    ) external virtual override payable ensure(deadline) returns (uint amountToken, uint amountBNB, uint liquidity) {
        (amountToken, amountBNB) = _addLiquidity(
            token,
            WBNB,
            amountTokenDesired,
            msg.value,
            amountTokenMin,
            amountBNBMin
        );
        address pair = BSCswapLibrary.pairFor(factory, token, WBNB);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWBNB(WBNB).deposit{value: amountBNB}();
        assert(IWBNB(WBNB).transfer(pair, amountBNB));
        liquidity = IBSCswapPair(pair).mint(to);
        // refund dust BNB, if any
        if (msg.value > amountBNB) TransferHelper.safeTransferBNB(msg.sender, msg.value - amountBNB);
    }

    // **** 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 = BSCswapLibrary.pairFor(factory, tokenA, tokenB);
        IBSCswapPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint amount0, uint amount1) = IBSCswapPair(pair).burn(to);
        (address token0,) = BSCswapLibrary.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'BSCswapRouter: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'BSCswapRouter: INSUFFICIENT_B_AMOUNT');
    }
    function removeLiquidityBNB(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountBNBMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountToken, uint amountBNB) {
        (amountToken, amountBNB) = removeLiquidity(
            token,
            WBNB,
            liquidity,
            amountTokenMin,
            amountBNBMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, amountToken);
        IWBNB(WBNB).withdraw(amountBNB);
        TransferHelper.safeTransferBNB(to, amountBNB);
    }
    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 = BSCswapLibrary.pairFor(factory, tokenA, tokenB);
        uint value = approveMax ? uint(-1) : liquidity;
        IBSCswapPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline);
    }
    function removeLiquidityBNBWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountBNBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountToken, uint amountBNB) {
        address pair = BSCswapLibrary.pairFor(factory, token, WBNB);
        uint value = approveMax ? uint(-1) : liquidity;
        IBSCswapPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountToken, amountBNB) = removeLiquidityBNB(token, liquidity, amountTokenMin, amountBNBMin, to, deadline);
    }

    // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) ****
    function removeLiquidityBNBSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountBNBMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountBNB) {
        (, amountBNB) = removeLiquidity(
            token,
            WBNB,
            liquidity,
            amountTokenMin,
            amountBNBMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, IBEP20BSCswap(token).balanceOf(address(this)));
        IWBNB(WBNB).withdraw(amountBNB);
        TransferHelper.safeTransferBNB(to, amountBNB);
    }
    function removeLiquidityBNBWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountBNBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountBNB) {
        address pair = BSCswapLibrary.pairFor(factory, token, WBNB);
        uint value = approveMax ? uint(-1) : liquidity;
        IBSCswapPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        amountBNB = removeLiquidityBNBSupportingFeeOnTransferTokens(
            token, liquidity, amountTokenMin, amountBNBMin, 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,) = BSCswapLibrary.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 ? BSCswapLibrary.pairFor(factory, output, path[i + 2]) : _to;
            IBSCswapPair(BSCswapLibrary.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 = BSCswapLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'BSCswapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, BSCswapLibrary.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 = BSCswapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'BSCswapRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, BSCswapLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }
    function swapExactBNBForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WBNB, 'BSCswapRouter: INVALID_PATH');
        amounts = BSCswapLibrary.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'BSCswapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWBNB(WBNB).deposit{value: amounts[0]}();
        assert(IWBNB(WBNB).transfer(BSCswapLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
    }
    function swapTokensForExactBNB(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] == WBNB, 'BSCswapRouter: INVALID_PATH');
        amounts = BSCswapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'BSCswapRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, BSCswapLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWBNB(WBNB).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferBNB(to, amounts[amounts.length - 1]);
    }
    function swapExactTokensForBNB(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] == WBNB, 'BSCswapRouter: INVALID_PATH');
        amounts = BSCswapLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'BSCswapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, BSCswapLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWBNB(WBNB).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferBNB(to, amounts[amounts.length - 1]);
    }
    function swapBNBForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WBNB, 'BSCswapRouter: INVALID_PATH');
        amounts = BSCswapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'BSCswapRouter: EXCESSIVE_INPUT_AMOUNT');
        IWBNB(WBNB).deposit{value: amounts[0]}();
        assert(IWBNB(WBNB).transfer(BSCswapLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
        // refund dust BNB, if any
        if (msg.value > amounts[0]) TransferHelper.safeTransferBNB(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,) = BSCswapLibrary.sortTokens(input, output);
            IBSCswapPair pair = IBSCswapPair(BSCswapLibrary.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 = IBEP20BSCswap(input).balanceOf(address(pair)).sub(reserveInput);
            amountOutput = BSCswapLibrary.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? BSCswapLibrary.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, BSCswapLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        uint balanceBefore = IBEP20BSCswap(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IBEP20BSCswap(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'BSCswapRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactBNBForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WBNB, 'BSCswapRouter: INVALID_PATH');
        uint amountIn = msg.value;
        IWBNB(WBNB).deposit{value: amountIn}();
        assert(IWBNB(WBNB).transfer(BSCswapLibrary.pairFor(factory, path[0], path[1]), amountIn));
        uint balanceBefore = IBEP20BSCswap(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IBEP20BSCswap(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'BSCswapRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactTokensForBNBSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        ensure(deadline)
    {
        require(path[path.length - 1] == WBNB, 'BSCswapRouter: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, BSCswapLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IBEP20BSCswap(WBNB).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'BSCswapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWBNB(WBNB).withdraw(amountOut);
        TransferHelper.safeTransferBNB(to, amountOut);
    }

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

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

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

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

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

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WBNB","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WBNB","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":"amountBNBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityBNB","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountBNB","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":"amountBNBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityBNB","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountBNB","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":"amountBNBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityBNBSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountBNB","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":"amountBNBMin","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":"removeLiquidityBNBWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountBNB","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":"amountBNBMin","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":"removeLiquidityBNBWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountBNB","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":"swapBNBForExactTokens","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":"swapExactBNBForTokens","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":"swapExactBNBForTokensSupportingFeeOnTransferTokens","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":"swapExactTokensForBNB","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":"swapExactTokensForBNBSupportingFeeOnTransferTokens","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":"swapTokensForExactBNB","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"}]

60c060405234801561001057600080fd5b50604051620048a6380380620048a68339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c614721620001856000398061019f5280610e5e5280611186528061122d52806112a152806117a652806119485280611a265280611b5d5280611cb25280611d3a5280611fbd5280612032528061218a528061221252806123a0528061245452806127ec52806128d952806129b35280612a945280612c3a5280612c755280612e9f5280612ef55280612f295280612f9d525080610d095280610d425280610e3c5280610f9c528061107352806112d352806115ce52806118465280611a045280611c025280611d6c5280611f0d52806120d7528061224452806125335280612744528061276d5280612b345280612d755280612ed35280613738528061377b528061391d5280613a9a528061413c52806141f552806142a852506147216000f3fe60806040526004361061018f5760003560e01c80638dd95002116100d6578063d06ca61f1161007f578063e058848811610059578063e058848814610bd4578063e8e3370014610c27578063eaaed44214610ca7576101c8565b8063d06ca61f146109ed578063d46d2f8314610aa4578063d67b571e14610b3c576101c8565b8063b7e65949116100b0578063b7e6594914610928578063baa2abde1461097b578063c45a0155146109d8576101c8565b80638dd950021461083b5780639cf689111461086c578063ad615dec146108f2576101c8565b80635c11d795116101385780638332a963116101125780638332a963146106e757806385f8c2591461076d5780638803dbee146107a3576101c8565b80635c11d795146105445780635d616c5b146105dc578063685a0a3414610674576101c8565b806334a0772d1161016957806334a0772d146103b357806338ed17391461042657806350e27df3146104be576101c8565b8063054d50d4146101cd5780631f00ca74146102155780632195995c1461031c576101c8565b366101c857336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101c657fe5b005b600080fd5b3480156101d957600080fd5b50610203600480360360608110156101f057600080fd5b5080359060208101359060400135610ced565b60408051918252519081900360200190f35b34801561022157600080fd5b506102cc6004803603604081101561023857600080fd5b8135919081019060408101602082013564010000000081111561025a57600080fd5b82018360208201111561026c57600080fd5b8035906020019184602083028401116401000000008311171561028e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610d02945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103085781810151838201526020016102f0565b505050509050019250505060405180910390f35b34801561032857600080fd5b5061039a600480360361016081101561034057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135610d38565b6040805192835260208301919091528051918290030190f35b3480156103bf57600080fd5b5061039a60048036036101408110156103d757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135610e32565b34801561043257600080fd5b506102cc600480360360a081101561044957600080fd5b81359160208101359181019060608101604082013564010000000081111561047057600080fd5b82018360208201111561048257600080fd5b803590602001918460208302840111640100000000831117156104a457600080fd5b91935091506001600160a01b038135169060200135610f46565b6101c6600480360360808110156104d457600080fd5b813591908101906040810160208201356401000000008111156104f657600080fd5b82018360208201111561050857600080fd5b8035906020019184602083028401116401000000008311171561052a57600080fd5b91935091506001600160a01b038135169060200135611135565b34801561055057600080fd5b506101c6600480360360a081101561056757600080fd5b81359160208101359181019060608101604082013564010000000081111561058e57600080fd5b8201836020820111156105a057600080fd5b803590602001918460208302840111640100000000831117156105c257600080fd5b91935091506001600160a01b038135169060200135611559565b3480156105e857600080fd5b506102cc600480360360a08110156105ff57600080fd5b81359160208101359181019060608101604082013564010000000081111561062657600080fd5b82018360208201111561063857600080fd5b8035906020019184602083028401116401000000008311171561065a57600080fd5b91935091506001600160a01b03813516906020013561174b565b34801561068057600080fd5b50610203600480360361014081101561069857600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356119fc565b6102cc600480360360808110156106fd57600080fd5b8135919081019060408101602082013564010000000081111561071f57600080fd5b82018360208201111561073157600080fd5b8035906020019184602083028401116401000000008311171561075357600080fd5b91935091506001600160a01b038135169060200135611b0a565b34801561077957600080fd5b506102036004803603606081101561079057600080fd5b5080359060208101359060400135611eaa565b3480156107af57600080fd5b506102cc600480360360a08110156107c657600080fd5b8135916020810135918101906060810160408201356401000000008111156107ed57600080fd5b8201836020820111156107ff57600080fd5b8035906020019184602083028401116401000000008311171561082157600080fd5b91935091506001600160a01b038135169060200135611eb7565b34801561084757600080fd5b50610850611fbb565b604080516001600160a01b039092168252519081900360200190f35b6102cc6004803603608081101561088257600080fd5b813591908101906040810160208201356401000000008111156108a457600080fd5b8201836020820111156108b657600080fd5b803590602001918460208302840111640100000000831117156108d857600080fd5b91935091506001600160a01b038135169060200135611fdf565b3480156108fe57600080fd5b506102036004803603606081101561091557600080fd5b508035906020810135906040013561233c565b34801561093457600080fd5b50610203600480360360c081101561094b57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612349565b34801561098757600080fd5b5061039a600480360360e081101561099e57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124da565b3480156109e457600080fd5b50610850612742565b3480156109f957600080fd5b506102cc60048036036040811015610a1057600080fd5b81359190810190604081016020820135640100000000811115610a3257600080fd5b820183602082011115610a4457600080fd5b80359060200191846020830284011164010000000083111715610a6657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612766945050505050565b348015610ab057600080fd5b506101c6600480360360a0811015610ac757600080fd5b813591602081013591810190606081016040820135640100000000811115610aee57600080fd5b820183602082011115610b0057600080fd5b80359060200191846020830284011164010000000083111715610b2257600080fd5b91935091506001600160a01b038135169060200135612793565b348015610b4857600080fd5b506102cc600480360360a0811015610b5f57600080fd5b813591602081013591810190606081016040820135640100000000811115610b8657600080fd5b820183602082011115610b9857600080fd5b80359060200191846020830284011164010000000083111715610bba57600080fd5b91935091506001600160a01b038135169060200135612a39565b348015610be057600080fd5b5061039a600480360360c0811015610bf757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612be2565b348015610c3357600080fd5b50610c896004803603610100811015610c4b57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612d07565b60408051938452602084019290925282820152519081900360600190f35b610c89600480360360c0811015610cbd57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612e45565b6000610cfa8484846130e3565b949350505050565b6060610d2f7f000000000000000000000000000000000000000000000000000000000000000084846131bb565b90505b92915050565b6000806000610d687f00000000000000000000000000000000000000000000000000000000000000008f8f613308565b9050600087610d77578c610d7b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015610df157600080fd5b505af1158015610e05573d6000803e3d6000fd5b50505050610e188f8f8f8f8f8f8f6124da565b809450819550505050509b509b9950505050505050505050565b6000806000610e827f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613308565b9050600087610e91578c610e95565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015610f0b57600080fd5b505af1158015610f1f573d6000803e3d6000fd5b50505050610f318e8e8e8e8e8e612be2565b909f909e509c50505050505050505050505050565b60608142811015610f97576040805162461bcd60e51b81526020600482015260166024820152751094d0dcddd85c149bdd5d195c8e881156141254915160521b604482015290519081900360640190fd5b610ff57f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133e092505050565b9150868260018451038151811061100857fe5b6020026020010151101561104d5760405162461bcd60e51b81526004018080602001828103825260298152602001806146366029913960400191505060405180910390fd5b6110eb8686600081811061105d57fe5b905060200201356001600160a01b0316336110d17f00000000000000000000000000000000000000000000000000000000000000008a8a600081811061109f57fe5b905060200201356001600160a01b03168b8b60018181106110bc57fe5b905060200201356001600160a01b0316613308565b856000815181106110de57fe5b6020026020010151613517565b61112a82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613689915050565b509695505050505050565b8042811015611184576040805162461bcd60e51b81526020600482015260166024820152751094d0dcddd85c149bdd5d195c8e881156141254915160521b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106111bb57fe5b905060200201356001600160a01b03166001600160a01b031614611226576040805162461bcd60e51b815260206004820152601b60248201527f42534373776170526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561128657600080fd5b505af115801561129a573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61131c7f0000000000000000000000000000000000000000000000000000000000000000898960008181106112ff57fe5b905060200201356001600160a01b03168a8a60018181106110bc57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561136357600080fd5b505af1158015611377573d6000803e3d6000fd5b505050506040513d602081101561138d57600080fd5b505161139557fe5b6000868660001981018181106113a757fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561140357600080fd5b505afa158015611417573d6000803e3d6000fd5b505050506040513d602081101561142d57600080fd5b5051604080516020898102828101820190935289825292935061146f9290918a918a9182918501908490808284376000920191909152508992506138c6915050565b87611512828989600019810181811061148457fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156114e057600080fd5b505afa1580156114f4573d6000803e3d6000fd5b505050506040513d602081101561150a57600080fd5b505190613bed565b101561154f5760405162461bcd60e51b81526004018080602001828103825260298152602001806146366029913960400191505060405180910390fd5b5050505050505050565b80428110156115a8576040805162461bcd60e51b81526020600482015260166024820152751094d0dcddd85c149bdd5d195c8e881156141254915160521b604482015290519081900360640190fd5b611600858560008181106115b857fe5b905060200201356001600160a01b0316336115fa7f0000000000000000000000000000000000000000000000000000000000000000898960008181106112ff57fe5b8a613517565b60008585600019810181811061161257fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561166e57600080fd5b505afa158015611682573d6000803e3d6000fd5b505050506040513d602081101561169857600080fd5b505160408051602088810282810182019093528882529293506116da9290918991899182918501908490808284376000920191909152508892506138c6915050565b8661151282888860001981018181106116ef57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156114e057600080fd5b6060814281101561179c576040805162461bcd60e51b81526020600482015260166024820152751094d0dcddd85c149bdd5d195c8e881156141254915160521b604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106117d657fe5b905060200201356001600160a01b03166001600160a01b031614611841576040805162461bcd60e51b815260206004820152601b60248201527f42534373776170526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b61189f7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133e092505050565b915086826001845103815181106118b257fe5b602002602001015110156118f75760405162461bcd60e51b81526004018080602001828103825260298152602001806146366029913960400191505060405180910390fd5b6119078686600081811061105d57fe5b61194682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613689915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061198557fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156119c357600080fd5b505af11580156119d7573d6000803e3d6000fd5b5050505061112a84836001855103815181106119ef57fe5b6020026020010151613c45565b600080611a4a7f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613308565b9050600086611a59578b611a5d565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015611ad357600080fd5b505af1158015611ae7573d6000803e3d6000fd5b50505050611af98d8d8d8d8d8d612349565b9d9c50505050505050505050505050565b60608142811015611b5b576040805162461bcd60e51b81526020600482015260166024820152751094d0dcddd85c149bdd5d195c8e881156141254915160521b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b9257fe5b905060200201356001600160a01b03166001600160a01b031614611bfd576040805162461bcd60e51b815260206004820152601b60248201527f42534373776170526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b611c5b7f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506131bb92505050565b91503482600081518110611c6b57fe5b60200260200101511115611cb05760405162461bcd60e51b81526004018080602001828103825260258152602001806145c76025913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611cec57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1f57600080fd5b505af1158015611d33573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d987f0000000000000000000000000000000000000000000000000000000000000000898960008181106112ff57fe5b84600081518110611da557fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611df357600080fd5b505af1158015611e07573d6000803e3d6000fd5b505050506040513d6020811015611e1d57600080fd5b5051611e2557fe5b611e6482878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613689915050565b81600081518110611e7157fe5b6020026020010151341115611ea057611ea03383600081518110611e9157fe5b60200260200101513403613c45565b5095945050505050565b6000610cfa848484613d38565b60608142811015611f08576040805162461bcd60e51b81526020600482015260166024820152751094d0dcddd85c149bdd5d195c8e881156141254915160521b604482015290519081900360640190fd5b611f667f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506131bb92505050565b91508682600081518110611f7657fe5b6020026020010151111561104d5760405162461bcd60e51b81526004018080602001828103825260258152602001806145c76025913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b60608142811015612030576040805162461bcd60e51b81526020600482015260166024820152751094d0dcddd85c149bdd5d195c8e881156141254915160521b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168686600081811061206757fe5b905060200201356001600160a01b03166001600160a01b0316146120d2576040805162461bcd60e51b815260206004820152601b60248201527f42534373776170526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b6121307f0000000000000000000000000000000000000000000000000000000000000000348888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133e092505050565b9150868260018451038151811061214357fe5b602002602001015110156121885760405162461bcd60e51b81526004018080602001828103825260298152602001806146366029913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836000815181106121c457fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156121f757600080fd5b505af115801561220b573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122707f0000000000000000000000000000000000000000000000000000000000000000898960008181106112ff57fe5b8460008151811061227d57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156122cb57600080fd5b505af11580156122df573d6000803e3d6000fd5b505050506040513d60208110156122f557600080fd5b50516122fd57fe5b611ea082878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613689915050565b6000610cfa848484613e10565b6000814281101561239a576040805162461bcd60e51b81526020600482015260166024820152751094d0dcddd85c149bdd5d195c8e881156141254915160521b604482015290519081900360640190fd5b6123c9887f000000000000000000000000000000000000000000000000000000000000000089898930896124da565b90508092505061245288858a6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561242157600080fd5b505afa158015612435573d6000803e3d6000fd5b505050506040513d602081101561244b57600080fd5b5051613eb6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156124b857600080fd5b505af11580156124cc573d6000803e3d6000fd5b5050505061112a8483613c45565b600080824281101561252c576040805162461bcd60e51b81526020600482015260166024820152751094d0dcddd85c149bdd5d195c8e881156141254915160521b604482015290519081900360640190fd5b60006125597f00000000000000000000000000000000000000000000000000000000000000008c8c613308565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b1580156125b457600080fd5b505af11580156125c8573d6000803e3d6000fd5b505050506040513d60208110156125de57600080fd5b5050604080517f89afcb440000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561264457600080fd5b505af1158015612658573d6000803e3d6000fd5b505050506040513d604081101561266e57600080fd5b508051602090910151909250905060006126888e8e61404e565b509050806001600160a01b03168e6001600160a01b0316146126ab5781836126ae565b82825b90975095508a8710156126f25760405162461bcd60e51b81526004018080602001828103825260248152602001806145a36024913960400191505060405180910390fd5b898610156127315760405162461bcd60e51b81526004018080602001828103825260248152602001806145ec6024913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6060610d2f7f000000000000000000000000000000000000000000000000000000000000000084846133e0565b80428110156127e2576040805162461bcd60e51b81526020600482015260166024820152751094d0dcddd85c149bdd5d195c8e881156141254915160521b604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061281c57fe5b905060200201356001600160a01b03166001600160a01b031614612887576040805162461bcd60e51b815260206004820152601b60248201527f42534373776170526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b612897858560008181106115b857fe5b6128d58585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506138c6915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561294457600080fd5b505afa158015612958573d6000803e3d6000fd5b505050506040513d602081101561296e57600080fd5b50519050868110156129b15760405162461bcd60e51b81526004018080602001828103825260298152602001806146366029913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612a1757600080fd5b505af1158015612a2b573d6000803e3d6000fd5b5050505061154f8482613c45565b60608142811015612a8a576040805162461bcd60e51b81526020600482015260166024820152751094d0dcddd85c149bdd5d195c8e881156141254915160521b604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110612ac457fe5b905060200201356001600160a01b03166001600160a01b031614612b2f576040805162461bcd60e51b815260206004820152601b60248201527f42534373776170526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b612b8d7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506131bb92505050565b91508682600081518110612b9d57fe5b602002602001015111156118f75760405162461bcd60e51b81526004018080602001828103825260258152602001806145c76025913960400191505060405180910390fd5b6000808242811015612c34576040805162461bcd60e51b81526020600482015260166024820152751094d0dcddd85c149bdd5d195c8e881156141254915160521b604482015290519081900360640190fd5b612c63897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124da565b9093509150612c73898685613eb6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612cd957600080fd5b505af1158015612ced573d6000803e3d6000fd5b50505050612cfb8583613c45565b50965096945050505050565b60008060008342811015612d5b576040805162461bcd60e51b81526020600482015260166024820152751094d0dcddd85c149bdd5d195c8e881156141254915160521b604482015290519081900360640190fd5b612d698c8c8c8c8c8c61412c565b90945092506000612d9b7f00000000000000000000000000000000000000000000000000000000000000008e8e613308565b9050612da98d338388613517565b612db58c338387613517565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b158015612e0457600080fd5b505af1158015612e18573d6000803e3d6000fd5b505050506040513d6020811015612e2e57600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015612e99576040805162461bcd60e51b81526020600482015260166024820152751094d0dcddd85c149bdd5d195c8e881156141254915160521b604482015290519081900360640190fd5b612ec78a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c61412c565b90945092506000612f197f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613308565b9050612f278b338388613517565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612f8257600080fd5b505af1158015612f96573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561301257600080fd5b505af1158015613026573d6000803e3d6000fd5b505050506040513d602081101561303c57600080fd5b505161304457fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b15801561309357600080fd5b505af11580156130a7573d6000803e3d6000fd5b505050506040513d60208110156130bd57600080fd5b50519250348410156130d5576130d533853403613c45565b505096509650969350505050565b60008084116131235760405162461bcd60e51b81526004018080602001828103825260298152602001806145506029913960400191505060405180910390fd5b6000831180156131335750600082115b61316e5760405162461bcd60e51b81526004018080602001828103825260268152602001806146106026913960400191505060405180910390fd5b600061317c856103e56143bd565b9050600061318a82856143bd565b905060006131a48361319e886103e86143bd565b90614429565b90508082816131af57fe5b04979650505050505050565b6060600282511015613214576040805162461bcd60e51b815260206004820152601c60248201527f425343737761704c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561322c57600080fd5b50604051908082528060200260200182016040528015613256578160200160208202803683370190505b509050828160018351038151811061326a57fe5b60209081029190910101528151600019015b8015613300576000806132b98786600186038151811061329857fe5b60200260200101518786815181106132ac57fe5b6020026020010151614481565b915091506132db8484815181106132cc57fe5b60200260200101518383613d38565b8460018503815181106132ea57fe5b602090810291909101015250506000190161327c565b509392505050565b6000806000613317858561404e565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527fb1e98e21a5335633815a8cfb3b580071c2e4561c50afd57a8746def9ed890b18609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6060600282511015613439576040805162461bcd60e51b815260206004820152601c60248201527f425343737761704c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561345157600080fd5b5060405190808252806020026020018201604052801561347b578160200160208202803683370190505b509050828160008151811061348c57fe5b60200260200101818152505060005b6001835103811015613300576000806134d1878685815181106134ba57fe5b60200260200101518786600101815181106132ac57fe5b915091506134f38484815181106134e457fe5b602002602001015183836130e3565b84846001018151811061350257fe5b6020908102919091010152505060010161349b565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135b15780518252601f199092019160209182019101613592565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613613576040519150601f19603f3d011682016040523d82523d6000602084013e613618565b606091505b5091509150818015613646575080511580613646575080806020019051602081101561364357600080fd5b50515b6136815760405162461bcd60e51b81526004018080602001828103825260248152602001806146a56024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138c0576000808483815181106136a757fe5b60200260200101518584600101815181106136be57fe5b60200260200101519150915060006136d6838361404e565b50905060008785600101815181106136ea57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146137185782600061371c565b6000835b91509150600060028a510388106137335788613774565b6137747f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061376757fe5b6020026020010151613308565b90506137a17f00000000000000000000000000000000000000000000000000000000000000008888613308565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156137de576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561384657818101518382015260200161382e565b50505050905090810190601f1680156138735780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561389557600080fd5b505af11580156138a9573d6000803e3d6000fd5b50506001909901985061368c975050505050505050565b50505050565b60005b6001835103811015613be8576000808483815181106138e457fe5b60200260200101518584600101815181106138fb57fe5b6020026020010151915091506000613913838361404e565b50905060006139437f00000000000000000000000000000000000000000000000000000000000000008585613308565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561398457600080fd5b505afa158015613998573d6000803e3d6000fd5b505050506040513d60608110156139ae57600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506000806001600160a01b038a8116908916146139eb5782846139ee565b83835b91509150613a43828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156114e057600080fd5b9550613a508683836130e3565b945050505050600080856001600160a01b0316886001600160a01b031614613a7a57826000613a7e565b6000835b91509150600060028c51038a10613a95578a613ac9565b613ac97f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061376757fe5b60408051600080825260208201928390527f022c0d9f00000000000000000000000000000000000000000000000000000000835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613b6c578181015183820152602001613b54565b50505050905090810190601f168015613b995780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613bbb57600080fd5b505af1158015613bcf573d6000803e3d6000fd5b50506001909b019a506138c99950505050505050505050565b505050565b80820382811115610d32576040805162461bcd60e51b815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310613c915780518252601f199092019160209182019101613c72565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613cf3576040519150601f19603f3d011682016040523d82523d6000602084013e613cf8565b606091505b5050905080613be85760405162461bcd60e51b815260040180806020018281038252602381526020018061465f6023913960400191505060405180910390fd5b6000808411613d785760405162461bcd60e51b815260040180806020018281038252602a815260200180614579602a913960400191505060405180910390fd5b600083118015613d885750600082115b613dc35760405162461bcd60e51b81526004018080602001828103825260268152602001806146106026913960400191505060405180910390fd5b6000613ddb6103e8613dd586886143bd565b906143bd565b90506000613def6103e5613dd58689613bed565b9050613e066001828481613dff57fe5b0490614429565b9695505050505050565b6000808411613e505760405162461bcd60e51b81526004018080602001828103825260238152602001806146c96023913960400191505060405180910390fd5b600083118015613e605750600082115b613e9b5760405162461bcd60e51b81526004018080602001828103825260268152602001806146106026913960400191505060405180910390fd5b82613ea685846143bd565b81613ead57fe5b04949350505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b60208310613f615780518252601f199092019160209182019101613f42565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613fc3576040519150601f19603f3d011682016040523d82523d6000602084013e613fc8565b606091505b5091509150818015613ff6575080511580613ff65750808060200190516020811015613ff357600080fd5b50515b614047576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b600080826001600160a01b0316846001600160a01b031614156140a25760405162461bcd60e51b81526004018080602001828103825260238152602001806146826023913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b0316106140c25782846140c5565b83835b90925090506001600160a01b038216614125576040805162461bcd60e51b815260206004820152601c60248201527f425343737761704c6962726172793a205a45524f5f4144445245535300000000604482015290519081900360640190fd5b9250929050565b60008060006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e6a439058a8a6040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b1580156141b857600080fd5b505afa1580156141cc573d6000803e3d6000fd5b505050506040513d60208110156141e257600080fd5b50516001600160a01b031614156142a0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c9c6539689896040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050602060405180830381600087803b15801561427357600080fd5b505af1158015614287573d6000803e3d6000fd5b505050506040513d602081101561429d57600080fd5b50505b6000806142ce7f00000000000000000000000000000000000000000000000000000000000000008b8b614481565b915091508160001480156142e0575080155b156142f0578793508692506143b0565b60006142fd898484613e10565b905087811161435057858110156143455760405162461bcd60e51b81526004018080602001828103825260248152602001806145ec6024913960400191505060405180910390fd5b8894509250826143ae565b600061435d898486613e10565b90508981111561436957fe5b878110156143a85760405162461bcd60e51b81526004018080602001828103825260248152602001806145a36024913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806143d8575050808202828282816143d557fe5b04145b610d32576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b80820182811015610d32576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b6000806000614490858561404e565b5090506000806144a1888888613308565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156144d957600080fd5b505afa1580156144ed573d6000803e3d6000fd5b505050506040513d606081101561450357600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b038781169084161461453d578082614540565b81815b9099909850965050505050505056fe425343737761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54425343737761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e5442534373776170526f757465723a20494e53554646494349454e545f415f414d4f554e5442534373776170526f757465723a204558434553534956455f494e5055545f414d4f554e5442534373776170526f757465723a20494e53554646494349454e545f425f414d4f554e54425343737761704c6962726172793a20494e53554646494349454e545f4c495155494449545942534373776170526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a20424e425f5452414e534645525f4641494c4544425343737761704c6962726172793a204944454e544943414c5f4144445245535345535472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544425343737761704c6962726172793a20494e53554646494349454e545f414d4f554e54a2646970667358221220f5dd67d47f108fcbc4c17314902460f0c2c44be43ceadc8f5deefc4a278141d764736f6c634300060c0033000000000000000000000000553990f2cba90272390f62c5bdb1681ffc899675000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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

000000000000000000000000553990f2cba90272390f62c5bdb1681ffc899675000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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


Deployed ByteCode Sourcemap

16394:18461:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16875:10;-1:-1:-1;;;;;16889:4:0;16875:18;;16868:26;;;;16394:18461;;;;;33807:260;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33807:260:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;34601:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34601:251:0;;-1:-1:-1;34601:251:0;;-1:-1:-1;;;;;34601:251:0:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21670:673;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21670:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22349:665;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22349:665:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25364:622::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25364:622:0;-1:-1:-1;;;;;;25364:622:0;;;;;;;;:::i;31861:858::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31861:858:0;-1:-1:-1;;;;;;31861:858:0;;;;;;;;:::i;31131:724::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31131:724:0;-1:-1:-1;;;;;;31131:724:0;;;;;;;;:::i;28119:842::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28119:842:0;-1:-1:-1;;;;;;28119:842:0;;;;;;;;:::i;23806:714::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23806:714:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28967:802::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28967:802:0;-1:-1:-1;;;;;;28967:802:0;;;;;;;;:::i;34075:259::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34075:259:0;;;;;;;;;;;;:::i;25992:600::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25992:600:0;-1:-1:-1;;;;;;25992:600:0;;;;;;;;:::i;16531:38::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;16531:38:0;;;;;;;;;;;;;;26598:689;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26598:689:0;-1:-1:-1;;;;;;26598:689:0;;;;;;;;:::i;33613:186::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33613:186:0;;;;;;;;;;;;:::i;23093:707::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23093:707:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20132:853::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20132:853:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16483:41::-;;;;;;;;;;;;;:::i;34342:251::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34342:251:0;;-1:-1:-1;34342:251:0;;-1:-1:-1;;;;;34342:251:0:i;32725:844::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32725:844:0;-1:-1:-1;;;;;;32725:844:0;;;;;;;;:::i;27293:820::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27293:820:0;-1:-1:-1;;;;;;27293:820:0;;;;;;;;:::i;20991:673::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20991:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18379:734::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18379:734:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;19119:970;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19119:970:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33807:260::-;33960:14;33999:60;34027:8;34037:9;34048:10;33999:27;:60::i;:::-;33992:67;33807:260;-1:-1:-1;;;;33807:260:0:o;34601:251::-;34745:21;34791:53;34819:7;34828:9;34839:4;34791:27;:53::i;:::-;34784:60;;34601:251;;;;;:::o;21670:673::-;21976:12;21990;22015;22030:47;22053:7;22062:6;22070;22030:22;:47::i;:::-;22015:62;;22088:10;22101;:33;;22125:9;22101:33;;;-1:-1:-1;;22101:33:0;22145:78;;;-1:-1:-1;;;22145:78:0;;22171:10;22145:78;;;;22191:4;22145:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22088:46;;-1:-1:-1;;;;;;22145:25:0;;;;;:78;;;;;-1:-1:-1;;22145:78:0;;;;;;;;-1:-1:-1;22145:25:0;:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22255:80;22271:6;22279;22287:9;22298:10;22310;22322:2;22326:8;22255:15;:80::i;:::-;22234:101;;;;;;;;21670:673;;;;;;;;;;;;;;;;:::o;22349:665::-;22638:16;22656:14;22683:12;22698:44;22721:7;22730:5;22737:4;22698:22;:44::i;:::-;22683:59;;22753:10;22766;:33;;22790:9;22766:33;;;-1:-1:-1;;22766:33:0;22810:78;;;-1:-1:-1;;;22810:78:0;;22836:10;22810:78;;;;22856:4;22810:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22753:46;;-1:-1:-1;;;;;;22810:25:0;;;;;:78;;;;;-1:-1:-1;;22810:78:0;;;;;;;;-1:-1:-1;22810:25:0;:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22926:80;22945:5;22952:9;22963:14;22979:12;22993:2;22997:8;22926:18;:80::i;:::-;22899:107;;;;-1:-1:-1;22349:665:0;-1:-1:-1;;;;;;;;;;;;;22349:665:0:o;25364:622::-;25588:21;25569:8;16640:15;16628:8;:27;;16620:62;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;;;;25632:53:::1;25661:7;25670:8;25680:4;;25632:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;25632:28:0::1;::::0;-1:-1:-1;;;25632:53:0:i:1;:::-;25622:63;;25735:12;25704:7;25729:1;25712:7;:14;:18;25704:27;;;;;;;;;;;;;;:43;;25696:97;;;;-1:-1:-1::0;;;25696:97:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25804:139;25850:4;;25855:1;25850:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;25850:7:0::1;25859:10;25871:49;25894:7;25903:4;;25908:1;25903:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;25903:7:0::1;25912:4;;25917:1;25912:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;25912:7:0::1;25871:22;:49::i;:::-;25922:7;25930:1;25922:10;;;;;;;;;;;;;;25804:31;:139::i;:::-;25954:24;25960:7;25969:4;;25954:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;25975:2:0;;-1:-1:-1;25954:5:0::1;::::0;-1:-1:-1;;25954:24:0:i:1;:::-;25364:622:::0;;;;;;;;;:::o;31861:858::-;32121:8;16640:15;16628:8;:27;;16620:62;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;;;;32166:4:::1;-1:-1:-1::0;;;;;32155:15:0::1;:4;;32160:1;32155:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32155:7:0::1;-1:-1:-1::0;;;;;32155:15:0::1;;32147:55;;;::::0;;-1:-1:-1;;;32147:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;32213:13;32229:9;32213:25;;32255:4;-1:-1:-1::0;;;;;32249:19:0::1;;32276:8;32249:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;32311:4;-1:-1:-1::0;;;;;32305:20:0::1;;32326:49;32349:7;32358:4;;32363:1;32358:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32358:7:0::1;32367:4;;32372:1;32367:7;;;;;;32326:49;32377:8;32305:81;;;;;;;;;;;;;-1:-1:-1::0;;;;;32305:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32305:81:0;32298:89:::1;;;;32398:18;32433:4:::0;;-1:-1:-1;;32438:15:0;;32433:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32433:21:0::1;-1:-1:-1::0;;;;;32419:46:0::1;;32466:2;32419:50;;;;;;;;;;;;;-1:-1:-1::0;;;;;32419:50:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32419:50:0;32480:44:::1;::::0;;32419:50:::1;32480:44:::0;;::::1;::::0;;;;;;;;;;;32419:50;;-1:-1:-1;32480:44:0::1;::::0;;;32515:4;;;;;;32480:44;::::1;::::0;32515:4;;32480:44;32515:4;32480:44;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;32521:2:0;;-1:-1:-1;32480:34:0::1;::::0;-1:-1:-1;;32480:44:0:i:1;:::-;32630:12:::0;32557:69:::1;32612:13:::0;32571:4;;-1:-1:-1;;32576:15:0;;32571:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32571:21:0::1;-1:-1:-1::0;;;;;32557:46:0::1;;32604:2;32557:50;;;;;;;;;;;;;-1:-1:-1::0;;;;;32557:50:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32557:50:0;;:54:::1;:69::i;:::-;:85;;32535:176;;;;-1:-1:-1::0;;;32535:176:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16693:1;;31861:858:::0;;;;;;:::o;31131:724::-;31365:8;16640:15;16628:8;:27;;16620:62;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;;;;31386:137:::1;31432:4;;31437:1;31432:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31432:7:0::1;31441:10;31453:49;31476:7;31485:4;;31490:1;31485:7;;;;;;31453:49;31504:8;31386:31;:137::i;:::-;31534:18;31569:4:::0;;-1:-1:-1;;31574:15:0;;31569:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31569:21:0::1;-1:-1:-1::0;;;;;31555:46:0::1;;31602:2;31555:50;;;;;;;;;;;;;-1:-1:-1::0;;;;;31555:50:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31555:50:0;31616:44:::1;::::0;;31555:50:::1;31616:44:::0;;::::1;::::0;;;;;;;;;;;31555:50;;-1:-1:-1;31616:44:0::1;::::0;;;31651:4;;;;;;31616:44;::::1;::::0;31651:4;;31616:44;31651:4;31616:44;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;31657:2:0;;-1:-1:-1;31616:34:0::1;::::0;-1:-1:-1;;31616:44:0:i:1;:::-;31766:12:::0;31693:69:::1;31748:13:::0;31707:4;;-1:-1:-1;;31712:15:0;;31707:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31707:21:0::1;-1:-1:-1::0;;;;;31693:46:0::1;;31740:2;31693:50;;;;;;;;;;;;;-1:-1:-1::0;;;;;31693:50:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;28119:842:::0;28333:21;28305:8;16640:15;16628:8;:27;;16620:62;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28405:4:0::1;28380:29;:4:::0;;-1:-1:-1;;28385:15:0;;28380:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28380:21:0::1;-1:-1:-1::0;;;;;28380:29:0::1;;28372:69;;;::::0;;-1:-1:-1;;;28372:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28462:53;28491:7;28500:8;28510:4;;28462:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;28462:28:0::1;::::0;-1:-1:-1;;;28462:53:0:i:1;:::-;28452:63;;28565:12;28534:7;28559:1;28542:7;:14;:18;28534:27;;;;;;;;;;;;;;:43;;28526:97;;;;-1:-1:-1::0;;;28526:97:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28634:139;28680:4;;28685:1;28680:7;;;;;;28634:139;28784:35;28790:7;28799:4;;28784:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;28813:4:0::1;::::0;-1:-1:-1;28784:5:0::1;::::0;-1:-1:-1;;28784:35:0:i:1;:::-;28836:4;-1:-1:-1::0;;;;;28830:20:0::1;;28851:7;28876:1;28859:7;:14;:18;28851:27;;;;;;;;;;;;;;28830:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28890:63;28921:2;28925:7;28950:1;28933:7;:14;:18;28925:27;;;;;;;;;;;;;;28890:30;:63::i;23806:714::-:0;24124:14;24151:12;24166:44;24189:7;24198:5;24205:4;24166:22;:44::i;:::-;24151:59;;24221:10;24234;:33;;24258:9;24234:33;;;-1:-1:-1;;24234:33:0;24278:78;;;-1:-1:-1;;;24278:78:0;;24304:10;24278:78;;;;24324:4;24278:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24221:46;;-1:-1:-1;;;;;;24278:25:0;;;;;:78;;;;;-1:-1:-1;;24278:78:0;;;;;;;;-1:-1:-1;24278:25:0;:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24379:133;24441:5;24448:9;24459:14;24475:12;24489:2;24493:8;24379:47;:133::i;:::-;24367:145;23806:714;-1:-1:-1;;;;;;;;;;;;;23806:714:0:o;28967:802::-;29180:21;29152:8;16640:15;16628:8;:27;;16620:62;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;;;;29238:4:::1;-1:-1:-1::0;;;;;29227:15:0::1;:4;;29232:1;29227:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29227:7:0::1;-1:-1:-1::0;;;;;29227:15:0::1;;29219:55;;;::::0;;-1:-1:-1;;;29219:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;29295:53;29323:7;29332:9;29343:4;;29295:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29295:27:0::1;::::0;-1:-1:-1;;;29295:53:0:i:1;:::-;29285:63;;29381:9;29367:7;29375:1;29367:10;;;;;;;;;;;;;;:23;;29359:73;;;;-1:-1:-1::0;;;29359:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29449:4;-1:-1:-1::0;;;;;29443:19:0::1;;29470:7;29478:1;29470:10;;;;;;;;;;;;;;29443:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;29507:4;-1:-1:-1::0;;;;;29501:20:0::1;;29522:49;29545:7;29554:4;;29559:1;29554:7;;;;;;29522:49;29573:7;29581:1;29573:10;;;;;;;;;;;;;;29501:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;29501:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;29501:83:0;29494:91:::1;;;;29596:24;29602:7;29611:4;;29596:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29617:2:0;;-1:-1:-1;29596:5:0::1;::::0;-1:-1:-1;;29596:24:0:i:1;:::-;29683:7;29691:1;29683:10;;;;;;;;;;;;;;29671:9;:22;29667:94;;;29695:66;29726:10;29750:7;29758:1;29750:10;;;;;;;;;;;;;;29738:9;:22;29695:30;:66::i;:::-;28967:802:::0;;;;;;;;:::o;34075:259::-;34228:13;34266:60;34293:9;34304;34315:10;34266:26;:60::i;25992:600::-;26216:21;26197:8;16640:15;16628:8;:27;;16620:62;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;;;;26260:53:::1;26288:7;26297:9;26308:4;;26260:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;26260:27:0::1;::::0;-1:-1:-1;;;26260:53:0:i:1;:::-;26250:63;;26346:11;26332:7;26340:1;26332:10;;;;;;;;;;;;;;:25;;26324:75;;;;-1:-1:-1::0;;;26324:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16531:38:::0;;;:::o;26598:689::-;26814:21;26786:8;16640:15;16628:8;:27;;16620:62;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;;;;26872:4:::1;-1:-1:-1::0;;;;;26861:15:0::1;:4;;26866:1;26861:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26861:7:0::1;-1:-1:-1::0;;;;;26861:15:0::1;;26853:55;;;::::0;;-1:-1:-1;;;26853:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;26929:54;26958:7;26967:9;26978:4;;26929:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;26929:28:0::1;::::0;-1:-1:-1;;;26929:54:0:i:1;:::-;26919:64;;27033:12;27002:7;27027:1;27010:7;:14;:18;27002:27;;;;;;;;;;;;;;:43;;26994:97;;;;-1:-1:-1::0;;;26994:97:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27108:4;-1:-1:-1::0;;;;;27102:19:0::1;;27129:7;27137:1;27129:10;;;;;;;;;;;;;;27102:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;27166:4;-1:-1:-1::0;;;;;27160:20:0::1;;27181:49;27204:7;27213:4;;27218:1;27213:7;;;;;;27181:49;27232:7;27240:1;27232:10;;;;;;;;;;;;;;27160:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;27160:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;27160:83:0;27153:91:::1;;;;27255:24;27261:7;27270:4;;27255:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27276:2:0;;-1:-1:-1;27255:5:0::1;::::0;-1:-1:-1;;27255:24:0:i:1;33613:186::-:0;33710:12;33742:49;33763:7;33772:8;33782;33742:20;:49::i;23093:707::-;23359:14;23340:8;16640:15;16628:8;:27;;16620:62;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;;;;23402:196:::1;23432:5;23452:4;23471:9;23495:14;23524:12;23559:4;23579:8;23402:15;:196::i;:::-;23386:212;;;;;;23609:85;23637:5;23644:2;23662:5;-1:-1:-1::0;;;;;23648:30:0::1;;23687:4;23648:45;;;;;;;;;;;;;-1:-1:-1::0;;;;;23648:45:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;23648:45:0;23609:27:::1;:85::i;:::-;23711:4;-1:-1:-1::0;;;;;23705:20:0::1;;23726:9;23705:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23747:45;23778:2;23782:9;23747:30;:45::i;20132:853::-:0;20386:12;20400;20367:8;16640:15;16628:8;:27;;16620:62;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;;;;20425:12:::1;20440:47;20463:7;20472:6;20480;20440:22;:47::i;:::-;20498:60;::::0;;-1:-1:-1;;;20498:60:0;;20530:10:::1;20498:60;::::0;::::1;::::0;-1:-1:-1;;;;;20498:31:0;::::1;:60:::0;;;;;;;;;;;;;;20425:62;;-1:-1:-1;20498:31:0;;::::1;::::0;:60;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20498:31:0;:60;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;20626:27:0::1;::::0;;;;;-1:-1:-1;;;;;20626:27:0;;::::1;;::::0;::::1;::::0;;;20596:12:::1;::::0;;;20626:23;;::::1;::::0;::::1;::::0;:27;;;;;;;;;;;20596:12;20626:23;:27;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;20626:27:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20626:27:0;-1:-1:-1;20665:14:0::1;20684:41;20710:6:::0;20718;20684:25:::1;:41::i;:::-;20664:61;;;20767:6;-1:-1:-1::0;;;;;20757:16:0::1;:6;-1:-1:-1::0;;;;;20757:16:0::1;;:58;;20798:7;20807;20757:58;;;20777:7;20786;20757:58;20736:79:::0;;-1:-1:-1;20736:79:0;-1:-1:-1;20834:21:0;;::::1;;20826:70;;;;-1:-1:-1::0;;;20826:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20926:10;20915:7;:21;;20907:70;;;;-1:-1:-1::0;;;20907:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16693:1;;;;20132:853:::0;;;;;;;;;;;:::o;16483:41::-;;;:::o;34342:251::-;34486:21;34532:53;34561:7;34570:8;34580:4;34532:28;:53::i;32725:844::-;32992:8;16640:15;16628:8;:27;;16620:62;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33051:4:0::1;33026:29;:4:::0;;-1:-1:-1;;33031:15:0;;33026:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33026:21:0::1;-1:-1:-1::0;;;;;33026:29:0::1;;33018:69;;;::::0;;-1:-1:-1;;;33018:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;33098:137;33144:4;;33149:1;33144:7;;;;;;33098:137;33246:55;33281:4;;33246:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;33295:4:0::1;::::0;-1:-1:-1;33246:34:0::1;::::0;-1:-1:-1;;33246:55:0:i:1;:::-;33312:14;33343:4;-1:-1:-1::0;;;;;33329:29:0::1;;33367:4;33329:44;;;;;;;;;;;;;-1:-1:-1::0;;;;;33329:44:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;33329:44:0;;-1:-1:-1;33392:25:0;;::::1;;33384:79;;;;-1:-1:-1::0;;;33384:79:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33480:4;-1:-1:-1::0;;;;;33474:20:0::1;;33495:9;33474:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33516:45;33547:2;33551:9;33516:30;:45::i;27293:820::-:0;27507:21;27479:8;16640:15;16628:8;:27;;16620:62;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27579:4:0::1;27554:29;:4:::0;;-1:-1:-1;;27559:15:0;;27554:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27554:21:0::1;-1:-1:-1::0;;;;;27554:29:0::1;;27546:69;;;::::0;;-1:-1:-1;;;27546:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27636:53;27664:7;27673:9;27684:4;;27636:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;27636:27:0::1;::::0;-1:-1:-1;;;27636:53:0:i:1;:::-;27626:63;;27722:11;27708:7;27716:1;27708:10;;;;;;;;;;;;;;:25;;27700:75;;;;-1:-1:-1::0;;;27700:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20991:673:::0;21228:16;21246:14;21209:8;16640:15;16628:8;:27;;16620:62;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;;;;21300:196:::1;21330:5;21350:4;21369:9;21393:14;21422:12;21457:4;21477:8;21300:15;:196::i;:::-;21273:223:::0;;-1:-1:-1;21273:223:0;-1:-1:-1;21507:51:0::1;21535:5:::0;21542:2;21273:223;21507:27:::1;:51::i;:::-;21575:4;-1:-1:-1::0;;;;;21569:20:0::1;;21590:9;21569:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21611:45;21642:2;21646:9;21611:30;:45::i;:::-;20991:673:::0;;;;;;;;;;:::o;18379:734::-;18667:12;18681;18695:14;18648:8;16640:15;16628:8;:27;;16620:62;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;;;;18743:85:::1;18757:6;18765;18773:14;18789;18805:10;18817;18743:13;:85::i;:::-;18722:106:::0;;-1:-1:-1;18722:106:0;-1:-1:-1;18839:12:0::1;18854:47;18877:7;18886:6:::0;18894;18854:22:::1;:47::i;:::-;18839:62;;18912:66;18944:6;18952:10;18964:4;18970:7;18912:31;:66::i;:::-;18989;19021:6;19029:10;19041:4;19047:7;18989:31;:66::i;:::-;19091:4;-1:-1:-1::0;;;;;19078:23:0::1;;19102:2;19078:27;;;;;;;;;;;;;-1:-1:-1::0;;;;;19078:27:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19078:27:0;18379:734;;;;-1:-1:-1;19078:27:0;;-1:-1:-1;18379:734:0;;-1:-1:-1;;;;;;;;;18379:734:0:o;19119:970::-;19372:16;19390:14;19406;19353:8;16640:15;16628:8;:27;;16620:62;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;-1:-1:-1;;;16620:62:0;;;;;;;;;;;;;;;19460:176:::1;19488:5;19508:4;19527:18;19560:9;19584:14;19613:12;19460:13;:176::i;:::-;19433:203:::0;;-1:-1:-1;19433:203:0;-1:-1:-1;19647:12:0::1;19662:44;19685:7;19694:5:::0;19701:4:::1;19662:22;:44::i;:::-;19647:59;;19717:69;19749:5;19756:10;19768:4;19774:11;19717:31;:69::i;:::-;19803:4;-1:-1:-1::0;;;;;19797:19:0::1;;19824:9;19797:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;19860:4;-1:-1:-1::0;;;;;19854:20:0::1;;19875:4;19881:9;19854:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;19854:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19854:37:0;19847:45:::1;;;;19928:4;-1:-1:-1::0;;;;;19915:23:0::1;;19939:2;19915:27;;;;;;;;;;;;;-1:-1:-1::0;;;;;19915:27:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19915:27:0;;-1:-1:-1;19993:9:0::1;:21:::0;-1:-1:-1;19989:92:0::1;;;20016:65;20047:10;20071:9;20059;:21;20016:30;:65::i;:::-;16693:1;19119:970:::0;;;;;;;;;;;:::o;5395:513::-;5488:14;5534:1;5523:8;:12;5515:66;;;;-1:-1:-1;;;5515:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5612:1;5600:9;:13;:31;;;;;5630:1;5617:10;:14;5600:31;5592:82;;;;-1:-1:-1;;;5592:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5685:20;5708:17;:8;5721:3;5708:12;:17::i;:::-;5685:40;-1:-1:-1;5736:14:0;5753:31;5685:40;5773:10;5753:19;:31::i;:::-;5736:48;-1:-1:-1;5795:16:0;5814:40;5838:15;5814:19;:9;5828:4;5814:13;:19::i;:::-;:23;;:40::i;:::-;5795:59;;5889:11;5877:9;:23;;;;;;;5395:513;-1:-1:-1;;;;;;;5395:513:0:o;7169:530::-;7270:21;7327:1;7312:4;:11;:16;;7304:57;;;;;-1:-1:-1;;;7304:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7393:4;:11;7382:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7382:23:0;;7372:33;;7446:9;7416:7;7441:1;7424:7;:14;:18;7416:27;;;;;;;;;;;;;;;;;:39;7480:11;;-1:-1:-1;;7480:15:0;7466:226;7497:5;;7466:226;;7525:14;7541:15;7560:42;7572:7;7581:4;7590:1;7586;:5;7581:11;;;;;;;;;;;;;;7594:4;7599:1;7594:7;;;;;;;;;;;;;;7560:11;:42::i;:::-;7524:78;;;;7634:46;7646:7;7654:1;7646:10;;;;;;;;;;;;;;7658:9;7669:10;7634:11;:46::i;:::-;7617:7;7629:1;7625;:5;7617:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;7504:3:0;7466:226;;;;7169:530;;;;;:::o;3918:478::-;4007:12;4033:14;4049;4067:26;4078:6;4086;4067:10;:26::i;:::-;4231:32;;;-1:-1:-1;;4231:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4221:43;;;;;;4134:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4124:262;;;;;;;;;3918:478;-1:-1:-1;;;;;3918:478:0:o;6579:509::-;6680:21;6737:1;6722:4;:11;:16;;6714:57;;;;;-1:-1:-1;;;6714:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;6803:4;:11;6792:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6792:23:0;;6782:33;;6839:8;6826:7;6834:1;6826:10;;;;;;;;;;;;;:21;;;;;6863:6;6858:223;6889:1;6875:4;:11;:15;6871:1;:19;6858:223;;;6913:14;6929:15;6948:42;6960:7;6969:4;6974:1;6969:7;;;;;;;;;;;;;;6978:4;6983:1;6987;6983:5;6978:11;;;;;;;6948:42;6912:78;;;;7022:47;7035:7;7043:1;7035:10;;;;;;;;;;;;;;7047:9;7058:10;7022:12;:47::i;:::-;7005:7;7013:1;7017;7013:5;7005:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;6892:3:0;;6858:223;;8670:402;8895:51;;;-1:-1:-1;;;;;8895:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8895:51:0;;;8884:63;;;;8849:12;;8863:17;;8884:10;;;;8895:51;8884:63;;;8895:51;8884:63;;8895:51;8884:63;;;;;;;;;;-1:-1:-1;;8884:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8848:99;;;;8966:7;:57;;;;-1:-1:-1;8978:11:0;;:16;;:44;;;9009:4;8998:24;;;;;;;;;;;;;;;-1:-1:-1;8998:24:0;8978:44;8958:106;;;;-1:-1:-1;;;8958:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8670:402;;;;;;:::o;24631:727::-;24738:6;24733:618;24764:1;24750:4;:11;:15;24746:1;:19;24733:618;;;24788:13;24803:14;24822:4;24827:1;24822:7;;;;;;;;;;;;;;24831:4;24836:1;24840;24836:5;24831:11;;;;;;;;;;;;;;24787:56;;;;24859:14;24878:40;24904:5;24911:6;24878:25;:40::i;:::-;24858:60;;;24933:14;24950:7;24958:1;24962;24958:5;24950:14;;;;;;;;;;;;;;24933:31;;24980:15;24997;25025:6;-1:-1:-1;;;;;25016:15:0;:5;-1:-1:-1;;;;;25016:15:0;;:61;;25058:9;25074:1;25016:61;;;25040:1;25044:9;25016:61;24979:98;;;;25092:10;25123:1;25109:4;:11;:15;25105:1;:19;:80;;25182:3;25105:80;;;25127:52;25150:7;25159:6;25167:4;25172:1;25176;25172:5;25167:11;;;;;;;;;;;;;;25127:22;:52::i;:::-;25092:93;;25213:46;25236:7;25245:5;25252:6;25213:22;:46::i;:::-;-1:-1:-1;;;;;25200:65:0;;25284:10;25296;25308:2;25322:1;25312:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25312:12:0;;25200:139;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25200:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24767:3:0;;;;;-1:-1:-1;24733:618:0;;-1:-1:-1;;;;;;;;24733:618:0;;;24631:727;;;:::o;29916:1209::-;30029:6;30024:1094;30055:1;30041:4;:11;:15;30037:1;:19;30024:1094;;;30079:13;30094:14;30113:4;30118:1;30113:7;;;;;;;;;;;;;;30122:4;30127:1;30131;30127:5;30122:11;;;;;;;;;;;;;;30078:56;;;;30150:14;30169:40;30195:5;30202:6;30169:25;:40::i;:::-;30149:60;;;30224:17;30257:46;30280:7;30289:5;30296:6;30257:22;:46::i;:::-;30224:80;;30319:16;30350:17;30438:13;30453;30471:4;-1:-1:-1;;;;;30471:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30471:18:0;;;;;;;30437:52;;;;;-1:-1:-1;30437:52:0;;-1:-1:-1;30505:17:0;;-1:-1:-1;;;;;30546:15:0;;;;;;;:61;;30588:8;30598;30546:61;;;30565:8;30575;30546:61;30504:103;;;;30636:63;30686:12;30650:5;-1:-1:-1;;;;;30636:30:0;;30675:4;30636:45;;;;;;;;;;;;;-1:-1:-1;;;;;30636:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;:63;30622:77;;30729:69;30757:11;30770:12;30784:13;30729:27;:69::i;:::-;30714:84;;30024:1094;;;;30829:15;30846;30874:6;-1:-1:-1;;;;;30865:15:0;:5;-1:-1:-1;;;;;30865:15:0;;:67;;30910:12;30929:1;30865:67;;;30889:1;30893:12;30865:67;30828:104;;;;30947:10;30978:1;30964:4;:11;:15;30960:1;:19;:80;;31037:3;30960:80;;;30982:52;31005:7;31014:6;31022:4;31027:1;31031;31027:5;31022:11;;;;;;;30982:52;31093:12;;;31103:1;31093:12;;;;;;;;;;31055:51;;;;;;;;;;;;;;;-1:-1:-1;;;;;31055:51:0;;;;;;;;;;;;;;;;;;;;;;30947:93;;-1:-1:-1;31055:9:0;;;;;;31065:10;;31077;;30947:93;;31093:12;;31055:51;;;;;;;;31093:12;;31055:51;;;;31093:12;;31055:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30058:3:0;;;;;-1:-1:-1;30024:1094:0;;-1:-1:-1;;;;;;;;;;30024:1094:0;;;29916:1209;;:::o;2938:129::-;3022:5;;;3017:16;;;;3009:50;;;;;-1:-1:-1;;;3009:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;9080:195;9188:12;;;9150;9188;;;;;;;;;-1:-1:-1;;;;;9167:7:0;;;9181:5;;9167:34;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9167:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9149:52;;;9220:7;9212:55;;;;-1:-1:-1;;;9212:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6029:468;6122:13;6168:1;6156:9;:13;6148:68;;;;-1:-1:-1;;;6148:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6247:1;6235:9;:13;:31;;;;;6265:1;6252:10;:14;6235:31;6227:82;;;;-1:-1:-1;;;6227:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6320:14;6337:34;6366:4;6337:24;:9;6351;6337:13;:24::i;:::-;:28;;:34::i;:::-;6320:51;-1:-1:-1;6382:16:0;6401:34;6431:3;6401:25;:10;6416:9;6401:14;:25::i;:34::-;6382:53;;6457:32;6487:1;6470:11;6458:9;:23;;;;;;;6457:29;:32::i;:::-;6446:43;6029:468;-1:-1:-1;;;;;;6029:468:0:o;4956:317::-;5038:12;5081:1;5071:7;:11;5063:59;;;;-1:-1:-1;;;5063:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5152:1;5141:8;:12;:28;;;;;5168:1;5157:8;:12;5141:28;5133:79;;;;-1:-1:-1;;;5133:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5257:8;5233:21;:7;5245:8;5233:11;:21::i;:::-;:32;;;;;;;4956:317;-1:-1:-1;;;;4956:317:0:o;8301:361::-;8496:45;;;-1:-1:-1;;;;;8496:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8485:57;;;;8450:12;;8464:17;;8485:10;;;;8496:45;8485:57;;;8496:45;8485:57;;8496:45;8485:57;;;;;;;;;;-1:-1:-1;;8485:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8449:93;;;;8561:7;:57;;;;-1:-1:-1;8573:11:0;;:16;;:44;;;8604:4;8593:24;;;;;;;;;;;;;;;-1:-1:-1;8593:24:0;8573:44;8553:101;;;;;-1:-1:-1;;;8553:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8301:361;;;;;:::o;3481:345::-;3556:14;3572;3617:6;-1:-1:-1;;;;;3607:16:0;:6;-1:-1:-1;;;;;3607:16:0;;;3599:64;;;;-1:-1:-1;;;3599:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3702:6;-1:-1:-1;;;;;3693:15:0;:6;-1:-1:-1;;;;;3693:15:0;;:53;;3731:6;3739;3693:53;;;3712:6;3720;3693:53;3674:72;;-1:-1:-1;3674:72:0;-1:-1:-1;;;;;;3765:20:0;;3757:61;;;;;-1:-1:-1;;;3757:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3481:345;;;;;:::o;16997:1376::-;17215:12;17229;17370:1;-1:-1:-1;;;;;17310:62:0;17326:7;-1:-1:-1;;;;;17310:32:0;;17343:6;17351;17310:48;;;;;;;;;;;;;-1:-1:-1;;;;;17310:48:0;;;;;;-1:-1:-1;;;;;17310:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17310:48:0;-1:-1:-1;;;;;17310:62:0;;17306:146;;;17405:7;-1:-1:-1;;;;;17389:35:0;;17425:6;17433;17389:51;;;;;;;;;;;;;-1:-1:-1;;;;;17389:51:0;;;;;;-1:-1:-1;;;;;17389:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17306:146:0;17463:13;17478;17495:51;17522:7;17531:6;17539;17495:26;:51::i;:::-;17462:84;;;;17561:8;17573:1;17561:13;:30;;;;-1:-1:-1;17578:13:0;;17561:30;17557:809;;;17630:14;;-1:-1:-1;17646:14:0;;-1:-1:-1;17557:809:0;;;17694:19;17716:56;17737:14;17753:8;17763;17716:20;:56::i;:::-;17694:78;;17809:14;17791;:32;17787:568;;17870:10;17852:14;:28;;17844:77;;;;-1:-1:-1;;;17844:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17962:14;;-1:-1:-1;17978:14:0;-1:-1:-1;17978:14:0;17787:568;;;18034:19;18056:56;18077:14;18093:8;18103;18056:20;:56::i;:::-;18034:78;;18156:14;18138;:32;;18131:40;;;;18216:10;18198:14;:28;;18190:77;;;;-1:-1:-1;;;18190:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18308:14;-1:-1:-1;18324:14:0;;-1:-1:-1;17787:568:0;17557:809;;16997:1376;;;;;;;;;;;:::o;3075:142::-;3127:6;3154;;;:30;;-1:-1:-1;;3169:5:0;;;3183:1;3178;3169:5;3178:1;3164:15;;;;;:20;3154:30;3146:63;;;;;-1:-1:-1;;;3146:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;2802:128;2886:5;;;2881:16;;;;2873:49;;;;;-1:-1:-1;;;2873:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;4454:389;4547:13;4562;4589:14;4608:26;4619:6;4627;4608:10;:26::i;:::-;4588:46;;;4646:13;4661;4692:32;4700:7;4709:6;4717;4692:7;:32::i;:::-;-1:-1:-1;;;;;4679:58:0;;:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4679:60:0;;;;;;;4645:94;;;;;-1:-1:-1;4645:94:0;;-1:-1:-1;;;;;;4773:16:0;;;;;;;:62;;4816:8;4826;4773:62;;;4793:8;4803;4773:62;4750:85;;;;-1:-1:-1;4454:389:0;-1:-1:-1;;;;;;;4454:389:0:o

Swarm Source

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