Contract 0x145863eb42cf62847a6ca784e6416c1682b1b2ae 6

Contract Overview

VVS Finance: Router
Balance:
0 CRO

CRO Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xf71166197e458fccdd073d20f390f447a3a6ae85982e84b8e3124898e578c951Add Liquidity ET...34966132022-07-02 2:08:251 min ago0x1ca30c3e968b09fcd656200ff8a393514cf3a534 IN  VVS Finance: Router14.50990067573322 CRO1.0871731381770
0xa032be041c9caab298de155feb623d628f92e3dd771e8a6806f27d61719c4ac8Swap Exact ETH F...34966082022-07-02 2:07:561 min ago0x7ffa8901be4777d9fd78f9a00d98dfcdbd833671 IN  VVS Finance: Router700 CRO0.675725 5,000
0xfa5d5cb21bd48a360a53a17b5030ef9fcaedbf2cafb237813ecac9b7db95c4d3Swap Exact Token...34966062022-07-02 2:07:451 min ago0x295b60a5f013051dcaa8f848d72c19c7fdd8fafe IN  VVS Finance: Router0 CRO1.1515750
0xc15e59a5f4a0ceff44375c3e7cd5b925617159903cb5cb17ecca724e2e6b238eSwap Exact Token...34966052022-07-02 2:07:391 min ago0xcf10c6a8275c047b21ea267c01e38597c5d6170a IN  VVS Finance: Router0 CRO0.5642529233150
0xce118e7cec045916fc53b1fa5c9f4a1ee14d97bd10b250705bacc727ca50c313Swap Exact Token...34966042022-07-02 2:07:342 mins ago0xd6862ed3299bccb41039e4f8c5f7802bc121ac8b IN  VVS Finance: Router0 CRO0.7638831356970
0x614b9dcca996c0f1d8c1d3790c53b74a526749c7d67891e3e4f1482ad550883fSwap Exact Token...34966012022-07-02 2:07:172 mins ago0x57c6e092363742a55d1040ec8935f252bf0c2252 IN  VVS Finance: Router0 CRO1.4601858054810
0x09d83284e5c53f6d71ac1c438ed01eefb086b3a59207b4a6c56cb31373a26550Swap Exact Token...34965922022-07-02 2:06:263 mins ago0xa44bd9729c971b193ce873873629f4f3741badf6 IN  VVS Finance: Router0 CRO0.6065850
0x1812ea3e509463a231f550de7004a5e28306bd52a316c85c5f968453bb1a8374Swap Exact Token...34965882022-07-02 2:06:033 mins ago0xa353b4f86ec60780c5f6737e675050d65bf07f6c IN  VVS Finance: Router0 CRO0.7521087084390
0x343376fd79e9e8acdb8c2d97f88d9c525fdde30177f2932dc5a571331f670273Swap Exact Token...34965862022-07-02 2:05:523 mins ago0xb3c506d60d45abb917ee10a947749a098b497d3d IN  VVS Finance: Router0 CRO0.6629950
0x3af0101d460492c539c12d69d56f34f8d7cf742f471ff86a6efc3ac5f3afe5e9Swap Exact Token...34965862022-07-02 2:05:523 mins ago0xa44bd9729c971b193ce873873629f4f3741badf6 IN  VVS Finance: Router0 CRO1.0012750
0xeb4525e4be9c1db9af4856983bcd5452668a46ad51004020c49afa4c931fde0eSwap Exact Token...34965852022-07-02 2:05:463 mins ago0x92fd19b9f82918146c21d6f5cc1a5e16accc55fe IN  VVS Finance: Router0 CRO0.6945034821770
0xb026c50d4941d6dea4eacd35cf498e6662b295fde099e4a83e05d90f1a5559b6Swap Exact Token...34965842022-07-02 2:05:403 mins ago0xb3c506d60d45abb917ee10a947749a098b497d3d IN  VVS Finance: Router0 CRO0.6632750
0x5171f1b9124a8569f3cffc4c6748f14b54e2b01e9cb7e85b1fc4aa486f89ece9Swap Exact Token...34965832022-07-02 2:05:354 mins ago0x6614d26064d762922c7bc7a00337713d5169ae7c IN  VVS Finance: Router0 CRO0.6630550
0x4f4c74394dc1a639d385b8d65fbcfea84fb83b9a578327ca37cb4f58ed2a2210Add Liquidity34965832022-07-02 2:05:354 mins ago0x359d45b5e6a0cf93a6af1f47e3a93c5b84010e28 IN  VVS Finance: Router0 CRO1.1210950
0x5d3fd399c7ecd01743bbf0b686c1e975a21c426a73f78753d6ad016914592689Swap Exact Token...34965822022-07-02 2:05:294 mins ago0x6614d26064d762922c7bc7a00337713d5169ae7c IN  VVS Finance: Router0 CRO0.6632750
0x753dd14492d9c18c23b06f465e84da5d2fed66a749726828fe6a08d42a80ddb8Swap Exact Token...34965792022-07-02 2:05:124 mins ago0xa44bd9729c971b193ce873873629f4f3741badf6 IN  VVS Finance: Router0 CRO0.7400650
0xf5295c805f0b2ba0eb3f9492ca661613634a09f77951750000ac09dea585cfefSwap Exact ETH F...34965772022-07-02 2:05:004 mins ago0x4c127396490fee102d075e6a26987c77ad691ec8 IN  VVS Finance: Router90.74652 CRO0.7465570215110
0x629acaaf2f7749d0664fbc19e01c2a13fc073831b7822f7811e891ad4c3ee400Add Liquidity ET...34965702022-07-02 2:04:205 mins ago0xa353b4f86ec60780c5f6737e675050d65bf07f6c IN  VVS Finance: Router80 CRO1.1662104961170
0x2c5d4c2fb85d33d4a4b96997df93e5ecf64d3e18c59e1090a1484bfd1fcbaf99Swap Exact Token...34965652022-07-02 2:03:525 mins ago0xa106be28831a268335ef01fbb3559125843a7f6d IN  VVS Finance: Router0 CRO0.6943843064030
0x6e70c091a6d70b91c8dd9434f53766dbbf283e6d9dc1325aabcaae1ee202a24fSwap Exact Token...34965562022-07-02 2:03:016 mins ago0x3a111bbcc49a6c58a59feb54d6ed9820d27cf47d IN  VVS Finance: Router0 CRO0.6386877049030
0x92cb7e1fa3a451eb7da0ec88547f8a511fb920fc0489f238472b9971a9ab1cc7Swap Exact ETH F...34965532022-07-02 2:02:446 mins ago0x6eb71f19e2d48f47b302cfd005fda1cae24ed170 IN  VVS Finance: Router22.9555 CRO0.6717647625140
0x146c7bf21403a3171da5b60f148912970045916c34f74fd960242f3770f22637Swap Exact Token...34965512022-07-02 2:02:337 mins ago0x604373f670a2b164d33ee753ddc5752372a5e2df IN  VVS Finance: Router0 CRO1.1791135922460
0xfe8e1a58d90ea8c19f1c893b07d6ddcbc20ec868de446ca47b4da161537bb524Swap Exact Token...34965512022-07-02 2:02:337 mins ago0x01e7d7edb9c95c2cfb1f2ec836f3a81fda2751a2 IN  VVS Finance: Router0 CRO1.093460
0x00cfb0c68aa4fa1483cc53e624b1dedebcaba6f5268b27801e41e66c93212fc1Add Liquidity34965202022-07-02 1:59:3410 mins ago0x0e5c0f6ef93ada440f7f69e1f7a69e0d9cb00e4c IN  VVS Finance: Router0 CRO0.8995269265010
0xb95be81ac719d8cac26818e1e658c69eab1747f1baad319b469e94a422626335Swap Exact Token...34965182022-07-02 1:59:2310 mins ago0x3936530e2f41df21889067ae35aa81ffbd68aeef IN  VVS Finance: Router0 CRO0.16348183217 5,020.015727162
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xf71166197e458fccdd073d20f390f447a3a6ae85982e84b8e3124898e578c95134966132022-07-02 2:08:251 min ago VVS Finance: Router0x1ca30c3e968b09fcd656200ff8a393514cf3a5341 basecro
0xf71166197e458fccdd073d20f390f447a3a6ae85982e84b8e3124898e578c95134966132022-07-02 2:08:251 min ago VVS Finance: Router Cronos: WCRO Token14.509900675733220098 CRO
0xa032be041c9caab298de155feb623d628f92e3dd771e8a6806f27d61719c4ac834966082022-07-02 2:07:561 min ago VVS Finance: Router Cronos: WCRO Token700 CRO
0xce118e7cec045916fc53b1fa5c9f4a1ee14d97bd10b250705bacc727ca50c31334966042022-07-02 2:07:342 mins ago VVS Finance: Router0xd6862ed3299bccb41039e4f8c5f7802bc121ac8b0.688846000190128798 CRO
0xce118e7cec045916fc53b1fa5c9f4a1ee14d97bd10b250705bacc727ca50c31334966042022-07-02 2:07:342 mins ago Cronos: WCRO Token VVS Finance: Router0.688846000190128798 CRO
0x1812ea3e509463a231f550de7004a5e28306bd52a316c85c5f968453bb1a837434965882022-07-02 2:06:033 mins ago VVS Finance: Router0xa353b4f86ec60780c5f6737e675050d65bf07f6c50.940894036722596018 CRO
0x1812ea3e509463a231f550de7004a5e28306bd52a316c85c5f968453bb1a837434965882022-07-02 2:06:033 mins ago Cronos: WCRO Token VVS Finance: Router50.940894036722596018 CRO
0x753dd14492d9c18c23b06f465e84da5d2fed66a749726828fe6a08d42a80ddb834965792022-07-02 2:05:124 mins ago VVS Finance: Router0xa44bd9729c971b193ce873873629f4f3741badf644.168702377089984921 CRO
0x753dd14492d9c18c23b06f465e84da5d2fed66a749726828fe6a08d42a80ddb834965792022-07-02 2:05:124 mins ago Cronos: WCRO Token VVS Finance: Router44.168702377089984921 CRO
0xf5295c805f0b2ba0eb3f9492ca661613634a09f77951750000ac09dea585cfef34965772022-07-02 2:05:004 mins ago VVS Finance: Router Cronos: WCRO Token90.74652 CRO
0x629acaaf2f7749d0664fbc19e01c2a13fc073831b7822f7811e891ad4c3ee40034965702022-07-02 2:04:205 mins ago VVS Finance: Router0xa353b4f86ec60780c5f6737e675050d65bf07f6c1 basecro
0x629acaaf2f7749d0664fbc19e01c2a13fc073831b7822f7811e891ad4c3ee40034965702022-07-02 2:04:205 mins ago VVS Finance: Router Cronos: WCRO Token79.999999999999999999 CRO
0x92cb7e1fa3a451eb7da0ec88547f8a511fb920fc0489f238472b9971a9ab1cc734965532022-07-02 2:02:446 mins ago VVS Finance: Router Cronos: WCRO Token22.9555 CRO
0xfe8e1a58d90ea8c19f1c893b07d6ddcbc20ec868de446ca47b4da161537bb52434965512022-07-02 2:02:337 mins ago VVS Finance: Router0x01e7d7edb9c95c2cfb1f2ec836f3a81fda2751a221.151049749394882873 CRO
0xfe8e1a58d90ea8c19f1c893b07d6ddcbc20ec868de446ca47b4da161537bb52434965512022-07-02 2:02:337 mins ago Cronos: WCRO Token VVS Finance: Router21.151049749394882873 CRO
0xf1529182f223a80d0eb7057a50b7bf9b74e87e58e04e5d01b66935e268f5d98c34965152022-07-02 1:59:0610 mins ago VVS Finance: Router0xfc77a4eae2ddfaa6f3b4790f5c3de8bdc4074002105.489099615073295385 CRO
0xf1529182f223a80d0eb7057a50b7bf9b74e87e58e04e5d01b66935e268f5d98c34965152022-07-02 1:59:0610 mins ago Cronos: WCRO Token VVS Finance: Router105.489099615073295385 CRO
0x51dbfe1ec732eac12e9c7fb0c8723fd6f3c27faadd7dff5da110ace3c3b7d32334965052022-07-02 1:58:0911 mins ago VVS Finance: Router Cronos: WCRO Token112.623553 CRO
0x24023287b26032f8662c7c58392557a199bdf0c751e66dc196c26121c18cfb3b34965032022-07-02 1:57:5811 mins ago VVS Finance: Router Cronos: WCRO Token112.623553 CRO
0xbe40646ca96d614c8896ea2bd129250eb100b39d951e8626ea5c27a23240c15934964992022-07-02 1:57:3512 mins ago VVS Finance: Router Cronos: WCRO Token396.77866 CRO
0xc9d201a21cbe9c0e59167d0de9dc334d27af6f9c264daebce5f1eaf7e5dec6e034964912022-07-02 1:56:5012 mins ago VVS Finance: Router Cronos: WCRO Token20 CRO
0x1a4668a2cdc99a53cbb636a2a609b379c8304b08a7e3cf4dad197e41bdc8d79a34964812022-07-02 1:55:5313 mins ago VVS Finance: Router Cronos: WCRO Token205 CRO
0x03b3bc9c33d5924bceb27a971d7c5b013492908f51c7489beea0059617dbe34e34964792022-07-02 1:55:4213 mins ago VVS Finance: Router0xf0fde84310fde9bf32df77a0b0ffec6f519f7edc56.766530120231976399 CRO
0x03b3bc9c33d5924bceb27a971d7c5b013492908f51c7489beea0059617dbe34e34964792022-07-02 1:55:4213 mins ago Cronos: WCRO Token VVS Finance: Router56.766530120231976399 CRO
0x1b198817d63c94c24855edb4704d268d753fdef27efdff07670f26910d1f21ae34964782022-07-02 1:55:3713 mins ago VVS Finance: Router0xf42f06cc66f18a8cf4da9e718fa5713cd36df10d19.180056001865904727 CRO
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
VVSRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-01-20
*/

// File vvs-swap-core/contracts/interfaces/IVVSFactory.sol

pragma solidity >=0.5.0;

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


// File @uniswap/lib/contracts/libraries/[email protected]

pragma solidity >=0.6.0;

// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
    function safeApprove(address token, address to, 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');
    }
}


// File contracts/interfaces/IVVSRouter01.sol

pragma solidity >=0.6.2;

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


// File contracts/interfaces/IVVSRouter02.sol

pragma solidity >=0.6.2;

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

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


// File vvs-swap-core/contracts/interfaces/IVVSPair.sol

pragma solidity >=0.5.0;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}


// File contracts/libraries/SafeMath.sol

pragma solidity =0.6.6;

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

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

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

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


// File contracts/libraries/VVSLibrary.sol

pragma solidity >=0.5.0;

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

    // fetches and sorts the reserves for a pair
    function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) {
        (address token0,) = sortTokens(tokenA, tokenB);
        (uint reserve0, uint reserve1,) = IVVSPair(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, 'VVSLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'VVSLibrary: 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, 'VVSLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'VVSLibrary: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(997);
        uint numerator = amountInWithFee.mul(reserveOut);
        uint denominator = reserveIn.mul(1000).add(amountInWithFee);
        amountOut = numerator / denominator;
    }

    // given an output amount of an asset and pair reserves, returns a required input amount of the other asset
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn) {
        require(amountOut > 0, 'VVSLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'VVSLibrary: INSUFFICIENT_LIQUIDITY');
        uint numerator = reserveIn.mul(amountOut).mul(1000);
        uint denominator = reserveOut.sub(amountOut).mul(997);
        amountIn = (numerator / denominator).add(1);
    }

    // performs chained getAmountOut calculations on any number of pairs
    function getAmountsOut(address factory, uint amountIn, address[] memory path) internal view returns (uint[] memory amounts) {
        require(path.length >= 2, 'VVSLibrary: 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, 'VVSLibrary: INVALID_PATH');
        amounts = new uint[](path.length);
        amounts[amounts.length - 1] = amountOut;
        for (uint i = path.length - 1; i > 0; i--) {
            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i]);
            amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut);
        }
    }
}


// File contracts/interfaces/IERC20.sol

pragma solidity >=0.5.0;

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

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

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


// File contracts/interfaces/IWETH.sol

pragma solidity >=0.5.0;

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


// File contracts/VVSRouter.sol

pragma solidity =0.6.6;







contract VVSRouter is IVVSRouter02 {
    using SafeMath for uint;

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

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

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

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

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

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

Contract ABI

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

60c060405234801561001057600080fd5b50604051620048df380380620048df8339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c61475a620001856000398061019f5280610d415280610d7c5280610e7a52806110a4528061143c52806115ae52806119835280611a895280611b3f5280611c145280611d665280611dee528061203a52806120bc528061216b528061223e52806122df5280612353528061289d5280612b1e5280612b745280612ba85280612c1c5280612dc35280612f125280612f9a525080610f145280610feb528061116a52806111a352806112e552806114d6528061158c52806117035280611cb35280611e205280611f8a528061238552806125e55280612822528061284b528061287b52806129ef5280612b525280612e625280612fcc52806138ce52806139115280613bf45280613d7a528061421052806142d75280614357525061475a6000f3fe60806040526004361061018f5760003560e01c80638803dbee116100d6578063c45a01551161007f578063e8e3370011610059578063e8e3370014610ba1578063f305d71914610c21578063fb3bdb4114610c67576101c8565b8063c45a015514610a62578063d06ca61f14610a77578063ded9382a14610b2e576101c8565b8063af2979eb116100b0578063af2979eb1461092c578063b6f9de951461097f578063baa2abde14610a05576101c8565b80638803dbee1461082d578063ad5c4648146108c5578063ad615dec146108f6576101c8565b80634a25d94a11610138578063791ac94711610112578063791ac947146106d95780637ff36ab51461077157806385f8c259146107f7576101c8565b80634a25d94a146105365780635b0d5984146105ce5780635c11d79514610641576101c8565b80631f00ca74116101695780631f00ca74146103695780632195995c1461042057806338ed17391461049e576101c8565b806302751cec146101cd578063054d50d41461023957806318cbafe514610281576101c8565b366101c857336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101c657fe5b005b600080fd5b3480156101d957600080fd5b50610220600480360360c08110156101f057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610ced565b6040805192835260208301919091528051918290030190f35b34801561024557600080fd5b5061026f6004803603606081101561025c57600080fd5b5080359060208101359060400135610e0e565b60408051918252519081900360200190f35b34801561028d57600080fd5b50610319600480360360a08110156102a457600080fd5b8135916020810135918101906060810160408201356401000000008111156102cb57600080fd5b8201836020820111156102dd57600080fd5b803590602001918460208302840111640100000000831117156102ff57600080fd5b91935091506001600160a01b038135169060200135610e23565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561035557818101518382015260200161033d565b505050509050019250505060405180910390f35b34801561037557600080fd5b506103196004803603604081101561038c57600080fd5b813591908101906040810160208201356401000000008111156103ae57600080fd5b8201836020820111156103c057600080fd5b803590602001918460208302840111640100000000831117156103e257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611163945050505050565b34801561042c57600080fd5b50610220600480360361016081101561044457600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611199565b3480156104aa57600080fd5b50610319600480360360a08110156104c157600080fd5b8135916020810135918101906060810160408201356401000000008111156104e857600080fd5b8201836020820111156104fa57600080fd5b8035906020019184602083028401116401000000008311171561051c57600080fd5b91935091506001600160a01b038135169060200135611293565b34801561054257600080fd5b50610319600480360360a081101561055957600080fd5b81359160208101359181019060608101604082013564010000000081111561058057600080fd5b82018360208201111561059257600080fd5b803590602001918460208302840111640100000000831117156105b457600080fd5b91935091506001600160a01b0381351690602001356113e5565b3480156105da57600080fd5b5061026f60048036036101408110156105f257600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611584565b34801561064d57600080fd5b506101c6600480360360a081101561066457600080fd5b81359160208101359181019060608101604082013564010000000081111561068b57600080fd5b82018360208201111561069d57600080fd5b803590602001918460208302840111640100000000831117156106bf57600080fd5b91935091506001600160a01b038135169060200135611692565b3480156106e557600080fd5b506101c6600480360360a08110156106fc57600080fd5b81359160208101359181019060608101604082013564010000000081111561072357600080fd5b82018360208201111561073557600080fd5b8035906020019184602083028401116401000000008311171561075757600080fd5b91935091506001600160a01b03813516906020013561192e565b6103196004803603608081101561078757600080fd5b813591908101906040810160208201356401000000008111156107a957600080fd5b8201836020820111156107bb57600080fd5b803590602001918460208302840111640100000000831117156107dd57600080fd5b91935091506001600160a01b038135169060200135611bc5565b34801561080357600080fd5b5061026f6004803603606081101561081a57600080fd5b5080359060208101359060400135611f2b565b34801561083957600080fd5b50610319600480360360a081101561085057600080fd5b81359160208101359181019060608101604082013564010000000081111561087757600080fd5b82018360208201111561088957600080fd5b803590602001918460208302840111640100000000831117156108ab57600080fd5b91935091506001600160a01b038135169060200135611f38565b3480156108d157600080fd5b506108da612038565b604080516001600160a01b039092168252519081900360200190f35b34801561090257600080fd5b5061026f6004803603606081101561091957600080fd5b508035906020810135906040013561205c565b34801561093857600080fd5b5061026f600480360360c081101561094f57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612069565b6101c66004803603608081101561099557600080fd5b813591908101906040810160208201356401000000008111156109b757600080fd5b8201836020820111156109c957600080fd5b803590602001918460208302840111640100000000831117156109eb57600080fd5b91935091506001600160a01b0381351690602001356121f1565b348015610a1157600080fd5b50610220600480360360e0811015610a2857600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612590565b348015610a6e57600080fd5b506108da612820565b348015610a8357600080fd5b5061031960048036036040811015610a9a57600080fd5b81359190810190604081016020820135640100000000811115610abc57600080fd5b820183602082011115610ace57600080fd5b80359060200191846020830284011164010000000083111715610af057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612844945050505050565b348015610b3a57600080fd5b506102206004803603610140811015610b5257600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612871565b348015610bad57600080fd5b50610c036004803603610100811015610bc557600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612985565b60408051938452602084019290925282820152519081900360600190f35b610c03600480360360c0811015610c3757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612ac8565b61031960048036036080811015610c7d57600080fd5b81359190810190604081016020820135640100000000811115610c9f57600080fd5b820183602082011115610cb157600080fd5b80359060200191846020830284011164010000000083111715610cd357600080fd5b91935091506001600160a01b038135169060200135612d74565b6000808242811015610d3b576040805162461bcd60e51b8152602060048201526012602482015271159594d49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b610d6a897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612590565b9093509150610d7a898685613109565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610de057600080fd5b505af1158015610df4573d6000803e3d6000fd5b50505050610e0285836132a1565b50965096945050505050565b6000610e1b848484613399565b949350505050565b60608142811015610e70576040805162461bcd60e51b8152602060048201526012602482015271159594d49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610eaa57fe5b905060200201356001600160a01b03166001600160a01b031614610f0f576040805162461bcd60e51b81526020600482015260176024820152760acaca6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b610f6d7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061348992505050565b91508682600184510381518110610f8057fe5b60200260200101511015610fc55760405162461bcd60e51b815260040180806020018281038252602581526020018061462b6025913960400191505060405180910390fd5b61106386866000818110610fd557fe5b905060200201356001600160a01b0316336110497f00000000000000000000000000000000000000000000000000000000000000008a8a600081811061101757fe5b905060200201356001600160a01b03168b8b600181811061103457fe5b905060200201356001600160a01b03166135d5565b8560008151811061105657fe5b60200260200101516136ad565b6110a28287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061381f915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836001855103815181106110e157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561111f57600080fd5b505af1158015611133573d6000803e3d6000fd5b50505050611158848360018551038151811061114b57fe5b60200260200101516132a1565b509695505050505050565b60606111907f00000000000000000000000000000000000000000000000000000000000000008484613a65565b90505b92915050565b60008060006111c97f00000000000000000000000000000000000000000000000000000000000000008f8f6135d5565b90506000876111d8578c6111dc565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b505050506112798f8f8f8f8f8f8f612590565b809450819550505050509b509b9950505050505050505050565b606081428110156112e0576040805162461bcd60e51b8152602060048201526012602482015271159594d49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b61133e7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061348992505050565b9150868260018451038151811061135157fe5b602002602001015110156113965760405162461bcd60e51b815260040180806020018281038252602581526020018061462b6025913960400191505060405180910390fd5b6113a686866000818110610fd557fe5b6111588287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061381f915050565b60608142811015611432576040805162461bcd60e51b8152602060048201526012602482015271159594d49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061146c57fe5b905060200201356001600160a01b03166001600160a01b0316146114d1576040805162461bcd60e51b81526020600482015260176024820152760acaca6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b61152f7f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613a6592505050565b9150868260008151811061153f57fe5b60200260200101511115610fc55760405162461bcd60e51b81526004018080602001828103825260218152602001806146e06021913960400191505060405180910390fd5b6000806115d27f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006135d5565b90506000866115e1578b6115e5565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561165b57600080fd5b505af115801561166f573d6000803e3d6000fd5b505050506116818d8d8d8d8d8d612069565b9d9c50505050505050505050505050565b80428110156116dd576040805162461bcd60e51b8152602060048201526012602482015271159594d49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b611752858560008181106116ed57fe5b905060200201356001600160a01b03163361174c7f00000000000000000000000000000000000000000000000000000000000000008989600081811061172f57fe5b905060200201356001600160a01b03168a8a600181811061103457fe5b8a6136ad565b60008585600019810181811061176457fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156117c957600080fd5b505afa1580156117dd573d6000803e3d6000fd5b505050506040513d60208110156117f357600080fd5b50516040805160208881028281018201909352888252929350611835929091899189918291850190849080828437600092019190915250889250613b9d915050565b866118e7828888600019810181811061184a57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156118af57600080fd5b505afa1580156118c3573d6000803e3d6000fd5b505050506040513d60208110156118d957600080fd5b50519063ffffffff613ec816565b10156119245760405162461bcd60e51b815260040180806020018281038252602581526020018061462b6025913960400191505060405180910390fd5b5050505050505050565b8042811015611979576040805162461bcd60e51b8152602060048201526012602482015271159594d49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016858560001981018181106119b357fe5b905060200201356001600160a01b03166001600160a01b031614611a18576040805162461bcd60e51b81526020600482015260176024820152760acaca6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b611a28858560008181106116ed57fe5b611a66858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613b9d915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611ad057600080fd5b505afa158015611ae4573d6000803e3d6000fd5b505050506040513d6020811015611afa57600080fd5b5051905086811015611b3d5760405162461bcd60e51b815260040180806020018281038252602581526020018061462b6025913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611ba357600080fd5b505af1158015611bb7573d6000803e3d6000fd5b5050505061192484826132a1565b60608142811015611c12576040805162461bcd60e51b8152602060048201526012602482015271159594d49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611c4957fe5b905060200201356001600160a01b03166001600160a01b031614611cae576040805162461bcd60e51b81526020600482015260176024820152760acaca6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b611d0c7f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061348992505050565b91508682600184510381518110611d1f57fe5b60200260200101511015611d645760405162461bcd60e51b815260040180806020018281038252602581526020018061462b6025913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611da057fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611dd357600080fd5b505af1158015611de7573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611e4c7f00000000000000000000000000000000000000000000000000000000000000008989600081811061172f57fe5b84600081518110611e5957fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611eb057600080fd5b505af1158015611ec4573d6000803e3d6000fd5b505050506040513d6020811015611eda57600080fd5b5051611ee257fe5b611f218287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061381f915050565b5095945050505050565b6000610e1b848484613f20565b60608142811015611f85576040805162461bcd60e51b8152602060048201526012602482015271159594d49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b611fe37f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613a6592505050565b91508682600081518110611ff357fe5b602002602001015111156113965760405162461bcd60e51b81526004018080602001828103825260218152602001806146e06021913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610e1b848484614010565b600081428110156120b6576040805162461bcd60e51b8152602060048201526012602482015271159594d49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6120e5887f00000000000000000000000000000000000000000000000000000000000000008989893089612590565b604080516370a0823160e01b8152306004820152905191945061216992508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561213857600080fd5b505afa15801561214c573d6000803e3d6000fd5b505050506040513d602081101561216257600080fd5b5051613109565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156121cf57600080fd5b505af11580156121e3573d6000803e3d6000fd5b5050505061115884836132a1565b804281101561223c576040805162461bcd60e51b8152602060048201526012602482015271159594d49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168585600081811061227357fe5b905060200201356001600160a01b03166001600160a01b0316146122d8576040805162461bcd60e51b81526020600482015260176024820152760acaca6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561233857600080fd5b505af115801561234c573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6123b17f00000000000000000000000000000000000000000000000000000000000000008989600081811061172f57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561240157600080fd5b505af1158015612415573d6000803e3d6000fd5b505050506040513d602081101561242b57600080fd5b505161243357fe5b60008686600019810181811061244557fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156124aa57600080fd5b505afa1580156124be573d6000803e3d6000fd5b505050506040513d60208110156124d457600080fd5b505160408051602089810282810182019093528982529293506125169290918a918a918291850190849080828437600092019190915250899250613b9d915050565b876118e7828989600019810181811061252b57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156118af57600080fd5b60008082428110156125de576040805162461bcd60e51b8152602060048201526012602482015271159594d49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b600061260b7f00000000000000000000000000000000000000000000000000000000000000008c8c6135d5565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561266657600080fd5b505af115801561267a573d6000803e3d6000fd5b505050506040513d602081101561269057600080fd5b5050604080517f89afcb440000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156126f657600080fd5b505af115801561270a573d6000803e3d6000fd5b505050506040513d604081101561272057600080fd5b5080516020909101519092509050600061273a8e8e6140d2565b509050806001600160a01b03168e6001600160a01b03161461275d578183612760565b82825b90975095508a8710156127ba576040805162461bcd60e51b815260206004820181905260248201527f565653526f757465723a20494e53554646494349454e545f415f414d4f554e54604482015290519081900360640190fd5b8986101561280f576040805162461bcd60e51b815260206004820181905260248201527f565653526f757465723a20494e53554646494349454e545f425f414d4f554e54604482015290519081900360640190fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111907f00000000000000000000000000000000000000000000000000000000000000008484613489565b60008060006128c17f00000000000000000000000000000000000000000000000000000000000000008e7f00000000000000000000000000000000000000000000000000000000000000006135d5565b90506000876128d0578c6128d4565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561294a57600080fd5b505af115801561295e573d6000803e3d6000fd5b505050506129708e8e8e8e8e8e610ced565b909f909e509c50505050505050505050505050565b600080600083428110156129d5576040805162461bcd60e51b8152602060048201526012602482015271159594d49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6129e38c8c8c8c8c8c6141c6565b90945092506000612a157f00000000000000000000000000000000000000000000000000000000000000008e8e6135d5565b9050612a238d3383886136ad565b612a2f8c3383876136ad565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612a8757600080fd5b505af1158015612a9b573d6000803e3d6000fd5b505050506040513d6020811015612ab157600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015612b18576040805162461bcd60e51b8152602060048201526012602482015271159594d49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b612b468a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c6141c6565b90945092506000612b987f00000000000000000000000000000000000000000000000000000000000000008c7f00000000000000000000000000000000000000000000000000000000000000006135d5565b9050612ba68b3383886136ad565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612c0157600080fd5b505af1158015612c15573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612c9a57600080fd5b505af1158015612cae573d6000803e3d6000fd5b505050506040513d6020811015612cc457600080fd5b5051612ccc57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612d2457600080fd5b505af1158015612d38573d6000803e3d6000fd5b505050506040513d6020811015612d4e57600080fd5b5051925034841015612d6657612d66338534036132a1565b505096509650969350505050565b60608142811015612dc1576040805162461bcd60e51b8152602060048201526012602482015271159594d49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612df857fe5b905060200201356001600160a01b03166001600160a01b031614612e5d576040805162461bcd60e51b81526020600482015260176024820152760acaca6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b612ebb7f000000000000000000000000000000000000000000000000000000000000000088888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613a6592505050565b91503482600081518110612ecb57fe5b60200260200101511115612f105760405162461bcd60e51b81526004018080602001828103825260218152602001806146e06021913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612f4c57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612f7f57600080fd5b505af1158015612f93573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612ff87f00000000000000000000000000000000000000000000000000000000000000008989600081811061172f57fe5b8460008151811061300557fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561305c57600080fd5b505af1158015613070573d6000803e3d6000fd5b505050506040513d602081101561308657600080fd5b505161308e57fe5b6130cd8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061381f915050565b816000815181106130da57fe5b6020026020010151341115611f2157611f2133836000815181106130fa57fe5b602002602001015134036132a1565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b602083106131b45780518252601f199092019160209182019101613195565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613216576040519150601f19603f3d011682016040523d82523d6000602084013e61321b565b606091505b5091509150818015613249575080511580613249575080806020019051602081101561324657600080fd5b50515b61329a576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106132ed5780518252601f1990920191602091820191016132ce565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461334f576040519150601f19603f3d011682016040523d82523d6000602084013e613354565b606091505b50509050806133945760405162461bcd60e51b81526004018080602001828103825260238152602001806146bd6023913960400191505060405180910390fd5b505050565b60008084116133d95760405162461bcd60e51b81526004018080602001828103825260258152602001806146986025913960400191505060405180910390fd5b6000831180156133e95750600082115b6134245760405162461bcd60e51b81526004018080602001828103825260228152602001806146506022913960400191505060405180910390fd5b6000613438856103e563ffffffff61449816565b9050600061344c828563ffffffff61449816565b9050600061347283613466886103e863ffffffff61449816565b9063ffffffff61450416565b905080828161347d57fe5b04979650505050505050565b60606002825110156134e2576040805162461bcd60e51b815260206004820152601860248201527f5656534c6962726172793a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b815167ffffffffffffffff811180156134fa57600080fd5b50604051908082528060200260200182016040528015613524578160200160208202803683370190505b509050828160008151811061353557fe5b60200260200101818152505060005b60018351038110156135cd576000806135878786858151811061356357fe5b602002602001015187866001018151811061357a57fe5b602002602001015161455c565b915091506135a984848151811061359a57fe5b60200260200101518383613399565b8484600101815181106135b857fe5b60209081029190910101525050600101613544565b509392505050565b60008060006135e485856140d2565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527fa77ee1cc0f39570ddde947459e293d7ebc2c30ff4e8fc45860afdcb2c2d3dc17609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106137475780518252601f199092019160209182019101613728565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146137a9576040519150601f19603f3d011682016040523d82523d6000602084013e6137ae565b606091505b50915091508180156137dc5750805115806137dc57508080602001905160208110156137d957600080fd5b50515b6138175760405162461bcd60e51b81526004018080602001828103825260248152602001806147016024913960400191505060405180910390fd5b505050505050565b60005b6001835103811015613a5f5760008084838151811061383d57fe5b602002602001015185846001018151811061385457fe5b602002602001015191509150600061386c83836140d2565b509050600087856001018151811061388057fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146138ae578260006138b2565b6000835b91509150600060028a510388106138c9578861390a565b61390a7f0000000000000000000000000000000000000000000000000000000000000000878c8b600201815181106138fd57fe5b60200260200101516135d5565b90506139377f000000000000000000000000000000000000000000000000000000000000000088886135d5565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613974576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156139e55781810151838201526020016139cd565b50505050905090810190601f168015613a125780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613a3457600080fd5b505af1158015613a48573d6000803e3d6000fd5b505060019099019850613822975050505050505050565b50505050565b6060600282511015613abe576040805162461bcd60e51b815260206004820152601860248201527f5656534c6962726172793a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613ad657600080fd5b50604051908082528060200260200182016040528015613b00578160200160208202803683370190505b5090508281600183510381518110613b1457fe5b60209081029190910101528151600019015b80156135cd57600080613b5687866001860381518110613b4257fe5b602002602001015187868151811061357a57fe5b91509150613b78848481518110613b6957fe5b60200260200101518383613f20565b846001850381518110613b8757fe5b6020908102919091010152505060001901613b26565b60005b600183510381101561339457600080848381518110613bbb57fe5b6020026020010151858460010181518110613bd257fe5b6020026020010151915091506000613bea83836140d2565b5090506000613c1a7f000000000000000000000000000000000000000000000000000000000000000085856135d5565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613c5b57600080fd5b505afa158015613c6f573d6000803e3d6000fd5b505050506040513d6060811015613c8557600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506000806001600160a01b038a811690891614613cc2578284613cc5565b83835b91509150613d23828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156118af57600080fd5b9550613d30868383613399565b945050505050600080856001600160a01b0316886001600160a01b031614613d5a57826000613d5e565b6000835b91509150600060028c51038a10613d75578a613da9565b613da97f0000000000000000000000000000000000000000000000000000000000000000898e8d600201815181106138fd57fe5b60408051600080825260208201928390527f022c0d9f00000000000000000000000000000000000000000000000000000000835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613e4c578181015183820152602001613e34565b50505050905090810190601f168015613e795780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613e9b57600080fd5b505af1158015613eaf573d6000803e3d6000fd5b50506001909b019a50613ba09950505050505050505050565b80820382811115611193576040805162461bcd60e51b815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411613f605760405162461bcd60e51b81526004018080602001828103825260268152602001806146726026913960400191505060405180910390fd5b600083118015613f705750600082115b613fab5760405162461bcd60e51b81526004018080602001828103825260228152602001806146506022913960400191505060405180910390fd5b6000613fcf6103e8613fc3868863ffffffff61449816565b9063ffffffff61449816565b90506000613fe96103e5613fc3868963ffffffff613ec816565b90506140066001828481613ff957fe5b049063ffffffff61450416565b9695505050505050565b6000808411614066576040805162461bcd60e51b815260206004820152601f60248201527f5656534c6962726172793a20494e53554646494349454e545f414d4f554e5400604482015290519081900360640190fd5b6000831180156140765750600082115b6140b15760405162461bcd60e51b81526004018080602001828103825260228152602001806146506022913960400191505060405180910390fd5b826140c2858463ffffffff61449816565b816140c957fe5b04949350505050565b600080826001600160a01b0316846001600160a01b0316141561413c576040805162461bcd60e51b815260206004820152601f60248201527f5656534c6962726172793a204944454e544943414c5f41444452455353455300604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b03161061415c57828461415f565b83835b90925090506001600160a01b0382166141bf576040805162461bcd60e51b815260206004820152601860248201527f5656534c6962726172793a205a45524f5f414444524553530000000000000000604482015290519081900360640190fd5b9250929050565b604080517fe6a439050000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561425957600080fd5b505afa15801561426d573d6000803e3d6000fd5b505050506040513d602081101561428357600080fd5b50516001600160a01b0316141561434f57604080517fc9c653960000000000000000000000000000000000000000000000000000000081526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561432257600080fd5b505af1158015614336573d6000803e3d6000fd5b505050506040513d602081101561434c57600080fd5b50505b60008061437d7f00000000000000000000000000000000000000000000000000000000000000008b8b61455c565b9150915081600014801561438f575080155b1561439f5787935086925061448b565b60006143ac898484614010565b9050878111614415578581101561440a576040805162461bcd60e51b815260206004820181905260248201527f565653526f757465723a20494e53554646494349454e545f425f414d4f554e54604482015290519081900360640190fd5b889450925082614489565b6000614422898486614010565b90508981111561442e57fe5b87811015614483576040805162461bcd60e51b815260206004820181905260248201527f565653526f757465723a20494e53554646494349454e545f415f414d4f554e54604482015290519081900360640190fd5b94508793505b505b5050965096945050505050565b60008115806144b3575050808202828282816144b057fe5b04145b611193576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b80820182811015611193576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b600080600061456b85856140d2565b50905060008061457c8888886135d5565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156145b457600080fd5b505afa1580156145c8573d6000803e3d6000fd5b505050506040513d60608110156145de57600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b038781169084161461461857808261461b565b81815b9099909850965050505050505056fe565653526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545656534c6962726172793a20494e53554646494349454e545f4c49515549444954595656534c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545656534c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544565653526f757465723a204558434553534956455f494e5055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a26469706673582212208b928471574e8dbb2cfe15dcc7798d3fa68c26b5e236865a30dc60c815e60b1564736f6c634300060600330000000000000000000000003b44b2a187a7b3824131f8db5a74194d0a42fc150000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23

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

0000000000000000000000003b44b2a187a7b3824131f8db5a74194d0a42fc150000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23

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

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000003b44b2a187a7b3824131f8db5a74194d0a42fc15
Arg [1] : 0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23


Deployed ByteCode Sourcemap

16114:18121:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16576:10;-1:-1:-1;;;;;16590:4:0;16576:18;;16569:26;;;;16114:18121;;12:1:-1;9;2:12;20624:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20624:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20624:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33203:256;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33203:256:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33203:256:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27649:826;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27649:826:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27649:826:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;27649:826:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27649:826:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27649:826:0;;-1:-1:-1;27649:826:0;-1:-1:-1;;;;;;27649:826: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;27649:826:0;;;;;;;;;;;;;;;;;33985:247;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33985:247:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33985:247:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;33985:247:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33985:247:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33985:247:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33985:247:0;;-1:-1:-1;33985:247:0;;-1:-1:-1;;;;;33985:247:0:i;21303:665::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21303:665:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21303:665:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24950:610::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24950:610:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24950:610:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;24950:610:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24950:610:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;24950:610:0;;-1:-1:-1;24950:610:0;-1:-1:-1;;;;;;24950:610:0;;;;;;;;:::i;26839:804::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26839:804:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26839:804:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;26839:804:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26839:804:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26839:804:0;;-1:-1:-1;26839:804:0;-1:-1:-1;;;;;;26839:804:0;;;;;;;;:::i;23416:706::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23416:706:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23416:706:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30598:702::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30598:702:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30598:702:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;30598:702:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30598:702:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30598:702:0;;-1:-1:-1;30598:702:0;-1:-1:-1;;;;;;30598:702:0;;;;;;;;:::i;32144:825::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32144:825:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32144:825:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;32144:825:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32144:825:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;32144:825:0;;-1:-1:-1;32144:825:0;-1:-1:-1;;;;;;32144:825:0;;;;;;;;:::i;26160:673::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26160:673:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;26160:673:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26160:673:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26160:673:0;;-1:-1:-1;26160:673:0;-1:-1:-1;;;;;;26160:673:0;;;;;;;;:::i;33467:255::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33467:255:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33467:255:0;;;;;;;;;;;;:::i;25566:588::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25566:588:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25566:588:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;25566:588:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25566:588:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25566:588:0;;-1:-1:-1;25566:588:0;-1:-1:-1;;;;;;25566:588:0;;;;;;;;:::i;16236:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16236:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;16236:38:0;;;;;;;;;;;;;;33013:182;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33013:182:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33013:182:0;;;;;;;;;;;;:::i;22710:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22710:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22710:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31306:832::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31306:832:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;31306:832:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31306:832:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31306:832:0;;-1:-1:-1;31306:832:0;-1:-1:-1;;;;;;31306:832:0;;;;;;;;:::i;19789:829::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19789:829:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19789:829:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16188:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16188:41:0;;;:::i;33730:247::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33730:247:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33730:247:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;33730:247:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33730:247:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33730:247:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33730:247:0;;-1:-1:-1;33730:247:0;;-1:-1:-1;;;;;33730:247:0:i;21974:657::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21974:657:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21974:657:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18052:726::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18052:726:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18052:726:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;18784:962;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18784:962:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28481:786::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28481:786:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;28481:786:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28481:786:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28481:786:0;;-1:-1:-1;28481:786:0;-1:-1:-1;;;;;;28481:786:0;;;;;;;;:::i;20624:673::-;20861:16;20879:14;20842:8;16345:15;16333:8;:27;;16325:58;;;;;-1:-1:-1;;;16325:58:0;;;;;;;;;;;;-1:-1:-1;;;16325:58:0;;;;;;;;;;;;;;;20933:196:::1;20963:5;20983:4;21002:9;21026:14;21055:12;21090:4;21110:8;20933:15;:196::i;:::-;20906:223:::0;;-1:-1:-1;20906:223:0;-1:-1:-1;21140:51:0::1;21168:5:::0;21175:2;20906:223;21140:27:::1;:51::i;:::-;21208:4;-1:-1:-1::0;;;;;21202:20:0::1;;21223:9;21202:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21202:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21202:31:0;;;;21244:45;21275:2;21279:9;21244:30;:45::i;:::-;20624:673:::0;;;;;;;;;;:::o;33203:256::-;33356:14;33395:56;33419:8;33429:9;33440:10;33395:23;:56::i;:::-;33388:63;33203:256;-1:-1:-1;;;;33203:256:0:o;27649:826::-;27863:21;27835:8;16345:15;16333:8;:27;;16325:58;;;;;-1:-1:-1;;;16325:58:0;;;;;;;;;;;;-1:-1:-1;;;16325:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27935:4:0::1;27910:29;:4:::0;;-1:-1:-1;;27915:15:0;;27910:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27910:21:0::1;-1:-1:-1::0;;;;;27910:29:0::1;;27902:65;;;::::0;;-1:-1:-1;;;27902:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27902:65:0;;;;;;;;;;;;;::::1;;27988:49;28013:7;28022:8;28032:4;;27988:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27988:24:0::1;::::0;-1:-1:-1;;;27988:49:0:i:1;:::-;27978:59;;28087:12;28056:7;28081:1;28064:7;:14;:18;28056:27;;;;;;;;;;;;;;:43;;28048:93;;;;-1:-1:-1::0;;;28048:93:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28152:135;28198:4;;28203:1;28198:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28198:7:0::1;28207:10;28219:45;28238:7;28247:4;;28252:1;28247:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28247:7:0::1;28256:4;;28261:1;28256:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28256:7:0::1;28219:18;:45::i;:::-;28266:7;28274:1;28266:10;;;;;;;;;;;;;;28152:31;:135::i;:::-;28298:35;28304:7;28313:4;;28298:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28327:4:0::1;::::0;-1:-1:-1;28298:5:0::1;::::0;-1:-1:-1;;28298:35:0:i:1;:::-;28350:4;-1:-1:-1::0;;;;;28344:20:0::1;;28365:7;28390:1;28373:7;:14;:18;28365:27;;;;;;;;;;;;;;28344:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28344:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28344:49:0;;;;28404:63;28435:2;28439:7;28464:1;28447:7;:14;:18;28439:27;;;;;;;;;;;;;;28404:30;:63::i;:::-;27649:826:::0;;;;;;;;;:::o;33985:247::-;34129:21;34175:49;34199:7;34208:9;34219:4;34175:23;:49::i;:::-;34168:56;;33985:247;;;;;:::o;21303:665::-;21609:12;21623;21648;21663:43;21682:7;21691:6;21699;21663:18;:43::i;:::-;21648:58;;21717:10;21730;:33;;21754:9;21730:33;;;-1:-1:-1;;21730:33:0;21774:74;;;-1:-1:-1;;;21774:74:0;;21796:10;21774:74;;;;21816:4;21774:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21717:46;;-1:-1:-1;;;;;;21774:21:0;;;;;:74;;;;;-1:-1:-1;;21774:74:0;;;;;;;;-1:-1:-1;21774:21:0;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;21774:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21774:74:0;;;;21880:80;21896:6;21904;21912:9;21923:10;21935;21947:2;21951:8;21880:15;:80::i;:::-;21859:101;;;;;;;;21303:665;;;;;;;;;;;;;;;;:::o;24950:610::-;25174:21;25155:8;16345:15;16333:8;:27;;16325:58;;;;;-1:-1:-1;;;16325:58:0;;;;;;;;;;;;-1:-1:-1;;;16325:58:0;;;;;;;;;;;;;;;25218:49:::1;25243:7;25252:8;25262:4;;25218:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25218:24:0::1;::::0;-1:-1:-1;;;25218:49:0:i:1;:::-;25208:59;;25317:12;25286:7;25311:1;25294:7;:14;:18;25286:27;;;;;;;;;;;;;;:43;;25278:93;;;;-1:-1:-1::0;;;25278:93:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25382:135;25428:4;;25433:1;25428:7;;;;;;25382:135;25528:24;25534:7;25543:4;;25528:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25549:2:0;;-1:-1:-1;25528:5:0::1;::::0;-1:-1:-1;;25528:24:0:i:1;26839:804::-:0;27053:21;27025:8;16345:15;16333:8;:27;;16325:58;;;;;-1:-1:-1;;;16325:58:0;;;;;;;;;;;;-1:-1:-1;;;16325:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27125:4:0::1;27100:29;:4:::0;;-1:-1:-1;;27105:15:0;;27100:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27100:21:0::1;-1:-1:-1::0;;;;;27100:29:0::1;;27092:65;;;::::0;;-1:-1:-1;;;27092:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27092:65:0;;;;;;;;;;;;;::::1;;27178:49;27202:7;27211:9;27222:4;;27178:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27178:23:0::1;::::0;-1:-1:-1;;;27178:49:0:i:1;:::-;27168:59;;27260:11;27246:7;27254:1;27246:10;;;;;;;;;;;;;;:25;;27238:71;;;;-1:-1:-1::0;;;27238:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23416:706:::0;23734:14;23761:12;23776:40;23795:7;23804:5;23811:4;23776:18;:40::i;:::-;23761:55;;23827:10;23840;:33;;23864:9;23840:33;;;-1:-1:-1;;23840:33:0;23884:74;;;-1:-1:-1;;;23884:74:0;;23906:10;23884:74;;;;23926:4;23884:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23827:46;;-1:-1:-1;;;;;;23884:21:0;;;;;:74;;;;;-1:-1:-1;;23884:74:0;;;;;;;;-1:-1:-1;23884:21:0;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;23884:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23884:74:0;;;;23981:133;24043:5;24050:9;24061:14;24077:12;24091:2;24095:8;23981:47;:133::i;:::-;23969:145;23416:706;-1:-1:-1;;;;;;;;;;;;;23416:706:0:o;30598:702::-;30832:8;16345:15;16333:8;:27;;16325:58;;;;;-1:-1:-1;;;16325:58:0;;;;;;;;;;;;-1:-1:-1;;;16325:58:0;;;;;;;;;;;;;;;30853:133:::1;30899:4;;30904:1;30899:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30899:7:0::1;30908:10;30920:45;30939:7;30948:4;;30953:1;30948:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30948:7:0::1;30957:4;;30962:1;30957:7;;;;;;30920:45;30967:8;30853:31;:133::i;:::-;30997:18;31025:4:::0;;-1:-1:-1;;31030:15:0;;31025:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31025:21:0::1;-1:-1:-1::0;;;;;31018:39:0::1;;31058:2;31018:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31018:43:0::1;-1:-1:-1::0;;;;;31018:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31018:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31018:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31018:43:0;31072:44:::1;::::0;;31018:43:::1;31072:44:::0;;::::1;::::0;;;;;;;;;;;31018:43;;-1:-1:-1;31072:44:0::1;::::0;;;31107:4;;;;;;31072:44;::::1;::::0;31107:4;;31072:44;31107:4;31072:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31113:2:0;;-1:-1:-1;31072:34:0::1;::::0;-1:-1:-1;;31072:44:0:i:1;:::-;31215:12:::0;31149:62:::1;31197:13:::0;31156:4;;-1:-1:-1;;31161:15:0;;31156:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31156:21:0::1;-1:-1:-1::0;;;;;31149:39:0::1;;31189:2;31149:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31149:43:0::1;-1:-1:-1::0;;;;;31149:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31149:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31149:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31149:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;31127:165;;;;-1:-1:-1::0;;;31127:165:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16394:1;30598:702:::0;;;;;;;:::o;32144:825::-;32411:8;16345:15;16333:8;:27;;16325:58;;;;;-1:-1:-1;;;16325:58:0;;;;;;;;;;;;-1:-1:-1;;;16325:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32470:4:0::1;32445:29;:4:::0;;-1:-1:-1;;32450:15:0;;32445:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32445:21:0::1;-1:-1:-1::0;;;;;32445:29:0::1;;32437:65;;;::::0;;-1:-1:-1;;;32437:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;32437:65:0;;;;;;;;;;;;;::::1;;32513:133;32559:4;;32564:1;32559:7;;;;;;32513:133;32657:55;32692:4;;32657:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32706:4:0::1;::::0;-1:-1:-1;32657:34:0::1;::::0;-1:-1:-1;;32657:55:0:i:1;:::-;32740:37;::::0;;-1:-1:-1;;;32740:37:0;;32771:4:::1;32740:37;::::0;::::1;::::0;;;32723:14:::1;::::0;-1:-1:-1;;;;;32747:4:0::1;32740:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;32740:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32740:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32740:37:0;;-1:-1:-1;32796:25:0;;::::1;;32788:75;;;;-1:-1:-1::0;;;32788:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32880:4;-1:-1:-1::0;;;;;32874:20:0::1;;32895:9;32874:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32874:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32874:31:0;;;;32916:45;32947:2;32951:9;32916:30;:45::i;26160:673::-:0;26376:21;26348:8;16345:15;16333:8;:27;;16325:58;;;;;-1:-1:-1;;;16325:58:0;;;;;;;;;;;;-1:-1:-1;;;16325:58:0;;;;;;;;;;;;;;;26434:4:::1;-1:-1:-1::0;;;;;26423:15:0::1;:4;;26428:1;26423:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26423:7:0::1;-1:-1:-1::0;;;;;26423:15:0::1;;26415:51;;;::::0;;-1:-1:-1;;;26415:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;26415:51:0;;;;;;;;;;;;;::::1;;26487:50;26512:7;26521:9;26532:4;;26487:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26487:24:0::1;::::0;-1:-1:-1;;;26487:50:0:i:1;:::-;26477:60;;26587:12;26556:7;26581:1;26564:7;:14;:18;26556:27;;;;;;;;;;;;;;:43;;26548:93;;;;-1:-1:-1::0;;;26548:93:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26658:4;-1:-1:-1::0;;;;;26652:19:0::1;;26679:7;26687:1;26679:10;;;;;;;;;;;;;;26652:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26652:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26652:40:0;;;;;26716:4;-1:-1:-1::0;;;;;26710:20:0::1;;26731:45;26750:7;26759:4;;26764:1;26759:7;;;;;;26731:45;26778:7;26786:1;26778:10;;;;;;;;;;;;;;26710:79;;;;;;;;;;;;;-1:-1:-1::0;;;;;26710:79:0::1;-1:-1:-1::0;;;;;26710:79:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26710:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26710:79:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26710:79:0;26703:87:::1;;;;26801:24;26807:7;26816:4;;26801:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26822:2:0;;-1:-1:-1;26801:5:0::1;::::0;-1:-1:-1;;26801:24:0:i:1;:::-;26160:673:::0;;;;;;;;:::o;33467:255::-;33620:13;33658:56;33681:9;33692;33703:10;33658:22;:56::i;25566:588::-;25790:21;25771:8;16345:15;16333:8;:27;;16325:58;;;;;-1:-1:-1;;;16325:58:0;;;;;;;;;;;;-1:-1:-1;;;16325:58:0;;;;;;;;;;;;;;;25834:49:::1;25858:7;25867:9;25878:4;;25834:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25834:23:0::1;::::0;-1:-1:-1;;;25834:49:0:i:1;:::-;25824:59;;25916:11;25902:7;25910:1;25902:10;;;;;;;;;;;;;;:25;;25894:71;;;;-1:-1:-1::0;;;25894:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16236:38:::0;;;:::o;33013:182::-;33110:12;33142:45;33159:7;33168:8;33178;33142:16;:45::i;22710:700::-;22976:14;22957:8;16345:15;16333:8;:27;;16325:58;;;;;-1:-1:-1;;;16325:58:0;;;;;;;;;;;;-1:-1:-1;;;16325:58:0;;;;;;;;;;;;;;;23019:196:::1;23049:5;23069:4;23088:9;23112:14;23141:12;23176:4;23196:8;23019:15;:196::i;:::-;23265:38;::::0;;-1:-1:-1;;;23265:38:0;;23297:4:::1;23265:38;::::0;::::1;::::0;;;23003:212;;-1:-1:-1;23226:78:0::1;::::0;-1:-1:-1;23254:5:0;;23261:2;;-1:-1:-1;;;;;23265: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;23265:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23265:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23265:38:0;23226:27:::1;:78::i;:::-;23321:4;-1:-1:-1::0;;;;;23315:20:0::1;;23336:9;23315:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23315:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23315:31:0;;;;23357:45;23388:2;23392:9;23357:30;:45::i;31306:832::-:0;31566:8;16345:15;16333:8;:27;;16325:58;;;;;-1:-1:-1;;;16325:58:0;;;;;;;;;;;;-1:-1:-1;;;16325:58:0;;;;;;;;;;;;;;;31611:4:::1;-1:-1:-1::0;;;;;31600:15:0::1;:4;;31605:1;31600:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31600:7:0::1;-1:-1:-1::0;;;;;31600:15:0::1;;31592:51;;;::::0;;-1:-1:-1;;;31592:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;31592:51:0;;;;;;;;;;;;;::::1;;31654:13;31670:9;31654:25;;31696:4;-1:-1:-1::0;;;;;31690:19:0::1;;31717:8;31690:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31690:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31690:38:0;;;;;31752:4;-1:-1:-1::0;;;;;31746:20:0::1;;31767:45;31786:7;31795:4;;31800:1;31795:7;;;;;;31767:45;31814:8;31746:77;;;;;;;;;;;;;-1:-1:-1::0;;;;;31746:77:0::1;-1:-1:-1::0;;;;;31746:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31746:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31746:77:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31746:77:0;31739:85:::1;;;;31835:18;31863:4:::0;;-1:-1:-1;;31868:15:0;;31863:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31863:21:0::1;-1:-1:-1::0;;;;;31856:39:0::1;;31896:2;31856:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31856:43:0::1;-1:-1:-1::0;;;;;31856:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31856:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31856:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31856:43:0;31910:44:::1;::::0;;31856:43:::1;31910:44:::0;;::::1;::::0;;;;;;;;;;;31856:43;;-1:-1:-1;31910:44:0::1;::::0;;;31945:4;;;;;;31910:44;::::1;::::0;31945:4;;31910:44;31945:4;31910:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31951:2:0;;-1:-1:-1;31910:34:0::1;::::0;-1:-1:-1;;31910:44:0:i:1;:::-;32053:12:::0;31987:62:::1;32035:13:::0;31994:4;;-1:-1:-1;;31999:15:0;;31994:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31994:21:0::1;-1:-1:-1::0;;;;;31987:39:0::1;;32027:2;31987:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31987:43:0::1;-1:-1:-1::0;;;;;31987:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;19789:829:0::0;20043:12;20057;20024:8;16345:15;16333:8;:27;;16325:58;;;;;-1:-1:-1;;;16325:58:0;;;;;;;;;;;;-1:-1:-1;;;16325:58:0;;;;;;;;;;;;;;;20082:12:::1;20097:43;20116:7;20125:6;20133;20097:18;:43::i;:::-;20151:56;::::0;;-1:-1:-1;;;20151:56:0;;20179:10:::1;20151:56;::::0;::::1;::::0;-1:-1:-1;;;;;20151:27:0;::::1;:56:::0;;;;;;;;;;;;;;20082:58;;-1:-1:-1;20151:27:0;;::::1;::::0;:56;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20151:27:0;:56;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20151:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20151:56:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;20275:23:0::1;::::0;;;;;-1:-1:-1;;;;;20275:23:0;;::::1;;::::0;::::1;::::0;;;20245:12:::1;::::0;;;20275:19;;::::1;::::0;::::1;::::0;:23;;;;;;;;;;;20245:12;20275:19;:23;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20275:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20275:23:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20275:23:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20275:23:0;-1:-1:-1;20310:14:0::1;20329:37;20351:6:::0;20359;20329:21:::1;:37::i;:::-;20309:57;;;20408:6;-1:-1:-1::0;;;;;20398:16:0::1;:6;-1:-1:-1::0;;;;;20398:16:0::1;;:58;;20439:7;20448;20398:58;;;20418:7;20427;20398:58;20377:79:::0;;-1:-1:-1;20377:79:0;-1:-1:-1;20475:21:0;;::::1;;20467:66;;;::::0;;-1:-1:-1;;;20467:66:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;20563:10;20552:7;:21;;20544:66;;;::::0;;-1:-1:-1;;;20544:66:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;16394:1;;;;19789:829:::0;;;;;;;;;;;:::o;16188:41::-;;;:::o;33730:247::-;33874:21;33920:49;33945:7;33954:8;33964:4;33920:24;:49::i;21974:657::-;22263:16;22281:14;22308:12;22323:40;22342:7;22351:5;22358:4;22323:18;:40::i;:::-;22308:55;;22374:10;22387;:33;;22411:9;22387:33;;;-1:-1:-1;;22387:33:0;22431:74;;;-1:-1:-1;;;22431:74:0;;22453:10;22431:74;;;;22473:4;22431:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22374:46;;-1:-1:-1;;;;;;22431:21:0;;;;;:74;;;;;-1:-1:-1;;22431:74:0;;;;;;;;-1:-1:-1;22431:21:0;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;22431:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22431:74:0;;;;22543:80;22562:5;22569:9;22580:14;22596:12;22610:2;22614:8;22543:18;:80::i;:::-;22516:107;;;;-1:-1:-1;21974:657:0;-1:-1:-1;;;;;;;;;;;;;21974:657:0:o;18052:726::-;18340:12;18354;18368:14;18321:8;16345:15;16333:8;:27;;16325:58;;;;;-1:-1:-1;;;16325:58:0;;;;;;;;;;;;-1:-1:-1;;;16325:58:0;;;;;;;;;;;;;;;18416:85:::1;18430:6;18438;18446:14;18462;18478:10;18490;18416:13;:85::i;:::-;18395:106:::0;;-1:-1:-1;18395:106:0;-1:-1:-1;18512:12:0::1;18527:43;18546:7;18555:6:::0;18563;18527:18:::1;:43::i;:::-;18512:58;;18581:66;18613:6;18621:10;18633:4;18639:7;18581:31;:66::i;:::-;18658;18690:6;18698:10;18710:4;18716:7;18658:31;:66::i;:::-;18756:4;-1:-1:-1::0;;;;;18747:19:0::1;;18767:2;18747:23;;;;;;;;;;;;;-1:-1:-1::0;;;;;18747:23:0::1;-1:-1:-1::0;;;;;18747:23:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18747:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18747:23:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18747:23:0;18052:726;;;;-1:-1:-1;18747:23:0;;-1:-1:-1;18052:726:0;;-1:-1:-1;;;;;;;;;18052:726:0:o;18784:962::-;19037:16;19055:14;19071;19018:8;16345:15;16333:8;:27;;16325:58;;;;;-1:-1:-1;;;16325:58:0;;;;;;;;;;;;-1:-1:-1;;;16325:58:0;;;;;;;;;;;;;;;19125:176:::1;19153:5;19173:4;19192:18;19225:9;19249:14;19278:12;19125:13;:176::i;:::-;19098:203:::0;;-1:-1:-1;19098:203:0;-1:-1:-1;19312:12:0::1;19327:40;19346:7;19355:5:::0;19362:4:::1;19327:18;:40::i;:::-;19312:55;;19378:69;19410:5;19417:10;19429:4;19435:11;19378:31;:69::i;:::-;19464:4;-1:-1:-1::0;;;;;19458:19:0::1;;19485:9;19458:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19458:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19458:39:0;;;;;19521:4;-1:-1:-1::0;;;;;19515:20:0::1;;19536:4;19542:9;19515:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;19515:37:0::1;-1:-1:-1::0;;;;;19515:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19515:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19515:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19515:37:0;19508:45:::1;;;;19585:4;-1:-1:-1::0;;;;;19576:19:0::1;;19596:2;19576:23;;;;;;;;;;;;;-1:-1:-1::0;;;;;19576:23:0::1;-1:-1:-1::0;;;;;19576:23:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19576:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19576:23:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19576:23:0;;-1:-1:-1;19650:9:0::1;:21:::0;-1:-1:-1;19646:92:0::1;;;19673:65;19704:10;19728:9;19716;:21;19673:30;:65::i;:::-;16394:1;18784:962:::0;;;;;;;;;;;:::o;28481:786::-;28694:21;28666:8;16345:15;16333:8;:27;;16325:58;;;;;-1:-1:-1;;;16325:58:0;;;;;;;;;;;;-1:-1:-1;;;16325:58:0;;;;;;;;;;;;;;;28752:4:::1;-1:-1:-1::0;;;;;28741:15:0::1;:4;;28746:1;28741:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28741:7:0::1;-1:-1:-1::0;;;;;28741:15:0::1;;28733:51;;;::::0;;-1:-1:-1;;;28733:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;28733:51:0;;;;;;;;;;;;;::::1;;28805:49;28829:7;28838:9;28849:4;;28805:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28805:23:0::1;::::0;-1:-1:-1;;;28805:49:0:i:1;:::-;28795:59;;28887:9;28873:7;28881:1;28873:10;;;;;;;;;;;;;;:23;;28865:69;;;;-1:-1:-1::0;;;28865:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28951:4;-1:-1:-1::0;;;;;28945:19:0::1;;28972:7;28980:1;28972:10;;;;;;;;;;;;;;28945:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28945:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28945:40:0;;;;;29009:4;-1:-1:-1::0;;;;;29003:20:0::1;;29024:45;29043:7;29052:4;;29057:1;29052:7;;;;;;29024:45;29071:7;29079:1;29071:10;;;;;;;;;;;;;;29003:79;;;;;;;;;;;;;-1:-1:-1::0;;;;;29003:79:0::1;-1:-1:-1::0;;;;;29003:79:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29003:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29003:79:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29003:79:0;28996:87:::1;;;;29094:24;29100:7;29109:4;;29094:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29115:2:0;;-1:-1:-1;29094:5:0::1;::::0;-1:-1:-1;;29094:24:0:i:1;:::-;29181:7;29189:1;29181:10;;;;;;;;;;;;;;29169:9;:22;29165:94;;;29193:66;29224:10;29248:7;29256:1;29248:10;;;;;;;;;;;;;;29236:9;:22;29193:30;:66::i;1344:361::-:0;1539:45;;;-1:-1:-1;;;;;1539:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1539:45:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;1539:45:0;179:29:-1;160:49;;1528:57:0;;;;1493:12;;1507:17;;1528:10;;;;1539:45;1528:57;;;25:18:-1;1528: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;;;1528: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;;1492:93:0;;;;1604:7;:57;;;;-1:-1:-1;1616:11:0;;:16;;:44;;;1647:4;1636:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1636:24:0;1616:44;1596:101;;;;;-1:-1:-1;;;1596:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1344:361;;;;;:::o;2123:195::-;2231:12;;;2193;2231;;;;;;;;;-1:-1:-1;;;;;2210:7:0;;;2224:5;;2210: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;;;2210: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;;2192:52:0;;;2263:7;2255:55;;;;-1:-1:-1;;;2255:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2123:195;;;:::o;12615:505::-;12708:14;12754:1;12743:8;:12;12735:62;;;;-1:-1:-1;;;12735:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12828:1;12816:9;:13;:31;;;;;12846:1;12833:10;:14;12816:31;12808:78;;;;-1:-1:-1;;;12808:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12897:20;12920:17;:8;12933:3;12920:17;:12;:17;:::i;:::-;12897:40;-1:-1:-1;12948:14:0;12965:31;12897:40;12985:10;12965:31;:19;:31;:::i;:::-;12948:48;-1:-1:-1;13007:16:0;13026:40;13050:15;13026:19;:9;13040:4;13026:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;13007:59;;13101:11;13089:9;:23;;;;;;;12615:505;-1:-1:-1;;;;;;;12615:505:0:o;13783:::-;13884:21;13941:1;13926:4;:11;:16;;13918:53;;;;;-1:-1:-1;;;13918:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14003:4;:11;13992:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13992:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;13992:23:0;;13982:33;;14039:8;14026:7;14034:1;14026:10;;;;;;;;;;;;;:21;;;;;14063:6;14058:223;14089:1;14075:4;:11;:15;14071:1;:19;14058:223;;;14113:14;14129:15;14148:42;14160:7;14169:4;14174:1;14169:7;;;;;;;;;;;;;;14178:4;14183:1;14187;14183:5;14178:11;;;;;;;;;;;;;;14148;:42::i;:::-;14112:78;;;;14222:47;14235:7;14243:1;14235:10;;;;;;;;;;;;;;14247:9;14258:10;14222:12;:47::i;:::-;14205:7;14213:1;14217;14213:5;14205:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;14092:3:0;;14058:223;;;;13783:505;;;;;:::o;11150:478::-;11239:12;11265:14;11281;11299:26;11310:6;11318;11299:10;:26::i;:::-;11463:32;;;-1:-1:-1;;11463:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;11463:32:0;;;;;11453:43;;;;;;11366:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;11366:251:0;;;;;;;11356:262;;;;;;;;;11150:478;-1:-1:-1;;;;;11150:478:0:o;1713:402::-;1938:51;;;-1:-1:-1;;;;;1938:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1938:51:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;-1:-1;;;179:29;160:49;;1927:63:0;;;;1892:12;;1906:17;;1927:10;;;;1938:51;1927:63;;;25:18:-1;1927: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;;;1927: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;;1891:99:0;;;;2009:7;:57;;;;-1:-1:-1;2021:11:0;;:16;;:44;;;2052:4;2041:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2041:24:0;2021:44;2001:106;;;;-1:-1:-1;;;2001:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1713:402;;;;;;:::o;24233:711::-;24340:6;24335:602;24366:1;24352:4;:11;:15;24348:1;:19;24335:602;;;24390:13;24405:14;24424:4;24429:1;24424:7;;;;;;;;;;;;;;24433:4;24438:1;24442;24438:5;24433:11;;;;;;;;;;;;;;24389:56;;;;24461:14;24480:36;24502:5;24509:6;24480:21;:36::i;:::-;24460:56;;;24531:14;24548:7;24556:1;24560;24556:5;24548:14;;;;;;;;;;;;;;24531:31;;24578:15;24595;24623:6;-1:-1:-1;;;;;24614:15:0;:5;-1:-1:-1;;;;;24614:15:0;;:61;;24656:9;24672:1;24614:61;;;24638:1;24642:9;24614:61;24577:98;;;;24690:10;24721:1;24707:4;:11;:15;24703:1;:19;:76;;24776:3;24703:76;;;24725:48;24744:7;24753:6;24761:4;24766:1;24770;24766:5;24761:11;;;;;;;;;;;;;;24725:18;:48::i;:::-;24690:89;;24803:42;24822:7;24831:5;24838:6;24803:18;:42::i;:::-;-1:-1:-1;;;;;24794:57:0;;24870:10;24882;24894:2;24908:1;24898:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;24898:12:0;87:42:-1;143:17;;-1:-1;24898:12:0;;24794:131;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24794:131:0;-1:-1:-1;;;;;24794:131: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;24794:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24794:131:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;24369:3:0;;;;;-1:-1:-1;24335:602:0;;-1:-1:-1;;;;;;;;24335:602:0;;;24233:711;;;:::o;14369:526::-;14470:21;14527:1;14512:4;:11;:16;;14504:53;;;;;-1:-1:-1;;;14504:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14589:4;:11;14578:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14578:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14578:23:0;;14568:33;;14642:9;14612:7;14637:1;14620:7;:14;:18;14612:27;;;;;;;;;;;;;;;;;:39;14676:11;;-1:-1:-1;;14676:15:0;14662:226;14693:5;;14662:226;;14721:14;14737:15;14756:42;14768:7;14777:4;14786:1;14782;:5;14777:11;;;;;;;;;;;;;;14790:4;14795:1;14790:7;;;;;;;14756:42;14720:78;;;;14830:46;14842:7;14850:1;14842:10;;;;;;;;;;;;;;14854:9;14865:10;14830:11;:46::i;:::-;14813:7;14825:1;14821;:5;14813:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;14700:3:0;14662:226;;29414:1178;29527:6;29522:1063;29553:1;29539:4;:11;:15;29535:1;:19;29522:1063;;;29577:13;29592:14;29611:4;29616:1;29611:7;;;;;;;;;;;;;;29620:4;29625:1;29629;29625:5;29620:11;;;;;;;;;;;;;;29576:56;;;;29648:14;29667:36;29689:5;29696:6;29667:21;:36::i;:::-;29647:56;;;29718:13;29743:42;29762:7;29771:5;29778:6;29743:18;:42::i;:::-;29718:68;;29801:16;29832:17;29920:13;29935;29953:4;-1:-1:-1;;;;;29953:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29953:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29953:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29953:18:0;;;;;;;29919:52;;;;;-1:-1:-1;29919:52:0;;-1:-1:-1;29987:17:0;;-1:-1:-1;;;;;30028:15:0;;;;;;;:61;;30070:8;30080;30028:61;;;30047:8;30057;30028:61;29986:103;;;;30118:56;30161:12;30125:5;-1:-1:-1;;;;;30118:23:0;;30150:4;30118:38;;;;;;;;;;;;;-1:-1:-1;;;;;30118:38:0;-1:-1:-1;;;;;30118:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;30118:56:0;30104:70;;30204:65;30228:11;30241:12;30255:13;30204:23;:65::i;:::-;30189:80;;29522:1063;;;;30300:15;30317;30345:6;-1:-1:-1;;;;;30336:15:0;:5;-1:-1:-1;;;;;30336:15:0;;:67;;30381:12;30400:1;30336:67;;;30360:1;30364:12;30336:67;30299:104;;;;30418:10;30449:1;30435:4;:11;:15;30431:1;:19;:76;;30504:3;30431:76;;;30453:48;30472:7;30481:6;30489:4;30494:1;30498;30494:5;30489:11;;;;;;;30453:48;30560:12;;;30570:1;30560:12;;;;;;;;;;30522:51;;;;;;;;;;;;;;;-1:-1:-1;;;;;30522:51:0;;;;;;;;;;;;;;;;;;;;;;30418:89;;-1:-1:-1;30522:9:0;;;;;;30532:10;;30544;;30418:89;;30560:12;;30522:51;;;;;;;;30560:12;;30522:51;;;;30560: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;30522:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30522:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29556:3:0;;;;;-1:-1:-1;29522:1063:0;;-1:-1:-1;;;;;;;;;;29522:1063:0;10200:129;10284:5;;;10279:16;;;;10271:50;;;;;-1:-1:-1;;;10271:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;13241:460;13334:13;13380:1;13368:9;:13;13360:64;;;;-1:-1:-1;;;13360:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13455:1;13443:9;:13;:31;;;;;13473:1;13460:10;:14;13443:31;13435:78;;;;-1:-1:-1;;;13435:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13524:14;13541:34;13570:4;13541:24;:9;13555;13541:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;13524:51;-1:-1:-1;13586:16:0;13605:34;13635:3;13605:25;:10;13620:9;13605:25;:14;:25;:::i;:34::-;13586:53;;13661:32;13691:1;13674:11;13662:9;:23;;;;;;;13661:32;:29;:32;:::i;:::-;13650:43;13241:460;-1:-1:-1;;;;;;13241:460:0:o;12184:309::-;12266:12;12309:1;12299:7;:11;12291:55;;;;;-1:-1:-1;;;12291:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12376:1;12365:8;:12;:28;;;;;12392:1;12381:8;:12;12365:28;12357:75;;;;-1:-1:-1;;;12357:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12477:8;12453:21;:7;12465:8;12453:21;:11;:21;:::i;:::-;:32;;;;;;;12184:309;-1:-1:-1;;;;12184:309:0:o;10721:337::-;10796:14;10812;10857:6;-1:-1:-1;;;;;10847:16:0;:6;-1:-1:-1;;;;;10847:16:0;;;10839:60;;;;;-1:-1:-1;;;10839:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10938:6;-1:-1:-1;;;;;10929:15:0;:6;-1:-1:-1;;;;;10929:15:0;;:53;;10967:6;10975;10929:53;;;10948:6;10956;10929:53;10910:72;;-1:-1:-1;10910:72:0;-1:-1:-1;;;;;;11001:20:0;;10993:57;;;;;-1:-1:-1;;;10993:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10721:337;;;;;:::o;16698:1348::-;17011:44;;;;;;-1:-1:-1;;;;;17011:44:0;;;;;;;;;;;;;;;;16916:12;;;;;;17023:7;17011:28;;;;;;:44;;;;;;;;;;;;;;;:28;:44;;;2:2:-1;;;;27:1;24;17:12;2:2;17011:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17011:44:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17011:44:0;-1:-1:-1;;;;;17011:58:0;;17007:138;;;17086:47;;;;;;-1:-1:-1;;;;;17086:47:0;;;;;;;;;;;;;;;;17098:7;17086:31;;;;;;:47;;;;;;;;;;;;;;;-1:-1:-1;17086:31:0;:47;;;2:2:-1;;;;27:1;24;17:12;2:2;17086:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17086:47:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;17007:138:0;17156:13;17171;17188:47;17211:7;17220:6;17228;17188:22;:47::i;:::-;17155:80;;;;17250:8;17262:1;17250:13;:30;;;;-1:-1:-1;17267:13:0;;17250:30;17246:793;;;17319:14;;-1:-1:-1;17335:14:0;;-1:-1:-1;17246:793:0;;;17383:19;17405:52;17422:14;17438:8;17448;17405:16;:52::i;:::-;17383:74;;17494:14;17476;:32;17472:556;;17555:10;17537:14;:28;;17529:73;;;;;-1:-1:-1;;;17529:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17643:14;;-1:-1:-1;17659:14:0;-1:-1:-1;17659:14:0;17472:556;;;17715:19;17737:52;17754:14;17770:8;17780;17737:16;:52::i;:::-;17715:74;;17833:14;17815;:32;;17808:40;;;;17893:10;17875:14;:28;;17867:73;;;;;-1:-1:-1;;;17867:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17981:14;-1:-1:-1;17997:14:0;;-1:-1:-1;17472:556:0;17246:793;;16698:1348;;;;;;;;;;;:::o;10337:142::-;10389:6;10416;;;:30;;-1:-1:-1;;10431:5:0;;;10445:1;10440;10431:5;10440:1;10426:15;;;;;:20;10416:30;10408:63;;;;;-1:-1:-1;;;10408:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;10064:128;10148:5;;;10143:16;;;;10135:49;;;;;-1:-1:-1;;;10135:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;11686:385;11779:13;11794;11821:14;11840:26;11851:6;11859;11840:10;:26::i;:::-;11820:46;;;11878:13;11893;11920:32;11928:7;11937:6;11945;11920:7;:32::i;:::-;-1:-1:-1;;;;;11911:54:0;;:56;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11911:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11911:56:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11911:56:0;;;;;;;11877:90;;;;;-1:-1:-1;11877:90:0;;-1:-1:-1;;;;;;12001:16:0;;;;;;;:62;;12044:8;12054;12001:62;;;12021:8;12031;12001:62;11978:85;;;;-1:-1:-1;11686:385:0;-1:-1:-1;;;;;;;11686:385:0:o

Swarm Source

ipfs://8b928471574e8dbb2cfe15dcc7798d3fa68c26b5e236865a30dc60c815e60b15
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.