Contract 0xc6f863bcbecfd76cf17449573096f7afb2d8bd07 2

Contract Overview

Balance:
0 CRO

CRO Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xcbde827e49f9e57ee0ccd9a5a71c1bdb2a581b25167c98388fa736f581cf2435Swap Exact ETH F...132323892024-03-29 11:09:273 hrs 38 mins ago0x96955b77fffa3d1b40efd63c4723ec3db06ae5b1 IN  0xc6f863bcbecfd76cf17449573096f7afb2d8bd071 CRO1.050869650
0xfacb4d6b34a277d56b5733124cd7074c7dc8f5017f2b1822b2d4a4cf0efbfa48Remove Liquidity...131644262024-03-25 0:15:464 days 14 hrs ago0x8198c2f716c08b65e42bb1ebb11e43edc4721231 IN  0xc6f863bcbecfd76cf17449573096f7afb2d8bd070 CRO3.0401097786 5,084.85
0x920dc8a8b8fd5fdd511e291400174b227f64ee78c433580bd606b35d7147d1bcSwap Exact Token...131644142024-03-25 0:14:384 days 14 hrs ago0x7b61ba0cf9061c6846bb94a210918a7d8136181d IN  0xc6f863bcbecfd76cf17449573096f7afb2d8bd070 CRO1.9088227045 5,048.5
0xa4cca94370482bc8a3093b5acc6881b9697c6b52745830a3edb0361da20419e3Swap Exact ETH F...130672332024-03-18 16:22:5710 days 22 hrs ago0x8417896121c43302400bfa63acc3009d74ce66ec IN  0xc6f863bcbecfd76cf17449573096f7afb2d8bd071 CRO0.849758450
0xa75aa3651bbd23ea85909c8304d3d1d772d4139d28e7bc5899a3a2b837082bd4Swap Exact ETH F...130672222024-03-18 16:21:5510 days 22 hrs ago0x8417896121c43302400bfa63acc3009d74ce66ec IN  0xc6f863bcbecfd76cf17449573096f7afb2d8bd071 CRO0.849819050
0xad19c948d9a3e15ee4356a36c4a13dfbb602f1d2bed6c65270c3833a599e1f84Swap Exact Token...129426422024-03-10 14:34:5819 days 12 mins ago0x7b61ba0cf9061c6846bb94a210918a7d8136181d IN  0xc6f863bcbecfd76cf17449573096f7afb2d8bd070 CRO3.81877970
0x22bcb5e541976b7cc462a7e88292cdde985a77e64241d1b29b93159d2a07353fSwap Exact Token...129426262024-03-10 14:33:2919 days 14 mins ago0x7b61ba0cf9061c6846bb94a210918a7d8136181d IN  0xc6f863bcbecfd76cf17449573096f7afb2d8bd070 CRO3.81877970
0x2cf5c81477be2544d6e7dd3c10801c03847c0a5c6c8a56e4389005ca47ae9d43Swap Exact Token...129426092024-03-10 14:31:5419 days 16 mins ago0x7b61ba0cf9061c6846bb94a210918a7d8136181d IN  0xc6f863bcbecfd76cf17449573096f7afb2d8bd070 CRO3.81877970
0x15f40a7abe2dbbb21b1aaa0f47e5386491be42c228cff2d541cb495c905888b1Swap Exact Token...129338802024-03-10 1:02:4319 days 13 hrs ago0x4a4baabcad08f3d82c77d1ccf81532b6ab672d4e IN  0xc6f863bcbecfd76cf17449573096f7afb2d8bd070 CRO3.81877970
0x11408f6dbb15a6354e52fafc3b7e715d5a8615f601aacccb42b4e31aca14b573Swap Exact Token...129333402024-03-10 0:12:3119 days 14 hrs ago0x7b61ba0cf9061c6846bb94a210918a7d8136181d IN  0xc6f863bcbecfd76cf17449573096f7afb2d8bd070 CRO3.81890090
0x7accc74892465d98aa24e68cd79f4fab9cabbb3c8ef461d1786a0d1f0b157388Swap Exact Token...129332382024-03-10 0:02:4719 days 14 hrs ago0x7b61ba0cf9061c6846bb94a210918a7d8136181d IN  0xc6f863bcbecfd76cf17449573096f7afb2d8bd070 CRO3.81865850
0x27da24e05a974da03de60409c9bcf1328a6ba5a88b86fde46bebe4c69bc83c94Swap Exact Token...128719542024-03-06 1:24:1323 days 13 hrs ago0xc0d5d5f85c5f9cd27538018d3ffc7351d54fb464 IN  0xc6f863bcbecfd76cf17449573096f7afb2d8bd070 CRO3.811049146921 10,079.554048091
0x50b1810fd1361d80496b1efa6e647147b2dcea668a521d6a76f7964151e0d715Swap Exact Token...128719352024-03-06 1:22:2723 days 13 hrs ago0xc0d5d5f85c5f9cd27538018d3ffc7351d54fb464 IN  0xc6f863bcbecfd76cf17449573096f7afb2d8bd070 CRO3.817524245 10,097
0x7417b4fca6e27f08bf0dd632d97728e03cb19922557cd5bc9b03f77baa57012cSwap Exact Token...128719062024-03-06 1:19:4623 days 13 hrs ago0xc0d5d5f85c5f9cd27538018d3ffc7351d54fb464 IN  0xc6f863bcbecfd76cf17449573096f7afb2d8bd070 CRO3.81654514673 10,094.09
0x9fabf44ffd46c1f193b35ac41fb122d32ab41eb922b8ab936ca2bac3aea73ec5Swap Exact Token...128718952024-03-06 1:18:4523 days 13 hrs ago0xc0d5d5f85c5f9cd27538018d3ffc7351d54fb464 IN  0xc6f863bcbecfd76cf17449573096f7afb2d8bd070 CRO3.817645409 10,097
0x04992b3e6880bbc0180faf2e842b7b88ef2c48f207a10a927cbd84cba1d60167Swap Exact Token...128718682024-03-06 1:16:1523 days 13 hrs ago0xc0d5d5f85c5f9cd27538018d3ffc7351d54fb464 IN  0xc6f863bcbecfd76cf17449573096f7afb2d8bd070 CRO3.817645409 10,097
0xe9276fc92dc57bd3f7c8b7646a9ad9e6f445f345ced48e5f2a8b022e7601d9c1Swap Exact Token...126990552024-02-23 22:25:2534 days 16 hrs ago0x5abebcaad056c98582097321a061bbb0a1c0d5da IN  0xc6f863bcbecfd76cf17449573096f7afb2d8bd070 CRO3.808116963822 10,071.798940014
0x50cf9ea0ef369cc2cd10352d051b927b94d34e09c9e55de5221248dbbcb76300Swap Exact ETH F...125798302024-02-16 3:35:0642 days 11 hrs ago0x67c087ba6a6915d36a6ab21d6170359259d8aa2c IN  0xc6f863bcbecfd76cf17449573096f7afb2d8bd075 CRO1.644407517 10,097
0x5ec5438a33a474a27207d3944c632e526cb647118069f458b6c58005e8a17795Add Liquidity ET...125557252024-02-14 13:54:0744 days 53 mins ago0x6e2e6d3d1b287f87e0a0471c3eef27d4bd31563a IN  0xc6f863bcbecfd76cf17449573096f7afb2d8bd0750 CRO2.07784375495 10,002.425
0xb6aa3673a0aefe1243a333efa86b58492a6ace4a6f966777f4fd5fd2ce4a35bcSwap Exact ETH F...125556812024-02-14 13:49:5844 days 57 mins ago0x6e2e6d3d1b287f87e0a0471c3eef27d4bd31563a IN  0xc6f863bcbecfd76cf17449573096f7afb2d8bd0710 CRO1.64393359149 10,094.09
0x8dfd3e58aa34c435356186bee90de92246ad8dfc6c59b55d9ac072dd8139a6aaSwap Exact ETH F...125556742024-02-14 13:49:2144 days 58 mins ago0x6e2e6d3d1b287f87e0a0471c3eef27d4bd31563a IN  0xc6f863bcbecfd76cf17449573096f7afb2d8bd071 CRO1.644407517 10,097
0x102880af80e01977365b836b10028e89fdbfb319475b39b9030b123fa8c49fbfSwap Exact Token...125455682024-02-13 22:01:5044 days 16 hrs ago0x544513c7438b8c92b49f326c27f59c76633082ef IN  0xc6f863bcbecfd76cf17449573096f7afb2d8bd070 CRO3.7814171275 10,001.5
0xce3c7ad509458a1f30bc66bd437af29c81568cceb39e1b08f6820b1b6a0c834aSwap Exact Token...125135472024-02-11 19:58:2046 days 18 hrs ago0x93dc39518c84c8c8bc17f8ae61193a0cb9e9139e IN  0xc6f863bcbecfd76cf17449573096f7afb2d8bd070 CRO3.817524245 10,097
0x80ea8e95a64f75605bb278c32f00178111c13191d491453ef9f4eb308dd4adb7Add Liquidity ET...124813842024-02-09 17:43:0948 days 21 hrs ago0x8417896121c43302400bfa63acc3009d74ce66ec IN  0xc6f863bcbecfd76cf17449573096f7afb2d8bd07100 CRO2.17309580
0x06251613e06946bbb9345000e040c850e975ee95354eacd4e0b52e3d1965a970Swap Exact ETH F...123415022024-01-31 15:14:3957 days 23 hrs ago0x8417896121c43302400bfa63acc3009d74ce66ec IN  0xc6f863bcbecfd76cf17449573096f7afb2d8bd075 CRO1.69975930
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xcbde827e49f9e57ee0ccd9a5a71c1bdb2a581b25167c98388fa736f581cf2435132323892024-03-29 11:09:273 hrs 38 mins ago 0xc6f863bcbecfd76cf17449573096f7afb2d8bd07 Cronos: WCRO Token1 CRO
0xfacb4d6b34a277d56b5733124cd7074c7dc8f5017f2b1822b2d4a4cf0efbfa48131644262024-03-25 0:15:464 days 14 hrs ago 0xc6f863bcbecfd76cf17449573096f7afb2d8bd070x8198c2f716c08b65e42bb1ebb11e43edc47212312,711.3186459040385637 CRO
0xfacb4d6b34a277d56b5733124cd7074c7dc8f5017f2b1822b2d4a4cf0efbfa48131644262024-03-25 0:15:464 days 14 hrs ago Cronos: WCRO Token 0xc6f863bcbecfd76cf17449573096f7afb2d8bd072,711.3186459040385637 CRO
0x920dc8a8b8fd5fdd511e291400174b227f64ee78c433580bd606b35d7147d1bc131644142024-03-25 0:14:384 days 14 hrs ago 0xc6f863bcbecfd76cf17449573096f7afb2d8bd070x7b61ba0cf9061c6846bb94a210918a7d8136181d346.913699821434761206 CRO
0x920dc8a8b8fd5fdd511e291400174b227f64ee78c433580bd606b35d7147d1bc131644142024-03-25 0:14:384 days 14 hrs ago Cronos: WCRO Token 0xc6f863bcbecfd76cf17449573096f7afb2d8bd07346.913699821434761206 CRO
0xa4cca94370482bc8a3093b5acc6881b9697c6b52745830a3edb0361da20419e3130672332024-03-18 16:22:5710 days 22 hrs ago 0xc6f863bcbecfd76cf17449573096f7afb2d8bd07 Cronos: WCRO Token1 CRO
0xa75aa3651bbd23ea85909c8304d3d1d772d4139d28e7bc5899a3a2b837082bd4130672222024-03-18 16:21:5510 days 22 hrs ago 0xc6f863bcbecfd76cf17449573096f7afb2d8bd07 Cronos: WCRO Token1 CRO
0xad19c948d9a3e15ee4356a36c4a13dfbb602f1d2bed6c65270c3833a599e1f84129426422024-03-10 14:34:5819 days 12 mins ago 0xc6f863bcbecfd76cf17449573096f7afb2d8bd070x7b61ba0cf9061c6846bb94a210918a7d8136181d424.335318514113561045 CRO
0xad19c948d9a3e15ee4356a36c4a13dfbb602f1d2bed6c65270c3833a599e1f84129426422024-03-10 14:34:5819 days 12 mins ago Cronos: WCRO Token 0xc6f863bcbecfd76cf17449573096f7afb2d8bd07424.335318514113561045 CRO
0x22bcb5e541976b7cc462a7e88292cdde985a77e64241d1b29b93159d2a07353f129426262024-03-10 14:33:2919 days 14 mins ago 0xc6f863bcbecfd76cf17449573096f7afb2d8bd070x7b61ba0cf9061c6846bb94a210918a7d8136181d530.941190837362340576 CRO
0x22bcb5e541976b7cc462a7e88292cdde985a77e64241d1b29b93159d2a07353f129426262024-03-10 14:33:2919 days 14 mins ago Cronos: WCRO Token 0xc6f863bcbecfd76cf17449573096f7afb2d8bd07530.941190837362340576 CRO
0x2cf5c81477be2544d6e7dd3c10801c03847c0a5c6c8a56e4389005ca47ae9d43129426092024-03-10 14:31:5419 days 16 mins ago 0xc6f863bcbecfd76cf17449573096f7afb2d8bd070x7b61ba0cf9061c6846bb94a210918a7d8136181d683.511074044454886934 CRO
0x2cf5c81477be2544d6e7dd3c10801c03847c0a5c6c8a56e4389005ca47ae9d43129426092024-03-10 14:31:5419 days 16 mins ago Cronos: WCRO Token 0xc6f863bcbecfd76cf17449573096f7afb2d8bd07683.511074044454886934 CRO
0x15f40a7abe2dbbb21b1aaa0f47e5386491be42c228cff2d541cb495c905888b1129338802024-03-10 1:02:4319 days 13 hrs ago 0xc6f863bcbecfd76cf17449573096f7afb2d8bd070x4a4baabcad08f3d82c77d1ccf81532b6ab672d4e49.464950637908189319 CRO
0x15f40a7abe2dbbb21b1aaa0f47e5386491be42c228cff2d541cb495c905888b1129338802024-03-10 1:02:4319 days 13 hrs ago Cronos: WCRO Token 0xc6f863bcbecfd76cf17449573096f7afb2d8bd0749.464950637908189319 CRO
0x11408f6dbb15a6354e52fafc3b7e715d5a8615f601aacccb42b4e31aca14b573129333402024-03-10 0:12:3119 days 14 hrs ago 0xc6f863bcbecfd76cf17449573096f7afb2d8bd070x7b61ba0cf9061c6846bb94a210918a7d8136181d1,405.185987214169628035 CRO
0x11408f6dbb15a6354e52fafc3b7e715d5a8615f601aacccb42b4e31aca14b573129333402024-03-10 0:12:3119 days 14 hrs ago Cronos: WCRO Token 0xc6f863bcbecfd76cf17449573096f7afb2d8bd071,405.185987214169628035 CRO
0x7accc74892465d98aa24e68cd79f4fab9cabbb3c8ef461d1786a0d1f0b157388129332382024-03-10 0:02:4719 days 14 hrs ago 0xc6f863bcbecfd76cf17449573096f7afb2d8bd070x7b61ba0cf9061c6846bb94a210918a7d8136181d50.589977613990007594 CRO
0x7accc74892465d98aa24e68cd79f4fab9cabbb3c8ef461d1786a0d1f0b157388129332382024-03-10 0:02:4719 days 14 hrs ago Cronos: WCRO Token 0xc6f863bcbecfd76cf17449573096f7afb2d8bd0750.589977613990007594 CRO
0x27da24e05a974da03de60409c9bcf1328a6ba5a88b86fde46bebe4c69bc83c94128719542024-03-06 1:24:1323 days 13 hrs ago 0xc6f863bcbecfd76cf17449573096f7afb2d8bd070xc0d5d5f85c5f9cd27538018d3ffc7351d54fb464550.007145070162957242 CRO
0x27da24e05a974da03de60409c9bcf1328a6ba5a88b86fde46bebe4c69bc83c94128719542024-03-06 1:24:1323 days 13 hrs ago Cronos: WCRO Token 0xc6f863bcbecfd76cf17449573096f7afb2d8bd07550.007145070162957242 CRO
0x50b1810fd1361d80496b1efa6e647147b2dcea668a521d6a76f7964151e0d715128719352024-03-06 1:22:2723 days 13 hrs ago 0xc6f863bcbecfd76cf17449573096f7afb2d8bd070xc0d5d5f85c5f9cd27538018d3ffc7351d54fb464309.014807358152947032 CRO
0x50b1810fd1361d80496b1efa6e647147b2dcea668a521d6a76f7964151e0d715128719352024-03-06 1:22:2723 days 13 hrs ago Cronos: WCRO Token 0xc6f863bcbecfd76cf17449573096f7afb2d8bd07309.014807358152947032 CRO
0x7417b4fca6e27f08bf0dd632d97728e03cb19922557cd5bc9b03f77baa57012c128719062024-03-06 1:19:4623 days 13 hrs ago 0xc6f863bcbecfd76cf17449573096f7afb2d8bd070xc0d5d5f85c5f9cd27538018d3ffc7351d54fb464164.263121330315363059 CRO
0x7417b4fca6e27f08bf0dd632d97728e03cb19922557cd5bc9b03f77baa57012c128719062024-03-06 1:19:4623 days 13 hrs ago Cronos: WCRO Token 0xc6f863bcbecfd76cf17449573096f7afb2d8bd07164.263121330315363059 CRO
[ Download CSV Export 
Index Block
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GalaxyRouter02

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU LGPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-09-10
*/

/**
 *Submitted for verification at cronoscan.com on 2022-02-22
*/

// File contracts/libraries/TransferHelper.sol

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

pragma solidity >=0.6.0;

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

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

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

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


// File contracts/interfaces/IGalaxyRouter02.sol

pragma solidity >=0.6.2;
interface IGalaxyRouter02 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapFeeReward() external pure returns (address);

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

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut, uint swapFee) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut, uint swapFee) 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);

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

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


// File contracts/interfaces/IGalaxyPair.sol

pragma solidity >=0.5.0;

interface IGalaxyPair {
    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 swapFee() external view returns (uint32);

    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;
    function setSwapFee(uint32) external;
}


// File contracts/libraries/SafeMath.sol

pragma solidity =0.6.6;

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

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

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

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


// File contracts/libraries/GalaxyLibrary.sol

pragma solidity >=0.5.0;


library GalaxyLibrary {
    using SafeMath for uint;

    // returns sorted token addresses, used to handle return values from pairs sorted in this order
    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
        require(tokenA != tokenB, 'GalaxyLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'GalaxyLibrary: 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'02187d9cc4d540d181b3632c4207feed3da9d2a2879359c6c79d63863b2b107f' // init code hash
            ))));
    }

    function getSwapFee(address factory, address tokenA, address tokenB) internal view returns (uint swapFee) {
        swapFee = IGalaxyPair(pairFor(factory, tokenA, tokenB)).swapFee();
    }

    // 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,) = IGalaxyPair(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, 'GalaxyLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'GalaxyLibrary: 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, uint swapFee) internal pure returns (uint amountOut) {
        require(amountIn > 0, 'GalaxyLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'GalaxyLibrary: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(uint(10000).sub(swapFee));
        uint numerator = amountInWithFee.mul(reserveOut);
        uint denominator = reserveIn.mul(10000).add(amountInWithFee);
        amountOut = numerator / denominator;
    }

    // given an output amount of an asset and pair reserves, returns a required input amount of the other asset
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut, uint swapFee) internal pure returns (uint amountIn) {
        require(amountOut > 0, 'GalaxyLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'GalaxyLibrary: INSUFFICIENT_LIQUIDITY');
        uint numerator = reserveIn.mul(amountOut).mul(10000);
        uint denominator = reserveOut.sub(amountOut).mul(uint(10000).sub(swapFee));
        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, 'GalaxyLibrary: 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, getSwapFee(factory, path[i], path[i + 1]));
        }
    }

    // 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, 'GalaxyLibrary: 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, getSwapFee(factory, path[i - 1], path[i]));
        }
    }
    
}

// File contracts/interfaces/IERC20.sol

pragma solidity >=0.5.0;

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

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

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


// File contracts/interfaces/IWETH.sol

pragma solidity >=0.5.0;

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


// File contracts/libraries/Babylonian.sol

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

pragma solidity >=0.4.0;

// computes square roots using the babylonian method
// https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method
library Babylonian {
    // credit for this implementation goes to
    // https://github.com/abdk-consulting/abdk-libraries-solidity/blob/master/ABDKMath64x64.sol#L687
    function sqrt(uint256 x) internal pure returns (uint256) {
        if (x == 0) return 0;
        // this block is equivalent to r = uint256(1) << (BitMath.mostSignificantBit(x) / 2);
        // however that code costs significantly more gas
        uint256 xx = x;
        uint256 r = 1;
        if (xx >= 0x100000000000000000000000000000000) {
            xx >>= 128;
            r <<= 64;
        }
        if (xx >= 0x10000000000000000) {
            xx >>= 64;
            r <<= 32;
        }
        if (xx >= 0x100000000) {
            xx >>= 32;
            r <<= 16;
        }
        if (xx >= 0x10000) {
            xx >>= 16;
            r <<= 8;
        }
        if (xx >= 0x100) {
            xx >>= 8;
            r <<= 4;
        }
        if (xx >= 0x10) {
            xx >>= 4;
            r <<= 2;
        }
        if (xx >= 0x8) {
            r <<= 1;
        }
        r = (r + x / r) >> 1;
        r = (r + x / r) >> 1;
        r = (r + x / r) >> 1;
        r = (r + x / r) >> 1;
        r = (r + x / r) >> 1;
        r = (r + x / r) >> 1;
        r = (r + x / r) >> 1; // Seven iterations should be enough
        uint256 r1 = x / r;
        return (r < r1 ? r : r1);
    }
}


// File contracts/libraries/FullMath.sol

// SPDX-License-Identifier: CC-BY-4.0
pragma solidity >=0.4.0;

// taken from https://medium.com/coinmonks/math-in-solidity-part-3-percents-and-proportions-4db014e080b1
// license is CC-BY-4.0
library FullMath {
    function fullMul(uint256 x, uint256 y) internal pure returns (uint256 l, uint256 h) {
        uint256 mm = mulmod(x, y, uint256(-1));
        l = x * y;
        h = mm - l;
        if (mm < l) h -= 1;
    }

    function fullDiv(
        uint256 l,
        uint256 h,
        uint256 d
    ) private pure returns (uint256) {
        uint256 pow2 = d & -d;
        d /= pow2;
        l /= pow2;
        l += h * ((-pow2) / pow2 + 1);
        uint256 r = 1;
        r *= 2 - d * r;
        r *= 2 - d * r;
        r *= 2 - d * r;
        r *= 2 - d * r;
        r *= 2 - d * r;
        r *= 2 - d * r;
        r *= 2 - d * r;
        r *= 2 - d * r;
        return l * r;
    }

    function mulDiv(
        uint256 x,
        uint256 y,
        uint256 d
    ) internal pure returns (uint256) {
        (uint256 l, uint256 h) = fullMul(x, y);

        uint256 mm = mulmod(x, y, d);
        if (mm > l) h -= 1;
        l -= mm;

        if (h == 0) return l / d;

        require(h < d, 'FullMath: FULLDIV_OVERFLOW');
        return fullDiv(l, h, d);
    }
}

// File contracts/GalaxyRouter02.sol

pragma solidity =0.6.6;

interface IGalaxyFactory {
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function createPair(address tokenA, address tokenB) external returns (address pair);
}


contract Ownable {
    address private _owner;

    constructor () internal {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    function isOwner(address account) public view returns (bool) {
        return account == _owner;
    }

    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }


    modifier onlyOwner() {
        require(isOwner(msg.sender), "Ownable: caller is not the owner");
        _;
    }

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
}

interface ISwapFeeReward {
    function swap(address account, address input, address output, uint256 amount) external returns (bool);
}

contract GalaxyRouter02 is IGalaxyRouter02, Ownable {
    using SafeMath for uint;

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

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

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

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

    function setSwapFeeReward(address _swapFeeReward) public onlyOwner {
        swapFeeReward = _swapFeeReward;
    }

    // **** 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 (IGalaxyFactory(factory).getPair(tokenA, tokenB) == address(0)) {
            IGalaxyFactory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = GalaxyLibrary.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = GalaxyLibrary.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'GalaxyV2Router: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = GalaxyLibrary.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'GalaxyV2Router: 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 = GalaxyLibrary.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IGalaxyPair(pair).mint(to);
    }
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external virtual override payable ensure(deadline) returns (uint amountToken, uint amountETH, uint liquidity) {
        (amountToken, amountETH) = _addLiquidity(
            token,
            WETH,
            amountTokenDesired,
            msg.value,
            amountTokenMin,
            amountETHMin
        );
        address pair = GalaxyLibrary.pairFor(factory, token, WETH);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWETH(WETH).deposit{value: amountETH}();
        assert(IWETH(WETH).transfer(pair, amountETH));
        liquidity = IGalaxyPair(pair).mint(to);
        // refund dust eth, if any
        if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH);
    }

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

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

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

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

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

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

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

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

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

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"},{"internalType":"uint256","name":"swapFee","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":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_swapFeeReward","type":"address"}],"name":"setSwapFeeReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapFeeReward","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405234801561001057600080fd5b5060405162004e8438038062004e848339818101604052604081101561003557600080fd5b508051602090910151600080546001600160a01b03191633178082556040516001600160a01b039190911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c614cb6620001ce600039806101e15280610e5e5280610e995280610f7b5280611199528061153752806116c25280611b2d5280611c275280611cdd5280611dab5280611ef15280611f7952806121cf5280612252528061230152806123cd528061246252806124d652806129d45280612cad5280612d035280612d375280612dab5280612f4b528061308e528061311652508061100952806110e0528061125f528061129852806113e752806115c552806116a052806118105280611e3e5280611fab5280612101528061250852806127615280612959528061298252806129b25280612b1f5280612ce15280612fde52806131485280613a3c5280613a7f5280613f8a52806142195280614559528061460752806146875250614cb66000f3fe6080604052600436106101d15760003560e01c80638da5cb5b116100f7578063c45a015511610095578063f2fde38b11610064578063f2fde38b14610ce1578063f305d71914610d14578063fb3bdb4114610d5a578063fbbeedf114610dde5761020a565b8063c45a015514610b24578063d06ca61f14610b39578063ded9382a14610bee578063e8e3370014610c615761020a565b8063ad615dec116100d1578063ad615dec146109ba578063af2979eb146109f0578063b6f9de9514610a43578063baa2abde14610ac75761020a565b80638da5cb5b1461095f578063a3ddb30b14610990578063ad5c4648146109a55761020a565b806352707d8c1161016f578063715018a61161013e578063715018a61461079a578063791ac947146107af5780637ff36ab5146108455780638803dbee146108c95761020a565b806352707d8c14610607578063571fd012146106555780635b0d5984146106915780635c11d795146107045761020a565b80632195995c116101ab5780632195995c146104165780632f54bf6e1461049457806338ed1739146104db5780634a25d94a146105715761020a565b806302751cec1461020f57806318cbafe51461027b5780631f00ca74146103615761020a565b3661020a57336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461020857fe5b005b600080fd5b34801561021b57600080fd5b50610262600480360360c081101561023257600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610e11565b6040805192835260208301919091528051918290030190f35b34801561028757600080fd5b50610311600480360360a081101561029e57600080fd5b813591602081013591810190606081016040820135600160201b8111156102c457600080fd5b8201836020820111156102d657600080fd5b803590602001918460208302840111600160201b831117156102f757600080fd5b91935091506001600160a01b038135169060200135610f2b565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561034d578181015183820152602001610335565b505050509050019250505060405180910390f35b34801561036d57600080fd5b506103116004803603604081101561038457600080fd5b81359190810190604081016020820135600160201b8111156103a557600080fd5b8201836020820111156103b757600080fd5b803590602001918460208302840111600160201b831117156103d857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611258945050505050565b34801561042257600080fd5b50610262600480360361016081101561043a57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561128e565b3480156104a057600080fd5b506104c7600480360360208110156104b757600080fd5b50356001600160a01b0316611388565b604080519115158252519081900360200190f35b3480156104e757600080fd5b50610311600480360360a08110156104fe57600080fd5b813591602081013591810190606081016040820135600160201b81111561052457600080fd5b82018360208201111561053657600080fd5b803590602001918460208302840111600160201b8311171561055757600080fd5b91935091506001600160a01b03813516906020013561139c565b34801561057d57600080fd5b50610311600480360360a081101561059457600080fd5b813591602081013591810190606081016040820135600160201b8111156105ba57600080fd5b8201836020820111156105cc57600080fd5b803590602001918460208302840111600160201b831117156105ed57600080fd5b91935091506001600160a01b0381351690602001356114e7565b34801561061357600080fd5b506106436004803603608081101561062a57600080fd5b5080359060208101359060408101359060600135611673565b60408051918252519081900360200190f35b34801561066157600080fd5b506106436004803603608081101561067857600080fd5b508035906020810135906040810135906060013561168a565b34801561069d57600080fd5b5061064360048036036101408110156106b557600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611698565b34801561071057600080fd5b50610208600480360360a081101561072757600080fd5b813591602081013591810190606081016040820135600160201b81111561074d57600080fd5b82018360208201111561075f57600080fd5b803590602001918460208302840111600160201b8311171561078057600080fd5b91935091506001600160a01b0381351690602001356117a6565b3480156107a657600080fd5b50610208611a3b565b3480156107bb57600080fd5b50610208600480360360a08110156107d257600080fd5b813591602081013591810190606081016040820135600160201b8111156107f857600080fd5b82018360208201111561080a57600080fd5b803590602001918460208302840111600160201b8311171561082b57600080fd5b91935091506001600160a01b038135169060200135611adf565b6103116004803603608081101561085b57600080fd5b81359190810190604081016020820135600160201b81111561087c57600080fd5b82018360208201111561088e57600080fd5b803590602001918460208302840111600160201b831117156108af57600080fd5b91935091506001600160a01b038135169060200135611d63565b3480156108d557600080fd5b50610311600480360360a08110156108ec57600080fd5b813591602081013591810190606081016040820135600160201b81111561091257600080fd5b82018360208201111561092457600080fd5b803590602001918460208302840111600160201b8311171561094557600080fd5b91935091506001600160a01b0381351690602001356120b6565b34801561096b57600080fd5b506109746121af565b604080516001600160a01b039092168252519081900360200190f35b34801561099c57600080fd5b506109746121be565b3480156109b157600080fd5b506109746121cd565b3480156109c657600080fd5b50610643600480360360608110156109dd57600080fd5b50803590602081013590604001356121f1565b3480156109fc57600080fd5b50610643600480360360c0811015610a1357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612206565b61020860048036036080811015610a5957600080fd5b81359190810190604081016020820135600160201b811115610a7a57600080fd5b820183602082011115610a8c57600080fd5b803590602001918460208302840111600160201b83111715610aad57600080fd5b91935091506001600160a01b038135169060200135612387565b348015610ad357600080fd5b50610262600480360360e0811015610aea57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612713565b348015610b3057600080fd5b50610974612957565b348015610b4557600080fd5b5061031160048036036040811015610b5c57600080fd5b81359190810190604081016020820135600160201b811115610b7d57600080fd5b820183602082011115610b8f57600080fd5b803590602001918460208302840111600160201b83111715610bb057600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061297b945050505050565b348015610bfa57600080fd5b506102626004803603610140811015610c1257600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356129a8565b348015610c6d57600080fd5b50610cc36004803603610100811015610c8557600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612abc565b60408051938452602084019290925282820152519081900360600190f35b348015610ced57600080fd5b5061020860048036036020811015610d0457600080fd5b50356001600160a01b0316612bf8565b610cc3600480360360c0811015610d2a57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612c5e565b61031160048036036080811015610d7057600080fd5b81359190810190604081016020820135600160201b811115610d9157600080fd5b820183602082011115610da357600080fd5b803590602001918460208302840111600160201b83111715610dc457600080fd5b91935091506001600160a01b038135169060200135612f03565b348015610dea57600080fd5b5061020860048036036020811015610e0157600080fd5b50356001600160a01b0316613285565b6000808242811015610e58576040805162461bcd60e51b81526020600482015260176024820152600080516020614be7833981519152604482015290519081900360640190fd5b610e87897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612713565b9093509150610e97898685613301565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610efd57600080fd5b505af1158015610f11573d6000803e3d6000fd5b50505050610f1f8583613455565b50965096945050505050565b60608142811015610f71576040805162461bcd60e51b81526020600482015260176024820152600080516020614be7833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610fab57fe5b905060200201356001600160a01b03166001600160a01b031614611004576040805162461bcd60e51b815260206004820152601c6024820152600080516020614aee833981519152604482015290519081900360640190fd5b6110627f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061354d92505050565b9150868260018451038151811061107557fe5b602002602001015110156110ba5760405162461bcd60e51b815260040180806020018281038252602a815260200180614ac4602a913960400191505060405180910390fd5b611158868660008181106110ca57fe5b905060200201356001600160a01b03163361113e7f00000000000000000000000000000000000000000000000000000000000000008a8a600081811061110c57fe5b905060200201356001600160a01b03168b8b600181811061112957fe5b905060200201356001600160a01b03166136cd565b8560008151811061114b57fe5b602002602001015161378d565b611197828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506138ea915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836001855103815181106111d657fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561121457600080fd5b505af1158015611228573d6000803e3d6000fd5b5050505061124d848360018551038151811061124057fe5b6020026020010151613455565b509695505050505050565b60606112857f00000000000000000000000000000000000000000000000000000000000000008484613bd3565b90505b92915050565b60008060006112be7f00000000000000000000000000000000000000000000000000000000000000008f8f6136cd565b90506000876112cd578c6112d1565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561134757600080fd5b505af115801561135b573d6000803e3d6000fd5b5050505061136e8f8f8f8f8f8f8f612713565b809450819550505050509b509b9950505050505050505050565b6000546001600160a01b0390811691161490565b606081428110156113e2576040805162461bcd60e51b81526020600482015260176024820152600080516020614be7833981519152604482015290519081900360640190fd5b6114407f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061354d92505050565b9150868260018451038151811061145357fe5b602002602001015110156114985760405162461bcd60e51b815260040180806020018281038252602a815260200180614ac4602a913960400191505060405180910390fd5b6114a8868660008181106110ca57fe5b61124d828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506138ea915050565b6060814281101561152d576040805162461bcd60e51b81526020600482015260176024820152600080516020614be7833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061156757fe5b905060200201356001600160a01b03166001600160a01b0316146115c0576040805162461bcd60e51b815260206004820152601c6024820152600080516020614aee833981519152604482015290519081900360640190fd5b61161e7f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613bd392505050565b9150868260008151811061162e57fe5b602002602001015111156110ba5760405162461bcd60e51b8152600401808060200182810382526026815260200180614b986026913960400191505060405180910390fd5b600061168185858585613d32565b95945050505050565b600061168185858585613e33565b6000806116e67f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006136cd565b90506000866116f5578b6116f9565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561176f57600080fd5b505af1158015611783573d6000803e3d6000fd5b505050506117958d8d8d8d8d8d612206565b9d9c50505050505050505050505050565b80428110156117ea576040805162461bcd60e51b81526020600482015260176024820152600080516020614be7833981519152604482015290519081900360640190fd5b61185f858560008181106117fa57fe5b905060200201356001600160a01b0316336118597f00000000000000000000000000000000000000000000000000000000000000008989600081811061183c57fe5b905060200201356001600160a01b03168a8a600181811061112957fe5b8a61378d565b60008585600019810181811061187157fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156118d657600080fd5b505afa1580156118ea573d6000803e3d6000fd5b505050506040513d602081101561190057600080fd5b50516040805160208881028281018201909352888252929350611942929091899189918291850190849080828437600092019190915250889250613f33915050565b866119f4828888600019810181811061195757fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156119bc57600080fd5b505afa1580156119d0573d6000803e3d6000fd5b505050506040513d60208110156119e657600080fd5b50519063ffffffff61434e16565b1015611a315760405162461bcd60e51b815260040180806020018281038252602a815260200180614ac4602a913960400191505060405180910390fd5b5050505050505050565b611a4433611388565b611a95576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b8042811015611b23576040805162461bcd60e51b81526020600482015260176024820152600080516020614be7833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001685856000198101818110611b5d57fe5b905060200201356001600160a01b03166001600160a01b031614611bb6576040805162461bcd60e51b815260206004820152601c6024820152600080516020614aee833981519152604482015290519081900360640190fd5b611bc6858560008181106117fa57fe5b611c04858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613f33915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611c6e57600080fd5b505afa158015611c82573d6000803e3d6000fd5b505050506040513d6020811015611c9857600080fd5b5051905086811015611cdb5760405162461bcd60e51b815260040180806020018281038252602a815260200180614ac4602a913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611d4157600080fd5b505af1158015611d55573d6000803e3d6000fd5b50505050611a318482613455565b60608142811015611da9576040805162461bcd60e51b81526020600482015260176024820152600080516020614be7833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611de057fe5b905060200201356001600160a01b03166001600160a01b031614611e39576040805162461bcd60e51b815260206004820152601c6024820152600080516020614aee833981519152604482015290519081900360640190fd5b611e977f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061354d92505050565b91508682600184510381518110611eaa57fe5b60200260200101511015611eef5760405162461bcd60e51b815260040180806020018281038252602a815260200180614ac4602a913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611f2b57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611f5e57600080fd5b505af1158015611f72573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611fd77f00000000000000000000000000000000000000000000000000000000000000008989600081811061183c57fe5b84600081518110611fe457fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561203b57600080fd5b505af115801561204f573d6000803e3d6000fd5b505050506040513d602081101561206557600080fd5b505161206d57fe5b6120ac828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506138ea915050565b5095945050505050565b606081428110156120fc576040805162461bcd60e51b81526020600482015260176024820152600080516020614be7833981519152604482015290519081900360640190fd5b61215a7f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613bd392505050565b9150868260008151811061216a57fe5b602002602001015111156114985760405162461bcd60e51b8152600401808060200182810382526026815260200180614b986026913960400191505060405180910390fd5b6000546001600160a01b031690565b6001546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006121fe84848461439e565b949350505050565b6000814281101561224c576040805162461bcd60e51b81526020600482015260176024820152600080516020614be7833981519152604482015290519081900360640190fd5b61227b887f00000000000000000000000000000000000000000000000000000000000000008989893089612713565b604080516370a0823160e01b815230600482015290519194506122ff92508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b1580156122ce57600080fd5b505afa1580156122e2573d6000803e3d6000fd5b505050506040513d60208110156122f857600080fd5b5051613301565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561236557600080fd5b505af1158015612379573d6000803e3d6000fd5b5050505061124d8483613455565b80428110156123cb576040805162461bcd60e51b81526020600482015260176024820152600080516020614be7833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168585600081811061240257fe5b905060200201356001600160a01b03166001600160a01b03161461245b576040805162461bcd60e51b815260206004820152601c6024820152600080516020614aee833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156124bb57600080fd5b505af11580156124cf573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6125347f00000000000000000000000000000000000000000000000000000000000000008989600081811061183c57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561258457600080fd5b505af1158015612598573d6000803e3d6000fd5b505050506040513d60208110156125ae57600080fd5b50516125b657fe5b6000868660001981018181106125c857fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561262d57600080fd5b505afa158015612641573d6000803e3d6000fd5b505050506040513d602081101561265757600080fd5b505160408051602089810282810182019093528982529293506126999290918a918a918291850190849080828437600092019190915250899250613f33915050565b876119f482898960001981018181106126ae57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156119bc57600080fd5b600080824281101561275a576040805162461bcd60e51b81526020600482015260176024820152600080516020614be7833981519152604482015290519081900360640190fd5b60006127877f00000000000000000000000000000000000000000000000000000000000000008c8c6136cd565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b1580156127e257600080fd5b505af11580156127f6573d6000803e3d6000fd5b505050506040513d602081101561280c57600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561285957600080fd5b505af115801561286d573d6000803e3d6000fd5b505050506040513d604081101561288357600080fd5b5080516020909101519092509050600061289d8e8e61444a565b509050806001600160a01b03168e6001600160a01b0316146128c05781836128c3565b82825b90975095508a8710156129075760405162461bcd60e51b8152600401808060200182810382526025815260200180614c5c6025913960400191505060405180910390fd5b898610156129465760405162461bcd60e51b8152600401808060200182810382526025815260200180614b3f6025913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606112857f0000000000000000000000000000000000000000000000000000000000000000848461354d565b60008060006129f87f00000000000000000000000000000000000000000000000000000000000000008e7f00000000000000000000000000000000000000000000000000000000000000006136cd565b9050600087612a07578c612a0b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015612a8157600080fd5b505af1158015612a95573d6000803e3d6000fd5b50505050612aa78e8e8e8e8e8e610e11565b909f909e509c50505050505050505050505050565b60008060008342811015612b05576040805162461bcd60e51b81526020600482015260176024820152600080516020614be7833981519152604482015290519081900360640190fd5b612b138c8c8c8c8c8c614528565b90945092506000612b457f00000000000000000000000000000000000000000000000000000000000000008e8e6136cd565b9050612b538d33838861378d565b612b5f8c33838761378d565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612bb757600080fd5b505af1158015612bcb573d6000803e3d6000fd5b505050506040513d6020811015612be157600080fd5b5051949d939c50939a509198505050505050505050565b612c0133611388565b612c52576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b612c5b8161479c565b50565b60008060008342811015612ca7576040805162461bcd60e51b81526020600482015260176024820152600080516020614be7833981519152604482015290519081900360640190fd5b612cd58a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c614528565b90945092506000612d277f00000000000000000000000000000000000000000000000000000000000000008c7f00000000000000000000000000000000000000000000000000000000000000006136cd565b9050612d358b33838861378d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612d9057600080fd5b505af1158015612da4573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612e2957600080fd5b505af1158015612e3d573d6000803e3d6000fd5b505050506040513d6020811015612e5357600080fd5b5051612e5b57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612eb357600080fd5b505af1158015612ec7573d6000803e3d6000fd5b505050506040513d6020811015612edd57600080fd5b5051925034841015612ef557612ef533853403613455565b505096509650969350505050565b60608142811015612f49576040805162461bcd60e51b81526020600482015260176024820152600080516020614be7833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612f8057fe5b905060200201356001600160a01b03166001600160a01b031614612fd9576040805162461bcd60e51b815260206004820152601c6024820152600080516020614aee833981519152604482015290519081900360640190fd5b6130377f000000000000000000000000000000000000000000000000000000000000000088888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613bd392505050565b9150348260008151811061304757fe5b6020026020010151111561308c5760405162461bcd60e51b8152600401808060200182810382526026815260200180614b986026913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836000815181106130c857fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156130fb57600080fd5b505af115801561310f573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6131747f00000000000000000000000000000000000000000000000000000000000000008989600081811061183c57fe5b8460008151811061318157fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156131d857600080fd5b505af11580156131ec573d6000803e3d6000fd5b505050506040513d602081101561320257600080fd5b505161320a57fe5b613249828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506138ea915050565b8160008151811061325657fe5b60200260200101513411156120ac576120ac338360008151811061327657fe5b60200260200101513403613455565b61328e33611388565b6132df576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b6020831061337e5780518252601f19909201916020918201910161335f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146133e0576040519150601f19603f3d011682016040523d82523d6000602084013e6133e5565b606091505b5091509150818015613413575080511580613413575080806020019051602081101561341057600080fd5b50515b61344e5760405162461bcd60e51b815260040180806020018281038252602d815260200180614c2f602d913960400191505060405180910390fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106134a15780518252601f199092019160209182019101613482565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613503576040519150601f19603f3d011682016040523d82523d6000602084013e613508565b606091505b50509050806135485760405162461bcd60e51b8152600401808060200182810382526034815260200180614b646034913960400191505060405180910390fd5b505050565b60606002825110156135a6576040805162461bcd60e51b815260206004820152601b60248201527f47616c6178794c6962726172793a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b815167ffffffffffffffff811180156135be57600080fd5b506040519080825280602002602001820160405280156135e8578160200160208202803683370190505b50905082816000815181106135f957fe5b60200260200101818152505060005b60018351038110156136c55760008061364b8786858151811061362757fe5b602002602001015187866001018151811061363e57fe5b602002602001015161483c565b915091506136a184848151811061365e57fe5b6020026020010151838361369c8b8a898151811061367857fe5b60200260200101518b8a6001018151811061368f57fe5b6020026020010151614903565b613d32565b8484600101815181106136b057fe5b60209081029190910101525050600101613608565b509392505050565b60008060006136dc858561444a565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f02187d9cc4d540d181b3632c4207feed3da9d2a2879359c6c79d63863b2b107f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106138125780518252601f1990920191602091820191016137f3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613874576040519150601f19603f3d011682016040523d82523d6000602084013e613879565b606091505b50915091508180156138a75750805115806138a757508080602001905160208110156138a457600080fd5b50515b6138e25760405162461bcd60e51b8152600401808060200182810382526031815260200180614b0e6031913960400191505060405180910390fd5b505050505050565b60005b6001835103811015613bcd5760008084838151811061390857fe5b602002602001015185846001018151811061391f57fe5b6020026020010151915091506000613937838361444a565b509050600087856001018151811061394b57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146139795782600061397d565b6000835b60015491935091506001600160a01b031615613a24576001546040805163152cf14360e31b81523360048201526001600160a01b0389811660248301528881166044830152606482018790529151919092169163a9678a189160848083019260209291908290030181600087803b1580156139f757600080fd5b505af1158015613a0b573d6000803e3d6000fd5b505050506040513d6020811015613a2157600080fd5b50505b600060028a51038810613a375788613a78565b613a787f0000000000000000000000000000000000000000000000000000000000000000878c8b60020181518110613a6b57fe5b60200260200101516136cd565b9050613aa57f000000000000000000000000000000000000000000000000000000000000000088886136cd565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613ae2576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613b53578181015183820152602001613b3b565b50505050905090810190601f168015613b805780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613ba257600080fd5b505af1158015613bb6573d6000803e3d6000fd5b5050600190990198506138ed975050505050505050565b50505050565b6060600282511015613c2c576040805162461bcd60e51b815260206004820152601b60248201527f47616c6178794c6962726172793a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613c4457600080fd5b50604051908082528060200260200182016040528015613c6e578160200160208202803683370190505b5090508281600183510381518110613c8257fe5b60209081029190910101528151600019015b80156136c557600080613cc487866001860381518110613cb057fe5b602002602001015187868151811061363e57fe5b91509150613d0d848481518110613cd757fe5b60200260200101518383613d088b8a60018a0381518110613cf457fe5b60200260200101518b8a8151811061368f57fe5b613e33565b846001850381518110613d1c57fe5b6020908102919091010152505060001901613c94565b6000808511613d725760405162461bcd60e51b8152600401808060200182810382526028815260200180614c076028913960400191505060405180910390fd5b600084118015613d825750600083115b613dbd5760405162461bcd60e51b8152600401808060200182810382526025815260200180614a356025913960400191505060405180910390fd5b6000613de1613dd46127108563ffffffff61434e16565b879063ffffffff61498216565b90506000613df5828663ffffffff61498216565b90506000613e1b83613e0f8961271063ffffffff61498216565b9063ffffffff6149e516565b9050808281613e2657fe5b0498975050505050505050565b6000808511613e735760405162461bcd60e51b8152600401808060200182810382526029815260200180614bbe6029913960400191505060405180910390fd5b600084118015613e835750600083115b613ebe5760405162461bcd60e51b8152600401808060200182810382526025815260200180614a356025913960400191505060405180910390fd5b6000613ee2612710613ed6878963ffffffff61498216565b9063ffffffff61498216565b90506000613f0b613efb6127108663ffffffff61434e16565b613ed6878a63ffffffff61434e16565b9050613f286001828481613f1b57fe5b049063ffffffff6149e516565b979650505050505050565b60005b600183510381101561354857600080848381518110613f5157fe5b6020026020010151858460010181518110613f6857fe5b6020026020010151915091506000613f80838361444a565b5090506000613fb07f000000000000000000000000000000000000000000000000000000000000000085856136cd565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613ff157600080fd5b505afa158015614005573d6000803e3d6000fd5b505050506040513d606081101561401b57600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614614051578284614054565b83835b915091506140b2828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156119bc57600080fd5b955061412a8683838a6001600160a01b03166354cf2aeb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156140f357600080fd5b505afa158015614107573d6000803e3d6000fd5b505050506040513d602081101561411d57600080fd5b505163ffffffff16613d32565b6001549095506001600160a01b03161593506141d592505050576001546040805163152cf14360e31b81523360048201526001600160a01b0389811660248301528881166044830152606482018590529151919092169163a9678a189160848083019260209291908290030181600087803b1580156141a857600080fd5b505af11580156141bc573d6000803e3d6000fd5b505050506040513d60208110156141d257600080fd5b50505b600080856001600160a01b0316886001600160a01b0316146141f9578260006141fd565b6000835b91509150600060028c51038a10614214578a614248565b6142487f0000000000000000000000000000000000000000000000000000000000000000898e8d60020181518110613a6b57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b838110156142d25781810151838201526020016142ba565b50505050905090810190601f1680156142ff5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561432157600080fd5b505af1158015614335573d6000803e3d6000fd5b50506001909b019a50613f369950505050505050505050565b80820382811115611288576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b60008084116143de5760405162461bcd60e51b8152600401808060200182810382526022815260200180614a7c6022913960400191505060405180910390fd5b6000831180156143ee5750600082115b6144295760405162461bcd60e51b8152600401808060200182810382526025815260200180614a356025913960400191505060405180910390fd5b8261443a858463ffffffff61498216565b8161444157fe5b04949350505050565b600080826001600160a01b0316846001600160a01b0316141561449e5760405162461bcd60e51b8152600401808060200182810382526022815260200180614a5a6022913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b0316106144be5782846144c1565b83835b90925090506001600160a01b038216614521576040805162461bcd60e51b815260206004820152601b60248201527f47616c6178794c6962726172793a205a45524f5f414444524553530000000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b1580156145a257600080fd5b505afa1580156145b6573d6000803e3d6000fd5b505050506040513d60208110156145cc57600080fd5b50516001600160a01b0316141561467f57604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561465257600080fd5b505af1158015614666573d6000803e3d6000fd5b505050506040513d602081101561467c57600080fd5b50505b6000806146ad7f00000000000000000000000000000000000000000000000000000000000000008b8b61483c565b915091508160001480156146bf575080155b156146cf5787935086925061478f565b60006146dc89848461439e565b905087811161472f57858110156147245760405162461bcd60e51b8152600401808060200182810382526025815260200180614b3f6025913960400191505060405180910390fd5b88945092508261478d565b600061473c89848661439e565b90508981111561474857fe5b878110156147875760405162461bcd60e51b8152600401808060200182810382526025815260200180614c5c6025913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6001600160a01b0381166147e15760405162461bcd60e51b8152600401808060200182810382526026815260200180614a9e6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080600061484b858561444a565b50905060008061485c8888886136cd565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561489457600080fd5b505afa1580156148a8573d6000803e3d6000fd5b505050506040513d60608110156148be57600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146148f15780826148f4565b81815b90999098509650505050505050565b60006149108484846136cd565b6001600160a01b03166354cf2aeb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561494857600080fd5b505afa15801561495c573d6000803e3d6000fd5b505050506040513d602081101561497257600080fd5b505163ffffffff16949350505050565b600081158061499d5750508082028282828161499a57fe5b04145b611288576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611288576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe47616c6178794c6962726172793a20494e53554646494349454e545f4c495155494449545947616c6178794c6962726172793a204944454e544943414c5f41444452455353455347616c6178794c6962726172793a20494e53554646494349454e545f414d4f554e544f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737347616c6178795632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5447616c6178795632526f757465723a20494e56414c49445f50415448000000005472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c656447616c6178795632526f757465723a20494e53554646494349454e545f425f414d4f554e545472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c656447616c6178795632526f757465723a204558434553534956455f494e5055545f414d4f554e5447616c6178794c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e5447616c6178795632526f757465723a204558504952454400000000000000000047616c6178794c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e545472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c656447616c6178795632526f757465723a20494e53554646494349454e545f415f414d4f554e54a264697066735822122029b0a76f7375dd842d7bfefc1cd5115f697bedabb1d6c36f9908210ee41faeec64736f6c63430006060033000000000000000000000000a94d3a2067b338f5dd5cff38093da7c89ef69de70000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23

Deployed Bytecode

0x6080604052600436106101d15760003560e01c80638da5cb5b116100f7578063c45a015511610095578063f2fde38b11610064578063f2fde38b14610ce1578063f305d71914610d14578063fb3bdb4114610d5a578063fbbeedf114610dde5761020a565b8063c45a015514610b24578063d06ca61f14610b39578063ded9382a14610bee578063e8e3370014610c615761020a565b8063ad615dec116100d1578063ad615dec146109ba578063af2979eb146109f0578063b6f9de9514610a43578063baa2abde14610ac75761020a565b80638da5cb5b1461095f578063a3ddb30b14610990578063ad5c4648146109a55761020a565b806352707d8c1161016f578063715018a61161013e578063715018a61461079a578063791ac947146107af5780637ff36ab5146108455780638803dbee146108c95761020a565b806352707d8c14610607578063571fd012146106555780635b0d5984146106915780635c11d795146107045761020a565b80632195995c116101ab5780632195995c146104165780632f54bf6e1461049457806338ed1739146104db5780634a25d94a146105715761020a565b806302751cec1461020f57806318cbafe51461027b5780631f00ca74146103615761020a565b3661020a57336001600160a01b037f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23161461020857fe5b005b600080fd5b34801561021b57600080fd5b50610262600480360360c081101561023257600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610e11565b6040805192835260208301919091528051918290030190f35b34801561028757600080fd5b50610311600480360360a081101561029e57600080fd5b813591602081013591810190606081016040820135600160201b8111156102c457600080fd5b8201836020820111156102d657600080fd5b803590602001918460208302840111600160201b831117156102f757600080fd5b91935091506001600160a01b038135169060200135610f2b565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561034d578181015183820152602001610335565b505050509050019250505060405180910390f35b34801561036d57600080fd5b506103116004803603604081101561038457600080fd5b81359190810190604081016020820135600160201b8111156103a557600080fd5b8201836020820111156103b757600080fd5b803590602001918460208302840111600160201b831117156103d857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611258945050505050565b34801561042257600080fd5b50610262600480360361016081101561043a57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561128e565b3480156104a057600080fd5b506104c7600480360360208110156104b757600080fd5b50356001600160a01b0316611388565b604080519115158252519081900360200190f35b3480156104e757600080fd5b50610311600480360360a08110156104fe57600080fd5b813591602081013591810190606081016040820135600160201b81111561052457600080fd5b82018360208201111561053657600080fd5b803590602001918460208302840111600160201b8311171561055757600080fd5b91935091506001600160a01b03813516906020013561139c565b34801561057d57600080fd5b50610311600480360360a081101561059457600080fd5b813591602081013591810190606081016040820135600160201b8111156105ba57600080fd5b8201836020820111156105cc57600080fd5b803590602001918460208302840111600160201b831117156105ed57600080fd5b91935091506001600160a01b0381351690602001356114e7565b34801561061357600080fd5b506106436004803603608081101561062a57600080fd5b5080359060208101359060408101359060600135611673565b60408051918252519081900360200190f35b34801561066157600080fd5b506106436004803603608081101561067857600080fd5b508035906020810135906040810135906060013561168a565b34801561069d57600080fd5b5061064360048036036101408110156106b557600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611698565b34801561071057600080fd5b50610208600480360360a081101561072757600080fd5b813591602081013591810190606081016040820135600160201b81111561074d57600080fd5b82018360208201111561075f57600080fd5b803590602001918460208302840111600160201b8311171561078057600080fd5b91935091506001600160a01b0381351690602001356117a6565b3480156107a657600080fd5b50610208611a3b565b3480156107bb57600080fd5b50610208600480360360a08110156107d257600080fd5b813591602081013591810190606081016040820135600160201b8111156107f857600080fd5b82018360208201111561080a57600080fd5b803590602001918460208302840111600160201b8311171561082b57600080fd5b91935091506001600160a01b038135169060200135611adf565b6103116004803603608081101561085b57600080fd5b81359190810190604081016020820135600160201b81111561087c57600080fd5b82018360208201111561088e57600080fd5b803590602001918460208302840111600160201b831117156108af57600080fd5b91935091506001600160a01b038135169060200135611d63565b3480156108d557600080fd5b50610311600480360360a08110156108ec57600080fd5b813591602081013591810190606081016040820135600160201b81111561091257600080fd5b82018360208201111561092457600080fd5b803590602001918460208302840111600160201b8311171561094557600080fd5b91935091506001600160a01b0381351690602001356120b6565b34801561096b57600080fd5b506109746121af565b604080516001600160a01b039092168252519081900360200190f35b34801561099c57600080fd5b506109746121be565b3480156109b157600080fd5b506109746121cd565b3480156109c657600080fd5b50610643600480360360608110156109dd57600080fd5b50803590602081013590604001356121f1565b3480156109fc57600080fd5b50610643600480360360c0811015610a1357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612206565b61020860048036036080811015610a5957600080fd5b81359190810190604081016020820135600160201b811115610a7a57600080fd5b820183602082011115610a8c57600080fd5b803590602001918460208302840111600160201b83111715610aad57600080fd5b91935091506001600160a01b038135169060200135612387565b348015610ad357600080fd5b50610262600480360360e0811015610aea57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612713565b348015610b3057600080fd5b50610974612957565b348015610b4557600080fd5b5061031160048036036040811015610b5c57600080fd5b81359190810190604081016020820135600160201b811115610b7d57600080fd5b820183602082011115610b8f57600080fd5b803590602001918460208302840111600160201b83111715610bb057600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061297b945050505050565b348015610bfa57600080fd5b506102626004803603610140811015610c1257600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356129a8565b348015610c6d57600080fd5b50610cc36004803603610100811015610c8557600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612abc565b60408051938452602084019290925282820152519081900360600190f35b348015610ced57600080fd5b5061020860048036036020811015610d0457600080fd5b50356001600160a01b0316612bf8565b610cc3600480360360c0811015610d2a57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612c5e565b61031160048036036080811015610d7057600080fd5b81359190810190604081016020820135600160201b811115610d9157600080fd5b820183602082011115610da357600080fd5b803590602001918460208302840111600160201b83111715610dc457600080fd5b91935091506001600160a01b038135169060200135612f03565b348015610dea57600080fd5b5061020860048036036020811015610e0157600080fd5b50356001600160a01b0316613285565b6000808242811015610e58576040805162461bcd60e51b81526020600482015260176024820152600080516020614be7833981519152604482015290519081900360640190fd5b610e87897f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae238a8a8a308a612713565b9093509150610e97898685613301565b7f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610efd57600080fd5b505af1158015610f11573d6000803e3d6000fd5b50505050610f1f8583613455565b50965096945050505050565b60608142811015610f71576040805162461bcd60e51b81526020600482015260176024820152600080516020614be7833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae231686866000198101818110610fab57fe5b905060200201356001600160a01b03166001600160a01b031614611004576040805162461bcd60e51b815260206004820152601c6024820152600080516020614aee833981519152604482015290519081900360640190fd5b6110627f000000000000000000000000a94d3a2067b338f5dd5cff38093da7c89ef69de78988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061354d92505050565b9150868260018451038151811061107557fe5b602002602001015110156110ba5760405162461bcd60e51b815260040180806020018281038252602a815260200180614ac4602a913960400191505060405180910390fd5b611158868660008181106110ca57fe5b905060200201356001600160a01b03163361113e7f000000000000000000000000a94d3a2067b338f5dd5cff38093da7c89ef69de78a8a600081811061110c57fe5b905060200201356001600160a01b03168b8b600181811061112957fe5b905060200201356001600160a01b03166136cd565b8560008151811061114b57fe5b602002602001015161378d565b611197828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506138ea915050565b7f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b0316632e1a7d4d836001855103815181106111d657fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561121457600080fd5b505af1158015611228573d6000803e3d6000fd5b5050505061124d848360018551038151811061124057fe5b6020026020010151613455565b509695505050505050565b60606112857f000000000000000000000000a94d3a2067b338f5dd5cff38093da7c89ef69de78484613bd3565b90505b92915050565b60008060006112be7f000000000000000000000000a94d3a2067b338f5dd5cff38093da7c89ef69de78f8f6136cd565b90506000876112cd578c6112d1565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561134757600080fd5b505af115801561135b573d6000803e3d6000fd5b5050505061136e8f8f8f8f8f8f8f612713565b809450819550505050509b509b9950505050505050505050565b6000546001600160a01b0390811691161490565b606081428110156113e2576040805162461bcd60e51b81526020600482015260176024820152600080516020614be7833981519152604482015290519081900360640190fd5b6114407f000000000000000000000000a94d3a2067b338f5dd5cff38093da7c89ef69de78988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061354d92505050565b9150868260018451038151811061145357fe5b602002602001015110156114985760405162461bcd60e51b815260040180806020018281038252602a815260200180614ac4602a913960400191505060405180910390fd5b6114a8868660008181106110ca57fe5b61124d828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506138ea915050565b6060814281101561152d576040805162461bcd60e51b81526020600482015260176024820152600080516020614be7833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23168686600019810181811061156757fe5b905060200201356001600160a01b03166001600160a01b0316146115c0576040805162461bcd60e51b815260206004820152601c6024820152600080516020614aee833981519152604482015290519081900360640190fd5b61161e7f000000000000000000000000a94d3a2067b338f5dd5cff38093da7c89ef69de789888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613bd392505050565b9150868260008151811061162e57fe5b602002602001015111156110ba5760405162461bcd60e51b8152600401808060200182810382526026815260200180614b986026913960400191505060405180910390fd5b600061168185858585613d32565b95945050505050565b600061168185858585613e33565b6000806116e67f000000000000000000000000a94d3a2067b338f5dd5cff38093da7c89ef69de78d7f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236136cd565b90506000866116f5578b6116f9565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561176f57600080fd5b505af1158015611783573d6000803e3d6000fd5b505050506117958d8d8d8d8d8d612206565b9d9c50505050505050505050505050565b80428110156117ea576040805162461bcd60e51b81526020600482015260176024820152600080516020614be7833981519152604482015290519081900360640190fd5b61185f858560008181106117fa57fe5b905060200201356001600160a01b0316336118597f000000000000000000000000a94d3a2067b338f5dd5cff38093da7c89ef69de78989600081811061183c57fe5b905060200201356001600160a01b03168a8a600181811061112957fe5b8a61378d565b60008585600019810181811061187157fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156118d657600080fd5b505afa1580156118ea573d6000803e3d6000fd5b505050506040513d602081101561190057600080fd5b50516040805160208881028281018201909352888252929350611942929091899189918291850190849080828437600092019190915250889250613f33915050565b866119f4828888600019810181811061195757fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156119bc57600080fd5b505afa1580156119d0573d6000803e3d6000fd5b505050506040513d60208110156119e657600080fd5b50519063ffffffff61434e16565b1015611a315760405162461bcd60e51b815260040180806020018281038252602a815260200180614ac4602a913960400191505060405180910390fd5b5050505050505050565b611a4433611388565b611a95576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b8042811015611b23576040805162461bcd60e51b81526020600482015260176024820152600080516020614be7833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae231685856000198101818110611b5d57fe5b905060200201356001600160a01b03166001600160a01b031614611bb6576040805162461bcd60e51b815260206004820152601c6024820152600080516020614aee833981519152604482015290519081900360640190fd5b611bc6858560008181106117fa57fe5b611c04858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613f33915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae2316916370a0823191602480820192602092909190829003018186803b158015611c6e57600080fd5b505afa158015611c82573d6000803e3d6000fd5b505050506040513d6020811015611c9857600080fd5b5051905086811015611cdb5760405162461bcd60e51b815260040180806020018281038252602a815260200180614ac4602a913960400191505060405180910390fd5b7f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611d4157600080fd5b505af1158015611d55573d6000803e3d6000fd5b50505050611a318482613455565b60608142811015611da9576040805162461bcd60e51b81526020600482015260176024820152600080516020614be7833981519152604482015290519081900360640190fd5b7f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b031686866000818110611de057fe5b905060200201356001600160a01b03166001600160a01b031614611e39576040805162461bcd60e51b815260206004820152601c6024820152600080516020614aee833981519152604482015290519081900360640190fd5b611e977f000000000000000000000000a94d3a2067b338f5dd5cff38093da7c89ef69de73488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061354d92505050565b91508682600184510381518110611eaa57fe5b60200260200101511015611eef5760405162461bcd60e51b815260040180806020018281038252602a815260200180614ac4602a913960400191505060405180910390fd5b7f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b031663d0e30db083600081518110611f2b57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611f5e57600080fd5b505af1158015611f72573d6000803e3d6000fd5b50505050507f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b031663a9059cbb611fd77f000000000000000000000000a94d3a2067b338f5dd5cff38093da7c89ef69de78989600081811061183c57fe5b84600081518110611fe457fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561203b57600080fd5b505af115801561204f573d6000803e3d6000fd5b505050506040513d602081101561206557600080fd5b505161206d57fe5b6120ac828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506138ea915050565b5095945050505050565b606081428110156120fc576040805162461bcd60e51b81526020600482015260176024820152600080516020614be7833981519152604482015290519081900360640190fd5b61215a7f000000000000000000000000a94d3a2067b338f5dd5cff38093da7c89ef69de789888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613bd392505050565b9150868260008151811061216a57fe5b602002602001015111156114985760405162461bcd60e51b8152600401808060200182810382526026815260200180614b986026913960400191505060405180910390fd5b6000546001600160a01b031690565b6001546001600160a01b031681565b7f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae2381565b60006121fe84848461439e565b949350505050565b6000814281101561224c576040805162461bcd60e51b81526020600482015260176024820152600080516020614be7833981519152604482015290519081900360640190fd5b61227b887f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae238989893089612713565b604080516370a0823160e01b815230600482015290519194506122ff92508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b1580156122ce57600080fd5b505afa1580156122e2573d6000803e3d6000fd5b505050506040513d60208110156122f857600080fd5b5051613301565b7f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561236557600080fd5b505af1158015612379573d6000803e3d6000fd5b5050505061124d8483613455565b80428110156123cb576040805162461bcd60e51b81526020600482015260176024820152600080516020614be7833981519152604482015290519081900360640190fd5b7f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b03168585600081811061240257fe5b905060200201356001600160a01b03166001600160a01b03161461245b576040805162461bcd60e51b815260206004820152601c6024820152600080516020614aee833981519152604482015290519081900360640190fd5b60003490507f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156124bb57600080fd5b505af11580156124cf573d6000803e3d6000fd5b50505050507f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b031663a9059cbb6125347f000000000000000000000000a94d3a2067b338f5dd5cff38093da7c89ef69de78989600081811061183c57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561258457600080fd5b505af1158015612598573d6000803e3d6000fd5b505050506040513d60208110156125ae57600080fd5b50516125b657fe5b6000868660001981018181106125c857fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561262d57600080fd5b505afa158015612641573d6000803e3d6000fd5b505050506040513d602081101561265757600080fd5b505160408051602089810282810182019093528982529293506126999290918a918a918291850190849080828437600092019190915250899250613f33915050565b876119f482898960001981018181106126ae57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156119bc57600080fd5b600080824281101561275a576040805162461bcd60e51b81526020600482015260176024820152600080516020614be7833981519152604482015290519081900360640190fd5b60006127877f000000000000000000000000a94d3a2067b338f5dd5cff38093da7c89ef69de78c8c6136cd565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b1580156127e257600080fd5b505af11580156127f6573d6000803e3d6000fd5b505050506040513d602081101561280c57600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561285957600080fd5b505af115801561286d573d6000803e3d6000fd5b505050506040513d604081101561288357600080fd5b5080516020909101519092509050600061289d8e8e61444a565b509050806001600160a01b03168e6001600160a01b0316146128c05781836128c3565b82825b90975095508a8710156129075760405162461bcd60e51b8152600401808060200182810382526025815260200180614c5c6025913960400191505060405180910390fd5b898610156129465760405162461bcd60e51b8152600401808060200182810382526025815260200180614b3f6025913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000a94d3a2067b338f5dd5cff38093da7c89ef69de781565b60606112857f000000000000000000000000a94d3a2067b338f5dd5cff38093da7c89ef69de7848461354d565b60008060006129f87f000000000000000000000000a94d3a2067b338f5dd5cff38093da7c89ef69de78e7f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236136cd565b9050600087612a07578c612a0b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015612a8157600080fd5b505af1158015612a95573d6000803e3d6000fd5b50505050612aa78e8e8e8e8e8e610e11565b909f909e509c50505050505050505050505050565b60008060008342811015612b05576040805162461bcd60e51b81526020600482015260176024820152600080516020614be7833981519152604482015290519081900360640190fd5b612b138c8c8c8c8c8c614528565b90945092506000612b457f000000000000000000000000a94d3a2067b338f5dd5cff38093da7c89ef69de78e8e6136cd565b9050612b538d33838861378d565b612b5f8c33838761378d565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612bb757600080fd5b505af1158015612bcb573d6000803e3d6000fd5b505050506040513d6020811015612be157600080fd5b5051949d939c50939a509198505050505050505050565b612c0133611388565b612c52576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b612c5b8161479c565b50565b60008060008342811015612ca7576040805162461bcd60e51b81526020600482015260176024820152600080516020614be7833981519152604482015290519081900360640190fd5b612cd58a7f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae238b348c8c614528565b90945092506000612d277f000000000000000000000000a94d3a2067b338f5dd5cff38093da7c89ef69de78c7f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236136cd565b9050612d358b33838861378d565b7f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612d9057600080fd5b505af1158015612da4573d6000803e3d6000fd5b50505050507f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612e2957600080fd5b505af1158015612e3d573d6000803e3d6000fd5b505050506040513d6020811015612e5357600080fd5b5051612e5b57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612eb357600080fd5b505af1158015612ec7573d6000803e3d6000fd5b505050506040513d6020811015612edd57600080fd5b5051925034841015612ef557612ef533853403613455565b505096509650969350505050565b60608142811015612f49576040805162461bcd60e51b81526020600482015260176024820152600080516020614be7833981519152604482015290519081900360640190fd5b7f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b031686866000818110612f8057fe5b905060200201356001600160a01b03166001600160a01b031614612fd9576040805162461bcd60e51b815260206004820152601c6024820152600080516020614aee833981519152604482015290519081900360640190fd5b6130377f000000000000000000000000a94d3a2067b338f5dd5cff38093da7c89ef69de788888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613bd392505050565b9150348260008151811061304757fe5b6020026020010151111561308c5760405162461bcd60e51b8152600401808060200182810382526026815260200180614b986026913960400191505060405180910390fd5b7f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b031663d0e30db0836000815181106130c857fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156130fb57600080fd5b505af115801561310f573d6000803e3d6000fd5b50505050507f0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae236001600160a01b031663a9059cbb6131747f000000000000000000000000a94d3a2067b338f5dd5cff38093da7c89ef69de78989600081811061183c57fe5b8460008151811061318157fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156131d857600080fd5b505af11580156131ec573d6000803e3d6000fd5b505050506040513d602081101561320257600080fd5b505161320a57fe5b613249828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506138ea915050565b8160008151811061325657fe5b60200260200101513411156120ac576120ac338360008151811061327657fe5b60200260200101513403613455565b61328e33611388565b6132df576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b6020831061337e5780518252601f19909201916020918201910161335f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146133e0576040519150601f19603f3d011682016040523d82523d6000602084013e6133e5565b606091505b5091509150818015613413575080511580613413575080806020019051602081101561341057600080fd5b50515b61344e5760405162461bcd60e51b815260040180806020018281038252602d815260200180614c2f602d913960400191505060405180910390fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106134a15780518252601f199092019160209182019101613482565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613503576040519150601f19603f3d011682016040523d82523d6000602084013e613508565b606091505b50509050806135485760405162461bcd60e51b8152600401808060200182810382526034815260200180614b646034913960400191505060405180910390fd5b505050565b60606002825110156135a6576040805162461bcd60e51b815260206004820152601b60248201527f47616c6178794c6962726172793a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b815167ffffffffffffffff811180156135be57600080fd5b506040519080825280602002602001820160405280156135e8578160200160208202803683370190505b50905082816000815181106135f957fe5b60200260200101818152505060005b60018351038110156136c55760008061364b8786858151811061362757fe5b602002602001015187866001018151811061363e57fe5b602002602001015161483c565b915091506136a184848151811061365e57fe5b6020026020010151838361369c8b8a898151811061367857fe5b60200260200101518b8a6001018151811061368f57fe5b6020026020010151614903565b613d32565b8484600101815181106136b057fe5b60209081029190910101525050600101613608565b509392505050565b60008060006136dc858561444a565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f02187d9cc4d540d181b3632c4207feed3da9d2a2879359c6c79d63863b2b107f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106138125780518252601f1990920191602091820191016137f3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613874576040519150601f19603f3d011682016040523d82523d6000602084013e613879565b606091505b50915091508180156138a75750805115806138a757508080602001905160208110156138a457600080fd5b50515b6138e25760405162461bcd60e51b8152600401808060200182810382526031815260200180614b0e6031913960400191505060405180910390fd5b505050505050565b60005b6001835103811015613bcd5760008084838151811061390857fe5b602002602001015185846001018151811061391f57fe5b6020026020010151915091506000613937838361444a565b509050600087856001018151811061394b57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146139795782600061397d565b6000835b60015491935091506001600160a01b031615613a24576001546040805163152cf14360e31b81523360048201526001600160a01b0389811660248301528881166044830152606482018790529151919092169163a9678a189160848083019260209291908290030181600087803b1580156139f757600080fd5b505af1158015613a0b573d6000803e3d6000fd5b505050506040513d6020811015613a2157600080fd5b50505b600060028a51038810613a375788613a78565b613a787f000000000000000000000000a94d3a2067b338f5dd5cff38093da7c89ef69de7878c8b60020181518110613a6b57fe5b60200260200101516136cd565b9050613aa57f000000000000000000000000a94d3a2067b338f5dd5cff38093da7c89ef69de788886136cd565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613ae2576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613b53578181015183820152602001613b3b565b50505050905090810190601f168015613b805780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613ba257600080fd5b505af1158015613bb6573d6000803e3d6000fd5b5050600190990198506138ed975050505050505050565b50505050565b6060600282511015613c2c576040805162461bcd60e51b815260206004820152601b60248201527f47616c6178794c6962726172793a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613c4457600080fd5b50604051908082528060200260200182016040528015613c6e578160200160208202803683370190505b5090508281600183510381518110613c8257fe5b60209081029190910101528151600019015b80156136c557600080613cc487866001860381518110613cb057fe5b602002602001015187868151811061363e57fe5b91509150613d0d848481518110613cd757fe5b60200260200101518383613d088b8a60018a0381518110613cf457fe5b60200260200101518b8a8151811061368f57fe5b613e33565b846001850381518110613d1c57fe5b6020908102919091010152505060001901613c94565b6000808511613d725760405162461bcd60e51b8152600401808060200182810382526028815260200180614c076028913960400191505060405180910390fd5b600084118015613d825750600083115b613dbd5760405162461bcd60e51b8152600401808060200182810382526025815260200180614a356025913960400191505060405180910390fd5b6000613de1613dd46127108563ffffffff61434e16565b879063ffffffff61498216565b90506000613df5828663ffffffff61498216565b90506000613e1b83613e0f8961271063ffffffff61498216565b9063ffffffff6149e516565b9050808281613e2657fe5b0498975050505050505050565b6000808511613e735760405162461bcd60e51b8152600401808060200182810382526029815260200180614bbe6029913960400191505060405180910390fd5b600084118015613e835750600083115b613ebe5760405162461bcd60e51b8152600401808060200182810382526025815260200180614a356025913960400191505060405180910390fd5b6000613ee2612710613ed6878963ffffffff61498216565b9063ffffffff61498216565b90506000613f0b613efb6127108663ffffffff61434e16565b613ed6878a63ffffffff61434e16565b9050613f286001828481613f1b57fe5b049063ffffffff6149e516565b979650505050505050565b60005b600183510381101561354857600080848381518110613f5157fe5b6020026020010151858460010181518110613f6857fe5b6020026020010151915091506000613f80838361444a565b5090506000613fb07f000000000000000000000000a94d3a2067b338f5dd5cff38093da7c89ef69de785856136cd565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613ff157600080fd5b505afa158015614005573d6000803e3d6000fd5b505050506040513d606081101561401b57600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614614051578284614054565b83835b915091506140b2828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156119bc57600080fd5b955061412a8683838a6001600160a01b03166354cf2aeb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156140f357600080fd5b505afa158015614107573d6000803e3d6000fd5b505050506040513d602081101561411d57600080fd5b505163ffffffff16613d32565b6001549095506001600160a01b03161593506141d592505050576001546040805163152cf14360e31b81523360048201526001600160a01b0389811660248301528881166044830152606482018590529151919092169163a9678a189160848083019260209291908290030181600087803b1580156141a857600080fd5b505af11580156141bc573d6000803e3d6000fd5b505050506040513d60208110156141d257600080fd5b50505b600080856001600160a01b0316886001600160a01b0316146141f9578260006141fd565b6000835b91509150600060028c51038a10614214578a614248565b6142487f000000000000000000000000a94d3a2067b338f5dd5cff38093da7c89ef69de7898e8d60020181518110613a6b57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b838110156142d25781810151838201526020016142ba565b50505050905090810190601f1680156142ff5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561432157600080fd5b505af1158015614335573d6000803e3d6000fd5b50506001909b019a50613f369950505050505050505050565b80820382811115611288576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b60008084116143de5760405162461bcd60e51b8152600401808060200182810382526022815260200180614a7c6022913960400191505060405180910390fd5b6000831180156143ee5750600082115b6144295760405162461bcd60e51b8152600401808060200182810382526025815260200180614a356025913960400191505060405180910390fd5b8261443a858463ffffffff61498216565b8161444157fe5b04949350505050565b600080826001600160a01b0316846001600160a01b0316141561449e5760405162461bcd60e51b8152600401808060200182810382526022815260200180614a5a6022913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b0316106144be5782846144c1565b83835b90925090506001600160a01b038216614521576040805162461bcd60e51b815260206004820152601b60248201527f47616c6178794c6962726172793a205a45524f5f414444524553530000000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f000000000000000000000000a94d3a2067b338f5dd5cff38093da7c89ef69de79092169163e6a4390591604480820192602092909190829003018186803b1580156145a257600080fd5b505afa1580156145b6573d6000803e3d6000fd5b505050506040513d60208110156145cc57600080fd5b50516001600160a01b0316141561467f57604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f000000000000000000000000a94d3a2067b338f5dd5cff38093da7c89ef69de79092169163c9c65396916044808201926020929091908290030181600087803b15801561465257600080fd5b505af1158015614666573d6000803e3d6000fd5b505050506040513d602081101561467c57600080fd5b50505b6000806146ad7f000000000000000000000000a94d3a2067b338f5dd5cff38093da7c89ef69de78b8b61483c565b915091508160001480156146bf575080155b156146cf5787935086925061478f565b60006146dc89848461439e565b905087811161472f57858110156147245760405162461bcd60e51b8152600401808060200182810382526025815260200180614b3f6025913960400191505060405180910390fd5b88945092508261478d565b600061473c89848661439e565b90508981111561474857fe5b878110156147875760405162461bcd60e51b8152600401808060200182810382526025815260200180614c5c6025913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6001600160a01b0381166147e15760405162461bcd60e51b8152600401808060200182810382526026815260200180614a9e6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080600061484b858561444a565b50905060008061485c8888886136cd565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561489457600080fd5b505afa1580156148a8573d6000803e3d6000fd5b505050506040513d60608110156148be57600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146148f15780826148f4565b81815b90999098509650505050505050565b60006149108484846136cd565b6001600160a01b03166354cf2aeb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561494857600080fd5b505afa15801561495c573d6000803e3d6000fd5b505050506040513d602081101561497257600080fd5b505163ffffffff16949350505050565b600081158061499d5750508082028282828161499a57fe5b04145b611288576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611288576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe47616c6178794c6962726172793a20494e53554646494349454e545f4c495155494449545947616c6178794c6962726172793a204944454e544943414c5f41444452455353455347616c6178794c6962726172793a20494e53554646494349454e545f414d4f554e544f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737347616c6178795632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5447616c6178795632526f757465723a20494e56414c49445f50415448000000005472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c656447616c6178795632526f757465723a20494e53554646494349454e545f425f414d4f554e545472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c656447616c6178795632526f757465723a204558434553534956455f494e5055545f414d4f554e5447616c6178794c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e5447616c6178795632526f757465723a204558504952454400000000000000000047616c6178794c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e545472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c656447616c6178795632526f757465723a20494e53554646494349454e545f415f414d4f554e54a264697066735822122029b0a76f7375dd842d7bfefc1cd5115f697bedabb1d6c36f9908210ee41faeec64736f6c63430006060033

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

000000000000000000000000a94d3a2067b338f5dd5cff38093da7c89ef69de70000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23

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

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000a94d3a2067b338f5dd5cff38093da7c89ef69de7
Arg [1] : 0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23


Deployed ByteCode Sourcemap

20737:18926:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21265:10;-1:-1:-1;;;;;21279:4:0;21265:18;;21258:26;;;;20737:18926;;12:1:-1;9;2:12;25496:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25496:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;25496:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;32759:842;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32759:842:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32759:842:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;32759:842:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32759:842:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;32759:842:0;;-1:-1:-1;32759:842:0;-1:-1:-1;;;;;;32759:842:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;32759:842:0;;;;;;;;;;;;;;;;;39410:250;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39410:250:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;39410:250:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;39410:250:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;39410:250:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;39410:250:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;39410:250:0;;-1:-1:-1;39410:250:0;;-1:-1:-1;;;;;39410:250:0:i;26175:671::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26175:671:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;26175:671:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19765:104::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19765:104:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19765:104:0;-1:-1:-1;;;;;19765:104:0;;:::i;:::-;;;;;;;;;;;;;;;;;;30006:621;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30006:621:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30006:621:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30006:621:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30006:621:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30006:621:0;;-1:-1:-1;30006:621:0;-1:-1:-1;;;;;;30006:621:0;;;;;;;;:::i;31933:820::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31933:820:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31933:820:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31933:820:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31933:820:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31933:820:0;;-1:-1:-1;31933:820:0;-1:-1:-1;;;;;;31933:820:0;;;;;;;;:::i;38573:282::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38573:282:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;38573:282:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;38863:281;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38863:281:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;38863:281:0;;;;;;;;;;;;;;;;;:::i;28300:712::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28300:712:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;28300:712:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;35931:710::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35931:710:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;35931:710:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;35931:710:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;35931:710:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;35931:710:0;;-1:-1:-1;35931:710:0;-1:-1:-1;;;;;;35931:710:0;;;;;;;;:::i;19877:140::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19877:140:0;;;:::i;37498:838::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37498:838:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;37498:838:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;37498:838:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;37498:838:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;37498:838:0;;-1:-1:-1;37498:838:0;-1:-1:-1;;;;;;37498:838:0;;;;;;;;:::i;31238:689::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31238:689:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31238:689:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31238:689:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31238:689:0;;-1:-1:-1;31238:689:0;-1:-1:-1;;;;;;31238:689:0;;;;;;;;:::i;30633:599::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30633:599:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30633:599:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30633:599:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30633:599:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30633:599:0;;-1:-1:-1;30633:599:0;-1:-1:-1;;;;;;30633:599:0;;;;;;;;:::i;19678:79::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19678:79:0;;;:::i;:::-;;;;-1:-1:-1;;;;;19678:79:0;;;;;;;;;;;;;;20921:37;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20921:37:0;;;:::i;20876:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20876:38:0;;;:::i;38380:185::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38380:185:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;38380:185:0;;;;;;;;;;;;:::i;27594:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27594:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;27594:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;36647:845::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;36647:845:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;36647:845:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;36647:845:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;36647:845:0;;-1:-1:-1;36647:845:0;-1:-1:-1;;;;;;36647:845:0;;;;;;;;:::i;24639:851::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24639:851:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;24639:851:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20828:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20828:41:0;;;:::i;39152:250::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39152:250:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;39152:250:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;39152:250:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;39152:250:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;39152:250:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;39152:250:0;;-1:-1:-1;39152:250:0;;-1:-1:-1;;;;;39152:250:0:i;26852:663::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26852:663:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;26852:663:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22890:732::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22890:732:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22890:732:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;20262:109;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20262:109:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20262:109:0;-1:-1:-1;;;;;20262:109:0;;:::i;23628:968::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23628:968:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33607:802::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;33607:802:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33607:802:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33607:802:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33607:802:0;;-1:-1:-1;33607:802:0;-1:-1:-1;;;;;;33607:802:0;;;;;;;;:::i;21355:116::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21355:116:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21355:116:0;-1:-1:-1;;;;;21355:116:0;;:::i;25496:673::-;25733:16;25751:14;25714:8;21029:15;21017:8;:27;;21009:63;;;;;-1:-1:-1;;;21009:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21009:63:0;;;;;;;;;;;;;;;25805:196:::1;25835:5;25855:4;25874:9;25898:14;25927:12;25962:4;25982:8;25805:15;:196::i;:::-;25778:223:::0;;-1:-1:-1;25778:223:0;-1:-1:-1;26012:51:0::1;26040:5:::0;26047:2;25778:223;26012:27:::1;:51::i;:::-;26080:4;-1:-1:-1::0;;;;;26074:20:0::1;;26095:9;26074:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26074:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26074:31:0;;;;26116:45;26147:2;26151:9;26116:30;:45::i;:::-;25496:673:::0;;;;;;;;;;:::o;32759:842::-;32973:21;32945:8;21029:15;21017:8;:27;;21009:63;;;;;-1:-1:-1;;;21009:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21009:63:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33045:4:0::1;33020:29;:4:::0;;-1:-1:-1;;33025:15:0;;33020:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33020:21:0::1;-1:-1:-1::0;;;;;33020:29:0::1;;33012:70;;;::::0;;-1:-1:-1;;;33012:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33012:70:0;;;;;;;;;;;;;::::1;;33103:52;33131:7;33140:8;33150:4;;33103:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33103:27:0::1;::::0;-1:-1:-1;;;33103:52:0:i:1;:::-;33093:62;;33205:12;33174:7;33199:1;33182:7;:14;:18;33174:27;;;;;;;;;;;;;;:43;;33166:98;;;;-1:-1:-1::0;;;33166:98:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33275:138;33321:4;;33326:1;33321:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;33321:7:0::1;33330:10;33342:48;33364:7;33373:4;;33378:1;33373:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;33373:7:0::1;33382:4;;33387:1;33382:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;33382:7:0::1;33342:21;:48::i;:::-;33392:7;33400:1;33392:10;;;;;;;;;;;;;;33275:31;:138::i;:::-;33424:35;33430:7;33439:4;;33424:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33453:4:0::1;::::0;-1:-1:-1;33424:5:0::1;::::0;-1:-1:-1;;33424:35:0:i:1;:::-;33476:4;-1:-1:-1::0;;;;;33470:20:0::1;;33491:7;33516:1;33499:7;:14;:18;33491:27;;;;;;;;;;;;;;33470:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33470:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33470:49:0;;;;33530:63;33561:2;33565:7;33590:1;33573:7;:14;:18;33565:27;;;;;;;;;;;;;;33530:30;:63::i;:::-;32759:842:::0;;;;;;;;;:::o;39410:250::-;39554:21;39600:52;39627:7;39636:9;39647:4;39600:26;:52::i;:::-;39593:59;;39410:250;;;;;:::o;26175:671::-;26481:12;26495;26520;26535:46;26557:7;26566:6;26574;26535:21;:46::i;:::-;26520:61;;26592:10;26605;:33;;26629:9;26605:33;;;-1:-1:-1;;26605:33:0;26649:77;;;-1:-1:-1;;;26649:77:0;;26674:10;26649:77;;;;26694:4;26649:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26592:46;;-1:-1:-1;;;;;;26649:24:0;;;;;:77;;;;;-1:-1:-1;;26649:77:0;;;;;;;;-1:-1:-1;26649:24:0;:77;;;2:2:-1;;;;27:1;24;17:12;2:2;26649:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26649:77:0;;;;26758:80;26774:6;26782;26790:9;26801:10;26813;26825:2;26829:8;26758:15;:80::i;:::-;26737:101;;;;;;;;26175:671;;;;;;;;;;;;;;;;:::o;19765:104::-;19820:4;19855:6;-1:-1:-1;;;;;19855:6:0;;;19844:17;;;;19765:104::o;30006:621::-;30230:21;30211:8;21029:15;21017:8;:27;;21009:63;;;;;-1:-1:-1;;;21009:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21009:63:0;;;;;;;;;;;;;;;30274:52:::1;30302:7;30311:8;30321:4;;30274:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30274:27:0::1;::::0;-1:-1:-1;;;30274:52:0:i:1;:::-;30264:62;;30376:12;30345:7;30370:1;30353:7;:14;:18;30345:27;;;;;;;;;;;;;;:43;;30337:98;;;;-1:-1:-1::0;;;30337:98:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30446:138;30492:4;;30497:1;30492:7;;;;;;30446:138;30595:24;30601:7;30610:4;;30595:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30616:2:0;;-1:-1:-1;30595:5:0::1;::::0;-1:-1:-1;;30595:24:0:i:1;31933:820::-:0;32147:21;32119:8;21029:15;21017:8;:27;;21009:63;;;;;-1:-1:-1;;;21009:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21009:63:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32219:4:0::1;32194:29;:4:::0;;-1:-1:-1;;32199:15:0;;32194:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32194:21:0::1;-1:-1:-1::0;;;;;32194:29:0::1;;32186:70;;;::::0;;-1:-1:-1;;;32186:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32186:70:0;;;;;;;;;;;;;::::1;;32277:52;32304:7;32313:9;32324:4;;32277:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32277:26:0::1;::::0;-1:-1:-1;;;32277:52:0:i:1;:::-;32267:62;;32362:11;32348:7;32356:1;32348:10;;;;;;;;;;;;;;:25;;32340:76;;;;-1:-1:-1::0;;;32340:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38573:282:::0;38740:14;38779:68;38806:8;38816:9;38827:10;38839:7;38779:26;:68::i;:::-;38772:75;38573:282;-1:-1:-1;;;;;38573:282:0:o;38863:281::-;39030:13;39068:68;39094:9;39105;39116:10;39128:7;39068:25;:68::i;28300:712::-;28618:14;28645:12;28660:43;28682:7;28691:5;28698:4;28660:21;:43::i;:::-;28645:58;;28714:10;28727;:33;;28751:9;28727:33;;;-1:-1:-1;;28727:33:0;28771:77;;;-1:-1:-1;;;28771:77:0;;28796:10;28771:77;;;;28816:4;28771:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28714:46;;-1:-1:-1;;;;;;28771:24:0;;;;;:77;;;;;-1:-1:-1;;28771:77:0;;;;;;;;-1:-1:-1;28771:24:0;:77;;;2:2:-1;;;;27:1;24;17:12;2:2;28771:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28771:77:0;;;;28871:133;28933:5;28940:9;28951:14;28967:12;28981:2;28985:8;28871:47;:133::i;:::-;28859:145;28300:712;-1:-1:-1;;;;;;;;;;;;;28300:712:0:o;35931:710::-;36165:8;21029:15;21017:8;:27;;21009:63;;;;;-1:-1:-1;;;21009:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21009:63:0;;;;;;;;;;;;;;;36186:136:::1;36232:4;;36237:1;36232:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;36232:7:0::1;36241:10;36253:48;36275:7;36284:4;;36289:1;36284:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;36284:7:0::1;36293:4;;36298:1;36293:7;;;;;;36253:48;36303:8;36186:31;:136::i;:::-;36333:18;36361:4:::0;;-1:-1:-1;;36366:15:0;;36361:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;36361:21:0::1;-1:-1:-1::0;;;;;36354:39:0::1;;36394:2;36354:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;36354:43:0::1;-1:-1:-1::0;;;;;36354:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;36354:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;36354:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;36354:43:0;36408:44:::1;::::0;;36354:43:::1;36408:44:::0;;::::1;::::0;;;;;;;;;;;36354:43;;-1:-1:-1;36408:44:0::1;::::0;;;36443:4;;;;;;36408:44;::::1;::::0;36443:4;;36408:44;36443:4;36408:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;36449:2:0;;-1:-1:-1;36408:34:0::1;::::0;-1:-1:-1;;36408:44:0:i:1;:::-;36551:12:::0;36485:62:::1;36533:13:::0;36492:4;;-1:-1:-1;;36497:15:0;;36492:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;36492:21:0::1;-1:-1:-1::0;;;;;36485:39:0::1;;36525:2;36485:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;36485:43:0::1;-1:-1:-1::0;;;;;36485:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;36485:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;36485:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;36485:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;36463:170;;;;-1:-1:-1::0;;;36463:170:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21083:1;35931:710:::0;;;;;;;:::o;19877:140::-;20421:19;20429:10;20421:7;:19::i;:::-;20413:64;;;;;-1:-1:-1;;;20413:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19976:1:::1;19960:6:::0;;19939:40:::1;::::0;-1:-1:-1;;;;;19960:6:0;;::::1;::::0;19939:40:::1;::::0;19976:1;;19939:40:::1;20007:1;19990:19:::0;;-1:-1:-1;;;;;;19990:19:0::1;::::0;;19877:140::o;37498:838::-;37765:8;21029:15;21017:8;:27;;21009:63;;;;;-1:-1:-1;;;21009:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21009:63:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;37824:4:0::1;37799:29;:4:::0;;-1:-1:-1;;37804:15:0;;37799:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;37799:21:0::1;-1:-1:-1::0;;;;;37799:29:0::1;;37791:70;;;::::0;;-1:-1:-1;;;37791:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;37791:70:0;;;;;;;;;;;;;::::1;;37872:136;37918:4;;37923:1;37918:7;;;;;;37872:136;38019:55;38054:4;;38019:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;38068:4:0::1;::::0;-1:-1:-1;38019:34:0::1;::::0;-1:-1:-1;;38019:55:0:i:1;:::-;38102:37;::::0;;-1:-1:-1;;;38102:37:0;;38133:4:::1;38102:37;::::0;::::1;::::0;;;38085:14:::1;::::0;-1:-1:-1;;;;;38109:4:0::1;38102:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;38102:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38102:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;38102:37:0;;-1:-1:-1;38158:25:0;;::::1;;38150:80;;;;-1:-1:-1::0;;;38150:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38247:4;-1:-1:-1::0;;;;;38241:20:0::1;;38262:9;38241:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;38241:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;38241:31:0;;;;38283:45;38314:2;38318:9;38283:30;:45::i;31238:689::-:0;31454:21;31426:8;21029:15;21017:8;:27;;21009:63;;;;;-1:-1:-1;;;21009:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21009:63:0;;;;;;;;;;;;;;;31512:4:::1;-1:-1:-1::0;;;;;31501:15:0::1;:4;;31506:1;31501:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31501:7:0::1;-1:-1:-1::0;;;;;31501:15:0::1;;31493:56;;;::::0;;-1:-1:-1;;;31493:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31493:56:0;;;;;;;;;;;;;::::1;;31570:53;31598:7;31607:9;31618:4;;31570:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31570:27:0::1;::::0;-1:-1:-1;;;31570:53:0:i:1;:::-;31560:63;;31673:12;31642:7;31667:1;31650:7;:14;:18;31642:27;;;;;;;;;;;;;;:43;;31634:98;;;;-1:-1:-1::0;;;31634:98:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31749:4;-1:-1:-1::0;;;;;31743:19:0::1;;31770:7;31778:1;31770:10;;;;;;;;;;;;;;31743:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31743:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31743:40:0;;;;;31807:4;-1:-1:-1::0;;;;;31801:20:0::1;;31822:48;31844:7;31853:4;;31858:1;31853:7;;;;;;31822:48;31872:7;31880:1;31872:10;;;;;;;;;;;;;;31801:82;;;;;;;;;;;;;-1:-1:-1::0;;;;;31801:82:0::1;-1:-1:-1::0;;;;;31801:82:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31801:82:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31801:82:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31801:82:0;31794:90:::1;;;;31895:24;31901:7;31910:4;;31895:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31916:2:0;;-1:-1:-1;31895:5:0::1;::::0;-1:-1:-1;;31895:24:0:i:1;:::-;31238:689:::0;;;;;;;;:::o;30633:599::-;30857:21;30838:8;21029:15;21017:8;:27;;21009:63;;;;;-1:-1:-1;;;21009:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21009:63:0;;;;;;;;;;;;;;;30901:52:::1;30928:7;30937:9;30948:4;;30901:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30901:26:0::1;::::0;-1:-1:-1;;;30901:52:0:i:1;:::-;30891:62;;30986:11;30972:7;30980:1;30972:10;;;;;;;;;;;;;;:25;;30964:76;;;;-1:-1:-1::0;;;30964:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19678:79:::0;19716:7;19743:6;-1:-1:-1;;;;;19743:6:0;19678:79;:::o;20921:37::-;;;-1:-1:-1;;;;;20921:37:0;;:::o;20876:38::-;;;:::o;38380:185::-;38477:12;38509:48;38529:7;38538:8;38548;38509:19;:48::i;:::-;38502:55;38380:185;-1:-1:-1;;;;38380:185:0:o;27594:700::-;27860:14;27841:8;21029:15;21017:8;:27;;21009:63;;;;;-1:-1:-1;;;21009:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21009:63:0;;;;;;;;;;;;;;;27903:196:::1;27933:5;27953:4;27972:9;27996:14;28025:12;28060:4;28080:8;27903:15;:196::i;:::-;28149:38;::::0;;-1:-1:-1;;;28149:38:0;;28181:4:::1;28149:38;::::0;::::1;::::0;;;27887:212;;-1:-1:-1;28110:78:0::1;::::0;-1:-1:-1;28138:5:0;;28145:2;;-1:-1:-1;;;;;28149:23:0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;28149:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28149:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28149:38:0;28110:27:::1;:78::i;:::-;28205:4;-1:-1:-1::0;;;;;28199:20:0::1;;28220:9;28199:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28199:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28199:31:0;;;;28241:45;28272:2;28276:9;28241:30;:45::i;36647:845::-:0;36907:8;21029:15;21017:8;:27;;21009:63;;;;;-1:-1:-1;;;21009:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21009:63:0;;;;;;;;;;;;;;;36952:4:::1;-1:-1:-1::0;;;;;36941:15:0::1;:4;;36946:1;36941:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;36941:7:0::1;-1:-1:-1::0;;;;;36941:15:0::1;;36933:56;;;::::0;;-1:-1:-1;;;36933:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;36933:56:0;;;;;;;;;;;;;::::1;;37000:13;37016:9;37000:25;;37042:4;-1:-1:-1::0;;;;;37036:19:0::1;;37063:8;37036:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;37036:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;37036:38:0;;;;;37098:4;-1:-1:-1::0;;;;;37092:20:0::1;;37113:48;37135:7;37144:4;;37149:1;37144:7;;;;;;37113:48;37163:8;37092:80;;;;;;;;;;;;;-1:-1:-1::0;;;;;37092:80:0::1;-1:-1:-1::0;;;;;37092:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;37092:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;37092:80:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;37092:80:0;37085:88:::1;;;;37184:18;37212:4:::0;;-1:-1:-1;;37217:15:0;;37212:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;37212:21:0::1;-1:-1:-1::0;;;;;37205:39:0::1;;37245:2;37205:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;37205:43:0::1;-1:-1:-1::0;;;;;37205:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;37205:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;37205:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;37205:43:0;37259:44:::1;::::0;;37205:43:::1;37259:44:::0;;::::1;::::0;;;;;;;;;;;37205:43;;-1:-1:-1;37259:44:0::1;::::0;;;37294:4;;;;;;37259:44;::::1;::::0;37294:4;;37259:44;37294:4;37259:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;37300:2:0;;-1:-1:-1;37259:34:0::1;::::0;-1:-1:-1;;37259:44:0:i:1;:::-;37402:12:::0;37336:62:::1;37384:13:::0;37343:4;;-1:-1:-1;;37348:15:0;;37343:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;37343:21:0::1;-1:-1:-1::0;;;;;37336:39:0::1;;37376:2;37336:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;37336:43:0::1;-1:-1:-1::0;;;;;37336:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;24639:851:0::0;24893:12;24907;24874:8;21029:15;21017:8;:27;;21009:63;;;;;-1:-1:-1;;;21009:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21009:63:0;;;;;;;;;;;;;;;24932:12:::1;24947:46;24969:7;24978:6;24986;24947:21;:46::i;:::-;25004:59;::::0;;-1:-1:-1;;;25004:59:0;;25035:10:::1;25004:59;::::0;::::1;::::0;-1:-1:-1;;;;;25004:30:0;::::1;:59:::0;;;;;;;;;;;;;;24932:61;;-1:-1:-1;25004:30:0;;::::1;::::0;:59;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;25004:30:0;:59;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;25004:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25004:59:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;25131:26:0::1;::::0;;-1:-1:-1;;;25131:26:0;;-1:-1:-1;;;;;25131:26:0;;::::1;;::::0;::::1;::::0;;;25101:12:::1;::::0;;;25131:22;;::::1;::::0;::::1;::::0;:26;;;;;;;;;;;25101:12;25131:22;:26;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;25131:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25131:26:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;25131:26:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;25131:26:0;-1:-1:-1;25169:14:0::1;25188:40;25213:6:::0;25221;25188:24:::1;:40::i;:::-;25168:60;;;25270:6;-1:-1:-1::0;;;;;25260:16:0::1;:6;-1:-1:-1::0;;;;;25260:16:0::1;;:58;;25301:7;25310;25260:58;;;25280:7;25289;25260:58;25239:79:::0;;-1:-1:-1;25239:79:0;-1:-1:-1;25337:21:0;;::::1;;25329:71;;;;-1:-1:-1::0;;;25329:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25430:10;25419:7;:21;;25411:71;;;;-1:-1:-1::0;;;25411:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21083:1;;;;24639:851:::0;;;;;;;;;;;:::o;20828:41::-;;;:::o;39152:250::-;39296:21;39342:52;39370:7;39379:8;39389:4;39342:27;:52::i;26852:663::-;27141:16;27159:14;27186:12;27201:43;27223:7;27232:5;27239:4;27201:21;:43::i;:::-;27186:58;;27255:10;27268;:33;;27292:9;27268:33;;;-1:-1:-1;;27268:33:0;27312:77;;;-1:-1:-1;;;27312:77:0;;27337:10;27312:77;;;;27357:4;27312:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27255:46;;-1:-1:-1;;;;;;27312:24:0;;;;;:77;;;;;-1:-1:-1;;27312:77:0;;;;;;;;-1:-1:-1;27312:24:0;:77;;;2:2:-1;;;;27:1;24;17:12;2:2;27312:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27312:77:0;;;;27427:80;27446:5;27453:9;27464:14;27480:12;27494:2;27498:8;27427:18;:80::i;:::-;27400:107;;;;-1:-1:-1;26852:663:0;-1:-1:-1;;;;;;;;;;;;;26852:663:0:o;22890:732::-;23178:12;23192;23206:14;23159:8;21029:15;21017:8;:27;;21009:63;;;;;-1:-1:-1;;;21009:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21009:63:0;;;;;;;;;;;;;;;23254:85:::1;23268:6;23276;23284:14;23300;23316:10;23328;23254:13;:85::i;:::-;23233:106:::0;;-1:-1:-1;23233:106:0;-1:-1:-1;23350:12:0::1;23365:46;23387:7;23396:6:::0;23404;23365:21:::1;:46::i;:::-;23350:61;;23422:66;23454:6;23462:10;23474:4;23480:7;23422:31;:66::i;:::-;23499;23531:6;23539:10;23551:4;23557:7;23499:31;:66::i;:::-;23600:4;-1:-1:-1::0;;;;;23588:22:0::1;;23611:2;23588:26;;;;;;;;;;;;;-1:-1:-1::0;;;;;23588:26:0::1;-1:-1:-1::0;;;;;23588:26:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23588:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23588:26:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23588:26:0;22890:732;;;;-1:-1:-1;23588:26:0;;-1:-1:-1;22890:732:0;;-1:-1:-1;;;;;;;;;22890:732:0:o;20262:109::-;20421:19;20429:10;20421:7;:19::i;:::-;20413:64;;;;;-1:-1:-1;;;20413:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20335:28:::1;20354:8;20335:18;:28::i;:::-;20262:109:::0;:::o;23628:968::-;23881:16;23899:14;23915;23862:8;21029:15;21017:8;:27;;21009:63;;;;;-1:-1:-1;;;21009:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21009:63:0;;;;;;;;;;;;;;;23969:176:::1;23997:5;24017:4;24036:18;24069:9;24093:14;24122:12;23969:13;:176::i;:::-;23942:203:::0;;-1:-1:-1;23942:203:0;-1:-1:-1;24156:12:0::1;24171:43;24193:7;24202:5:::0;24209:4:::1;24171:21;:43::i;:::-;24156:58;;24225:69;24257:5;24264:10;24276:4;24282:11;24225:31;:69::i;:::-;24311:4;-1:-1:-1::0;;;;;24305:19:0::1;;24332:9;24305:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24305:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24305:39:0;;;;;24368:4;-1:-1:-1::0;;;;;24362:20:0::1;;24383:4;24389:9;24362:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;24362:37:0::1;-1:-1:-1::0;;;;;24362:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24362:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24362:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;24362:37:0;24355:45:::1;;;;24435:4;-1:-1:-1::0;;;;;24423:22:0::1;;24446:2;24423:26;;;;;;;;;;;;;-1:-1:-1::0;;;;;24423:26:0::1;-1:-1:-1::0;;;;;24423:26:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24423:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24423:26:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;24423:26:0;;-1:-1:-1;24500:9:0::1;:21:::0;-1:-1:-1;24496:92:0::1;;;24523:65;24554:10;24578:9;24566;:21;24523:30;:65::i;:::-;21083:1;23628:968:::0;;;;;;;;;;;:::o;33607:802::-;33820:21;33792:8;21029:15;21017:8;:27;;21009:63;;;;;-1:-1:-1;;;21009:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21009:63:0;;;;;;;;;;;;;;;33878:4:::1;-1:-1:-1::0;;;;;33867:15:0::1;:4;;33872:1;33867:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;33867:7:0::1;-1:-1:-1::0;;;;;33867:15:0::1;;33859:56;;;::::0;;-1:-1:-1;;;33859:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33859:56:0;;;;;;;;;;;;;::::1;;33936:52;33963:7;33972:9;33983:4;;33936:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33936:26:0::1;::::0;-1:-1:-1;;;33936:52:0:i:1;:::-;33926:62;;34021:9;34007:7;34015:1;34007:10;;;;;;;;;;;;;;:23;;33999:74;;;;-1:-1:-1::0;;;33999:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34090:4;-1:-1:-1::0;;;;;34084:19:0::1;;34111:7;34119:1;34111:10;;;;;;;;;;;;;;34084:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34084:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34084:40:0;;;;;34148:4;-1:-1:-1::0;;;;;34142:20:0::1;;34163:48;34185:7;34194:4;;34199:1;34194:7;;;;;;34163:48;34213:7;34221:1;34213:10;;;;;;;;;;;;;;34142:82;;;;;;;;;;;;;-1:-1:-1::0;;;;;34142:82:0::1;-1:-1:-1::0;;;;;34142:82:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34142:82:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34142:82:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;34142:82:0;34135:90:::1;;;;34236:24;34242:7;34251:4;;34236:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;34257:2:0;;-1:-1:-1;34236:5:0::1;::::0;-1:-1:-1;;34236:24:0:i:1;:::-;34323:7;34331:1;34323:10;;;;;;;;;;;;;;34311:9;:22;34307:94;;;34335:66;34366:10;34390:7;34398:1;34390:10;;;;;;;;;;;;;;34378:9;:22;34335:30;:66::i;21355:116::-:0;20421:19;20429:10;20421:7;:19::i;:::-;20413:64;;;;;-1:-1:-1;;;20413:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21433:13:::1;:30:::0;;-1:-1:-1;;;;;;21433:30:0::1;-1:-1:-1::0;;;;;21433:30:0;;;::::1;::::0;;;::::1;::::0;;21355:116::o;793:449::-;1025:45;;;-1:-1:-1;;;;;1025:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1025:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1014:57:0;;;;979:12;;993:17;;1014:10;;;;1025:45;1014:57;;;25:18:-1;1014:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1014:57:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;978:93:0;;;;1104:7;:57;;;;-1:-1:-1;1116:11:0;;:16;;:44;;;1147:4;1136:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1136:24:0;1116:44;1082:152;;;;-1:-1:-1;;;1082:152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;793:449;;;;;:::o;1756:217::-;1869:12;;;1829;1869;;;;;;;;;-1:-1:-1;;;;;1847:7:0;;;1862:5;;1847:35;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1847:35:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1828:54:0;;;1901:7;1893:72;;;;-1:-1:-1;;;1893:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1756:217;;;:::o;13805:551::-;13906:21;13963:1;13948:4;:11;:16;;13940:56;;;;;-1:-1:-1;;;13940:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14028:4;:11;14017:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14017:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14017:23:0;;14007:33;;14064:8;14051:7;14059:1;14051:10;;;;;;;;;;;;;:21;;;;;14088:6;14083:266;14114:1;14100:4;:11;:15;14096:1;:19;14083:266;;;14138:14;14154:15;14173:42;14185:7;14194:4;14199:1;14194:7;;;;;;;;;;;;;;14203:4;14208:1;14212;14208:5;14203:11;;;;;;;;;;;;;;14173;:42::i;:::-;14137:78;;;;14247:90;14260:7;14268:1;14260:10;;;;;;;;;;;;;;14272:9;14283:10;14295:41;14306:7;14315:4;14320:1;14315:7;;;;;;;;;;;;;;14324:4;14329:1;14333;14329:5;14324:11;;;;;;;;;;;;;;14295:10;:41::i;:::-;14247:12;:90::i;:::-;14230:7;14238:1;14242;14238:5;14230:14;;;;;;;;;;;;;;;;;:107;-1:-1:-1;;14117:3:0;;14083:266;;;;13805:551;;;;;:::o;10881:478::-;10970:12;10996:14;11012;11030:26;11041:6;11049;11030:10;:26::i;:::-;11194:32;;;-1:-1:-1;;11194:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;11194:32:0;;;;;11184:43;;;;;;-1:-1:-1;;;;;;11097:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;11097:251:0;;;;;;;11087:262;;;;;;;;;10881:478;-1:-1:-1;;;;;10881:478:0:o;1250:498::-;1521:51;;;-1:-1:-1;;;;;1521:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1521:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1510:63:0;;;;1475:12;;1489:17;;1510:10;;;;1521:51;1510:63;;;25:18:-1;1510:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1510:63:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1474:99:0;;;;1606:7;:57;;;;-1:-1:-1;1618:11:0;;:16;;:44;;;1649:4;1638:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1638:24:0;1618:44;1584:156;;;;-1:-1:-1;;;1584:156:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1250:498;;;;;;:::o;29123:877::-;29230:6;29225:768;29256:1;29242:4;:11;:15;29238:1;:19;29225:768;;;29280:13;29295:14;29314:4;29319:1;29314:7;;;;;;;;;;;;;;29323:4;29328:1;29332;29328:5;29323:11;;;;;;;;;;;;;;29279:56;;;;29351:14;29370:39;29395:5;29402:6;29370:24;:39::i;:::-;29350:59;;;29424:14;29441:7;29449:1;29453;29449:5;29441:14;;;;;;;;;;;;;;29424:31;;29471:15;29488;29516:6;-1:-1:-1;;;;;29507:15:0;:5;-1:-1:-1;;;;;29507:15:0;;:61;;29549:9;29565:1;29507:61;;;29531:1;29535:9;29507:61;29587:13;;29470:98;;-1:-1:-1;29470:98:0;-1:-1:-1;;;;;;29587:13:0;:27;29583:140;;29650:13;;29635:72;;;-1:-1:-1;;;29635:72:0;;29670:10;29635:72;;;;-1:-1:-1;;;;;29635:72:0;;;;;;;;;;;;;;;;;;;;;;29650:13;;;;;29635:34;;:72;;;;;;;;;;;;;;29650:13;;29635:72;;;2:2:-1;;;;27:1;24;17:12;2:2;29635:72:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29635:72:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;29583:140:0;29737:10;29768:1;29754:4;:11;:15;29750:1;:19;:79;;29826:3;29750:79;;;29772:51;29794:7;29803:6;29811:4;29816:1;29820;29816:5;29811:11;;;;;;;;;;;;;;29772:21;:51::i;:::-;29737:92;;29856:45;29878:7;29887:5;29894:6;29856:21;:45::i;:::-;-1:-1:-1;;;;;29844:63:0;;29926:10;29938;29950:2;29964:1;29954:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;29954:12:0;87:42:-1;143:17;;-1:-1;29954:12:0;;29844:137;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29844:137:0;-1:-1:-1;;;;;29844:137:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;29844:137:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29844:137:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29259:3:0;;;;;-1:-1:-1;29225:768:0;;-1:-1:-1;;;;;;;;29225:768:0;;;29123:877;;;:::o;14437:572::-;14538:21;14595:1;14580:4;:11;:16;;14572:56;;;;;-1:-1:-1;;;14572:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14660:4;:11;14649:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14649:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14649:23:0;;14639:33;;14713:9;14683:7;14708:1;14691:7;:14;:18;14683:27;;;;;;;;;;;;;;;;;:39;14747:11;;-1:-1:-1;;14747:15:0;14733:269;14764:5;;14733:269;;14792:14;14808:15;14827:42;14839:7;14848:4;14857:1;14853;:5;14848:11;;;;;;;;;;;;;;14861:4;14866:1;14861:7;;;;;;;14827:42;14791:78;;;;14901:89;14913:7;14921:1;14913:10;;;;;;;;;;;;;;14925:9;14936:10;14948:41;14959:7;14968:4;14977:1;14973;:5;14968:11;;;;;;;;;;;;;;14981:4;14986:1;14981:7;;;;;;;14948:41;14901:11;:89::i;:::-;14884:7;14896:1;14892;:5;14884:14;;;;;;;;;;;;;;;;;:106;-1:-1:-1;;;;14771:3:0;14733:269;;12553:547;12660:14;12706:1;12695:8;:12;12687:65;;;;-1:-1:-1;;;12687:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12783:1;12771:9;:13;:31;;;;;12801:1;12788:10;:14;12771:31;12763:81;;;;-1:-1:-1;;;12763:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12855:20;12878:38;12891:24;12896:5;12907:7;12891:24;:15;:24;:::i;:::-;12878:8;;:38;:12;:38;:::i;:::-;12855:61;-1:-1:-1;12927:14:0;12944:31;12855:61;12964:10;12944:31;:19;:31;:::i;:::-;12927:48;-1:-1:-1;12986:16:0;13005:41;13030:15;13005:20;:9;13019:5;13005:20;:13;:20;:::i;:::-;:24;:41;:24;:41;:::i;:::-;12986:60;;13081:11;13069:9;:23;;;;;;;12553:547;-1:-1:-1;;;;;;;;12553:547:0:o;13221:502::-;13328:13;13374:1;13362:9;:13;13354:67;;;;-1:-1:-1;;;13354:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13452:1;13440:9;:13;:31;;;;;13470:1;13457:10;:14;13440:31;13432:81;;;;-1:-1:-1;;;13432:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13524:14;13541:35;13570:5;13541:24;:9;13555;13541:24;:13;:24;:::i;:::-;:28;:35;:28;:35;:::i;:::-;13524:52;-1:-1:-1;13587:16:0;13606:55;13636:24;13641:5;13652:7;13636:24;:15;:24;:::i;:::-;13606:25;:10;13621:9;13606:25;:14;:25;:::i;:55::-;13587:74;;13683:32;13713:1;13696:11;13684:9;:23;;;;;;;13683:32;:29;:32;:::i;:::-;13672:43;13221:502;-1:-1:-1;;;;;;;13221:502:0:o;34556:1369::-;34669:6;34664:1254;34695:1;34681:4;:11;:15;34677:1;:19;34664:1254;;;34719:13;34734:14;34753:4;34758:1;34753:7;;;;;;;;;;;;;;34762:4;34767:1;34771;34767:5;34762:11;;;;;;;;;;;;;;34718:56;;;;34790:14;34809:39;34834:5;34841:6;34809:24;:39::i;:::-;34789:59;;;34863:16;34894:45;34916:7;34925:5;34932:6;34894:21;:45::i;:::-;34863:77;;34955:16;34986:17;35074:13;35089;35107:4;-1:-1:-1;;;;;35107:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35107:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35107:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35107:18:0;;;;;;;-1:-1:-1;;;;;35073:52:0;;;;-1:-1:-1;35073:52:0;;-1:-1:-1;35141:17:0;;-1:-1:-1;;;;;35182:15:0;;;;;;;:61;;35224:8;35234;35182:61;;;35201:8;35211;35182:61;35140:103;;;;35272:56;35315:12;35279:5;-1:-1:-1;;;;;35272:23:0;;35304:4;35272:38;;;;;;;;;;;;;-1:-1:-1;;;;;35272:38:0;-1:-1:-1;;;;;35272:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;35272:56:0;35258:70;;35358:84;35385:11;35398:12;35412:13;35427:4;-1:-1:-1;;;;;35427:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35427:14:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35427:14:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35427:14:0;35358:84;;:26;:84::i;:::-;35476:13;;35343:99;;-1:-1:-1;;;;;;35476:13:0;:27;;-1:-1:-1;35472:143:0;;-1:-1:-1;;;35472:143:0;35539:13;;35524:75;;;-1:-1:-1;;;35524:75:0;;35559:10;35524:75;;;;-1:-1:-1;;;;;35524:75:0;;;;;;;;;;;;;;;;;;;;;;35539:13;;;;;35524:34;;:75;;;;;;;;;;;;;;35539:13;;35524:75;;;2:2:-1;;;;27:1;24;17:12;2:2;35524:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35524:75:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;35472:143:0;35630:15;35647;35675:6;-1:-1:-1;;;;;35666:15:0;:5;-1:-1:-1;;;;;35666:15:0;;:67;;35711:12;35730:1;35666:67;;;35690:1;35694:12;35666:67;35629:104;;;;35748:10;35779:1;35765:4;:11;:15;35761:1;:19;:79;;35837:3;35761:79;;;35783:51;35805:7;35814:6;35822:4;35827:1;35831;35827:5;35822:11;;;;;;;35783:51;35893:12;;;35903:1;35893:12;;;;;;;;;;-1:-1:-1;;;35855:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;35855:51:0;;;;;;;;;;;;;;;;;;;;;;35748:92;;-1:-1:-1;35855:9:0;;;;;;35865:10;;35877;;35748:92;;35893:12;;35855:51;;;;;;;;35893:12;;35855:51;;;;35893:12;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;35855:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35855:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;34698:3:0;;;;;-1:-1:-1;34664:1254:0;;-1:-1:-1;;;;;;;;;;34664:1254:0;9917:129;10001:5;;;9996:16;;;;9988:50;;;;;-1:-1:-1;;;9988:50:0;;;;;;;;;;;;-1:-1:-1;;;9988:50:0;;;;;;;;;;;;;;12116:315;12198:12;12241:1;12231:7;:11;12223:58;;;;-1:-1:-1;;;12223:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12311:1;12300:8;:12;:28;;;;;12327:1;12316:8;:12;12300:28;12292:78;;;;-1:-1:-1;;;12292:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12415:8;12391:21;:7;12403:8;12391:21;:11;:21;:::i;:::-;:32;;;;;;;12116:315;-1:-1:-1;;;;12116:315:0:o;10446:343::-;10521:14;10537;10582:6;-1:-1:-1;;;;;10572:16:0;:6;-1:-1:-1;;;;;10572:16:0;;;10564:63;;;;-1:-1:-1;;;10564:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10666:6;-1:-1:-1;;;;;10657:15:0;:6;-1:-1:-1;;;;;10657:15:0;;:53;;10695:6;10703;10657:53;;;10676:6;10684;10657:53;10638:72;;-1:-1:-1;10638:72:0;-1:-1:-1;;;;;;10729:20:0;;10721:60;;;;;-1:-1:-1;;;10721:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10446:343;;;;;:::o;21511:1373::-;21824:47;;;-1:-1:-1;;;21824:47:0;;-1:-1:-1;;;;;21824:47:0;;;;;;;;;;;;;;;;21729:12;;;;;;21839:7;21824:31;;;;;;:47;;;;;;;;;;;;;;;:31;:47;;;2:2:-1;;;;27:1;24;17:12;2:2;21824:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21824:47:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21824:47:0;-1:-1:-1;;;;;21824:61:0;;21820:144;;;21902:50;;;-1:-1:-1;;;21902:50:0;;-1:-1:-1;;;;;21902:50:0;;;;;;;;;;;;;;;;21917:7;21902:34;;;;;;:50;;;;;;;;;;;;;;;-1:-1:-1;21902:34:0;:50;;;2:2:-1;;;;27:1;24;17:12;2:2;21902:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21902:50:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;21820:144:0;21975:13;21990;22007:50;22033:7;22042:6;22050;22007:25;:50::i;:::-;21974:83;;;;22072:8;22084:1;22072:13;:30;;;;-1:-1:-1;22089:13:0;;22072:30;22068:809;;;22141:14;;-1:-1:-1;22157:14:0;;-1:-1:-1;22068:809:0;;;22205:19;22227:55;22247:14;22263:8;22273;22227:19;:55::i;:::-;22205:77;;22319:14;22301;:32;22297:569;;22380:10;22362:14;:28;;22354:78;;;;-1:-1:-1;;;22354:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22473:14;;-1:-1:-1;22489:14:0;-1:-1:-1;22489:14:0;22297:569;;;22545:19;22567:55;22587:14;22603:8;22613;22567:19;:55::i;:::-;22545:77;;22666:14;22648;:32;;22641:40;;;;22726:10;22708:14;:28;;22700:78;;;;-1:-1:-1;;;22700:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22819:14;-1:-1:-1;22835:14:0;;-1:-1:-1;22297:569:0;22068:809;;21511:1373;;;;;;;;;;;:::o;20025:229::-;-1:-1:-1;;;;;20099:22:0;;20091:73;;;;-1:-1:-1;;;20091:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20201:6;;;20180:38;;-1:-1:-1;;;;;20180:38:0;;;;20201:6;;;20180:38;;;20229:6;:17;;-1:-1:-1;;;;;;20229:17:0;-1:-1:-1;;;;;20229:17:0;;;;;;;;;;20025:229::o;11615:388::-;11708:13;11723;11750:14;11769:26;11780:6;11788;11769:10;:26::i;:::-;11749:46;;;11807:13;11822;11852:32;11860:7;11869:6;11877;11852:7;:32::i;:::-;-1:-1:-1;;;;;11840:57:0;;:59;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11840:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11840:59:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11840:59:0;;;;;;;-1:-1:-1;;;;;11806:93:0;;;;-1:-1:-1;11806:93:0;;-1:-1:-1;;;;;;11933:16:0;;;;;;;:62;;11976:8;11986;11933:62;;;11953:8;11963;11933:62;11910:85;;;;-1:-1:-1;11615:388:0;-1:-1:-1;;;;;;;11615:388:0:o;11367:190::-;11459:12;11506:32;11514:7;11523:6;11531;11506:7;:32::i;:::-;-1:-1:-1;;;;;11494:53:0;;:55;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11494:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11494:55:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11494:55:0;11484:65;;;11367:190;-1:-1:-1;;;;11367:190:0:o;10054:142::-;10106:6;10133;;;:30;;-1:-1:-1;;10148:5:0;;;10162:1;10157;10148:5;10157:1;10143:15;;;;;:20;10133:30;10125:63;;;;;-1:-1:-1;;;10125:63:0;;;;;;;;;;;;-1:-1:-1;;;10125:63:0;;;;;;;;;;;;;;9781:128;9865:5;;;9860:16;;;;9852:49;;;;;-1:-1:-1;;;9852:49:0;;;;;;;;;;;;-1:-1:-1;;;9852:49:0;;;;;;;;;;;;;

Swarm Source

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