Contract 0x3047799262d8d2ef41ed2a222205968bc9b0d895 1

 
 
Txn Hash
Block
From
To
Value [Txn Fee]
0xcf32787979c6cdfcd6366484eb018fd8a9b9767ec45e185f69831f6ebf84daea97565242021-08-05 1:45:4356 mins ago0x51b3a74015d1d2fc2f83efca96723aaab0eb4b32 IN  CheeseSwap: Router0 BNB0.000571975
0x9cc5fd294b64fbb1b25dea0d0d8d13453b76408876583a2a19083e638bf4dc6097559782021-08-05 1:18:251 hr 23 mins ago0xa1e90a2b858497fcb75870113b367db016602ac3 IN  CheeseSwap: Router0 BNB0.00094763
0xff2a57fb4356cf4ba88996692ca75d4910c326c967cc36e60ffdb05098a26ca097536472021-08-04 23:17:003 hrs 24 mins ago0x88149ba6d35e39ea3036ad52d2e39d0d88ec095c IN  CheeseSwap: Router0.01 BNB0.00055528
0xf3bf1f559ffde9b857e44abd5213eb63c9aa04ff05050b5ff48b6b08bbfe472b97536282021-08-04 23:15:583 hrs 25 mins ago0x88149ba6d35e39ea3036ad52d2e39d0d88ec095c IN  CheeseSwap: Router0 BNB0.000726445
0xef03e16acaf1cc142b5ac45272dc2012632a31b2d1fa2f831319c5b8457e22c897536232021-08-04 23:15:373 hrs 26 mins ago0x88149ba6d35e39ea3036ad52d2e39d0d88ec095c IN  CheeseSwap: Router0 BNB0.000908325
0xfe0dd831e195e860db83238a87e77656b8f64fa1e0f146d746ae7f90e2d85fb497536142021-08-04 23:15:073 hrs 26 mins ago0x88149ba6d35e39ea3036ad52d2e39d0d88ec095c IN  CheeseSwap: Router0.1 BNB0.00055571
0xa04e2ddfdf33acb23bf37ecbdf0fc5df8c41afcb3a44950c588ed8af6c514e7097535232021-08-04 23:10:053 hrs 31 mins ago0x2f35239270f2379ab1066a6c243789382c1e15b3 IN  CheeseSwap: Router0 BNB0.000725355
0xf7dbe38401605c0a6f22ee9692a06d5cd3319b225864553d1c661cdb8846462497535152021-08-04 23:09:413 hrs 32 mins ago0x2f35239270f2379ab1066a6c243789382c1e15b3 IN  CheeseSwap: Router0.29 BNB0.00055571
0xed33507ce6c28f40f10db68037fc22f8be39dbd3b8462a24d58ffa5b95e5ec8597534962021-08-04 23:08:443 hrs 33 mins ago0x2f35239270f2379ab1066a6c243789382c1e15b3 IN  CheeseSwap: Router0 BNB0.000908505
0x591edc44aedb6f8366f4dbf50eb1c1f67cad8ec10e56869a0231aaf7cc4b216797534432021-08-04 23:06:053 hrs 35 mins ago0x87cc958722247b987c0bcc2e398504fa40c50656 IN  CheeseSwap: Router0 BNB0.000725355
0x95ffd73959d277371eb348a2cdea84837b1ec857188c2580fc36cb5b1c2b2d4397534312021-08-04 23:05:293 hrs 36 mins ago0x87cc958722247b987c0bcc2e398504fa40c50656 IN  CheeseSwap: Router0.055 BNB0.00055571
0x33fcf56fb6766bb388ad7f46694d7f544a91146085d927fd0222595370be61ef97534222021-08-04 23:05:023 hrs 36 mins ago0x87cc958722247b987c0bcc2e398504fa40c50656 IN  CheeseSwap: Router0 BNB0.000909415
0x305f4320a4f8bbcc8af44bf4fef593e13009b03ba072ffaaee7c874b79b3430797534022021-08-04 23:04:023 hrs 37 mins ago0x87cc958722247b987c0bcc2e398504fa40c50656 IN  CheeseSwap: Router0.05 BNB0.000893045
0xb378a28176d9ee95eebe9d81d2b5138104c17c1a1c1369f638424bea4032c05597533942021-08-04 23:03:383 hrs 38 mins ago0x87cc958722247b987c0bcc2e398504fa40c50656 IN  CheeseSwap: Router0.025 BNB0.00055528
0x3c4a64a58681761a823d5cf07729da3daa17c927ebee5810d999ab799a5aac6d97520132021-08-04 21:54:104 hrs 47 mins ago0x815e05403ae91abe5b1550a22d7a5aac149c2fca IN  CheeseSwap: Router0 BNB0.000725355
0x7dc2163427adfe281827364e1fd17eff741e2ef1808428b37405db6d1a06bae497519992021-08-04 21:53:244 hrs 48 mins ago0x815e05403ae91abe5b1550a22d7a5aac149c2fca IN  CheeseSwap: Router0 BNB0.00044826
0x6908ac02a1ff3a7e00522b0841232c1cdda64d2428ddfae016edee22bed9789f97519252021-08-04 21:49:424 hrs 52 mins ago0x88149ba6d35e39ea3036ad52d2e39d0d88ec095c IN  CheeseSwap: Router0 BNB0.000875435
0xf04296b6bff5eb708d09f5c280c5778c6185f79063d38b4326e452b690ed589197518772021-08-04 21:47:064 hrs 54 mins ago0x88149ba6d35e39ea3036ad52d2e39d0d88ec095c IN  CheeseSwap: Router0 BNB0.00052326
0x037ecc947b2739c8153848ca4cfac235d8bba3267c7f44b16099c863c482d8b097516182021-08-04 21:34:065 hrs 7 mins ago0x2f35239270f2379ab1066a6c243789382c1e15b3 IN  CheeseSwap: Router0 BNB0.000875495
0x284700331fe6cc7c160b8156f105c265297b0f5590907ad801976c7732272ac597516092021-08-04 21:33:395 hrs 8 mins ago0x2f35239270f2379ab1066a6c243789382c1e15b3 IN  CheeseSwap: Router0 BNB0.00052326
0xf9657029d7cf9b5ae7e0be9abba4f8fa99059b3cb48be75d3e8aff992c10418f97515172021-08-04 21:29:035 hrs 12 mins ago0x87cc958722247b987c0bcc2e398504fa40c50656 IN  CheeseSwap: Router0 BNB0.00093006
0x56c0af7cba039ee46117b6cdc6cc9969bb32c92c69589460135db5715220d6ca97515032021-08-04 21:28:215 hrs 13 mins ago0x87cc958722247b987c0bcc2e398504fa40c50656 IN  CheeseSwap: Router0 BNB0.00052326
0xd6d3a886ec6a54a5cc1e19b10c37d8d3d1ec4f049882395487b841bf81770dc597509682021-08-04 20:59:565 hrs 41 mins ago0xd095cc0f7103f28db359327683d164d3838a8fac IN  CheeseSwap: Router0.019982790791382 BNB0.000595205
0x4a503b7183d5e48b6ac64baee39905ee391e31c936192fd13ead5b790dd2946697509172021-08-04 20:57:235 hrs 44 mins ago0xd095cc0f7103f28db359327683d164d3838a8fac IN  CheeseSwap: Router0.037492388227741 BNB0.00059614
0x232f9a74dcd4e72a602bd617e3219c7c1e0743ddad38c8038cc31c1e76fd475d97508972021-08-04 20:56:235 hrs 45 mins ago0xd095cc0f7103f28db359327683d164d3838a8fac IN  CheeseSwap: Router0.046698844237033 BNB0.00059614
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xcf32787979c6cdfcd6366484eb018fd8a9b9767ec45e185f69831f6ebf84daea97565242021-08-05 1:45:4356 mins ago CheeseSwap: Router0x51b3a74015d1d2fc2f83efca96723aaab0eb4b321.303274261434544128 BNB
0xcf32787979c6cdfcd6366484eb018fd8a9b9767ec45e185f69831f6ebf84daea97565242021-08-05 1:45:4356 mins ago Binance: WBNB Token CheeseSwap: Router1.303274261434544128 BNB
0xff2a57fb4356cf4ba88996692ca75d4910c326c967cc36e60ffdb05098a26ca097536472021-08-04 23:17:003 hrs 24 mins ago CheeseSwap: Router Binance: WBNB Token0.01 BNB
0xef03e16acaf1cc142b5ac45272dc2012632a31b2d1fa2f831319c5b8457e22c897536232021-08-04 23:15:373 hrs 26 mins ago CheeseSwap: Router0x88149ba6d35e39ea3036ad52d2e39d0d88ec095c0.008741682600378458 BNB
0xef03e16acaf1cc142b5ac45272dc2012632a31b2d1fa2f831319c5b8457e22c897536232021-08-04 23:15:373 hrs 26 mins ago Binance: WBNB Token CheeseSwap: Router0.008741682600378458 BNB
0xfe0dd831e195e860db83238a87e77656b8f64fa1e0f146d746ae7f90e2d85fb497536142021-08-04 23:15:073 hrs 26 mins ago CheeseSwap: Router Binance: WBNB Token0.1 BNB
0xf7dbe38401605c0a6f22ee9692a06d5cd3319b225864553d1c661cdb8846462497535152021-08-04 23:09:413 hrs 32 mins ago CheeseSwap: Router Binance: WBNB Token0.29 BNB
0xed33507ce6c28f40f10db68037fc22f8be39dbd3b8462a24d58ffa5b95e5ec8597534962021-08-04 23:08:443 hrs 33 mins ago CheeseSwap: Router0x2f35239270f2379ab1066a6c243789382c1e15b30.307004175565000159 BNB
0xed33507ce6c28f40f10db68037fc22f8be39dbd3b8462a24d58ffa5b95e5ec8597534962021-08-04 23:08:443 hrs 33 mins ago Binance: WBNB Token CheeseSwap: Router0.307004175565000159 BNB
0x95ffd73959d277371eb348a2cdea84837b1ec857188c2580fc36cb5b1c2b2d4397534312021-08-04 23:05:293 hrs 36 mins ago CheeseSwap: Router Binance: WBNB Token0.055 BNB
0x33fcf56fb6766bb388ad7f46694d7f544a91146085d927fd0222595370be61ef97534222021-08-04 23:05:023 hrs 36 mins ago CheeseSwap: Router0x87cc958722247b987c0bcc2e398504fa40c506560.058741682600378457 BNB
0x33fcf56fb6766bb388ad7f46694d7f544a91146085d927fd0222595370be61ef97534222021-08-04 23:05:023 hrs 36 mins ago Binance: WBNB Token CheeseSwap: Router0.058741682600378457 BNB
0x305f4320a4f8bbcc8af44bf4fef593e13009b03ba072ffaaee7c874b79b3430797534022021-08-04 23:04:023 hrs 37 mins ago CheeseSwap: Router0x87cc958722247b987c0bcc2e398504fa40c506561 wei
0x305f4320a4f8bbcc8af44bf4fef593e13009b03ba072ffaaee7c874b79b3430797534022021-08-04 23:04:023 hrs 37 mins ago CheeseSwap: Router Binance: WBNB Token0.049999999999999999 BNB
0xb378a28176d9ee95eebe9d81d2b5138104c17c1a1c1369f638424bea4032c05597533942021-08-04 23:03:383 hrs 38 mins ago CheeseSwap: Router Binance: WBNB Token0.025 BNB
0xd6d3a886ec6a54a5cc1e19b10c37d8d3d1ec4f049882395487b841bf81770dc597509682021-08-04 20:59:565 hrs 41 mins ago CheeseSwap: Router0xd095cc0f7103f28db359327683d164d3838a8fac0.000119340089971369 BNB
0xd6d3a886ec6a54a5cc1e19b10c37d8d3d1ec4f049882395487b841bf81770dc597509682021-08-04 20:59:565 hrs 41 mins ago CheeseSwap: Router Binance: WBNB Token0.019863450701411576 BNB
0x4a503b7183d5e48b6ac64baee39905ee391e31c936192fd13ead5b790dd2946697509172021-08-04 20:57:235 hrs 44 mins ago CheeseSwap: Router0xd095cc0f7103f28db359327683d164d3838a8fac0.0002239099148388 BNB
0x4a503b7183d5e48b6ac64baee39905ee391e31c936192fd13ead5b790dd2946697509172021-08-04 20:57:235 hrs 44 mins ago CheeseSwap: Router Binance: WBNB Token0.03726847831290222 BNB
0x232f9a74dcd4e72a602bd617e3219c7c1e0743ddad38c8038cc31c1e76fd475d97508972021-08-04 20:56:235 hrs 45 mins ago CheeseSwap: Router0xd095cc0f7103f28db359327683d164d3838a8fac0.000278892189333724 BNB
0x232f9a74dcd4e72a602bd617e3219c7c1e0743ddad38c8038cc31c1e76fd475d97508972021-08-04 20:56:235 hrs 45 mins ago CheeseSwap: Router Binance: WBNB Token0.046419952047699915 BNB
0xbc6eb14cfce5821d26cd8c747d2fc03a33c4d3e03fc407cb93e11d52c9caa87a97508812021-08-04 20:55:355 hrs 46 mins ago CheeseSwap: Router0xd095cc0f7103f28db359327683d164d3838a8fac0.000166807240834967 BNB
0xbc6eb14cfce5821d26cd8c747d2fc03a33c4d3e03fc407cb93e11d52c9caa87a97508812021-08-04 20:55:355 hrs 46 mins ago CheeseSwap: Router Binance: WBNB Token0.027764076646487868 BNB
0x83df10d47df4d4e8bcdf9c6285e9075cad75688156bcb934ad5ead4bc730c9f997497452021-08-04 19:57:316 hrs 44 mins ago CheeseSwap: Router0x8ab97a24e47b275143c94f705ace6ead423112da0.000490851436033709 BNB
0x83df10d47df4d4e8bcdf9c6285e9075cad75688156bcb934ad5ead4bc730c9f997497452021-08-04 19:57:316 hrs 44 mins ago CheeseSwap: Router Binance: WBNB Token0.081699312475059683 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CheeseSwapRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license, Audited

Contract Source Code (Solidity)Audit Report

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

// SPDX-License-Identifier: MIT

pragma solidity =0.6.6;


interface ICheeseSwapFactory {
    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 ICheeseSwapRouter01 {
    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 ICheeseSwapRouter02 is ICheeseSwapRouter01 {
    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 ICheeseSwapPair {
    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 CheeseSwapLibrary {
    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, 'CheeseSwapLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'CheeseSwapLibrary: 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'f52c5189a89e7ca2ef4f19f2798e3900fba7a316de7cef6c5a9446621ba86286' // 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,) = ICheeseSwapPair(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, 'CheeseSwapLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'CheeseSwapLibrary: 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, 'CheeseSwapLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'CheeseSwapLibrary: 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, 'CheeseSwapLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'CheeseSwapLibrary: 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, 'CheeseSwapLibrary: 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, 'CheeseSwapLibrary: 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 CheeseSwapRouter is ICheeseSwapRouter02 {
    using SafeMath for uint;

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

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

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

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

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

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

Contract Security Audit

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

60c060405234801561001057600080fd5b506040516200477d3803806200477d8339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6145f8620001856000398061015f5280610ce45280610d1f5280610e16528061103452806113be528061152452806118eb52806119e55280611a9b5280611b695280611caf5280611d375280611f7c5280611ff752806120a652806121725280612207528061227b528061277952806129ec5280612a425280612a765280612aea5280612c8a5280612dcd5280612e55525080610ea45280610f7b52806110fa5280611133528061126e528061144c528061150252806116725280611bfc5280611d695280611ecc52806122ad528061250652806126fe5280612727528061275752806128c45280612a205280612d1d5280612e87528061372e52806137715280613a545280613bd3528061400352806140b1528061413152506145f86000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b03813516906020013561189d565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b21565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e74565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e81565b34801561088157600080fd5b5061088a611f7a565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f9e565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fab565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b03813516906020013561212c565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124b8565b348015610a1c57600080fd5b5061088a6126fc565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612720945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561274d565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612861565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561299d565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612c42565b6000808242811015610cde576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124b8565b9093509150610d1d898685612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da5858361312e565b50965096945050505050565b6000610dbe848484613226565b949350505050565b60608142811015610e0c576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b815260206004820152601e6024820152600080516020614535833981519152604482015290519081900360640190fd5b610efd7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b815260040180806020018281038252602c815260200180614448602c913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b0316613462565b85600081518110610fe657fe5b6020026020010151613522565b6110328287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061367f915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b602002602001015161312e565b509695505050505050565b60606111207f000000000000000000000000000000000000000000000000000000000000000084846138c5565b90505b92915050565b60008060006111597f00000000000000000000000000000000000000000000000000000000000000008f8f613462565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f6124b8565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b6112c77f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b815260040180806020018281038252602c815260200180614448602c913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e88287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b606081428110156113b4576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b815260206004820152601e6024820152600080516020614535833981519152604482015290519081900360640190fd5b6114a57f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b81526004018080602001828103825260288152602001806144746028913960400191505060405180910390fd5b6000806115487f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611fab565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a613522565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b505160408051602088810282810182019093528882529293506117a49290918991899182918501908490808284376000920191909152508892506139fd915050565b8661185682888860001981018181106117b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d602081101561184857600080fd5b50519063ffffffff613d0816565b10156118935760405162461bcd60e51b815260040180806020018281038252602c815260200180614448602c913960400191505060405180910390fd5b5050505050505050565b80428110156118e1576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061191b57fe5b905060200201356001600160a01b03166001600160a01b031614611974576040805162461bcd60e51b815260206004820152601e6024820152600080516020614535833981519152604482015290519081900360640190fd5b6119848585600081811061165c57fe5b6119c28585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506139fd915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a2c57600080fd5b505afa158015611a40573d6000803e3d6000fd5b505050506040513d6020811015611a5657600080fd5b5051905086811015611a995760405162461bcd60e51b815260040180806020018281038252602c815260200180614448602c913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aff57600080fd5b505af1158015611b13573d6000803e3d6000fd5b50505050611893848261312e565b60608142811015611b67576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b9e57fe5b905060200201356001600160a01b03166001600160a01b031614611bf7576040805162461bcd60e51b815260206004820152601e6024820152600080516020614535833981519152604482015290519081900360640190fd5b611c557f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110611c6857fe5b60200260200101511015611cad5760405162461bcd60e51b815260040180806020018281038252602c815260200180614448602c913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611ce957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1c57600080fd5b505af1158015611d30573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d957f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110611da257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b505050506040513d6020811015611e2357600080fd5b5051611e2b57fe5b611e6a8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b5095945050505050565b6000610dbe848484613d58565b60608142811015611ec7576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b611f257f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91508682600081518110611f3557fe5b6020026020010151111561131f5760405162461bcd60e51b81526004018080602001828103825260288152602001806144746028913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613e48565b60008142811015611ff1576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b612020887f000000000000000000000000000000000000000000000000000000000000000089898930896124b8565b604080516370a0823160e01b815230600482015290519194506120a492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561207357600080fd5b505afa158015612087573d6000803e3d6000fd5b505050506040513d602081101561209d57600080fd5b5051612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561210a57600080fd5b505af115801561211e573d6000803e3d6000fd5b505050506110e8848361312e565b8042811015612170576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106121a757fe5b905060200201356001600160a01b03166001600160a01b031614612200576040805162461bcd60e51b815260206004820152601e6024820152600080516020614535833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122d97f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561232957600080fd5b505af115801561233d573d6000803e3d6000fd5b505050506040513d602081101561235357600080fd5b505161235b57fe5b60008686600019810181811061236d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123d257600080fd5b505afa1580156123e6573d6000803e3d6000fd5b505050506040513d60208110156123fc57600080fd5b5051604080516020898102828101820190935289825292935061243e9290918a918a9182918501908490808284376000920191909152508992506139fd915050565b87611856828989600019810181811061245357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b60008082428110156124ff576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b600061252c7f00000000000000000000000000000000000000000000000000000000000000008c8c613462565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561258757600080fd5b505af115801561259b573d6000803e3d6000fd5b505050506040513d60208110156125b157600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125fe57600080fd5b505af1158015612612573d6000803e3d6000fd5b505050506040513d604081101561262857600080fd5b508051602090910151909250905060006126428e8e613ef4565b509050806001600160a01b03168e6001600160a01b031614612665578183612668565b82825b90975095508a8710156126ac5760405162461bcd60e51b81526004018080602001828103825260278152602001806144c26027913960400191505060405180910390fd5b898610156126eb5760405162461bcd60e51b81526004018080602001828103825260278152602001806145556027913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111207f00000000000000000000000000000000000000000000000000000000000000008484613316565b600080600061279d7f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613462565b90506000876127ac578c6127b0565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561282657600080fd5b505af115801561283a573d6000803e3d6000fd5b5050505061284c8e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b600080600083428110156128aa576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b6128b88c8c8c8c8c8c613fd2565b909450925060006128ea7f00000000000000000000000000000000000000000000000000000000000000008e8e613462565b90506128f88d338388613522565b6129048c338387613522565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561295c57600080fd5b505af1158015612970573d6000803e3d6000fd5b505050506040513d602081101561298657600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129e6576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b612a148a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613fd2565b90945092506000612a667f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050612a748b338388613522565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612acf57600080fd5b505af1158015612ae3573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b6857600080fd5b505af1158015612b7c573d6000803e3d6000fd5b505050506040513d6020811015612b9257600080fd5b5051612b9a57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612bf257600080fd5b505af1158015612c06573d6000803e3d6000fd5b505050506040513d6020811015612c1c57600080fd5b5051925034841015612c3457612c343385340361312e565b505096509650969350505050565b60608142811015612c88576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612cbf57fe5b905060200201356001600160a01b03166001600160a01b031614612d18576040805162461bcd60e51b815260206004820152601e6024820152600080516020614535833981519152604482015290519081900360640190fd5b612d767f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91503482600081518110612d8657fe5b60200260200101511115612dcb5760405162461bcd60e51b81526004018080602001828103825260288152602001806144746028913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e0757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e3a57600080fd5b505af1158015612e4e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612eb37f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110612ec057fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b505050506040513d6020811015612f4157600080fd5b5051612f4957fe5b612f888287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b81600081518110612f9557fe5b6020026020010151341115611e6a57611e6a3383600081518110612fb557fe5b6020026020010151340361312e565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130415780518252601f199092019160209182019101613022565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130a3576040519150601f19603f3d011682016040523d82523d6000602084013e6130a8565b606091505b50915091508180156130d65750805115806130d657508080602001905160208110156130d357600080fd5b50515b613127576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061317a5780518252601f19909201916020918201910161315b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131dc576040519150601f19603f3d011682016040523d82523d6000602084013e6131e1565b606091505b50509050806132215760405162461bcd60e51b815260040180806020018281038252602381526020018061457c6023913960400191505060405180910390fd5b505050565b60008084116132665760405162461bcd60e51b815260040180806020018281038252602c8152602001806144e9602c913960400191505060405180910390fd5b6000831180156132765750600082115b6132b15760405162461bcd60e51b81526004018080602001828103825260298152602001806143f96029913960400191505060405180910390fd5b60006132c5856103e663ffffffff61424616565b905060006132d9828563ffffffff61424616565b905060006132ff836132f3886103e863ffffffff61424616565b9063ffffffff6142a916565b905080828161330a57fe5b04979650505050505050565b606060028251101561336f576040805162461bcd60e51b815260206004820152601f60248201527f436865657365537761704c6962726172793a20494e56414c49445f5041544800604482015290519081900360640190fd5b815167ffffffffffffffff8111801561338757600080fd5b506040519080825280602002602001820160405280156133b1578160200160208202803683370190505b50905082816000815181106133c257fe5b60200260200101818152505060005b600183510381101561345a57600080613414878685815181106133f057fe5b602002602001015187866001018151811061340757fe5b60200260200101516142f8565b9150915061343684848151811061342757fe5b60200260200101518383613226565b84846001018151811061344557fe5b602090810291909101015250506001016133d1565b509392505050565b60008060006134718585613ef4565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527ff52c5189a89e7ca2ef4f19f2798e3900fba7a316de7cef6c5a9446621ba86286609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135a75780518252601f199092019160209182019101613588565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613609576040519150601f19603f3d011682016040523d82523d6000602084013e61360e565b606091505b509150915081801561363c57508051158061363c575080806020019051602081101561363957600080fd5b50515b6136775760405162461bcd60e51b815260040180806020018281038252602481526020018061459f6024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138bf5760008084838151811061369d57fe5b60200260200101518584600101815181106136b457fe5b60200260200101519150915060006136cc8383613ef4565b50905060008785600101815181106136e057fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461370e57826000613712565b6000835b91509150600060028a51038810613729578861376a565b61376a7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061375d57fe5b6020026020010151613462565b90506137977f00000000000000000000000000000000000000000000000000000000000000008888613462565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156137d4576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561384557818101518382015260200161382d565b50505050905090810190601f1680156138725780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561389457600080fd5b505af11580156138a8573d6000803e3d6000fd5b505060019099019850613682975050505050505050565b50505050565b606060028251101561391e576040805162461bcd60e51b815260206004820152601f60248201527f436865657365537761704c6962726172793a20494e56414c49445f5041544800604482015290519081900360640190fd5b815167ffffffffffffffff8111801561393657600080fd5b50604051908082528060200260200182016040528015613960578160200160208202803683370190505b509050828160018351038151811061397457fe5b60209081029190910101528151600019015b801561345a576000806139b6878660018603815181106139a257fe5b602002602001015187868151811061340757fe5b915091506139d88484815181106139c957fe5b60200260200101518383613d58565b8460018503815181106139e757fe5b6020908102919091010152505060001901613986565b60005b600183510381101561322157600080848381518110613a1b57fe5b6020026020010151858460010181518110613a3257fe5b6020026020010151915091506000613a4a8383613ef4565b5090506000613a7a7f00000000000000000000000000000000000000000000000000000000000000008585613462565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613abb57600080fd5b505afa158015613acf573d6000803e3d6000fd5b505050506040513d6060811015613ae557600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613b1b578284613b1e565b83835b91509150613b7c828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b9550613b89868383613226565b945050505050600080856001600160a01b0316886001600160a01b031614613bb357826000613bb7565b6000835b91509150600060028c51038a10613bce578a613c02565b613c027f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061375d57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c8c578181015183820152602001613c74565b50505050905090810190601f168015613cb95780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613cdb57600080fd5b505af1158015613cef573d6000803e3d6000fd5b50506001909b019a50613a009950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613d985760405162461bcd60e51b815260040180806020018281038252602d8152602001806143cc602d913960400191505060405180910390fd5b600083118015613da85750600082115b613de35760405162461bcd60e51b81526004018080602001828103825260298152602001806143f96029913960400191505060405180910390fd5b6000613e076103e8613dfb868863ffffffff61424616565b9063ffffffff61424616565b90506000613e216103e6613dfb868963ffffffff613d0816565b9050613e3e6001828481613e3157fe5b049063ffffffff6142a916565b9695505050505050565b6000808411613e885760405162461bcd60e51b81526004018080602001828103825260268152602001806144226026913960400191505060405180910390fd5b600083118015613e985750600082115b613ed35760405162461bcd60e51b81526004018080602001828103825260298152602001806143f96029913960400191505060405180910390fd5b82613ee4858463ffffffff61424616565b81613eeb57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613f485760405162461bcd60e51b815260040180806020018281038252602681526020018061449c6026913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613f68578284613f6b565b83835b90925090506001600160a01b038216613fcb576040805162461bcd60e51b815260206004820152601f60248201527f436865657365537761704c6962726172793a205a45524f5f4144445245535300604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561404c57600080fd5b505afa158015614060573d6000803e3d6000fd5b505050506040513d602081101561407657600080fd5b50516001600160a01b0316141561412957604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156140fc57600080fd5b505af1158015614110573d6000803e3d6000fd5b505050506040513d602081101561412657600080fd5b50505b6000806141577f00000000000000000000000000000000000000000000000000000000000000008b8b6142f8565b91509150816000148015614169575080155b1561417957879350869250614239565b6000614186898484613e48565b90508781116141d957858110156141ce5760405162461bcd60e51b81526004018080602001828103825260278152602001806145556027913960400191505060405180910390fd5b889450925082614237565b60006141e6898486613e48565b9050898111156141f257fe5b878110156142315760405162461bcd60e51b81526004018080602001828103825260278152602001806144c26027913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806142615750508082028282828161425e57fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006143078585613ef4565b509050614315868686613462565b50600080614324888888613462565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561435c57600080fd5b505afa158015614370573d6000803e3d6000fd5b505050506040513d606081101561438657600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146143b95780826143bc565b81815b9099909850965050505050505056fe436865657365537761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54436865657365537761704c6962726172793a20494e53554646494349454e545f4c4951554944495459436865657365537761704c6962726172793a20494e53554646494349454e545f414d4f554e5443686565736553776170526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5443686565736553776170526f757465723a204558434553534956455f494e5055545f414d4f554e54436865657365537761704c6962726172793a204944454e544943414c5f41444452455353455343686565736553776170526f757465723a20494e53554646494349454e545f415f414d4f554e54436865657365537761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5443686565736553776170526f757465723a20455850495245440000000000000043686565736553776170526f757465723a20494e56414c49445f50415448000043686565736553776170526f757465723a20494e53554646494349454e545f425f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45445472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a26469706673582212207e51ec9d55025e45c838e2a5d3e29a71fb45ff3239f75d85e27bda48a9da4f4464736f6c63430006060033000000000000000000000000dd538e4fd1b69b7863e1f741213276a6cf1efb3b000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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

000000000000000000000000dd538e4fd1b69b7863e1f741213276a6cf1efb3b000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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


Deployed ByteCode Sourcemap

15531:18618:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16014:10;-1:-1:-1;;;;;16028:4:0;16014:18;;16007:26;;;;15531:18618;;12:1:-1;9;2:12;20181:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20181:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20181:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33089:263;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33089:263:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33089:263:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27374:854;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27374:854:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27374:854:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27374:854:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27374:854:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27374:854:0;;-1:-1:-1;27374:854:0;-1:-1:-1;;;;;;27374:854:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;27374:854:0;;;;;;;;;;;;;;;;;33892:254;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33892:254:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33892:254:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33892:254:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33892:254:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33892:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33892:254:0;;-1:-1:-1;33892:254:0;;-1:-1:-1;;;;;33892:254:0:i;20860:679::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20860:679:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20860:679:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24577:631::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24577:631:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24577:631:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;24577:631:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24577:631:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;24577:631:0;;-1:-1:-1;24577:631:0;-1:-1:-1;;;;;;24577:631:0;;;;;;;;:::i;26536:832::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26536:832:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26536:832:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26536:832:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26536:832:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26536:832:0;;-1:-1:-1;26536:832:0;-1:-1:-1;;;;;;26536:832:0;;;;;;;;:::i;23001:720::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23001:720:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23001:720:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30421:716::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30421:716:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30421:716:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30421:716:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30421:716:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30421:716:0;;-1:-1:-1;30421:716:0;-1:-1:-1;;;;;;30421:716:0;;;;;;;;:::i;32002:846::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32002:846:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32002:846:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;32002:846:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32002:846:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;32002:846:0;;-1:-1:-1;32002:846:0;-1:-1:-1;;;;;;32002:846:0;;;;;;;;:::i;25829:701::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25829:701:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25829:701:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25829:701:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25829:701:0;;-1:-1:-1;25829:701:0;-1:-1:-1;;;;;;25829:701:0;;;;;;;;:::i;33360:262::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33360:262:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33360:262:0;;;;;;;;;;;;:::i;25214:609::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25214:609:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25214:609:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25214:609:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25214:609:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25214:609:0;;-1:-1:-1;25214:609:0;-1:-1:-1;;;;;;25214:609:0;;;;;;;;:::i;15667:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15667:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;15667:38:0;;;;;;;;;;;;;;32892:189;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32892:189:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32892:189:0;;;;;;;;;;;;:::i;22295:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22295:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22295:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31143:853::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31143:853:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31143:853:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31143:853:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31143:853:0;;-1:-1:-1;31143:853:0;-1:-1:-1;;;;;;31143:853:0;;;;;;;;:::i;19304:871::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19304:871:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19304:871:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15619:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15619:41:0;;;:::i;33630:254::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33630:254:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33630:254:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33630:254:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33630:254:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33630:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33630:254:0;;-1:-1:-1;33630:254:0;;-1:-1:-1;;;;;33630:254:0:i;21545:671::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21545:671:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21545:671:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17539:740::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17539:740:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;17539:740:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;18285:976;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18285:976:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28234:814::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28234:814:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28234:814:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28234:814:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28234:814:0;;-1:-1:-1;28234:814:0;-1:-1:-1;;;;;;28234:814:0;;;;;;;;:::i;20181:673::-;20418:16;20436:14;20399:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;20490:196:::1;20520:5;20540:4;20559:9;20583:14;20612:12;20647:4;20667:8;20490:15;:196::i;:::-;20463:223:::0;;-1:-1:-1;20463:223:0;-1:-1:-1;20697:51:0::1;20725:5:::0;20732:2;20463:223;20697:27:::1;:51::i;:::-;20765:4;-1:-1:-1::0;;;;;20759:20:0::1;;20780:9;20759:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20759:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20759:31:0;;;;20801:45;20832:2;20836:9;20801:30;:45::i;:::-;20181:673:::0;;;;;;;;;;:::o;33089:263::-;33242:14;33281:63;33312:8;33322:9;33333:10;33281:30;:63::i;:::-;33274:70;33089:263;-1:-1:-1;;;;33089:263:0:o;27374:854::-;27588:21;27560:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27660:4:0::1;27635:29;:4:::0;;-1:-1:-1;;27640:15:0;;27635:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27635:21:0::1;-1:-1:-1::0;;;;;27635:29:0::1;;27627:72;;;::::0;;-1:-1:-1;;;27627:72:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27627:72:0;;;;;;;;;;;;;::::1;;27720:56;27752:7;27761:8;27771:4;;27720:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27720:31:0::1;::::0;-1:-1:-1;;;27720:56:0:i:1;:::-;27710:66;;27826:12;27795:7;27820:1;27803:7;:14;:18;27795:27;;;;;;;;;;;;;;:43;;27787:100;;;;-1:-1:-1::0;;;27787:100:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27898:142;27944:4;;27949:1;27944:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27944:7:0::1;27953:10;27965:52;27991:7;28000:4;;28005:1;28000:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28000:7:0::1;28009:4;;28014:1;28009:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28009:7:0::1;27965:25;:52::i;:::-;28019:7;28027:1;28019:10;;;;;;;;;;;;;;27898:31;:142::i;:::-;28051:35;28057:7;28066:4;;28051:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28080:4:0::1;::::0;-1:-1:-1;28051:5:0::1;::::0;-1:-1:-1;;28051:35:0:i:1;:::-;28103:4;-1:-1:-1::0;;;;;28097:20:0::1;;28118:7;28143:1;28126:7;:14;:18;28118:27;;;;;;;;;;;;;;28097:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28097:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28097:49:0;;;;28157:63;28188:2;28192:7;28217:1;28200:7;:14;:18;28192:27;;;;;;;;;;;;;;28157:30;:63::i;:::-;27374:854:::0;;;;;;;;;:::o;33892:254::-;34036:21;34082:56;34113:7;34122:9;34133:4;34082:30;:56::i;:::-;34075:63;;33892:254;;;;;:::o;20860:679::-;21166:12;21180;21205;21220:50;21246:7;21255:6;21263;21220:25;:50::i;:::-;21205:65;;21281:10;21294;:33;;21318:9;21294:33;;;-1:-1:-1;;21294:33:0;21338:81;;;-1:-1:-1;;;21338:81:0;;21367:10;21338:81;;;;21387:4;21338:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21281:46;;-1:-1:-1;;;;;;21338:28:0;;;;;:81;;;;;-1:-1:-1;;21338:81:0;;;;;;;;-1:-1:-1;21338:28:0;:81;;;2:2:-1;;;;27:1;24;17:12;2:2;21338:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21338:81:0;;;;21451:80;21467:6;21475;21483:9;21494:10;21506;21518:2;21522:8;21451:15;:80::i;:::-;21430:101;;;;;;;;20860:679;;;;;;;;;;;;;;;;:::o;24577:631::-;24801:21;24782:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;24845:56:::1;24877:7;24886:8;24896:4;;24845:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24845:31:0::1;::::0;-1:-1:-1;;;24845:56:0:i:1;:::-;24835:66;;24951:12;24920:7;24945:1;24928:7;:14;:18;24920:27;;;;;;;;;;;;;;:43;;24912:100;;;;-1:-1:-1::0;;;24912:100:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25023:142;25069:4;;25074:1;25069:7;;;;;;25023:142;25176:24;25182:7;25191:4;;25176:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25197:2:0;;-1:-1:-1;25176:5:0::1;::::0;-1:-1:-1;;25176:24:0:i:1;26536:832::-:0;26750:21;26722:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;26822:4:0::1;26797:29;:4:::0;;-1:-1:-1;;26802:15:0;;26797:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;26797:21:0::1;-1:-1:-1::0;;;;;26797:29:0::1;;26789:72;;;::::0;;-1:-1:-1;;;26789:72:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26789:72:0;;;;;;;;;;;;;::::1;;26882:56;26913:7;26922:9;26933:4;;26882:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26882:30:0::1;::::0;-1:-1:-1;;;26882:56:0:i:1;:::-;26872:66;;26971:11;26957:7;26965:1;26957:10;;;;;;;;;;;;;;:25;;26949:78;;;;-1:-1:-1::0;;;26949:78:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23001:720:::0;23319:14;23346:12;23361:47;23387:7;23396:5;23403:4;23361:25;:47::i;:::-;23346:62;;23419:10;23432;:33;;23456:9;23432:33;;;-1:-1:-1;;23432:33:0;23476:81;;;-1:-1:-1;;;23476:81:0;;23505:10;23476:81;;;;23525:4;23476:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23419:46;;-1:-1:-1;;;;;;23476:28:0;;;;;:81;;;;;-1:-1:-1;;23476:81:0;;;;;;;;-1:-1:-1;23476:28:0;:81;;;2:2:-1;;;;27:1;24;17:12;2:2;23476:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23476:81:0;;;;23580:133;23642:5;23649:9;23660:14;23676:12;23690:2;23694:8;23580:47;:133::i;:::-;23568:145;23001:720;-1:-1:-1;;;;;;;;;;;;;23001:720:0:o;30421:716::-;30655:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;30676:140:::1;30722:4;;30727:1;30722:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30722:7:0::1;30731:10;30743:52;30769:7;30778:4;;30783:1;30778:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30778:7:0::1;30787:4;;30792:1;30787:7;;;;;;30743:52;30797:8;30676:31;:140::i;:::-;30827:18;30855:4:::0;;-1:-1:-1;;30860:15:0;;30855:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30855:21:0::1;-1:-1:-1::0;;;;;30848:39:0::1;;30888:2;30848:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;30848:43:0::1;-1:-1:-1::0;;;;;30848:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30848:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30848:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30848:43:0;30902:44:::1;::::0;;30848:43:::1;30902:44:::0;;::::1;::::0;;;;;;;;;;;30848:43;;-1:-1:-1;30902:44:0::1;::::0;;;30937:4;;;;;;30902:44;::::1;::::0;30937:4;;30902:44;30937:4;30902:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30943:2:0;;-1:-1:-1;30902:34:0::1;::::0;-1:-1:-1;;30902:44:0:i:1;:::-;31045:12:::0;30979:62:::1;31027:13:::0;30986:4;;-1:-1:-1;;30991:15:0;;30986:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30986:21:0::1;-1:-1:-1::0;;;;;30979:39:0::1;;31019:2;30979:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;30979:43:0::1;-1:-1:-1::0;;;;;30979:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30979:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30979:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30979:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;30957:172;;;;-1:-1:-1::0;;;30957:172:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15832:1;30421:716:::0;;;;;;;:::o;32002:846::-;32269:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32328:4:0::1;32303:29;:4:::0;;-1:-1:-1;;32308:15:0;;32303:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32303:21:0::1;-1:-1:-1::0;;;;;32303:29:0::1;;32295:72;;;::::0;;-1:-1:-1;;;32295:72:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32295:72:0;;;;;;;;;;;;;::::1;;32378:140;32424:4;;32429:1;32424:7;;;;;;32378:140;32529:55;32564:4;;32529:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32578:4:0::1;::::0;-1:-1:-1;32529:34:0::1;::::0;-1:-1:-1;;32529:55:0:i:1;:::-;32612:37;::::0;;-1:-1:-1;;;32612:37:0;;32643:4:::1;32612:37;::::0;::::1;::::0;;;32595:14:::1;::::0;-1:-1:-1;;;;;32619:4:0::1;32612:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;32612:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32612:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32612:37:0;;-1:-1:-1;32668:25:0;;::::1;;32660:82;;;;-1:-1:-1::0;;;32660:82:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32759:4;-1:-1:-1::0;;;;;32753:20:0::1;;32774:9;32753:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32753:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32753:31:0;;;;32795:45;32826:2;32830:9;32795:30;:45::i;25829:701::-:0;26045:21;26017:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;26103:4:::1;-1:-1:-1::0;;;;;26092:15:0::1;:4;;26097:1;26092:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26092:7:0::1;-1:-1:-1::0;;;;;26092:15:0::1;;26084:58;;;::::0;;-1:-1:-1;;;26084:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26084:58:0;;;;;;;;;;;;;::::1;;26163:57;26195:7;26204:9;26215:4;;26163:57;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26163:31:0::1;::::0;-1:-1:-1;;;26163:57:0:i:1;:::-;26153:67;;26270:12;26239:7;26264:1;26247:7;:14;:18;26239:27;;;;;;;;;;;;;;:43;;26231:100;;;;-1:-1:-1::0;;;26231:100:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26348:4;-1:-1:-1::0;;;;;26342:19:0::1;;26369:7;26377:1;26369:10;;;;;;;;;;;;;;26342:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26342:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26342:40:0;;;;;26406:4;-1:-1:-1::0;;;;;26400:20:0::1;;26421:52;26447:7;26456:4;;26461:1;26456:7;;;;;;26421:52;26475:7;26483:1;26475:10;;;;;;;;;;;;;;26400:86;;;;;;;;;;;;;-1:-1:-1::0;;;;;26400:86:0::1;-1:-1:-1::0;;;;;26400:86:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26400:86:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26400:86:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26400:86:0;26393:94:::1;;;;26498:24;26504:7;26513:4;;26498:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26519:2:0;;-1:-1:-1;26498:5:0::1;::::0;-1:-1:-1;;26498:24:0:i:1;:::-;25829:701:::0;;;;;;;;:::o;33360:262::-;33513:13;33551:63;33581:9;33592;33603:10;33551:29;:63::i;25214:609::-;25438:21;25419:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;25482:56:::1;25513:7;25522:9;25533:4;;25482:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25482:30:0::1;::::0;-1:-1:-1;;;25482:56:0:i:1;:::-;25472:66;;25571:11;25557:7;25565:1;25557:10;;;;;;;;;;;;;;:25;;25549:78;;;;-1:-1:-1::0;;;25549:78:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15667:38:::0;;;:::o;32892:189::-;32989:12;33021:52;33045:7;33054:8;33064;33021:23;:52::i;22295:700::-;22561:14;22542:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;22604:196:::1;22634:5;22654:4;22673:9;22697:14;22726:12;22761:4;22781:8;22604:15;:196::i;:::-;22850:38;::::0;;-1:-1:-1;;;22850:38:0;;22882:4:::1;22850:38;::::0;::::1;::::0;;;22588:212;;-1:-1:-1;22811:78:0::1;::::0;-1:-1:-1;22839:5:0;;22846:2;;-1:-1:-1;;;;;22850: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;22850:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22850:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22850:38:0;22811:27:::1;:78::i;:::-;22906:4;-1:-1:-1::0;;;;;22900:20:0::1;;22921:9;22900:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22900:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22900:31:0;;;;22942:45;22973:2;22977:9;22942:30;:45::i;31143:853::-:0;31403:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;31448:4:::1;-1:-1:-1::0;;;;;31437:15:0::1;:4;;31442:1;31437:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31437:7:0::1;-1:-1:-1::0;;;;;31437:15:0::1;;31429:58;;;::::0;;-1:-1:-1;;;31429:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31429:58:0;;;;;;;;;;;;;::::1;;31498:13;31514:9;31498:25;;31540:4;-1:-1:-1::0;;;;;31534:19:0::1;;31561:8;31534:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31534:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31534:38:0;;;;;31596:4;-1:-1:-1::0;;;;;31590:20:0::1;;31611:52;31637:7;31646:4;;31651:1;31646:7;;;;;;31611:52;31665:8;31590:84;;;;;;;;;;;;;-1:-1:-1::0;;;;;31590:84:0::1;-1:-1:-1::0;;;;;31590:84:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31590:84:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31590:84:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31590:84:0;31583:92:::1;;;;31686:18;31714:4:::0;;-1:-1:-1;;31719:15:0;;31714:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31714:21:0::1;-1:-1:-1::0;;;;;31707:39:0::1;;31747:2;31707:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31707:43:0::1;-1:-1:-1::0;;;;;31707:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31707:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31707:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31707:43:0;31761:44:::1;::::0;;31707:43:::1;31761:44:::0;;::::1;::::0;;;;;;;;;;;31707:43;;-1:-1:-1;31761:44:0::1;::::0;;;31796:4;;;;;;31761:44;::::1;::::0;31796:4;;31761:44;31796:4;31761:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31802:2:0;;-1:-1:-1;31761:34:0::1;::::0;-1:-1:-1;;31761:44:0:i:1;:::-;31904:12:::0;31838:62:::1;31886:13:::0;31845:4;;-1:-1:-1;;31850:15:0;;31845:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31845:21:0::1;-1:-1:-1::0;;;;;31838:39:0::1;;31878:2;31838:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31838:43:0::1;-1:-1:-1::0;;;;;31838:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;19304:871:0::0;19558:12;19572;19539:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;19597:12:::1;19612:50;19638:7;19647:6;19655;19612:25;:50::i;:::-;19673:63;::::0;;-1:-1:-1;;;19673:63:0;;19708:10:::1;19673:63;::::0;::::1;::::0;-1:-1:-1;;;;;19673:34:0;::::1;:63:::0;;;;;;;;;;;;;;19597:65;;-1:-1:-1;19673:34:0;;::::1;::::0;:63;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;19673:34:0;:63;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19673:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19673:63:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;19804:30:0::1;::::0;;-1:-1:-1;;;19804:30:0;;-1:-1:-1;;;;;19804:30:0;;::::1;;::::0;::::1;::::0;;;19774:12:::1;::::0;;;19804:26;;::::1;::::0;::::1;::::0;:30;;;;;;;;;;;19774:12;19804:26;:30;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19804:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19804:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19804:30:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;19804:30:0;-1:-1:-1;19846:14:0::1;19865:44;19894:6:::0;19902;19865:28:::1;:44::i;:::-;19845:64;;;19951:6;-1:-1:-1::0;;;;;19941:16:0::1;:6;-1:-1:-1::0;;;;;19941:16:0::1;;:58;;19982:7;19991;19941:58;;;19961:7;19970;19941:58;19920:79:::0;;-1:-1:-1;19920:79:0;-1:-1:-1;20018:21:0;;::::1;;20010:73;;;;-1:-1:-1::0;;;20010:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20113:10;20102:7;:21;;20094:73;;;;-1:-1:-1::0;;;20094:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15832:1;;;;19304:871:::0;;;;;;;;;;;:::o;15619:41::-;;;:::o;33630:254::-;33774:21;33820:56;33852:7;33861:8;33871:4;33820:31;:56::i;21545:671::-;21834:16;21852:14;21879:12;21894:47;21920:7;21929:5;21936:4;21894:25;:47::i;:::-;21879:62;;21952:10;21965;:33;;21989:9;21965:33;;;-1:-1:-1;;21965:33:0;22009:81;;;-1:-1:-1;;;22009:81:0;;22038:10;22009:81;;;;22058:4;22009:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21952:46;;-1:-1:-1;;;;;;22009:28:0;;;;;:81;;;;;-1:-1:-1;;22009:81:0;;;;;;;;-1:-1:-1;22009:28:0;:81;;;2:2:-1;;;;27:1;24;17:12;2:2;22009:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22009:81:0;;;;22128:80;22147:5;22154:9;22165:14;22181:12;22195:2;22199:8;22128:18;:80::i;:::-;22101:107;;;;-1:-1:-1;21545:671:0;-1:-1:-1;;;;;;;;;;;;;21545:671:0:o;17539:740::-;17827:12;17841;17855:14;17808:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;17903:85:::1;17917:6;17925;17933:14;17949;17965:10;17977;17903:13;:85::i;:::-;17882:106:::0;;-1:-1:-1;17882:106:0;-1:-1:-1;17999:12:0::1;18014:50;18040:7;18049:6:::0;18057;18014:25:::1;:50::i;:::-;17999:65;;18075:66;18107:6;18115:10;18127:4;18133:7;18075:31;:66::i;:::-;18152;18184:6;18192:10;18204:4;18210:7;18152:31;:66::i;:::-;18257:4;-1:-1:-1::0;;;;;18241:26:0::1;;18268:2;18241:30;;;;;;;;;;;;;-1:-1:-1::0;;;;;18241:30:0::1;-1:-1:-1::0;;;;;18241:30:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18241:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18241:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18241:30:0;17539:740;;;;-1:-1:-1;18241:30:0;;-1:-1:-1;17539:740:0;;-1:-1:-1;;;;;;;;;17539:740:0:o;18285:976::-;18538:16;18556:14;18572;18519:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;18626:176:::1;18654:5;18674:4;18693:18;18726:9;18750:14;18779:12;18626:13;:176::i;:::-;18599:203:::0;;-1:-1:-1;18599:203:0;-1:-1:-1;18813:12:0::1;18828:47;18854:7;18863:5:::0;18870:4:::1;18828:25;:47::i;:::-;18813:62;;18886:69;18918:5;18925:10;18937:4;18943:11;18886:31;:69::i;:::-;18972:4;-1:-1:-1::0;;;;;18966:19:0::1;;18993:9;18966:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18966:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18966:39:0;;;;;19029:4;-1:-1:-1::0;;;;;19023:20:0::1;;19044:4;19050:9;19023:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;19023:37:0::1;-1:-1:-1::0;;;;;19023:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19023:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19023:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19023:37:0;19016:45:::1;;;;19100:4;-1:-1:-1::0;;;;;19084:26:0::1;;19111:2;19084:30;;;;;;;;;;;;;-1:-1:-1::0;;;;;19084:30:0::1;-1:-1:-1::0;;;;;19084:30:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19084:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19084:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19084:30:0;;-1:-1:-1;19165:9:0::1;:21:::0;-1:-1:-1;19161:92:0::1;;;19188:65;19219:10;19243:9;19231;:21;19188:30;:65::i;:::-;15832:1;18285:976:::0;;;;;;;;;;;:::o;28234:814::-;28447:21;28419:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;28505:4:::1;-1:-1:-1::0;;;;;28494:15:0::1;:4;;28499:1;28494:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28494:7:0::1;-1:-1:-1::0;;;;;28494:15:0::1;;28486:58;;;::::0;;-1:-1:-1;;;28486:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28486:58:0;;;;;;;;;;;;;::::1;;28565:56;28596:7;28605:9;28616:4;;28565:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28565:30:0::1;::::0;-1:-1:-1;;;28565:56:0:i:1;:::-;28555:66;;28654:9;28640:7;28648:1;28640:10;;;;;;;;;;;;;;:23;;28632:76;;;;-1:-1:-1::0;;;28632:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28725:4;-1:-1:-1::0;;;;;28719:19:0::1;;28746:7;28754:1;28746:10;;;;;;;;;;;;;;28719:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28719:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28719:40:0;;;;;28783:4;-1:-1:-1::0;;;;;28777:20:0::1;;28798:52;28824:7;28833:4;;28838:1;28833:7;;;;;;28798:52;28852:7;28860:1;28852:10;;;;;;;;;;;;;;28777:86;;;;;;;;;;;;;-1:-1:-1::0;;;;;28777:86:0::1;-1:-1:-1::0;;;;;28777:86:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28777:86:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28777:86:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28777:86:0;28770:94:::1;;;;28875:24;28881:7;28890:4;;28875:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28896:2:0;;-1:-1:-1;28875:5:0::1;::::0;-1:-1:-1;;28875:24:0:i:1;:::-;28962:7;28970:1;28962:10;;;;;;;;;;;;;;28950:9;:22;28946:94;;;28974:66;29005:10;29029:7;29037:1;29029:10;;;;;;;;;;;;;;29017:9;:22;28974: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;12211:519::-;12304:14;12350:1;12339:8;:12;12331:69;;;;-1:-1:-1;;;12331:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12431:1;12419:9;:13;:31;;;;;12449:1;12436:10;:14;12419:31;12411:85;;;;-1:-1:-1;;;12411:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12507:20;12530:17;:8;12543:3;12530:17;:12;:17;:::i;:::-;12507:40;-1:-1:-1;12558:14:0;12575:31;12507:40;12595:10;12575:31;:19;:31;:::i;:::-;12558:48;-1:-1:-1;12617:16:0;12636:40;12660:15;12636:19;:9;12650:4;12636:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;12617:59;;12711:11;12699:9;:23;;;;;;;12211:519;-1:-1:-1;;;;;;;12211:519:0:o;13407:512::-;13508:21;13565:1;13550:4;:11;:16;;13542:60;;;;;-1:-1:-1;;;13542:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13634:4;:11;13623:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13623:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;13623:23:0;;13613:33;;13670:8;13657:7;13665:1;13657:10;;;;;;;;;;;;;:21;;;;;13694:6;13689:223;13720:1;13706:4;:11;:15;13702:1;:19;13689:223;;;13744:14;13760:15;13779:42;13791:7;13800:4;13805:1;13800:7;;;;;;;;;;;;;;13809:4;13814:1;13818;13814:5;13809:11;;;;;;;;;;;;;;13779;:42::i;:::-;13743:78;;;;13853:47;13866:7;13874:1;13866:10;;;;;;;;;;;;;;13878:9;13889:10;13853:12;:47::i;:::-;13836:7;13844:1;13848;13844:5;13836:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;13723:3:0;;13689:223;;;;13407:512;;;;;:::o;10682:478::-;10771:12;10797:14;10813;10831:26;10842:6;10850;10831:10;:26::i;:::-;10995:32;;;-1:-1:-1;;10995:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;10995:32:0;;;;;10985:43;;;;;;-1:-1:-1;;;;;;10898:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;10898:251:0;;;;;;;10888:262;;;;;;;;;10682:478;-1:-1:-1;;;;;10682: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;23832:739::-;23939:6;23934:630;23965:1;23951:4;:11;:15;23947:1;:19;23934:630;;;23989:13;24004:14;24023:4;24028:1;24023:7;;;;;;;;;;;;;;24032:4;24037:1;24041;24037:5;24032:11;;;;;;;;;;;;;;23988:56;;;;24060:14;24079:43;24108:5;24115:6;24079:28;:43::i;:::-;24059:63;;;24137:14;24154:7;24162:1;24166;24162:5;24154:14;;;;;;;;;;;;;;24137:31;;24184:15;24201;24229:6;-1:-1:-1;;;;;24220:15:0;:5;-1:-1:-1;;;;;24220:15:0;;:61;;24262:9;24278:1;24220:61;;;24244:1;24248:9;24220:61;24183:98;;;;24296:10;24327:1;24313:4;:11;:15;24309:1;:19;:83;;24389:3;24309:83;;;24331:55;24357:7;24366:6;24374:4;24379:1;24383;24379:5;24374:11;;;;;;;;;;;;;;24331:25;:55::i;:::-;24296:96;;24423:49;24449:7;24458:5;24465:6;24423:25;:49::i;:::-;-1:-1:-1;;;;;24407:71:0;;24497:10;24509;24521:2;24535:1;24525:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;24525:12:0;87:42:-1;143:17;;-1:-1;24525:12:0;;24407:145;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24407:145:0;-1:-1:-1;;;;;24407:145:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;24407:145:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24407:145:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;23968:3:0;;;;;-1:-1:-1;23934:630:0;;-1:-1:-1;;;;;;;;23934:630:0;;;23832:739;;;:::o;14000:533::-;14101:21;14158:1;14143:4;:11;:16;;14135:60;;;;;-1:-1:-1;;;14135:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14227:4;:11;14216:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14216:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14216:23:0;;14206:33;;14280:9;14250:7;14275:1;14258:7;:14;:18;14250:27;;;;;;;;;;;;;;;;;:39;14314:11;;-1:-1:-1;;14314:15:0;14300:226;14331:5;;14300:226;;14359:14;14375:15;14394:42;14406:7;14415:4;14424:1;14420;:5;14415:11;;;;;;;;;;;;;;14428:4;14433:1;14428:7;;;;;;;14394:42;14358:78;;;;14468:46;14480:7;14488:1;14480:10;;;;;;;;;;;;;;14492:9;14503:10;14468:11;:46::i;:::-;14451:7;14463:1;14459;:5;14451:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;14338:3:0;14300:226;;29195:1220;29308:6;29303:1105;29334:1;29320:4;:11;:15;29316:1;:19;29303:1105;;;29358:13;29373:14;29392:4;29397:1;29392:7;;;;;;;;;;;;;;29401:4;29406:1;29410;29406:5;29401:11;;;;;;;;;;;;;;29357:56;;;;29429:14;29448:43;29477:5;29484:6;29448:28;:43::i;:::-;29428:63;;;29506:20;29545:49;29571:7;29580:5;29587:6;29545:25;:49::i;:::-;29506:89;;29610:16;29641:17;29729:13;29744;29762:4;-1:-1:-1;;;;;29762:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29762:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29762:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29762:18:0;;;;;;;-1:-1:-1;;;;;29728:52:0;;;;-1:-1:-1;29728:52:0;;-1:-1:-1;29796:17:0;;-1:-1:-1;;;;;29837:15:0;;;;;;;:61;;29879:8;29889;29837:61;;;29856:8;29866;29837:61;29795:103;;;;29927:56;29970:12;29934:5;-1:-1:-1;;;;;29927:23:0;;29959:4;29927:38;;;;;;;;;;;;;-1:-1:-1;;;;;29927:38:0;-1:-1:-1;;;;;29927:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;29927:56:0;29913:70;;30013:72;30044:11;30057:12;30071:13;30013:30;:72::i;:::-;29998:87;;29303:1105;;;;30116:15;30133;30161:6;-1:-1:-1;;;;;30152:15:0;:5;-1:-1:-1;;;;;30152:15:0;;:67;;30197:12;30216:1;30152:67;;;30176:1;30180:12;30152:67;30115:104;;;;30234:10;30265:1;30251:4;:11;:15;30247:1;:19;:83;;30327:3;30247:83;;;30269:55;30295:7;30304:6;30312:4;30317:1;30321;30317:5;30312:11;;;;;;;30269:55;30383:12;;;30393:1;30383:12;;;;;;;;;;-1:-1:-1;;;30345:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;30345:51:0;;;;;;;;;;;;;;;;;;;;;;30234:96;;-1:-1:-1;30345:9:0;;;;;;30355:10;;30367;;30234:96;;30383:12;;30345:51;;;;;;;;30383:12;;30345:51;;;;30383: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;30345:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30345:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29337:3:0;;;;;-1:-1:-1;29303:1105:0;;-1:-1:-1;;;;;;;;;;29303:1105:0;9787:129;9871:5;;;9866:16;;;;9858:50;;;;;-1:-1:-1;;;9858:50:0;;;;;;;;;;;;-1:-1:-1;;;9858:50:0;;;;;;;;;;;;;;12851:474;12944:13;12990:1;12978:9;:13;12970:71;;;;-1:-1:-1;;;12970:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13072:1;13060:9;:13;:31;;;;;13090:1;13077:10;:14;13060:31;13052:85;;;;-1:-1:-1;;;13052:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13148:14;13165:34;13194:4;13165:24;:9;13179;13165:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;13148:51;-1:-1:-1;13210:16:0;13229:34;13259:3;13229:25;:10;13244:9;13229:25;:14;:25;:::i;:34::-;13210:53;;13285:32;13315:1;13298:11;13286:9;:23;;;;;;;13285:32;:29;:32;:::i;:::-;13274:43;12851:474;-1:-1:-1;;;;;;12851:474:0:o;11766:323::-;11848:12;11891:1;11881:7;:11;11873:62;;;;-1:-1:-1;;;11873:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11965:1;11954:8;:12;:28;;;;;11981:1;11970:8;:12;11954:28;11946:82;;;;-1:-1:-1;;;11946:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12073:8;12049:21;:7;12061:8;12049:21;:11;:21;:::i;:::-;:32;;;;;;;11766:323;-1:-1:-1;;;;11766:323:0:o;10239:351::-;10314:14;10330;10375:6;-1:-1:-1;;;;;10365:16:0;:6;-1:-1:-1;;;;;10365:16:0;;;10357:67;;;;-1:-1:-1;;;10357:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10463:6;-1:-1:-1;;;;;10454:15:0;:6;-1:-1:-1;;;;;10454:15:0;;:53;;10492:6;10500;10454:53;;;10473:6;10481;10454:53;10435:72;;-1:-1:-1;10435:72:0;-1:-1:-1;;;;;;10526:20:0;;10518:64;;;;;-1:-1:-1;;;10518:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10239:351;;;;;:::o;16136:1397::-;16449:51;;;-1:-1:-1;;;16449:51:0;;-1:-1:-1;;;;;16449:51:0;;;;;;;;;;;;;;;;16354:12;;;;;;16468:7;16449:35;;;;;;:51;;;;;;;;;;;;;;;:35;:51;;;2:2:-1;;;;27:1;24;17:12;2:2;16449:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16449:51:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16449:51:0;-1:-1:-1;;;;;16449:65:0;;16445:152;;;16531:54;;;-1:-1:-1;;;16531:54:0;;-1:-1:-1;;;;;16531:54:0;;;;;;;;;;;;;;;;16550:7;16531:38;;;;;;:54;;;;;;;;;;;;;;;-1:-1:-1;16531:38:0;:54;;;2:2:-1;;;;27:1;24;17:12;2:2;16531:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16531:54:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;16445:152:0;16608:13;16623;16640:54;16670:7;16679:6;16687;16640:29;:54::i;:::-;16607:87;;;;16709:8;16721:1;16709:13;:30;;;;-1:-1:-1;16726:13:0;;16709:30;16705:821;;;16778:14;;-1:-1:-1;16794:14:0;;-1:-1:-1;16705:821:0;;;16842:19;16864:59;16888:14;16904:8;16914;16864:23;:59::i;:::-;16842:81;;16960:14;16942;:32;16938:577;;17021:10;17003:14;:28;;16995:80;;;;-1:-1:-1;;;16995:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17116:14;;-1:-1:-1;17132:14:0;-1:-1:-1;17132:14:0;16938:577;;;17188:19;17210:59;17234:14;17250:8;17260;17210:23;:59::i;:::-;17188:81;;17313:14;17295;:32;;17288:40;;;;17373:10;17355:14;:28;;17347:80;;;;-1:-1:-1;;;17347:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17468:14;-1:-1:-1;17484:14:0;;-1:-1:-1;16938:577:0;16705:821;;16136:1397;;;;;;;;;;;:::o;9924:142::-;9976:6;10003;;;:30;;-1:-1:-1;;10018:5:0;;;10032:1;10027;10018:5;10027:1;10013:15;;;;;:20;10003:30;9995:63;;;;;-1:-1:-1;;;9995:63:0;;;;;;;;;;;;-1:-1:-1;;;9995:63:0;;;;;;;;;;;;;;9651:128;9735:5;;;9730:16;;;;9722:49;;;;;-1:-1:-1;;;9722:49:0;;;;;;;;;;;;-1:-1:-1;;;9722:49:0;;;;;;;;;;;;;;11218:435;11311:13;11326;11353:14;11372:26;11383:6;11391;11372:10;:26::i;:::-;11352:46;;;11409:32;11417:7;11426:6;11434;11409:7;:32::i;:::-;;11453:13;11468;11502:32;11510:7;11519:6;11527;11502:7;:32::i;:::-;-1:-1:-1;;;;;11486:61:0;;:63;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11486:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11486:63:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11486:63:0;;;;;;;-1:-1:-1;;;;;11452:97:0;;;;-1:-1:-1;11452:97:0;;-1:-1:-1;;;;;;11583:16:0;;;;;;;:62;;11626:8;11636;11583:62;;;11603:8;11613;11583:62;11560:85;;;;-1:-1:-1;11218:435:0;-1:-1:-1;;;;;;;11218:435:0:o

Swarm Source

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