Contract 0x145863eb42cf62847a6ca784e6416c1682b1b2ae 6

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x48a56925bb5c34d2cd8dac65384da6c98b9623d5d24d2a8e21977b7afd3692deAdd Liquidity86371052023-06-04 5:35:2237 secs ago0xd963954baf72d903b47319509e038f1c143abd92 IN  VVS Finance: Router0 CRO0.7313450
0xca776072568386df4aefc9d74a4ea619e9f0ffa9d568faf193acb3578b1204d8Swap Exact ETH F...86370992023-06-04 5:34:481 min ago0xd963954baf72d903b47319509e038f1c143abd92 IN  VVS Finance: Router21 CRO0.510720
0x2e2a624a64ae0e5e49b6186474cfa655ec2418082833747bf64594ce4dc801caSwap Exact Token...86370962023-06-04 5:34:311 min ago0x485e97c8ca7b96ce1defaf9ad699118db8cc5d9c IN  VVS Finance: Router0 CRO0.7468629110030
0x67b1a2c1e58cf4e3298391b1bb8726bd1ef35f94d0abeb6ed0501261d5df7afcSwap Exact ETH F...86370952023-06-04 5:34:261 min ago0xd963954baf72d903b47319509e038f1c143abd92 IN  VVS Finance: Router23 CRO0.5970350
0x586236ce839a754537187bf8cc2394c64de54d8540b45448577e6a854af79b96Swap Exact Token...86370922023-06-04 5:34:091 min ago0x2c6bfb503f6b726169b9d3e9dcc22eba90767937 IN  VVS Finance: Router0 CRO0.8159635331350
0x013ee82669919ce9595cd7776acc3049a7d0252c3ba505521f6e1ebd1605cac5Swap Exact Token...86370922023-06-04 5:34:091 min ago0x485e97c8ca7b96ce1defaf9ad699118db8cc5d9c IN  VVS Finance: Router0 CRO0.5306738826250
0x0d84c2ebd0172e937209ec892ee269ed302c72110b9755e7414105204286a5c5Swap Exact ETH F...86370902023-06-04 5:33:572 mins ago0x90775df4ec0e1ccc390214f6193599375b0e28ef IN  VVS Finance: Router100 CRO0.5200547756960
0xf2c8677cba190ea872164f9fe0f9836792c93ef4a95bcffb98cb0badde439c16Swap Exact ETH F...86370892023-06-04 5:33:522 mins ago0x485e97c8ca7b96ce1defaf9ad699118db8cc5d9c IN  VVS Finance: Router686.82023 CRO0.5760859571630
0x1d969f5c3d98917e01c8816548e9cbb0c16edd483efb1b319571b752f4c6075cSwap Exact Token...86370852023-06-04 5:33:302 mins ago0x90775df4ec0e1ccc390214f6193599375b0e28ef IN  VVS Finance: Router0 CRO0.7949149873290
0x9806d4bf5aa5b7ec0faddba6f9bbbac877c9043cd64744d9d8439da0bfe4c65bSwap Exact Token...86370802023-06-04 5:33:012 mins ago0x1159e20eed0ed1f11d4836451da9782a025fcabb IN  VVS Finance: Router0 CRO0.5893838642690
0x3b4ef7be97dc3cdce5d83e311f4eae7a96dac5f624d16fb93eea4b04c5356970Swap Exact Token...86370752023-06-04 5:32:323 mins ago0x30620715bcf265773b2973eff4293cee0bb1b774 IN  VVS Finance: Router0 CRO0.56911 5,000
0x77a0522d3562024745f8747609ff4a6343f8f805062994b3dcedc6518a0571c3Add Liquidity ET...86370722023-06-04 5:32:153 mins ago0xdb85292e523b1671a36640f5dcf93fe73102e66f IN  VVS Finance: Router696.348403804265982 CRO0.8324550
0x275d5f35e821824e14a7e81c55ce204cee3daaf656272cebeabf2ba577ef8084Swap Exact Token...86370682023-06-04 5:31:534 mins ago0x30620715bcf265773b2973eff4293cee0bb1b774 IN  VVS Finance: Router0 CRO0.555425 5,000
0xa4d0e8ca815ee6bf64593fb89490173d422cc0b6cf7d491bcc099c096a4beb88Swap Exact Token...86370652023-06-04 5:31:354 mins ago0x2c6bfb503f6b726169b9d3e9dcc22eba90767937 IN  VVS Finance: Router0 CRO1.0937344999180
0xeb509b994eabe624b2060f0964aa1bc624c5c06a6c97f0f72d9e4dc2c7045007Add Liquidity86370642023-06-04 5:31:304 mins ago0xdb85292e523b1671a36640f5dcf93fe73102e66f IN  VVS Finance: Router0 CRO0.795470
0x9f088e8119c5411897c10df10ed16431fcf56a5de164059c81051981abf2448fSwap Exact Token...86370622023-06-04 5:31:194 mins ago0x59028cb74ca11637fbef95859f1cfc81fbd88c7d IN  VVS Finance: Router0 CRO0.5254609425750
0x98de4c517669bedf4d93c598616ef9899c69da4f1a9610866c0896f8789caf6cSwap Exact Token...86370562023-06-04 5:30:445 mins agoCronos ID Name mrhranac.cro IN  VVS Finance: Router0 CRO0.5552450
0xaf92e5cb1a671a109aa69d7b920afc8036a77283efab61a85fd826c6d2cf6c5dSwap Exact Token...86370532023-06-04 5:30:285 mins ago0xdb85292e523b1671a36640f5dcf93fe73102e66f IN  VVS Finance: Router0 CRO0.5234150
0x625298a1eeeea6d67c6c4ceb5d980c476306fc3eb8c5aea3ca38263e0131ad04Swap Exact Token...86370502023-06-04 5:30:115 mins ago0xc3ed0469ab4dcda18b8a62a4389bec21959ebe8d IN  VVS Finance: Router0 CRO1.0128489659740
0x05dad2649401ca35d3f076400e686483a5c4395d872b8df6b5008bcd480bca60Swap Exact Token...86370472023-06-04 5:29:546 mins ago0xc3ed0469ab4dcda18b8a62a4389bec21959ebe8d IN  VVS Finance: Router0 CRO1.0939809040820
0x6b1ceb65c9bbd5133185e86b2a41a212b10e6fd506ef7e61f6870ea403634357Remove Liquidity...86370372023-06-04 5:28:587 mins ago0x4423edea768bcabd97891268dccaaeb17b85c8c2 IN  VVS Finance: Router0 CRO0.9646850
0x7a136fc73b9e2a5bca787980a3fff803c9f6f3b8f5f43599ad9427684aea24b4Swap Exact ETH F...86370362023-06-04 5:28:527 mins agoCronos ID Name fromthefuture.cro IN  VVS Finance: Router7.692607356413496 CRO0.5140879363980
0x7bb24a4851fec58436b6489f90908f6fe218b7371e266ce5dbf6ee43c60c76efSwap Exact Token...86370362023-06-04 5:28:527 mins ago0xdb85292e523b1671a36640f5dcf93fe73102e66f IN  VVS Finance: Router0 CRO0.525320
0x765745c0b3f2a722fa4daf355623c461dc606c74da33c2ad2f1d3823d5c756d4Swap Exact Token...86370332023-06-04 5:28:357 mins ago0xdb85292e523b1671a36640f5dcf93fe73102e66f IN  VVS Finance: Router0 CRO0.54920
0xabb3c67b7c723ddf6f707bd5bffb59146890eea693df2cec604a7a4117c9be96Swap Exact ETH F...86370322023-06-04 5:28:307 mins agoCronos ID Name fromthefuture.cro IN  VVS Finance: Router47.697908022879374 CRO0.5140879614660
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xca776072568386df4aefc9d74a4ea619e9f0ffa9d568faf193acb3578b1204d886370992023-06-04 5:34:481 min ago VVS Finance: Router Cronos: WCRO Token21 CRO
0x67b1a2c1e58cf4e3298391b1bb8726bd1ef35f94d0abeb6ed0501261d5df7afc86370952023-06-04 5:34:261 min ago VVS Finance: Router Cronos: WCRO Token23 CRO
0x0d84c2ebd0172e937209ec892ee269ed302c72110b9755e7414105204286a5c586370902023-06-04 5:33:572 mins ago VVS Finance: Router Cronos: WCRO Token100 CRO
0xf2c8677cba190ea872164f9fe0f9836792c93ef4a95bcffb98cb0badde439c1686370892023-06-04 5:33:522 mins ago VVS Finance: Router Cronos: WCRO Token686.82023 CRO
0x9806d4bf5aa5b7ec0faddba6f9bbbac877c9043cd64744d9d8439da0bfe4c65b86370802023-06-04 5:33:012 mins ago VVS Finance: Router0x1159e20eed0ed1f11d4836451da9782a025fcabb0.000049818560958943 CRO
0x9806d4bf5aa5b7ec0faddba6f9bbbac877c9043cd64744d9d8439da0bfe4c65b86370802023-06-04 5:33:012 mins ago Cronos: WCRO Token VVS Finance: Router0.000049818560958943 CRO
0x3b4ef7be97dc3cdce5d83e311f4eae7a96dac5f624d16fb93eea4b04c535697086370752023-06-04 5:32:323 mins ago VVS Finance: Router0x30620715bcf265773b2973eff4293cee0bb1b77412.28469584673174524 CRO
0x3b4ef7be97dc3cdce5d83e311f4eae7a96dac5f624d16fb93eea4b04c535697086370752023-06-04 5:32:323 mins ago Cronos: WCRO Token VVS Finance: Router12.28469584673174524 CRO
0x77a0522d3562024745f8747609ff4a6343f8f805062994b3dcedc6518a0571c386370722023-06-04 5:32:153 mins ago VVS Finance: Router Cronos: WCRO Token696.348403804265982931 CRO
0x275d5f35e821824e14a7e81c55ce204cee3daaf656272cebeabf2ba577ef808486370682023-06-04 5:31:534 mins ago VVS Finance: Router0x30620715bcf265773b2973eff4293cee0bb1b774270.876569023573862894 CRO
0x275d5f35e821824e14a7e81c55ce204cee3daaf656272cebeabf2ba577ef808486370682023-06-04 5:31:534 mins ago Cronos: WCRO Token VVS Finance: Router270.876569023573862894 CRO
0x9f088e8119c5411897c10df10ed16431fcf56a5de164059c81051981abf2448f86370622023-06-04 5:31:194 mins ago VVS Finance: Router0x59028cb74ca11637fbef95859f1cfc81fbd88c7d131.93191791715568287 CRO
0x9f088e8119c5411897c10df10ed16431fcf56a5de164059c81051981abf2448f86370622023-06-04 5:31:194 mins ago Cronos: WCRO Token VVS Finance: Router131.93191791715568287 CRO
0x98de4c517669bedf4d93c598616ef9899c69da4f1a9610866c0896f8789caf6c86370562023-06-04 5:30:445 mins ago VVS Finance: RouterCronos ID Name mrhranac.cro9,172.959052627461924499 CRO
0x98de4c517669bedf4d93c598616ef9899c69da4f1a9610866c0896f8789caf6c86370562023-06-04 5:30:445 mins ago Cronos: WCRO Token VVS Finance: Router9,172.959052627461924499 CRO
0x7a136fc73b9e2a5bca787980a3fff803c9f6f3b8f5f43599ad9427684aea24b486370362023-06-04 5:28:527 mins ago VVS Finance: Router Cronos: WCRO Token7.692607356413496664 CRO
0xabb3c67b7c723ddf6f707bd5bffb59146890eea693df2cec604a7a4117c9be9686370322023-06-04 5:28:307 mins ago VVS Finance: Router Cronos: WCRO Token47.697908022879374032 CRO
0x59108369456a52b9089a77c752de2bd0713b4fdaf92ae6b1aef7ad3c8dc7657c86370242023-06-04 5:27:448 mins ago VVS Finance: Router Cronos: WCRO Token1,197 CRO
0x3e3b9c4726dbb767e25456894776d400e6d77359809e1902c3c15865488d783e86370242023-06-04 5:27:448 mins ago VVS Finance: Router0x30620715bcf265773b2973eff4293cee0bb1b774271.717868308947545437 CRO
0x3e3b9c4726dbb767e25456894776d400e6d77359809e1902c3c15865488d783e86370242023-06-04 5:27:448 mins ago Cronos: WCRO Token VVS Finance: Router271.717868308947545437 CRO
0x8b0bcf76f1666b8b543ac8ff79fbbac8de44f3785a7d488887f8ca9e311a3f7986370062023-06-04 5:26:029 mins ago VVS Finance: Router0xdb85292e523b1671a36640f5dcf93fe73102e66f654.434183017861631497 CRO
0x8b0bcf76f1666b8b543ac8ff79fbbac8de44f3785a7d488887f8ca9e311a3f7986370062023-06-04 5:26:029 mins ago Cronos: WCRO Token VVS Finance: Router654.434183017861631497 CRO
0xb794f16e0b2f0bca2b087de4fe50e232602637d6081cec191860655b01cb3ea786369982023-06-04 5:25:1610 mins ago VVS Finance: Router Cronos: WCRO Token20.32225 CRO
0x8e28f4de3246734ac1652e20d5bf32ddcace962b7e43b6cb0144ea6a85ba168e86369972023-06-04 5:25:1010 mins ago VVS Finance: Router Cronos: WCRO Token1,000 CRO
0x6565e1ad953aa56cb60fd7293ecc67dba2478385b5c71d2ce4fe55120216909b86369942023-06-04 5:24:5311 mins ago VVS Finance: Router Cronos: WCRO Token1 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.