Contract 0xd48745e39bbed146eec15b79cbf964884f9877c2

 
Txn Hash
Block
From
To
Value [Txn Fee]
0xd2b2a192db0e6102c82a3ee3a30ddc61a7e0561931db7e146e28178dd246c15b83438822021-06-16 10:05:396 secs ago0xa55936d7ba3a5589978ec6b1699e356d75e8821f IN  0xd48745e39bbed146eec15b79cbf964884f9877c20.042922753782907 BNB0.000988245
0xaa3896037acdb86994068075b684cbd54f24c24da1b1af40157ed2f345904c3283438762021-06-16 10:05:2124 secs ago0xfa7b4162c116efefd5e03ec382a62ac7107fb541 IN  0xd48745e39bbed146eec15b79cbf964884f9877c20 BNB0.000643865
0x31432d6cd2a24ce87fe0f09e8ae9a7f0426697f6c38b0e6f627221833bc07c4d83438762021-06-16 10:05:2124 secs ago0x0a4e098ef581a9ef1277b44a75b720a0bc381958 IN  0xd48745e39bbed146eec15b79cbf964884f9877c27.1 BNB0.00065523
0x023dfb7d35ee2fe35f13b9231220f3a95280a4ed7237561a10b10bf98a781a6e83438652021-06-16 10:04:4857 secs ago0xacb3fae87de6e2ee0f7e136d563aa16c49a13065 IN  0xd48745e39bbed146eec15b79cbf964884f9877c20 BNB0.000698994
0xd8f952233da5c3aff2aff4175864f2337682be8c00803452d427b3ecd58d8e9583438642021-06-16 10:04:451 min ago0x5fa14270c772a99f956f49e5b10fee39d0550d3d IN  0xd48745e39bbed146eec15b79cbf964884f9877c20 BNB0.003248728837
0x9730f38efcc9cb330aaa81ccb1add687fab255294696c3c599a706ec03e5160983438622021-06-16 10:04:391 min ago0xc255b73534dbd8c38a7a12a4e01ad0061c376bba IN  0xd48745e39bbed146eec15b79cbf964884f9877c20.438768040885499 BNB0.00096848
0xa64705396c3b134f8bc0202152452a753dee12fd8ddba05a2d3236d66cf657ac83438622021-06-16 10:04:391 min ago0xf73dead39edc8319d8cc08e69cbc5a30ba1607ed IN  0xd48745e39bbed146eec15b79cbf964884f9877c20 BNB0.000617445
0xa1af348611f855ed505582b465ba93904ce0a561ec0915354997b1ea33f2f38883438602021-06-16 10:04:331 min ago0x5fa14270c772a99f956f49e5b10fee39d0550d3d IN  0xd48745e39bbed146eec15b79cbf964884f9877c20 BNB0.003248728837
0x6d37a1cbbc08b611dad3a54dee448d44a122fd3180672328daa1ce23beb1cfc383438592021-06-16 10:04:301 min ago0xa55936d7ba3a5589978ec6b1699e356d75e8821f IN  0xd48745e39bbed146eec15b79cbf964884f9877c20.043 BNB0.00073011
0x511b8426d0af5affb3175f7871e1121de7dcf580ad1fe39cf5a5ce37fdc2675c83438582021-06-16 10:04:271 min ago0x5fa14270c772a99f956f49e5b10fee39d0550d3d IN  0xd48745e39bbed146eec15b79cbf964884f9877c20 BNB0.003248728837
0xf7765014c1f7f11f3a8d061c89a6e96aea48a1c15bba72b7a009343b3f92040083438552021-06-16 10:04:181 min ago0x077eed12a2b27e1541e91bd0f6930fb8b1d8a4cd IN  0xd48745e39bbed146eec15b79cbf964884f9877c20 BNB0.00182875
0x048cdd74af53acf9ccdf1e7360316d79de613f5521ce6bcef8a88d4d1636cca983438542021-06-16 10:04:151 min ago0x385e9b440d86f3f1414544c2e188135626c5c809 IN  0xd48745e39bbed146eec15b79cbf964884f9877c20 BNB0.00061596
0x693a13e65bcfb8bb2b5e9ef1ee0759c77f1fab2bdad681731d23754be1dfd43f83438482021-06-16 10:03:571 min ago0x9683a9fb7e2a12a0f30265df5f08018577db6e72 IN  0xd48745e39bbed146eec15b79cbf964884f9877c20 BNB0.00067653
0x8dc050e7bac6f96e1f7b890e3df18549e8ecea55ceb07086f8f06a3cc44f0c9583438462021-06-16 10:03:511 min ago0x5d0cbb0d14e6b9eb983e0839607aee8abbea5dc3 IN  0xd48745e39bbed146eec15b79cbf964884f9877c20 BNB0.000672375
0x1d6c8f69216ab1b2744bd62c0ef0eafa2bd19940e4c2f7b13b1260ae7115bf5b83438422021-06-16 10:03:392 mins ago0x81efd5b6ed100ea74e9fb69dcd3f10c3fc531e47 IN  0xd48745e39bbed146eec15b79cbf964884f9877c20 BNB0.000938035
0x7f1b0576382db7e2816b8a10a87f69863deb58f5b3a1474b97223c6f7ed1cf8c83438382021-06-16 10:03:272 mins ago0xb87ca2b310ed2010207b8e9ae8f1b5b542a9ab8d IN  0xd48745e39bbed146eec15b79cbf964884f9877c20 BNB0.000885025
0x4d7317fea018509ff429329ccc8ff32b373ba17d034c4075777fc53ea6403d7383438362021-06-16 10:03:212 mins ago0x755b4ebe4cfbccfcc4c8a60237b8f3027cdce35d IN  0xd48745e39bbed146eec15b79cbf964884f9877c20 BNB0.001016295
0x684df0eb9ed796365cc7755453cb5bb9882b3dde26052de536449604dc4852c583438182021-06-16 10:02:273 mins ago0x850c16636890c25d2fe851a77ad170a1e428cff8 IN  0xd48745e39bbed146eec15b79cbf964884f9877c20.0276401 BNB0.000786204
0x745d3181b32bef78dac4046b24ec0ff940e91869dcb3461d2fbe396fc213c9d183438062021-06-16 10:01:513 mins ago0x9cd0d260d5c76a8db95beb3e7b39fad3741eac35 IN  0xd48745e39bbed146eec15b79cbf964884f9877c20 BNB0.000643685
0x78f78ea90e4779e85d279449bfcad2054cbea76ff73c6ff19c1cc34015f37ea583438022021-06-16 10:01:394 mins ago0x5fa14270c772a99f956f49e5b10fee39d0550d3d IN  0xd48745e39bbed146eec15b79cbf964884f9877c20 BNB0.003248457637
0x6185521ccd2ba614a32a1386006ab3f3bb92f97ba2fab0bcee0dcda56ce051df83438002021-06-16 10:01:334 mins ago0x5189e01249e28da49994f490e79405ac6b174ec7 IN  0xd48745e39bbed146eec15b79cbf964884f9877c20.5 BNB0.00065517
0xdf1fe5137bdfbdfaa5f555fa42b75d46bdfa8dff32a0dd6142c5d8aae2d83d2e83438002021-06-16 10:01:334 mins ago0x000000a0c521dd28025b937b1f15141d61969959 IN  0xd48745e39bbed146eec15b79cbf964884f9877c20 BNB0.000395544604
0x353be1ddef0b9be9e286fa810ee100e4b59e0b2f7ec632165d50fee226d18e5a83438002021-06-16 10:01:334 mins ago0x000000a0c521dd28025b937b1f15141d61969959 IN  0xd48745e39bbed146eec15b79cbf964884f9877c20 BNB0.001417013913
0x86d6e807bd8f0a431df61d96bd38cd0dced292f76fec33ce94b4ac5bd7957c1683438002021-06-16 10:01:334 mins ago0x000000a0c521dd28025b937b1f15141d61969959 IN  0xd48745e39bbed146eec15b79cbf964884f9877c20 BNB0.001502109266
0x31b8c9610d2dc59da5604fb086e871c61c720ba6a827a5f2afa3f299d538fa0283438002021-06-16 10:01:334 mins ago0x5fa14270c772a99f956f49e5b10fee39d0550d3d IN  0xd48745e39bbed146eec15b79cbf964884f9877c20 BNB0.000716691517
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xd8f952233da5c3aff2aff4175864f2337682be8c00803452d427b3ecd58d8e9583438642021-06-16 10:04:451 min ago 0xd48745e39bbed146eec15b79cbf964884f9877c20x5fa14270c772a99f956f49e5b10fee39d0550d3d7.367708425225917598 BNB
0xd8f952233da5c3aff2aff4175864f2337682be8c00803452d427b3ecd58d8e9583438642021-06-16 10:04:451 min ago Binance: WBNB Token 0xd48745e39bbed146eec15b79cbf964884f9877c27.367708425225917598 BNB
0x9730f38efcc9cb330aaa81ccb1add687fab255294696c3c599a706ec03e5160983438622021-06-16 10:04:391 min ago 0xd48745e39bbed146eec15b79cbf964884f9877c2 Binance: WBNB Token0.438768040885499999 BNB
0xa64705396c3b134f8bc0202152452a753dee12fd8ddba05a2d3236d66cf657ac83438622021-06-16 10:04:391 min ago 0xd48745e39bbed146eec15b79cbf964884f9877c20xf73dead39edc8319d8cc08e69cbc5a30ba1607ed4.955538194023569349 BNB
0xa64705396c3b134f8bc0202152452a753dee12fd8ddba05a2d3236d66cf657ac83438622021-06-16 10:04:391 min ago Binance: WBNB Token 0xd48745e39bbed146eec15b79cbf964884f9877c24.955538194023569349 BNB
0xa1af348611f855ed505582b465ba93904ce0a561ec0915354997b1ea33f2f38883438602021-06-16 10:04:331 min ago 0xd48745e39bbed146eec15b79cbf964884f9877c20x5fa14270c772a99f956f49e5b10fee39d0550d3d4.913108259498083734 BNB
0xa1af348611f855ed505582b465ba93904ce0a561ec0915354997b1ea33f2f38883438602021-06-16 10:04:331 min ago Binance: WBNB Token 0xd48745e39bbed146eec15b79cbf964884f9877c24.913108259498083734 BNB
0x6d37a1cbbc08b611dad3a54dee448d44a122fd3180672328daa1ce23beb1cfc383438592021-06-16 10:04:301 min ago 0xd48745e39bbed146eec15b79cbf964884f9877c2 Binance: WBNB Token0.043 BNB
0x511b8426d0af5affb3175f7871e1121de7dcf580ad1fe39cf5a5ce37fdc2675c83438582021-06-16 10:04:271 min ago 0xd48745e39bbed146eec15b79cbf964884f9877c20x5fa14270c772a99f956f49e5b10fee39d0550d3d9.202513179098422718 BNB
0x511b8426d0af5affb3175f7871e1121de7dcf580ad1fe39cf5a5ce37fdc2675c83438582021-06-16 10:04:271 min ago Binance: WBNB Token 0xd48745e39bbed146eec15b79cbf964884f9877c29.202513179098422718 BNB
0x048cdd74af53acf9ccdf1e7360316d79de613f5521ce6bcef8a88d4d1636cca983438542021-06-16 10:04:151 min ago 0xd48745e39bbed146eec15b79cbf964884f9877c20x385e9b440d86f3f1414544c2e188135626c5c8090.092312418511214654 BNB
0x048cdd74af53acf9ccdf1e7360316d79de613f5521ce6bcef8a88d4d1636cca983438542021-06-16 10:04:151 min ago Binance: WBNB Token 0xd48745e39bbed146eec15b79cbf964884f9877c20.092312418511214654 BNB
0x8dc050e7bac6f96e1f7b890e3df18549e8ecea55ceb07086f8f06a3cc44f0c9583438462021-06-16 10:03:511 min ago 0xd48745e39bbed146eec15b79cbf964884f9877c20x5d0cbb0d14e6b9eb983e0839607aee8abbea5dc30.877236761637467074 BNB
0x8dc050e7bac6f96e1f7b890e3df18549e8ecea55ceb07086f8f06a3cc44f0c9583438462021-06-16 10:03:511 min ago Binance: WBNB Token 0xd48745e39bbed146eec15b79cbf964884f9877c20.877236761637467074 BNB
0x684df0eb9ed796365cc7755453cb5bb9882b3dde26052de536449604dc4852c583438182021-06-16 10:02:273 mins ago 0xd48745e39bbed146eec15b79cbf964884f9877c2 Binance: WBNB Token0.0276401 BNB
0x745d3181b32bef78dac4046b24ec0ff940e91869dcb3461d2fbe396fc213c9d183438062021-06-16 10:01:513 mins ago 0xd48745e39bbed146eec15b79cbf964884f9877c20x9cd0d260d5c76a8db95beb3e7b39fad3741eac350.027676987229178602 BNB
0x745d3181b32bef78dac4046b24ec0ff940e91869dcb3461d2fbe396fc213c9d183438062021-06-16 10:01:513 mins ago Binance: WBNB Token 0xd48745e39bbed146eec15b79cbf964884f9877c20.027676987229178602 BNB
0x78f78ea90e4779e85d279449bfcad2054cbea76ff73c6ff19c1cc34015f37ea583438022021-06-16 10:01:394 mins ago 0xd48745e39bbed146eec15b79cbf964884f9877c20x5fa14270c772a99f956f49e5b10fee39d0550d3d7.207366454484059011 BNB
0x78f78ea90e4779e85d279449bfcad2054cbea76ff73c6ff19c1cc34015f37ea583438022021-06-16 10:01:394 mins ago Binance: WBNB Token 0xd48745e39bbed146eec15b79cbf964884f9877c27.207366454484059011 BNB
0x6185521ccd2ba614a32a1386006ab3f3bb92f97ba2fab0bcee0dcda56ce051df83438002021-06-16 10:01:334 mins ago 0xd48745e39bbed146eec15b79cbf964884f9877c2 Binance: WBNB Token0.5 BNB
0xb41f2ee36b234a0716ed4a7d2538e39eb76e4edce8f80506a893cb495c451d0183437972021-06-16 10:01:244 mins ago 0xd48745e39bbed146eec15b79cbf964884f9877c2 Binance: WBNB Token0.7 BNB
0xb41f2ee36b234a0716ed4a7d2538e39eb76e4edce8f80506a893cb495c451d0183437972021-06-16 10:01:244 mins ago 0xdda9e9f924de58098c58c577bc8fcd383a919524 0xd48745e39bbed146eec15b79cbf964884f9877c20.7 BNB
0x438df040261ac26ff1ab4a7c10528c20513d2747eecfcf35fde5051dd4784e2283437962021-06-16 10:01:214 mins ago 0xd48745e39bbed146eec15b79cbf964884f9877c2 Binance: WBNB Token11.5 BNB
0x795085f2c39819711c343dc29c1a5e69449e8e2a7e9f75b0f679671f4684049983437892021-06-16 10:01:004 mins ago 0xd48745e39bbed146eec15b79cbf964884f9877c20x24ae900ae6bf2495219cd05010097b682ce947a72 BNB
0x795085f2c39819711c343dc29c1a5e69449e8e2a7e9f75b0f679671f4684049983437892021-06-16 10:01:004 mins ago Binance: WBNB Token 0xd48745e39bbed146eec15b79cbf964884f9877c22 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
WaultSwapRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 500 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-04-17
*/

// SPDX-License-Identifier: MIТ

pragma solidity =0.6.6;


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

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

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

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

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

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

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

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

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

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

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

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

interface IWaultSwapRouter02 is IWaultSwapRouter01 {
    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;
}

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

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

    // fetches and sorts the reserves for a pair
    function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) {
        (address token0,) = sortTokens(tokenA, tokenB);
        pairFor(factory, tokenA, tokenB);
        (uint reserve0, uint reserve1,) = IWaultSwapPair(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, 'WaultSwapLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'WaultSwapLibrary: INSUFFICIENT_LIQUIDITY');
        amountB = amountA.mul(reserveB) / reserveA;
    }

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

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

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

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);
}

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

contract WaultSwapRouter is IWaultSwapRouter02 {
    using SafeMath for uint;

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

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

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

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

    // **** ADD LIQUIDITY ****
    function _addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin
    ) internal virtual returns (uint amountA, uint amountB) {
        // create the pair if it doesn't exist yet
        if (IWaultSwapFactory(factory).getPair(tokenA, tokenB) == address(0)) {
            IWaultSwapFactory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = WaultSwapLibrary.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = WaultSwapLibrary.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'WaultSwapRouter: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = WaultSwapLibrary.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'WaultSwapRouter: 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 = WaultSwapLibrary.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IWaultSwapPair(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 = WaultSwapLibrary.pairFor(factory, token, WETH);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWETH(WETH).deposit{value: amountETH}();
        assert(IWETH(WETH).transfer(pair, amountETH));
        liquidity = IWaultSwapPair(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 = WaultSwapLibrary.pairFor(factory, tokenA, tokenB);
        IWaultSwapPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint amount0, uint amount1) = IWaultSwapPair(pair).burn(to);
        (address token0,) = WaultSwapLibrary.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'WaultSwapRouter: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'WaultSwapRouter: 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 = WaultSwapLibrary.pairFor(factory, tokenA, tokenB);
        uint value = approveMax ? uint(-1) : liquidity;
        IWaultSwapPair(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 = WaultSwapLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IWaultSwapPair(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 = WaultSwapLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IWaultSwapPair(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,) = WaultSwapLibrary.sortTokens(input, output);
            uint amountOut = amounts[i + 1];
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0));
            address to = i < path.length - 2 ? WaultSwapLibrary.pairFor(factory, output, path[i + 2]) : _to;
            IWaultSwapPair(WaultSwapLibrary.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 = WaultSwapLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'WaultSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, WaultSwapLibrary.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 = WaultSwapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'WaultSwapRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, WaultSwapLibrary.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, 'WaultSwapRouter: INVALID_PATH');
        amounts = WaultSwapLibrary.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'WaultSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(WaultSwapLibrary.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, 'WaultSwapRouter: INVALID_PATH');
        amounts = WaultSwapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'WaultSwapRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, WaultSwapLibrary.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, 'WaultSwapRouter: INVALID_PATH');
        amounts = WaultSwapLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'WaultSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, WaultSwapLibrary.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, 'WaultSwapRouter: INVALID_PATH');
        amounts = WaultSwapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'WaultSwapRouter: EXCESSIVE_INPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(WaultSwapLibrary.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,) = WaultSwapLibrary.sortTokens(input, output);
            IWaultSwapPair pair = IWaultSwapPair(WaultSwapLibrary.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 = WaultSwapLibrary.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? WaultSwapLibrary.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, WaultSwapLibrary.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,
            'WaultSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WETH, 'WaultSwapRouter: INVALID_PATH');
        uint amountIn = msg.value;
        IWETH(WETH).deposit{value: amountIn}();
        assert(IWETH(WETH).transfer(WaultSwapLibrary.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,
            'WaultSwapRouter: 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, 'WaultSwapRouter: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, WaultSwapLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20(WETH).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'WaultSwapRouter: 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 WaultSwapLibrary.quote(amountA, reserveA, reserveB);
    }

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

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

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

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

Contract ABI

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

60c060405234801561001057600080fd5b5060405162004840380380620048408339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6146bb620001856000398061019f5280610d245280610d5f5280610e56528061108652806114105280611588528061194f5280611a5b5280611b115280611bdf5280611d375280611dbf5280612004528061207f528061212e52806121fa52806122a1528061231552806128135280612a865280612adc5280612b105280612b845280612d245280612e795280612f01525080610ef65280610fcd528061114c528061118552806112c052806114b0528061156652806116d65280611c845280611df15280611f54528061234752806125a0528061279852806127c152806127f1528061295e5280612aba5280612dc95280612f3352806137f252806138355280613b185280613c9e52806140d65280614184528061420452506146bb6000f3fe60806040526004361061018f5760003560e01c80638803dbee116100d6578063c45a01551161007f578063e8e3370011610059578063e8e3370014610b8d578063f305d71914610c0d578063fb3bdb4114610c53576101c8565b8063c45a015514610a50578063d06ca61f14610a65578063ded9382a14610b1a576101c8565b8063af2979eb116100b0578063af2979eb1461091c578063b6f9de951461096f578063baa2abde146109f3576101c8565b80638803dbee1461081f578063ad5c4648146108b5578063ad615dec146108e6576101c8565b80634a25d94a11610138578063791ac94711610112578063791ac947146106cf5780637ff36ab51461076557806385f8c259146107e9576101c8565b80634a25d94a146105305780635b0d5984146105c65780635c11d79514610639576101c8565b80631f00ca74116101695780631f00ca74146103675780632195995c1461041c57806338ed17391461049a576101c8565b806302751cec146101cd578063054d50d41461023957806318cbafe514610281576101c8565b366101c857336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101c657fe5b005b600080fd5b3480156101d957600080fd5b50610220600480360360c08110156101f057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610cd7565b6040805192835260208301919091528051918290030190f35b34801561024557600080fd5b5061026f6004803603606081101561025c57600080fd5b5080359060208101359060400135610df1565b60408051918252519081900360200190f35b34801561028d57600080fd5b50610317600480360360a08110156102a457600080fd5b813591602081013591810190606081016040820135600160201b8111156102ca57600080fd5b8201836020820111156102dc57600080fd5b803590602001918460208302840111600160201b831117156102fd57600080fd5b91935091506001600160a01b038135169060200135610e06565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561035357818101518382015260200161033b565b505050509050019250505060405180910390f35b34801561037357600080fd5b506103176004803603604081101561038a57600080fd5b81359190810190604081016020820135600160201b8111156103ab57600080fd5b8201836020820111156103bd57600080fd5b803590602001918460208302840111600160201b831117156103de57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611145945050505050565b34801561042857600080fd5b50610220600480360361016081101561044057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561117b565b3480156104a657600080fd5b50610317600480360360a08110156104bd57600080fd5b813591602081013591810190606081016040820135600160201b8111156104e357600080fd5b8201836020820111156104f557600080fd5b803590602001918460208302840111600160201b8311171561051657600080fd5b91935091506001600160a01b038135169060200135611275565b34801561053c57600080fd5b50610317600480360360a081101561055357600080fd5b813591602081013591810190606081016040820135600160201b81111561057957600080fd5b82018360208201111561058b57600080fd5b803590602001918460208302840111600160201b831117156105ac57600080fd5b91935091506001600160a01b0381351690602001356113c0565b3480156105d257600080fd5b5061026f60048036036101408110156105ea57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561155e565b34801561064557600080fd5b506101c6600480360360a081101561065c57600080fd5b813591602081013591810190606081016040820135600160201b81111561068257600080fd5b82018360208201111561069457600080fd5b803590602001918460208302840111600160201b831117156106b557600080fd5b91935091506001600160a01b03813516906020013561166c565b3480156106db57600080fd5b506101c6600480360360a08110156106f257600080fd5b813591602081013591810190606081016040820135600160201b81111561071857600080fd5b82018360208201111561072a57600080fd5b803590602001918460208302840111600160201b8311171561074b57600080fd5b91935091506001600160a01b038135169060200135611901565b6103176004803603608081101561077b57600080fd5b81359190810190604081016020820135600160201b81111561079c57600080fd5b8201836020820111156107ae57600080fd5b803590602001918460208302840111600160201b831117156107cf57600080fd5b91935091506001600160a01b038135169060200135611b97565b3480156107f557600080fd5b5061026f6004803603606081101561080c57600080fd5b5080359060208101359060400135611efc565b34801561082b57600080fd5b50610317600480360360a081101561084257600080fd5b813591602081013591810190606081016040820135600160201b81111561086857600080fd5b82018360208201111561087a57600080fd5b803590602001918460208302840111600160201b8311171561089b57600080fd5b91935091506001600160a01b038135169060200135611f09565b3480156108c157600080fd5b506108ca612002565b604080516001600160a01b039092168252519081900360200190f35b3480156108f257600080fd5b5061026f6004803603606081101561090957600080fd5b5080359060208101359060400135612026565b34801561092857600080fd5b5061026f600480360360c081101561093f57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612033565b6101c66004803603608081101561098557600080fd5b81359190810190604081016020820135600160201b8111156109a657600080fd5b8201836020820111156109b857600080fd5b803590602001918460208302840111600160201b831117156109d957600080fd5b91935091506001600160a01b0381351690602001356121b4565b3480156109ff57600080fd5b50610220600480360360e0811015610a1657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612552565b348015610a5c57600080fd5b506108ca612796565b348015610a7157600080fd5b5061031760048036036040811015610a8857600080fd5b81359190810190604081016020820135600160201b811115610aa957600080fd5b820183602082011115610abb57600080fd5b803590602001918460208302840111600160201b83111715610adc57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506127ba945050505050565b348015610b2657600080fd5b506102206004803603610140811015610b3e57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356127e7565b348015610b9957600080fd5b50610bef6004803603610100811015610bb157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e001356128fb565b60408051938452602084019290925282820152519081900360600190f35b610bef600480360360c0811015610c2357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612a37565b61031760048036036080811015610c6957600080fd5b81359190810190604081016020820135600160201b811115610c8a57600080fd5b820183602082011115610c9c57600080fd5b803590602001918460208302840111600160201b83111715610cbd57600080fd5b91935091506001600160a01b038135169060200135612cdc565b6000808242811015610d1e576040805162461bcd60e51b81526020600482015260186024820152600080516020614505833981519152604482015290519081900360640190fd5b610d4d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612552565b9093509150610d5d898685613070565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610dc357600080fd5b505af1158015610dd7573d6000803e3d6000fd5b50505050610de585836131da565b50965096945050505050565b6000610dfe8484846132d2565b949350505050565b60608142811015610e4c576040805162461bcd60e51b81526020600482015260186024820152600080516020614505833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e8657fe5b905060200201356001600160a01b03166001600160a01b031614610ef1576040805162461bcd60e51b815260206004820152601d60248201527f5761756c7453776170526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b610f4f7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133c292505050565b91508682600184510381518110610f6257fe5b60200260200101511015610fa75760405162461bcd60e51b815260040180806020018281038252602b81526020018061460f602b913960400191505060405180910390fd5b61104586866000818110610fb757fe5b905060200201356001600160a01b03163361102b7f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610ff957fe5b905060200201356001600160a01b03168b8b600181811061101657fe5b905060200201356001600160a01b031661350e565b8560008151811061103857fe5b60200260200101516135e6565b61108482878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613743915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836001855103815181106110c357fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561110157600080fd5b505af1158015611115573d6000803e3d6000fd5b5050505061113a848360018551038151811061112d57fe5b60200260200101516131da565b509695505050505050565b60606111727f00000000000000000000000000000000000000000000000000000000000000008484613989565b90505b92915050565b60008060006111ab7f00000000000000000000000000000000000000000000000000000000000000008f8f61350e565b90506000876111ba578c6111be565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561123457600080fd5b505af1158015611248573d6000803e3d6000fd5b5050505061125b8f8f8f8f8f8f8f612552565b809450819550505050509b509b9950505050505050505050565b606081428110156112bb576040805162461bcd60e51b81526020600482015260186024820152600080516020614505833981519152604482015290519081900360640190fd5b6113197f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133c292505050565b9150868260018451038151811061132c57fe5b602002602001015110156113715760405162461bcd60e51b815260040180806020018281038252602b81526020018061460f602b913960400191505060405180910390fd5b61138186866000818110610fb757fe5b61113a82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613743915050565b60608142811015611406576040805162461bcd60e51b81526020600482015260186024820152600080516020614505833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061144057fe5b905060200201356001600160a01b03166001600160a01b0316146114ab576040805162461bcd60e51b815260206004820152601d60248201527f5761756c7453776170526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b6115097f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061398992505050565b9150868260008151811061151957fe5b60200260200101511115610fa75760405162461bcd60e51b81526004018080602001828103825260278152602001806144b86027913960400191505060405180910390fd5b6000806115ac7f00000000000000000000000000000000000000000000000000000000000000008d7f000000000000000000000000000000000000000000000000000000000000000061350e565b90506000866115bb578b6115bf565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561163557600080fd5b505af1158015611649573d6000803e3d6000fd5b5050505061165b8d8d8d8d8d8d612033565b9d9c50505050505050505050505050565b80428110156116b0576040805162461bcd60e51b81526020600482015260186024820152600080516020614505833981519152604482015290519081900360640190fd5b611725858560008181106116c057fe5b905060200201356001600160a01b03163361171f7f00000000000000000000000000000000000000000000000000000000000000008989600081811061170257fe5b905060200201356001600160a01b03168a8a600181811061101657fe5b8a6135e6565b60008585600019810181811061173757fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561179c57600080fd5b505afa1580156117b0573d6000803e3d6000fd5b505050506040513d60208110156117c657600080fd5b50516040805160208881028281018201909352888252929350611808929091899189918291850190849080828437600092019190915250889250613ac1915050565b866118ba828888600019810181811061181d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561188257600080fd5b505afa158015611896573d6000803e3d6000fd5b505050506040513d60208110156118ac57600080fd5b50519063ffffffff613dd316565b10156118f75760405162461bcd60e51b815260040180806020018281038252602b81526020018061460f602b913960400191505060405180910390fd5b5050505050505050565b8042811015611945576040805162461bcd60e51b81526020600482015260186024820152600080516020614505833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061197f57fe5b905060200201356001600160a01b03166001600160a01b0316146119ea576040805162461bcd60e51b815260206004820152601d60248201527f5761756c7453776170526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b6119fa858560008181106116c057fe5b611a38858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613ac1915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611aa257600080fd5b505afa158015611ab6573d6000803e3d6000fd5b505050506040513d6020811015611acc57600080fd5b5051905086811015611b0f5760405162461bcd60e51b815260040180806020018281038252602b81526020018061460f602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611b7557600080fd5b505af1158015611b89573d6000803e3d6000fd5b505050506118f784826131da565b60608142811015611bdd576040805162461bcd60e51b81526020600482015260186024820152600080516020614505833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611c1457fe5b905060200201356001600160a01b03166001600160a01b031614611c7f576040805162461bcd60e51b815260206004820152601d60248201527f5761756c7453776170526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b611cdd7f0000000000000000000000000000000000000000000000000000000000000000348888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133c292505050565b91508682600184510381518110611cf057fe5b60200260200101511015611d355760405162461bcd60e51b815260040180806020018281038252602b81526020018061460f602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611d7157fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611da457600080fd5b505af1158015611db8573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611e1d7f00000000000000000000000000000000000000000000000000000000000000008989600081811061170257fe5b84600081518110611e2a57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611e8157600080fd5b505af1158015611e95573d6000803e3d6000fd5b505050506040513d6020811015611eab57600080fd5b5051611eb357fe5b611ef282878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613743915050565b5095945050505050565b6000610dfe848484613e2b565b60608142811015611f4f576040805162461bcd60e51b81526020600482015260186024820152600080516020614505833981519152604482015290519081900360640190fd5b611fad7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061398992505050565b91508682600081518110611fbd57fe5b602002602001015111156113715760405162461bcd60e51b81526004018080602001828103825260278152602001806144b86027913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dfe848484613f1b565b60008142811015612079576040805162461bcd60e51b81526020600482015260186024820152600080516020614505833981519152604482015290519081900360640190fd5b6120a8887f00000000000000000000000000000000000000000000000000000000000000008989893089612552565b604080516370a0823160e01b8152306004820152905191945061212c92508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b1580156120fb57600080fd5b505afa15801561210f573d6000803e3d6000fd5b505050506040513d602081101561212557600080fd5b5051613070565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561219257600080fd5b505af11580156121a6573d6000803e3d6000fd5b5050505061113a84836131da565b80428110156121f8576040805162461bcd60e51b81526020600482015260186024820152600080516020614505833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168585600081811061222f57fe5b905060200201356001600160a01b03166001600160a01b03161461229a576040805162461bcd60e51b815260206004820152601d60248201527f5761756c7453776170526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156122fa57600080fd5b505af115801561230e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6123737f00000000000000000000000000000000000000000000000000000000000000008989600081811061170257fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156123c357600080fd5b505af11580156123d7573d6000803e3d6000fd5b505050506040513d60208110156123ed57600080fd5b50516123f557fe5b60008686600019810181811061240757fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561246c57600080fd5b505afa158015612480573d6000803e3d6000fd5b505050506040513d602081101561249657600080fd5b505160408051602089810282810182019093528982529293506124d89290918a918a918291850190849080828437600092019190915250899250613ac1915050565b876118ba82898960001981018181106124ed57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561188257600080fd5b6000808242811015612599576040805162461bcd60e51b81526020600482015260186024820152600080516020614505833981519152604482015290519081900360640190fd5b60006125c67f00000000000000000000000000000000000000000000000000000000000000008c8c61350e565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561262157600080fd5b505af1158015612635573d6000803e3d6000fd5b505050506040513d602081101561264b57600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561269857600080fd5b505af11580156126ac573d6000803e3d6000fd5b505050506040513d60408110156126c257600080fd5b508051602090910151909250905060006126dc8e8e613fc7565b509050806001600160a01b03168e6001600160a01b0316146126ff578183612702565b82825b90975095508a8710156127465760405162461bcd60e51b815260040180806020018281038252602681526020018061459a6026913960400191505060405180910390fd5b898610156127855760405162461bcd60e51b81526004018080602001828103825260268152602001806144df6026913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111727f000000000000000000000000000000000000000000000000000000000000000084846133c2565b60008060006128377f00000000000000000000000000000000000000000000000000000000000000008e7f000000000000000000000000000000000000000000000000000000000000000061350e565b9050600087612846578c61284a565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156128c057600080fd5b505af11580156128d4573d6000803e3d6000fd5b505050506128e68e8e8e8e8e8e610cd7565b909f909e509c50505050505050505050505050565b60008060008342811015612944576040805162461bcd60e51b81526020600482015260186024820152600080516020614505833981519152604482015290519081900360640190fd5b6129528c8c8c8c8c8c6140a5565b909450925060006129847f00000000000000000000000000000000000000000000000000000000000000008e8e61350e565b90506129928d3383886135e6565b61299e8c3383876135e6565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b1580156129f657600080fd5b505af1158015612a0a573d6000803e3d6000fd5b505050506040513d6020811015612a2057600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015612a80576040805162461bcd60e51b81526020600482015260186024820152600080516020614505833981519152604482015290519081900360640190fd5b612aae8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c6140a5565b90945092506000612b007f00000000000000000000000000000000000000000000000000000000000000008c7f000000000000000000000000000000000000000000000000000000000000000061350e565b9050612b0e8b3383886135e6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612b6957600080fd5b505af1158015612b7d573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612c0257600080fd5b505af1158015612c16573d6000803e3d6000fd5b505050506040513d6020811015612c2c57600080fd5b5051612c3457fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612c8c57600080fd5b505af1158015612ca0573d6000803e3d6000fd5b505050506040513d6020811015612cb657600080fd5b5051925034841015612cce57612cce338534036131da565b505096509650969350505050565b60608142811015612d22576040805162461bcd60e51b81526020600482015260186024820152600080516020614505833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612d5957fe5b905060200201356001600160a01b03166001600160a01b031614612dc4576040805162461bcd60e51b815260206004820152601d60248201527f5761756c7453776170526f757465723a20494e56414c49445f50415448000000604482015290519081900360640190fd5b612e227f00000000000000000000000000000000000000000000000000000000000000008888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061398992505050565b91503482600081518110612e3257fe5b60200260200101511115612e775760405162461bcd60e51b81526004018080602001828103825260278152602001806144b86027913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612eb357fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612ee657600080fd5b505af1158015612efa573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612f5f7f00000000000000000000000000000000000000000000000000000000000000008989600081811061170257fe5b84600081518110612f6c57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612fc357600080fd5b505af1158015612fd7573d6000803e3d6000fd5b505050506040513d6020811015612fed57600080fd5b5051612ff557fe5b61303482878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613743915050565b8160008151811061304157fe5b6020026020010151341115611ef257611ef2338360008151811061306157fe5b602002602001015134036131da565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130ed5780518252601f1990920191602091820191016130ce565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461314f576040519150601f19603f3d011682016040523d82523d6000602084013e613154565b606091505b5091509150818015613182575080511580613182575080806020019051602081101561317f57600080fd5b50515b6131d3576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106132265780518252601f199092019160209182019101613207565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613288576040519150601f19603f3d011682016040523d82523d6000602084013e61328d565b606091505b50509050806132cd5760405162461bcd60e51b81526004018080602001828103825260238152602001806145ec6023913960400191505060405180910390fd5b505050565b60008084116133125760405162461bcd60e51b815260040180806020018281038252602b81526020018061456f602b913960400191505060405180910390fd5b6000831180156133225750600082115b61335d5760405162461bcd60e51b815260040180806020018281038252602881526020018061465e6028913960400191505060405180910390fd5b6000613371856103e663ffffffff61431916565b90506000613385828563ffffffff61431916565b905060006133ab8361339f886103e863ffffffff61431916565b9063ffffffff61438516565b90508082816133b657fe5b04979650505050505050565b606060028251101561341b576040805162461bcd60e51b815260206004820152601e60248201527f5761756c74537761704c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561343357600080fd5b5060405190808252806020026020018201604052801561345d578160200160208202803683370190505b509050828160008151811061346e57fe5b60200260200101818152505060005b6001835103811015613506576000806134c08786858151811061349c57fe5b60200260200101518786600101815181106134b357fe5b60200260200101516143dd565b915091506134e28484815181106134d357fe5b602002602001015183836132d2565b8484600101815181106134f157fe5b6020908102919091010152505060010161347d565b509392505050565b600080600061351d8585613fc7565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f9599db1eaa37ab366bf260f51beefce9296eb6197de387c533d905e9b82debe9609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b6020831061366b5780518252601f19909201916020918201910161364c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146136cd576040519150601f19603f3d011682016040523d82523d6000602084013e6136d2565b606091505b509150915081801561370057508051158061370057508080602001905160208110156136fd57600080fd5b50515b61373b5760405162461bcd60e51b815260040180806020018281038252602481526020018061463a6024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156139835760008084838151811061376157fe5b602002602001015185846001018151811061377857fe5b60200260200101519150915060006137908383613fc7565b50905060008785600101815181106137a457fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146137d2578260006137d6565b6000835b91509150600060028a510388106137ed578861382e565b61382e7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061382157fe5b602002602001015161350e565b905061385b7f0000000000000000000000000000000000000000000000000000000000000000888861350e565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613898576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156139095781810151838201526020016138f1565b50505050905090810190601f1680156139365780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561395857600080fd5b505af115801561396c573d6000803e3d6000fd5b505060019099019850613746975050505050505050565b50505050565b60606002825110156139e2576040805162461bcd60e51b815260206004820152601e60248201527f5761756c74537761704c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff811180156139fa57600080fd5b50604051908082528060200260200182016040528015613a24578160200160208202803683370190505b5090508281600183510381518110613a3857fe5b60209081029190910101528151600019015b801561350657600080613a7a87866001860381518110613a6657fe5b60200260200101518786815181106134b357fe5b91509150613a9c848481518110613a8d57fe5b60200260200101518383613e2b565b846001850381518110613aab57fe5b6020908102919091010152505060001901613a4a565b60005b60018351038110156132cd57600080848381518110613adf57fe5b6020026020010151858460010181518110613af657fe5b6020026020010151915091506000613b0e8383613fc7565b5090506000613b3e7f0000000000000000000000000000000000000000000000000000000000000000858561350e565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613b7f57600080fd5b505afa158015613b93573d6000803e3d6000fd5b505050506040513d6060811015613ba957600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506000806001600160a01b038a811690891614613be6578284613be9565b83835b91509150613c47828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561188257600080fd5b9550613c548683836132d2565b945050505050600080856001600160a01b0316886001600160a01b031614613c7e57826000613c82565b6000835b91509150600060028c51038a10613c99578a613ccd565b613ccd7f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061382157fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613d57578181015183820152602001613d3f565b50505050905090810190601f168015613d845780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613da657600080fd5b505af1158015613dba573d6000803e3d6000fd5b50506001909b019a50613ac49950505050505050505050565b80820382811115611175576040805162461bcd60e51b815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411613e6b5760405162461bcd60e51b815260040180806020018281038252602c8152602001806145c0602c913960400191505060405180910390fd5b600083118015613e7b5750600082115b613eb65760405162461bcd60e51b815260040180806020018281038252602881526020018061465e6028913960400191505060405180910390fd5b6000613eda6103e8613ece868863ffffffff61431916565b9063ffffffff61431916565b90506000613ef46103e6613ece868963ffffffff613dd316565b9050613f116001828481613f0457fe5b049063ffffffff61438516565b9695505050505050565b6000808411613f5b5760405162461bcd60e51b81526004018080602001828103825260258152602001806145256025913960400191505060405180910390fd5b600083118015613f6b5750600082115b613fa65760405162461bcd60e51b815260040180806020018281038252602881526020018061465e6028913960400191505060405180910390fd5b82613fb7858463ffffffff61431916565b81613fbe57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b0316141561401b5760405162461bcd60e51b815260040180806020018281038252602581526020018061454a6025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b03161061403b57828461403e565b83835b90925090506001600160a01b03821661409e576040805162461bcd60e51b815260206004820152601e60248201527f5761756c74537761704c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561411f57600080fd5b505afa158015614133573d6000803e3d6000fd5b505050506040513d602081101561414957600080fd5b50516001600160a01b031614156141fc57604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156141cf57600080fd5b505af11580156141e3573d6000803e3d6000fd5b505050506040513d60208110156141f957600080fd5b50505b60008061422a7f00000000000000000000000000000000000000000000000000000000000000008b8b6143dd565b9150915081600014801561423c575080155b1561424c5787935086925061430c565b6000614259898484613f1b565b90508781116142ac57858110156142a15760405162461bcd60e51b81526004018080602001828103825260268152602001806144df6026913960400191505060405180910390fd5b88945092508261430a565b60006142b9898486613f1b565b9050898111156142c557fe5b878110156143045760405162461bcd60e51b815260040180806020018281038252602681526020018061459a6026913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806143345750508082028282828161433157fe5b04145b611175576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b80820182811015611175576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b60008060006143ec8585613fc7565b5090506143fa86868661350e565b5060008061440988888861350e565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561444157600080fd5b505afa158015614455573d6000803e3d6000fd5b505050506040513d606081101561446b57600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b03878116908416146144a55780826144a8565b81815b9099909850965050505050505056fe5761756c7453776170526f757465723a204558434553534956455f494e5055545f414d4f554e545761756c7453776170526f757465723a20494e53554646494349454e545f425f414d4f554e545761756c7453776170526f757465723a204558504952454400000000000000005761756c74537761704c6962726172793a20494e53554646494349454e545f414d4f554e545761756c74537761704c6962726172793a204944454e544943414c5f4144445245535345535761756c74537761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e545761756c7453776170526f757465723a20494e53554646494349454e545f415f414d4f554e545761756c74537761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45445761756c7453776170526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c45445761756c74537761704c6962726172793a20494e53554646494349454e545f4c4951554944495459a26469706673582212209304ffc9652123dd39f4abecd710ad12987bd27ee5902aaa18bfa1efd3f16a0764736f6c63430006060033000000000000000000000000b42e3fe71b7e0673335b3331b3e1053bd9822570000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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

000000000000000000000000b42e3fe71b7e0673335b3331b3e1053bd9822570000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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


Deployed ByteCode Sourcemap

15515:18547:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15995:10;-1:-1:-1;;;;;16009:4:0;15995:18;;15988:26;;;;15515:18547;;12:1:-1;9;2:12;20145:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20145:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20145:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33006:262;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33006:262:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33006:262:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27314:850;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27314:850:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27314:850:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27314:850:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27314:850:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27314:850:0;;-1:-1:-1;27314:850:0;-1:-1:-1;;;;;;27314:850: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;27314:850:0;;;;;;;;;;;;;;;;;33806:253;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33806:253:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33806:253:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33806:253:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33806:253: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;33806:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33806:253:0;;-1:-1:-1;33806:253:0;;-1:-1:-1;;;;;33806:253:0:i;20824:677::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20824:677:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20824:677:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24531:628::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24531:628:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24531:628:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;24531:628:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24531:628: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;24531:628:0;;-1:-1:-1;24531:628:0;-1:-1:-1;;;;;;24531:628:0;;;;;;;;:::i;26480:828::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26480:828:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26480:828:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26480:828:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26480:828: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;26480:828:0;;-1:-1:-1;26480:828:0;-1:-1:-1;;;;;;26480:828:0;;;;;;;;:::i;22961:718::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22961:718:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22961:718:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30347:714::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30347:714:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30347:714:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30347:714:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30347:714: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;30347:714:0;;-1:-1:-1;30347:714:0;-1:-1:-1;;;;;;30347:714:0;;;;;;;;:::i;31923:843::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31923:843:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31923:843:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31923:843:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31923:843:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31923:843:0;;-1:-1:-1;31923:843:0;-1:-1:-1;;;;;;31923:843:0;;;;;;;;:::i;25777:697::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25777:697:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25777:697:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25777:697: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;25777:697:0;;-1:-1:-1;25777:697:0;-1:-1:-1;;;;;;25777:697:0;;;;;;;;:::i;33276:261::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33276:261:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33276:261:0;;;;;;;;;;;;:::i;25165:606::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25165:606:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25165:606:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25165:606:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25165:606: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;25165:606:0;;-1:-1:-1;25165:606:0;-1:-1:-1;;;;;;25165:606:0;;;;;;;;:::i;15649:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15649:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;15649:38:0;;;;;;;;;;;;;;32810:188;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32810:188:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32810:188:0;;;;;;;;;;;;:::i;22255:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22255:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22255:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31067:850::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31067:850:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31067:850:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31067:850:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31067:850:0;;-1:-1:-1;31067:850:0;-1:-1:-1;;;;;;31067:850:0;;;;;;;;:::i;19274:865::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19274:865:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19274:865:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15601:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15601:41:0;;;:::i;33545:253::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33545:253:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33545:253:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33545:253:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33545:253: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;33545:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33545:253:0;;-1:-1:-1;33545:253:0;;-1:-1:-1;;;;;33545:253:0:i;21507:669::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21507:669:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21507:669:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17513:738::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17513:738:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;17513:738:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;18257:974;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18257:974:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28170:810::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28170:810:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28170:810:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28170:810: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;28170:810:0;;-1:-1:-1;28170:810:0;-1:-1:-1;;;;;;28170:810:0;;;;;;;;:::i;20145:673::-;20382:16;20400:14;20363:8;15758:15;15746:8;:27;;15738:64;;;;;-1:-1:-1;;;15738:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15738:64:0;;;;;;;;;;;;;;;20454:196:::1;20484:5;20504:4;20523:9;20547:14;20576:12;20611:4;20631:8;20454:15;:196::i;:::-;20427:223:::0;;-1:-1:-1;20427:223:0;-1:-1:-1;20661:51:0::1;20689:5:::0;20696:2;20427:223;20661:27:::1;:51::i;:::-;20729:4;-1:-1:-1::0;;;;;20723:20:0::1;;20744:9;20723:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20723:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20723:31:0;;;;20765:45;20796:2;20800:9;20765:30;:45::i;:::-;20145:673:::0;;;;;;;;;;:::o;33006:262::-;33159:14;33198:62;33228:8;33238:9;33249:10;33198:29;:62::i;:::-;33191:69;33006:262;-1:-1:-1;;;;33006:262:0:o;27314:850::-;27528:21;27500:8;15758:15;15746:8;:27;;15738:64;;;;;-1:-1:-1;;;15738:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15738:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27600:4:0::1;27575:29;:4:::0;;-1:-1:-1;;27580:15:0;;27575:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27575:21:0::1;-1:-1:-1::0;;;;;27575:29:0::1;;27567:71;;;::::0;;-1:-1:-1;;;27567:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27659:55;27690:7;27699:8;27709:4;;27659:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27659:30:0::1;::::0;-1:-1:-1;;;27659:55:0:i:1;:::-;27649:65;;27764:12;27733:7;27758:1;27741:7;:14;:18;27733:27;;;;;;;;;;;;;;:43;;27725:99;;;;-1:-1:-1::0;;;27725:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27835:141;27881:4;;27886:1;27881:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27881:7:0::1;27890:10;27902:51;27927:7;27936:4;;27941:1;27936:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27936:7:0::1;27945:4;;27950:1;27945:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27945:7:0::1;27902:24;:51::i;:::-;27955:7;27963:1;27955:10;;;;;;;;;;;;;;27835:31;:141::i;:::-;27987:35;27993:7;28002:4;;27987:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28016:4:0::1;::::0;-1:-1:-1;27987:5:0::1;::::0;-1:-1:-1;;27987:35:0:i:1;:::-;28039:4;-1:-1:-1::0;;;;;28033:20:0::1;;28054:7;28079:1;28062:7;:14;:18;28054:27;;;;;;;;;;;;;;28033:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28033:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28033:49:0;;;;28093:63;28124:2;28128:7;28153:1;28136:7;:14;:18;28128:27;;;;;;;;;;;;;;28093:30;:63::i;:::-;27314:850:::0;;;;;;;;;:::o;33806:253::-;33950:21;33996:55;34026:7;34035:9;34046:4;33996:29;:55::i;:::-;33989:62;;33806:253;;;;;:::o;20824:677::-;21130:12;21144;21169;21184:49;21209:7;21218:6;21226;21184:24;:49::i;:::-;21169:64;;21244:10;21257;:33;;21281:9;21257:33;;;-1:-1:-1;;21257:33:0;21301:80;;;-1:-1:-1;;;21301:80:0;;21329:10;21301:80;;;;21349:4;21301:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21244:46;;-1:-1:-1;;;;;;21301:27:0;;;;;:80;;;;;-1:-1:-1;;21301:80:0;;;;;;;;-1:-1:-1;21301:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;21301:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21301:80:0;;;;21413;21429:6;21437;21445:9;21456:10;21468;21480:2;21484:8;21413:15;:80::i;:::-;21392:101;;;;;;;;20824:677;;;;;;;;;;;;;;;;:::o;24531:628::-;24755:21;24736:8;15758:15;15746:8;:27;;15738:64;;;;;-1:-1:-1;;;15738:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15738:64:0;;;;;;;;;;;;;;;24799:55:::1;24830:7;24839:8;24849:4;;24799:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24799:30:0::1;::::0;-1:-1:-1;;;24799:55:0:i:1;:::-;24789:65;;24904:12;24873:7;24898:1;24881:7;:14;:18;24873:27;;;;;;;;;;;;;;:43;;24865:99;;;;-1:-1:-1::0;;;24865:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24975:141;25021:4;;25026:1;25021:7;;;;;;24975:141;25127:24;25133:7;25142:4;;25127:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25148:2:0;;-1:-1:-1;25127:5:0::1;::::0;-1:-1:-1;;25127:24:0:i:1;26480:828::-:0;26694:21;26666:8;15758:15;15746:8;:27;;15738:64;;;;;-1:-1:-1;;;15738:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15738:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;26766:4:0::1;26741:29;:4:::0;;-1:-1:-1;;26746:15:0;;26741:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;26741:21:0::1;-1:-1:-1::0;;;;;26741:29:0::1;;26733:71;;;::::0;;-1:-1:-1;;;26733:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;26825:55;26855:7;26864:9;26875:4;;26825:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26825:29:0::1;::::0;-1:-1:-1;;;26825:55:0:i:1;:::-;26815:65;;26913:11;26899:7;26907:1;26899:10;;;;;;;;;;;;;;:25;;26891:77;;;;-1:-1:-1::0;;;26891:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22961:718:::0;23279:14;23306:12;23321:46;23346:7;23355:5;23362:4;23321:24;:46::i;:::-;23306:61;;23378:10;23391;:33;;23415:9;23391:33;;;-1:-1:-1;;23391:33:0;23435:80;;;-1:-1:-1;;;23435:80:0;;23463:10;23435:80;;;;23483:4;23435:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23378:46;;-1:-1:-1;;;;;;23435:27:0;;;;;:80;;;;;-1:-1:-1;;23435:80:0;;;;;;;;-1:-1:-1;23435:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;23435:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23435:80:0;;;;23538:133;23600:5;23607:9;23618:14;23634:12;23648:2;23652:8;23538:47;:133::i;:::-;23526:145;22961:718;-1:-1:-1;;;;;;;;;;;;;22961:718:0:o;30347:714::-;30581:8;15758:15;15746:8;:27;;15738:64;;;;;-1:-1:-1;;;15738:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15738:64:0;;;;;;;;;;;;;;;30602:139:::1;30648:4;;30653:1;30648:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30648:7:0::1;30657:10;30669:51;30694:7;30703:4;;30708:1;30703:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30703:7:0::1;30712:4;;30717:1;30712:7;;;;;;30669:51;30722:8;30602:31;:139::i;:::-;30752:18;30780:4:::0;;-1:-1:-1;;30785:15:0;;30780:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30780:21:0::1;-1:-1:-1::0;;;;;30773:39:0::1;;30813:2;30773:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;30773:43:0::1;-1:-1:-1::0;;;;;30773:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30773:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30773:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30773:43:0;30827:44:::1;::::0;;30773:43:::1;30827:44:::0;;::::1;::::0;;;;;;;;;;;30773:43;;-1:-1:-1;30827:44:0::1;::::0;;;30862:4;;;;;;30827:44;::::1;::::0;30862:4;;30827:44;30862:4;30827:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30868:2:0;;-1:-1:-1;30827:34:0::1;::::0;-1:-1:-1;;30827:44:0:i:1;:::-;30970:12:::0;30904:62:::1;30952:13:::0;30911:4;;-1:-1:-1;;30916:15:0;;30911:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30911:21:0::1;-1:-1:-1::0;;;;;30904:39:0::1;;30944:2;30904:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;30904:43:0::1;-1:-1:-1::0;;;;;30904:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30904:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30904:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30904:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;30882:171;;;;-1:-1:-1::0;;;30882:171:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15813:1;30347:714:::0;;;;;;;:::o;31923:843::-;32190:8;15758:15;15746:8;:27;;15738:64;;;;;-1:-1:-1;;;15738:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15738:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32249:4:0::1;32224:29;:4:::0;;-1:-1:-1;;32229:15:0;;32224:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32224:21:0::1;-1:-1:-1::0;;;;;32224:29:0::1;;32216:71;;;::::0;;-1:-1:-1;;;32216:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;32298:139;32344:4;;32349:1;32344:7;;;;;;32298:139;32448:55;32483:4;;32448:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32497:4:0::1;::::0;-1:-1:-1;32448:34:0::1;::::0;-1:-1:-1;;32448:55:0:i:1;:::-;32531:37;::::0;;-1:-1:-1;;;32531:37:0;;32562:4:::1;32531:37;::::0;::::1;::::0;;;32514:14:::1;::::0;-1:-1:-1;;;;;32538:4:0::1;32531:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;32531:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32531:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32531:37:0;;-1:-1:-1;32587:25:0;;::::1;;32579:81;;;;-1:-1:-1::0;;;32579:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32677:4;-1:-1:-1::0;;;;;32671:20:0::1;;32692:9;32671:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32671:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32671:31:0;;;;32713:45;32744:2;32748:9;32713:30;:45::i;25777:697::-:0;25993:21;25965:8;15758:15;15746:8;:27;;15738:64;;;;;-1:-1:-1;;;15738:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15738:64:0;;;;;;;;;;;;;;;26051:4:::1;-1:-1:-1::0;;;;;26040:15:0::1;:4;;26045:1;26040:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26040:7:0::1;-1:-1:-1::0;;;;;26040:15:0::1;;26032:57;;;::::0;;-1:-1:-1;;;26032:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;26110:56;26141:7;26150:9;26161:4;;26110:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26110:30:0::1;::::0;-1:-1:-1;;;26110:56:0:i:1;:::-;26100:66;;26216:12;26185:7;26210:1;26193:7;:14;:18;26185:27;;;;;;;;;;;;;;:43;;26177:99;;;;-1:-1:-1::0;;;26177:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26293:4;-1:-1:-1::0;;;;;26287:19:0::1;;26314:7;26322:1;26314:10;;;;;;;;;;;;;;26287:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26287:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26287:40:0;;;;;26351:4;-1:-1:-1::0;;;;;26345:20:0::1;;26366:51;26391:7;26400:4;;26405:1;26400:7;;;;;;26366:51;26419:7;26427:1;26419:10;;;;;;;;;;;;;;26345:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;26345:85:0::1;-1:-1:-1::0;;;;;26345:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26345:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26345:85:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26345:85:0;26338:93:::1;;;;26442:24;26448:7;26457:4;;26442:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26463:2:0;;-1:-1:-1;26442:5:0::1;::::0;-1:-1:-1;;26442:24:0:i:1;:::-;25777:697:::0;;;;;;;;:::o;33276:261::-;33429:13;33467:62;33496:9;33507;33518:10;33467:28;:62::i;25165:606::-;25389:21;25370:8;15758:15;15746:8;:27;;15738:64;;;;;-1:-1:-1;;;15738:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15738:64:0;;;;;;;;;;;;;;;25433:55:::1;25463:7;25472:9;25483:4;;25433:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25433:29:0::1;::::0;-1:-1:-1;;;25433:55:0:i:1;:::-;25423:65;;25521:11;25507:7;25515:1;25507:10;;;;;;;;;;;;;;:25;;25499:77;;;;-1:-1:-1::0;;;25499:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15649:38:::0;;;:::o;32810:188::-;32907:12;32939:51;32962:7;32971:8;32981;32939:22;:51::i;22255:700::-;22521:14;22502:8;15758:15;15746:8;:27;;15738:64;;;;;-1:-1:-1;;;15738:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15738:64:0;;;;;;;;;;;;;;;22564:196:::1;22594:5;22614:4;22633:9;22657:14;22686:12;22721:4;22741:8;22564:15;:196::i;:::-;22810:38;::::0;;-1:-1:-1;;;22810:38:0;;22842:4:::1;22810:38;::::0;::::1;::::0;;;22548:212;;-1:-1:-1;22771:78:0::1;::::0;-1:-1:-1;22799:5:0;;22806:2;;-1:-1:-1;;;;;22810: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;22810:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22810:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22810:38:0;22771:27:::1;:78::i;:::-;22866:4;-1:-1:-1::0;;;;;22860:20:0::1;;22881:9;22860:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22860:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22860:31:0;;;;22902:45;22933:2;22937:9;22902:30;:45::i;31067:850::-:0;31327:8;15758:15;15746:8;:27;;15738:64;;;;;-1:-1:-1;;;15738:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15738:64:0;;;;;;;;;;;;;;;31372:4:::1;-1:-1:-1::0;;;;;31361:15:0::1;:4;;31366:1;31361:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31361:7:0::1;-1:-1:-1::0;;;;;31361:15:0::1;;31353:57;;;::::0;;-1:-1:-1;;;31353:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;31421:13;31437:9;31421:25;;31463:4;-1:-1:-1::0;;;;;31457:19:0::1;;31484:8;31457:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31457:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31457:38:0;;;;;31519:4;-1:-1:-1::0;;;;;31513:20:0::1;;31534:51;31559:7;31568:4;;31573:1;31568:7;;;;;;31534:51;31587:8;31513:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;31513:83:0::1;-1:-1:-1::0;;;;;31513:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31513:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31513:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31513:83:0;31506:91:::1;;;;31608:18;31636:4:::0;;-1:-1:-1;;31641:15:0;;31636:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31636:21:0::1;-1:-1:-1::0;;;;;31629:39:0::1;;31669:2;31629:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31629:43:0::1;-1:-1:-1::0;;;;;31629:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31629:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31629:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31629:43:0;31683:44:::1;::::0;;31629:43:::1;31683:44:::0;;::::1;::::0;;;;;;;;;;;31629:43;;-1:-1:-1;31683:44:0::1;::::0;;;31718:4;;;;;;31683:44;::::1;::::0;31718:4;;31683:44;31718:4;31683:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31724:2:0;;-1:-1:-1;31683:34:0::1;::::0;-1:-1:-1;;31683:44:0:i:1;:::-;31826:12:::0;31760:62:::1;31808:13:::0;31767:4;;-1:-1:-1;;31772:15:0;;31767:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31767:21:0::1;-1:-1:-1::0;;;;;31760:39:0::1;;31800:2;31760:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31760:43:0::1;-1:-1:-1::0;;;;;31760:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;19274:865:0::0;19528:12;19542;19509:8;15758:15;15746:8;:27;;15738:64;;;;;-1:-1:-1;;;15738:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15738:64:0;;;;;;;;;;;;;;;19567:12:::1;19582:49;19607:7;19616:6;19624;19582:24;:49::i;:::-;19642:62;::::0;;-1:-1:-1;;;19642:62:0;;19676:10:::1;19642:62;::::0;::::1;::::0;-1:-1:-1;;;;;19642:33:0;::::1;:62:::0;;;;;;;;;;;;;;19567:64;;-1:-1:-1;19642:33:0;;::::1;::::0;:62;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;19642:33:0;:62;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19642:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19642:62:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;19772:29:0::1;::::0;;-1:-1:-1;;;19772:29:0;;-1:-1:-1;;;;;19772:29:0;;::::1;;::::0;::::1;::::0;;;19742:12:::1;::::0;;;19772:25;;::::1;::::0;::::1;::::0;:29;;;;;;;;;;;19742:12;19772:25;:29;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19772:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19772:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19772:29:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;19772:29:0;-1:-1:-1;19813:14:0::1;19832:43;19860:6:::0;19868;19832:27:::1;:43::i;:::-;19812:63;;;19917:6;-1:-1:-1::0;;;;;19907:16:0::1;:6;-1:-1:-1::0;;;;;19907:16:0::1;;:58;;19948:7;19957;19907:58;;;19927:7;19936;19907:58;19886:79:::0;;-1:-1:-1;19886:79:0;-1:-1:-1;19984:21:0;;::::1;;19976:72;;;;-1:-1:-1::0;;;19976:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20078:10;20067:7;:21;;20059:72;;;;-1:-1:-1::0;;;20059:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15813:1;;;;19274:865:::0;;;;;;;;;;;:::o;15601:41::-;;;:::o;33545:253::-;33689:21;33735:55;33766:7;33775:8;33785:4;33735:30;:55::i;21507:669::-;21796:16;21814:14;21841:12;21856:46;21881:7;21890:5;21897:4;21856:24;:46::i;:::-;21841:61;;21913:10;21926;:33;;21950:9;21926:33;;;-1:-1:-1;;21926:33:0;21970:80;;;-1:-1:-1;;;21970:80:0;;21998:10;21970:80;;;;22018:4;21970:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21913:46;;-1:-1:-1;;;;;;21970:27:0;;;;;:80;;;;;-1:-1:-1;;21970:80:0;;;;;;;;-1:-1:-1;21970:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;21970:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21970:80:0;;;;22088;22107:5;22114:9;22125:14;22141:12;22155:2;22159:8;22088:18;:80::i;:::-;22061:107;;;;-1:-1:-1;21507:669:0;-1:-1:-1;;;;;;;;;;;;;21507:669:0:o;17513:738::-;17801:12;17815;17829:14;17782:8;15758:15;15746:8;:27;;15738:64;;;;;-1:-1:-1;;;15738:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15738:64:0;;;;;;;;;;;;;;;17877:85:::1;17891:6;17899;17907:14;17923;17939:10;17951;17877:13;:85::i;:::-;17856:106:::0;;-1:-1:-1;17856:106:0;-1:-1:-1;17973:12:0::1;17988:49;18013:7;18022:6:::0;18030;17988:24:::1;:49::i;:::-;17973:64;;18048:66;18080:6;18088:10;18100:4;18106:7;18048:31;:66::i;:::-;18125;18157:6;18165:10;18177:4;18183:7;18125:31;:66::i;:::-;18229:4;-1:-1:-1::0;;;;;18214:25:0::1;;18240:2;18214:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;18214:29:0::1;-1:-1:-1::0;;;;;18214:29:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18214:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18214:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18214:29:0;17513:738;;;;-1:-1:-1;18214:29:0;;-1:-1:-1;17513:738:0;;-1:-1:-1;;;;;;;;;17513:738:0:o;18257:974::-;18510:16;18528:14;18544;18491:8;15758:15;15746:8;:27;;15738:64;;;;;-1:-1:-1;;;15738:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15738:64:0;;;;;;;;;;;;;;;18598:176:::1;18626:5;18646:4;18665:18;18698:9;18722:14;18751:12;18598:13;:176::i;:::-;18571:203:::0;;-1:-1:-1;18571:203:0;-1:-1:-1;18785:12:0::1;18800:46;18825:7;18834:5:::0;18841:4:::1;18800:24;:46::i;:::-;18785:61;;18857:69;18889:5;18896:10;18908:4;18914:11;18857:31;:69::i;:::-;18943:4;-1:-1:-1::0;;;;;18937:19:0::1;;18964:9;18937:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18937:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18937:39:0;;;;;19000:4;-1:-1:-1::0;;;;;18994:20:0::1;;19015:4;19021:9;18994:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;18994:37:0::1;-1:-1:-1::0;;;;;18994:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18994:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18994:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18994:37:0;18987:45:::1;;;;19070:4;-1:-1:-1::0;;;;;19055:25:0::1;;19081:2;19055:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;19055:29:0::1;-1:-1:-1::0;;;;;19055:29:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19055:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19055:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19055:29:0;;-1:-1:-1;19135:9:0::1;:21:::0;-1:-1:-1;19131:92:0::1;;;19158:65;19189:10;19213:9;19201;:21;19158:30;:65::i;:::-;15813:1;18257:974:::0;;;;;;;;;;;:::o;28170:810::-;28383:21;28355:8;15758:15;15746:8;:27;;15738:64;;;;;-1:-1:-1;;;15738:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15738:64:0;;;;;;;;;;;;;;;28441:4:::1;-1:-1:-1::0;;;;;28430:15:0::1;:4;;28435:1;28430:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28430:7:0::1;-1:-1:-1::0;;;;;28430:15:0::1;;28422:57;;;::::0;;-1:-1:-1;;;28422:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28500:55;28530:7;28539:9;28550:4;;28500:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28500:29:0::1;::::0;-1:-1:-1;;;28500:55:0:i:1;:::-;28490:65;;28588:9;28574:7;28582:1;28574:10;;;;;;;;;;;;;;:23;;28566:75;;;;-1:-1:-1::0;;;28566:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28658:4;-1:-1:-1::0;;;;;28652:19:0::1;;28679:7;28687:1;28679:10;;;;;;;;;;;;;;28652:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28652:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28652:40:0;;;;;28716:4;-1:-1:-1::0;;;;;28710:20:0::1;;28731:51;28756:7;28765:4;;28770:1;28765:7;;;;;;28731:51;28784:7;28792:1;28784:10;;;;;;;;;;;;;;28710:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;28710:85:0::1;-1:-1:-1::0;;;;;28710:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28710:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28710:85:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28710:85:0;28703:93:::1;;;;28807:24;28813:7;28822:4;;28807:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28828:2:0;;-1:-1:-1;28807:5:0::1;::::0;-1:-1:-1;;28807:24:0:i:1;:::-;28894:7;28902:1;28894:10;;;;;;;;;;;;;;28882:9;:22;28878:94;;;28906:66;28937:10;28961:7;28969:1;28961:10;;;;;;;;;;;;;;28949:9;:22;28906:30;:66::i;1225:361::-:0;1420:45;;;-1:-1:-1;;;;;1420:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1420:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1409:57:0;;;;1374:12;;1388:17;;1409:10;;;;1420:45;1409:57;;;25:18:-1;1409: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;;;1409: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;;1373:93:0;;;;1485:7;:57;;;;-1:-1:-1;1497:11:0;;:16;;:44;;;1528:4;1517:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1517:24:0;1497:44;1477:101;;;;;-1:-1:-1;;;1477:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1225:361;;;;;:::o;2004:195::-;2112:12;;;2074;2112;;;;;;;;;-1:-1:-1;;;;;2091:7:0;;;2105:5;;2091:34;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2091:34:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;2073:52:0;;;2144:7;2136:55;;;;-1:-1:-1;;;2136:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2004:195;;;:::o;12201:517::-;12294:14;12340:1;12329:8;:12;12321:68;;;;-1:-1:-1;;;12321:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12420:1;12408:9;:13;:31;;;;;12438:1;12425:10;:14;12408:31;12400:84;;;;-1:-1:-1;;;12400:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12495:20;12518:17;:8;12531:3;12518:17;:12;:17;:::i;:::-;12495:40;-1:-1:-1;12546:14:0;12563:31;12495:40;12583:10;12563:31;:19;:31;:::i;:::-;12546:48;-1:-1:-1;12605:16:0;12624:40;12648:15;12624:19;:9;12638:4;12624:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;12605:59;;12699:11;12687:9;:23;;;;;;;12201:517;-1:-1:-1;;;;;;;12201:517:0:o;13393:511::-;13494:21;13551:1;13536:4;:11;:16;;13528:59;;;;;-1:-1:-1;;;13528:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13619:4;:11;13608:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13608:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;13608:23:0;;13598:33;;13655:8;13642:7;13650:1;13642:10;;;;;;;;;;;;;:21;;;;;13679:6;13674:223;13705:1;13691:4;:11;:15;13687:1;:19;13674:223;;;13729:14;13745:15;13764:42;13776:7;13785:4;13790:1;13785:7;;;;;;;;;;;;;;13794:4;13799:1;13803;13799:5;13794:11;;;;;;;;;;;;;;13764;:42::i;:::-;13728:78;;;;13838:47;13851:7;13859:1;13851:10;;;;;;;;;;;;;;13863:9;13874:10;13838:12;:47::i;:::-;13821:7;13829:1;13833;13829:5;13821:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;13708:3:0;;13674:223;;;;13393:511;;;;;:::o;10675:478::-;10764:12;10790:14;10806;10824:26;10835:6;10843;10824:10;:26::i;:::-;10988:32;;;-1:-1:-1;;10988:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;10988:32:0;;;;;10978:43;;;;;;10891:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;10891:251:0;;;;;;;10881:262;;;;;;;;;10675:478;-1:-1:-1;;;;;10675:478:0:o;1594:402::-;1819:51;;;-1:-1:-1;;;;;1819:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1819:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1808:63:0;;;;1773:12;;1787:17;;1808:10;;;;1819:51;1808:63;;;25:18:-1;1808: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;;;1808: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;;1772:99:0;;;;1890:7;:57;;;;-1:-1:-1;1902:11:0;;:16;;:44;;;1933:4;1922:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1922:24:0;1902:44;1882:106;;;;-1:-1:-1;;;1882:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1594:402;;;;;;:::o;23790:735::-;23897:6;23892:626;23923:1;23909:4;:11;:15;23905:1;:19;23892:626;;;23947:13;23962:14;23981:4;23986:1;23981:7;;;;;;;;;;;;;;23990:4;23995:1;23999;23995:5;23990:11;;;;;;;;;;;;;;23946:56;;;;24018:14;24037:42;24065:5;24072:6;24037:27;:42::i;:::-;24017:62;;;24094:14;24111:7;24119:1;24123;24119:5;24111:14;;;;;;;;;;;;;;24094:31;;24141:15;24158;24186:6;-1:-1:-1;;;;;24177:15:0;:5;-1:-1:-1;;;;;24177:15:0;;:61;;24219:9;24235:1;24177:61;;;24201:1;24205:9;24177:61;24140:98;;;;24253:10;24284:1;24270:4;:11;:15;24266:1;:19;:82;;24345:3;24266:82;;;24288:54;24313:7;24322:6;24330:4;24335:1;24339;24335:5;24330:11;;;;;;;;;;;;;;24288:24;:54::i;:::-;24253:95;;24378:48;24403:7;24412:5;24419:6;24378:24;:48::i;:::-;-1:-1:-1;;;;;24363:69:0;;24451:10;24463;24475:2;24489:1;24479:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;24479:12:0;87:42:-1;143:17;;-1:-1;24479:12:0;;24363:143;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24363:143:0;-1:-1:-1;;;;;24363:143: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;24363:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24363:143:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;23926:3:0;;;;;-1:-1:-1;23892:626:0;;-1:-1:-1;;;;;;;;23892:626:0;;;23790:735;;;:::o;13985:532::-;14086:21;14143:1;14128:4;:11;:16;;14120:59;;;;;-1:-1:-1;;;14120:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14211:4;:11;14200:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14200:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14200:23:0;;14190:33;;14264:9;14234:7;14259:1;14242:7;:14;:18;14234:27;;;;;;;;;;;;;;;;;:39;14298:11;;-1:-1:-1;;14298:15:0;14284:226;14315:5;;14284:226;;14343:14;14359:15;14378:42;14390:7;14399:4;14408:1;14404;:5;14399:11;;;;;;;;;;;;;;14412:4;14417:1;14412:7;;;;;;;14378:42;14342:78;;;;14452:46;14464:7;14472:1;14464:10;;;;;;;;;;;;;;14476:9;14487:10;14452:11;:46::i;:::-;14435:7;14447:1;14443;:5;14435:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;14322:3:0;14284:226;;29127:1214;29240:6;29235:1099;29266:1;29252:4;:11;:15;29248:1;:19;29235:1099;;;29290:13;29305:14;29324:4;29329:1;29324:7;;;;;;;;;;;;;;29333:4;29338:1;29342;29338:5;29333:11;;;;;;;;;;;;;;29289:56;;;;29361:14;29380:42;29408:5;29415:6;29380:27;:42::i;:::-;29360:62;;;29437:19;29474:48;29499:7;29508:5;29515:6;29474:24;:48::i;:::-;29437:86;;29538:16;29569:17;29657:13;29672;29690:4;-1:-1:-1;;;;;29690:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29690:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29690:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29690:18:0;;;;;;;29656:52;;;;;-1:-1:-1;29656:52:0;;-1:-1:-1;29724:17:0;;-1:-1:-1;;;;;29765:15:0;;;;;;;:61;;29807:8;29817;29765:61;;;29784:8;29794;29765:61;29723:103;;;;29855:56;29898:12;29862:5;-1:-1:-1;;;;;29855:23:0;;29887:4;29855:38;;;;;;;;;;;;;-1:-1:-1;;;;;29855:38:0;-1:-1:-1;;;;;29855:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;29855:56:0;29841:70;;29941:71;29971:11;29984:12;29998:13;29941:29;:71::i;:::-;29926:86;;29235:1099;;;;30043:15;30060;30088:6;-1:-1:-1;;;;;30079:15:0;:5;-1:-1:-1;;;;;30079:15:0;;:67;;30124:12;30143:1;30079:67;;;30103:1;30107:12;30079:67;30042:104;;;;30161:10;30192:1;30178:4;:11;:15;30174:1;:19;:82;;30253:3;30174:82;;;30196:54;30221:7;30230:6;30238:4;30243:1;30247;30243:5;30238:11;;;;;;;30196:54;30309:12;;;30319:1;30309:12;;;;;;;;;;-1:-1:-1;;;30271:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;30271:51:0;;;;;;;;;;;;;;;;;;;;;;30161:95;;-1:-1:-1;30271:9:0;;;;;;30281:10;;30293;;30161:95;;30309:12;;30271:51;;;;;;;;30309:12;;30271:51;;;;30309: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;30271:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30271:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29269:3:0;;;;;-1:-1:-1;29235:1099:0;;-1:-1:-1;;;;;;;;;;29235:1099:0;9783:129;9867:5;;;9862:16;;;;9854:50;;;;;-1:-1:-1;;;9854:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;12839:472;12932:13;12978:1;12966:9;:13;12958:70;;;;-1:-1:-1;;;12958:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13059:1;13047:9;:13;:31;;;;;13077:1;13064:10;:14;13047:31;13039:84;;;;-1:-1:-1;;;13039:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13134:14;13151:34;13180:4;13151:24;:9;13165;13151:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;13134:51;-1:-1:-1;13196:16:0;13215:34;13245:3;13215:25;:10;13230:9;13215:25;:14;:25;:::i;:34::-;13196:53;;13271:32;13301:1;13284:11;13272:9;:23;;;;;;;13271:32;:29;:32;:::i;:::-;13260:43;12839:472;-1:-1:-1;;;;;;12839:472:0:o;11758:321::-;11840:12;11883:1;11873:7;:11;11865:61;;;;-1:-1:-1;;;11865:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11956:1;11945:8;:12;:28;;;;;11972:1;11961:8;:12;11945:28;11937:81;;;;-1:-1:-1;;;11937:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12063:8;12039:21;:7;12051:8;12039:21;:11;:21;:::i;:::-;:32;;;;;;;11758:321;-1:-1:-1;;;;11758:321:0:o;10234:349::-;10309:14;10325;10370:6;-1:-1:-1;;;;;10360:16:0;:6;-1:-1:-1;;;;;10360:16:0;;;10352:66;;;;-1:-1:-1;;;10352:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10457:6;-1:-1:-1;;;;;10448:15:0;:6;-1:-1:-1;;;;;10448:15:0;;:53;;10486:6;10494;10448:53;;;10467:6;10475;10448:53;10429:72;;-1:-1:-1;10429:72:0;-1:-1:-1;;;;;;10520:20:0;;10512:63;;;;;-1:-1:-1;;;10512:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10234:349;;;;;:::o;16117:1390::-;16430:50;;;-1:-1:-1;;;16430:50:0;;-1:-1:-1;;;;;16430:50:0;;;;;;;;;;;;;;;;16335:12;;;;;;16448:7;16430:34;;;;;;:50;;;;;;;;;;;;;;;:34;:50;;;2:2:-1;;;;27:1;24;17:12;2:2;16430:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16430:50:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16430:50:0;-1:-1:-1;;;;;16430:64:0;;16426:150;;;16511:53;;;-1:-1:-1;;;16511:53:0;;-1:-1:-1;;;;;16511:53:0;;;;;;;;;;;;;;;;16529:7;16511:37;;;;;;:53;;;;;;;;;;;;;;;-1:-1:-1;16511:37:0;:53;;;2:2:-1;;;;27:1;24;17:12;2:2;16511:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16511:53:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;16426:150:0;16587:13;16602;16619:53;16648:7;16657:6;16665;16619:28;:53::i;:::-;16586:86;;;;16687:8;16699:1;16687:13;:30;;;;-1:-1:-1;16704:13:0;;16687:30;16683:817;;;16756:14;;-1:-1:-1;16772:14:0;;-1:-1:-1;16683:817:0;;;16820:19;16842:58;16865:14;16881:8;16891;16842:22;:58::i;:::-;16820:80;;16937:14;16919;:32;16915:574;;16998:10;16980:14;:28;;16972:79;;;;-1:-1:-1;;;16972:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17092:14;;-1:-1:-1;17108:14:0;-1:-1:-1;17108:14:0;16915:574;;;17164:19;17186:58;17209:14;17225:8;17235;17186:22;:58::i;:::-;17164:80;;17288:14;17270;:32;;17263:40;;;;17348:10;17330:14;:28;;17322:79;;;;-1:-1:-1;;;17322:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17442:14;-1:-1:-1;17458:14:0;;-1:-1:-1;16915:574:0;16683:817;;16117:1390;;;;;;;;;;;:::o;9920:142::-;9972:6;9999;;;:30;;-1:-1:-1;;10014:5:0;;;10028:1;10023;10014:5;10023:1;10009:15;;;;;:20;9999:30;9991:63;;;;;-1:-1:-1;;;9991:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;9647:128;9731:5;;;9726:16;;;;9718:49;;;;;-1:-1:-1;;;9718:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;11211:434;11304:13;11319;11346:14;11365:26;11376:6;11384;11365:10;:26::i;:::-;11345:46;;;11402:32;11410:7;11419:6;11427;11402:7;:32::i;:::-;;11446:13;11461;11494:32;11502:7;11511:6;11519;11494:7;:32::i;:::-;-1:-1:-1;;;;;11479:60:0;;:62;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11479:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11479:62:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11479:62:0;;;;;;;11445:96;;;;;-1:-1:-1;11445:96:0;;-1:-1:-1;;;;;;11575:16:0;;;;;;;:62;;11618:8;11628;11575:62;;;11595:8;11605;11575:62;11552:85;;;;-1:-1:-1;11211:434:0;-1:-1:-1;;;;;;;11211:434:0:o

Swarm Source

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