Contract 0x9E4AAbd2B3E60Ee1322E94307d0776F2c8e6CFbb 4

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x63e943340358ae1bdeef2ef9ef15378c4ee2b1088793eb459e1810ca1a50cf7dSwap Exact Token...205518342022-10-02 12:40:3755 secs ago0x3e8476dd0276ecc918ff0768fa37561c25f3e3fa IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0 AVAX0.00345295125 26.25
0x29b0a7e375dad8b163599360f7badb58ac6fd78a1621f171aedb41bba13db338Swap Exact AVAX ...205517812022-10-02 12:38:482 mins ago0x0dfe6b81ebbb7cb6615960903f2e34b09324ccff IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb148.7 AVAX0.0038118395 26.5
0xd9708313750fa0b47f084352cac243ef1b5dea756cf9048f089e85b4972bfb7aSwap Exact AVAX ...205510132022-10-02 12:12:2729 mins ago0xf857ee0a4149a3be74f69dc73f68dd2fc112f52e IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0.42637254 AVAX0.0040916795 26.5
0x86f99a39563fd15b5a62f36f89e038a49ee14b1adfc407e2e055a367354f0944Swap Exact AVAX ...205508322022-10-02 12:06:1635 mins ago0x5023bff7147b989d3c88899868a850b4e4d748f1 IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb1.85 AVAX0.0040916795 26.5
0x9f8a54e960e75ce974c43180f09ef7aa5c25973446057f1068857158514fe969Swap Exact Token...205506522022-10-02 12:00:0841 mins ago0x4600f1ba62ffc703947bd917c057f7b366b9d4f9 IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0 AVAX0.0030775245 26.5
0x7133fcfa7ec05aff3450775a6e826817e29b33a2d30fb4a35286a5a4f446ccc1Swap Tokens For ...205495762022-10-02 11:23:201 hr 18 mins ago0x58f937c1075eb9c466cbbac8fc02314ea99408af IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0 AVAX0.003868257831.9
0x56ee6d2b8bcf614481ec82a0dc94691da5442862c862f8c88097eb07d43b717fSwap Exact Token...205491552022-10-02 11:08:361 hr 32 mins ago0xe59150cc54b28d55b9b1df175a3bdff10a29d1ba IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0 AVAX0.003112054 26.5
0xe2d9ea769599ea69bc134eeea0434a892ce76f23a00d6d6a0ca29f70b4729295Swap Exact Token...205490912022-10-02 11:06:211 hr 35 mins ago0x4600f1ba62ffc703947bd917c057f7b366b9d4f9 IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0 AVAX0.0030775245 26.5
0x95248a74dfbfd6ff6f98764c7dede765f6263a8d1a00c6ad9979134866e1f696Swap Exact Token...205487202022-10-02 10:53:371 hr 47 mins ago0xc1d1742bbb0c0dd61c9e4cfc137b59b1a8f55b90 IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0 AVAX0.003385481 26.5
0xa02ff0a0219f79876d1f096edd3fa1384eb9ea60dd47f3474c44f088e49addc6Swap Exact Token...205476812022-10-02 10:17:172 hrs 24 mins ago0x3e8476dd0276ecc918ff0768fa37561c25f3e3fa IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0 AVAX0.004322524933 32.912208728
0x3455b94daf49bddb8874e550f060abcf01a5f4f2312cf74554e8595783a76f1bAdd Liquidity205476112022-10-02 10:15:182 hrs 26 mins ago0xed9a912182745fe101ecb4291d00b802d982ba0f IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0 AVAX0.004383156902 27.327947966
0x037ba5402832e1f7c669c709404bc75784227e940989176ebc6766645776e263Swap Tokens For ...205475532022-10-02 10:13:132 hrs 28 mins ago0xed9a912182745fe101ecb4291d00b802d982ba0f IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0 AVAX0.002738775 26.5
0x4d7f4722888cafb1201a9dbacabbdecde047b2208c55cc6430a9bcc102947502Swap Exact Token...205475042022-10-02 10:11:322 hrs 30 mins ago0xe59150cc54b28d55b9b1df175a3bdff10a29d1ba IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0 AVAX0.003112372 26.5
0x45947b9737961ffddf99b32c7785a9d66cb924c5bd3b6ae5c4fb9190df0f37c6Swap Exact Token...205474252022-10-02 10:08:502 hrs 32 mins ago0x3e8476dd0276ecc918ff0768fa37561c25f3e3fa IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0 AVAX0.00344722875 26.25
0x2b49454c811169933694a8527238016ecace758869a58003118ed1c667799701Swap Exact Token...205472822022-10-02 10:03:512 hrs 37 mins ago0x4600f1ba62ffc703947bd917c057f7b366b9d4f9 IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0 AVAX0.0030775245 26.5
0xf6b5bc1eddd4aa733a83e668d5bf51881afbd1b7cdcde5c3b35eb9693bbcde99Add Liquidity AV...205472212022-10-02 10:01:432 hrs 39 mins ago0xed9a912182745fe101ecb4291d00b802d982ba0f IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0.430939766091886 AVAX0.004666385 26.5
0x06d13b7a56c30a5d2cda2414a7955f24e471511d5b7d48315741ca89531341daSwap Exact Token...205471552022-10-02 9:59:292 hrs 42 mins ago0xed9a912182745fe101ecb4291d00b802d982ba0f IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0 AVAX0.0030323685 26.5
0x9ed46014872df90d4dc87ed8ce612b627fba828f7a03526cc54239f8d8c37f5aSwap Exact Token...205469562022-10-02 9:52:452 hrs 48 mins ago0xed9a912182745fe101ecb4291d00b802d982ba0f IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0 AVAX0.0039381915 26.5
0x918b36ac3e8c7e7859b7092930857de280ff4713c5db3244ec9e4770f8e92186Swap Exact Token...205458472022-10-02 9:14:043 hrs 27 mins ago0xddb001be5d92eb39c8dfe5f7ebdca303ec85f1af IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0 AVAX0.004088122527.5
0x8026f2c72c7626d9218accfee9008e92c6c93448387e164c6635a09c5b8cc762Swap Exact Token...205457872022-10-02 9:12:003 hrs 29 mins ago0xe59150cc54b28d55b9b1df175a3bdff10a29d1ba IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0 AVAX0.003112372 26.5
0xe7a37853899750a7526e656646d3f60b98a4b34bf1a20ad5acf342da569bfcb9Swap Exact Token...205455712022-10-02 9:04:323 hrs 37 mins ago0x4600f1ba62ffc703947bd917c057f7b366b9d4f9 IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0 AVAX0.0030775245 26.5
0xfb2740ed79b946b17b0f186e1a8144712e341d7018fcf718a935e13c0cda0b8cAdd Liquidity AV...205454562022-10-02 9:00:323 hrs 41 mins ago0x9f06efbb819426559688e946492b8c8939c27f46 IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0.369940944604062 AVAX0.004667975 26.5
0xd4cb2c54622b6baa9c1e1792d27b5ba458c5c71589155cce9d59709d9d5a5e07Swap Exact Token...205454152022-10-02 8:59:073 hrs 42 mins ago0x56cb67c66323486c19dcb9b0c25af376c8ede098 IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0 AVAX0.004087462527.5
0xfbc6004e22559085c6a8ca40add238d4bc89585f0d778520bf6b41cb3867bc69Swap Exact AVAX ...205453802022-10-02 8:57:513 hrs 43 mins ago0x6dac62e20f3c62819e98148bd346e44506778024 IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb6 AVAX0.003643220491 26.534165252
0x1bcdbc81f8f6a4891fb2be250080c0b8a5381410b7ebc31ae4eed315264a5434Swap Exact Token...205453202022-10-02 8:55:483 hrs 45 mins ago0x7748f3f78f1a4c384c7e6acd185fd8f215a69396 IN  0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0 AVAX0.003989630481 26.841796895
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x29b0a7e375dad8b163599360f7badb58ac6fd78a1621f171aedb41bba13db338205517812022-10-02 12:38:482 mins ago 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb Wrapped AVAX148.7 AVAX
0xd9708313750fa0b47f084352cac243ef1b5dea756cf9048f089e85b4972bfb7a205510132022-10-02 12:12:2729 mins ago 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb Wrapped AVAX0.42637254 AVAX
0x86f99a39563fd15b5a62f36f89e038a49ee14b1adfc407e2e055a367354f0944205508322022-10-02 12:06:1635 mins ago 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb Wrapped AVAX1.85 AVAX
0xf6b5bc1eddd4aa733a83e668d5bf51881afbd1b7cdcde5c3b35eb9693bbcde99205472212022-10-02 10:01:432 hrs 39 mins ago 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb Wrapped AVAX0.430939766091886376 AVAX
0x9ed46014872df90d4dc87ed8ce612b627fba828f7a03526cc54239f8d8c37f5a205469562022-10-02 9:52:452 hrs 48 mins ago 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0xed9a912182745fe101ecb4291d00b802d982ba0f1.609389621556198404 AVAX
0x9ed46014872df90d4dc87ed8ce612b627fba828f7a03526cc54239f8d8c37f5a205469562022-10-02 9:52:452 hrs 48 mins ago Wrapped AVAX 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb1.609389621556198404 AVAX
0x918b36ac3e8c7e7859b7092930857de280ff4713c5db3244ec9e4770f8e92186205458472022-10-02 9:14:043 hrs 27 mins ago 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0xddb001be5d92eb39c8dfe5f7ebdca303ec85f1af15.221951864555055337 AVAX
0x918b36ac3e8c7e7859b7092930857de280ff4713c5db3244ec9e4770f8e92186205458472022-10-02 9:14:043 hrs 27 mins ago Wrapped AVAX 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb15.221951864555055337 AVAX
0xfb2740ed79b946b17b0f186e1a8144712e341d7018fcf718a935e13c0cda0b8c205454562022-10-02 9:00:323 hrs 41 mins ago 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb Wrapped AVAX0.369940944604062702 AVAX
0xd4cb2c54622b6baa9c1e1792d27b5ba458c5c71589155cce9d59709d9d5a5e07205454152022-10-02 8:59:073 hrs 42 mins ago 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0x56cb67c66323486c19dcb9b0c25af376c8ede09812.43095660131826671 AVAX
0xd4cb2c54622b6baa9c1e1792d27b5ba458c5c71589155cce9d59709d9d5a5e07205454152022-10-02 8:59:073 hrs 42 mins ago Wrapped AVAX 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb12.43095660131826671 AVAX
0xfbc6004e22559085c6a8ca40add238d4bc89585f0d778520bf6b41cb3867bc69205453802022-10-02 8:57:513 hrs 43 mins ago 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb Wrapped AVAX6 AVAX
0x1bcdbc81f8f6a4891fb2be250080c0b8a5381410b7ebc31ae4eed315264a5434205453202022-10-02 8:55:483 hrs 45 mins ago 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0x7748f3f78f1a4c384c7e6acd185fd8f215a693960.249141406095865612 AVAX
0x1bcdbc81f8f6a4891fb2be250080c0b8a5381410b7ebc31ae4eed315264a5434205453202022-10-02 8:55:483 hrs 45 mins ago Wrapped AVAX 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0.249141406095865612 AVAX
0xc6d01f244b0f02de1d8b6e72cbc3a723849e08c6d9cca0297fbdce86191324df205452952022-10-02 8:54:543 hrs 46 mins ago 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb Wrapped AVAX12.314766747881808887 AVAX
0x3db600ff39fc184cc315a7e39c4bcc5beeea41d19f35edffdfe0172e5cb2bf63205438272022-10-02 8:03:264 hrs 38 mins ago 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb Wrapped AVAX1 AVAX
0x868287c25bc7e9b4b4830f42abea471887f3ec366b5814c3a957669afdc56890205433912022-10-02 7:48:054 hrs 53 mins ago 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb Wrapped AVAX10.12149127462511029 AVAX
0x716cbac2c9dbe1da39e4b37c2e09277c2ce8192dd4fcfc0b2bbb5f1b8c70888c205421002022-10-02 7:03:015 hrs 38 mins ago 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0xb43edf919ea51ae7eae0ab7c7a28e530aabb6d652.406299229645971205 AVAX
0x716cbac2c9dbe1da39e4b37c2e09277c2ce8192dd4fcfc0b2bbb5f1b8c70888c205421002022-10-02 7:03:015 hrs 38 mins ago Wrapped AVAX 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb2.406299229645971205 AVAX
0x00d6c5e782ceb5ffa01a7d55fecffc0c18d57644a01ad8c002491e07fa23bb63205393162022-10-02 5:24:577 hrs 16 mins ago 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb Wrapped AVAX1.65 AVAX
0x70fc6d1e29d6652a8cbb9b6c6aa59c91f7d39cb34d52835c3e13f4e1e208a9f9205389032022-10-02 5:10:357 hrs 30 mins ago 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb0x56cb67c66323486c19dcb9b0c25af376c8ede09812.410132604955368116 AVAX
0x70fc6d1e29d6652a8cbb9b6c6aa59c91f7d39cb34d52835c3e13f4e1e208a9f9205389032022-10-02 5:10:357 hrs 30 mins ago Wrapped AVAX 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb12.410132604955368116 AVAX
0x07f4fa07a969ad073767295d264fdf1af7188d610231219a4a18f5583d3e86d1205384282022-10-02 4:53:537 hrs 47 mins ago 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb Wrapped AVAX47.576891948035582625 AVAX
0x319b51bb56e3e4b9d1f4fd99bf739f9008a4fe6e8d8b7713d403f8de72366fc2205366902022-10-02 3:53:198 hrs 48 mins ago 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb Wrapped AVAX1.452183415292438812 AVAX
0x0e4ca37d4030cf639d789a87b5c4c4289f0004640cd4a5811c4e8f0d8931ec40205359892022-10-02 3:28:539 hrs 12 mins ago 0x9e4aabd2b3e60ee1322e94307d0776f2c8e6cfbb Wrapped AVAX4.7 AVAX
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ElkRouter

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 snowtrace.io on 2021-11-16
*/

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

// File contracts/elk-core/interfaces/IElkFactory.sol

pragma solidity >=0.5.0;

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

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

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

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

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


// File contracts/elk-lib/libraries/TransferHelper.sol

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

pragma solidity >=0.6.0;

// helper methods for interacting with ERC20 tokens and sending AVAX 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: 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: 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: TRANSFER_FROM_FAILED');
    }

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


// File contracts/elk-periphery/interfaces/IElkRouter.sol

pragma solidity >=0.6.2;

interface IElkRouter {
    function factory() external pure returns (address);
    function WAVAX() 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 addLiquidityAVAX(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountAVAXMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountAVAX, 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 removeLiquidityAVAX(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountAVAXMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountAVAX);
    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 removeLiquidityAVAXWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountAVAXMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountAVAX);
    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 swapExactAVAXForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactAVAX(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForAVAX(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapAVAXForExactTokens(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);

    function removeLiquidityAVAXSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountAVAXMin,
        address to,
        uint deadline
    ) external returns (uint amountAVAX);
    function removeLiquidityAVAXWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountAVAXMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountAVAX);

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


// File contracts/elk-core/interfaces/IElkPair.sol

pragma solidity >=0.5.0;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}


// File contracts/elk-periphery/libraries/SafeMath.sol

pragma solidity =0.6.6;

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

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

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

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


// File contracts/elk-periphery/libraries/ElkLibrary.sol

pragma solidity >=0.5.0;


library ElkLibrary {
    using SafeMath for uint;

    // returns sorted token addresses, used to handle return values from pairs sorted in this order
    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
        require(tokenA != tokenB, 'ElkLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'ElkLibrary: ZERO_ADDRESS');
    }

    // calculates the CREATE2 address for a pair without making any external calls
    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {
        (address token0, address token1) = sortTokens(tokenA, tokenB);
        pair = address(uint(keccak256(abi.encodePacked(
                hex'ff',
                factory,
                keccak256(abi.encodePacked(token0, token1)),
                hex'33c4831a098654d3d20a78641a198ee6ffc1ceed49f2196b75bb244891c260e3' // init code hash
            ))));
    }

    // fetches and sorts the reserves for a pair
    function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) {
        (address token0,) = sortTokens(tokenA, tokenB);
        (uint reserve0, uint reserve1,) = IElkPair(pairFor(factory, tokenA, tokenB)).getReserves();
        (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
    }

    // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset
    function quote(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) {
        require(amountA > 0, 'ElkLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'ElkLibrary: INSUFFICIENT_LIQUIDITY');
        amountB = amountA.mul(reserveB) / reserveA;
    }

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

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

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

    // performs chained getAmountIn calculations on any number of pairs
    function getAmountsIn(address factory, uint amountOut, address[] memory path) internal view returns (uint[] memory amounts) {
        require(path.length >= 2, 'ElkLibrary: INVALID_PATH');
        amounts = new uint[](path.length);
        amounts[amounts.length - 1] = amountOut;
        for (uint i = path.length - 1; i > 0; i--) {
            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i]);
            amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut);
        }
    }
}


// File contracts/elk-periphery/interfaces/IERC20.sol

pragma solidity >=0.5.0;

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

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

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


// File contracts/elk-periphery/interfaces/IWAVAX.sol

pragma solidity >=0.5.0;

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


// File contracts/elk-periphery/ElkRouter.sol

pragma solidity =0.6.6;






contract ElkRouter is IElkRouter {
    using SafeMath for uint;

    address public immutable override factory;
    address public immutable override WAVAX;

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

    constructor(address _factory, address _WAVAX) public {
        factory = _factory;
        WAVAX = _WAVAX;
    }

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

    // **** ADD LIQUIDITY ****
    function _addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin
    ) internal virtual returns (uint amountA, uint amountB) {
        // create the pair if it doesn't exist yet
        if (IElkFactory(factory).getPair(tokenA, tokenB) == address(0)) {
            IElkFactory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = ElkLibrary.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = ElkLibrary.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'ElkRouter: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = ElkLibrary.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'ElkRouter: INSUFFICIENT_A_AMOUNT');
                (amountA, amountB) = (amountAOptimal, amountBDesired);
            }
        }
    }
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint amountA, uint amountB, uint liquidity) {
        (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin);
        address pair = ElkLibrary.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IElkPair(pair).mint(to);
    }
    function addLiquidityAVAX(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountAVAXMin,
        address to,
        uint deadline
    ) external virtual override payable ensure(deadline) returns (uint amountToken, uint amountAVAX, uint liquidity) {
        (amountToken, amountAVAX) = _addLiquidity(
            token,
            WAVAX,
            amountTokenDesired,
            msg.value,
            amountTokenMin,
            amountAVAXMin
        );
        address pair = ElkLibrary.pairFor(factory, token, WAVAX);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWAVAX(WAVAX).deposit{value: amountAVAX}();
        assert(IWAVAX(WAVAX).transfer(pair, amountAVAX));
        liquidity = IElkPair(pair).mint(to);
        // refund dust AVAX, if any
        if (msg.value > amountAVAX) TransferHelper.safeTransferAVAX(msg.sender, msg.value - amountAVAX);
    }

    // **** REMOVE LIQUIDITY ****
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountA, uint amountB) {
        address pair = ElkLibrary.pairFor(factory, tokenA, tokenB);
        IElkPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint amount0, uint amount1) = IElkPair(pair).burn(to);
        (address token0,) = ElkLibrary.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'ElkRouter: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'ElkRouter: INSUFFICIENT_B_AMOUNT');
    }
    function removeLiquidityAVAX(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountAVAXMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountToken, uint amountAVAX) {
        (amountToken, amountAVAX) = removeLiquidity(
            token,
            WAVAX,
            liquidity,
            amountTokenMin,
            amountAVAXMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, amountToken);
        IWAVAX(WAVAX).withdraw(amountAVAX);
        TransferHelper.safeTransferAVAX(to, amountAVAX);
    }
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountA, uint amountB) {
        address pair = ElkLibrary.pairFor(factory, tokenA, tokenB);
        uint value = approveMax ? uint(-1) : liquidity;
        IElkPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline);
    }
    function removeLiquidityAVAXWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountAVAXMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountToken, uint amountAVAX) {
        address pair = ElkLibrary.pairFor(factory, token, WAVAX);
        uint value = approveMax ? uint(-1) : liquidity;
        IElkPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountToken, amountAVAX) = removeLiquidityAVAX(token, liquidity, amountTokenMin, amountAVAXMin, to, deadline);
    }

    // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) ****
    function removeLiquidityAVAXSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountAVAXMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountAVAX) {
        (, amountAVAX) = removeLiquidity(
            token,
            WAVAX,
            liquidity,
            amountTokenMin,
            amountAVAXMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this)));
        IWAVAX(WAVAX).withdraw(amountAVAX);
        TransferHelper.safeTransferAVAX(to, amountAVAX);
    }
    function removeLiquidityAVAXWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountAVAXMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountAVAX) {
        address pair = ElkLibrary.pairFor(factory, token, WAVAX);
        uint value = approveMax ? uint(-1) : liquidity;
        IElkPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        amountAVAX = removeLiquidityAVAXSupportingFeeOnTransferTokens(
            token, liquidity, amountTokenMin, amountAVAXMin, to, deadline
        );
    }

    // **** SWAP ****
    // requires the initial amount to have already been sent to the first pair
    function _swap(uint[] memory amounts, address[] memory path, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = ElkLibrary.sortTokens(input, output);
            uint amountOut = amounts[i + 1];
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0));
            address to = i < path.length - 2 ? ElkLibrary.pairFor(factory, output, path[i + 2]) : _to;
            IElkPair(ElkLibrary.pairFor(factory, input, output)).swap(
                amount0Out, amount1Out, to, new bytes(0)
            );
        }
    }
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint[] memory amounts) {
        amounts = ElkLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'ElkRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, ElkLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint[] memory amounts) {
        amounts = ElkLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'ElkRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, ElkLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }
    function swapExactAVAXForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WAVAX, 'ElkRouter: INVALID_PATH');
        amounts = ElkLibrary.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'ElkRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWAVAX(WAVAX).deposit{value: amounts[0]}();
        assert(IWAVAX(WAVAX).transfer(ElkLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
    }
    function swapTokensForExactAVAX(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[path.length - 1] == WAVAX, 'ElkRouter: INVALID_PATH');
        amounts = ElkLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'ElkRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, ElkLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWAVAX(WAVAX).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferAVAX(to, amounts[amounts.length - 1]);
    }
    function swapExactTokensForAVAX(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[path.length - 1] == WAVAX, 'ElkRouter: INVALID_PATH');
        amounts = ElkLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'ElkRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, ElkLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWAVAX(WAVAX).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferAVAX(to, amounts[amounts.length - 1]);
    }
    function swapAVAXForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WAVAX, 'ElkRouter: INVALID_PATH');
        amounts = ElkLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'ElkRouter: EXCESSIVE_INPUT_AMOUNT');
        IWAVAX(WAVAX).deposit{value: amounts[0]}();
        assert(IWAVAX(WAVAX).transfer(ElkLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
        // refund dust AVAX, if any
        if (msg.value > amounts[0]) TransferHelper.safeTransferAVAX(msg.sender, msg.value - amounts[0]);
    }

    // **** SWAP (supporting fee-on-transfer tokens) ****
    // requires the initial amount to have already been sent to the first pair
    function _swapSupportingFeeOnTransferTokens(address[] memory path, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = ElkLibrary.sortTokens(input, output);
            IElkPair pair = IElkPair(ElkLibrary.pairFor(factory, input, output));
            uint amountInput;
            uint amountOutput;
            { // scope to avoid stack too deep errors
            (uint reserve0, uint reserve1,) = pair.getReserves();
            (uint reserveInput, uint reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
            amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput);
            amountOutput = ElkLibrary.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? ElkLibrary.pairFor(factory, output, path[i + 2]) : _to;
            pair.swap(amount0Out, amount1Out, to, new bytes(0));
        }
    }
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) {
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, ElkLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'ElkRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactAVAXForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WAVAX, 'ElkRouter: INVALID_PATH');
        uint amountIn = msg.value;
        IWAVAX(WAVAX).deposit{value: amountIn}();
        assert(IWAVAX(WAVAX).transfer(ElkLibrary.pairFor(factory, path[0], path[1]), amountIn));
        uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'ElkRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactTokensForAVAXSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        ensure(deadline)
    {
        require(path[path.length - 1] == WAVAX, 'ElkRouter: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, ElkLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20(WAVAX).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'ElkRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWAVAX(WAVAX).withdraw(amountOut);
        TransferHelper.safeTransferAVAX(to, amountOut);
    }

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

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

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

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

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

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WAVAX","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WAVAX","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":"amountAVAXMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityAVAX","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountAVAX","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":"amountAVAXMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityAVAX","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountAVAX","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":"amountAVAXMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityAVAXSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountAVAX","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":"amountAVAXMin","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":"removeLiquidityAVAXWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountAVAX","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":"amountAVAXMin","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":"removeLiquidityAVAXWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountAVAX","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":"swapAVAXForExactTokens","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":"swapExactAVAXForTokens","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":"swapExactAVAXForTokensSupportingFeeOnTransferTokens","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":"swapExactTokensForAVAX","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":"swapExactTokensForAVAXSupportingFeeOnTransferTokens","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":"swapTokensForExactAVAX","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"}]

60c060405234801561001057600080fd5b50604051620048e0380380620048e08339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c61475b620001856000398061019f5280610e5e5280610f9a5280610fd5528061154552806116e15280611797528061180c52806118bb52806119965280611a9c5280611b525280611c2f5280611ed3528061202252806120aa528061224d528061238052806124d2528061255a528061299b5280612a3c5280612ab05280612eb35280612f095280612f3d5280612fb1525080610d095280610d425280610e3c52806110b9528061119052806112c352806115df5280611cc95280611dd65280611f7252806120dc528061222b528061241f528061258c52806126ef528061292c5280612ae25280612cf45280612d845280612ee75280613a065280613a495280613bf45280613d7a528061421052806142d75280614357525061475b6000f3fe60806040526004361061018f5760003560e01c806385f8c259116100d6578063baa2abde1161007f578063d06ca61f11610059578063d06ca61f14610b70578063e8e3370014610c27578063f91b3f7214610ca7576101c8565b8063baa2abde14610a78578063c45a015514610ad5578063c57559dd14610aea576101c8565b80639fc27226116100b05780639fc2722614610949578063a2a1623d146109bc578063ad615dec14610a42576101c8565b806385f8c259146107f55780638803dbee1461082b5780638a657e67146108c3576101c8565b80635c11d7951161013857806373bc79cf1161011257806373bc79cf14610672578063762b1562146106c55780637a42416a1461075d576101c8565b80635c11d79514610511578063676528d1146105a957806373b295c214610641576101c8565b80632c407024116101695780632c407024146103b357806333c6b7251461042657806338ed173914610479576101c8565b8063054d50d4146101cd5780631f00ca74146102155780632195995c1461031c576101c8565b366101c857336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101c657fe5b005b600080fd5b3480156101d957600080fd5b50610203600480360360608110156101f057600080fd5b5080359060208101359060400135610ced565b60408051918252519081900360200190f35b34801561022157600080fd5b506102cc6004803603604081101561023857600080fd5b8135919081019060408101602082013564010000000081111561025a57600080fd5b82018360208201111561026c57600080fd5b8035906020019184602083028401116401000000008311171561028e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610d02945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103085781810151838201526020016102f0565b505050509050019250505060405180910390f35b34801561032857600080fd5b5061039a600480360361016081101561034057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135610d38565b6040805192835260208301919091528051918290030190f35b3480156103bf57600080fd5b5061039a60048036036101408110156103d757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135610e32565b34801561043257600080fd5b5061039a600480360360c081101561044957600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610f46565b34801561048557600080fd5b506102cc600480360360a081101561049c57600080fd5b8135916020810135918101906060810160408201356401000000008111156104c357600080fd5b8201836020820111156104d557600080fd5b803590602001918460208302840111640100000000831117156104f757600080fd5b91935091506001600160a01b038135169060200135611067565b34801561051d57600080fd5b506101c6600480360360a081101561053457600080fd5b81359160208101359181019060608101604082013564010000000081111561055b57600080fd5b82018360208201111561056d57600080fd5b8035906020019184602083028401116401000000008311171561058f57600080fd5b91935091506001600160a01b038135169060200135611252565b3480156105b557600080fd5b506102cc600480360360a08110156105cc57600080fd5b8135916020810135918101906060810160408201356401000000008111156105f357600080fd5b82018360208201111561060557600080fd5b8035906020019184602083028401116401000000008311171561062757600080fd5b91935091506001600160a01b0381351690602001356114ee565b34801561064d57600080fd5b50610656611795565b604080516001600160a01b039092168252519081900360200190f35b34801561067e57600080fd5b50610203600480360360c081101561069557600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356117b9565b3480156106d157600080fd5b506101c6600480360360a08110156106e857600080fd5b81359160208101359181019060608101604082013564010000000081111561070f57600080fd5b82018360208201111561072157600080fd5b8035906020019184602083028401116401000000008311171561074357600080fd5b91935091506001600160a01b038135169060200135611941565b34801561076957600080fd5b506102cc600480360360a081101561078057600080fd5b8135916020810135918101906060810160408201356401000000008111156107a757600080fd5b8201836020820111156107b957600080fd5b803590602001918460208302840111640100000000831117156107db57600080fd5b91935091506001600160a01b038135169060200135611bd8565b34801561080157600080fd5b506102036004803603606081101561081857600080fd5b5080359060208101359060400135611d77565b34801561083757600080fd5b506102cc600480360360a081101561084e57600080fd5b81359160208101359181019060608101604082013564010000000081111561087557600080fd5b82018360208201111561088757600080fd5b803590602001918460208302840111640100000000831117156108a957600080fd5b91935091506001600160a01b038135169060200135611d84565b6102cc600480360360808110156108d957600080fd5b813591908101906040810160208201356401000000008111156108fb57600080fd5b82018360208201111561090d57600080fd5b8035906020019184602083028401116401000000008311171561092f57600080fd5b91935091506001600160a01b038135169060200135611e84565b34801561095557600080fd5b50610203600480360361014081101561096d57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612223565b6102cc600480360360808110156109d257600080fd5b813591908101906040810160208201356401000000008111156109f457600080fd5b820183602082011115610a0657600080fd5b80359060200191846020830284011164010000000083111715610a2857600080fd5b91935091506001600160a01b038135169060200135612331565b348015610a4e57600080fd5b5061020360048036036060811015610a6557600080fd5b508035906020810135906040013561268d565b348015610a8457600080fd5b5061039a600480360360e0811015610a9b57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c0013561269a565b348015610ae157600080fd5b5061065661292a565b6101c660048036036080811015610b0057600080fd5b81359190810190604081016020820135640100000000811115610b2257600080fd5b820183602082011115610b3457600080fd5b80359060200191846020830284011164010000000083111715610b5657600080fd5b91935091506001600160a01b03813516906020013561294e565b348015610b7c57600080fd5b506102cc60048036036040811015610b9357600080fd5b81359190810190604081016020820135640100000000811115610bb557600080fd5b820183602082011115610bc757600080fd5b80359060200191846020830284011164010000000083111715610be957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612ced945050505050565b348015610c3357600080fd5b50610c896004803603610100811015610c4b57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612d1a565b60408051938452602084019290925282820152519081900360600190f35b610c89600480360360c0811015610cbd57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612e5d565b6000610cfa848484613109565b949350505050565b6060610d2f7f000000000000000000000000000000000000000000000000000000000000000084846131f9565b90505b92915050565b6000806000610d687f00000000000000000000000000000000000000000000000000000000000000008f8f613346565b9050600087610d77578c610d7b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015610df157600080fd5b505af1158015610e05573d6000803e3d6000fd5b50505050610e188f8f8f8f8f8f8f61269a565b809450819550505050509b509b9950505050505050505050565b6000806000610e827f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613346565b9050600087610e91578c610e95565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015610f0b57600080fd5b505af1158015610f1f573d6000803e3d6000fd5b50505050610f318e8e8e8e8e8e610f46565b909f909e509c50505050505050505050505050565b6000808242811015610f94576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b610fc3897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a61269a565b9093509150610fd389868561341e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561103957600080fd5b505af115801561104d573d6000803e3d6000fd5b5050505061105b85836135b6565b50965096945050505050565b606081428110156110b4576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6111127f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506136ae92505050565b9150868260018451038151811061112557fe5b6020026020010151101561116a5760405162461bcd60e51b81526004018080602001828103825260258152602001806147016025913960400191505060405180910390fd5b6112088686600081811061117a57fe5b905060200201356001600160a01b0316336111ee7f00000000000000000000000000000000000000000000000000000000000000008a8a60008181106111bc57fe5b905060200201356001600160a01b03168b8b60018181106111d957fe5b905060200201356001600160a01b0316613346565b856000815181106111fb57fe5b60200260200101516137e5565b61124782878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613957915050565b509695505050505050565b804281101561129d576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b611312858560008181106112ad57fe5b905060200201356001600160a01b03163361130c7f0000000000000000000000000000000000000000000000000000000000000000898960008181106112ef57fe5b905060200201356001600160a01b03168a8a60018181106111d957fe5b8a6137e5565b60008585600019810181811061132457fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561138957600080fd5b505afa15801561139d573d6000803e3d6000fd5b505050506040513d60208110156113b357600080fd5b505160408051602088810282810182019093528882529293506113f5929091899189918291850190849080828437600092019190915250889250613b9d915050565b866114a7828888600019810181811061140a57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561146f57600080fd5b505afa158015611483573d6000803e3d6000fd5b505050506040513d602081101561149957600080fd5b50519063ffffffff613ec816565b10156114e45760405162461bcd60e51b81526004018080602001828103825260258152602001806147016025913960400191505060405180910390fd5b5050505050505050565b6060814281101561153b576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061157557fe5b905060200201356001600160a01b03166001600160a01b0316146115da576040805162461bcd60e51b815260206004820152601760248201527608ad8d6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b6116387f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506136ae92505050565b9150868260018451038151811061164b57fe5b602002602001015110156116905760405162461bcd60e51b81526004018080602001828103825260258152602001806147016025913960400191505060405180910390fd5b6116a08686600081811061117a57fe5b6116df82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613957915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061171e57fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561175c57600080fd5b505af1158015611770573d6000803e3d6000fd5b50505050611247848360018551038151811061178857fe5b60200260200101516135b6565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008142811015611806576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b611835887f0000000000000000000000000000000000000000000000000000000000000000898989308961269a565b604080516370a0823160e01b815230600482015290519194506118b992508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561188857600080fd5b505afa15801561189c573d6000803e3d6000fd5b505050506040513d60208110156118b257600080fd5b505161341e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561191f57600080fd5b505af1158015611933573d6000803e3d6000fd5b5050505061124784836135b6565b804281101561198c576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016858560001981018181106119c657fe5b905060200201356001600160a01b03166001600160a01b031614611a2b576040805162461bcd60e51b815260206004820152601760248201527608ad8d6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b611a3b858560008181106112ad57fe5b611a79858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613b9d915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611ae357600080fd5b505afa158015611af7573d6000803e3d6000fd5b505050506040513d6020811015611b0d57600080fd5b5051905086811015611b505760405162461bcd60e51b81526004018080602001828103825260258152602001806147016025913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611bb657600080fd5b505af1158015611bca573d6000803e3d6000fd5b505050506114e484826135b6565b60608142811015611c25576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110611c5f57fe5b905060200201356001600160a01b03166001600160a01b031614611cc4576040805162461bcd60e51b815260206004820152601760248201527608ad8d6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b611d227f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506131f992505050565b91508682600081518110611d3257fe5b602002602001015111156116905760405162461bcd60e51b815260040180806020018281038252602181526020018061469a6021913960400191505060405180910390fd5b6000610cfa848484613f20565b60608142811015611dd1576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b611e2f7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506131f992505050565b91508682600081518110611e3f57fe5b6020026020010151111561116a5760405162461bcd60e51b815260040180806020018281038252602181526020018061469a6021913960400191505060405180910390fd5b60608142811015611ed1576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611f0857fe5b905060200201356001600160a01b03166001600160a01b031614611f6d576040805162461bcd60e51b815260206004820152601760248201527608ad8d6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b611fcb7f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506131f992505050565b91503482600081518110611fdb57fe5b602002602001015111156120205760405162461bcd60e51b815260040180806020018281038252602181526020018061469a6021913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db08360008151811061205c57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561208f57600080fd5b505af11580156120a3573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6121087f0000000000000000000000000000000000000000000000000000000000000000898960008181106112ef57fe5b8460008151811061211557fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561216c57600080fd5b505af1158015612180573d6000803e3d6000fd5b505050506040513d602081101561219657600080fd5b505161219e57fe5b6121dd82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613957915050565b816000815181106121ea57fe5b602002602001015134111561221957612219338360008151811061220a57fe5b602002602001015134036135b6565b5095945050505050565b6000806122717f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613346565b9050600086612280578b612284565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156122fa57600080fd5b505af115801561230e573d6000803e3d6000fd5b505050506123208d8d8d8d8d8d6117b9565b9d9c50505050505050505050505050565b6060814281101561237e576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316868660008181106123b557fe5b905060200201356001600160a01b03166001600160a01b03161461241a576040805162461bcd60e51b815260206004820152601760248201527608ad8d6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b6124787f0000000000000000000000000000000000000000000000000000000000000000348888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506136ae92505050565b9150868260018451038151811061248b57fe5b602002602001015110156124d05760405162461bcd60e51b81526004018080602001828103825260258152602001806147016025913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db08360008151811061250c57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561253f57600080fd5b505af1158015612553573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6125b87f0000000000000000000000000000000000000000000000000000000000000000898960008181106112ef57fe5b846000815181106125c557fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561261c57600080fd5b505af1158015612630573d6000803e3d6000fd5b505050506040513d602081101561264657600080fd5b505161264e57fe5b61221982878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613957915050565b6000610cfa848484614010565b60008082428110156126e8576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b60006127157f00000000000000000000000000000000000000000000000000000000000000008c8c613346565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561277057600080fd5b505af1158015612784573d6000803e3d6000fd5b505050506040513d602081101561279a57600080fd5b5050604080517f89afcb440000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561280057600080fd5b505af1158015612814573d6000803e3d6000fd5b505050506040513d604081101561282a57600080fd5b508051602090910151909250905060006128448e8e6140d2565b509050806001600160a01b03168e6001600160a01b03161461286757818361286a565b82825b90975095508a8710156128c4576040805162461bcd60e51b815260206004820181905260248201527f456c6b526f757465723a20494e53554646494349454e545f415f414d4f554e54604482015290519081900360640190fd5b89861015612919576040805162461bcd60e51b815260206004820181905260248201527f456c6b526f757465723a20494e53554646494349454e545f425f414d4f554e54604482015290519081900360640190fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b8042811015612999576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106129d057fe5b905060200201356001600160a01b03166001600160a01b031614612a35576040805162461bcd60e51b815260206004820152601760248201527608ad8d6a4deeae8cae47440929cac82989288bea082a89604b1b604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a9557600080fd5b505af1158015612aa9573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612b0e7f0000000000000000000000000000000000000000000000000000000000000000898960008181106112ef57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b5e57600080fd5b505af1158015612b72573d6000803e3d6000fd5b505050506040513d6020811015612b8857600080fd5b5051612b9057fe5b600086866000198101818110612ba257fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015612c0757600080fd5b505afa158015612c1b573d6000803e3d6000fd5b505050506040513d6020811015612c3157600080fd5b50516040805160208981028281018201909352898252929350612c739290918a918a918291850190849080828437600092019190915250899250613b9d915050565b876114a78289896000198101818110612c8857fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561146f57600080fd5b6060610d2f7f000000000000000000000000000000000000000000000000000000000000000084846136ae565b60008060008342811015612d6a576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b612d788c8c8c8c8c8c6141c6565b90945092506000612daa7f00000000000000000000000000000000000000000000000000000000000000008e8e613346565b9050612db88d3383886137e5565b612dc48c3383876137e5565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612e1c57600080fd5b505af1158015612e30573d6000803e3d6000fd5b505050506040513d6020811015612e4657600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015612ead576040805162461bcd60e51b8152602060048201526012602482015271115b1ad49bdd5d195c8e881156141254915160721b604482015290519081900360640190fd5b612edb8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c6141c6565b90945092506000612f2d7f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613346565b9050612f3b8b3383886137e5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612f9657600080fd5b505af1158015612faa573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561302f57600080fd5b505af1158015613043573d6000803e3d6000fd5b505050506040513d602081101561305957600080fd5b505161306157fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b1580156130b957600080fd5b505af11580156130cd573d6000803e3d6000fd5b505050506040513d60208110156130e357600080fd5b50519250348410156130fb576130fb338534036135b6565b505096509650969350505050565b60008084116131495760405162461bcd60e51b815260040180806020018281038252602581526020018061462b6025913960400191505060405180910390fd5b6000831180156131595750600082115b6131945760405162461bcd60e51b81526004018080602001828103825260228152602001806146bb6022913960400191505060405180910390fd5b60006131a8856103e563ffffffff61449816565b905060006131bc828563ffffffff61449816565b905060006131e2836131d6886103e863ffffffff61449816565b9063ffffffff61450416565b90508082816131ed57fe5b04979650505050505050565b6060600282511015613252576040805162461bcd60e51b815260206004820152601860248201527f456c6b4c6962726172793a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561326a57600080fd5b50604051908082528060200260200182016040528015613294578160200160208202803683370190505b50905082816001835103815181106132a857fe5b60209081029190910101528151600019015b801561333e576000806132f7878660018603815181106132d657fe5b60200260200101518786815181106132ea57fe5b602002602001015161455c565b9150915061331984848151811061330a57fe5b60200260200101518383613f20565b84600185038151811061332857fe5b60209081029190910101525050600019016132ba565b509392505050565b600080600061335585856140d2565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f33c4831a098654d3d20a78641a198ee6ffc1ceed49f2196b75bb244891c260e3609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b602083106134c95780518252601f1990920191602091820191016134aa565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461352b576040519150601f19603f3d011682016040523d82523d6000602084013e613530565b606091505b509150915081801561355e57508051158061355e575080806020019051602081101561355b57600080fd5b50515b6135af576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106136025780518252601f1990920191602091820191016135e3565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613664576040519150601f19603f3d011682016040523d82523d6000602084013e613669565b606091505b50509050806136a95760405162461bcd60e51b81526004018080602001828103825260248152602001806146506024913960400191505060405180910390fd5b505050565b6060600282511015613707576040805162461bcd60e51b815260206004820152601860248201527f456c6b4c6962726172793a20494e56414c49445f504154480000000000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561371f57600080fd5b50604051908082528060200260200182016040528015613749578160200160208202803683370190505b509050828160008151811061375a57fe5b60200260200101818152505060005b600183510381101561333e5760008061379f8786858151811061378857fe5b60200260200101518786600101815181106132ea57fe5b915091506137c18484815181106137b257fe5b60200260200101518383613109565b8484600101815181106137d057fe5b60209081029190910101525050600101613769565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166323b872dd60e01b17815292518251600094606094938a169392918291908083835b6020831061387f5780518252601f199092019160209182019101613860565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146138e1576040519150601f19603f3d011682016040523d82523d6000602084013e6138e6565b606091505b5091509150818015613914575080511580613914575080806020019051602081101561391157600080fd5b50515b61394f5760405162461bcd60e51b81526004018080602001828103825260248152602001806146dd6024913960400191505060405180910390fd5b505050505050565b60005b6001835103811015613b975760008084838151811061397557fe5b602002602001015185846001018151811061398c57fe5b60200260200101519150915060006139a483836140d2565b50905060008785600101815181106139b857fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146139e6578260006139ea565b6000835b91509150600060028a51038810613a015788613a42565b613a427f0000000000000000000000000000000000000000000000000000000000000000878c8b60020181518110613a3557fe5b6020026020010151613346565b9050613a6f7f00000000000000000000000000000000000000000000000000000000000000008888613346565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613aac576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613b1d578181015183820152602001613b05565b50505050905090810190601f168015613b4a5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613b6c57600080fd5b505af1158015613b80573d6000803e3d6000fd5b50506001909901985061395a975050505050505050565b50505050565b60005b60018351038110156136a957600080848381518110613bbb57fe5b6020026020010151858460010181518110613bd257fe5b6020026020010151915091506000613bea83836140d2565b5090506000613c1a7f00000000000000000000000000000000000000000000000000000000000000008585613346565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613c5b57600080fd5b505afa158015613c6f573d6000803e3d6000fd5b505050506040513d6060811015613c8557600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506000806001600160a01b038a811690891614613cc2578284613cc5565b83835b91509150613d23828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561146f57600080fd5b9550613d30868383613109565b945050505050600080856001600160a01b0316886001600160a01b031614613d5a57826000613d5e565b6000835b91509150600060028c51038a10613d75578a613da9565b613da97f0000000000000000000000000000000000000000000000000000000000000000898e8d60020181518110613a3557fe5b60408051600080825260208201928390527f022c0d9f00000000000000000000000000000000000000000000000000000000835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613e4c578181015183820152602001613e34565b50505050905090810190601f168015613e795780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613e9b57600080fd5b505af1158015613eaf573d6000803e3d6000fd5b50506001909b019a50613ba09950505050505050505050565b80820382811115610d32576040805162461bcd60e51b815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411613f605760405162461bcd60e51b81526004018080602001828103825260268152602001806146746026913960400191505060405180910390fd5b600083118015613f705750600082115b613fab5760405162461bcd60e51b81526004018080602001828103825260228152602001806146bb6022913960400191505060405180910390fd5b6000613fcf6103e8613fc3868863ffffffff61449816565b9063ffffffff61449816565b90506000613fe96103e5613fc3868963ffffffff613ec816565b90506140066001828481613ff957fe5b049063ffffffff61450416565b9695505050505050565b6000808411614066576040805162461bcd60e51b815260206004820152601f60248201527f456c6b4c6962726172793a20494e53554646494349454e545f414d4f554e5400604482015290519081900360640190fd5b6000831180156140765750600082115b6140b15760405162461bcd60e51b81526004018080602001828103825260228152602001806146bb6022913960400191505060405180910390fd5b826140c2858463ffffffff61449816565b816140c957fe5b04949350505050565b600080826001600160a01b0316846001600160a01b0316141561413c576040805162461bcd60e51b815260206004820152601f60248201527f456c6b4c6962726172793a204944454e544943414c5f41444452455353455300604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b03161061415c57828461415f565b83835b90925090506001600160a01b0382166141bf576040805162461bcd60e51b815260206004820152601860248201527f456c6b4c6962726172793a205a45524f5f414444524553530000000000000000604482015290519081900360640190fd5b9250929050565b604080517fe6a439050000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561425957600080fd5b505afa15801561426d573d6000803e3d6000fd5b505050506040513d602081101561428357600080fd5b50516001600160a01b0316141561434f57604080517fc9c653960000000000000000000000000000000000000000000000000000000081526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561432257600080fd5b505af1158015614336573d6000803e3d6000fd5b505050506040513d602081101561434c57600080fd5b50505b60008061437d7f00000000000000000000000000000000000000000000000000000000000000008b8b61455c565b9150915081600014801561438f575080155b1561439f5787935086925061448b565b60006143ac898484614010565b9050878111614415578581101561440a576040805162461bcd60e51b815260206004820181905260248201527f456c6b526f757465723a20494e53554646494349454e545f425f414d4f554e54604482015290519081900360640190fd5b889450925082614489565b6000614422898486614010565b90508981111561442e57fe5b87811015614483576040805162461bcd60e51b815260206004820181905260248201527f456c6b526f757465723a20494e53554646494349454e545f415f414d4f554e54604482015290519081900360640190fd5b94508793505b505b5050965096945050505050565b60008115806144b3575050808202828282816144b057fe5b04145b610d32576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b80820182811015610d32576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b600080600061456b85856140d2565b50905060008061457c888888613346565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156145b457600080fd5b505afa1580156145c8573d6000803e3d6000fd5b505050506040513d60608110156145de57600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b038781169084161461461857808261461b565b81815b9099909850965050505050505056fe456c6b4c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e545472616e7366657248656c7065723a20415641585f5452414e534645525f4641494c4544456c6b4c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54456c6b526f757465723a204558434553534956455f494e5055545f414d4f554e54456c6b4c6962726172793a20494e53554646494349454e545f4c49515549444954595472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544456c6b526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54a26469706673582212205abc44606df65c7756eddddb8736799fc016813138b14a22110b48e3287baf2064736f6c63430006060033000000000000000000000000091d35d7f63487909c863001ddca481c6de47091000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c7

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

000000000000000000000000091d35d7f63487909c863001ddca481c6de47091000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c7

-----Decoded View---------------
Arg [0] : _factory (address): 0x091d35d7f63487909c863001ddca481c6de47091
Arg [1] : _WAVAX (address): 0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000091d35d7f63487909c863001ddca481c6de47091
Arg [1] : 000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c7


Deployed ByteCode Sourcemap

16312:18215:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16776:10;-1:-1:-1;;;;;16790:5:0;16776:19;;16769:27;;;;16312:18215;;12:1:-1;9;2:12;33495:256:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33495:256:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33495:256:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;34277:247;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34277:247:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34277:247:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;34277:247:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34277:247:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34277:247:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34277:247:0;;-1:-1:-1;34277:247:0;;-1:-1:-1;;;;;34277:247: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;34277:247:0;;;;;;;;;;;;;;;;;21534:665;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21534:665:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21534:665:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22205:664;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22205:664:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22205:664:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20844:684::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20844:684:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20844:684:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25206:610::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25206:610:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25206:610:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;25206:610:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25206:610:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25206:610:0;;-1:-1:-1;25206:610:0;-1:-1:-1;;;;;;25206:610:0;;;;;;;;:::i;30878:702::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30878:702:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30878:702:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;30878:702:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30878:702:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30878:702:0;;-1:-1:-1;30878:702:0;-1:-1:-1;;;;;;30878:702:0;;;;;;;;:::i;27916:831::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27916:831:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27916:831:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;27916:831:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27916:831: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;27916:831:0;;-1:-1:-1;27916:831:0;-1:-1:-1;;;;;;27916:831:0;;;;;;;;:::i;16432:39::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16432:39:0;;;:::i;:::-;;;;-1:-1:-1;;;;;16432:39:0;;;;;;;;;;;;;;22948:711;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22948:711:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22948:711:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32430:831::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32430:831:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32430:831:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;32430:831:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32430:831: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;32430:831:0;;-1:-1:-1;32430:831:0;-1:-1:-1;;;;;;32430:831:0;;;;;;;;:::i;27101:809::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27101:809:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27101:809:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;27101:809:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27101:809: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;27101:809:0;;-1:-1:-1;27101:809:0;-1:-1:-1;;;;;;27101:809:0;;;;;;;;:::i;33759:255::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33759:255:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33759:255:0;;;;;;;;;;;;:::i;25822:588::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25822:588:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25822:588:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;25822:588:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25822:588:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25822:588:0;;-1:-1:-1;25822:588:0;-1:-1:-1;;;;;;25822:588:0;;;;;;;;:::i;28753:794::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28753:794:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;28753:794:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28753:794: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;28753:794:0;;-1:-1:-1;28753:794:0;-1:-1:-1;;;;;;28753:794:0;;;;;;;;:::i;23665:713::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23665:713:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23665:713:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;26416:679::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26416:679:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;26416:679:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26416:679: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;26416:679:0;;-1:-1:-1;26416:679:0;-1:-1:-1;;;;;;26416:679:0;;;;;;;;:::i;33305:182::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33305:182:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33305:182:0;;;;;;;;;;;;:::i;20009:829::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20009:829:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20009:829:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16384:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16384:41:0;;;:::i;31586:838::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31586:838:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;31586:838:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31586:838: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;31586:838:0;;-1:-1:-1;31586:838:0;-1:-1:-1;;;;;;31586:838:0;;;;;;;;:::i;34022:247::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34022:247:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34022:247:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;34022:247:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34022:247:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34022:247:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34022:247:0;;-1:-1:-1;34022:247:0;;-1:-1:-1;;;;;34022:247:0:i;18255:726::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18255:726:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18255:726:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;18987:979;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18987:979:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33495:256::-;33648:14;33687:56;33711:8;33721:9;33732:10;33687:23;:56::i;:::-;33680:63;33495:256;-1:-1:-1;;;;33495:256:0:o;34277:247::-;34421:21;34467:49;34491:7;34500:9;34511:4;34467:23;:49::i;:::-;34460:56;;34277:247;;;;;:::o;21534:665::-;21840:12;21854;21879;21894:43;21913:7;21922:6;21930;21894:18;:43::i;:::-;21879:58;;21948:10;21961;:33;;21985:9;21961:33;;;-1:-1:-1;;21961:33:0;22005:74;;;-1:-1:-1;;;22005:74:0;;22027:10;22005:74;;;;22047:4;22005:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21948:46;;-1:-1:-1;;;;;;22005:21:0;;;;;:74;;;;;-1:-1:-1;;22005:74:0;;;;;;;;-1:-1:-1;22005:21:0;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;22005:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22005:74:0;;;;22111:80;22127:6;22135;22143:9;22154:10;22166;22178:2;22182:8;22111:15;:80::i;:::-;22090:101;;;;;;;;21534:665;;;;;;;;;;;;;;;;:::o;22205:664::-;22496:16;22514:15;22542:12;22557:41;22576:7;22585:5;22592;22557:18;:41::i;:::-;22542:56;;22609:10;22622;:33;;22646:9;22622:33;;;-1:-1:-1;;22622:33:0;22666:74;;;-1:-1:-1;;;22666:74:0;;22688:10;22666:74;;;;22708:4;22666:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22609:46;;-1:-1:-1;;;;;;22666:21:0;;;;;:74;;;;;-1:-1:-1;;22666:74:0;;;;;;;;-1:-1:-1;22666:21:0;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;22666:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22666:74:0;;;;22779:82;22799:5;22806:9;22817:14;22833:13;22848:2;22852:8;22779:19;:82::i;:::-;22751:110;;;;-1:-1:-1;22205:664:0;-1:-1:-1;;;;;;;;;;;;;22205:664:0:o;20844:684::-;21083:16;21101:15;21064:8;16542:15;16530:8;:27;;16522:58;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;;;;21157:198:::1;21187:5;21207;21227:9;21251:14;21280:13;21316:4;21336:8;21157:15;:198::i;:::-;21129:226:::0;;-1:-1:-1;21129:226:0;-1:-1:-1;21366:51:0::1;21394:5:::0;21401:2;21129:226;21366:27:::1;:51::i;:::-;21435:5;-1:-1:-1::0;;;;;21428:22:0::1;;21451:10;21428:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21428:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21428:34:0;;;;21473:47;21505:2;21509:10;21473:31;:47::i;:::-;20844:684:::0;;;;;;;;;;:::o;25206:610::-;25430:21;25411:8;16542:15;16530:8;:27;;16522:58;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;;;;25474:49:::1;25499:7;25508:8;25518:4;;25474:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25474:24:0::1;::::0;-1:-1:-1;;;25474:49:0:i:1;:::-;25464:59;;25573:12;25542:7;25567:1;25550:7;:14;:18;25542:27;;;;;;;;;;;;;;:43;;25534:93;;;;-1:-1:-1::0;;;25534:93:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25638:135;25684:4;;25689:1;25684:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;25684:7:0::1;25693:10;25705:45;25724:7;25733:4;;25738:1;25733:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;25733:7:0::1;25742:4;;25747:1;25742:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;25742:7:0::1;25705:18;:45::i;:::-;25752:7;25760:1;25752:10;;;;;;;;;;;;;;25638:31;:135::i;:::-;25784:24;25790:7;25799:4;;25784:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25805:2:0;;-1:-1:-1;25784:5:0::1;::::0;-1:-1:-1;;25784:24:0:i:1;:::-;25206:610:::0;;;;;;;;;:::o;30878:702::-;31112:8;16542:15;16530:8;:27;;16522:58;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;;;;31133:133:::1;31179:4;;31184:1;31179:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31179:7:0::1;31188:10;31200:45;31219:7;31228:4;;31233:1;31228:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31228:7:0::1;31237:4;;31242:1;31237:7;;;;;;31200:45;31247:8;31133:31;:133::i;:::-;31277:18;31305:4:::0;;-1:-1:-1;;31310:15:0;;31305:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31305:21:0::1;-1:-1:-1::0;;;;;31298:39:0::1;;31338:2;31298:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31298:43:0::1;-1:-1:-1::0;;;;;31298:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31298:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31298:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31298:43:0;31352:44:::1;::::0;;31298:43:::1;31352:44:::0;;::::1;::::0;;;;;;;;;;;31298:43;;-1:-1:-1;31352:44:0::1;::::0;;;31387:4;;;;;;31352:44;::::1;::::0;31387:4;;31352:44;31387:4;31352:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31393:2:0;;-1:-1:-1;31352:34:0::1;::::0;-1:-1:-1;;31352:44:0:i:1;:::-;31495:12:::0;31429:62:::1;31477:13:::0;31436:4;;-1:-1:-1;;31441:15:0;;31436:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31436:21:0::1;-1:-1:-1::0;;;;;31429:39:0::1;;31469:2;31429:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31429:43:0::1;-1:-1:-1::0;;;;;31429:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31429:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31429:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31429:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;31407:165;;;;-1:-1:-1::0;;;31407:165:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16591:1;30878:702:::0;;;;;;;:::o;27916:831::-;28131:21;28103:8;16542:15;16530:8;:27;;16522:58;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28203:5:0::1;28178:30;:4:::0;;-1:-1:-1;;28183:15:0;;28178:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28178:21:0::1;-1:-1:-1::0;;;;;28178:30:0::1;;28170:66;;;::::0;;-1:-1:-1;;;28170:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;28170:66:0;;;;;;;;;;;;;::::1;;28257:49;28282:7;28291:8;28301:4;;28257:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28257:24:0::1;::::0;-1:-1:-1;;;28257:49:0:i:1;:::-;28247:59;;28356:12;28325:7;28350:1;28333:7;:14;:18;28325:27;;;;;;;;;;;;;;:43;;28317:93;;;;-1:-1:-1::0;;;28317:93:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28421:135;28467:4;;28472:1;28467:7;;;;;;28421:135;28567:35;28573:7;28582:4;;28567:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28596:4:0::1;::::0;-1:-1:-1;28567:5:0::1;::::0;-1:-1:-1;;28567:35:0:i:1;:::-;28620:5;-1:-1:-1::0;;;;;28613:22:0::1;;28636:7;28661:1;28644:7;:14;:18;28636:27;;;;;;;;;;;;;;28613:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28613:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28613:51:0;;;;28675:64;28707:2;28711:7;28736:1;28719:7;:14;:18;28711:27;;;;;;;;;;;;;;28675:31;:64::i;16432:39::-:0;;;:::o;22948:711::-;23216:15;23197:8;16542:15;16530:8;:27;;16522:58;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;;;;23261:198:::1;23291:5;23311;23331:9;23355:14;23384:13;23420:4;23440:8;23261:15;:198::i;:::-;23509:38;::::0;;-1:-1:-1;;;23509:38:0;;23541:4:::1;23509:38;::::0;::::1;::::0;;;23244:215;;-1:-1:-1;23470:78:0::1;::::0;-1:-1:-1;23498:5:0;;23505:2;;-1:-1:-1;;;;;23509: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;23509:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23509:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23509:38:0;23470:27:::1;:78::i;:::-;23566:5;-1:-1:-1::0;;;;;23559:22:0::1;;23582:10;23559:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23559:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23559:34:0;;;;23604:47;23636:2;23640:10;23604:31;:47::i;32430:831::-:0;32698:8;16542:15;16530:8;:27;;16522:58;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32757:5:0::1;32732:30;:4:::0;;-1:-1:-1;;32737:15:0;;32732:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32732:21:0::1;-1:-1:-1::0;;;;;32732:30:0::1;;32724:66;;;::::0;;-1:-1:-1;;;32724:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;32724:66:0;;;;;;;;;;;;;::::1;;32801:133;32847:4;;32852:1;32847:7;;;;;;32801:133;32945:55;32980:4;;32945:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32994:4:0::1;::::0;-1:-1:-1;32945:34:0::1;::::0;-1:-1:-1;;32945:55:0:i:1;:::-;33028:38;::::0;;-1:-1:-1;;;33028:38:0;;33060:4:::1;33028:38;::::0;::::1;::::0;;;33011:14:::1;::::0;-1:-1:-1;;;;;33035:5:0::1;33028:23;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;33028:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33028:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33028:38:0;;-1:-1:-1;33085:25:0;;::::1;;33077:75;;;;-1:-1:-1::0;;;33077:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33170:5;-1:-1:-1::0;;;;;33163:22:0::1;;33186:9;33163:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33163:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33163:33:0;;;;33207:46;33239:2;33243:9;33207:31;:46::i;27101:809::-:0;27316:21;27288:8;16542:15;16530:8;:27;;16522:58;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27388:5:0::1;27363:30;:4:::0;;-1:-1:-1;;27368:15:0;;27363:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27363:21:0::1;-1:-1:-1::0;;;;;27363:30:0::1;;27355:66;;;::::0;;-1:-1:-1;;;27355:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27355:66:0;;;;;;;;;;;;;::::1;;27442:49;27466:7;27475:9;27486:4;;27442:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27442:23:0::1;::::0;-1:-1:-1;;;27442:49:0:i:1;:::-;27432:59;;27524:11;27510:7;27518:1;27510:10;;;;;;;;;;;;;;:25;;27502:71;;;;-1:-1:-1::0;;;27502:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33759:255:::0;33912:13;33950:56;33973:9;33984;33995:10;33950:22;:56::i;25822:588::-;26046:21;26027:8;16542:15;16530:8;:27;;16522:58;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;;;;26090:49:::1;26114:7;26123:9;26134:4;;26090:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26090:23:0::1;::::0;-1:-1:-1;;;26090:49:0:i:1;:::-;26080:59;;26172:11;26158:7;26166:1;26158:10;;;;;;;;;;;;;;:25;;26150:71;;;;-1:-1:-1::0;;;26150:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28753:794:::0;28967:21;28939:8;16542:15;16530:8;:27;;16522:58;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;;;;29025:5:::1;-1:-1:-1::0;;;;;29014:16:0::1;:4;;29019:1;29014:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29014:7:0::1;-1:-1:-1::0;;;;;29014:16:0::1;;29006:52;;;::::0;;-1:-1:-1;;;29006:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;29006:52:0;;;;;;;;;;;;;::::1;;29079:49;29103:7;29112:9;29123:4;;29079:49;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29079:23:0::1;::::0;-1:-1:-1;;;29079:49:0:i:1;:::-;29069:59;;29161:9;29147:7;29155:1;29147:10;;;;;;;;;;;;;;:23;;29139:69;;;;-1:-1:-1::0;;;29139:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29226:5;-1:-1:-1::0;;;;;29219:21:0::1;;29248:7;29256:1;29248:10;;;;;;;;;;;;;;29219:42;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29219:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29219:42:0;;;;;29286:5;-1:-1:-1::0;;;;;29279:22:0::1;;29302:45;29321:7;29330:4;;29335:1;29330:7;;;;;;29302:45;29349:7;29357:1;29349:10;;;;;;;;;;;;;;29279:81;;;;;;;;;;;;;-1:-1:-1::0;;;;;29279:81:0::1;-1:-1:-1::0;;;;;29279:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29279:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29279:81:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29279:81:0;29272:89:::1;;;;29372:24;29378:7;29387:4;;29372:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29393:2:0;;-1:-1:-1;29372:5:0::1;::::0;-1:-1:-1;;29372:24:0:i:1;:::-;29460:7;29468:1;29460:10;;;;;;;;;;;;;;29448:9;:22;29444:95;;;29472:67;29504:10;29528:7;29536:1;29528:10;;;;;;;;;;;;;;29516:9;:22;29472:31;:67::i;:::-;28753:794:::0;;;;;;;;:::o;23665:713::-;23985:15;24013:12;24028:41;24047:7;24056:5;24063;24028:18;:41::i;:::-;24013:56;;24080:10;24093;:33;;24117:9;24093:33;;;-1:-1:-1;;24093:33:0;24137:74;;;-1:-1:-1;;;24137:74:0;;24159:10;24137:74;;;;24179:4;24137:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24080:46;;-1:-1:-1;;;;;;24137:21:0;;;;;:74;;;;;-1:-1:-1;;24137:74:0;;;;;;;;-1:-1:-1;24137:21:0;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;24137:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24137:74:0;;;;24235:135;24298:5;24305:9;24316:14;24332:13;24347:2;24351:8;24235:48;:135::i;:::-;24222:148;23665:713;-1:-1:-1;;;;;;;;;;;;;23665:713:0:o;26416:679::-;26633:21;26605:8;16542:15;16530:8;:27;;16522:58;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;;;;26691:5:::1;-1:-1:-1::0;;;;;26680:16:0::1;:4;;26685:1;26680:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26680:7:0::1;-1:-1:-1::0;;;;;26680:16:0::1;;26672:52;;;::::0;;-1:-1:-1;;;26672:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;26672:52:0;;;;;;;;;;;;;::::1;;26745:50;26770:7;26779:9;26790:4;;26745:50;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26745:24:0::1;::::0;-1:-1:-1;;;26745:50:0:i:1;:::-;26735:60;;26845:12;26814:7;26839:1;26822:7;:14;:18;26814:27;;;;;;;;;;;;;;:43;;26806:93;;;;-1:-1:-1::0;;;26806:93:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26917:5;-1:-1:-1::0;;;;;26910:21:0::1;;26939:7;26947:1;26939:10;;;;;;;;;;;;;;26910:42;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26910:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26910:42:0;;;;;26977:5;-1:-1:-1::0;;;;;26970:22:0::1;;26993:45;27012:7;27021:4;;27026:1;27021:7;;;;;;26993:45;27040:7;27048:1;27040:10;;;;;;;;;;;;;;26970:81;;;;;;;;;;;;;-1:-1:-1::0;;;;;26970:81:0::1;-1:-1:-1::0;;;;;26970:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26970:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26970:81:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26970:81:0;26963:89:::1;;;;27063:24;27069:7;27078:4;;27063:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27084:2:0;;-1:-1:-1;27063:5:0::1;::::0;-1:-1:-1;;27063:24:0:i:1;33305:182::-:0;33402:12;33434:45;33451:7;33460:8;33470;33434:16;:45::i;20009:829::-;20263:12;20277;20244:8;16542:15;16530:8;:27;;16522:58;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;;;;20302:12:::1;20317:43;20336:7;20345:6;20353;20317:18;:43::i;:::-;20371:56;::::0;;-1:-1:-1;;;20371:56:0;;20399:10:::1;20371:56;::::0;::::1;::::0;-1:-1:-1;;;;;20371:27:0;::::1;:56:::0;;;;;;;;;;;;;;20302:58;;-1:-1:-1;20371:27:0;;::::1;::::0;:56;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20371:27:0;:56;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20371:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20371:56:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;20495:23:0::1;::::0;;;;;-1:-1:-1;;;;;20495:23:0;;::::1;;::::0;::::1;::::0;;;20465:12:::1;::::0;;;20495:19;;::::1;::::0;::::1;::::0;:23;;;;;;;;;;;20465:12;20495:19;:23;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20495:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20495:23:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20495:23:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20495:23:0;-1:-1:-1;20530:14:0::1;20549:37;20571:6:::0;20579;20549:21:::1;:37::i;:::-;20529:57;;;20628:6;-1:-1:-1::0;;;;;20618:16:0::1;:6;-1:-1:-1::0;;;;;20618:16:0::1;;:58;;20659:7;20668;20618:58;;;20638:7;20647;20618:58;20597:79:::0;;-1:-1:-1;20597:79:0;-1:-1:-1;20695:21:0;;::::1;;20687:66;;;::::0;;-1:-1:-1;;;20687:66:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;20783:10;20772:7;:21;;20764:66;;;::::0;;-1:-1:-1;;;20764:66:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;16591:1;;;;20009:829:::0;;;;;;;;;;;:::o;16384:41::-;;;:::o;31586:838::-;31847:8;16542:15;16530:8;:27;;16522:58;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;;;;31892:5:::1;-1:-1:-1::0;;;;;31881:16:0::1;:4;;31886:1;31881:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31881:7:0::1;-1:-1:-1::0;;;;;31881:16:0::1;;31873:52;;;::::0;;-1:-1:-1;;;31873:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;31873:52:0;;;;;;;;;;;;;::::1;;31936:13;31952:9;31936:25;;31979:5;-1:-1:-1::0;;;;;31972:21:0::1;;32001:8;31972:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31972:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31972:40:0;;;;;32037:5;-1:-1:-1::0;;;;;32030:22:0::1;;32053:45;32072:7;32081:4;;32086:1;32081:7;;;;;;32053:45;32100:8;32030:79;;;;;;;;;;;;;-1:-1:-1::0;;;;;32030:79:0::1;-1:-1:-1::0;;;;;32030:79:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32030:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32030:79:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32030:79:0;32023:87:::1;;;;32121:18;32149:4:::0;;-1:-1:-1;;32154:15:0;;32149:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32149:21:0::1;-1:-1:-1::0;;;;;32142:39:0::1;;32182:2;32142:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32142:43:0::1;-1:-1:-1::0;;;;;32142:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32142:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32142:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32142:43:0;32196:44:::1;::::0;;32142:43:::1;32196:44:::0;;::::1;::::0;;;;;;;;;;;32142:43;;-1:-1:-1;32196:44:0::1;::::0;;;32231:4;;;;;;32196:44;::::1;::::0;32231:4;;32196:44;32231:4;32196:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32237:2:0;;-1:-1:-1;32196:34:0::1;::::0;-1:-1:-1;;32196:44:0:i:1;:::-;32339:12:::0;32273:62:::1;32321:13:::0;32280:4;;-1:-1:-1;;32285:15:0;;32280:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32280:21:0::1;-1:-1:-1::0;;;;;32273:39:0::1;;32313:2;32273:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32273:43:0::1;-1:-1:-1::0;;;;;32273:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;34022:247:0::0;34166:21;34212:49;34237:7;34246:8;34256:4;34212:24;:49::i;18255:726::-;18543:12;18557;18571:14;18524:8;16542:15;16530:8;:27;;16522:58;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;;;;18619:85:::1;18633:6;18641;18649:14;18665;18681:10;18693;18619:13;:85::i;:::-;18598:106:::0;;-1:-1:-1;18598:106:0;-1:-1:-1;18715:12:0::1;18730:43;18749:7;18758:6:::0;18766;18730:18:::1;:43::i;:::-;18715:58;;18784:66;18816:6;18824:10;18836:4;18842:7;18784:31;:66::i;:::-;18861;18893:6;18901:10;18913:4;18919:7;18861:31;:66::i;:::-;18959:4;-1:-1:-1::0;;;;;18950:19:0::1;;18970:2;18950:23;;;;;;;;;;;;;-1:-1:-1::0;;;;;18950:23:0::1;-1:-1:-1::0;;;;;18950:23:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18950:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18950:23:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18950:23:0;18255:726;;;;-1:-1:-1;18950:23:0;;-1:-1:-1;18255:726:0;;-1:-1:-1;;;;;;;;;18255:726:0:o;18987:979::-;19242:16;19260:15;19277:14;19223:8;16542:15;16530:8;:27;;16522:58;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;-1:-1:-1;;;16522:58:0;;;;;;;;;;;;;;;19332:178:::1;19360:5;19380;19400:18;19433:9;19457:14;19486:13;19332;:178::i;:::-;19304:206:::0;;-1:-1:-1;19304:206:0;-1:-1:-1;19521:12:0::1;19536:41;19555:7;19564:5:::0;19571::::1;19536:18;:41::i;:::-;19521:56;;19588:69;19620:5;19627:10;19639:4;19645:11;19588:31;:69::i;:::-;19675:5;-1:-1:-1::0;;;;;19668:21:0::1;;19697:10;19668:42;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19668:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19668:42:0;;;;;19735:5;-1:-1:-1::0;;;;;19728:22:0::1;;19751:4;19757:10;19728:40;;;;;;;;;;;;;-1:-1:-1::0;;;;;19728:40:0::1;-1:-1:-1::0;;;;;19728:40:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19728:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19728:40:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19728:40:0;19721:48:::1;;;;19801:4;-1:-1:-1::0;;;;;19792:19:0::1;;19812:2;19792:23;;;;;;;;;;;;;-1:-1:-1::0;;;;;19792:23:0::1;-1:-1:-1::0;;;;;19792:23:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19792:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19792:23:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19792:23:0;;-1:-1:-1;19867:9:0::1;:22:::0;-1:-1:-1;19863:95:0::1;;;19891:67;19923:10;19947;19935:9;:22;19891:31;:67::i;:::-;16591:1;18987:979:::0;;;;;;;;;;;:::o;12771:505::-;12864:14;12910:1;12899:8;:12;12891:62;;;;-1:-1:-1;;;12891:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12984:1;12972:9;:13;:31;;;;;13002:1;12989:10;:14;12972:31;12964:78;;;;-1:-1:-1;;;12964:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13053:20;13076:17;:8;13089:3;13076:17;:12;:17;:::i;:::-;13053:40;-1:-1:-1;13104:14:0;13121:31;13053:40;13141:10;13121:31;:19;:31;:::i;:::-;13104:48;-1:-1:-1;13163:16:0;13182:40;13206:15;13182:19;:9;13196:4;13182:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;13163:59;;13257:11;13245:9;:23;;;;;;;12771:505;-1:-1:-1;;;;;;;12771:505:0:o;14525:526::-;14626:21;14683:1;14668:4;:11;:16;;14660:53;;;;;-1:-1:-1;;;14660:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14745:4;:11;14734:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14734:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14734:23:0;;14724:33;;14798:9;14768:7;14793:1;14776:7;:14;:18;14768:27;;;;;;;;;;;;;;;;;:39;14832:11;;-1:-1:-1;;14832:15:0;14818:226;14849:5;;14818:226;;14877:14;14893:15;14912:42;14924:7;14933:4;14942:1;14938;:5;14933:11;;;;;;;;;;;;;;14946:4;14951:1;14946:7;;;;;;;;;;;;;;14912:11;:42::i;:::-;14876:78;;;;14986:46;14998:7;15006:1;14998:10;;;;;;;;;;;;;;15010:9;15021:10;14986:11;:46::i;:::-;14969:7;14981:1;14977;:5;14969:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;14856:3:0;14818:226;;;;14525:526;;;;;:::o;11306:478::-;11395:12;11421:14;11437;11455:26;11466:6;11474;11455:10;:26::i;:::-;11619:32;;;-1:-1:-1;;11619:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;11619:32:0;;;;;11609:43;;;;;;11522:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;11522:251:0;;;;;;;11512:262;;;;;;;;;11306:478;-1:-1:-1;;;;;11306:478:0:o;1477:398::-;1709:45;;;-1:-1:-1;;;;;1709:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1709:45:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;1709:45:0;179:29:-1;160:49;;1698:57:0;;;;1663:12;;1677:17;;1698:10;;;;1709:45;1698:57;;;25:18:-1;1698: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;;;1698: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;;1662:93:0;;;;1774:7;:57;;;;-1:-1:-1;1786:11:0;;:16;;:44;;;1817:4;1806:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1806:24:0;1786:44;1766:101;;;;;-1:-1:-1;;;1766:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1477:398;;;;;:::o;2339:202::-;2453:12;;;2413;2453;;;;;;;;;-1:-1:-1;;;;;2431:7:0;;;2446:5;;2431: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;;;2431: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;;2412:54:0;;;2485:7;2477:56;;;;-1:-1:-1;;;2477:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2339:202;;;:::o;13939:505::-;14040:21;14097:1;14082:4;:11;:16;;14074:53;;;;;-1:-1:-1;;;14074:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14159:4;:11;14148:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14148:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14148:23:0;;14138:33;;14195:8;14182:7;14190:1;14182:10;;;;;;;;;;;;;:21;;;;;14219:6;14214:223;14245:1;14231:4;:11;:15;14227:1;:19;14214:223;;;14269:14;14285:15;14304:42;14316:7;14325:4;14330:1;14325:7;;;;;;;;;;;;;;14334:4;14339:1;14343;14339:5;14334:11;;;;;;;14304:42;14268:78;;;;14378:47;14391:7;14399:1;14391:10;;;;;;;;;;;;;;14403:9;14414:10;14378:12;:47::i;:::-;14361:7;14369:1;14373;14369:5;14361:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;14248:3:0;;14214:223;;1883:448;2154:51;;;-1:-1:-1;;;;;2154:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2154:51:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;-1:-1;;;179:29;160:49;;2143:63:0;;;;2108:12;;2122:17;;2143:10;;;;2154:51;2143:63;;;25:18:-1;2143: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;;;2143: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;;2107:99:0;;;;2225:7;:57;;;;-1:-1:-1;2237:11:0;;:16;;:44;;;2268:4;2257:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2257:24:0;2237:44;2217:106;;;;-1:-1:-1;;;2217:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1883:448;;;;;;:::o;24489:711::-;24596:6;24591:602;24622:1;24608:4;:11;:15;24604:1;:19;24591:602;;;24646:13;24661:14;24680:4;24685:1;24680:7;;;;;;;;;;;;;;24689:4;24694:1;24698;24694:5;24689:11;;;;;;;;;;;;;;24645:56;;;;24717:14;24736:36;24758:5;24765:6;24736:21;:36::i;:::-;24716:56;;;24787:14;24804:7;24812:1;24816;24812:5;24804:14;;;;;;;;;;;;;;24787:31;;24834:15;24851;24879:6;-1:-1:-1;;;;;24870:15:0;:5;-1:-1:-1;;;;;24870:15:0;;:61;;24912:9;24928:1;24870:61;;;24894:1;24898:9;24870:61;24833:98;;;;24946:10;24977:1;24963:4;:11;:15;24959:1;:19;:76;;25032:3;24959:76;;;24981:48;25000:7;25009:6;25017:4;25022:1;25026;25022:5;25017:11;;;;;;;;;;;;;;24981:18;:48::i;:::-;24946:89;;25059:42;25078:7;25087:5;25094:6;25059:18;:42::i;:::-;-1:-1:-1;;;;;25050:57:0;;25126:10;25138;25150:2;25164:1;25154:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;25154:12:0;87:42:-1;143:17;;-1:-1;25154:12:0;;25050:131;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25050:131:0;-1:-1:-1;;;;;25050:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;25050:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25050:131:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;24625:3:0;;;;;-1:-1:-1;24591:602:0;;-1:-1:-1;;;;;;;;24591:602:0;;;24489:711;;;:::o;29694:1178::-;29807:6;29802:1063;29833:1;29819:4;:11;:15;29815:1;:19;29802:1063;;;29857:13;29872:14;29891:4;29896:1;29891:7;;;;;;;;;;;;;;29900:4;29905:1;29909;29905:5;29900:11;;;;;;;;;;;;;;29856:56;;;;29928:14;29947:36;29969:5;29976:6;29947:21;:36::i;:::-;29927:56;;;29998:13;30023:42;30042:7;30051:5;30058:6;30023:18;:42::i;:::-;29998:68;;30081:16;30112:17;30200:13;30215;30233:4;-1:-1:-1;;;;;30233:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30233:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30233:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30233:18:0;;;;;;;30199:52;;;;;-1:-1:-1;30199:52:0;;-1:-1:-1;30267:17:0;;-1:-1:-1;;;;;30308:15:0;;;;;;;:61;;30350:8;30360;30308:61;;;30327:8;30337;30308:61;30266:103;;;;30398:56;30441:12;30405:5;-1:-1:-1;;;;;30398:23:0;;30430:4;30398:38;;;;;;;;;;;;;-1:-1:-1;;;;;30398:38:0;-1:-1:-1;;;;;30398:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;30398:56:0;30384:70;;30484:65;30508:11;30521:12;30535:13;30484:23;:65::i;:::-;30469:80;;29802:1063;;;;30580:15;30597;30625:6;-1:-1:-1;;;;;30616:15:0;:5;-1:-1:-1;;;;;30616:15:0;;:67;;30661:12;30680:1;30616:67;;;30640:1;30644:12;30616:67;30579:104;;;;30698:10;30729:1;30715:4;:11;:15;30711:1;:19;:76;;30784:3;30711:76;;;30733:48;30752:7;30761:6;30769:4;30774:1;30778;30774:5;30769:11;;;;;;;30733:48;30840:12;;;30850:1;30840:12;;;;;;;;;;30802:51;;;;;;;;;;;;;;;-1:-1:-1;;;;;30802:51:0;;;;;;;;;;;;;;;;;;;;;;30698:89;;-1:-1:-1;30802:9:0;;;;;;30812:10;;30824;;30698:89;;30840:12;;30802:51;;;;;;;;30840:12;;30802:51;;;;30840: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;30802:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30802:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29836:3:0;;;;;-1:-1:-1;29802:1063:0;;-1:-1:-1;;;;;;;;;;29802:1063:0;10340:129;10424:5;;;10419:16;;;;10411:50;;;;;-1:-1:-1;;;10411:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;13397:460;13490:13;13536:1;13524:9;:13;13516:64;;;;-1:-1:-1;;;13516:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13611:1;13599:9;:13;:31;;;;;13629:1;13616:10;:14;13599:31;13591:78;;;;-1:-1:-1;;;13591:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13680:14;13697:34;13726:4;13697:24;:9;13711;13697:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;13680:51;-1:-1:-1;13742:16:0;13761:34;13791:3;13761:25;:10;13776:9;13761:25;:14;:25;:::i;:34::-;13742:53;;13817:32;13847:1;13830:11;13818:9;:23;;;;;;;13817:32;:29;:32;:::i;:::-;13806:43;13397:460;-1:-1:-1;;;;;;13397:460:0:o;12340:309::-;12422:12;12465:1;12455:7;:11;12447:55;;;;;-1:-1:-1;;;12447:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12532:1;12521:8;:12;:28;;;;;12548:1;12537:8;:12;12521:28;12513:75;;;;-1:-1:-1;;;12513:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12633:8;12609:21;:7;12621:8;12609:21;:11;:21;:::i;:::-;:32;;;;;;;12340:309;-1:-1:-1;;;;12340:309:0:o;10877:337::-;10952:14;10968;11013:6;-1:-1:-1;;;;;11003:16:0;:6;-1:-1:-1;;;;;11003:16:0;;;10995:60;;;;;-1:-1:-1;;;10995:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11094:6;-1:-1:-1;;;;;11085:15:0;:6;-1:-1:-1;;;;;11085:15:0;;:53;;11123:6;11131;11085:53;;;11104:6;11112;11085:53;11066:72;;-1:-1:-1;11066:72:0;-1:-1:-1;;;;;;11157:20:0;;11149:57;;;;;-1:-1:-1;;;11149:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10877:337;;;;;:::o;16901:1348::-;17214:44;;;;;;-1:-1:-1;;;;;17214:44:0;;;;;;;;;;;;;;;;17119:12;;;;;;17226:7;17214:28;;;;;;:44;;;;;;;;;;;;;;;:28;:44;;;2:2:-1;;;;27:1;24;17:12;2:2;17214:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17214:44:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17214:44:0;-1:-1:-1;;;;;17214:58:0;;17210:138;;;17289:47;;;;;;-1:-1:-1;;;;;17289:47:0;;;;;;;;;;;;;;;;17301:7;17289:31;;;;;;:47;;;;;;;;;;;;;;;-1:-1:-1;17289:31:0;:47;;;2:2:-1;;;;27:1;24;17:12;2:2;17289:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17289:47:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;17210:138:0;17359:13;17374;17391:47;17414:7;17423:6;17431;17391:22;:47::i;:::-;17358:80;;;;17453:8;17465:1;17453:13;:30;;;;-1:-1:-1;17470:13:0;;17453:30;17449:793;;;17522:14;;-1:-1:-1;17538:14:0;;-1:-1:-1;17449:793:0;;;17586:19;17608:52;17625:14;17641:8;17651;17608:16;:52::i;:::-;17586:74;;17697:14;17679;:32;17675:556;;17758:10;17740:14;:28;;17732:73;;;;;-1:-1:-1;;;17732:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17846:14;;-1:-1:-1;17862:14:0;-1:-1:-1;17862:14:0;17675:556;;;17918:19;17940:52;17957:14;17973:8;17983;17940:16;:52::i;:::-;17918:74;;18036:14;18018;:32;;18011:40;;;;18096:10;18078:14;:28;;18070:73;;;;;-1:-1:-1;;;18070:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18184:14;-1:-1:-1;18200:14:0;;-1:-1:-1;17675:556:0;17449:793;;16901:1348;;;;;;;;;;;:::o;10477:142::-;10529:6;10556;;;:30;;-1:-1:-1;;10571:5:0;;;10585:1;10580;10571:5;10580:1;10566:15;;;;;:20;10556:30;10548:63;;;;;-1:-1:-1;;;10548:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;10204:128;10288:5;;;10283:16;;;;10275:49;;;;;-1:-1:-1;;;10275:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;11842:385;11935:13;11950;11977:14;11996:26;12007:6;12015;11996:10;:26::i;:::-;11976:46;;;12034:13;12049;12076:32;12084:7;12093:6;12101;12076:7;:32::i;:::-;-1:-1:-1;;;;;12067:54:0;;:56;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12067:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12067:56:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12067:56:0;;;;;;;12033:90;;;;;-1:-1:-1;12033:90:0;;-1:-1:-1;;;;;;12157:16:0;;;;;;;:62;;12200:8;12210;12157:62;;;12177:8;12187;12157:62;12134:85;;;;-1:-1:-1;11842:385:0;-1:-1:-1;;;;;;;11842:385:0:o

Swarm Source

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