Contract 0x96b244391d98b62d19ae89b1a4dccf0fc56970c7 11

Contract Overview

Beamswap: Amm Router.V1
Balance:
342.5864729090339675 GLMR

GLMR Value:
$88.87 (@ $0.26/GLMR)

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x5b2d0039bbb2c91ef6e6aaee8f455cc708c5d1de20740ea306af33d65bf1268bSwap Exact Token...45228802023-09-27 4:30:421 hr 39 mins ago0x2092bbdb817be666c29fbbd03fb9014476bc9240 IN  Beamswap: Amm Router.V10 GLMR0.04609797372
0x247e23a5aa87d2d6cf6b2bf6331edc262961a1e2c3de1179b884ff9cd35ec143Swap Exact Token...45225432023-09-27 3:22:242 hrs 48 mins ago0xbe8b73afe0d791dca27ea1afcb26f8028f52dea1 IN  Beamswap: Amm Router.V10 GLMR0.024678936652
0x2eeb6913940a4f475a532bba9ceb40db7172b2faef5f07f0a4992113b8446966Swap Exact Token...45221782023-09-27 2:07:364 hrs 2 mins ago0x56583913dae9ecfea126c178ac6123c957341db9 IN  Beamswap: Amm Router.V10 GLMR0.043286135963
0xc1a53384197dddad0a804455b852713f996f757080f70541720fbe3cfcc1049eSwap Exact Token...45221422023-09-27 2:00:064 hrs 10 mins ago0xf3f3b9173b87c1687fc91842dd85d42fa47ffa34 IN  Beamswap: Amm Router.V10 GLMR0.03724889171
0x9765140686591cfa0ded12a95ca58dd56e62527b66168c46ac2fe1f258807729Swap Exact Token...45219212023-09-27 1:15:424 hrs 54 mins ago0x24f6532a487662228c6b93bdc96e55dabeb0623b IN  Beamswap: Amm Router.V10 GLMR0.023126061861
0x34450587792b58a77c59d793a14dd71d506f547d70b8a254e62e30ca293f2f66Swap Exact ETH F...45219052023-09-27 1:12:304 hrs 57 mins ago0x01009bddaa01146bf8ba3dcc22926f0221812338 IN  Beamswap: Amm Router.V120.9 GLMR0.021237799947
0x94694d141bd8df48d89e4146a01a9986860c780cae22a5733b4566ed6e499d6dSwap Exact ETH F...45214602023-09-26 23:42:126 hrs 28 mins ago0xcc08dd4c69e7679333032b5fd0d56c7e131e207a IN  Beamswap: Amm Router.V131 GLMR0.036619835133
0x9c94bb35c9a1169aa7d94f227e5b83ba9c0c7c6d154ff381810a148d29df9ebdSwap Exact ETH F...45214542023-09-26 23:41:006 hrs 29 mins ago0xcc08dd4c69e7679333032b5fd0d56c7e131e207a IN  Beamswap: Amm Router.V130 GLMR0.036703373726
0xdce8064f2928992db341f7e755554d67026a8e4076b3969d4e5bd3ffad9b1045Swap Exact ETH F...45212322023-09-26 22:55:547 hrs 14 mins ago0xa53a74140656a337f97c4c1225e2b1803733aa84 IN  Beamswap: Amm Router.V118 GLMR0.022675550373
0x2ef9b8a4bed637c1348e4bd14e76c46d71d24b0b071767de77723ad80659cbe7Swap Exact Token...45212122023-09-26 22:51:427 hrs 18 mins ago0x7cb9583e8e6b7238ac8584d03bf7ea95759f4177 IN  Beamswap: Amm Router.V10 GLMR0.02259074983
0x695da3b2304bfd49fb60d6f42c2ff993a8c2ba0bd0c5817e6498ff9defa258a0Swap Exact Token...45211022023-09-26 22:29:067 hrs 41 mins ago0xa21bec2530a2a339b23589f27d2338a58127ab05 IN  Beamswap: Amm Router.V10 GLMR0.034815424042
0xde66e1c073c74f16134721e9728dee09e2e29f1ebcf2aba751a942b082555c68Swap Exact Token...45210822023-09-26 22:25:067 hrs 45 mins ago0xa21bec2530a2a339b23589f27d2338a58127ab05 IN  Beamswap: Amm Router.V10 GLMR0.01455503276
0x47efc558a2158337b026020189b6924c4b56b763ce784af33408517dbdfee52dSwap Exact ETH F...45210412023-09-26 22:16:547 hrs 53 mins ago0xa53a74140656a337f97c4c1225e2b1803733aa84 IN  Beamswap: Amm Router.V130 GLMR0.022181481
0x8970a44be8269b4f1e6cd3f99ca472f2284c5994ba84448ace9fffe19044aa20Swap Exact Token...45209842023-09-26 22:05:248 hrs 5 mins ago0x92ea840cff689a5a2135fa4ce6f356d3c0206ab2 IN  Beamswap: Amm Router.V10 GLMR0.022456786
0xe315347d7a5e7c766a4b078368368c7337e1589bd3ae3d2ae5860eec72a9f655Swap Exact Token...45209342023-09-26 21:55:188 hrs 15 mins ago0xa21bec2530a2a339b23589f27d2338a58127ab05 IN  Beamswap: Amm Router.V10 GLMR0.043906028956
0x074e5a65158b9617764c96196120354fc3020fac63669dc296dca7943f3becf2Swap Exact ETH F...45208812023-09-26 21:44:428 hrs 25 mins ago0xa53a74140656a337f97c4c1225e2b1803733aa84 IN  Beamswap: Amm Router.V130 GLMR0.024052290376
0x01427ebcb2f98fc2383764d1d0da54e6ded490f5d866ef32791f6673fe577a5eSwap Exact Token...45206232023-09-26 20:52:489 hrs 17 mins ago0x1bd5af42906d58eaa226e4e26f87ac622d674066 IN  Beamswap: Amm Router.V10 GLMR0.022260030866
0xee72578a40ea68f237058aeddcb03559e15d58d06428c854f48761cf35e433d8Swap Exact Token...45203772023-09-26 20:03:2410 hrs 7 mins ago0x3be06c329a55808cc445cc946c4e0d6810091c1f IN  Beamswap: Amm Router.V10 GLMR0.022456786
0xb50b2fb0b02e7337c3baec2d40110502a55a9efa2057bc86f6c77bd9470d6950Swap Exact Token...45203642023-09-26 20:00:4210 hrs 9 mins ago0x8530ddd0508148c12595f3bce669918ebe3b1432 IN  Beamswap: Amm Router.V10 GLMR0.02246604406
0xf77cc2dab0737cb72ddb8b60387dd18e0e2982198be734d2aa84f3615faf90f4Swap Exact ETH F...45200762023-09-26 19:02:0611 hrs 8 mins ago0x735b80f3d208fcc9329fd0b405408a814bb5e7ef IN  Beamswap: Amm Router.V110 GLMR0.024074745101
0x4a08fd39ad15fd5850950bc40c310597ba5030c76d0d0f10e042ab8f6b949478Swap Exact ETH F...45200692023-09-26 19:00:3611 hrs 9 mins ago0x735b80f3d208fcc9329fd0b405408a814bb5e7ef IN  Beamswap: Amm Router.V120 GLMR0.015583172844
0x5e3cd33a08c33da30ff6eb395b10b5a621f6b660d7223740eb8f8592f1b8c042Swap Exact ETH F...45198102023-09-26 18:08:1812 hrs 2 mins ago0xbe8b73afe0d791dca27ea1afcb26f8028f52dea1 IN  Beamswap: Amm Router.V110 GLMR0.024355422982
0xa013342d024bbd082910bff1b2f626e25acd04c3457ca005dd089fb94b51674bSwap Exact ETH F...45198012023-09-26 18:06:3012 hrs 3 mins ago0xbe8b73afe0d791dca27ea1afcb26f8028f52dea1 IN  Beamswap: Amm Router.V110 GLMR0.015840625093
0xbf6e6e1bebea2dce26932fa6447fb9bb60f4a6c527d118fd6a2d93bd9fc57fc9Swap Exact ETH F...45197502023-09-26 17:56:0612 hrs 14 mins ago0x257f38a34aab83e53311021911c3e6fd2094cdc0 IN  Beamswap: Amm Router.V1132 GLMR0.025979835456
0x89cf305d861494f3932d11f22950194c0bd4772968cf08a606f45bc0df2691afAdd Liquidity ET...45194132023-09-26 16:46:5413 hrs 23 mins ago0x3333ddd8b99365836ff1c03bc7dee3c50a43e919 IN  Beamswap: Amm Router.V10.01784 GLMR0.309424994015
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x5b2d0039bbb2c91ef6e6aaee8f455cc708c5d1de20740ea306af33d65bf1268b45228802023-09-27 4:30:421 hr 39 mins ago Beamswap: Amm Router.V10x2092bbdb817be666c29fbbd03fb9014476bc924046.197194021214391348 GLMR
0x5b2d0039bbb2c91ef6e6aaee8f455cc708c5d1de20740ea306af33d65bf1268b45228802023-09-27 4:30:421 hr 39 mins ago Moonbeam: WGLMR Token Beamswap: Amm Router.V146.197194021214391348 GLMR
0x247e23a5aa87d2d6cf6b2bf6331edc262961a1e2c3de1179b884ff9cd35ec14345225432023-09-27 3:22:242 hrs 48 mins ago Beamswap: Amm Router.V10xbe8b73afe0d791dca27ea1afcb26f8028f52dea111.137017455044540069 GLMR
0x247e23a5aa87d2d6cf6b2bf6331edc262961a1e2c3de1179b884ff9cd35ec14345225432023-09-27 3:22:242 hrs 48 mins ago Moonbeam: WGLMR Token Beamswap: Amm Router.V111.137017455044540069 GLMR
0xc1a53384197dddad0a804455b852713f996f757080f70541720fbe3cfcc1049e45221422023-09-27 2:00:064 hrs 10 mins ago Beamswap: Amm Router.V10xf3f3b9173b87c1687fc91842dd85d42fa47ffa3440.431701889363913821 GLMR
0xc1a53384197dddad0a804455b852713f996f757080f70541720fbe3cfcc1049e45221422023-09-27 2:00:064 hrs 10 mins ago Moonbeam: WGLMR Token Beamswap: Amm Router.V140.431701889363913821 GLMR
0x9765140686591cfa0ded12a95ca58dd56e62527b66168c46ac2fe1f25880772945219212023-09-27 1:15:424 hrs 54 mins ago Beamswap: Amm Router.V10x24f6532a487662228c6b93bdc96e55dabeb0623b129.255663234113101682 GLMR
0x9765140686591cfa0ded12a95ca58dd56e62527b66168c46ac2fe1f25880772945219212023-09-27 1:15:424 hrs 54 mins ago Moonbeam: WGLMR Token Beamswap: Amm Router.V1129.255663234113101682 GLMR
0x34450587792b58a77c59d793a14dd71d506f547d70b8a254e62e30ca293f2f6645219052023-09-27 1:12:304 hrs 57 mins ago Beamswap: Amm Router.V1 Moonbeam: WGLMR Token20.9 GLMR
0xf0e41d13e7903c30baad1841fb44bca9bb066e0a9ea40fa4de2400897fd59e0a45217142023-09-27 0:33:545 hrs 36 mins ago Beamswap: Amm Router.V10xeb29ebced22af1578b87fde145e2e85f05782fb611.739662805054786888 GLMR
0xf0e41d13e7903c30baad1841fb44bca9bb066e0a9ea40fa4de2400897fd59e0a45217142023-09-27 0:33:545 hrs 36 mins ago Moonbeam: WGLMR Token Beamswap: Amm Router.V111.739662805054786888 GLMR
0x31d675e8fdca35cc71bfcf87fb9d0bc5ee8619a8e57c4e85d648e1e14f2d417b45214922023-09-26 23:48:426 hrs 21 mins ago Beamswap: Amm Router.V10x7be9fa3943970762c7e52568c28a66e5424836963.834185605574592361 GLMR
0x31d675e8fdca35cc71bfcf87fb9d0bc5ee8619a8e57c4e85d648e1e14f2d417b45214922023-09-26 23:48:426 hrs 21 mins ago Moonbeam: WGLMR Token Beamswap: Amm Router.V13.834185605574592361 GLMR
0x1fd627d75251a53d49a1a0dfbbd1b12196cf0055b798bfb15ce0c1c1140405b045214732023-09-26 23:44:486 hrs 25 mins ago Beamswap: Amm Router.V10x92a47ea26becad53ba01273afd9b3fa4286fab754.494472202839846136 GLMR
0x1fd627d75251a53d49a1a0dfbbd1b12196cf0055b798bfb15ce0c1c1140405b045214732023-09-26 23:44:486 hrs 25 mins ago Moonbeam: WGLMR Token Beamswap: Amm Router.V14.494472202839846136 GLMR
0x94694d141bd8df48d89e4146a01a9986860c780cae22a5733b4566ed6e499d6d45214602023-09-26 23:42:126 hrs 28 mins ago Beamswap: Amm Router.V1 Moonbeam: WGLMR Token31 GLMR
0x9c94bb35c9a1169aa7d94f227e5b83ba9c0c7c6d154ff381810a148d29df9ebd45214542023-09-26 23:41:006 hrs 29 mins ago Beamswap: Amm Router.V1 Moonbeam: WGLMR Token30 GLMR
0xdce8064f2928992db341f7e755554d67026a8e4076b3969d4e5bd3ffad9b104545212322023-09-26 22:55:547 hrs 14 mins ago Beamswap: Amm Router.V1 Moonbeam: WGLMR Token18 GLMR
0x2ef9b8a4bed637c1348e4bd14e76c46d71d24b0b071767de77723ad80659cbe745212122023-09-26 22:51:427 hrs 18 mins ago Beamswap: Amm Router.V10x7cb9583e8e6b7238ac8584d03bf7ea95759f41772.458630090411799447 GLMR
0x2ef9b8a4bed637c1348e4bd14e76c46d71d24b0b071767de77723ad80659cbe745212122023-09-26 22:51:427 hrs 18 mins ago Moonbeam: WGLMR Token Beamswap: Amm Router.V12.458630090411799447 GLMR
0x695da3b2304bfd49fb60d6f42c2ff993a8c2ba0bd0c5817e6498ff9defa258a045211022023-09-26 22:29:067 hrs 41 mins ago Beamswap: Amm Router.V10xa21bec2530a2a339b23589f27d2338a58127ab05111.663887245875939157 GLMR
0x695da3b2304bfd49fb60d6f42c2ff993a8c2ba0bd0c5817e6498ff9defa258a045211022023-09-26 22:29:067 hrs 41 mins ago Moonbeam: WGLMR Token Beamswap: Amm Router.V1111.663887245875939157 GLMR
0x47efc558a2158337b026020189b6924c4b56b763ce784af33408517dbdfee52d45210412023-09-26 22:16:547 hrs 53 mins ago Beamswap: Amm Router.V1 Moonbeam: WGLMR Token30 GLMR
0x8970a44be8269b4f1e6cd3f99ca472f2284c5994ba84448ace9fffe19044aa2045209842023-09-26 22:05:248 hrs 5 mins ago Beamswap: Amm Router.V10x92ea840cff689a5a2135fa4ce6f356d3c0206ab22.418835072872201652 GLMR
0x8970a44be8269b4f1e6cd3f99ca472f2284c5994ba84448ace9fffe19044aa2045209842023-09-26 22:05:248 hrs 5 mins ago Moonbeam: WGLMR Token Beamswap: Amm Router.V12.418835072872201652 GLMR
[ Download CSV Export 
Index Block
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BeamSwapRouter

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 moonbeam.moonscan.io on 2022-01-16
*/

// Sources flattened with hardhat v2.7.1 https://hardhat.org

// File contracts/uniswapv2/lib/IBeamSwapFactory.sol

pragma solidity >=0.5.0;

interface IBeamSwapFactory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint256);

    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(uint256) external view returns (address pair);
    function allPairsLength() external view returns (uint256);

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

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


// File contracts/uniswapv2/lib/TransferHelper.sol

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

pragma solidity >=0.6.0;

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

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

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

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


// File contracts/uniswapv2/interfaces/IBeamSwapRouter01.sol

pragma solidity >=0.6.2;

interface IBeamSwapRouter01 {
    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/uniswapv2/interfaces/IBeamSwapRouter02.sol

pragma solidity >=0.6.2;
interface IBeamSwapRouter02 is IBeamSwapRouter01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint256 amountETH);

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


// File contracts/uniswapv2/libraries/IBeamSwapPair.sol

// SPDX-License-Identifier: MIT
pragma solidity >=0.5.0;

interface IBeamSwapPair {
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);
    function balanceOf(address owner) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);
    function transfer(address to, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 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 (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);
    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 (uint256);
    function price1CumulativeLast() external view returns (uint256);
    function kLast() external view returns (uint256);

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

    function initialize(address, address) external;
}


// File contracts/uniswapv2/libraries/mathUpdated/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/uniswapv2/libraries/BeamSwapLibrary.sol

pragma solidity >=0.5.0;
library BeamSwapLibrary {
    using SafeMath for uint256;

    // 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, 'BeamSwapLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'BeamSwapLibrary: 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(uint256(keccak256(abi.encodePacked(
                hex'ff',
                factory,
                keccak256(abi.encodePacked(token0, token1)),
                hex'e31da4209ffcce713230a74b5287fa8ec84797c9e77e1f7cfeccea015cdc97ea' // init code hash
            ))));
    }

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

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


// File contracts/uniswapv2/interfaces/IERC20.sol

// SPDX-License-Identifier: MIT

pragma solidity >=0.5.0;

interface IERC20 {
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);
    function balanceOf(address owner) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);

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


// File contracts/uniswapv2/interfaces/IWGLMR.sol

pragma solidity >=0.5.0;

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


// File contracts/uniswapv2/BeamSwapRouter.sol

pragma solidity =0.6.6;
contract BeamSwapRouter is IBeamSwapRouter02 {
    using SafeMath for uint256;

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

    modifier ensure(uint256 deadline) {
        require(deadline >= block.timestamp, 'BeamSwapRouter: 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,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin
    ) internal virtual returns (uint256 amountA, uint256 amountB) {
        // create the pair if it doesn't exist yet
        if (IBeamSwapFactory(factory).getPair(tokenA, tokenB) == address(0)) {
            IBeamSwapFactory(factory).createPair(tokenA, tokenB);
        }
        (uint256 reserveA, uint256 reserveB) = BeamSwapLibrary.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint256 amountBOptimal = BeamSwapLibrary.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'BeamSwapRouter: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint256 amountAOptimal = BeamSwapLibrary.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'BeamSwapRouter: INSUFFICIENT_A_AMOUNT');
                (amountA, amountB) = (amountAOptimal, amountBDesired);
            }
        }
    }
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external virtual override ensure(deadline) returns (uint256 amountA, uint256 amountB, uint256 liquidity) {
        (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin);
        address pair = BeamSwapLibrary.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IBeamSwapPair(pair).mint(to);
    }
    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external virtual override payable ensure(deadline) returns (uint256 amountToken, uint256 amountETH, uint256 liquidity) {
        (amountToken, amountETH) = _addLiquidity(
            token,
            WETH,
            amountTokenDesired,
            msg.value,
            amountTokenMin,
            amountETHMin
        );
        address pair = BeamSwapLibrary.pairFor(factory, token, WETH);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWGLMR(WETH).deposit{value: amountETH}();
        assert(IWGLMR(WETH).transfer(pair, amountETH));
        liquidity = IBeamSwapPair(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,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) public virtual override ensure(deadline) returns (uint256 amountA, uint256 amountB) {
        address pair = BeamSwapLibrary.pairFor(factory, tokenA, tokenB);
        IBeamSwapPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint256 amount0, uint256 amount1) = IBeamSwapPair(pair).burn(to);
        (address token0,) = BeamSwapLibrary.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'BeamSwapRouter: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'BeamSwapRouter: INSUFFICIENT_B_AMOUNT');
    }
    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) public virtual override ensure(deadline) returns (uint256 amountToken, uint256 amountETH) {
        (amountToken, amountETH) = removeLiquidity(
            token,
            WETH,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, amountToken);
        IWGLMR(WETH).withdraw(amountETH);
        TransferHelper.safeTransferETH(to, amountETH);
    }
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint256 amountA, uint256 amountB) {
        address pair = BeamSwapLibrary.pairFor(factory, tokenA, tokenB);
        uint256 value = approveMax ? uint256(-1) : liquidity;
        IBeamSwapPair(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,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint256 amountToken, uint256 amountETH) {
        address pair = BeamSwapLibrary.pairFor(factory, token, WETH);
        uint256 value = approveMax ? uint256(-1) : liquidity;
        IBeamSwapPair(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,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) public virtual override ensure(deadline) returns (uint256 amountETH) {
        (, amountETH) = removeLiquidity(
            token,
            WETH,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this)));
        IWGLMR(WETH).withdraw(amountETH);
        TransferHelper.safeTransferETH(to, amountETH);
    }
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint256 amountETH) {
        address pair = BeamSwapLibrary.pairFor(factory, token, WETH);
        uint256 value = approveMax ? uint256(-1) : liquidity;
        IBeamSwapPair(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(uint256[] memory amounts, address[] memory path, address _to) internal virtual {
        for (uint256 i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = BeamSwapLibrary.sortTokens(input, output);
            uint256 amountOut = amounts[i + 1];
            (uint256 amount0Out, uint256 amount1Out) = input == token0 ? (uint256(0), amountOut) : (amountOut, uint256(0));
            address to = i < path.length - 2 ? BeamSwapLibrary.pairFor(factory, output, path[i + 2]) : _to;
            IBeamSwapPair(BeamSwapLibrary.pairFor(factory, input, output)).swap(
                amount0Out, amount1Out, to, new bytes(0)
            );
        }
    }
    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external virtual override ensure(deadline) returns (uint256[] memory amounts) {
        amounts = BeamSwapLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'BeamSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, BeamSwapLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }
    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external virtual override ensure(deadline) returns (uint256[] memory amounts) {
        amounts = BeamSwapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'BeamSwapRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, BeamSwapLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }
    function swapExactETHForTokens(uint256 amountOutMin, address[] calldata path, address to, uint256 deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint256[] memory amounts)
    {
        require(path[0] == WETH, 'BeamSwapRouter: INVALID_PATH');
        amounts = BeamSwapLibrary.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'BeamSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWGLMR(WETH).deposit{value: amounts[0]}();
        assert(IWGLMR(WETH).transfer(BeamSwapLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
    }
    function swapTokensForExactETH(uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline)
        external
        virtual
        override
        ensure(deadline)
        returns (uint256[] memory amounts)
    {
        require(path[path.length - 1] == WETH, 'BeamSwapRouter: INVALID_PATH');
        amounts = BeamSwapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'BeamSwapRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, BeamSwapLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWGLMR(WETH).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }
    function swapExactTokensForETH(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline)
        external
        virtual
        override
        ensure(deadline)
        returns (uint256[] memory amounts)
    {
        require(path[path.length - 1] == WETH, 'BeamSwapRouter: INVALID_PATH');
        amounts = BeamSwapLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'BeamSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, BeamSwapLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWGLMR(WETH).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }
    function swapETHForExactTokens(uint256 amountOut, address[] calldata path, address to, uint256 deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint256[] memory amounts)
    {
        require(path[0] == WETH, 'BeamSwapRouter: INVALID_PATH');
        amounts = BeamSwapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'BeamSwapRouter: EXCESSIVE_INPUT_AMOUNT');
        IWGLMR(WETH).deposit{value: amounts[0]}();
        assert(IWGLMR(WETH).transfer(BeamSwapLibrary.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 (uint256 i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = BeamSwapLibrary.sortTokens(input, output);
            IBeamSwapPair pair = IBeamSwapPair(BeamSwapLibrary.pairFor(factory, input, output));
            uint256 amountInput;
            uint256 amountOutput;
            { // scope to avoid stack too deep errors
            (uint256 reserve0, uint256 reserve1,) = pair.getReserves();
            (uint256 reserveInput, uint256 reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
            amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput);
            amountOutput = BeamSwapLibrary.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint256 amount0Out, uint256 amount1Out) = input == token0 ? (uint256(0), amountOutput) : (amountOutput, uint256(0));
            address to = i < path.length - 2 ? BeamSwapLibrary.pairFor(factory, output, path[i + 2]) : _to;
            pair.swap(amount0Out, amount1Out, to, new bytes(0));
        }
    }
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external virtual override ensure(deadline) {
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, BeamSwapLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        uint256 balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'BeamSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WETH, 'BeamSwapRouter: INVALID_PATH');
        uint256 amountIn = msg.value;
        IWGLMR(WETH).deposit{value: amountIn}();
        assert(IWGLMR(WETH).transfer(BeamSwapLibrary.pairFor(factory, path[0], path[1]), amountIn));
        uint256 balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'BeamSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    )
        external
        virtual
        override
        ensure(deadline)
    {
        require(path[path.length - 1] == WETH, 'BeamSwapRouter: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, BeamSwapLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint256 amountOut = IERC20(WETH).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'BeamSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWGLMR(WETH).withdraw(amountOut);
        TransferHelper.safeTransferETH(to, amountOut);
    }

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

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

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

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

    function getAmountsIn(uint256 amountOut, address[] memory path)
        public
        view
        virtual
        override
        returns (uint256[] memory amounts)
    {
        return BeamSwapLibrary.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"}]

60c060405234801561001057600080fd5b5060405162004929380380620049298339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6147a4620001856000398061019f5280610d3a5280610d755280610e6c528061109c5280611426528061159e52806119655280611a715280611b275280611bf55280611d4d5280611dd5528061201a52806120955280612144528061221052806122b7528061232b52806128425280612ab55280612b0b5280612b3f5280612bb35280612d535280612ea85280612f30525080610f0c5280610fe35280611162528061119b52806112d652806114c6528061157c52806116ec5280611c9a5280611e075280611f6a528061235d52806125b652806127c752806127f05280612820528061298d5280612ae95280612df85280612f62528061384e52806138915280613b745280613cfa5280614164528061422b52806142ab52506147a46000f3fe60806040526004361061018f5760003560e01c80638803dbee116100d6578063c45a01551161007f578063e8e3370011610059578063e8e3370014610ba1578063f305d71914610c21578063fb3bdb4114610c67576101c8565b8063c45a015514610a62578063d06ca61f14610a77578063ded9382a14610b2e576101c8565b8063af2979eb116100b0578063af2979eb1461092c578063b6f9de951461097f578063baa2abde14610a05576101c8565b80638803dbee1461082d578063ad5c4648146108c5578063ad615dec146108f6576101c8565b80634a25d94a11610138578063791ac94711610112578063791ac947146106d95780637ff36ab51461077157806385f8c259146107f7576101c8565b80634a25d94a146105365780635b0d5984146105ce5780635c11d79514610641576101c8565b80631f00ca74116101695780631f00ca74146103695780632195995c1461042057806338ed17391461049e576101c8565b806302751cec146101cd578063054d50d41461023957806318cbafe514610281576101c8565b366101c857336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101c657fe5b005b600080fd5b3480156101d957600080fd5b50610220600480360360c08110156101f057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610ced565b6040805192835260208301919091528051918290030190f35b34801561024557600080fd5b5061026f6004803603606081101561025c57600080fd5b5080359060208101359060400135610e07565b60408051918252519081900360200190f35b34801561028d57600080fd5b50610319600480360360a08110156102a457600080fd5b8135916020810135918101906060810160408201356401000000008111156102cb57600080fd5b8201836020820111156102dd57600080fd5b803590602001918460208302840111640100000000831117156102ff57600080fd5b91935091506001600160a01b038135169060200135610e1c565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561035557818101518382015260200161033d565b505050509050019250505060405180910390f35b34801561037557600080fd5b506103196004803603604081101561038c57600080fd5b813591908101906040810160208201356401000000008111156103ae57600080fd5b8201836020820111156103c057600080fd5b803590602001918460208302840111640100000000831117156103e257600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061115b945050505050565b34801561042c57600080fd5b50610220600480360361016081101561044457600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611191565b3480156104aa57600080fd5b50610319600480360360a08110156104c157600080fd5b8135916020810135918101906060810160408201356401000000008111156104e857600080fd5b8201836020820111156104fa57600080fd5b8035906020019184602083028401116401000000008311171561051c57600080fd5b91935091506001600160a01b03813516906020013561128b565b34801561054257600080fd5b50610319600480360360a081101561055957600080fd5b81359160208101359181019060608101604082013564010000000081111561058057600080fd5b82018360208201111561059257600080fd5b803590602001918460208302840111640100000000831117156105b457600080fd5b91935091506001600160a01b0381351690602001356113d6565b3480156105da57600080fd5b5061026f60048036036101408110156105f257600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611574565b34801561064d57600080fd5b506101c6600480360360a081101561066457600080fd5b81359160208101359181019060608101604082013564010000000081111561068b57600080fd5b82018360208201111561069d57600080fd5b803590602001918460208302840111640100000000831117156106bf57600080fd5b91935091506001600160a01b038135169060200135611682565b3480156106e557600080fd5b506101c6600480360360a08110156106fc57600080fd5b81359160208101359181019060608101604082013564010000000081111561072357600080fd5b82018360208201111561073557600080fd5b8035906020019184602083028401116401000000008311171561075757600080fd5b91935091506001600160a01b038135169060200135611917565b6103196004803603608081101561078757600080fd5b813591908101906040810160208201356401000000008111156107a957600080fd5b8201836020820111156107bb57600080fd5b803590602001918460208302840111640100000000831117156107dd57600080fd5b91935091506001600160a01b038135169060200135611bad565b34801561080357600080fd5b5061026f6004803603606081101561081a57600080fd5b5080359060208101359060400135611f12565b34801561083957600080fd5b50610319600480360360a081101561085057600080fd5b81359160208101359181019060608101604082013564010000000081111561087757600080fd5b82018360208201111561088957600080fd5b803590602001918460208302840111640100000000831117156108ab57600080fd5b91935091506001600160a01b038135169060200135611f1f565b3480156108d157600080fd5b506108da612018565b604080516001600160a01b039092168252519081900360200190f35b34801561090257600080fd5b5061026f6004803603606081101561091957600080fd5b508035906020810135906040013561203c565b34801561093857600080fd5b5061026f600480360360c081101561094f57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612049565b6101c66004803603608081101561099557600080fd5b813591908101906040810160208201356401000000008111156109b757600080fd5b8201836020820111156109c957600080fd5b803590602001918460208302840111640100000000831117156109eb57600080fd5b91935091506001600160a01b0381351690602001356121ca565b348015610a1157600080fd5b50610220600480360360e0811015610a2857600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612568565b348015610a6e57600080fd5b506108da6127c5565b348015610a8357600080fd5b5061031960048036036040811015610a9a57600080fd5b81359190810190604081016020820135640100000000811115610abc57600080fd5b820183602082011115610ace57600080fd5b80359060200191846020830284011164010000000083111715610af057600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506127e9945050505050565b348015610b3a57600080fd5b506102206004803603610140811015610b5257600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612816565b348015610bad57600080fd5b50610c036004803603610100811015610bc557600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e0013561292a565b60408051938452602084019290925282820152519081900360600190f35b610c03600480360360c0811015610c3757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612a66565b61031960048036036080811015610c7d57600080fd5b81359190810190604081016020820135640100000000811115610c9f57600080fd5b820183602082011115610cb157600080fd5b80359060200191846020830284011164010000000083111715610cd357600080fd5b91935091506001600160a01b038135169060200135612d0b565b6000808242811015610d34576040805162461bcd60e51b8152602060048201526017602482015260008051602061472a833981519152604482015290519081900360640190fd5b610d63897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612568565b9093509150610d7389868561309f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610dd957600080fd5b505af1158015610ded573d6000803e3d6000fd5b50505050610dfb8583613221565b50965096945050505050565b6000610e14848484613319565b949350505050565b60608142811015610e62576040805162461bcd60e51b8152602060048201526017602482015260008051602061472a833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e9c57fe5b905060200201356001600160a01b03166001600160a01b031614610f07576040805162461bcd60e51b815260206004820152601c60248201527f4265616d53776170526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b610f657f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061340992505050565b91508682600184510381518110610f7857fe5b60200260200101511015610fbd5760405162461bcd60e51b815260040180806020018281038252602a8152602001806145af602a913960400191505060405180910390fd5b61105b86866000818110610fcd57fe5b905060200201356001600160a01b0316336110417f00000000000000000000000000000000000000000000000000000000000000008a8a600081811061100f57fe5b905060200201356001600160a01b03168b8b600181811061102c57fe5b905060200201356001600160a01b0316613555565b8560008151811061104e57fe5b602002602001015161362d565b61109a8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061379f915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836001855103815181106110d957fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561111757600080fd5b505af115801561112b573d6000803e3d6000fd5b50505050611150848360018551038151811061114357fe5b6020026020010151613221565b509695505050505050565b60606111887f000000000000000000000000000000000000000000000000000000000000000084846139e5565b90505b92915050565b60008060006111c17f00000000000000000000000000000000000000000000000000000000000000008f8f613555565b90506000876111d0578c6111d4565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561124a57600080fd5b505af115801561125e573d6000803e3d6000fd5b505050506112718f8f8f8f8f8f8f612568565b809450819550505050509b509b9950505050505050505050565b606081428110156112d1576040805162461bcd60e51b8152602060048201526017602482015260008051602061472a833981519152604482015290519081900360640190fd5b61132f7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061340992505050565b9150868260018451038151811061134257fe5b602002602001015110156113875760405162461bcd60e51b815260040180806020018281038252602a8152602001806145af602a913960400191505060405180910390fd5b61139786866000818110610fcd57fe5b6111508287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061379f915050565b6060814281101561141c576040805162461bcd60e51b8152602060048201526017602482015260008051602061472a833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061145657fe5b905060200201356001600160a01b03166001600160a01b0316146114c1576040805162461bcd60e51b815260206004820152601c60248201527f4265616d53776170526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b61151f7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506139e592505050565b9150868260008151811061152f57fe5b60200260200101511115610fbd5760405162461bcd60e51b81526004018080602001828103825260268152602001806146ad6026913960400191505060405180910390fd5b6000806115c27f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613555565b90506000866115d1578b6115d5565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561164b57600080fd5b505af115801561165f573d6000803e3d6000fd5b505050506116718d8d8d8d8d8d612049565b9d9c50505050505050505050505050565b80428110156116c6576040805162461bcd60e51b8152602060048201526017602482015260008051602061472a833981519152604482015290519081900360640190fd5b61173b858560008181106116d657fe5b905060200201356001600160a01b0316336117357f00000000000000000000000000000000000000000000000000000000000000008989600081811061171857fe5b905060200201356001600160a01b03168a8a600181811061102c57fe5b8a61362d565b60008585600019810181811061174d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156117b257600080fd5b505afa1580156117c6573d6000803e3d6000fd5b505050506040513d60208110156117dc57600080fd5b5051604080516020888102828101820190935288825292935061181e929091899189918291850190849080828437600092019190915250889250613b1d915050565b866118d0828888600019810181811061183357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561189857600080fd5b505afa1580156118ac573d6000803e3d6000fd5b505050506040513d60208110156118c257600080fd5b50519063ffffffff613e4816565b101561190d5760405162461bcd60e51b815260040180806020018281038252602a8152602001806145af602a913960400191505060405180910390fd5b5050505050505050565b804281101561195b576040805162461bcd60e51b8152602060048201526017602482015260008051602061472a833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061199557fe5b905060200201356001600160a01b03166001600160a01b031614611a00576040805162461bcd60e51b815260206004820152601c60248201527f4265616d53776170526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b611a10858560008181106116d657fe5b611a4e858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613b1d915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611ab857600080fd5b505afa158015611acc573d6000803e3d6000fd5b505050506040513d6020811015611ae257600080fd5b5051905086811015611b255760405162461bcd60e51b815260040180806020018281038252602a8152602001806145af602a913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611b8b57600080fd5b505af1158015611b9f573d6000803e3d6000fd5b5050505061190d8482613221565b60608142811015611bf3576040805162461bcd60e51b8152602060048201526017602482015260008051602061472a833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611c2a57fe5b905060200201356001600160a01b03166001600160a01b031614611c95576040805162461bcd60e51b815260206004820152601c60248201527f4265616d53776170526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b611cf37f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061340992505050565b91508682600184510381518110611d0657fe5b60200260200101511015611d4b5760405162461bcd60e51b815260040180806020018281038252602a8152602001806145af602a913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611d8757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611dba57600080fd5b505af1158015611dce573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611e337f00000000000000000000000000000000000000000000000000000000000000008989600081811061171857fe5b84600081518110611e4057fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611e9757600080fd5b505af1158015611eab573d6000803e3d6000fd5b505050506040513d6020811015611ec157600080fd5b5051611ec957fe5b611f088287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061379f915050565b5095945050505050565b6000610e14848484613ea0565b60608142811015611f65576040805162461bcd60e51b8152602060048201526017602482015260008051602061472a833981519152604482015290519081900360640190fd5b611fc37f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506139e592505050565b91508682600081518110611fd357fe5b602002602001015111156113875760405162461bcd60e51b81526004018080602001828103825260268152602001806146ad6026913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610e14848484613f90565b6000814281101561208f576040805162461bcd60e51b8152602060048201526017602482015260008051602061472a833981519152604482015290519081900360640190fd5b6120be887f00000000000000000000000000000000000000000000000000000000000000008989893089612568565b604080516370a0823160e01b8152306004820152905191945061214292508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561211157600080fd5b505afa158015612125573d6000803e3d6000fd5b505050506040513d602081101561213b57600080fd5b505161309f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156121a857600080fd5b505af11580156121bc573d6000803e3d6000fd5b505050506111508483613221565b804281101561220e576040805162461bcd60e51b8152602060048201526017602482015260008051602061472a833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168585600081811061224557fe5b905060200201356001600160a01b03166001600160a01b0316146122b0576040805162461bcd60e51b815260206004820152601c60248201527f4265616d53776170526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561231057600080fd5b505af1158015612324573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6123897f00000000000000000000000000000000000000000000000000000000000000008989600081811061171857fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156123d957600080fd5b505af11580156123ed573d6000803e3d6000fd5b505050506040513d602081101561240357600080fd5b505161240b57fe5b60008686600019810181811061241d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561248257600080fd5b505afa158015612496573d6000803e3d6000fd5b505050506040513d60208110156124ac57600080fd5b505160408051602089810282810182019093528982529293506124ee9290918a918a918291850190849080828437600092019190915250899250613b1d915050565b876118d0828989600019810181811061250357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561189857600080fd5b60008082428110156125af576040805162461bcd60e51b8152602060048201526017602482015260008051602061472a833981519152604482015290519081900360640190fd5b60006125dc7f00000000000000000000000000000000000000000000000000000000000000008c8c613555565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561263757600080fd5b505af115801561264b573d6000803e3d6000fd5b505050506040513d602081101561266157600080fd5b5050604080517f89afcb440000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156126c757600080fd5b505af11580156126db573d6000803e3d6000fd5b505050506040513d60408110156126f157600080fd5b5080516020909101519092509050600061270b8e8e61403c565b509050806001600160a01b03168e6001600160a01b03161461272e578183612731565b82825b90975095508a8710156127755760405162461bcd60e51b815260040180806020018281038252602581526020018061474a6025913960400191505060405180910390fd5b898610156127b45760405162461bcd60e51b815260040180806020018281038252602581526020018061458a6025913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111887f00000000000000000000000000000000000000000000000000000000000000008484613409565b60008060006128667f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613555565b9050600087612875578c612879565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156128ef57600080fd5b505af1158015612903573d6000803e3d6000fd5b505050506129158e8e8e8e8e8e610ced565b909f909e509c50505050505050505050505050565b60008060008342811015612973576040805162461bcd60e51b8152602060048201526017602482015260008051602061472a833981519152604482015290519081900360640190fd5b6129818c8c8c8c8c8c61411a565b909450925060006129b37f00000000000000000000000000000000000000000000000000000000000000008e8e613555565b90506129c18d33838861362d565b6129cd8c33838761362d565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612a2557600080fd5b505af1158015612a39573d6000803e3d6000fd5b505050506040513d6020811015612a4f57600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015612aaf576040805162461bcd60e51b8152602060048201526017602482015260008051602061472a833981519152604482015290519081900360640190fd5b612add8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c61411a565b90945092506000612b2f7f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613555565b9050612b3d8b33838861362d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612b9857600080fd5b505af1158015612bac573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612c3157600080fd5b505af1158015612c45573d6000803e3d6000fd5b505050506040513d6020811015612c5b57600080fd5b5051612c6357fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612cbb57600080fd5b505af1158015612ccf573d6000803e3d6000fd5b505050506040513d6020811015612ce557600080fd5b5051925034841015612cfd57612cfd33853403613221565b505096509650969350505050565b60608142811015612d51576040805162461bcd60e51b8152602060048201526017602482015260008051602061472a833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612d8857fe5b905060200201356001600160a01b03166001600160a01b031614612df3576040805162461bcd60e51b815260206004820152601c60248201527f4265616d53776170526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b612e517f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506139e592505050565b91503482600081518110612e6157fe5b60200260200101511115612ea65760405162461bcd60e51b81526004018080602001828103825260268152602001806146ad6026913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612ee257fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612f1557600080fd5b505af1158015612f29573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612f8e7f00000000000000000000000000000000000000000000000000000000000000008989600081811061171857fe5b84600081518110612f9b57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612ff257600080fd5b505af1158015613006573d6000803e3d6000fd5b505050506040513d602081101561301c57600080fd5b505161302457fe5b6130638287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061379f915050565b8160008151811061307057fe5b6020026020010151341115611f0857611f08338360008151811061309057fe5b60200260200101513403613221565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b6020831061314a5780518252601f19909201916020918201910161312b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146131ac576040519150601f19603f3d011682016040523d82523d6000602084013e6131b1565b606091505b50915091508180156131df5750805115806131df57508080602001905160208110156131dc57600080fd5b50515b61321a5760405162461bcd60e51b815260040180806020018281038252602d8152602001806146fd602d913960400191505060405180910390fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061326d5780518252601f19909201916020918201910161324e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146132cf576040519150601f19603f3d011682016040523d82523d6000602084013e6132d4565b606091505b50509050806133145760405162461bcd60e51b815260040180806020018281038252603481526020018061460a6034913960400191505060405180910390fd5b505050565b60008084116133595760405162461bcd60e51b815260040180806020018281038252602a8152602001806146d3602a913960400191505060405180910390fd5b6000831180156133695750600082115b6133a45760405162461bcd60e51b815260040180806020018281038252602781526020018061463e6027913960400191505060405180910390fd5b60006133b8856103e563ffffffff6143c016565b905060006133cc828563ffffffff6143c016565b905060006133f2836133e6886103e863ffffffff6143c016565b9063ffffffff61442c16565b90508082816133fd57fe5b04979650505050505050565b6060600282511015613462576040805162461bcd60e51b815260206004820152601d60248201527f4265616d537761704c6962726172793a20494e56414c49445f50415448000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561347a57600080fd5b506040519080825280602002602001820160405280156134a4578160200160208202803683370190505b50905082816000815181106134b557fe5b60200260200101818152505060005b600183510381101561354d57600080613507878685815181106134e357fe5b60200260200101518786600101815181106134fa57fe5b6020026020010151614484565b9150915061352984848151811061351a57fe5b60200260200101518383613319565b84846001018151811061353857fe5b602090810291909101015250506001016134c4565b509392505050565b6000806000613564858561403c565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527fe31da4209ffcce713230a74b5287fa8ec84797c9e77e1f7cfeccea015cdc97ea609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106136c75780518252601f1990920191602091820191016136a8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613729576040519150601f19603f3d011682016040523d82523d6000602084013e61372e565b606091505b509150915081801561375c57508051158061375c575080806020019051602081101561375957600080fd5b50515b6137975760405162461bcd60e51b81526004018080602001828103825260318152602001806145d96031913960400191505060405180910390fd5b505050505050565b60005b60018351038110156139df576000808483815181106137bd57fe5b60200260200101518584600101815181106137d457fe5b60200260200101519150915060006137ec838361403c565b509050600087856001018151811061380057fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461382e57826000613832565b6000835b91509150600060028a51038810613849578861388a565b61388a7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061387d57fe5b6020026020010151613555565b90506138b77f00000000000000000000000000000000000000000000000000000000000000008888613555565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156138f4576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561396557818101518382015260200161394d565b50505050905090810190601f1680156139925780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156139b457600080fd5b505af11580156139c8573d6000803e3d6000fd5b5050600190990198506137a2975050505050505050565b50505050565b6060600282511015613a3e576040805162461bcd60e51b815260206004820152601d60248201527f4265616d537761704c6962726172793a20494e56414c49445f50415448000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613a5657600080fd5b50604051908082528060200260200182016040528015613a80578160200160208202803683370190505b5090508281600183510381518110613a9457fe5b60209081029190910101528151600019015b801561354d57600080613ad687866001860381518110613ac257fe5b60200260200101518786815181106134fa57fe5b91509150613af8848481518110613ae957fe5b60200260200101518383613ea0565b846001850381518110613b0757fe5b6020908102919091010152505060001901613aa6565b60005b600183510381101561331457600080848381518110613b3b57fe5b6020026020010151858460010181518110613b5257fe5b6020026020010151915091506000613b6a838361403c565b5090506000613b9a7f00000000000000000000000000000000000000000000000000000000000000008585613555565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613bdb57600080fd5b505afa158015613bef573d6000803e3d6000fd5b505050506040513d6060811015613c0557600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506000806001600160a01b038a811690891614613c42578284613c45565b83835b91509150613ca3828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561189857600080fd5b9550613cb0868383613319565b945050505050600080856001600160a01b0316886001600160a01b031614613cda57826000613cde565b6000835b91509150600060028c51038a10613cf5578a613d29565b613d297f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061387d57fe5b60408051600080825260208201928390527f022c0d9f00000000000000000000000000000000000000000000000000000000835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613dcc578181015183820152602001613db4565b50505050905090810190601f168015613df95780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613e1b57600080fd5b505af1158015613e2f573d6000803e3d6000fd5b50506001909b019a50613b209950505050505050505050565b8082038281111561118b576040805162461bcd60e51b815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411613ee05760405162461bcd60e51b815260040180806020018281038252602b81526020018061455f602b913960400191505060405180910390fd5b600083118015613ef05750600082115b613f2b5760405162461bcd60e51b815260040180806020018281038252602781526020018061463e6027913960400191505060405180910390fd5b6000613f4f6103e8613f43868863ffffffff6143c016565b9063ffffffff6143c016565b90506000613f696103e5613f43868963ffffffff613e4816565b9050613f866001828481613f7957fe5b049063ffffffff61442c16565b9695505050505050565b6000808411613fd05760405162461bcd60e51b81526004018080602001828103825260248152602001806146656024913960400191505060405180910390fd5b600083118015613fe05750600082115b61401b5760405162461bcd60e51b815260040180806020018281038252602781526020018061463e6027913960400191505060405180910390fd5b8261402c858463ffffffff6143c016565b8161403357fe5b04949350505050565b600080826001600160a01b0316846001600160a01b031614156140905760405162461bcd60e51b81526004018080602001828103825260248152602001806146896024913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b0316106140b05782846140b3565b83835b90925090506001600160a01b038216614113576040805162461bcd60e51b815260206004820152601d60248201527f4265616d537761704c6962726172793a205a45524f5f41444452455353000000604482015290519081900360640190fd5b9250929050565b604080517fe6a439050000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b1580156141ad57600080fd5b505afa1580156141c1573d6000803e3d6000fd5b505050506040513d60208110156141d757600080fd5b50516001600160a01b031614156142a357604080517fc9c653960000000000000000000000000000000000000000000000000000000081526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561427657600080fd5b505af115801561428a573d6000803e3d6000fd5b505050506040513d60208110156142a057600080fd5b50505b6000806142d17f00000000000000000000000000000000000000000000000000000000000000008b8b614484565b915091508160001480156142e3575080155b156142f3578793508692506143b3565b6000614300898484613f90565b905087811161435357858110156143485760405162461bcd60e51b815260040180806020018281038252602581526020018061458a6025913960400191505060405180910390fd5b8894509250826143b1565b6000614360898486613f90565b90508981111561436c57fe5b878110156143ab5760405162461bcd60e51b815260040180806020018281038252602581526020018061474a6025913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806143db575050808202828282816143d857fe5b04145b61118b576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b8082018281101561118b576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b6000806000614493858561403c565b5090506144a1868686613555565b506000806144b0888888613555565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156144e857600080fd5b505afa1580156144fc573d6000803e3d6000fd5b505050506040513d606081101561451257600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b038781169084161461454c57808261454f565b81815b9099909850965050505050505056fe4265616d537761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e544265616d53776170526f757465723a20494e53554646494349454e545f425f414d4f554e544265616d53776170526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c65644265616d537761704c6962726172793a20494e53554646494349454e545f4c49515549444954594265616d537761704c6962726172793a20494e53554646494349454e545f414d4f554e544265616d537761704c6962726172793a204944454e544943414c5f4144445245535345534265616d53776170526f757465723a204558434553534956455f494e5055545f414d4f554e544265616d537761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e545472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c65644265616d53776170526f757465723a20455850495245440000000000000000004265616d53776170526f757465723a20494e53554646494349454e545f415f414d4f554e54a2646970667358221220d8f539e12b0e54de34727f5f76a5a5d6f9953e5492a7f70461ec16865b11f7e464736f6c63430006060033000000000000000000000000985bca32293a7a496300a48081947321177a86fd000000000000000000000000acc15dc74880c9944775448304b263d191c6077f

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

000000000000000000000000985bca32293a7a496300a48081947321177a86fd000000000000000000000000acc15dc74880c9944775448304b263d191c6077f

-----Decoded View---------------
Arg [0] : _factory (address): 0x985bca32293a7a496300a48081947321177a86fd
Arg [1] : _WETH (address): 0xacc15dc74880c9944775448304b263d191c6077f

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000985bca32293a7a496300a48081947321177a86fd
Arg [1] : 000000000000000000000000acc15dc74880c9944775448304b263d191c6077f


Deployed ByteCode Sourcemap

17061:18900:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17544:10;-1:-1:-1;;;;;17558:4:0;17544:18;;17537:26;;;;17061:18900;;12:1:-1;9;2:12;21778:692:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21778:692:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21778:692:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;34873:273;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34873:273:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34873:273:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;29096:859;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29096:859:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29096:859:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;29096:859:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29096:859: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;29096:859:0;;-1:-1:-1;29096:859:0;-1:-1:-1;;;;;;29096:859: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;29096:859:0;;;;;;;;;;;;;;;;;35700:258;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35700:258:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;35700:258:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;35700:258:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;35700:258: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;35700:258:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;35700:258:0;;-1:-1:-1;35700:258:0;;-1:-1:-1;;;;;35700:258:0:i;22476:699::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22476:699:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22476:699:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;26279:637::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26279:637:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26279:637:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;26279:637:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26279:637: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;26279:637:0;;-1:-1:-1;26279:637:0;-1:-1:-1;;;;;;26279:637:0;;;;;;;;:::i;28253:837::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28253:837:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28253:837:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;28253:837:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28253:837: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;28253:837:0;;-1:-1:-1;28253:837:0;-1:-1:-1;;;;;;28253:837:0;;;;;;;;:::i;24673:737::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24673:737:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;24673:737:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32172:724::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32172:724:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32172:724:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;32172:724:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32172:724: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;32172:724:0;;-1:-1:-1;32172:724:0;-1:-1:-1;;;;;;32172:724:0;;;;;;;;:::i;33769:853::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33769:853:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;33769:853:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;33769:853:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33769:853: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;33769:853:0;;-1:-1:-1;33769:853:0;-1:-1:-1;;;;;;33769:853:0;;;;;;;;:::i;27543:704::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27543:704:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;27543:704:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27543:704: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;27543:704:0;;-1:-1:-1;27543:704:0;-1:-1:-1;;;;;;27543:704:0;;;;;;;;:::i;35154:272::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35154:272:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35154:272:0;;;;;;;;;;;;:::i;26922:615::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26922:615:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26922:615:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;26922:615:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26922:615: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;26922:615:0;;-1:-1:-1;26922:615:0;-1:-1:-1;;;;;;26922:615:0;;;;;;;;:::i;17196:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17196:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;17196:38:0;;;;;;;;;;;;;;34666:199;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34666:199:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34666:199:0;;;;;;;;;;;;:::i;23951:716::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23951:716:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23951:716:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32902:861::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32902:861:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;32902:861:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32902:861: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;32902:861:0;;-1:-1:-1;32902:861:0;-1:-1:-1;;;;;;32902:861:0;;;;;;;;:::i;20889:883::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20889:883:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20889:883:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17148:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17148:41:0;;;:::i;35434:258::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35434:258:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;35434:258:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;35434:258:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;35434:258: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;35434:258:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;35434:258:0;;-1:-1:-1;35434:258:0;;-1:-1:-1;;;;;35434:258:0:i;23181:691::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23181:691:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23181:691:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19085:760::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19085:760:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19085:760:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;19851:995;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19851:995:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29961:817::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29961:817:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;29961:817:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29961:817: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;29961:817:0;;-1:-1:-1;29961:817:0;-1:-1:-1;;;;;;29961:817:0;;;;;;;;:::i;21778:692::-;22027:19;22048:17;22008:8;17308:15;17296:8;:27;;17288:63;;;;;-1:-1:-1;;;17288:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17288:63:0;;;;;;;;;;;;;;;22105:196:::1;22135:5;22155:4;22174:9;22198:14;22227:12;22262:4;22282:8;22105:15;:196::i;:::-;22078:223:::0;;-1:-1:-1;22078:223:0;-1:-1:-1;22312:51:0::1;22340:5:::0;22347:2;22078:223;22312:27:::1;:51::i;:::-;22381:4;-1:-1:-1::0;;;;;22374:21:0::1;;22396:9;22374:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22374:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22374:32:0;;;;22417:45;22448:2;22452:9;22417:30;:45::i;:::-;21778:692:::0;;;;;;;;;;:::o;34873:273::-;35035:17;35077:61;35106:8;35116:9;35127:10;35077:28;:61::i;:::-;35070:68;34873:273;-1:-1:-1;;;;34873:273:0:o;29096:859::-;29319:24;29291:8;17308:15;17296:8;:27;;17288:63;;;;;-1:-1:-1;;;17288:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17288:63:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;29394:4:0::1;29369:29;:4:::0;;-1:-1:-1;;29374:15:0;;29369:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;29369:21:0::1;-1:-1:-1::0;;;;;29369:29:0::1;;29361:70;;;::::0;;-1:-1:-1;;;29361:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;29452:54;29482:7;29491:8;29501:4;;29452:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29452:29:0::1;::::0;-1:-1:-1;;;29452:54:0:i:1;:::-;29442:64;;29556:12;29525:7;29550:1;29533:7;:14;:18;29525:27;;;;;;;;;;;;;;:43;;29517:98;;;;-1:-1:-1::0;;;29517:98:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29626:140;29672:4;;29677:1;29672:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29672:7:0::1;29681:10;29693:50;29717:7;29726:4;;29731:1;29726:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29726:7:0::1;29735:4;;29740:1;29735:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29735:7:0::1;29693:23;:50::i;:::-;29745:7;29753:1;29745:10;;;;;;;;;;;;;;29626:31;:140::i;:::-;29777:35;29783:7;29792:4;;29777:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29806:4:0::1;::::0;-1:-1:-1;29777:5:0::1;::::0;-1:-1:-1;;29777:35:0:i:1;:::-;29830:4;-1:-1:-1::0;;;;;29823:21:0::1;;29845:7;29870:1;29853:7;:14;:18;29845:27;;;;;;;;;;;;;;29823:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29823:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29823:50:0;;;;29884:63;29915:2;29919:7;29944:1;29927:7;:14;:18;29919:27;;;;;;;;;;;;;;29884:30;:63::i;:::-;29096:859:::0;;;;;;;;;:::o;35700:258::-;35847:24;35896:54;35925:7;35934:9;35945:4;35896:28;:54::i;:::-;35889:61;;35700:258;;;;;:::o;22476:699::-;22794:15;22811;22839:12;22854:48;22878:7;22887:6;22895;22854:23;:48::i;:::-;22839:63;;22913:13;22929:10;:36;;22956:9;22929:36;;;-1:-1:-1;;22929:36:0;22976:79;;;-1:-1:-1;;;22976:79:0;;23003:10;22976:79;;;;23023:4;22976:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22913:52;;-1:-1:-1;;;;;;22976:26:0;;;;;:79;;;;;-1:-1:-1;;22976:79:0;;;;;;;;-1:-1:-1;22976:26:0;:79;;;2:2:-1;;;;27:1;24;17:12;2:2;22976:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22976:79:0;;;;23087:80;23103:6;23111;23119:9;23130:10;23142;23154:2;23158:8;23087:15;:80::i;:::-;23066:101;;;;;;;;22476:699;;;;;;;;;;;;;;;;:::o;26279:637::-;26512:24;26493:8;17308:15;17296:8;:27;;17288:63;;;;;-1:-1:-1;;;17288:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17288:63:0;;;;;;;;;;;;;;;26559:54:::1;26589:7;26598:8;26608:4;;26559:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26559:29:0::1;::::0;-1:-1:-1;;;26559:54:0:i:1;:::-;26549:64;;26663:12;26632:7;26657:1;26640:7;:14;:18;26632:27;;;;;;;;;;;;;;:43;;26624:98;;;;-1:-1:-1::0;;;26624:98:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26733:140;26779:4;;26784:1;26779:7;;;;;;26733:140;26884:24;26890:7;26899:4;;26884:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26905:2:0;;-1:-1:-1;26884:5:0::1;::::0;-1:-1:-1;;26884:24:0:i:1;28253:837::-:0;28476:24;28448:8;17308:15;17296:8;:27;;17288:63;;;;;-1:-1:-1;;;17288:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17288:63:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28551:4:0::1;28526:29;:4:::0;;-1:-1:-1;;28531:15:0;;28526:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28526:21:0::1;-1:-1:-1::0;;;;;28526:29:0::1;;28518:70;;;::::0;;-1:-1:-1;;;28518:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28609:54;28638:7;28647:9;28658:4;;28609:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28609:28:0::1;::::0;-1:-1:-1;;;28609:54:0:i:1;:::-;28599:64;;28696:11;28682:7;28690:1;28682:10;;;;;;;;;;;;;;:25;;28674:76;;;;-1:-1:-1::0;;;28674:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24673:737:::0;25003:17;25033:12;25048:45;25072:7;25081:5;25088:4;25048:23;:45::i;:::-;25033:60;;25104:13;25120:10;:36;;25147:9;25120:36;;;-1:-1:-1;;25120:36:0;25167:79;;;-1:-1:-1;;;25167:79:0;;25194:10;25167:79;;;;25214:4;25167:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25104:52;;-1:-1:-1;;;;;;25167:26:0;;;;;:79;;;;;-1:-1:-1;;25167:79:0;;;;;;;;-1:-1:-1;25167:26:0;:79;;;2:2:-1;;;;27:1;24;17:12;2:2;25167:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25167:79:0;;;;25269:133;25331:5;25338:9;25349:14;25365:12;25379:2;25383:8;25269:47;:133::i;:::-;25257:145;24673:737;-1:-1:-1;;;;;;;;;;;;;24673:737:0:o;32172:724::-;32415:8;17308:15;17296:8;:27;;17288:63;;;;;-1:-1:-1;;;17288:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17288:63:0;;;;;;;;;;;;;;;32436:138:::1;32482:4;;32487:1;32482:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32482:7:0::1;32491:10;32503:50;32527:7;32536:4;;32541:1;32536:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32536:7:0::1;32545:4;;32550:1;32545:7;;;;;;32503:50;32555:8;32436:31;:138::i;:::-;32585:21;32616:4:::0;;-1:-1:-1;;32621:15:0;;32616:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32616:21:0::1;-1:-1:-1::0;;;;;32609:39:0::1;;32649:2;32609:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32609:43:0::1;-1:-1:-1::0;;;;;32609:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32609:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32609:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32609:43:0;32663:44:::1;::::0;;32609:43:::1;32663:44:::0;;::::1;::::0;;;;;;;;;;;32609:43;;-1:-1:-1;32663:44:0::1;::::0;;;32698:4;;;;;;32663:44;::::1;::::0;32698:4;;32663:44;32698:4;32663:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32704:2:0;;-1:-1:-1;32663:34:0::1;::::0;-1:-1:-1;;32663:44:0:i:1;:::-;32806:12:::0;32740:62:::1;32788:13:::0;32747:4;;-1:-1:-1;;32752:15:0;;32747:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32747:21:0::1;-1:-1:-1::0;;;;;32740:39:0::1;;32780:2;32740:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32740:43:0::1;-1:-1:-1::0;;;;;32740:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32740:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32740:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32740:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;32718:170;;;;-1:-1:-1::0;;;32718:170:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17362:1;32172:724:::0;;;;;;;:::o;33769:853::-;34045:8;17308:15;17296:8;:27;;17288:63;;;;;-1:-1:-1;;;17288:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17288:63:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;34104:4:0::1;34079:29;:4:::0;;-1:-1:-1;;34084:15:0;;34079:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;34079:21:0::1;-1:-1:-1::0;;;;;34079:29:0::1;;34071:70;;;::::0;;-1:-1:-1;;;34071:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;34152:138;34198:4;;34203:1;34198:7;;;;;;34152:138;34301:55;34336:4;;34301:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;34350:4:0::1;::::0;-1:-1:-1;34301:34:0::1;::::0;-1:-1:-1;;34301:55:0:i:1;:::-;34387:37;::::0;;-1:-1:-1;;;34387:37:0;;34418:4:::1;34387:37;::::0;::::1;::::0;;;34367:17:::1;::::0;-1:-1:-1;;;;;34394:4:0::1;34387:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;34387:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34387:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;34387:37:0;;-1:-1:-1;34443:25:0;;::::1;;34435:80;;;;-1:-1:-1::0;;;34435:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34533:4;-1:-1:-1::0;;;;;34526:21:0::1;;34548:9;34526:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34526:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34526:32:0;;;;34569:45;34600:2;34604:9;34569:30;:45::i;27543:704::-:0;27765:24;27737:8;17308:15;17296:8;:27;;17288:63;;;;;-1:-1:-1;;;17288:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17288:63:0;;;;;;;;;;;;;;;27826:4:::1;-1:-1:-1::0;;;;;27815:15:0::1;:4;;27820:1;27815:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27815:7:0::1;-1:-1:-1::0;;;;;27815:15:0::1;;27807:56;;;::::0;;-1:-1:-1;;;27807:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27884:55;27914:7;27923:9;27934:4;;27884:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27884:29:0::1;::::0;-1:-1:-1;;;27884:55:0:i:1;:::-;27874:65;;27989:12;27958:7;27983:1;27966:7;:14;:18;27958:27;;;;;;;;;;;;;;:43;;27950:98;;;;-1:-1:-1::0;;;27950:98:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28066:4;-1:-1:-1::0;;;;;28059:20:0::1;;28087:7;28095:1;28087:10;;;;;;;;;;;;;;28059:41;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28059:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28059:41:0;;;;;28125:4;-1:-1:-1::0;;;;;28118:21:0::1;;28140:50;28164:7;28173:4;;28178:1;28173:7;;;;;;28140:50;28192:7;28200:1;28192:10;;;;;;;;;;;;;;28118:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;28118:85:0::1;-1:-1:-1::0;;;;;28118:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28118:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28118:85:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28118:85:0;28111:93:::1;;;;28215:24;28221:7;28230:4;;28215:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28236:2:0;;-1:-1:-1;28215:5:0::1;::::0;-1:-1:-1;;28215:24:0:i:1;:::-;27543:704:::0;;;;;;;;:::o;35154:272::-;35316:16;35357:61;35385:9;35396;35407:10;35357:27;:61::i;26922:615::-;27155:24;27136:8;17308:15;17296:8;:27;;17288:63;;;;;-1:-1:-1;;;17288:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17288:63:0;;;;;;;;;;;;;;;27202:54:::1;27231:7;27240:9;27251:4;;27202:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27202:28:0::1;::::0;-1:-1:-1;;;27202:54:0:i:1;:::-;27192:64;;27289:11;27275:7;27283:1;27275:10;;;;;;;;;;;;;;:25;;27267:76;;;;-1:-1:-1::0;;;27267:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17196:38:::0;;;:::o;34666:199::-;34772:15;34807:50;34829:7;34838:8;34848;34807:21;:50::i;23951:716::-;24229:17;24210:8;17308:15;17296:8;:27;;17288:63;;;;;-1:-1:-1;;;17288:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17288:63:0;;;;;;;;;;;;;;;24275:196:::1;24305:5;24325:4;24344:9;24368:14;24397:12;24432:4;24452:8;24275:15;:196::i;:::-;24521:38;::::0;;-1:-1:-1;;;24521:38:0;;24553:4:::1;24521:38;::::0;::::1;::::0;;;24259:212;;-1:-1:-1;24482:78:0::1;::::0;-1:-1:-1;24510:5:0;;24517:2;;-1:-1:-1;;;;;24521: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;24521:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24521:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;24521:38:0;24482:27:::1;:78::i;:::-;24578:4;-1:-1:-1::0;;;;;24571:21:0::1;;24593:9;24571:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24571:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24571:32:0;;;;24614:45;24645:2;24649:9;24614:30;:45::i;32902:861::-:0;33168:8;17308:15;17296:8;:27;;17288:63;;;;;-1:-1:-1;;;17288:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17288:63:0;;;;;;;;;;;;;;;33213:4:::1;-1:-1:-1::0;;;;;33202:15:0::1;:4;;33207:1;33202:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;33202:7:0::1;-1:-1:-1::0;;;;;33202:15:0::1;;33194:56;;;::::0;;-1:-1:-1;;;33194:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;33261:16;33280:9;33261:28;;33307:4;-1:-1:-1::0;;;;;33300:20:0::1;;33328:8;33300:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33300:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33300:39:0;;;;;33364:4;-1:-1:-1::0;;;;;33357:21:0::1;;33379:50;33403:7;33412:4;;33417:1;33412:7;;;;;;33379:50;33431:8;33357:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;33357:83:0::1;-1:-1:-1::0;;;;;33357:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33357:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33357:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33357:83:0;33350:91:::1;;;;33452:21;33483:4:::0;;-1:-1:-1;;33488:15:0;;33483:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33483:21:0::1;-1:-1:-1::0;;;;;33476:39:0::1;;33516:2;33476:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;33476:43:0::1;-1:-1:-1::0;;;;;33476:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33476:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33476:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33476:43:0;33530:44:::1;::::0;;33476:43:::1;33530:44:::0;;::::1;::::0;;;;;;;;;;;33476:43;;-1:-1:-1;33530:44:0::1;::::0;;;33565:4;;;;;;33530:44;::::1;::::0;33565:4;;33530:44;33565:4;33530:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33571:2:0;;-1:-1:-1;33530:34:0::1;::::0;-1:-1:-1;;33530:44:0:i:1;:::-;33673:12:::0;33607:62:::1;33655:13:::0;33614:4;;-1:-1:-1;;33619:15:0;;33614:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33614:21:0::1;-1:-1:-1::0;;;;;33607:39:0::1;;33647:2;33607:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;33607:43:0::1;-1:-1:-1::0;;;;;33607:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;20889:883:0::0;21155:15;21172;21136:8;17308:15;17296:8;:27;;17288:63;;;;;-1:-1:-1;;;17288:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17288:63:0;;;;;;;;;;;;;;;21200:12:::1;21215:48;21239:7;21248:6;21256;21215:23;:48::i;:::-;21274:61;::::0;;-1:-1:-1;;;21274:61:0;;21307:10:::1;21274:61;::::0;::::1;::::0;-1:-1:-1;;;;;21274:32:0;::::1;:61:::0;;;;;;;;;;;;;;21200:63;;-1:-1:-1;21274:32:0;;::::1;::::0;:61;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;21274:32:0;:61;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;21274:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21274:61:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;21409:28:0::1;::::0;;;;;-1:-1:-1;;;;;21409:28:0;;::::1;;::::0;::::1;::::0;;;21373:15:::1;::::0;;;21409:24;;::::1;::::0;::::1;::::0;:28;;;;;;;;;;;21373:15;21409:24;:28;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;21409:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21409:28:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;21409:28:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;21409:28:0;-1:-1:-1;21449:14:0::1;21468:42;21495:6:::0;21503;21468:26:::1;:42::i;:::-;21448:62;;;21552:6;-1:-1:-1::0;;;;;21542:16:0::1;:6;-1:-1:-1::0;;;;;21542:16:0::1;;:58;;21583:7;21592;21542:58;;;21562:7;21571;21542:58;21521:79:::0;;-1:-1:-1;21521:79:0;-1:-1:-1;21619:21:0;;::::1;;21611:71;;;;-1:-1:-1::0;;;21611:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21712:10;21701:7;:21;;21693:71;;;;-1:-1:-1::0;;;21693:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17362:1;;;;20889:883:::0;;;;;;;;;;;:::o;17148:41::-;;;:::o;35434:258::-;35581:24;35630:54;35660:7;35669:8;35679:4;35630:29;:54::i;23181:691::-;23482:19;23503:17;23533:12;23548:45;23572:7;23581:5;23588:4;23548:23;:45::i;:::-;23533:60;;23604:13;23620:10;:36;;23647:9;23620:36;;;-1:-1:-1;;23620:36:0;23667:79;;;-1:-1:-1;;;23667:79:0;;23694:10;23667:79;;;;23714:4;23667:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23604:52;;-1:-1:-1;;;;;;23667:26:0;;;;;:79;;;;;-1:-1:-1;;23667:79:0;;;;;;;;-1:-1:-1;23667:26:0;:79;;;2:2:-1;;;;27:1;24;17:12;2:2;23667:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23667:79:0;;;;23784:80;23803:5;23810:9;23821:14;23837:12;23851:2;23855:8;23784:18;:80::i;:::-;23757:107;;;;-1:-1:-1;23181:691:0;-1:-1:-1;;;;;;;;;;;;;23181:691:0:o;19085:760::-;19388:15;19405;19422:17;19369:8;17308:15;17296:8;:27;;17288:63;;;;;-1:-1:-1;;;17288:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17288:63:0;;;;;;;;;;;;;;;19473:85:::1;19487:6;19495;19503:14;19519;19535:10;19547;19473:13;:85::i;:::-;19452:106:::0;;-1:-1:-1;19452:106:0;-1:-1:-1;19569:12:0::1;19584:48;19608:7;19617:6:::0;19625;19584:23:::1;:48::i;:::-;19569:63;;19643:66;19675:6;19683:10;19695:4;19701:7;19643:31;:66::i;:::-;19720;19752:6;19760:10;19772:4;19778:7;19720:31;:66::i;:::-;19823:4;-1:-1:-1::0;;;;;19809:24:0::1;;19834:2;19809:28;;;;;;;;;;;;;-1:-1:-1::0;;;;;19809:28:0::1;-1:-1:-1::0;;;;;19809:28:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19809:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19809:28:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19809:28:0;19085:760;;;;-1:-1:-1;19809:28:0;;-1:-1:-1;19085:760:0;;-1:-1:-1;;;;;;;;;19085:760:0:o;19851:995::-;20116:19;20137:17;20156;20097:8;17308:15;17296:8;:27;;17288:63;;;;;-1:-1:-1;;;17288:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17288:63:0;;;;;;;;;;;;;;;20213:176:::1;20241:5;20261:4;20280:18;20313:9;20337:14;20366:12;20213:13;:176::i;:::-;20186:203:::0;;-1:-1:-1;20186:203:0;-1:-1:-1;20400:12:0::1;20415:45;20439:7;20448:5:::0;20455:4:::1;20415:23;:45::i;:::-;20400:60;;20471:69;20503:5;20510:10;20522:4;20528:11;20471:31;:69::i;:::-;20558:4;-1:-1:-1::0;;;;;20551:20:0::1;;20579:9;20551:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20551:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20551:40:0;;;;;20616:4;-1:-1:-1::0;;;;;20609:21:0::1;;20631:4;20637:9;20609:38;;;;;;;;;;;;;-1:-1:-1::0;;;;;20609:38:0::1;-1:-1:-1::0;;;;;20609:38:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20609:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20609:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20609:38:0;20602:46:::1;;;;20685:4;-1:-1:-1::0;;;;;20671:24:0::1;;20696:2;20671:28;;;;;;;;;;;;;-1:-1:-1::0;;;;;20671:28:0::1;-1:-1:-1::0;;;;;20671:28:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20671:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20671:28:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20671:28:0;;-1:-1:-1;20750:9:0::1;:21:::0;-1:-1:-1;20746:92:0::1;;;20773:65;20804:10;20828:9;20816;:21;20773:30;:65::i;:::-;17362:1;19851:995:::0;;;;;;;;;;;:::o;29961:817::-;30180:24;30152:8;17308:15;17296:8;:27;;17288:63;;;;;-1:-1:-1;;;17288:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17288:63:0;;;;;;;;;;;;;;;30241:4:::1;-1:-1:-1::0;;;;;30230:15:0::1;:4;;30235:1;30230:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30230:7:0::1;-1:-1:-1::0;;;;;30230:15:0::1;;30222:56;;;::::0;;-1:-1:-1;;;30222:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;30299:54;30328:7;30337:9;30348:4;;30299:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30299:28:0::1;::::0;-1:-1:-1;;;30299:54:0:i:1;:::-;30289:64;;30386:9;30372:7;30380:1;30372:10;;;;;;;;;;;;;;:23;;30364:74;;;;-1:-1:-1::0;;;30364:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30456:4;-1:-1:-1::0;;;;;30449:20:0::1;;30477:7;30485:1;30477:10;;;;;;;;;;;;;;30449:41;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30449:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30449:41:0;;;;;30515:4;-1:-1:-1::0;;;;;30508:21:0::1;;30530:50;30554:7;30563:4;;30568:1;30563:7;;;;;;30530:50;30582:7;30590:1;30582:10;;;;;;;;;;;;;;30508:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;30508:85:0::1;-1:-1:-1::0;;;;;30508:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30508:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30508:85:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30508:85:0;30501:93:::1;;;;30605:24;30611:7;30620:4;;30605:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30626:2:0;;-1:-1:-1;30605:5:0::1;::::0;-1:-1:-1;;30605:24:0:i:1;:::-;30692:7;30700:1;30692:10;;;;;;;;;;;;;;30680:9;:22;30676:94;;;30704:66;30735:10;30759:7;30767:1;30759:10;;;;;;;;;;;;;;30747:9;:22;30704:30;:66::i;1535:449::-:0;1767:45;;;-1:-1:-1;;;;;1767:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1767:45:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;1767:45:0;179:29:-1;160:49;;1756:57:0;;;;1721:12;;1735:17;;1756:10;;;;1767:45;1756:57;;;25:18:-1;1756: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;;;1756: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;;1720:93:0;;;;1846:7;:57;;;;-1:-1:-1;1858:11:0;;:16;;:44;;;1889:4;1878:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1878:24:0;1858:44;1824:152;;;;-1:-1:-1;;;1824:152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1535:449;;;;;:::o;2498:217::-;2611:12;;;2571;2611;;;;;;;;;-1:-1:-1;;;;;2589:7:0;;;2604:5;;2589:35;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2589:35:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;2570:54:0;;;2643:7;2635:72;;;;-1:-1:-1;;;2635:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2498:217;;;:::o;13369:536::-;13471:17;13520:1;13509:8;:12;13501:67;;;;-1:-1:-1;;;13501:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13599:1;13587:9;:13;:31;;;;;13617:1;13604:10;:14;13587:31;13579:83;;;;-1:-1:-1;;;13579:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13673:23;13699:17;:8;13712:3;13699:17;:12;:17;:::i;:::-;13673:43;-1:-1:-1;13727:17:0;13747:31;13673:43;13767:10;13747:31;:19;:31;:::i;:::-;13727:51;-1:-1:-1;13789:19:0;13811:40;13835:15;13811:19;:9;13825:4;13811:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;13789:62;;13886:11;13874:9;:23;;;;;;;13369:536;-1:-1:-1;;;;;;;13369:536:0:o;14596:528::-;14700:24;14760:1;14745:4;:11;:16;;14737:58;;;;;-1:-1:-1;;;14737:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14830:4;:11;14816:26;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14816:26:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14816:26:0;;14806:36;;14866:8;14853:7;14861:1;14853:10;;;;;;;;;;;;;:21;;;;;14890:9;14885:232;14919:1;14905:4;:11;:15;14901:1;:19;14885:232;;;14943:17;14962:18;14984:42;14996:7;15005:4;15010:1;15005:7;;;;;;;;;;;;;;15014:4;15019:1;15023;15019:5;15014:11;;;;;;;;;;;;;;14984;:42::i;:::-;14942:84;;;;15058:47;15071:7;15079:1;15071:10;;;;;;;;;;;;;;15083:9;15094:10;15058:12;:47::i;:::-;15041:7;15049:1;15053;15049:5;15041:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;14922:3:0;;14885:232;;;;14596:528;;;;;:::o;11819:481::-;11908:12;11934:14;11950;11968:26;11979:6;11987;11968:10;:26::i;:::-;12135:32;;;-1:-1:-1;;12135:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;12135:32:0;;;;;12125:43;;;;;;12038:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;12038:251:0;;;;;;;12028:262;;;;;;;;;11819:481;-1:-1:-1;;;;;11819:481:0:o;1992:498::-;2263:51;;;-1:-1:-1;;;;;2263:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2263:51:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;-1:-1;;;179:29;160:49;;2252:63:0;;;;2217:12;;2231:17;;2252:10;;;;2263:51;2252:63;;;25:18:-1;2252: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;;;2252: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;;2216:99:0;;;;2348:7;:57;;;;-1:-1:-1;2360:11:0;;:16;;:44;;;2391:4;2380:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2380:24:0;2360:44;2326:156;;;;-1:-1:-1;;;2326:156:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1992:498;;;;;;:::o;25521:752::-;25631:9;25626:640;25660:1;25646:4;:11;:15;25642:1;:19;25626:640;;;25684:13;25699:14;25718:4;25723:1;25718:7;;;;;;;;;;;;;;25727:4;25732:1;25736;25732:5;25727:11;;;;;;;;;;;;;;25683:56;;;;25755:14;25774:41;25801:5;25808:6;25774:26;:41::i;:::-;25754:61;;;25830:17;25850:7;25858:1;25862;25858:5;25850:14;;;;;;;;;;;;;;25830:34;;25880:18;25900;25931:6;-1:-1:-1;;;;;25922:15:0;:5;-1:-1:-1;;;;;25922:15:0;;:67;;25967:9;25986:1;25922:67;;;25949:1;25953:9;25922:67;25879:110;;;;26004:10;26035:1;26021:4;:11;:15;26017:1;:19;:81;;26095:3;26017:81;;;26039:53;26063:7;26072:6;26080:4;26085:1;26089;26085:5;26080:11;;;;;;;;;;;;;;26039:23;:53::i;:::-;26004:94;;26127:47;26151:7;26160:5;26167:6;26127:23;:47::i;:::-;-1:-1:-1;;;;;26113:67:0;;26199:10;26211;26223:2;26237:1;26227:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;26227:12:0;87:42:-1;143:17;;-1:-1;26227:12:0;;26113:141;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26113:141:0;-1:-1:-1;;;;;26113:141: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;26113:141:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26113:141:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;25663:3:0;;;;;-1:-1:-1;25626:640:0;;-1:-1:-1;;;;;;;;25626:640:0;;;25521:752;;;:::o;15205:549::-;15309:24;15369:1;15354:4;:11;:16;;15346:58;;;;;-1:-1:-1;;;15346:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15439:4;:11;15425:26;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15425:26:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;15425:26:0;;15415:36;;15492:9;15462:7;15487:1;15470:7;:14;:18;15462:27;;;;;;;;;;;;;;;;;:39;15529:11;;-1:-1:-1;;15529:15:0;15512:235;15546:5;;15512:235;;15574:17;15593:18;15615:42;15627:7;15636:4;15645:1;15641;:5;15636:11;;;;;;;;;;;;;;15649:4;15654:1;15649:7;;;;;;;15615:42;15573:84;;;;15689:46;15701:7;15709:1;15701:10;;;;;;;;;;;;;;15713:9;15724:10;15689:11;:46::i;:::-;15672:7;15684:1;15680;:5;15672:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;15553:3:0;15512:235;;30925:1241;31038:9;31033:1126;31067:1;31053:4;:11;:15;31049:1;:19;31033:1126;;;31091:13;31106:14;31125:4;31130:1;31125:7;;;;;;;;;;;;;;31134:4;31139:1;31143;31139:5;31134:11;;;;;;;;;;;;;;31090:56;;;;31162:14;31181:41;31208:5;31215:6;31181:26;:41::i;:::-;31161:61;;;31237:18;31272:47;31296:7;31305:5;31312:6;31272:23;:47::i;:::-;31237:83;;31335:19;31369:20;31460:16;31478;31499:4;-1:-1:-1;;;;;31499:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31499:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31499:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;31499:18:0;;;;;;;31459:58;;;;;-1:-1:-1;31459:58:0;;-1:-1:-1;31533:20:0;;-1:-1:-1;;;;;31580:15:0;;;;;;;:61;;31622:8;31632;31580:61;;;31599:8;31609;31580:61;31532:109;;;;31670:56;31713:12;31677:5;-1:-1:-1;;;;;31670:23:0;;31702:4;31670:38;;;;;;;;;;;;;-1:-1:-1;;;;;31670:38:0;-1:-1:-1;;;;;31670:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;31670:56:0;31656:70;;31756;31785:11;31798:12;31812:13;31756:28;:70::i;:::-;31741:85;;31033:1126;;;;31857:18;31877;31908:6;-1:-1:-1;;;;;31899:15:0;:5;-1:-1:-1;;;;;31899:15:0;;:73;;31947:12;31969:1;31899:73;;;31926:1;31930:12;31899:73;31856:116;;;;31987:10;32018:1;32004:4;:11;:15;32000:1;:19;:81;;32078:3;32000:81;;;32022:53;32046:7;32055:6;32063:4;32068:1;32072;32068:5;32063:11;;;;;;;32022:53;32134:12;;;32144:1;32134:12;;;;;;;;;;32096:51;;;;;;;;;;;;;;;-1:-1:-1;;;;;32096:51:0;;;;;;;;;;;;;;;;;;;;;;31987:94;;-1:-1:-1;32096:9:0;;;;;;32106:10;;32118;;31987:94;;32134:12;;32096:51;;;;;;;;32134:12;;32096:51;;;;32134: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;32096:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32096:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;31070:3:0;;;;;-1:-1:-1;31033:1126:0;;-1:-1:-1;;;;;;;;;;31033:1126:0;10838:129;10922:5;;;10917:16;;;;10909:50;;;;;-1:-1:-1;;;10909:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;14026:488;14128:16;14177:1;14165:9;:13;14157:69;;;;-1:-1:-1;;;14157:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14257:1;14245:9;:13;:31;;;;;14275:1;14262:10;:14;14245:31;14237:83;;;;-1:-1:-1;;;14237:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14331:17;14351:34;14380:4;14351:24;:9;14365;14351:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;14331:54;-1:-1:-1;14396:19:0;14418:34;14448:3;14418:25;:10;14433:9;14418:25;:14;:25;:::i;:34::-;14396:56;;14474:32;14504:1;14487:11;14475:9;:23;;;;;;;14474:32;:29;:32;:::i;:::-;14463:43;14026:488;-1:-1:-1;;;;;;14026:488:0:o;12916:331::-;13007:15;13053:1;13043:7;:11;13035:60;;;;-1:-1:-1;;;13035:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13125:1;13114:8;:12;:28;;;;;13141:1;13130:8;:12;13114:28;13106:80;;;;-1:-1:-1;;;13106:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13231:8;13207:21;:7;13219:8;13207:21;:11;:21;:::i;:::-;:32;;;;;;;12916:331;-1:-1:-1;;;;12916:331:0:o;11380:347::-;11455:14;11471;11516:6;-1:-1:-1;;;;;11506:16:0;:6;-1:-1:-1;;;;;11506:16:0;;;11498:65;;;;-1:-1:-1;;;11498:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11602:6;-1:-1:-1;;;;;11593:15:0;:6;-1:-1:-1;;;;;11593:15:0;;:53;;11631:6;11639;11593:53;;;11612:6;11620;11593:53;11574:72;;-1:-1:-1;11574:72:0;-1:-1:-1;;;;;;11665:20:0;;11657:62;;;;;-1:-1:-1;;;11657:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11380:347;;;;;:::o;17666:1413::-;17997:49;;;;;;-1:-1:-1;;;;;17997:49:0;;;;;;;;;;;;;;;;17896:15;;;;;;18014:7;17997:33;;;;;;:49;;;;;;;;;;;;;;;:33;:49;;;2:2:-1;;;;27:1;24;17:12;2:2;17997:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17997:49:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17997:49:0;-1:-1:-1;;;;;17997:63:0;;17993:148;;;18077:52;;;;;;-1:-1:-1;;;;;18077:52:0;;;;;;;;;;;;;;;;18094:7;18077:36;;;;;;:52;;;;;;;;;;;;;;;-1:-1:-1;18077:36:0;:52;;;2:2:-1;;;;27:1;24;17:12;2:2;18077:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18077:52:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;17993:148:0;18152:16;18170;18190:52;18218:7;18227:6;18235;18190:27;:52::i;:::-;18151:91;;;;18257:8;18269:1;18257:13;:30;;;;-1:-1:-1;18274:13:0;;18257:30;18253:819;;;18326:14;;-1:-1:-1;18342:14:0;;-1:-1:-1;18253:819:0;;;18390:22;18415:57;18437:14;18453:8;18463;18415:21;:57::i;:::-;18390:82;;18509:14;18491;:32;18487:574;;18570:10;18552:14;:28;;18544:78;;;;-1:-1:-1;;;18544:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18663:14;;-1:-1:-1;18679:14:0;-1:-1:-1;18679:14:0;18487:574;;;18735:22;18760:57;18782:14;18798:8;18808;18760:21;:57::i;:::-;18735:82;;18861:14;18843;:32;;18836:40;;;;18921:10;18903:14;:28;;18895:78;;;;-1:-1:-1;;;18895:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19014:14;-1:-1:-1;19030:14:0;;-1:-1:-1;18487:574:0;18253:819;;17666:1413;;;;;;;;;;;:::o;10975:142::-;11027:6;11054;;;:30;;-1:-1:-1;;11069:5:0;;;11083:1;11078;11069:5;11078:1;11064:15;;;;;:20;11054:30;11046:63;;;;;-1:-1:-1;;;11046:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;10702:128;10786:5;;;10781:16;;;;10773:49;;;;;-1:-1:-1;;;10773:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;12358:445;12451:16;12469;12499:14;12518:26;12529:6;12537;12518:10;:26::i;:::-;12498:46;;;12555:32;12563:7;12572:6;12580;12555:7;:32::i;:::-;;12599:16;12617;12652:32;12660:7;12669:6;12677;12652:7;:32::i;:::-;-1:-1:-1;;;;;12638:59:0;;:61;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12638:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12638:61:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12638:61:0;;;;;;;12598:101;;;;;-1:-1:-1;12598:101:0;;-1:-1:-1;;;;;;12733:16:0;;;;;;;:62;;12776:8;12786;12733:62;;;12753:8;12763;12733:62;12710:85;;;;-1:-1:-1;12358:445:0;-1:-1:-1;;;;;;;12358:445:0:o

Swarm Source

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