Contract 0x06f8ed60393ac6a4b16900273c9313222dfe9940 2

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xb83daa9b61aa15aef43d9e9ff723dafac8d1b58400e3713fa020c388d5397c77Swap Exact Token...75399882021-11-28 13:42:223 mins ago0x92c765b602f40db2e7f182f97fa56061a4c1c937 IN  Canary: Router0 AVAX0.0036877282725.41525628
0x709ed012ec8c0906fb5a69b059d0c8e8f63657ebf3a029c7f9ec2e6fad01415eSwap Exact Token...75399612021-11-28 13:41:284 mins ago0x92c765b602f40db2e7f182f97fa56061a4c1c937 IN  Canary: Router0 AVAX0.00081669023325.404075947
0x895682e3005a043098094ccbfe6223c8bf44eaae74dc7ff99e397d4d8721a6baAdd Liquidity AV...75395132021-11-28 13:26:2819 mins ago0xc0adfd401d1535156c1741f7ed32e50023c8eefd IN  Canary: Router0.420783356470463 AVAX0.0050634154928.155425941
0xd206068edd0a41814c794eb1917a21af2a28167730a8ca068507a3e1b72b98f2Swap Exact Token...75395122021-11-28 13:26:2519 mins ago0x0bc7860c74b6f58a61cc39302a14dfcb7faebf2b IN  Canary: Router0 AVAX0.00390670414726.92217783
0x08aa1e1ff5a94bbfdb2e9f00c7a6480a1d375aaf5a8a24cc167b9b59b75f0065Swap Exact Token...75394802021-11-28 13:25:0921 mins ago0xc0adfd401d1535156c1741f7ed32e50023c8eefd IN  Canary: Router0 AVAX0.00362717525
0xd48bfb99ff92bf4ab71ca2a90174da878df4486f6280b464285ac366c194ee40Swap Exact AVAX ...75372772021-11-28 12:11:281 hr 34 mins ago0x6581db6ae564f7fefe18567d9e2db2417c635170 IN  Canary: Router0.2 AVAX0.00320637525
0x24f6981e0052f8f573c8d49613b41ca4c65146d4f0bb4a955632064311baa630Swap Exact Token...75355622021-11-28 11:13:492 hrs 32 mins ago0xd1e83d9ca6c121ac7bb7dd6eded3554006ff20fb IN  Canary: Router0 AVAX0.003989232527.5
0x0ce49403631edb61309694521d98b9b3bd6d6caa44b53c682f99bc58c04d8358Swap Exact AVAX ...75354902021-11-28 11:11:202 hrs 34 mins ago0x4ee8bafbf459416eb804f73b54f8c33474b0ce54 IN  Canary: Router0.2 AVAX0.00320607525
0x426b2e87745a9e60369ffc87803cd5bacd50611d006bad8438e0a99e76da1461Swap Exact Token...75351942021-11-28 11:01:132 hrs 45 mins ago0xf7ca54242066dab2365ccde499bd826bb492bd14 IN  Canary: Router0 AVAX0.00362777525
0x10bbf70d01b55ba81d78fa6722c10fc2cb862ae7a49bb8b766eff1329c3bbe9bRemove Liquidity...75351462021-11-28 10:59:382 hrs 46 mins ago0xf7ca54242066dab2365ccde499bd826bb492bd14 IN  Canary: Router0 AVAX0.005846425
0x8df6eb887bea5e44acf6e95f52a333d8e59d8cec35015b631ee14bd746d36a7bSwap Exact Token...75338342021-11-28 10:15:413 hrs 30 mins ago0x42e3f9a7ff1ccdf99453805bc0a716db12e1c811 IN  Canary: Router0 AVAX0.00362747525
0xc90b2e7c257a16bbf840f98f1f3db3d9d483081602379700fe806cbae5891320Swap Exact Token...75334712021-11-28 10:03:353 hrs 42 mins ago0x682cb4b4d28ea0f1c20365d9b456d63cfe4430b5 IN  Canary: Router0 AVAX0.0032036525
0x684b54a4bc7471c224f05d6bd04fc32175a86cb0bc90159a7960c6b793c9c58bSwap Exact Token...75316122021-11-28 9:00:564 hrs 45 mins ago0x9cd13b090a6c7fab4cd3ff1ff6fff4689dead0d5 IN  Canary: Router0 AVAX0.003989892527.5
0x1389cd76b7853f2151707f0c9764cd10af9cd28158a77c5b2f7e0664ddfd4fe6Remove Liquidity75314572021-11-28 8:55:474 hrs 50 mins ago0x9cd13b090a6c7fab4cd3ff1ff6fff4689dead0d5 IN  Canary: Router0 AVAX0.004098132527.5
0x39c93c3ea45d6650bc07f870ec20268321502637159d2f2466944d54c57093b8Swap Exact AVAX ...75307982021-11-28 8:33:385 hrs 12 mins ago0x5ff40363420c65c959c978d4e459e8bb6cec9452 IN  Canary: Router0.05 AVAX0.00320607525
0xd472d287fec7b206a9b1a9aa4ce8ae4d75c1c67e81946c0e33d4ec3d9199194eAdd Liquidity75292302021-11-28 7:40:486 hrs 5 mins ago0xe5bfefe3fa5be2c454f296f28cbabc3f726f01c7 IN  Canary: Router0 AVAX0.003923625
0x27ce559537433c690b3599d7b0630227fcfc6d313ebe2632ddd5bdf08d8c6b18Swap Exact Token...75285712021-11-28 7:18:406 hrs 27 mins ago0xbce91ad6afec2adbd89a2c9efc869752d8e1fe52 IN  Canary: Router0 AVAX0.00362747525
0xb9e8f2a7d19f30aebc7e6d5a89e7be9e8b969107709702420f7a2384f9145dacSwap Exact AVAX ...75278252021-11-28 6:53:536 hrs 52 mins ago0xe49ea98c411eaec6232db67955002750a9064f72 IN  Canary: Router0.5 AVAX0.0034099667525.517018377
0x3e265f31c3a38ee67b84eae7bef1ea37d044ed70b6abf1e1766da0ba9cd0eb93Swap Exact AVAX ...75278172021-11-28 6:53:376 hrs 52 mins ago0xe49ea98c411eaec6232db67955002750a9064f72 IN  Canary: Router0.5 AVAX0.004062106726.94866289
0x0d2215a358dd228a36f263472d86706d809d7effeee50d7d18d65f1c8d1cd03aSwap Exact Token...75267662021-11-28 6:18:327 hrs 27 mins ago0xd2ea8868b155420c324b863cdd3d309d39c96041 IN  Canary: Router0 AVAX0.003629425
0x2cea3af8059af9e0cf8e5a3dc8797de4290e41db76b29ffd933fedeb99896cd0Swap Exact Token...75265502021-11-28 6:11:157 hrs 35 mins ago0x1a95ec368a5450cbe8f86cc7336ea030d82a6ce8 IN  Canary: Router0 AVAX0.003787397126.1
0x1f0a8779dfe0738e875e3af20d16d25c0bb931196def6a2d4ad64ee15293307cRemove Liquidity...75265332021-11-28 6:10:397 hrs 35 mins ago0x1a95ec368a5450cbe8f86cc7336ea030d82a6ce8 IN  Canary: Router0 AVAX0.005657018426.1
0xa5bf738dd855880ea12b8f0f31fd83c90caaf98c1fd9ab3d2d9a80cd4d9dfbb0Remove Liquidity...75254962021-11-28 5:35:528 hrs 10 mins ago0xbc9a10f22f06207f184b5b0ea64fad9d41045be1 IN  Canary: Router0 AVAX0.00541825
0x0e8fd95b01d856e3b21350d0bcdce1ffd5732515a32c00b3e0653cf1d4c60985Add Liquidity75241462021-11-28 4:50:258 hrs 55 mins ago0x9387f71f3928ebe9ce8b3d8cf37a8fb52739ae7d IN  Canary: Router0 AVAX0.00392772525
0x40cb05b3a93c79ce0dec5fd63f35b429e0c352a3f241639da576cfbc5a2eea75Remove Liquidity75240502021-11-28 4:47:138 hrs 59 mins ago0x9387f71f3928ebe9ce8b3d8cf37a8fb52739ae7d IN  Canary: Router0 AVAX0.00399417525
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xb83daa9b61aa15aef43d9e9ff723dafac8d1b58400e3713fa020c388d5397c7775399882021-11-28 13:42:223 mins ago Canary: Router0x92c765b602f40db2e7f182f97fa56061a4c1c9370.126349546737458807 AVAX
0xb83daa9b61aa15aef43d9e9ff723dafac8d1b58400e3713fa020c388d5397c7775399882021-11-28 13:42:223 mins ago Wrapped AVAX Canary: Router0.126349546737458807 AVAX
0x895682e3005a043098094ccbfe6223c8bf44eaae74dc7ff99e397d4d8721a6ba75395132021-11-28 13:26:2819 mins ago Canary: Router0xc0adfd401d1535156c1741f7ed32e50023c8eefd0.001655357854925825 AVAX
0x895682e3005a043098094ccbfe6223c8bf44eaae74dc7ff99e397d4d8721a6ba75395132021-11-28 13:26:2819 mins ago Canary: Router Wrapped AVAX0.419127998615537709 AVAX
0xd206068edd0a41814c794eb1917a21af2a28167730a8ca068507a3e1b72b98f275395122021-11-28 13:26:2519 mins ago Canary: Router0x0bc7860c74b6f58a61cc39302a14dfcb7faebf2b3.020019406328680078 AVAX
0xd206068edd0a41814c794eb1917a21af2a28167730a8ca068507a3e1b72b98f275395122021-11-28 13:26:2519 mins ago Wrapped AVAX Canary: Router3.020019406328680078 AVAX
0x08aa1e1ff5a94bbfdb2e9f00c7a6480a1d375aaf5a8a24cc167b9b59b75f006575394802021-11-28 13:25:0921 mins ago Canary: Router0xc0adfd401d1535156c1741f7ed32e50023c8eefd0.560890042337506065 AVAX
0x08aa1e1ff5a94bbfdb2e9f00c7a6480a1d375aaf5a8a24cc167b9b59b75f006575394802021-11-28 13:25:0921 mins ago Wrapped AVAX Canary: Router0.560890042337506065 AVAX
0xd48bfb99ff92bf4ab71ca2a90174da878df4486f6280b464285ac366c194ee4075372772021-11-28 12:11:281 hr 34 mins ago Canary: Router Wrapped AVAX0.2 AVAX
0x24f6981e0052f8f573c8d49613b41ca4c65146d4f0bb4a955632064311baa63075355622021-11-28 11:13:492 hrs 32 mins ago Canary: Router0xd1e83d9ca6c121ac7bb7dd6eded3554006ff20fb0.066184975903693111 AVAX
0x24f6981e0052f8f573c8d49613b41ca4c65146d4f0bb4a955632064311baa63075355622021-11-28 11:13:492 hrs 32 mins ago Wrapped AVAX Canary: Router0.066184975903693111 AVAX
0x0ce49403631edb61309694521d98b9b3bd6d6caa44b53c682f99bc58c04d835875354902021-11-28 11:11:202 hrs 34 mins ago Canary: Router Wrapped AVAX0.2 AVAX
0x426b2e87745a9e60369ffc87803cd5bacd50611d006bad8438e0a99e76da146175351942021-11-28 11:01:132 hrs 45 mins ago Canary: Router0xf7ca54242066dab2365ccde499bd826bb492bd142.50383360551076973 AVAX
0x426b2e87745a9e60369ffc87803cd5bacd50611d006bad8438e0a99e76da146175351942021-11-28 11:01:132 hrs 45 mins ago Wrapped AVAX Canary: Router2.50383360551076973 AVAX
0x10bbf70d01b55ba81d78fa6722c10fc2cb862ae7a49bb8b766eff1329c3bbe9b75351462021-11-28 10:59:382 hrs 46 mins ago Canary: Router0xf7ca54242066dab2365ccde499bd826bb492bd142.516377530737951664 AVAX
0x10bbf70d01b55ba81d78fa6722c10fc2cb862ae7a49bb8b766eff1329c3bbe9b75351462021-11-28 10:59:382 hrs 46 mins ago Wrapped AVAX Canary: Router2.516377530737951664 AVAX
0x8df6eb887bea5e44acf6e95f52a333d8e59d8cec35015b631ee14bd746d36a7b75338342021-11-28 10:15:413 hrs 30 mins ago Canary: Router0x42e3f9a7ff1ccdf99453805bc0a716db12e1c8110.073655277823333537 AVAX
0x8df6eb887bea5e44acf6e95f52a333d8e59d8cec35015b631ee14bd746d36a7b75338342021-11-28 10:15:413 hrs 30 mins ago Wrapped AVAX Canary: Router0.073655277823333537 AVAX
0x684b54a4bc7471c224f05d6bd04fc32175a86cb0bc90159a7960c6b793c9c58b75316122021-11-28 9:00:564 hrs 45 mins ago Canary: Router0x9cd13b090a6c7fab4cd3ff1ff6fff4689dead0d50.019216407229990369 AVAX
0x684b54a4bc7471c224f05d6bd04fc32175a86cb0bc90159a7960c6b793c9c58b75316122021-11-28 9:00:564 hrs 45 mins ago Wrapped AVAX Canary: Router0.019216407229990369 AVAX
0x39c93c3ea45d6650bc07f870ec20268321502637159d2f2466944d54c57093b875307982021-11-28 8:33:385 hrs 12 mins ago Canary: Router Wrapped AVAX0.05 AVAX
0x27ce559537433c690b3599d7b0630227fcfc6d313ebe2632ddd5bdf08d8c6b1875285712021-11-28 7:18:406 hrs 27 mins ago Canary: Router0xbce91ad6afec2adbd89a2c9efc869752d8e1fe520.296946854352045914 AVAX
0x27ce559537433c690b3599d7b0630227fcfc6d313ebe2632ddd5bdf08d8c6b1875285712021-11-28 7:18:406 hrs 27 mins ago Wrapped AVAX Canary: Router0.296946854352045914 AVAX
0xb9e8f2a7d19f30aebc7e6d5a89e7be9e8b969107709702420f7a2384f9145dac75278252021-11-28 6:53:536 hrs 52 mins ago Canary: Router Wrapped AVAX0.5 AVAX
0x3e265f31c3a38ee67b84eae7bef1ea37d044ed70b6abf1e1766da0ba9cd0eb9375278172021-11-28 6:53:376 hrs 52 mins ago Canary: Router Wrapped AVAX0.5 AVAX
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CanaryRouter

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-09
*/

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

// File contracts/canary-core/interfaces/ICanaryFactory.sol

// SPDX-License-Identifier: MIT

pragma solidity >=0.5.0;

interface ICanaryFactory {
    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/canary-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/canary-periphery/interfaces/ICanaryRouter.sol

pragma solidity >=0.6.2;

interface ICanaryRouter {
    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/canary-core/interfaces/ICanaryPair.sol

pragma solidity >=0.5.0;

interface ICanaryPair {
    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/canary-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/canary-periphery/libraries/CanaryLibrary.sol

pragma solidity >=0.5.0;
library CanaryLibrary {
    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, 'CanaryLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'CanaryLibrary: 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'60df5edf580dff3274fff5a3d83ad2b6ef6e296f71c3bc28c939e641888bd5b0' // 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,) = ICanaryPair(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, 'CanaryLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'CanaryLibrary: 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, 'CanaryLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'CanaryLibrary: 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, 'CanaryLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'CanaryLibrary: 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, 'CanaryLibrary: 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, 'CanaryLibrary: 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/canary-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/canary-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/canary-periphery/CanaryRouter.sol

pragma solidity =0.6.6;
contract CanaryRouter is ICanaryRouter {
    using SafeMath for uint;

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

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

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

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

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

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

60c060405234801561001057600080fd5b5060405162004943380380620049438339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6147be620001856000398061019f5280610e5e5280610f9d5280610fd8528061155152806116f352806117a9528061182152806118d052806119ae5280611aba5280611b705280611c505280611f00528061205552806120dd528061228052806123b6528061250e528061259652806129b15280612a585280612acc5280612ed55280612f2b5280612f5f5280612fd3525080610d095280610d425280610e3c52806110bf528061119652806112cc52806115f15280611cf05280611e005280611fa5528061210f528061225e528061245b52806125c8528061272e528061293f5280612afe5280612d105280612da35280612f095280613a285280613a6b5280613c165280613d9c528061420652806142cd528061434d52506147be6000f3fe60806040526004361061018f5760003560e01c806385f8c259116100d6578063baa2abde1161007f578063d06ca61f11610059578063d06ca61f14610b70578063e8e3370014610c27578063f91b3f7214610ca7576101c8565b8063baa2abde14610a78578063c45a015514610ad5578063c57559dd14610aea576101c8565b80639fc27226116100b05780639fc2722614610949578063a2a1623d146109bc578063ad615dec14610a42576101c8565b806385f8c259146107f55780638803dbee1461082b5780638a657e67146108c3576101c8565b80635c11d7951161013857806373bc79cf1161011257806373bc79cf14610672578063762b1562146106c55780637a42416a1461075d576101c8565b80635c11d79514610511578063676528d1146105a957806373b295c214610641576101c8565b80632c407024116101695780632c407024146103b357806333c6b7251461042657806338ed173914610479576101c8565b8063054d50d4146101cd5780631f00ca74146102155780632195995c1461031c576101c8565b366101c857336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101c657fe5b005b600080fd5b3480156101d957600080fd5b50610203600480360360608110156101f057600080fd5b5080359060208101359060400135610ced565b60408051918252519081900360200190f35b34801561022157600080fd5b506102cc6004803603604081101561023857600080fd5b8135919081019060408101602082013564010000000081111561025a57600080fd5b82018360208201111561026c57600080fd5b8035906020019184602083028401116401000000008311171561028e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610d02945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103085781810151838201526020016102f0565b505050509050019250505060405180910390f35b34801561032857600080fd5b5061039a600480360361016081101561034057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135610d38565b6040805192835260208301919091528051918290030190f35b3480156103bf57600080fd5b5061039a60048036036101408110156103d757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135610e32565b34801561043257600080fd5b5061039a600480360360c081101561044957600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610f46565b34801561048557600080fd5b506102cc600480360360a081101561049c57600080fd5b8135916020810135918101906060810160408201356401000000008111156104c357600080fd5b8201836020820111156104d557600080fd5b803590602001918460208302840111640100000000831117156104f757600080fd5b91935091506001600160a01b03813516906020013561106a565b34801561051d57600080fd5b506101c6600480360360a081101561053457600080fd5b81359160208101359181019060608101604082013564010000000081111561055b57600080fd5b82018360208201111561056d57600080fd5b8035906020019184602083028401116401000000008311171561058f57600080fd5b91935091506001600160a01b038135169060200135611258565b3480156105b557600080fd5b506102cc600480360360a08110156105cc57600080fd5b8135916020810135918101906060810160408201356401000000008111156105f357600080fd5b82018360208201111561060557600080fd5b8035906020019184602083028401116401000000008311171561062757600080fd5b91935091506001600160a01b0381351690602001356114f7565b34801561064d57600080fd5b506106566117a7565b604080516001600160a01b039092168252519081900360200190f35b34801561067e57600080fd5b50610203600480360360c081101561069557600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356117cb565b3480156106d157600080fd5b506101c6600480360360a08110156106e857600080fd5b81359160208101359181019060608101604082013564010000000081111561070f57600080fd5b82018360208201111561072157600080fd5b8035906020019184602083028401116401000000008311171561074357600080fd5b91935091506001600160a01b038135169060200135611956565b34801561076957600080fd5b506102cc600480360360a081101561078057600080fd5b8135916020810135918101906060810160408201356401000000008111156107a757600080fd5b8201836020820111156107b957600080fd5b803590602001918460208302840111640100000000831117156107db57600080fd5b91935091506001600160a01b038135169060200135611bf6565b34801561080157600080fd5b506102036004803603606081101561081857600080fd5b5080359060208101359060400135611d9e565b34801561083757600080fd5b506102cc600480360360a081101561084e57600080fd5b81359160208101359181019060608101604082013564010000000081111561087557600080fd5b82018360208201111561088757600080fd5b803590602001918460208302840111640100000000831117156108a957600080fd5b91935091506001600160a01b038135169060200135611dab565b6102cc600480360360808110156108d957600080fd5b813591908101906040810160208201356401000000008111156108fb57600080fd5b82018360208201111561090d57600080fd5b8035906020019184602083028401116401000000008311171561092f57600080fd5b91935091506001600160a01b038135169060200135611eae565b34801561095557600080fd5b50610203600480360361014081101561096d57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612256565b6102cc600480360360808110156109d257600080fd5b813591908101906040810160208201356401000000008111156109f457600080fd5b820183602082011115610a0657600080fd5b80359060200191846020830284011164010000000083111715610a2857600080fd5b91935091506001600160a01b038135169060200135612364565b348015610a4e57600080fd5b5061020360048036036060811015610a6557600080fd5b50803590602081013590604001356126c9565b348015610a8457600080fd5b5061039a600480360360e0811015610a9b57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356126d6565b348015610ae157600080fd5b5061065661293d565b6101c660048036036080811015610b0057600080fd5b81359190810190604081016020820135640100000000811115610b2257600080fd5b820183602082011115610b3457600080fd5b80359060200191846020830284011164010000000083111715610b5657600080fd5b91935091506001600160a01b038135169060200135612961565b348015610b7c57600080fd5b506102cc60048036036040811015610b9357600080fd5b81359190810190604081016020820135640100000000811115610bb557600080fd5b820183602082011115610bc757600080fd5b80359060200191846020830284011164010000000083111715610be957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612d09945050505050565b348015610c3357600080fd5b50610c896004803603610100811015610c4b57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612d36565b60408051938452602084019290925282820152519081900360600190f35b610c89600480360360c0811015610cbd57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612e7c565b6000610cfa84848461312b565b949350505050565b6060610d2f7f0000000000000000000000000000000000000000000000000000000000000000848461321b565b90505b92915050565b6000806000610d687f00000000000000000000000000000000000000000000000000000000000000008f8f613368565b9050600087610d77578c610d7b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015610df157600080fd5b505af1158015610e05573d6000803e3d6000fd5b50505050610e188f8f8f8f8f8f8f6126d6565b809450819550505050509b509b9950505050505050505050565b6000806000610e827f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613368565b9050600087610e91578c610e95565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015610f0b57600080fd5b505af1158015610f1f573d6000803e3d6000fd5b50505050610f318e8e8e8e8e8e610f46565b909f909e509c50505050505050505050505050565b6000808242811015610f97576040805162461bcd60e51b815260206004820152601560248201527410d85b985c9e549bdd5d195c8e8811561412549151605a1b604482015290519081900360640190fd5b610fc6897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6126d6565b9093509150610fd6898685613440565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561103c57600080fd5b505af1158015611050573d6000803e3d6000fd5b5050505061105e85836135d8565b50965096945050505050565b606081428110156110ba576040805162461bcd60e51b815260206004820152601560248201527410d85b985c9e549bdd5d195c8e8811561412549151605a1b604482015290519081900360640190fd5b6111187f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506136d092505050565b9150868260018451038151811061112b57fe5b602002602001015110156111705760405162461bcd60e51b81526004018080602001828103825260288152602001806146a36028913960400191505060405180910390fd5b61120e8686600081811061118057fe5b905060200201356001600160a01b0316336111f47f00000000000000000000000000000000000000000000000000000000000000008a8a60008181106111c257fe5b905060200201356001600160a01b03168b8b60018181106111df57fe5b905060200201356001600160a01b0316613368565b8560008151811061120157fe5b6020026020010151613807565b61124d82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613979915050565b509695505050505050565b80428110156112a6576040805162461bcd60e51b815260206004820152601560248201527410d85b985c9e549bdd5d195c8e8811561412549151605a1b604482015290519081900360640190fd5b61131b858560008181106112b657fe5b905060200201356001600160a01b0316336113157f0000000000000000000000000000000000000000000000000000000000000000898960008181106112f857fe5b905060200201356001600160a01b03168a8a60018181106111df57fe5b8a613807565b60008585600019810181811061132d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561139257600080fd5b505afa1580156113a6573d6000803e3d6000fd5b505050506040513d60208110156113bc57600080fd5b505160408051602088810282810182019093528882529293506113fe929091899189918291850190849080828437600092019190915250889250613bbf915050565b866114b0828888600019810181811061141357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561147857600080fd5b505afa15801561148c573d6000803e3d6000fd5b505050506040513d60208110156114a257600080fd5b50519063ffffffff613eea16565b10156114ed5760405162461bcd60e51b81526004018080602001828103825260288152602001806146a36028913960400191505060405180910390fd5b5050505050505050565b60608142811015611547576040805162461bcd60e51b815260206004820152601560248201527410d85b985c9e549bdd5d195c8e8811561412549151605a1b604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061158157fe5b905060200201356001600160a01b03166001600160a01b0316146115ec576040805162461bcd60e51b815260206004820152601a60248201527f43616e617279526f757465723a20494e56414c49445f50415448000000000000604482015290519081900360640190fd5b61164a7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506136d092505050565b9150868260018451038151811061165d57fe5b602002602001015110156116a25760405162461bcd60e51b81526004018080602001828103825260288152602001806146a36028913960400191505060405180910390fd5b6116b28686600081811061118057fe5b6116f182878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613979915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061173057fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561176e57600080fd5b505af1158015611782573d6000803e3d6000fd5b5050505061124d848360018551038151811061179a57fe5b60200260200101516135d8565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000814281101561181b576040805162461bcd60e51b815260206004820152601560248201527410d85b985c9e549bdd5d195c8e8811561412549151605a1b604482015290519081900360640190fd5b61184a887f000000000000000000000000000000000000000000000000000000000000000089898930896126d6565b604080516370a0823160e01b815230600482015290519194506118ce92508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561189d57600080fd5b505afa1580156118b1573d6000803e3d6000fd5b505050506040513d60208110156118c757600080fd5b5051613440565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561193457600080fd5b505af1158015611948573d6000803e3d6000fd5b5050505061124d84836135d8565b80428110156119a4576040805162461bcd60e51b815260206004820152601560248201527410d85b985c9e549bdd5d195c8e8811561412549151605a1b604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016858560001981018181106119de57fe5b905060200201356001600160a01b03166001600160a01b031614611a49576040805162461bcd60e51b815260206004820152601a60248201527f43616e617279526f757465723a20494e56414c49445f50415448000000000000604482015290519081900360640190fd5b611a59858560008181106112b657fe5b611a97858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613bbf915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611b0157600080fd5b505afa158015611b15573d6000803e3d6000fd5b505050506040513d6020811015611b2b57600080fd5b5051905086811015611b6e5760405162461bcd60e51b81526004018080602001828103825260288152602001806146a36028913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611bd457600080fd5b505af1158015611be8573d6000803e3d6000fd5b505050506114ed84826135d8565b60608142811015611c46576040805162461bcd60e51b815260206004820152601560248201527410d85b985c9e549bdd5d195c8e8811561412549151605a1b604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110611c8057fe5b905060200201356001600160a01b03166001600160a01b031614611ceb576040805162461bcd60e51b815260206004820152601a60248201527f43616e617279526f757465723a20494e56414c49445f50415448000000000000604482015290519081900360640190fd5b611d497f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061321b92505050565b91508682600081518110611d5957fe5b602002602001015111156116a25760405162461bcd60e51b815260040180806020018281038252602481526020018061473d6024913960400191505060405180910390fd5b6000610cfa848484613f42565b60608142811015611dfb576040805162461bcd60e51b815260206004820152601560248201527410d85b985c9e549bdd5d195c8e8811561412549151605a1b604482015290519081900360640190fd5b611e597f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061321b92505050565b91508682600081518110611e6957fe5b602002602001015111156111705760405162461bcd60e51b815260040180806020018281038252602481526020018061473d6024913960400191505060405180910390fd5b60608142811015611efe576040805162461bcd60e51b815260206004820152601560248201527410d85b985c9e549bdd5d195c8e8811561412549151605a1b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611f3557fe5b905060200201356001600160a01b03166001600160a01b031614611fa0576040805162461bcd60e51b815260206004820152601a60248201527f43616e617279526f757465723a20494e56414c49445f50415448000000000000604482015290519081900360640190fd5b611ffe7f00000000000000000000000000000000000000000000000000000000000000008888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061321b92505050565b9150348260008151811061200e57fe5b602002602001015111156120535760405162461bcd60e51b815260040180806020018281038252602481526020018061473d6024913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db08360008151811061208f57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156120c257600080fd5b505af11580156120d6573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61213b7f0000000000000000000000000000000000000000000000000000000000000000898960008181106112f857fe5b8460008151811061214857fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561219f57600080fd5b505af11580156121b3573d6000803e3d6000fd5b505050506040513d60208110156121c957600080fd5b50516121d157fe5b61221082878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613979915050565b8160008151811061221d57fe5b602002602001015134111561224c5761224c338360008151811061223d57fe5b602002602001015134036135d8565b5095945050505050565b6000806122a47f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613368565b90506000866122b3578b6122b7565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561232d57600080fd5b505af1158015612341573d6000803e3d6000fd5b505050506123538d8d8d8d8d8d6117cb565b9d9c50505050505050505050505050565b606081428110156123b4576040805162461bcd60e51b815260206004820152601560248201527410d85b985c9e549bdd5d195c8e8811561412549151605a1b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316868660008181106123eb57fe5b905060200201356001600160a01b03166001600160a01b031614612456576040805162461bcd60e51b815260206004820152601a60248201527f43616e617279526f757465723a20494e56414c49445f50415448000000000000604482015290519081900360640190fd5b6124b47f0000000000000000000000000000000000000000000000000000000000000000348888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506136d092505050565b915086826001845103815181106124c757fe5b6020026020010151101561250c5760405162461bcd60e51b81526004018080602001828103825260288152602001806146a36028913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db08360008151811061254857fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561257b57600080fd5b505af115801561258f573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6125f47f0000000000000000000000000000000000000000000000000000000000000000898960008181106112f857fe5b8460008151811061260157fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561265857600080fd5b505af115801561266c573d6000803e3d6000fd5b505050506040513d602081101561268257600080fd5b505161268a57fe5b61224c82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613979915050565b6000610cfa848484614032565b6000808242811015612727576040805162461bcd60e51b815260206004820152601560248201527410d85b985c9e549bdd5d195c8e8811561412549151605a1b604482015290519081900360640190fd5b60006127547f00000000000000000000000000000000000000000000000000000000000000008c8c613368565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b1580156127af57600080fd5b505af11580156127c3573d6000803e3d6000fd5b505050506040513d60208110156127d957600080fd5b5050604080517f89afcb440000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561283f57600080fd5b505af1158015612853573d6000803e3d6000fd5b505050506040513d604081101561286957600080fd5b508051602090910151909250905060006128838e8e6140de565b509050806001600160a01b03168e6001600160a01b0316146128a65781836128a9565b82825b90975095508a8710156128ed5760405162461bcd60e51b815260040180806020018281038252602381526020018061463a6023913960400191505060405180910390fd5b8986101561292c5760405162461bcd60e51b81526004018080602001828103825260238152602001806146176023913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b80428110156129af576040805162461bcd60e51b815260206004820152601560248201527410d85b985c9e549bdd5d195c8e8811561412549151605a1b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106129e657fe5b905060200201356001600160a01b03166001600160a01b031614612a51576040805162461bcd60e51b815260206004820152601a60248201527f43616e617279526f757465723a20494e56414c49445f50415448000000000000604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612ab157600080fd5b505af1158015612ac5573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612b2a7f0000000000000000000000000000000000000000000000000000000000000000898960008181106112f857fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b7a57600080fd5b505af1158015612b8e573d6000803e3d6000fd5b505050506040513d6020811015612ba457600080fd5b5051612bac57fe5b600086866000198101818110612bbe57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015612c2357600080fd5b505afa158015612c37573d6000803e3d6000fd5b505050506040513d6020811015612c4d57600080fd5b50516040805160208981028281018201909352898252929350612c8f9290918a918a918291850190849080828437600092019190915250899250613bbf915050565b876114b08289896000198101818110612ca457fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561147857600080fd5b6060610d2f7f000000000000000000000000000000000000000000000000000000000000000084846136d0565b60008060008342811015612d89576040805162461bcd60e51b815260206004820152601560248201527410d85b985c9e549bdd5d195c8e8811561412549151605a1b604482015290519081900360640190fd5b612d978c8c8c8c8c8c6141bc565b90945092506000612dc97f00000000000000000000000000000000000000000000000000000000000000008e8e613368565b9050612dd78d338388613807565b612de38c338387613807565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612e3b57600080fd5b505af1158015612e4f573d6000803e3d6000fd5b505050506040513d6020811015612e6557600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015612ecf576040805162461bcd60e51b815260206004820152601560248201527410d85b985c9e549bdd5d195c8e8811561412549151605a1b604482015290519081900360640190fd5b612efd8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c6141bc565b90945092506000612f4f7f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613368565b9050612f5d8b338388613807565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612fb857600080fd5b505af1158015612fcc573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561305157600080fd5b505af1158015613065573d6000803e3d6000fd5b505050506040513d602081101561307b57600080fd5b505161308357fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b1580156130db57600080fd5b505af11580156130ef573d6000803e3d6000fd5b505050506040513d602081101561310557600080fd5b505192503484101561311d5761311d338534036135d8565b505096509650969350505050565b600080841161316b5760405162461bcd60e51b81526004018080602001828103825260288152602001806147616028913960400191505060405180910390fd5b60008311801561317b5750600082115b6131b65760405162461bcd60e51b81526004018080602001828103825260258152602001806147186025913960400191505060405180910390fd5b60006131ca856103e563ffffffff61446216565b905060006131de828563ffffffff61446216565b90506000613204836131f8886103e863ffffffff61446216565b9063ffffffff6144ce16565b905080828161320f57fe5b04979650505050505050565b6060600282511015613274576040805162461bcd60e51b815260206004820152601b60248201527f43616e6172794c6962726172793a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561328c57600080fd5b506040519080825280602002602001820160405280156132b6578160200160208202803683370190505b50905082816001835103815181106132ca57fe5b60209081029190910101528151600019015b801561336057600080613319878660018603815181106132f857fe5b602002602001015187868151811061330c57fe5b6020026020010151614526565b9150915061333b84848151811061332c57fe5b60200260200101518383613f42565b84600185038151811061334a57fe5b60209081029190910101525050600019016132dc565b509392505050565b600080600061337785856140de565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f60df5edf580dff3274fff5a3d83ad2b6ef6e296f71c3bc28c939e641888bd5b0609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b602083106134eb5780518252601f1990920191602091820191016134cc565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461354d576040519150601f19603f3d011682016040523d82523d6000602084013e613552565b606091505b5091509150818015613580575080511580613580575080806020019051602081101561357d57600080fd5b50515b6135d1576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106136245780518252601f199092019160209182019101613605565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613686576040519150601f19603f3d011682016040523d82523d6000602084013e61368b565b606091505b50509050806136cb5760405162461bcd60e51b815260040180806020018281038252602481526020018061467f6024913960400191505060405180910390fd5b505050565b6060600282511015613729576040805162461bcd60e51b815260206004820152601b60248201527f43616e6172794c6962726172793a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561374157600080fd5b5060405190808252806020026020018201604052801561376b578160200160208202803683370190505b509050828160008151811061377c57fe5b60200260200101818152505060005b6001835103811015613360576000806137c1878685815181106137aa57fe5b602002602001015187866001018151811061330c57fe5b915091506137e38484815181106137d457fe5b6020026020010151838361312b565b8484600101815181106137f257fe5b6020908102919091010152505060010161378b565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106138a15780518252601f199092019160209182019101613882565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613903576040519150601f19603f3d011682016040523d82523d6000602084013e613908565b606091505b5091509150818015613936575080511580613936575080806020019051602081101561393357600080fd5b50515b6139715760405162461bcd60e51b81526004018080602001828103825260248152602001806146f46024913960400191505060405180910390fd5b505050505050565b60005b6001835103811015613bb95760008084838151811061399757fe5b60200260200101518584600101815181106139ae57fe5b60200260200101519150915060006139c683836140de565b50905060008785600101815181106139da57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b031614613a0857826000613a0c565b6000835b91509150600060028a51038810613a235788613a64565b613a647f0000000000000000000000000000000000000000000000000000000000000000878c8b60020181518110613a5757fe5b6020026020010151613368565b9050613a917f00000000000000000000000000000000000000000000000000000000000000008888613368565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613ace576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613b3f578181015183820152602001613b27565b50505050905090810190601f168015613b6c5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613b8e57600080fd5b505af1158015613ba2573d6000803e3d6000fd5b50506001909901985061397c975050505050505050565b50505050565b60005b60018351038110156136cb57600080848381518110613bdd57fe5b6020026020010151858460010181518110613bf457fe5b6020026020010151915091506000613c0c83836140de565b5090506000613c3c7f00000000000000000000000000000000000000000000000000000000000000008585613368565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613c7d57600080fd5b505afa158015613c91573d6000803e3d6000fd5b505050506040513d6060811015613ca757600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506000806001600160a01b038a811690891614613ce4578284613ce7565b83835b91509150613d45828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561147857600080fd5b9550613d5286838361312b565b945050505050600080856001600160a01b0316886001600160a01b031614613d7c57826000613d80565b6000835b91509150600060028c51038a10613d97578a613dcb565b613dcb7f0000000000000000000000000000000000000000000000000000000000000000898e8d60020181518110613a5757fe5b60408051600080825260208201928390527f022c0d9f00000000000000000000000000000000000000000000000000000000835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613e6e578181015183820152602001613e56565b50505050905090810190601f168015613e9b5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613ebd57600080fd5b505af1158015613ed1573d6000803e3d6000fd5b50506001909b019a50613bc29950505050505050505050565b80820382811115610d32576040805162461bcd60e51b815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411613f825760405162461bcd60e51b81526004018080602001828103825260298152602001806146cb6029913960400191505060405180910390fd5b600083118015613f925750600082115b613fcd5760405162461bcd60e51b81526004018080602001828103825260258152602001806147186025913960400191505060405180910390fd5b6000613ff16103e8613fe5868863ffffffff61446216565b9063ffffffff61446216565b9050600061400b6103e5613fe5868963ffffffff613eea16565b9050614028600182848161401b57fe5b049063ffffffff6144ce16565b9695505050505050565b60008084116140725760405162461bcd60e51b815260040180806020018281038252602281526020018061465d6022913960400191505060405180910390fd5b6000831180156140825750600082115b6140bd5760405162461bcd60e51b81526004018080602001828103825260258152602001806147186025913960400191505060405180910390fd5b826140ce858463ffffffff61446216565b816140d557fe5b04949350505050565b600080826001600160a01b0316846001600160a01b031614156141325760405162461bcd60e51b81526004018080602001828103825260228152602001806145f56022913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610614152578284614155565b83835b90925090506001600160a01b0382166141b5576040805162461bcd60e51b815260206004820152601b60248201527f43616e6172794c6962726172793a205a45524f5f414444524553530000000000604482015290519081900360640190fd5b9250929050565b604080517fe6a439050000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561424f57600080fd5b505afa158015614263573d6000803e3d6000fd5b505050506040513d602081101561427957600080fd5b50516001600160a01b0316141561434557604080517fc9c653960000000000000000000000000000000000000000000000000000000081526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561431857600080fd5b505af115801561432c573d6000803e3d6000fd5b505050506040513d602081101561434257600080fd5b50505b6000806143737f00000000000000000000000000000000000000000000000000000000000000008b8b614526565b91509150816000148015614385575080155b1561439557879350869250614455565b60006143a2898484614032565b90508781116143f557858110156143ea5760405162461bcd60e51b81526004018080602001828103825260238152602001806146176023913960400191505060405180910390fd5b889450925082614453565b6000614402898486614032565b90508981111561440e57fe5b8781101561444d5760405162461bcd60e51b815260040180806020018281038252602381526020018061463a6023913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b600081158061447d5750508082028282828161447a57fe5b04145b610d32576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b80820182811015610d32576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b600080600061453585856140de565b509050600080614546888888613368565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561457e57600080fd5b505afa158015614592573d6000803e3d6000fd5b505050506040513d60608110156145a857600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b03878116908416146145e25780826145e5565b81815b9099909850965050505050505056fe43616e6172794c6962726172793a204944454e544943414c5f41444452455353455343616e617279526f757465723a20494e53554646494349454e545f425f414d4f554e5443616e617279526f757465723a20494e53554646494349454e545f415f414d4f554e5443616e6172794c6962726172793a20494e53554646494349454e545f414d4f554e545472616e7366657248656c7065723a20415641585f5452414e534645525f4641494c454443616e617279526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5443616e6172794c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c454443616e6172794c6962726172793a20494e53554646494349454e545f4c495155494449545943616e617279526f757465723a204558434553534956455f494e5055545f414d4f554e5443616e6172794c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54a2646970667358221220ca6bcac028be69e062d74379f4f9c5e8e35a80c863a6081fcd3c6b4c5715b21e64736f6c63430006060033000000000000000000000000cfba329d49c24b70f3a8b9cc0853493d4645436b000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c7

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

000000000000000000000000cfba329d49c24b70f3a8b9cc0853493d4645436b000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c7

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

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


Deployed ByteCode Sourcemap

16418:18428:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16891:10;-1:-1:-1;;;;;16905:5:0;16891:19;;16884:27;;;;16418:18428;;12:1:-1;9;2:12;33802:259:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33802:259:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33802:259:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;34593:250;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34593:250:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34593:250:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;34593:250:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34593:250: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;34593:250:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34593:250:0;;-1:-1:-1;34593:250:0;;-1:-1:-1;;;;;34593:250: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;34593:250:0;;;;;;;;;;;;;;;;;21700:671;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21700:671:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21700:671:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22377:670;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22377:670:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22377:670:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21010:684::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21010:684:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21010:684:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25402:619::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25402:619:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25402:619:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;25402:619:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25402:619: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;25402:619:0;;-1:-1:-1;25402:619:0;-1:-1:-1;;;;;;25402:619:0;;;;;;;;:::i;31158:708::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31158:708:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31158:708:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;31158:708:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31158:708: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;31158:708:0;;-1:-1:-1;31158:708:0;-1:-1:-1;;;;;;31158:708:0;;;;;;;;:::i;28154:843::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28154:843:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28154:843:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;28154:843:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28154:843: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;28154:843:0;;-1:-1:-1;28154:843:0;-1:-1:-1;;;;;;28154:843:0;;;;;;;;:::i;16544:39::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16544:39:0;;;:::i;:::-;;;;-1:-1:-1;;;;;16544:39:0;;;;;;;;;;;;;;23126:711;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23126:711:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23126:711:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32725:840::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32725:840:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32725:840:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;32725:840:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32725:840: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;32725:840:0;;-1:-1:-1;32725:840:0;-1:-1:-1;;;;;;32725:840:0;;;;;;;;:::i;27327:821::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27327:821:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27327:821:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;27327:821:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27327:821: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;27327:821:0;;-1:-1:-1;27327:821:0;-1:-1:-1;;;;;;27327:821:0;;;;;;;;:::i;34069:258::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34069:258:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34069:258:0;;;;;;;;;;;;:::i;26027:597::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26027:597:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26027:597:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;26027:597:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26027:597: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;26027:597:0;;-1:-1:-1;26027:597:0;-1:-1:-1;;;;;;26027:597:0;;;;;;;;:::i;29003:806::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29003:806:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;29003:806:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29003:806: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;29003:806:0;;-1:-1:-1;29003:806:0;-1:-1:-1;;;;;;29003:806:0;;;;;;;;:::i;23843:719::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23843:719:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23843:719:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;26630:691::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26630:691:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;26630:691:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26630:691: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;26630:691:0;;-1:-1:-1;26630:691:0;-1:-1:-1;;;;;;26630:691:0;;;;;;;;:::i;33609:185::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33609:185:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33609:185:0;;;;;;;;;;;;:::i;20157:847::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20157:847:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20157:847:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16496:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16496:41:0;;;:::i;31872:847::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31872:847:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;31872:847:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31872:847: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;31872:847:0;;-1:-1:-1;31872:847:0;-1:-1:-1;;;;;;31872:847:0;;;;;;;;:::i;34335:250::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34335:250:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34335:250:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;34335:250:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34335:250: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;34335:250:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34335:250:0;;-1:-1:-1;34335:250:0;;-1:-1:-1;;;;;34335:250:0:i;18391:732::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18391:732:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18391:732:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;19129:985;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19129:985:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33802:259::-;33955:14;33994:59;34021:8;34031:9;34042:10;33994:26;:59::i;:::-;33987:66;33802:259;-1:-1:-1;;;;33802:259:0:o;34593:250::-;34737:21;34783:52;34810:7;34819:9;34830:4;34783:26;:52::i;:::-;34776:59;;34593:250;;;;;:::o;21700:671::-;22006:12;22020;22045;22060:46;22082:7;22091:6;22099;22060:21;:46::i;:::-;22045:61;;22117:10;22130;:33;;22154:9;22130:33;;;-1:-1:-1;;22130:33:0;22174:77;;;-1:-1:-1;;;22174:77:0;;22199:10;22174:77;;;;22219:4;22174:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22117:46;;-1:-1:-1;;;;;;22174:24:0;;;;;:77;;;;;-1:-1:-1;;22174:77:0;;;;;;;;-1:-1:-1;22174:24:0;:77;;;2:2:-1;;;;27:1;24;17:12;2:2;22174:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22174:77:0;;;;22283:80;22299:6;22307;22315:9;22326:10;22338;22350:2;22354:8;22283:15;:80::i;:::-;22262:101;;;;;;;;21700:671;;;;;;;;;;;;;;;;:::o;22377:670::-;22668:16;22686:15;22714:12;22729:44;22751:7;22760:5;22767;22729:21;:44::i;:::-;22714:59;;22784:10;22797;:33;;22821:9;22797:33;;;-1:-1:-1;;22797:33:0;22841:77;;;-1:-1:-1;;;22841:77:0;;22866:10;22841:77;;;;22886:4;22841:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22784:46;;-1:-1:-1;;;;;;22841:24:0;;;;;:77;;;;;-1:-1:-1;;22841:77:0;;;;;;;;-1:-1:-1;22841:24:0;:77;;;2:2:-1;;;;27:1;24;17:12;2:2;22841:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22841:77:0;;;;22957:82;22977:5;22984:9;22995:14;23011:13;23026:2;23030:8;22957:19;:82::i;:::-;22929:110;;;;-1:-1:-1;22377:670:0;-1:-1:-1;;;;;;;;;;;;;22377:670:0:o;21010:684::-;21249:16;21267:15;21230:8;16654:15;16642:8;:27;;16634:61;;;;;-1:-1:-1;;;16634:61:0;;;;;;;;;;;;-1:-1:-1;;;16634:61:0;;;;;;;;;;;;;;;21323:198:::1;21353:5;21373;21393:9;21417:14;21446:13;21482:4;21502:8;21323:15;:198::i;:::-;21295:226:::0;;-1:-1:-1;21295:226:0;-1:-1:-1;21532:51:0::1;21560:5:::0;21567:2;21295:226;21532:27:::1;:51::i;:::-;21601:5;-1:-1:-1::0;;;;;21594:22:0::1;;21617:10;21594:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21594:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21594:34:0;;;;21639:47;21671:2;21675:10;21639:31;:47::i;:::-;21010:684:::0;;;;;;;;;;:::o;25402:619::-;25626:21;25607:8;16654:15;16642:8;:27;;16634:61;;;;;-1:-1:-1;;;16634:61:0;;;;;;;;;;;;-1:-1:-1;;;16634:61:0;;;;;;;;;;;;;;;25670:52:::1;25698:7;25707:8;25717:4;;25670:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25670:27:0::1;::::0;-1:-1:-1;;;25670:52:0:i:1;:::-;25660:62;;25772:12;25741:7;25766:1;25749:7;:14;:18;25741:27;;;;;;;;;;;;;;:43;;25733:96;;;;-1:-1:-1::0;;;25733:96:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25840:138;25886:4;;25891:1;25886:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;25886:7:0::1;25895:10;25907:48;25929:7;25938:4;;25943:1;25938:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;25938:7:0::1;25947:4;;25952:1;25947:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;25947:7:0::1;25907:21;:48::i;:::-;25957:7;25965:1;25957:10;;;;;;;;;;;;;;25840:31;:138::i;:::-;25989:24;25995:7;26004:4;;25989:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26010:2:0;;-1:-1:-1;25989:5:0::1;::::0;-1:-1:-1;;25989:24:0:i:1;:::-;25402:619:::0;;;;;;;;;:::o;31158:708::-;31392:8;16654:15;16642:8;:27;;16634:61;;;;;-1:-1:-1;;;16634:61:0;;;;;;;;;;;;-1:-1:-1;;;16634:61:0;;;;;;;;;;;;;;;31413:136:::1;31459:4;;31464:1;31459:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31459:7:0::1;31468:10;31480:48;31502:7;31511:4;;31516:1;31511:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31511:7:0::1;31520:4;;31525:1;31520:7;;;;;;31480:48;31530:8;31413:31;:136::i;:::-;31560:18;31588:4:::0;;-1:-1:-1;;31593:15:0;;31588:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31588:21:0::1;-1:-1:-1::0;;;;;31581:39:0::1;;31621:2;31581:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31581:43:0::1;-1:-1:-1::0;;;;;31581:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31581:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31581:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31581:43:0;31635:44:::1;::::0;;31581:43:::1;31635:44:::0;;::::1;::::0;;;;;;;;;;;31581:43;;-1:-1:-1;31635:44:0::1;::::0;;;31670:4;;;;;;31635:44;::::1;::::0;31670:4;;31635:44;31670:4;31635:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31676:2:0;;-1:-1:-1;31635:34:0::1;::::0;-1:-1:-1;;31635:44:0:i:1;:::-;31778:12:::0;31712:62:::1;31760:13:::0;31719:4;;-1:-1:-1;;31724:15:0;;31719:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31719:21:0::1;-1:-1:-1::0;;;;;31712:39:0::1;;31752:2;31712:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31712:43:0::1;-1:-1:-1::0;;;;;31712:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31712:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31712:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31712:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;31690:168;;;;-1:-1:-1::0;;;31690:168:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16706:1;31158:708:::0;;;;;;;:::o;28154:843::-;28369:21;28341:8;16654:15;16642:8;:27;;16634:61;;;;;-1:-1:-1;;;16634:61:0;;;;;;;;;;;;-1:-1:-1;;;16634:61:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28441:5:0::1;28416:30;:4:::0;;-1:-1:-1;;28421:15:0;;28416:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28416:21:0::1;-1:-1:-1::0;;;;;28416:30:0::1;;28408:69;;;::::0;;-1:-1:-1;;;28408:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28498:52;28526:7;28535:8;28545:4;;28498:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28498:27:0::1;::::0;-1:-1:-1;;;28498:52:0:i:1;:::-;28488:62;;28600:12;28569:7;28594:1;28577:7;:14;:18;28569:27;;;;;;;;;;;;;;:43;;28561:96;;;;-1:-1:-1::0;;;28561:96:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28668:138;28714:4;;28719:1;28714:7;;;;;;28668:138;28817:35;28823:7;28832:4;;28817:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28846:4:0::1;::::0;-1:-1:-1;28817:5:0::1;::::0;-1:-1:-1;;28817:35:0:i:1;:::-;28870:5;-1:-1:-1::0;;;;;28863:22:0::1;;28886:7;28911:1;28894:7;:14;:18;28886:27;;;;;;;;;;;;;;28863:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28863:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28863:51:0;;;;28925:64;28957:2;28961:7;28986:1;28969:7;:14;:18;28961:27;;;;;;;;;;;;;;28925:31;:64::i;16544:39::-:0;;;:::o;23126:711::-;23394:15;23375:8;16654:15;16642:8;:27;;16634:61;;;;;-1:-1:-1;;;16634:61:0;;;;;;;;;;;;-1:-1:-1;;;16634:61:0;;;;;;;;;;;;;;;23439:198:::1;23469:5;23489;23509:9;23533:14;23562:13;23598:4;23618:8;23439:15;:198::i;:::-;23687:38;::::0;;-1:-1:-1;;;23687:38:0;;23719:4:::1;23687:38;::::0;::::1;::::0;;;23422:215;;-1:-1:-1;23648:78:0::1;::::0;-1:-1:-1;23676:5:0;;23683:2;;-1:-1:-1;;;;;23687: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;23687:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23687:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23687:38:0;23648:27:::1;:78::i;:::-;23744:5;-1:-1:-1::0;;;;;23737:22:0::1;;23760:10;23737:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23737:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23737:34:0;;;;23782:47;23814:2;23818:10;23782:31;:47::i;32725:840::-:0;32993:8;16654:15;16642:8;:27;;16634:61;;;;;-1:-1:-1;;;16634:61:0;;;;;;;;;;;;-1:-1:-1;;;16634:61:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33052:5:0::1;33027:30;:4:::0;;-1:-1:-1;;33032:15:0;;33027:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33027:21:0::1;-1:-1:-1::0;;;;;33027:30:0::1;;33019:69;;;::::0;;-1:-1:-1;;;33019:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;33099:136;33145:4;;33150:1;33145:7;;;;;;33099:136;33246:55;33281:4;;33246:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33295:4:0::1;::::0;-1:-1:-1;33246:34:0::1;::::0;-1:-1:-1;;33246:55:0:i:1;:::-;33329:38;::::0;;-1:-1:-1;;;33329:38:0;;33361:4:::1;33329:38;::::0;::::1;::::0;;;33312:14:::1;::::0;-1:-1:-1;;;;;33336:5:0::1;33329:23;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;33329:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33329:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33329:38:0;;-1:-1:-1;33386:25:0;;::::1;;33378:78;;;;-1:-1:-1::0;;;33378:78:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33474:5;-1:-1:-1::0;;;;;33467:22:0::1;;33490:9;33467:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33467:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33467:33:0;;;;33511:46;33543:2;33547:9;33511:31;:46::i;27327:821::-:0;27542:21;27514:8;16654:15;16642:8;:27;;16634:61;;;;;-1:-1:-1;;;16634:61:0;;;;;;;;;;;;-1:-1:-1;;;16634:61:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27614:5:0::1;27589:30;:4:::0;;-1:-1:-1;;27594:15:0;;27589:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27589:21:0::1;-1:-1:-1::0;;;;;27589:30:0::1;;27581:69;;;::::0;;-1:-1:-1;;;27581:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27671:52;27698:7;27707:9;27718:4;;27671:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27671:26:0::1;::::0;-1:-1:-1;;;27671:52:0:i:1;:::-;27661:62;;27756:11;27742:7;27750:1;27742:10;;;;;;;;;;;;;;:25;;27734:74;;;;-1:-1:-1::0;;;27734:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34069:258:::0;34222:13;34260:59;34286:9;34297;34308:10;34260:25;:59::i;26027:597::-;26251:21;26232:8;16654:15;16642:8;:27;;16634:61;;;;;-1:-1:-1;;;16634:61:0;;;;;;;;;;;;-1:-1:-1;;;16634:61:0;;;;;;;;;;;;;;;26295:52:::1;26322:7;26331:9;26342:4;;26295:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26295:26:0::1;::::0;-1:-1:-1;;;26295:52:0:i:1;:::-;26285:62;;26380:11;26366:7;26374:1;26366:10;;;;;;;;;;;;;;:25;;26358:74;;;;-1:-1:-1::0;;;26358:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29003:806:::0;29217:21;29189:8;16654:15;16642:8;:27;;16634:61;;;;;-1:-1:-1;;;16634:61:0;;;;;;;;;;;;-1:-1:-1;;;16634:61:0;;;;;;;;;;;;;;;29275:5:::1;-1:-1:-1::0;;;;;29264:16:0::1;:4;;29269:1;29264:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29264:7:0::1;-1:-1:-1::0;;;;;29264:16:0::1;;29256:55;;;::::0;;-1:-1:-1;;;29256:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;29332:52;29359:7;29368:9;29379:4;;29332:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29332:26:0::1;::::0;-1:-1:-1;;;29332:52:0:i:1;:::-;29322:62;;29417:9;29403:7;29411:1;29403:10;;;;;;;;;;;;;;:23;;29395:72;;;;-1:-1:-1::0;;;29395:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29485:5;-1:-1:-1::0;;;;;29478:21:0::1;;29507:7;29515:1;29507:10;;;;;;;;;;;;;;29478:42;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29478:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29478:42:0;;;;;29545:5;-1:-1:-1::0;;;;;29538:22:0::1;;29561:48;29583:7;29592:4;;29597:1;29592:7;;;;;;29561:48;29611:7;29619:1;29611:10;;;;;;;;;;;;;;29538:84;;;;;;;;;;;;;-1:-1:-1::0;;;;;29538:84:0::1;-1:-1:-1::0;;;;;29538:84:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29538:84:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29538:84:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29538:84:0;29531:92:::1;;;;29634:24;29640:7;29649:4;;29634:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29655:2:0;;-1:-1:-1;29634:5:0::1;::::0;-1:-1:-1;;29634:24:0:i:1;:::-;29722:7;29730:1;29722:10;;;;;;;;;;;;;;29710:9;:22;29706:95;;;29734:67;29766:10;29790:7;29798:1;29790:10;;;;;;;;;;;;;;29778:9;:22;29734:31;:67::i;:::-;29003:806:::0;;;;;;;;:::o;23843:719::-;24163:15;24191:12;24206:44;24228:7;24237:5;24244;24206:21;:44::i;:::-;24191:59;;24261:10;24274;:33;;24298:9;24274:33;;;-1:-1:-1;;24274:33:0;24318:77;;;-1:-1:-1;;;24318:77:0;;24343:10;24318:77;;;;24363:4;24318:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24261:46;;-1:-1:-1;;;;;;24318:24:0;;;;;:77;;;;;-1:-1:-1;;24318:77:0;;;;;;;;-1:-1:-1;24318:24:0;:77;;;2:2:-1;;;;27:1;24;17:12;2:2;24318:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24318:77:0;;;;24419:135;24482:5;24489:9;24500:14;24516:13;24531:2;24535:8;24419:48;:135::i;:::-;24406:148;23843:719;-1:-1:-1;;;;;;;;;;;;;23843:719:0:o;26630:691::-;26847:21;26819:8;16654:15;16642:8;:27;;16634:61;;;;;-1:-1:-1;;;16634:61:0;;;;;;;;;;;;-1:-1:-1;;;16634:61:0;;;;;;;;;;;;;;;26905:5:::1;-1:-1:-1::0;;;;;26894:16:0::1;:4;;26899:1;26894:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26894:7:0::1;-1:-1:-1::0;;;;;26894:16:0::1;;26886:55;;;::::0;;-1:-1:-1;;;26886:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;26962:53;26990:7;26999:9;27010:4;;26962:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26962:27:0::1;::::0;-1:-1:-1;;;26962:53:0:i:1;:::-;26952:63;;27065:12;27034:7;27059:1;27042:7;:14;:18;27034:27;;;;;;;;;;;;;;:43;;27026:96;;;;-1:-1:-1::0;;;27026:96:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27140:5;-1:-1:-1::0;;;;;27133:21:0::1;;27162:7;27170:1;27162:10;;;;;;;;;;;;;;27133:42;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27133:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27133:42:0;;;;;27200:5;-1:-1:-1::0;;;;;27193:22:0::1;;27216:48;27238:7;27247:4;;27252:1;27247:7;;;;;;27216:48;27266:7;27274:1;27266:10;;;;;;;;;;;;;;27193:84;;;;;;;;;;;;;-1:-1:-1::0;;;;;27193:84:0::1;-1:-1:-1::0;;;;;27193:84:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27193:84:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27193:84:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27193:84:0;27186:92:::1;;;;27289:24;27295:7;27304:4;;27289:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27310:2:0;;-1:-1:-1;27289:5:0::1;::::0;-1:-1:-1;;27289:24:0:i:1;33609:185::-:0;33706:12;33738:48;33758:7;33767:8;33777;33738:19;:48::i;20157:847::-;20411:12;20425;20392:8;16654:15;16642:8;:27;;16634:61;;;;;-1:-1:-1;;;16634:61:0;;;;;;;;;;;;-1:-1:-1;;;16634:61:0;;;;;;;;;;;;;;;20450:12:::1;20465:46;20487:7;20496:6;20504;20465:21;:46::i;:::-;20522:59;::::0;;-1:-1:-1;;;20522:59:0;;20553:10:::1;20522:59;::::0;::::1;::::0;-1:-1:-1;;;;;20522:30:0;::::1;:59:::0;;;;;;;;;;;;;;20450:61;;-1:-1:-1;20522:30:0;;::::1;::::0;:59;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20522:30:0;:59;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20522:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20522:59:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;20649:26:0::1;::::0;;;;;-1:-1:-1;;;;;20649:26:0;;::::1;;::::0;::::1;::::0;;;20619:12:::1;::::0;;;20649:22;;::::1;::::0;::::1;::::0;:26;;;;;;;;;;;20619:12;20649:22;:26;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20649:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20649:26:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20649:26:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20649:26:0;-1:-1:-1;20687:14:0::1;20706:40;20731:6:::0;20739;20706:24:::1;:40::i;:::-;20686:60;;;20788:6;-1:-1:-1::0;;;;;20778:16:0::1;:6;-1:-1:-1::0;;;;;20778:16:0::1;;:58;;20819:7;20828;20778:58;;;20798:7;20807;20778:58;20757:79:::0;;-1:-1:-1;20757:79:0;-1:-1:-1;20855:21:0;;::::1;;20847:69;;;;-1:-1:-1::0;;;20847:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20946:10;20935:7;:21;;20927:69;;;;-1:-1:-1::0;;;20927:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16706:1;;;;20157:847:::0;;;;;;;;;;;:::o;16496:41::-;;;:::o;31872:847::-;32133:8;16654:15;16642:8;:27;;16634:61;;;;;-1:-1:-1;;;16634:61:0;;;;;;;;;;;;-1:-1:-1;;;16634:61:0;;;;;;;;;;;;;;;32178:5:::1;-1:-1:-1::0;;;;;32167:16:0::1;:4;;32172:1;32167:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32167:7:0::1;-1:-1:-1::0;;;;;32167:16:0::1;;32159:55;;;::::0;;-1:-1:-1;;;32159:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;32225:13;32241:9;32225:25;;32268:5;-1:-1:-1::0;;;;;32261:21:0::1;;32290:8;32261:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32261:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32261:40:0;;;;;32326:5;-1:-1:-1::0;;;;;32319:22:0::1;;32342:48;32364:7;32373:4;;32378:1;32373:7;;;;;;32342:48;32392:8;32319:82;;;;;;;;;;;;;-1:-1:-1::0;;;;;32319:82:0::1;-1:-1:-1::0;;;;;32319:82:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32319:82:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32319:82:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32319:82:0;32312:90:::1;;;;32413:18;32441:4:::0;;-1:-1:-1;;32446:15:0;;32441:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32441:21:0::1;-1:-1:-1::0;;;;;32434:39:0::1;;32474:2;32434:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32434:43:0::1;-1:-1:-1::0;;;;;32434:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32434:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32434:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32434:43:0;32488:44:::1;::::0;;32434:43:::1;32488:44:::0;;::::1;::::0;;;;;;;;;;;32434:43;;-1:-1:-1;32488:44:0::1;::::0;;;32523:4;;;;;;32488:44;::::1;::::0;32523:4;;32488:44;32523:4;32488:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32529:2:0;;-1:-1:-1;32488:34:0::1;::::0;-1:-1:-1;;32488:44:0:i:1;:::-;32631:12:::0;32565:62:::1;32613:13:::0;32572:4;;-1:-1:-1;;32577:15:0;;32572:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32572:21:0::1;-1:-1:-1::0;;;;;32565:39:0::1;;32605:2;32565:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32565:43:0::1;-1:-1:-1::0;;;;;32565:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;34335:250:0::0;34479:21;34525:52;34553:7;34562:8;34572:4;34525:27;:52::i;18391:732::-;18679:12;18693;18707:14;18660:8;16654:15;16642:8;:27;;16634:61;;;;;-1:-1:-1;;;16634:61:0;;;;;;;;;;;;-1:-1:-1;;;16634:61:0;;;;;;;;;;;;;;;18755:85:::1;18769:6;18777;18785:14;18801;18817:10;18829;18755:13;:85::i;:::-;18734:106:::0;;-1:-1:-1;18734:106:0;-1:-1:-1;18851:12:0::1;18866:46;18888:7;18897:6:::0;18905;18866:21:::1;:46::i;:::-;18851:61;;18923:66;18955:6;18963:10;18975:4;18981:7;18923:31;:66::i;:::-;19000;19032:6;19040:10;19052:4;19058:7;19000:31;:66::i;:::-;19101:4;-1:-1:-1::0;;;;;19089:22:0::1;;19112:2;19089:26;;;;;;;;;;;;;-1:-1:-1::0;;;;;19089:26:0::1;-1:-1:-1::0;;;;;19089:26:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19089:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19089:26:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19089:26:0;18391:732;;;;-1:-1:-1;19089:26:0;;-1:-1:-1;18391:732:0;;-1:-1:-1;;;;;;;;;18391:732:0:o;19129:985::-;19384:16;19402:15;19419:14;19365:8;16654:15;16642:8;:27;;16634:61;;;;;-1:-1:-1;;;16634:61:0;;;;;;;;;;;;-1:-1:-1;;;16634:61:0;;;;;;;;;;;;;;;19474:178:::1;19502:5;19522;19542:18;19575:9;19599:14;19628:13;19474;:178::i;:::-;19446:206:::0;;-1:-1:-1;19446:206:0;-1:-1:-1;19663:12:0::1;19678:44;19700:7;19709:5:::0;19716::::1;19678:21;:44::i;:::-;19663:59;;19733:69;19765:5;19772:10;19784:4;19790:11;19733:31;:69::i;:::-;19820:5;-1:-1:-1::0;;;;;19813:21:0::1;;19842:10;19813:42;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19813:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19813:42:0;;;;;19880:5;-1:-1:-1::0;;;;;19873:22:0::1;;19896:4;19902:10;19873:40;;;;;;;;;;;;;-1:-1:-1::0;;;;;19873:40:0::1;-1:-1:-1::0;;;;;19873:40:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19873:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19873:40:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19873:40:0;19866:48:::1;;;;19949:4;-1:-1:-1::0;;;;;19937:22:0::1;;19960:2;19937:26;;;;;;;;;;;;;-1:-1:-1::0;;;;;19937:26:0::1;-1:-1:-1::0;;;;;19937:26:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19937:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19937:26:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19937:26:0;;-1:-1:-1;20015:9:0::1;:22:::0;-1:-1:-1;20011:95:0::1;;;20039:67;20071:10;20095;20083:9;:22;20039:31;:67::i;:::-;16706:1;19129:985:::0;;;;;;;;;;;:::o;12859:511::-;12952:14;12998:1;12987:8;:12;12979:65;;;;-1:-1:-1;;;12979:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13075:1;13063:9;:13;:31;;;;;13093:1;13080:10;:14;13063:31;13055:81;;;;-1:-1:-1;;;13055:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13147:20;13170:17;:8;13183:3;13170:17;:12;:17;:::i;:::-;13147:40;-1:-1:-1;13198:14:0;13215:31;13147:40;13235:10;13215:31;:19;:31;:::i;:::-;13198:48;-1:-1:-1;13257:16:0;13276:40;13300:15;13276:19;:9;13290:4;13276:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;13257:59;;13351:11;13339:9;:23;;;;;;;12859:511;-1:-1:-1;;;;;;;12859:511:0:o;14628:529::-;14729:21;14786:1;14771:4;:11;:16;;14763:56;;;;;-1:-1:-1;;;14763:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14851:4;:11;14840:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14840:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14840:23:0;;14830:33;;14904:9;14874:7;14899:1;14882:7;:14;:18;14874:27;;;;;;;;;;;;;;;;;:39;14938:11;;-1:-1:-1;;14938:15:0;14924:226;14955:5;;14924:226;;14983:14;14999:15;15018:42;15030:7;15039:4;15048:1;15044;:5;15039:11;;;;;;;;;;;;;;15052:4;15057:1;15052:7;;;;;;;;;;;;;;15018:11;:42::i;:::-;14982:78;;;;15092:46;15104:7;15112:1;15104:10;;;;;;;;;;;;;;15116:9;15127:10;15092:11;:46::i;:::-;15075:7;15087:1;15083;:5;15075:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;14962:3:0;14924:226;;;;14628:529;;;;;:::o;11385:478::-;11474:12;11500:14;11516;11534:26;11545:6;11553;11534:10;:26::i;:::-;11698:32;;;-1:-1:-1;;11698:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;11698:32:0;;;;;11688:43;;;;;;11601:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;11601:251:0;;;;;;;11591:262;;;;;;;;;11385:478;-1:-1:-1;;;;;11385:478:0:o;1524:398::-;1756:45;;;-1:-1:-1;;;;;1756:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1756:45:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;1756:45:0;179:29:-1;160:49;;1745:57:0;;;;1710:12;;1724:17;;1745:10;;;;1756:45;1745:57;;;25:18:-1;1745: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;;;1745: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;;1709:93:0;;;;1821:7;:57;;;;-1:-1:-1;1833:11:0;;:16;;:44;;;1864:4;1853:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1853:24:0;1833:44;1813:101;;;;;-1:-1:-1;;;1813:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1524:398;;;;;:::o;2386:202::-;2500:12;;;2460;2500;;;;;;;;;-1:-1:-1;;;;;2478:7:0;;;2493:5;;2478: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;;;2478: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;;2459:54:0;;;2532:7;2524:56;;;;-1:-1:-1;;;2524:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2386:202;;;:::o;14039:508::-;14140:21;14197:1;14182:4;:11;:16;;14174:56;;;;;-1:-1:-1;;;14174:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14262:4;:11;14251:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14251:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14251:23:0;;14241:33;;14298:8;14285:7;14293:1;14285:10;;;;;;;;;;;;;:21;;;;;14322:6;14317:223;14348:1;14334:4;:11;:15;14330:1;:19;14317:223;;;14372:14;14388:15;14407:42;14419:7;14428:4;14433:1;14428:7;;;;;;;;;;;;;;14437:4;14442:1;14446;14442:5;14437:11;;;;;;;14407:42;14371:78;;;;14481:47;14494:7;14502:1;14494:10;;;;;;;;;;;;;;14506:9;14517:10;14481:12;:47::i;:::-;14464:7;14472:1;14476;14472:5;14464:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;14351:3:0;;14317:223;;1930:448;2201:51;;;-1:-1:-1;;;;;2201:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2201:51:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;-1:-1;;;179:29;160:49;;2190:63:0;;;;2155:12;;2169:17;;2190:10;;;;2201:51;2190:63;;;25:18:-1;2190: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;;;2190: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;;2154:99:0;;;;2272:7;:57;;;;-1:-1:-1;2284:11:0;;:16;;:44;;;2315:4;2304:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2304:24:0;2284:44;2264:106;;;;-1:-1:-1;;;2264:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1930:448;;;;;;:::o;24673:723::-;24780:6;24775:614;24806:1;24792:4;:11;:15;24788:1;:19;24775:614;;;24830:13;24845:14;24864:4;24869:1;24864:7;;;;;;;;;;;;;;24873:4;24878:1;24882;24878:5;24873:11;;;;;;;;;;;;;;24829:56;;;;24901:14;24920:39;24945:5;24952:6;24920:24;:39::i;:::-;24900:59;;;24974:14;24991:7;24999:1;25003;24999:5;24991:14;;;;;;;;;;;;;;24974:31;;25021:15;25038;25066:6;-1:-1:-1;;;;;25057:15:0;:5;-1:-1:-1;;;;;25057:15:0;;:61;;25099:9;25115:1;25057:61;;;25081:1;25085:9;25057:61;25020:98;;;;25133:10;25164:1;25150:4;:11;:15;25146:1;:19;:79;;25222:3;25146:79;;;25168:51;25190:7;25199:6;25207:4;25212:1;25216;25212:5;25207:11;;;;;;;;;;;;;;25168:21;:51::i;:::-;25133:92;;25252:45;25274:7;25283:5;25290:6;25252:21;:45::i;:::-;-1:-1:-1;;;;;25240:63:0;;25322:10;25334;25346:2;25360:1;25350:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;25350:12:0;87:42:-1;143:17;;-1:-1;25350:12:0;;25240:137;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25240:137:0;-1:-1:-1;;;;;25240:137: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;25240:137:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25240:137:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;24809:3:0;;;;;-1:-1:-1;24775:614:0;;-1:-1:-1;;;;;;;;24775:614:0;;;24673:723;;;:::o;29956:1196::-;30069:6;30064:1081;30095:1;30081:4;:11;:15;30077:1;:19;30064:1081;;;30119:13;30134:14;30153:4;30158:1;30153:7;;;;;;;;;;;;;;30162:4;30167:1;30171;30167:5;30162:11;;;;;;;;;;;;;;30118:56;;;;30190:14;30209:39;30234:5;30241:6;30209:24;:39::i;:::-;30189:59;;;30263:16;30294:45;30316:7;30325:5;30332:6;30294:21;:45::i;:::-;30263:77;;30355:16;30386:17;30474:13;30489;30507:4;-1:-1:-1;;;;;30507:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30507:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30507:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30507:18:0;;;;;;;30473:52;;;;;-1:-1:-1;30473:52:0;;-1:-1:-1;30541:17:0;;-1:-1:-1;;;;;30582:15:0;;;;;;;:61;;30624:8;30634;30582:61;;;30601:8;30611;30582:61;30540:103;;;;30672:56;30715:12;30679:5;-1:-1:-1;;;;;30672:23:0;;30704:4;30672:38;;;;;;;;;;;;;-1:-1:-1;;;;;30672:38:0;-1:-1:-1;;;;;30672:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;30672:56:0;30658:70;;30758:68;30785:11;30798:12;30812:13;30758:26;:68::i;:::-;30743:83;;30064:1081;;;;30857:15;30874;30902:6;-1:-1:-1;;;;;30893:15:0;:5;-1:-1:-1;;;;;30893:15:0;;:67;;30938:12;30957:1;30893:67;;;30917:1;30921:12;30893:67;30856:104;;;;30975:10;31006:1;30992:4;:11;:15;30988:1;:19;:79;;31064:3;30988:79;;;31010:51;31032:7;31041:6;31049:4;31054:1;31058;31054:5;31049:11;;;;;;;31010:51;31120:12;;;31130:1;31120:12;;;;;;;;;;31082:51;;;;;;;;;;;;;;;-1:-1:-1;;;;;31082:51:0;;;;;;;;;;;;;;;;;;;;;;30975:92;;-1:-1:-1;31082:9:0;;;;;;31092:10;;31104;;30975:92;;31120:12;;31082:51;;;;;;;;31120:12;;31082:51;;;;31120: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;31082:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31082:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;30098:3:0;;;;;-1:-1:-1;30064:1081:0;;-1:-1:-1;;;;;;;;;;30064:1081:0;10408:129;10492:5;;;10487:16;;;;10479:50;;;;;-1:-1:-1;;;10479:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;13491:466;13584:13;13630:1;13618:9;:13;13610:67;;;;-1:-1:-1;;;13610:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13708:1;13696:9;:13;:31;;;;;13726:1;13713:10;:14;13696:31;13688:81;;;;-1:-1:-1;;;13688:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13780:14;13797:34;13826:4;13797:24;:9;13811;13797:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;13780:51;-1:-1:-1;13842:16:0;13861:34;13891:3;13861:25;:10;13876:9;13861:25;:14;:25;:::i;:34::-;13842:53;;13917:32;13947:1;13930:11;13918:9;:23;;;;;;;13917:32;:29;:32;:::i;:::-;13906:43;13491:466;-1:-1:-1;;;;;;13491:466:0:o;12422:315::-;12504:12;12547:1;12537:7;:11;12529:58;;;;-1:-1:-1;;;12529:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12617:1;12606:8;:12;:28;;;;;12633:1;12622:8;:12;12606:28;12598:78;;;;-1:-1:-1;;;12598:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12721:8;12697:21;:7;12709:8;12697:21;:11;:21;:::i;:::-;:32;;;;;;;12422:315;-1:-1:-1;;;;12422:315:0:o;10950:343::-;11025:14;11041;11086:6;-1:-1:-1;;;;;11076:16:0;:6;-1:-1:-1;;;;;11076:16:0;;;11068:63;;;;-1:-1:-1;;;11068:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11170:6;-1:-1:-1;;;;;11161:15:0;:6;-1:-1:-1;;;;;11161:15:0;;:53;;11199:6;11207;11161:53;;;11180:6;11188;11161:53;11142:72;;-1:-1:-1;11142:72:0;-1:-1:-1;;;;;;11233:20:0;;11225:60;;;;;-1:-1:-1;;;11225:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10950:343;;;;;:::o;17016:1369::-;17329:47;;;;;;-1:-1:-1;;;;;17329:47:0;;;;;;;;;;;;;;;;17234:12;;;;;;17344:7;17329:31;;;;;;:47;;;;;;;;;;;;;;;:31;:47;;;2:2:-1;;;;27:1;24;17:12;2:2;17329:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17329:47:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17329:47:0;-1:-1:-1;;;;;17329:61:0;;17325:144;;;17407:50;;;;;;-1:-1:-1;;;;;17407:50:0;;;;;;;;;;;;;;;;17422:7;17407:34;;;;;;:50;;;;;;;;;;;;;;;-1:-1:-1;17407:34:0;:50;;;2:2:-1;;;;27:1;24;17:12;2:2;17407:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17407:50:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;17325:144:0;17480:13;17495;17512:50;17538:7;17547:6;17555;17512:25;:50::i;:::-;17479:83;;;;17577:8;17589:1;17577:13;:30;;;;-1:-1:-1;17594:13:0;;17577:30;17573:805;;;17646:14;;-1:-1:-1;17662:14:0;;-1:-1:-1;17573:805:0;;;17710:19;17732:55;17752:14;17768:8;17778;17732:19;:55::i;:::-;17710:77;;17824:14;17806;:32;17802:565;;17885:10;17867:14;:28;;17859:76;;;;-1:-1:-1;;;17859:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17976:14;;-1:-1:-1;17992:14:0;-1:-1:-1;17992:14:0;17802:565;;;18048:19;18070:55;18090:14;18106:8;18116;18070:19;:55::i;:::-;18048:77;;18169:14;18151;:32;;18144:40;;;;18229:10;18211:14;:28;;18203:76;;;;-1:-1:-1;;;18203:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18320:14;-1:-1:-1;18336:14:0;;-1:-1:-1;17802:565:0;17573:805;;17016:1369;;;;;;;;;;;:::o;10545:142::-;10597:6;10624;;;:30;;-1:-1:-1;;10639:5:0;;;10653:1;10648;10639:5;10648:1;10634:15;;;;;:20;10624:30;10616:63;;;;;-1:-1:-1;;;10616:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;10272:128;10356:5;;;10351:16;;;;10343:49;;;;;-1:-1:-1;;;10343:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;11921:388;12014:13;12029;12056:14;12075:26;12086:6;12094;12075:10;:26::i;:::-;12055:46;;;12113:13;12128;12158:32;12166:7;12175:6;12183;12158:7;:32::i;:::-;-1:-1:-1;;;;;12146:57:0;;:59;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12146:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12146:59:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12146:59:0;;;;;;;12112:93;;;;;-1:-1:-1;12112:93:0;;-1:-1:-1;;;;;;12239:16:0;;;;;;;:62;;12282:8;12292;12239:62;;;12259:8;12269;12239:62;12216:85;;;;-1:-1:-1;11921:388:0;-1:-1:-1;;;;;;;11921:388:0:o

Swarm Source

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