Contract 0x60ae616a2155ee3d9a68541ba4544862310933d4 9

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xd2e1f3e0ff9115a8cd9b864c20c172d92c9d2adc3750569ea91d873af3250a8dSwap Exact Token...79201632021-12-07 9:28:164 secs ago0x88b934a38b4d1f4c55ee6420655dd298122d10e2 IN  Trader Joe: Router0 AVAX0.00501487525
0x07d5d87475def689c5d36c06066b48d6e52d083d0f73043ecf1674f5cb996e03Swap Exact Token...79201632021-12-07 9:28:164 secs ago0x2c97f058a5812f2f83ed02f09d0024d431596c60 IN  Trader Joe: Router0 AVAX0.0031116525
0xcc6e4630d90996ba5b71cc072610d1681682b65b894ac1c10f9141fb46ba38e8Swap Exact Token...79201622021-12-07 9:28:146 secs ago0x29fa22cc4d61748435c890c1f8e93b57e3691f53 IN  Trader Joe: Router0 AVAX0.00563637525
0xca0752ef042d242dd56df214af24e57560e8f1de5baaa6ffe3578f5d5ba6b9ddSwap Exact AVAX ...79201622021-12-07 9:28:146 secs ago0xcbc071e6dfab67354b08c08b75a99f93d8b36897 IN  Trader Joe: Router2.370813851418344 AVAX0.00355642525
0x8a2b5c154d056243f442c5de3cae801d45849e9c1e88bc3fff182becc4bba92fSwap Exact Token...79201622021-12-07 9:28:146 secs ago0x3fcd4943289621aec95b95639585af82afc80a85 IN  Trader Joe: Router0 AVAX0.00353902525
0x82a491620b9d29f30503a39f5c5e3ca96c0d59fea61dc6f5cd2a0dd45c1304baSwap Exact Token...79201612021-12-07 9:28:128 secs ago0x2b41c2125ab3d47f1ec411b0421af47afb58348d IN  Trader Joe: Router0 AVAX0.00353822525
0xd65b08baf3ef3b46d2b8738e79bae4472e2c4a977c2cb2e8a2271307e687a82bSwap Exact AVAX ...79201612021-12-07 9:28:128 secs ago0x1c442c0f1790b802e6347053a22b25c69e1bed59 IN  Trader Joe: Router1.298521822636678 AVAX0.00355642525
0xe3eeae386f6b7d17d43837d8c6094a02663076a5f56937da292d730393d607d1Swap Exact Token...79201612021-12-07 9:28:128 secs ago0x0bb53de33df0f8ba40e0e06be85998f506c4c7bc IN  Trader Joe: Router0 AVAX0.0041860525
0xbdb3435a77d29fd729d7509ddf8250b3a1bfa1c6510d9443ba3cd616c6cb5c20Swap Exact Token...79201612021-12-07 9:28:128 secs ago0xdfba7bbb1491459620c60af798c76b2e83ba6eb0 IN  Trader Joe: Router0 AVAX0.004335288326.1
0x43665b24198adf48e0ee98287cabfcc150b41a505a11358e0d975ae6d3048c42Swap Exact Token...79201612021-12-07 9:28:128 secs ago0xa3186ef9594b0674e91f07f1604ce61e8b8aa830 IN  Trader Joe: Router0 AVAX0.00551622527.5
0xfd3414891ae866b5942732f155d479550a20a152274e8f5d658f6d46cc923fdfAdd Liquidity AV...79201602021-12-07 9:28:1010 secs ago0x9ffea81290f9fd2fadb2d627fdc7df116abbec24 IN  Trader Joe: Router0.232869795934281 AVAX0.004823625
0xb8adb4542699222f6d41920039105d335ac2a4aea0f17bf2bc6a6e1184f7fad1Swap Exact AVAX ...79201592021-12-07 9:28:0713 secs ago0x9cfbf6666ec9f1ac2cf742caf2b59d8f7becbb97 IN  Trader Joe: Router0.053 AVAX0.003585125
0x9b1497e1262f548e8c6c7920c3d5d9c060c38da82fb98ff3e32338c6d1247a50Swap Exact AVAX ...79201592021-12-07 9:28:0713 secs ago0xca307f6ab69c8dc89c12b3f612ec8935efbcf357 IN  Trader Joe: Router7.2 AVAX0.00355642525
0x1d92350710b182c8f052d5afa22bc85e9ed3e79e2787d9de47a5c45f59034a4cSwap Exact AVAX ...79201582021-12-07 9:28:0614 secs ago0x41ca85efcd4df1599c97f40cbe5a64a412baee5d IN  Trader Joe: Router13 AVAX0.002868225
0x5d5fe87bc1d02b3cf1cdfde6db5893ba21529fcd1c6b5e252fbaea2aa51fca06Add Liquidity79201572021-12-07 9:28:0416 secs ago0x965b398a327712ece4dd7ae99e39a40205645885 IN  Trader Joe: Router0 AVAX0.00430652525
0x7f9ed732c1bd164aa106a838a4d0d1820b956a5a3d226b2c2469e90ab65e4a60Swap Exact Token...79201572021-12-07 9:28:0416 secs ago0xd8722ef251b167ca0602de455f23d02d16128eb1 IN  Trader Joe: Router0 AVAX0.0043588525
0xdc3e73f86e5db73449f6620e3c6936af729168327db88b153363194b4efab630Swap Exact Token...79201572021-12-07 9:28:0416 secs ago0xc07786613b9ac302623fd029c2ee6877aa4d7e08 IN  Trader Joe: Router0 AVAX0.00462652525
0x7053efc0047c5f639056876c1407edc2e64c0e8327db6e60e1a90e0c27dc84dcSwap Exact AVAX ...79201572021-12-07 9:28:0416 secs ago0x4f980e940981fdafd103affa5e263eb1627dc6c9 IN  Trader Joe: Router1 AVAX0.0031331525
0xf6c342eb250e2483cdff179c2a107b4767fbc5195a12939b9e9c923014e8c970Swap Exact Token...79201572021-12-07 9:28:0416 secs ago0x32105385ed42dadc295fbb181994af3c423362c5 IN  Trader Joe: Router0 AVAX0.00539627525
0xfbf1335211c6aee86f35012278b3ea0aac808036a2c37c9bcb3b73dc287fc43eSwap Exact AVAX ...79201572021-12-07 9:28:0416 secs ago0x214ad87666baa54817a645ad46cc85a8c4d8accd IN  Trader Joe: Router83.153978242857555 AVAX0.0035625
0x732013b37dcc436930d9f53ca6a702327122fd1253020175362ea6d00e1d4388Swap Exact Token...79201562021-12-07 9:28:0218 secs ago0x39b04e70814e6e663c303fad26bc79db9251070c IN  Trader Joe: Router0 AVAX0.0054094525
0x472b9873a8997b7dabaa7c5e320fbabe6c1560d11d4a70c4eedf43c028649548Swap Exact Token...79201562021-12-07 9:28:0218 secs ago0x5270b883d12e6402a20675467e84364a2eb542bf IN  Trader Joe: Router0 AVAX0.00582407525
0xfdfad242a2fd6659c1d1b0e55a7da1ec188150ad6cd0a0875700f3bc68d2d11eSwap Exact Token...79201562021-12-07 9:28:0218 secs ago0x8e642780d1ccafb636119b1599cd10655de5ea0b IN  Trader Joe: Router0 AVAX0.00462827525
0x23bf6042889e0e761c776158313d77a7a55acab0838bfea6ce69fcc551c5c588Swap Exact AVAX ...79201562021-12-07 9:28:0218 secs ago0x68c65a105d1c6c0aef9bc2637c94145b4a87910d IN  Trader Joe: Router0.269 AVAX0.003911737527.5
0x21cbeee797af2eb0e8356ef78cd37a439e2b7c76e4ce227e2ee60f1adbc88c87Swap Exact AVAX ...79201552021-12-07 9:27:5921 secs ago0x9d0841879d973ab06c2122f0bd60c5b155a659eb IN  Trader Joe: Router1.5 AVAX0.00355642525
[ Download CSV Export 

OVERVIEW

One-stop-shop decentralized trading on Avalanche.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x214298d044c94a676c7f84e5aecbb517cfd717cf270bfb3be53c8e4594d00e5d79201542021-12-07 9:27:5822 secs ago Trader Joe: Router Wrapped AVAX0.01 AVAX
0x796ab59213bb1ddbcf6422efa2897cea78688b400591a8f7c8b732e7129a4ac579201532021-12-07 9:27:5426 secs ago Trader Joe: Router0xae83f568040acf92934e91b24335c9a12c58270210.704850679637211487 AVAX
0x796ab59213bb1ddbcf6422efa2897cea78688b400591a8f7c8b732e7129a4ac579201532021-12-07 9:27:5426 secs ago Wrapped AVAX Trader Joe: Router10.704850679637211487 AVAX
0x6bee949a7d9843ab4fc07a8ddab6b5779a073b3ea6d138e12dd859222161588879201522021-12-07 9:27:5228 secs ago Trader Joe: Router Wrapped AVAX0.5 AVAX
0x576d7734f892b2d072ac43f6f4df04eb957d115c479f14cc39ad00878650f46879201512021-12-07 9:27:5030 secs ago Trader Joe: Router Wrapped AVAX1.593211529841027648 AVAX
0x83326ab171f82ab3c19500d1c6e8ba248386e08239ae5cd7883431430a52b93579201492021-12-07 9:27:4832 secs ago Trader Joe: Router0xe4b8c70495313841d2b0ce67eaef43ba5a1e9611149.809639394626501929 AVAX
0x83326ab171f82ab3c19500d1c6e8ba248386e08239ae5cd7883431430a52b93579201492021-12-07 9:27:4832 secs ago Wrapped AVAX Trader Joe: Router149.809639394626501929 AVAX
0xfab6379fd8ae1c732ba250287a83894e5e922d28f1bbc23b063ce9eb52c6eddb79201492021-12-07 9:27:4832 secs ago Trader Joe: Router0xcbce294bf5276dfeacec88ae8ea4d13b26bfac6e268.973726033621045833 AVAX
0xfab6379fd8ae1c732ba250287a83894e5e922d28f1bbc23b063ce9eb52c6eddb79201492021-12-07 9:27:4832 secs ago Wrapped AVAX Trader Joe: Router268.973726033621045833 AVAX
0x055195444043ba69b1ecb13df490c710ac8671f3c5466c01b982ee574a1bd1ca79201492021-12-07 9:27:4832 secs ago Trader Joe: Router 0x8f47416cae600bccf9530e9f3aeaa06bdd1caa794.062812789554920561 AVAX
0x055195444043ba69b1ecb13df490c710ac8671f3c5466c01b982ee574a1bd1ca79201492021-12-07 9:27:4832 secs ago Wrapped AVAX Trader Joe: Router4.062812789554920561 AVAX
0x055195444043ba69b1ecb13df490c710ac8671f3c5466c01b982ee574a1bd1ca79201492021-12-07 9:27:4832 secs ago Trader Joe: Router Wrapped AVAX0.729480272819398809 AVAX
0x055195444043ba69b1ecb13df490c710ac8671f3c5466c01b982ee574a1bd1ca79201492021-12-07 9:27:4832 secs ago 0x8f47416cae600bccf9530e9f3aeaa06bdd1caa79 Trader Joe: Router0.729480272819398809 AVAX
0x055195444043ba69b1ecb13df490c710ac8671f3c5466c01b982ee574a1bd1ca79201492021-12-07 9:27:4832 secs ago Trader Joe: Router 0x8f47416cae600bccf9530e9f3aeaa06bdd1caa790.729480272819398809 AVAX
0x055195444043ba69b1ecb13df490c710ac8671f3c5466c01b982ee574a1bd1ca79201492021-12-07 9:27:4832 secs ago Wrapped AVAX Trader Joe: Router0.729480272819398809 AVAX
0x055195444043ba69b1ecb13df490c710ac8671f3c5466c01b982ee574a1bd1ca79201492021-12-07 9:27:4832 secs ago Trader Joe: Router 0x8f47416cae600bccf9530e9f3aeaa06bdd1caa792.636918488936262522 AVAX
0x055195444043ba69b1ecb13df490c710ac8671f3c5466c01b982ee574a1bd1ca79201492021-12-07 9:27:4832 secs ago Wrapped AVAX Trader Joe: Router2.636918488936262522 AVAX
0x055195444043ba69b1ecb13df490c710ac8671f3c5466c01b982ee574a1bd1ca79201492021-12-07 9:27:4832 secs ago Trader Joe: Router 0x8f47416cae600bccf9530e9f3aeaa06bdd1caa790.294035919245285129 AVAX
0x055195444043ba69b1ecb13df490c710ac8671f3c5466c01b982ee574a1bd1ca79201492021-12-07 9:27:4832 secs ago Wrapped AVAX Trader Joe: Router0.294035919245285129 AVAX
0xe9da2b19e32c0cd2e59f9ff17c9b6af4dd8cd724347a6fbe1b1fe11c92e0698c79201472021-12-07 9:27:4436 secs ago Trader Joe: Router0xca56f9b27c687cf4cf423e9c24398495c3d57a9c102.890686522188020221 AVAX
0xe9da2b19e32c0cd2e59f9ff17c9b6af4dd8cd724347a6fbe1b1fe11c92e0698c79201472021-12-07 9:27:4436 secs ago Wrapped AVAX Trader Joe: Router102.890686522188020221 AVAX
0xefa0bcbb6473e4d85b00c8be3e62e0a6b93c4ce0541d9dca750af3f541c6f05a79201462021-12-07 9:27:4238 secs ago Trader Joe: Router Wrapped AVAX0.001083570867591202 AVAX
0x0b2d7ccf53a3231b6f14ae50524e19469493fbe9242f1fd044c35e4c7dd40d3979201442021-12-07 9:27:3842 secs ago Trader Joe: Router Wrapped AVAX0.7 AVAX
0xb85ce89fc427dac3571949b14a41f5d4382dd2cbb6546deb13ccdf005c5758a679201442021-12-07 9:27:3842 secs ago Trader Joe: Router0xec93c9f3814de78d62d7505ba489ae62deaecfc50.046326765167797092 AVAX
0xb85ce89fc427dac3571949b14a41f5d4382dd2cbb6546deb13ccdf005c5758a679201442021-12-07 9:27:3842 secs ago Trader Joe: Router Wrapped AVAX9.265353033559418441 AVAX
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
JoeRouter02

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at snowtrace.io on 2021-11-05
*/

// File: contracts/traderjoe/interfaces/IJoePair.sol

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.5.0;

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

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

// File: contracts/traderjoe/libraries/SafeMath.sol

pragma solidity =0.6.12;

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

library SafeMathJoe {
    function add(uint256 x, uint256 y) internal pure returns (uint256 z) {
        require((z = x + y) >= x, "ds-math-add-overflow");
    }

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

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

// File: contracts/traderjoe/libraries/JoeLibrary.sol

pragma solidity >=0.5.0;

library JoeLibrary {
    using SafeMathJoe for uint256;

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

    // calculates the CREATE2 address for a pair without making any external calls
    function pairFor(
        address factory,
        address tokenA,
        address tokenB
    ) internal pure returns (address pair) {
        (address token0, address token1) = sortTokens(tokenA, tokenB);
        pair = address(
            uint256(
                keccak256(
                    abi.encodePacked(
                        hex"ff",
                        factory,
                        keccak256(abi.encodePacked(token0, token1)),
                        hex"0bbca9af0511ad1a1da383135cf3a8d2ac620e549ef9f6ae3a4c33c2fed0af91"
                    )
                )
            )
        );
    }

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

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

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

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

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

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

// File: contracts/traderjoe/libraries/TransferHelper.sol

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");
    }
}

pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function migrator() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;

    function setMigrator(address) external;
}
// File: contracts/traderjoe/interfaces/IJoeRouter01.sol

pragma solidity >=0.6.2;

interface IJoeRouter01 {
    function factory() external pure returns (address);

    function WAVAX() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityAVAX(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountAVAXMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountAVAX,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityAVAX(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountAVAXMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountAVAX);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityAVAXWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountAVAXMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountAVAX);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactAVAXForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactAVAX(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForAVAX(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapAVAXForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

// File: contracts/traderjoe/interfaces/IJoeRouter02.sol

pragma solidity >=0.6.2;

interface IJoeRouter02 is IJoeRouter01 {
    function removeLiquidityAVAXSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountAVAXMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountAVAX);

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

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

    function swapExactAVAXForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForAVAXSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

// File: contracts/traderjoe/interfaces/IJoeFactory.sol

pragma solidity >=0.5.0;

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

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

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

// File: contracts/traderjoe/interfaces/IWAVAX.sol

pragma solidity >=0.5.0;

interface IWAVAX {
    function deposit() external payable;

    function transfer(address to, uint256 value) external returns (bool);

    function withdraw(uint256) external;
}

// File: contracts/traderjoe/JoeRouter02.sol

pragma solidity =0.6.12;

contract JoeRouter02 is IJoeRouter02 {
    using SafeMathJoe for uint256;

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

    modifier ensure(uint256 deadline) {
        require(deadline >= block.timestamp, "JoeRouter: 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,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin
    ) internal virtual returns (uint256 amountA, uint256 amountB) {
        // create the pair if it doesn't exist yet
        if (IJoeFactory(factory).getPair(tokenA, tokenB) == address(0)) {
            IJoeFactory(factory).createPair(tokenA, tokenB);
        }
        (uint256 reserveA, uint256 reserveB) = JoeLibrary.getReserves(
            factory,
            tokenA,
            tokenB
        );
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint256 amountBOptimal = JoeLibrary.quote(
                amountADesired,
                reserveA,
                reserveB
            );
            if (amountBOptimal <= amountBDesired) {
                require(
                    amountBOptimal >= amountBMin,
                    "JoeRouter: INSUFFICIENT_B_AMOUNT"
                );
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint256 amountAOptimal = JoeLibrary.quote(
                    amountBDesired,
                    reserveB,
                    reserveA
                );
                assert(amountAOptimal <= amountADesired);
                require(
                    amountAOptimal >= amountAMin,
                    "JoeRouter: INSUFFICIENT_A_AMOUNT"
                );
                (amountA, amountB) = (amountAOptimal, amountBDesired);
            }
        }
    }

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        virtual
        override
        ensure(deadline)
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        )
    {
        (amountA, amountB) = _addLiquidity(
            tokenA,
            tokenB,
            amountADesired,
            amountBDesired,
            amountAMin,
            amountBMin
        );
        address pair = JoeLibrary.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IJoePair(pair).mint(to);
    }

    function addLiquidityAVAX(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountAVAXMin,
        address to,
        uint256 deadline
    )
        external
        payable
        virtual
        override
        ensure(deadline)
        returns (
            uint256 amountToken,
            uint256 amountAVAX,
            uint256 liquidity
        )
    {
        (amountToken, amountAVAX) = _addLiquidity(
            token,
            WAVAX,
            amountTokenDesired,
            msg.value,
            amountTokenMin,
            amountAVAXMin
        );
        address pair = JoeLibrary.pairFor(factory, token, WAVAX);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWAVAX(WAVAX).deposit{value: amountAVAX}();
        assert(IWAVAX(WAVAX).transfer(pair, amountAVAX));
        liquidity = IJoePair(pair).mint(to);
        // refund dust eth, if any
        if (msg.value > amountAVAX)
            TransferHelper.safeTransferAVAX(msg.sender, msg.value - amountAVAX);
    }

    // **** REMOVE LIQUIDITY ****
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        public
        virtual
        override
        ensure(deadline)
        returns (uint256 amountA, uint256 amountB)
    {
        address pair = JoeLibrary.pairFor(factory, tokenA, tokenB);
        IJoePair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint256 amount0, uint256 amount1) = IJoePair(pair).burn(to);
        (address token0, ) = JoeLibrary.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0
            ? (amount0, amount1)
            : (amount1, amount0);
        require(amountA >= amountAMin, "JoeRouter: INSUFFICIENT_A_AMOUNT");
        require(amountB >= amountBMin, "JoeRouter: INSUFFICIENT_B_AMOUNT");
    }

    function removeLiquidityAVAX(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountAVAXMin,
        address to,
        uint256 deadline
    )
        public
        virtual
        override
        ensure(deadline)
        returns (uint256 amountToken, uint256 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,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external virtual override returns (uint256 amountA, uint256 amountB) {
        address pair = JoeLibrary.pairFor(factory, tokenA, tokenB);
        uint256 value = approveMax ? uint256(-1) : liquidity;
        IJoePair(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,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountAVAXMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    )
        external
        virtual
        override
        returns (uint256 amountToken, uint256 amountAVAX)
    {
        address pair = JoeLibrary.pairFor(factory, token, WAVAX);
        uint256 value = approveMax ? uint256(-1) : liquidity;
        IJoePair(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,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountAVAXMin,
        address to,
        uint256 deadline
    ) public virtual override ensure(deadline) returns (uint256 amountAVAX) {
        (, amountAVAX) = removeLiquidity(
            token,
            WAVAX,
            liquidity,
            amountTokenMin,
            amountAVAXMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(
            token,
            to,
            IERC20Joe(token).balanceOf(address(this))
        );
        IWAVAX(WAVAX).withdraw(amountAVAX);
        TransferHelper.safeTransferAVAX(to, amountAVAX);
    }

    function removeLiquidityAVAXWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountAVAXMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external virtual override returns (uint256 amountAVAX) {
        address pair = JoeLibrary.pairFor(factory, token, WAVAX);
        uint256 value = approveMax ? uint256(-1) : liquidity;
        IJoePair(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(
        uint256[] memory amounts,
        address[] memory path,
        address _to
    ) internal virtual {
        for (uint256 i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0, ) = JoeLibrary.sortTokens(input, output);
            uint256 amountOut = amounts[i + 1];
            (uint256 amount0Out, uint256 amount1Out) = input == token0
                ? (uint256(0), amountOut)
                : (amountOut, uint256(0));
            address to = i < path.length - 2
                ? JoeLibrary.pairFor(factory, output, path[i + 2])
                : _to;
            IJoePair(JoeLibrary.pairFor(factory, input, output)).swap(
                amount0Out,
                amount1Out,
                to,
                new bytes(0)
            );
        }
    }

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    )
        external
        virtual
        override
        ensure(deadline)
        returns (uint256[] memory amounts)
    {
        amounts = JoeLibrary.getAmountsOut(factory, amountIn, path);
        require(
            amounts[amounts.length - 1] >= amountOutMin,
            "JoeRouter: INSUFFICIENT_OUTPUT_AMOUNT"
        );
        TransferHelper.safeTransferFrom(
            path[0],
            msg.sender,
            JoeLibrary.pairFor(factory, path[0], path[1]),
            amounts[0]
        );
        _swap(amounts, path, to);
    }

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    )
        external
        virtual
        override
        ensure(deadline)
        returns (uint256[] memory amounts)
    {
        amounts = JoeLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, "JoeRouter: EXCESSIVE_INPUT_AMOUNT");
        TransferHelper.safeTransferFrom(
            path[0],
            msg.sender,
            JoeLibrary.pairFor(factory, path[0], path[1]),
            amounts[0]
        );
        _swap(amounts, path, to);
    }

    function swapExactAVAXForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    )
        external
        payable
        virtual
        override
        ensure(deadline)
        returns (uint256[] memory amounts)
    {
        require(path[0] == WAVAX, "JoeRouter: INVALID_PATH");
        amounts = JoeLibrary.getAmountsOut(factory, msg.value, path);
        require(
            amounts[amounts.length - 1] >= amountOutMin,
            "JoeRouter: INSUFFICIENT_OUTPUT_AMOUNT"
        );
        IWAVAX(WAVAX).deposit{value: amounts[0]}();
        assert(
            IWAVAX(WAVAX).transfer(
                JoeLibrary.pairFor(factory, path[0], path[1]),
                amounts[0]
            )
        );
        _swap(amounts, path, to);
    }

    function swapTokensForExactAVAX(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    )
        external
        virtual
        override
        ensure(deadline)
        returns (uint256[] memory amounts)
    {
        require(path[path.length - 1] == WAVAX, "JoeRouter: INVALID_PATH");
        amounts = JoeLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, "JoeRouter: EXCESSIVE_INPUT_AMOUNT");
        TransferHelper.safeTransferFrom(
            path[0],
            msg.sender,
            JoeLibrary.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(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    )
        external
        virtual
        override
        ensure(deadline)
        returns (uint256[] memory amounts)
    {
        require(path[path.length - 1] == WAVAX, "JoeRouter: INVALID_PATH");
        amounts = JoeLibrary.getAmountsOut(factory, amountIn, path);
        require(
            amounts[amounts.length - 1] >= amountOutMin,
            "JoeRouter: INSUFFICIENT_OUTPUT_AMOUNT"
        );
        TransferHelper.safeTransferFrom(
            path[0],
            msg.sender,
            JoeLibrary.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(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    )
        external
        payable
        virtual
        override
        ensure(deadline)
        returns (uint256[] memory amounts)
    {
        require(path[0] == WAVAX, "JoeRouter: INVALID_PATH");
        amounts = JoeLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, "JoeRouter: EXCESSIVE_INPUT_AMOUNT");
        IWAVAX(WAVAX).deposit{value: amounts[0]}();
        assert(
            IWAVAX(WAVAX).transfer(
                JoeLibrary.pairFor(factory, path[0], path[1]),
                amounts[0]
            )
        );
        _swap(amounts, path, to);
        // refund dust eth, 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 (uint256 i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0, ) = JoeLibrary.sortTokens(input, output);
            IJoePair pair = IJoePair(
                JoeLibrary.pairFor(factory, input, output)
            );
            uint256 amountInput;
            uint256 amountOutput;
            {
                // scope to avoid stack too deep errors
                (uint256 reserve0, uint256 reserve1, ) = pair.getReserves();
                (uint256 reserveInput, uint256 reserveOutput) = input == token0
                    ? (reserve0, reserve1)
                    : (reserve1, reserve0);
                amountInput = IERC20Joe(input).balanceOf(address(pair)).sub(
                    reserveInput
                );
                amountOutput = JoeLibrary.getAmountOut(
                    amountInput,
                    reserveInput,
                    reserveOutput
                );
            }
            (uint256 amount0Out, uint256 amount1Out) = input == token0
                ? (uint256(0), amountOutput)
                : (amountOutput, uint256(0));
            address to = i < path.length - 2
                ? JoeLibrary.pairFor(factory, output, path[i + 2])
                : _to;
            pair.swap(amount0Out, amount1Out, to, new bytes(0));
        }
    }

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external virtual override ensure(deadline) {
        TransferHelper.safeTransferFrom(
            path[0],
            msg.sender,
            JoeLibrary.pairFor(factory, path[0], path[1]),
            amountIn
        );
        uint256 balanceBefore = IERC20Joe(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20Joe(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >=
                amountOutMin,
            "JoeRouter: INSUFFICIENT_OUTPUT_AMOUNT"
        );
    }

    function swapExactAVAXForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable virtual override ensure(deadline) {
        require(path[0] == WAVAX, "JoeRouter: INVALID_PATH");
        uint256 amountIn = msg.value;
        IWAVAX(WAVAX).deposit{value: amountIn}();
        assert(
            IWAVAX(WAVAX).transfer(
                JoeLibrary.pairFor(factory, path[0], path[1]),
                amountIn
            )
        );
        uint256 balanceBefore = IERC20Joe(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20Joe(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >=
                amountOutMin,
            "JoeRouter: INSUFFICIENT_OUTPUT_AMOUNT"
        );
    }

    function swapExactTokensForAVAXSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external virtual override ensure(deadline) {
        require(path[path.length - 1] == WAVAX, "JoeRouter: INVALID_PATH");
        TransferHelper.safeTransferFrom(
            path[0],
            msg.sender,
            JoeLibrary.pairFor(factory, path[0], path[1]),
            amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint256 amountOut = IERC20Joe(WAVAX).balanceOf(address(this));
        require(
            amountOut >= amountOutMin,
            "JoeRouter: INSUFFICIENT_OUTPUT_AMOUNT"
        );
        IWAVAX(WAVAX).withdraw(amountOut);
        TransferHelper.safeTransferAVAX(to, amountOut);
    }

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

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

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

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

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

60c060405234801561001057600080fd5b50604051620046ae380380620046ae8339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c614529620001856000398061015f5280610e085280610f3d5280610f7852806114bb528061164b5280611701528061176f528061182352806118f752806119d25280611aac5280611b825280611e0c5280611f4f5280611fd75280612171528061229d52806123e3528061246b528061287c528061291152806129855280612d565280612dac5280612de05280612e54525080610cb35280610cec5280610de65280611055528061112c528061125852806115495280611c105280611d165280611e9f5280612009528061214f5280612330528061249d52806125f0528061281452806129b75280612bae5280612c375280612d8a528061381a528061385d52806139ff5280613b755280613f92528061404b52806140fe52506145296000f3fe60806040526004361061014f5760003560e01c806385f8c259116100b6578063baa2abde1161006f578063baa2abde14610a26578063c45a015514610a83578063c57559dd14610a98578063d06ca61f14610b1c578063e8e3370014610bd1578063f91b3f7214610c5157610188565b806385f8c259146107a95780638803dbee146107df5780638a657e67146108755780639fc27226146108f9578063a2a1623d1461096c578063ad615dec146109f057610188565b80635c11d795116101085780635c11d795146104cd578063676528d11461056357806373b295c2146105f957806373bc79cf1461062a578063762b15621461067d5780637a42416a1461071357610188565b8063054d50d41461018d5780631f00ca74146101d55780632195995c146102da5780632c4070241461037157806333c6b725146103e457806338ed17391461043757610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101c3600480360360608110156101b057600080fd5b5080359060208101359060400135610c97565b60408051918252519081900360200190f35b3480156101e157600080fd5b5061028a600480360360408110156101f857600080fd5b81359190810190604081016020820135600160201b81111561021957600080fd5b82018360208201111561022b57600080fd5b803590602001918460208302840111600160201b8311171561024c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610cac945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102c65781810151838201526020016102ae565b505050509050019250505060405180910390f35b3480156102e657600080fd5b5061035860048036036101608110156102fe57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135610ce2565b6040805192835260208301919091528051918290030190f35b34801561037d57600080fd5b50610358600480360361014081101561039557600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135610ddc565b3480156103f057600080fd5b50610358600480360360c081101561040757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610ef0565b34801561044357600080fd5b5061028a600480360360a081101561045a57600080fd5b813591602081013591810190606081016040820135600160201b81111561048057600080fd5b82018360208201111561049257600080fd5b803590602001918460208302840111600160201b831117156104b357600080fd5b91935091506001600160a01b03813516906020013561100a565b3480156104d957600080fd5b50610186600480360360a08110156104f057600080fd5b813591602081013591810190606081016040820135600160201b81111561051657600080fd5b82018360208201111561052857600080fd5b803590602001918460208302840111600160201b8311171561054957600080fd5b91935091506001600160a01b0381351690602001356111ee565b34801561056f57600080fd5b5061028a600480360360a081101561058657600080fd5b813591602081013591810190606081016040820135600160201b8111156105ac57600080fd5b8201836020820111156105be57600080fd5b803590602001918460208302840111600160201b831117156105df57600080fd5b91935091506001600160a01b03813516906020013561146b565b34801561060557600080fd5b5061060e6116ff565b604080516001600160a01b039092168252519081900360200190f35b34801561063657600080fd5b506101c3600480360360c081101561064d57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611723565b34801561068957600080fd5b50610186600480360360a08110156106a057600080fd5b813591602081013591810190606081016040820135600160201b8111156106c657600080fd5b8201836020820111156106d857600080fd5b803590602001918460208302840111600160201b831117156106f957600080fd5b91935091506001600160a01b0381351690602001356118a9565b34801561071f57600080fd5b5061028a600480360360a081101561073657600080fd5b813591602081013591810190606081016040820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b32565b3480156107b557600080fd5b506101c3600480360360608110156107cc57600080fd5b5080359060208101359060400135611cbe565b3480156107eb57600080fd5b5061028a600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611ccb565b61028a6004803603608081101561088b57600080fd5b81359190810190604081016020820135600160201b8111156108ac57600080fd5b8201836020820111156108be57600080fd5b803590602001918460208302840111600160201b831117156108df57600080fd5b91935091506001600160a01b038135169060200135611dc4565b34801561090557600080fd5b506101c3600480360361014081101561091d57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612147565b61028a6004803603608081101561098257600080fd5b81359190810190604081016020820135600160201b8111156109a357600080fd5b8201836020820111156109b557600080fd5b803590602001918460208302840111600160201b831117156109d657600080fd5b91935091506001600160a01b038135169060200135612255565b3480156109fc57600080fd5b506101c360048036036060811015610a1357600080fd5b5080359060208101359060400135612595565b348015610a3257600080fd5b50610358600480360360e0811015610a4957600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356125a2565b348015610a8f57600080fd5b5061060e612812565b61018660048036036080811015610aae57600080fd5b81359190810190604081016020820135600160201b811115610acf57600080fd5b820183602082011115610ae157600080fd5b803590602001918460208302840111600160201b83111715610b0257600080fd5b91935091506001600160a01b038135169060200135612836565b348015610b2857600080fd5b5061028a60048036036040811015610b3f57600080fd5b81359190810190604081016020820135600160201b811115610b6057600080fd5b820183602082011115610b7257600080fd5b803590602001918460208302840111600160201b83111715610b9357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612ba7945050505050565b348015610bdd57600080fd5b50610c336004803603610100811015610bf557600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612bd4565b60408051938452602084019290925282820152519081900360600190f35b610c33600480360360c0811015610c6757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612d07565b6000610ca4848484612f9a565b949350505050565b6060610cd97f00000000000000000000000000000000000000000000000000000000000000008484613072565b90505b92915050565b6000806000610d127f00000000000000000000000000000000000000000000000000000000000000008f8f6131ba565b9050600087610d21578c610d25565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015610d9b57600080fd5b505af1158015610daf573d6000803e3d6000fd5b50505050610dc28f8f8f8f8f8f8f6125a2565b809450819550505050509b509b9950505050505050505050565b6000806000610e2c7f00000000000000000000000000000000000000000000000000000000000000008e7f00000000000000000000000000000000000000000000000000000000000000006131ba565b9050600087610e3b578c610e3f565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015610eb557600080fd5b505af1158015610ec9573d6000803e3d6000fd5b50505050610edb8e8e8e8e8e8e610ef0565b909f909e509c50505050505050505050505050565b6000808242811015610f37576040805162461bcd60e51b81526020600482015260126024820152600080516020614490833981519152604482015290519081900360640190fd5b610f66897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6125a2565b9093509150610f7689868561327a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610fdc57600080fd5b505af1158015610ff0573d6000803e3d6000fd5b50505050610ffe85836133e4565b50965096945050505050565b60608142811015611050576040805162461bcd60e51b81526020600482015260126024820152600080516020614490833981519152604482015290519081900360640190fd5b6110ae7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506134dc92505050565b915086826001845103815181106110c157fe5b602002602001015110156111065760405162461bcd60e51b815260040180806020018281038252602581526020018061446b6025913960400191505060405180910390fd5b6111a48686600081811061111657fe5b905060200201356001600160a01b03163361118a7f00000000000000000000000000000000000000000000000000000000000000008a8a600081811061115857fe5b905060200201356001600160a01b03168b8b600181811061117557fe5b905060200201356001600160a01b03166131ba565b8560008151811061119757fe5b602002602001015161360e565b6111e38287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061376b915050565b509695505050505050565b8042811015611232576040805162461bcd60e51b81526020600482015260126024820152600080516020614490833981519152604482015290519081900360640190fd5b6112a78585600081811061124257fe5b905060200201356001600160a01b0316336112a17f00000000000000000000000000000000000000000000000000000000000000008989600081811061128457fe5b905060200201356001600160a01b03168a8a600181811061117557fe5b8a61360e565b6000858560001981018181106112b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561131557600080fd5b505afa158015611329573d6000803e3d6000fd5b505050506040513d602081101561133f57600080fd5b505160408051602088810282810182019093528882529293506113819290918991899182918501908490808284376000920191909152508892506139a8915050565b86611424828888600019810181811061139657fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156113f257600080fd5b505afa158015611406573d6000803e3d6000fd5b505050506040513d602081101561141c57600080fd5b505190613caa565b10156114615760405162461bcd60e51b815260040180806020018281038252602581526020018061446b6025913960400191505060405180910390fd5b5050505050505050565b606081428110156114b1576040805162461bcd60e51b81526020600482015260126024820152600080516020614490833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106114eb57fe5b905060200201356001600160a01b03166001600160a01b031614611544576040805162461bcd60e51b815260206004820152601760248201526000805160206144b0833981519152604482015290519081900360640190fd5b6115a27f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506134dc92505050565b915086826001845103815181106115b557fe5b602002602001015110156115fa5760405162461bcd60e51b815260040180806020018281038252602581526020018061446b6025913960400191505060405180910390fd5b61160a8686600081811061111657fe5b6116498287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061376b915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061168857fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156116c657600080fd5b505af11580156116da573d6000803e3d6000fd5b505050506111e384836001855103815181106116f257fe5b60200260200101516133e4565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008142811015611769576040805162461bcd60e51b81526020600482015260126024820152600080516020614490833981519152604482015290519081900360640190fd5b611798887f000000000000000000000000000000000000000000000000000000000000000089898930896125a2565b90508092505061182188858a6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156117f057600080fd5b505afa158015611804573d6000803e3d6000fd5b505050506040513d602081101561181a57600080fd5b505161327a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561188757600080fd5b505af115801561189b573d6000803e3d6000fd5b505050506111e384836133e4565b80428110156118ed576040805162461bcd60e51b81526020600482015260126024820152600080516020614490833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061192757fe5b905060200201356001600160a01b03166001600160a01b031614611980576040805162461bcd60e51b815260206004820152601760248201526000805160206144b0833981519152604482015290519081900360640190fd5b6119908585600081811061124257fe5b6119ce8585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506139a8915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611a3d57600080fd5b505afa158015611a51573d6000803e3d6000fd5b505050506040513d6020811015611a6757600080fd5b5051905086811015611aaa5760405162461bcd60e51b815260040180806020018281038252602581526020018061446b6025913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611b1057600080fd5b505af1158015611b24573d6000803e3d6000fd5b5050505061146184826133e4565b60608142811015611b78576040805162461bcd60e51b81526020600482015260126024820152600080516020614490833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110611bb257fe5b905060200201356001600160a01b03166001600160a01b031614611c0b576040805162461bcd60e51b815260206004820152601760248201526000805160206144b0833981519152604482015290519081900360640190fd5b611c697f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061307292505050565b91508682600081518110611c7957fe5b602002602001015111156115fa5760405162461bcd60e51b81526004018080602001828103825260218152602001806143ff6021913960400191505060405180910390fd5b6000610ca4848484613cfa565b60608142811015611d11576040805162461bcd60e51b81526020600482015260126024820152600080516020614490833981519152604482015290519081900360640190fd5b611d6f7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061307292505050565b91508682600081518110611d7f57fe5b602002602001015111156111065760405162461bcd60e51b81526004018080602001828103825260218152602001806143ff6021913960400191505060405180910390fd5b60608142811015611e0a576040805162461bcd60e51b81526020600482015260126024820152600080516020614490833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611e4157fe5b905060200201356001600160a01b03166001600160a01b031614611e9a576040805162461bcd60e51b815260206004820152601760248201526000805160206144b0833981519152604482015290519081900360640190fd5b611ef87f00000000000000000000000000000000000000000000000000000000000000008888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061307292505050565b91503482600081518110611f0857fe5b60200260200101511115611f4d5760405162461bcd60e51b81526004018080602001828103825260218152602001806143ff6021913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611f8957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611fbc57600080fd5b505af1158015611fd0573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6120357f00000000000000000000000000000000000000000000000000000000000000008989600081811061128457fe5b8460008151811061204257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561209057600080fd5b505af11580156120a4573d6000803e3d6000fd5b505050506040513d60208110156120ba57600080fd5b50516120c257fe5b6121018287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061376b915050565b8160008151811061210e57fe5b602002602001015134111561213d5761213d338360008151811061212e57fe5b602002602001015134036133e4565b5095945050505050565b6000806121957f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006131ba565b90506000866121a4578b6121a8565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561221e57600080fd5b505af1158015612232573d6000803e3d6000fd5b505050506122448d8d8d8d8d8d611723565b9d9c50505050505050505050505050565b6060814281101561229b576040805162461bcd60e51b81526020600482015260126024820152600080516020614490833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316868660008181106122d257fe5b905060200201356001600160a01b03166001600160a01b03161461232b576040805162461bcd60e51b815260206004820152601760248201526000805160206144b0833981519152604482015290519081900360640190fd5b6123897f0000000000000000000000000000000000000000000000000000000000000000348888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506134dc92505050565b9150868260018451038151811061239c57fe5b602002602001015110156123e15760405162461bcd60e51b815260040180806020018281038252602581526020018061446b6025913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db08360008151811061241d57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561245057600080fd5b505af1158015612464573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6124c97f00000000000000000000000000000000000000000000000000000000000000008989600081811061128457fe5b846000815181106124d657fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561252457600080fd5b505af1158015612538573d6000803e3d6000fd5b505050506040513d602081101561254e57600080fd5b505161255657fe5b61213d8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061376b915050565b6000610ca4848484613dd2565b60008082428110156125e9576040805162461bcd60e51b81526020600482015260126024820152600080516020614490833981519152604482015290519081900360640190fd5b60006126167f00000000000000000000000000000000000000000000000000000000000000008c8c6131ba565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561267157600080fd5b505af1158015612685573d6000803e3d6000fd5b505050506040513d602081101561269b57600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156126e857600080fd5b505af11580156126fc573d6000803e3d6000fd5b505050506040513d604081101561271257600080fd5b5080516020909101519092509050600061272c8e8e613e8e565b509050806001600160a01b03168e6001600160a01b03161461274f578183612752565b82825b90975095508a8710156127ac576040805162461bcd60e51b815260206004820181905260248201527f4a6f65526f757465723a20494e53554646494349454e545f415f414d4f554e54604482015290519081900360640190fd5b89861015612801576040805162461bcd60e51b815260206004820181905260248201527f4a6f65526f757465723a20494e53554646494349454e545f425f414d4f554e54604482015290519081900360640190fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b804281101561287a576040805162461bcd60e51b81526020600482015260126024820152600080516020614490833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106128b157fe5b905060200201356001600160a01b03166001600160a01b03161461290a576040805162461bcd60e51b815260206004820152601760248201526000805160206144b0833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561296a57600080fd5b505af115801561297e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6129e37f00000000000000000000000000000000000000000000000000000000000000008989600081811061128457fe5b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612a2a57600080fd5b505af1158015612a3e573d6000803e3d6000fd5b505050506040513d6020811015612a5457600080fd5b5051612a5c57fe5b600086866000198101818110612a6e57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612aca57600080fd5b505afa158015612ade573d6000803e3d6000fd5b505050506040513d6020811015612af457600080fd5b50516040805160208981028281018201909352898252929350612b369290918a918a9182918501908490808284376000920191909152508992506139a8915050565b876114248289896000198101818110612b4b57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156113f257600080fd5b6060610cd97f000000000000000000000000000000000000000000000000000000000000000084846134dc565b60008060008342811015612c1d576040805162461bcd60e51b81526020600482015260126024820152600080516020614490833981519152604482015290519081900360640190fd5b612c2b8c8c8c8c8c8c613f82565b90945092506000612c5d7f00000000000000000000000000000000000000000000000000000000000000008e8e6131ba565b9050612c6b8d33838861360e565b612c778c33838761360e565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b158015612cc657600080fd5b505af1158015612cda573d6000803e3d6000fd5b505050506040513d6020811015612cf057600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015612d50576040805162461bcd60e51b81526020600482015260126024820152600080516020614490833981519152604482015290519081900360640190fd5b612d7e8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613f82565b90945092506000612dd07f00000000000000000000000000000000000000000000000000000000000000008c7f00000000000000000000000000000000000000000000000000000000000000006131ba565b9050612dde8b33838861360e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e3957600080fd5b505af1158015612e4d573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612ec957600080fd5b505af1158015612edd573d6000803e3d6000fd5b505050506040513d6020811015612ef357600080fd5b5051612efb57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b158015612f4a57600080fd5b505af1158015612f5e573d6000803e3d6000fd5b505050506040513d6020811015612f7457600080fd5b5051925034841015612f8c57612f8c338534036133e4565b505096509650969350505050565b6000808411612fda5760405162461bcd60e51b81526004018080602001828103825260258152602001806144466025913960400191505060405180910390fd5b600083118015612fea5750600082115b6130255760405162461bcd60e51b81526004018080602001828103825260228152602001806143b96022913960400191505060405180910390fd5b6000613033856103e561423f565b90506000613041828561423f565b9050600061305b83613055886103e861423f565b906142a2565b905080828161306657fe5b04979650505050505050565b60606002825110156130c6576040805162461bcd60e51b8152602060048201526018602482015277094deca98d2c4e4c2e4f27440929cac82989288bea082a8960431b604482015290519081900360640190fd5b815167ffffffffffffffff811180156130de57600080fd5b50604051908082528060200260200182016040528015613108578160200160208202803683370190505b509050828160018351038151811061311c57fe5b60209081029190910101528151600019015b80156131b25760008061316b8786600186038151811061314a57fe5b602002602001015187868151811061315e57fe5b60200260200101516142f1565b9150915061318d84848151811061317e57fe5b60200260200101518383613cfa565b84600185038151811061319c57fe5b602090810291909101015250506000190161312e565b509392505050565b60008060006131c98585613e8e565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f0bbca9af0511ad1a1da383135cf3a8d2ac620e549ef9f6ae3a4c33c2fed0af91609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106132f75780518252601f1990920191602091820191016132d8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613359576040519150601f19603f3d011682016040523d82523d6000602084013e61335e565b606091505b509150915081801561338c57508051158061338c575080806020019051602081101561338957600080fd5b50515b6133dd576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106134305780518252601f199092019160209182019101613411565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613492576040519150601f19603f3d011682016040523d82523d6000602084013e613497565b606091505b50509050806134d75760405162461bcd60e51b81526004018080602001828103825260248152602001806143db6024913960400191505060405180910390fd5b505050565b6060600282511015613530576040805162461bcd60e51b8152602060048201526018602482015277094deca98d2c4e4c2e4f27440929cac82989288bea082a8960431b604482015290519081900360640190fd5b815167ffffffffffffffff8111801561354857600080fd5b50604051908082528060200260200182016040528015613572578160200160208202803683370190505b509050828160008151811061358357fe5b60200260200101818152505060005b60018351038110156131b2576000806135c8878685815181106135b157fe5b602002602001015187866001018151811061315e57fe5b915091506135ea8484815181106135db57fe5b60200260200101518383612f9a565b8484600101815181106135f957fe5b60209081029190910101525050600101613592565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106136935780518252601f199092019160209182019101613674565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146136f5576040519150601f19603f3d011682016040523d82523d6000602084013e6136fa565b606091505b5091509150818015613728575080511580613728575080806020019051602081101561372557600080fd5b50515b6137635760405162461bcd60e51b81526004018080602001828103825260248152602001806144d06024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156139a25760008084838151811061378957fe5b60200260200101518584600101815181106137a057fe5b60200260200101519150915060006137b88383613e8e565b50905060008785600101815181106137cc57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146137fa578260006137fe565b6000835b91509150600060028a510388106138155788613856565b6138567f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061384957fe5b60200260200101516131ba565b90506138837f000000000000000000000000000000000000000000000000000000000000000088886131ba565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156138c0576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613928578181015183820152602001613910565b50505050905090810190601f1680156139555780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561397757600080fd5b505af115801561398b573d6000803e3d6000fd5b50506001909901985061376e975050505050505050565b50505050565b60005b60018351038110156134d7576000808483815181106139c657fe5b60200260200101518584600101815181106139dd57fe5b60200260200101519150915060006139f58383613e8e565b5090506000613a257f000000000000000000000000000000000000000000000000000000000000000085856131ba565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613a6657600080fd5b505afa158015613a7a573d6000803e3d6000fd5b505050506040513d6060811015613a9057600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613ac6578284613ac9565b83835b91509150613b1e828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156113f257600080fd5b9550613b2b868383612f9a565b945050505050600080856001600160a01b0316886001600160a01b031614613b5557826000613b59565b6000835b91509150600060028c51038a10613b70578a613ba4565b613ba47f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061384957fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c2e578181015183820152602001613c16565b50505050905090810190601f168015613c5b5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613c7d57600080fd5b505af1158015613c91573d6000803e3d6000fd5b50506001909b019a506139ab9950505050505050505050565b80820382811115610cdc576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613d3a5760405162461bcd60e51b81526004018080602001828103825260268152602001806144206026913960400191505060405180910390fd5b600083118015613d4a5750600082115b613d855760405162461bcd60e51b81526004018080602001828103825260228152602001806143b96022913960400191505060405180910390fd5b6000613d9d6103e8613d97868861423f565b9061423f565b90506000613db16103e5613d978689613caa565b9050613dc86001828481613dc157fe5b04906142a2565b9695505050505050565b6000808411613e28576040805162461bcd60e51b815260206004820152601f60248201527f4a6f654c6962726172793a20494e53554646494349454e545f414d4f554e5400604482015290519081900360640190fd5b600083118015613e385750600082115b613e735760405162461bcd60e51b81526004018080602001828103825260228152602001806143b96022913960400191505060405180910390fd5b82613e7e858461423f565b81613e8557fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613ef8576040805162461bcd60e51b815260206004820152601f60248201527f4a6f654c6962726172793a204944454e544943414c5f41444452455353455300604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b031610613f18578284613f1b565b83835b90925090506001600160a01b038216613f7b576040805162461bcd60e51b815260206004820152601860248201527f4a6f654c6962726172793a205a45524f5f414444524553530000000000000000604482015290519081900360640190fd5b9250929050565b60008060006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e6a439058a8a6040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b15801561400e57600080fd5b505afa158015614022573d6000803e3d6000fd5b505050506040513d602081101561403857600080fd5b50516001600160a01b031614156140f6577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c9c6539689896040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050602060405180830381600087803b1580156140c957600080fd5b505af11580156140dd573d6000803e3d6000fd5b505050506040513d60208110156140f357600080fd5b50505b6000806141247f00000000000000000000000000000000000000000000000000000000000000008b8b6142f1565b91509150816000148015614136575080155b1561414657879350869250614232565b6000614153898484613dd2565b90508781116141bc57858110156141b1576040805162461bcd60e51b815260206004820181905260248201527f4a6f65526f757465723a20494e53554646494349454e545f425f414d4f554e54604482015290519081900360640190fd5b889450925082614230565b60006141c9898486613dd2565b9050898111156141d557fe5b8781101561422a576040805162461bcd60e51b815260206004820181905260248201527f4a6f65526f757465723a20494e53554646494349454e545f415f414d4f554e54604482015290519081900360640190fd5b94508793505b505b5050965096945050505050565b600081158061425a5750508082028282828161425757fe5b04145b610cdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015610cdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006143008585613e8e565b5090506000806143118888886131ba565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561434957600080fd5b505afa15801561435d573d6000803e3d6000fd5b505050506040513d606081101561437357600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146143a65780826143a9565b81815b9099909850965050505050505056fe4a6f654c6962726172793a20494e53554646494349454e545f4c49515549444954595472616e7366657248656c7065723a20415641585f5452414e534645525f4641494c45444a6f65526f757465723a204558434553534956455f494e5055545f414d4f554e544a6f654c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e544a6f654c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e544a6f65526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e544a6f65526f757465723a204558504952454400000000000000000000000000004a6f65526f757465723a20494e56414c49445f504154480000000000000000005472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a26469706673582212203f3d67ce47da7aa25e492a7e03f86ea9251e9c9dc8ef6d26b44b2744d200957164736f6c634300060c00330000000000000000000000009ad6c38be94206ca50bb0d90783181662f0cfa10000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c7

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

0000000000000000000000009ad6c38be94206ca50bb0d90783181662f0cfa10000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c7

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

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


Deployed ByteCode Sourcemap

18948:21501:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19425:10;-1:-1:-1;;;;;19439:5:0;19425:19;;19418:27;;;;18948:21501;;;;;39413:252;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39413:252:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;40193:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;40193:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;40193:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40193:253:0;;-1:-1:-1;40193:253:0;;-1:-1:-1;;;;;40193:253:0:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25065:920;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25065:920:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;25993:947;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25993:947:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24305:752::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24305:752:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29739:748::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29739:748:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29739:748:0;;;;;;;;;;;;-1:-1:-1;29739:748:0;-1:-1:-1;;;;;;29739:748:0;;;;;;;;:::i;36564:776::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36564:776:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36564:776:0;;;;;;;;;;;;-1:-1:-1;36564:776:0;-1:-1:-1;;;;;;36564:776:0;;;;;;;;:::i;32961:971::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32961:971:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32961:971:0;;;;;;;;;;;;-1:-1:-1;32961:971:0;-1:-1:-1;;;;;;32961:971:0;;;;;;;;:::i;19078:39::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;19078:39:0;;;;;;;;;;;;;;27019:779;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27019:779:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;38252:881::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38252:881:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38252:881:0;;;;;;;;;;;;-1:-1:-1;38252:881:0;-1:-1:-1;;;;;;38252:881:0;;;;;;;;:::i;32041:912::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32041:912:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32041:912:0;;;;;;;;;;;;-1:-1:-1;32041:912:0;-1:-1:-1;;;;;;32041:912:0;;;;;;;;:::i;39673:251::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39673:251:0;;;;;;;;;;;;:::i;30495:689::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30495:689:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30495:689:0;;;;;;;;;;;;-1:-1:-1;30495:689:0;-1:-1:-1;;;;;;30495:689:0;;;;;;;;:::i;33940:931::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;33940:931:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;33940:931:0;;;;;;;;;;;;-1:-1:-1;33940:931:0;-1:-1:-1;;;;;;33940:931:0;;;;;;;;:::i;27806:928::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27806:928:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31192:841::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31192:841:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31192:841:0;;;;;;;;;;;;-1:-1:-1;31192:841:0;-1:-1:-1;;;;;;31192:841:0;;;;;;;;:::i;39177:228::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39177:228:0;;;;;;;;;;;;:::i;23367:930::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23367:930:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19030:41::-;;;;;;;;;;;;;:::i;37348:896::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37348:896:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37348:896:0;;;;;;;;;;;;-1:-1:-1;37348:896:0;-1:-1:-1;;;;;;37348:896:0;;;;;;;;:::i;39932:253::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;39932:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;39932:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39932:253:0;;-1:-1:-1;39932:253:0;;-1:-1:-1;;;;;39932:253:0:i;21256:939::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21256:939:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;22203:1121;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22203:1121:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;39413:252::-;39564:17;39601:56;39625:8;39635:9;39646:10;39601:23;:56::i;:::-;39594:63;39413:252;-1:-1:-1;;;;39413:252:0:o;40193:253::-;40340:24;40389:49;40413:7;40422:9;40433:4;40389:23;:49::i;:::-;40382:56;;40193:253;;;;;:::o;25065:920::-;25410:15;25427;25455:12;25470:43;25489:7;25498:6;25506;25470:18;:43::i;:::-;25455:58;;25524:13;25540:10;:36;;25567:9;25540:36;;;-1:-1:-1;;25540:36:0;25587:176;;;-1:-1:-1;;;25587:176:0;;25623:10;25587:176;;;;25656:4;25587:176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25524:52;;-1:-1:-1;;;;;;25587:21:0;;;;;:176;;;;;-1:-1:-1;;25587:176:0;;;;;;;;-1:-1:-1;25587:21:0;:176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25795:182;25825:6;25846;25867:9;25891:10;25916;25941:2;25958:8;25795:15;:182::i;:::-;25774:203;;;;;;;;25065:920;;;;;;;;;;;;;;;;:::o;25993:947::-;26359:19;26380:18;26416:12;26431:41;26450:7;26459:5;26466;26431:18;:41::i;:::-;26416:56;;26483:13;26499:10;:36;;26526:9;26499:36;;;-1:-1:-1;;26499:36:0;26546:176;;;-1:-1:-1;;;26546:176:0;;26582:10;26546:176;;;;26615:4;26546:176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26483:52;;-1:-1:-1;;;;;;26546:21:0;;;;;:176;;;;;-1:-1:-1;;26546:176:0;;;;;;;;-1:-1:-1;26546:21:0;:176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26761:171;26795:5;26815:9;26839:14;26868:13;26896:2;26913:8;26761:19;:171::i;:::-;26733:199;;;;-1:-1:-1;25993:947:0;-1:-1:-1;;;;;;;;;;;;;25993:947:0:o;24305:752::-;24601:19;24622:18;24573:8;19191:15;19179:8;:27;;19171:58;;;;;-1:-1:-1;;;19171:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19171:58:0;;;;;;;;;;;;;;;24686:198:::1;24716:5;24736;24756:9;24780:14;24809:13;24845:4;24865:8;24686:15;:198::i;:::-;24658:226:::0;;-1:-1:-1;24658:226:0;-1:-1:-1;24895:51:0::1;24923:5:::0;24930:2;24658:226;24895:27:::1;:51::i;:::-;24964:5;-1:-1:-1::0;;;;;24957:22:0::1;;24980:10;24957:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25002:47;25034:2;25038:10;25002:31;:47::i;:::-;24305:752:::0;;;;;;;;;;:::o;29739:748::-;30017:24;29989:8;19191:15;19179:8;:27;;19171:58;;;;;-1:-1:-1;;;19171:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19171:58:0;;;;;;;;;;;;;;;30069:49:::1;30094:7;30103:8;30113:4;;30069:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;30069:24:0::1;::::0;-1:-1:-1;;;30069:49:0:i:1;:::-;30059:59;;30182:12;30151:7;30176:1;30159:7;:14;:18;30151:27;;;;;;;;;;;;;;:43;;30129:130;;;;-1:-1:-1::0;;;30129:130:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30270:174;30316:4;;30321:1;30316:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30316:7:0::1;30338:10;30363:45;30382:7;30391:4;;30396:1;30391:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30391:7:0::1;30400:4;;30405:1;30400:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30400:7:0::1;30363:18;:45::i;:::-;30423:7;30431:1;30423:10;;;;;;;;;;;;;;30270:31;:174::i;:::-;30455:24;30461:7;30470:4;;30455:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;30476:2:0;;-1:-1:-1;30455:5:0::1;::::0;-1:-1:-1;;30455:24:0:i:1;:::-;29739:748:::0;;;;;;;;;:::o;36564:776::-;36807:8;19191:15;19179:8;:27;;19171:58;;;;;-1:-1:-1;;;19171:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19171:58:0;;;;;;;;;;;;;;;36828:172:::1;36874:4;;36879:1;36874:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;36874:7:0::1;36896:10;36921:45;36940:7;36949:4;;36954:1;36949:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;36949:7:0::1;36958:4;;36963:1;36958:7;;;;;;36921:45;36981:8;36828:31;:172::i;:::-;37011:21;37045:4:::0;;-1:-1:-1;;37050:15:0;;37045:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;37045:21:0::1;-1:-1:-1::0;;;;;37035:42:0::1;;37078:2;37035:46;;;;;;;;;;;;;-1:-1:-1::0;;;;;37035:46:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;37035:46:0;37092:44:::1;::::0;;37035:46:::1;37092:44:::0;;::::1;::::0;;;;;;;;;;;37035:46;;-1:-1:-1;37092:44:0::1;::::0;;;37127:4;;;;;;37092:44;::::1;::::0;37127:4;;37092:44;37127:4;37092:44;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;37133:2:0;;-1:-1:-1;37092:34:0::1;::::0;-1:-1:-1;;37092:44:0:i:1;:::-;37255:12:::0;37169:65:::1;37220:13:::0;37179:4;;-1:-1:-1;;37184:15:0;;37179:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;37179:21:0::1;-1:-1:-1::0;;;;;37169:42:0::1;;37212:2;37169:46;;;;;;;;;;;;;-1:-1:-1::0;;;;;37169:46:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;37169:46:0;;:50:::1;:65::i;:::-;:98;;37147:185;;;;-1:-1:-1::0;;;37147:185:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19240:1;36564:776:::0;;;;;;;:::o;32961:971::-;33237:24;33209:8;19191:15;19179:8;:27;;19171:58;;;;;-1:-1:-1;;;19171:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19171:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33312:5:0::1;33287:30;:4:::0;;-1:-1:-1;;33292:15:0;;33287:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33287:21:0::1;-1:-1:-1::0;;;;;33287:30:0::1;;33279:66;;;::::0;;-1:-1:-1;;;33279:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33279:66:0;;;;;;;;;;;;;::::1;;33366:49;33391:7;33400:8;33410:4;;33366:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;33366:24:0::1;::::0;-1:-1:-1;;;33366:49:0:i:1;:::-;33356:59;;33479:12;33448:7;33473:1;33456:7;:14;:18;33448:27;;;;;;;;;;;;;;:43;;33426:130;;;;-1:-1:-1::0;;;33426:130:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33567:174;33613:4;;33618:1;33613:7;;;;;;33567:174;33752:35;33758:7;33767:4;;33752:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;33781:4:0::1;::::0;-1:-1:-1;33752:5:0::1;::::0;-1:-1:-1;;33752:35:0:i:1;:::-;33805:5;-1:-1:-1::0;;;;;33798:22:0::1;;33821:7;33846:1;33829:7;:14;:18;33821:27;;;;;;;;;;;;;;33798:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33860:64;33892:2;33896:7;33921:1;33904:7;:14;:18;33896:27;;;;;;;;;;;;;;33860:31;:64::i;19078:39::-:0;;;:::o;27019:779::-;27299:18;27280:8;19191:15;19179:8;:27;;19171:58;;;;;-1:-1:-1;;;19171:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19171:58:0;;;;;;;;;;;;;;;27347:198:::1;27377:5;27397;27417:9;27441:14;27470:13;27506:4;27526:8;27347:15;:198::i;:::-;27330:215;;;;;;27556:131;27598:5;27618:2;27645:5;-1:-1:-1::0;;;;;27635:26:0::1;;27670:4;27635:41;;;;;;;;;;;;;-1:-1:-1::0;;;;;27635:41:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;27635:41:0;27556:27:::1;:131::i;:::-;27705:5;-1:-1:-1::0;;;;;27698:22:0::1;;27721:10;27698:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27743:47;27775:2;27779:10;27743:31;:47::i;38252:881::-:0;38493:8;19191:15;19179:8;:27;;19171:58;;;;;-1:-1:-1;;;19171:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19171:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;38547:5:0::1;38522:30;:4:::0;;-1:-1:-1;;38527:15:0;;38522:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;38522:21:0::1;-1:-1:-1::0;;;;;38522:30:0::1;;38514:66;;;::::0;;-1:-1:-1;;;38514:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;38514:66:0;;;;;;;;;;;;;::::1;;38591:172;38637:4;;38642:1;38637:7;;;;;;38591:172;38774:55;38809:4;;38774:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;38823:4:0::1;::::0;-1:-1:-1;38774:34:0::1;::::0;-1:-1:-1;;38774:55:0:i:1;:::-;38840:17;38870:5;-1:-1:-1::0;;;;;38860:26:0::1;;38895:4;38860:41;;;;;;;;;;;;;-1:-1:-1::0;;;;;38860:41:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;38860:41:0;;-1:-1:-1;38934:25:0;;::::1;;38912:112;;;;-1:-1:-1::0;;;38912:112:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39042:5;-1:-1:-1::0;;;;;39035:22:0::1;;39058:9;39035:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;39079:46;39111:2;39115:9;39079:31;:46::i;32041:912::-:0;32317:24;32289:8;19191:15;19179:8;:27;;19171:58;;;;;-1:-1:-1;;;19171:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19171:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32392:5:0::1;32367:30;:4:::0;;-1:-1:-1;;32372:15:0;;32367:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32367:21:0::1;-1:-1:-1::0;;;;;32367:30:0::1;;32359:66;;;::::0;;-1:-1:-1;;;32359:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32359:66:0;;;;;;;;;;;;;::::1;;32446:49;32470:7;32479:9;32490:4;;32446:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;32446:23:0::1;::::0;-1:-1:-1;;;32446:49:0:i:1;:::-;32436:59;;32528:11;32514:7;32522:1;32514:10;;;;;;;;;;;;;;:25;;32506:71;;;;-1:-1:-1::0;;;32506:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39673:251:::0;39824:16;39860:56;39883:9;39894;39905:10;39860:22;:56::i;30495:689::-;30773:24;30745:8;19191:15;19179:8;:27;;19171:58;;;;;-1:-1:-1;;;19171:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19171:58:0;;;;;;;;;;;;;;;30825:49:::1;30849:7;30858:9;30869:4;;30825:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;30825:23:0::1;::::0;-1:-1:-1;;;30825:49:0:i:1;:::-;30815:59;;30907:11;30893:7;30901:1;30893:10;;;;;;;;;;;;;;:25;;30885:71;;;;-1:-1:-1::0;;;30885:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33940:931:::0;34203:24;34175:8;19191:15;19179:8;:27;;19171:58;;;;;-1:-1:-1;;;19171:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19171:58:0;;;;;;;;;;;;;;;34264:5:::1;-1:-1:-1::0;;;;;34253:16:0::1;:4;;34258:1;34253:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;34253:7:0::1;-1:-1:-1::0;;;;;34253:16:0::1;;34245:52;;;::::0;;-1:-1:-1;;;34245:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;34245:52:0;;;;;;;;;;;;;::::1;;34318:49;34342:7;34351:9;34362:4;;34318:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;34318:23:0::1;::::0;-1:-1:-1;;;34318:49:0:i:1;:::-;34308:59;;34400:9;34386:7;34394:1;34386:10;;;;;;;;;;;;;;:23;;34378:69;;;;-1:-1:-1::0;;;34378:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34465:5;-1:-1:-1::0;;;;;34458:21:0::1;;34487:7;34495:1;34487:10;;;;;;;;;;;;;;34458:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;34539:5;-1:-1:-1::0;;;;;34532:22:0::1;;34573:45;34592:7;34601:4;;34606:1;34601:7;;;;;;34573:45;34637:7;34645:1;34637:10;;;;;;;;;;;;;;34532:130;;;;;;;;;;;;;-1:-1:-1::0;;;;;34532:130:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;34532:130:0;34511:162:::1;;;;34684:24;34690:7;34699:4;;34684:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;34705:2:0;;-1:-1:-1;34684:5:0::1;::::0;-1:-1:-1;;34684:24:0:i:1;:::-;34771:7;34779:1;34771:10;;;;;;;;;;;;;;34759:9;:22;34755:108;;;34796:67;34828:10;34852:7;34860:1;34852:10;;;;;;;;;;;;;;34840:9;:22;34796:31;:67::i;:::-;33940:931:::0;;;;;;;;:::o;27806:928::-;28165:18;28196:12;28211:41;28230:7;28239:5;28246;28211:18;:41::i;:::-;28196:56;;28263:13;28279:10;:36;;28306:9;28279:36;;;-1:-1:-1;;28279:36:0;28326:176;;;-1:-1:-1;;;28326:176:0;;28362:10;28326:176;;;;28395:4;28326:176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28263:52;;-1:-1:-1;;;;;;28326:21:0;;;;;:176;;;;;-1:-1:-1;;28326:176:0;;;;;;;;-1:-1:-1;28326:21:0;:176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28526:200;28589:5;28609:9;28633:14;28662:13;28690:2;28707:8;28526:48;:200::i;:::-;28513:213;27806:928;-1:-1:-1;;;;;;;;;;;;;27806:928:0:o;31192:841::-;31458:24;31430:8;19191:15;19179:8;:27;;19171:58;;;;;-1:-1:-1;;;19171:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19171:58:0;;;;;;;;;;;;;;;31519:5:::1;-1:-1:-1::0;;;;;31508:16:0::1;:4;;31513:1;31508:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31508:7:0::1;-1:-1:-1::0;;;;;31508:16:0::1;;31500:52;;;::::0;;-1:-1:-1;;;31500:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31500:52:0;;;;;;;;;;;;;::::1;;31573:50;31598:7;31607:9;31618:4;;31573:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;31573:24:0::1;::::0;-1:-1:-1;;;31573:50:0:i:1;:::-;31563:60;;31687:12;31656:7;31681:1;31664:7;:14;:18;31656:27;;;;;;;;;;;;;;:43;;31634:130;;;;-1:-1:-1::0;;;31634:130:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31782:5;-1:-1:-1::0;;;;;31775:21:0::1;;31804:7;31812:1;31804:10;;;;;;;;;;;;;;31775:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;31856:5;-1:-1:-1::0;;;;;31849:22:0::1;;31890:45;31909:7;31918:4;;31923:1;31918:7;;;;;;31890:45;31954:7;31962:1;31954:10;;;;;;;;;;;;;;31849:130;;;;;;;;;;;;;-1:-1:-1::0;;;;;31849:130:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31849:130:0;31828:162:::1;;;;32001:24;32007:7;32016:4;;32001:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;32022:2:0;;-1:-1:-1;32001:5:0::1;::::0;-1:-1:-1;;32001:24:0:i:1;39177:228::-:0;39317:15;39352:45;39369:7;39378:8;39388;39352:16;:45::i;23367:930::-;23678:15;23695;23650:8;19191:15;19179:8;:27;;19171:58;;;;;-1:-1:-1;;;19171:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19171:58:0;;;;;;;;;;;;;;;23728:12:::1;23743:43;23762:7;23771:6;23779;23743:18;:43::i;:::-;23797:56;::::0;;-1:-1:-1;;;23797:56:0;;23825:10:::1;23797:56;::::0;::::1;::::0;-1:-1:-1;;;;;23797:27:0;::::1;:56:::0;;;;;;;;;;;;;;23728:58;;-1:-1:-1;23797:27:0;;::::1;::::0;:56;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;23797:27:0;:56;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;23927:23:0::1;::::0;;-1:-1:-1;;;23927:23:0;;-1:-1:-1;;;;;23927:23:0;;::::1;;::::0;::::1;::::0;;;23891:15:::1;::::0;;;23927:19;;::::1;::::0;::::1;::::0;:23;;;;;;;;;;;23891:15;23927:19;:23;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;23927:23:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;23927:23:0;-1:-1:-1;23962:14:0::1;23982:37;24004:6:::0;24012;23982:21:::1;:37::i;:::-;23961:58;;;24061:6;-1:-1:-1::0;;;;;24051:16:0::1;:6;-1:-1:-1::0;;;;;24051:16:0::1;;:84;;24118:7;24127;24051:84;;;24084:7;24093;24051:84;24030:105:::0;;-1:-1:-1;24030:105:0;-1:-1:-1;24154:21:0;;::::1;;24146:66;;;::::0;;-1:-1:-1;;;24146:66:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;24242:10;24231:7;:21;;24223:66;;;::::0;;-1:-1:-1;;;24223:66:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;19240:1;;;;23367:930:::0;;;;;;;;;;;:::o;19030:41::-;;;:::o;37348:896::-;37570:8;19191:15;19179:8;:27;;19171:58;;;;;-1:-1:-1;;;19171:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19171:58:0;;;;;;;;;;;;;;;37610:5:::1;-1:-1:-1::0;;;;;37599:16:0::1;:4;;37604:1;37599:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;37599:7:0::1;-1:-1:-1::0;;;;;37599:16:0::1;;37591:52;;;::::0;;-1:-1:-1;;;37591:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;37591:52:0;;;;;;;;;;;;;::::1;;37654:16;37673:9;37654:28;;37700:5;-1:-1:-1::0;;;;;37693:21:0::1;;37722:8;37693:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;37772:5;-1:-1:-1::0;;;;;37765:22:0::1;;37806:45;37825:7;37834:4;;37839:1;37834:7;;;;;;37806:45;37870:8;37765:128;;;;;;;;;;;;;-1:-1:-1::0;;;;;37765:128:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;37765:128:0;37744:160:::1;;;;37915:21;37949:4:::0;;-1:-1:-1;;37954:15:0;;37949:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;37949:21:0::1;-1:-1:-1::0;;;;;37939:42:0::1;;37982:2;37939:46;;;;;;;;;;;;;-1:-1:-1::0;;;;;37939:46:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;37939:46:0;37996:44:::1;::::0;;37939:46:::1;37996:44:::0;;::::1;::::0;;;;;;;;;;;37939:46;;-1:-1:-1;37996:44:0::1;::::0;;;38031:4;;;;;;37996:44;::::1;::::0;38031:4;;37996:44;38031:4;37996:44;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;38037:2:0;;-1:-1:-1;37996:34:0::1;::::0;-1:-1:-1;;37996:44:0:i:1;:::-;38159:12:::0;38073:65:::1;38124:13:::0;38083:4;;-1:-1:-1;;38088:15:0;;38083:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;38083:21:0::1;-1:-1:-1::0;;;;;38073:42:0::1;;38116:2;38073:46;;;;;;;;;;;;;-1:-1:-1::0;;;;;38073:46:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;39932:253:::0;40079:24;40128:49;40153:7;40162:8;40172:4;40128:24;:49::i;21256:939::-;21618:15;21648;21678:17;21576:8;19191:15;19179:8;:27;;19171:58;;;;;-1:-1:-1;;;19171:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19171:58:0;;;;;;;;;;;;;;;21744:174:::1;21772:6;21793;21814:14;21843;21872:10;21897;21744:13;:174::i;:::-;21723:195:::0;;-1:-1:-1;21723:195:0;-1:-1:-1;21929:12:0::1;21944:43;21963:7;21972:6:::0;21980;21944:18:::1;:43::i;:::-;21929:58;;21998:66;22030:6;22038:10;22050:4;22056:7;21998:31;:66::i;:::-;22075;22107:6;22115:10;22127:4;22133:7;22075:31;:66::i;:::-;22173:4;-1:-1:-1::0;;;;;22164:19:0::1;;22184:2;22164:23;;;;;;;;;;;;;-1:-1:-1::0;;;;;22164:23:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;22164:23:0;21256:939;;;;-1:-1:-1;22164:23:0;;-1:-1:-1;21256:939:0;;-1:-1:-1;;;;;;;;;21256:939:0:o;22203:1121::-;22538:19;22572:18;22605:17;22496:8;19191:15;19179:8;:27;;19171:58;;;;;-1:-1:-1;;;19171:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19171:58:0;;;;;;;;;;;;;;;22678:178:::1;22706:5;22726;22746:18;22779:9;22803:14;22832:13;22678;:178::i;:::-;22650:206:::0;;-1:-1:-1;22650:206:0;-1:-1:-1;22867:12:0::1;22882:41;22901:7;22910:5:::0;22917::::1;22882:18;:41::i;:::-;22867:56;;22934:69;22966:5;22973:10;22985:4;22991:11;22934:31;:69::i;:::-;23021:5;-1:-1:-1::0;;;;;23014:21:0::1;;23043:10;23014:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;23081:5;-1:-1:-1::0;;;;;23074:22:0::1;;23097:4;23103:10;23074:40;;;;;;;;;;;;;-1:-1:-1::0;;;;;23074:40:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;23074:40:0;23067:48:::1;;;;23147:4;-1:-1:-1::0;;;;;23138:19:0::1;;23158:2;23138:23;;;;;;;;;;;;;-1:-1:-1::0;;;;;23138:23:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;23138:23:0;;-1:-1:-1;23212:9:0::1;:22:::0;-1:-1:-1;23208:108:0::1;;;23249:67;23281:10;23305;23293:9;:22;23249:31;:67::i;:::-;19240:1;22203:1121:::0;;;;;;;;;;;:::o;6242:597::-;6378:17;6427:1;6416:8;:12;6408:62;;;;-1:-1:-1;;;6408:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6515:1;6503:9;:13;:31;;;;;6533:1;6520:10;:14;6503:31;6481:115;;;;-1:-1:-1;;;6481:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6607:23;6633:17;:8;6646:3;6633:12;:17::i;:::-;6607:43;-1:-1:-1;6661:17:0;6681:31;6607:43;6701:10;6681:19;:31::i;:::-;6661:51;-1:-1:-1;6723:19:0;6745:40;6769:15;6745:19;:9;6759:4;6745:13;:19::i;:::-;:23;;:40::i;:::-;6723:62;;6820:11;6808:9;:23;;;;;;;6242:597;-1:-1:-1;;;;;;;6242:597:0:o;8295:644::-;8433:24;8493:1;8478:4;:11;:16;;8470:53;;;;;-1:-1:-1;;;8470:53:0;;;;;;;;;;;;-1:-1:-1;;;8470:53:0;;;;;;;;;;;;;;;8558:4;:11;8544:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8544:26:0;;8534:36;;8611:9;8581:7;8606:1;8589:7;:14;:18;8581:27;;;;;;;;;;;;;;;;;:39;8648:11;;-1:-1:-1;;8648:15:0;8631:301;8665:5;;8631:301;;8693:17;8712:18;8734:108;8764:7;8790:4;8799:1;8795;:5;8790:11;;;;;;;;;;;;;;8820:4;8825:1;8820:7;;;;;;;;;;;;;;8734:11;:108::i;:::-;8692:150;;;;8874:46;8886:7;8894:1;8886:10;;;;;;;;;;;;;;8898:9;8909:10;8874:11;:46::i;:::-;8857:7;8869:1;8865;:5;8857:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;8672:3:0;8631:301;;;;8295:644;;;;;:::o;4441:633::-;4564:12;4590:14;4606;4624:26;4635:6;4643;4624:10;:26::i;:::-;4869:32;;;-1:-1:-1;;4869:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4859:43;;;;;;-1:-1:-1;;;;;;4748:273:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4716:324;;;;;;;;;4441:633;-1:-1:-1;;;;;4441:633:0:o;9642:459::-;9888:45;;;-1:-1:-1;;;;;9888:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9888:45:0;-1:-1:-1;;;9888:45:0;;;9863:81;;;;9828:12;;9842:17;;9863:10;;;;9888:45;9863:81;;;9888:45;9863:81;;9888:45;9863:81;;;;;;;;;;-1:-1:-1;;9863:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9827:117;;;;9977:7;:57;;;;-1:-1:-1;9989:11:0;;:16;;:44;;;10020:4;10009:24;;;;;;;;;;;;;;;-1:-1:-1;10009:24:0;9989:44;9955:138;;;;;-1:-1:-1;;;9955:138:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9642:459;;;;;:::o;10626:202::-;10740:12;;;10700;10740;;;;;;;;;-1:-1:-1;;;;;10718:7:0;;;10733:5;;10718:35;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10718:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10699:54;;;10772:7;10764:56;;;;-1:-1:-1;;;10764:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10626:202;;;:::o;7591:623::-;7729:24;7789:1;7774:4;:11;:16;;7766:53;;;;;-1:-1:-1;;;7766:53:0;;;;;;;;;;;;-1:-1:-1;;;7766:53:0;;;;;;;;;;;;;;;7854:4;:11;7840:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7840:26:0;;7830:36;;7890:8;7877:7;7885:1;7877:10;;;;;;;;;;;;;:21;;;;;7914:9;7909:298;7943:1;7929:4;:11;:15;7925:1;:19;7909:298;;;7967:17;7986:18;8008:108;8038:7;8064:4;8069:1;8064:7;;;;;;;;;;;;;;8090:4;8095:1;8099;8095:5;8090:11;;;;;;;8008:108;7966:150;;;;8148:47;8161:7;8169:1;8161:10;;;;;;;;;;;;;;8173:9;8184:10;8148:12;:47::i;:::-;8131:7;8139:1;8143;8139:5;8131:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;7946:3:0;;7909:298;;10109:509;10394:51;;;-1:-1:-1;;;;;10394:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10394:51:0;-1:-1:-1;;;10394:51:0;;;10369:87;;;;10334:12;;10348:17;;10369:10;;;;10394:51;10369:87;;;10394:51;10369:87;;10394:51;10369:87;;;;;;;;;;-1:-1:-1;;10369:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10333:123;;;;10489:7;:57;;;;-1:-1:-1;10501:11:0;;:16;;:44;;;10532:4;10521:24;;;;;;;;;;;;;;;-1:-1:-1;10521:24:0;10501:44;10467:143;;;;-1:-1:-1;;;10467:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10109:509;;;;;;:::o;28845:886::-;28989:9;28984:740;29018:1;29004:4;:11;:15;29000:1;:19;28984:740;;;29042:13;29057:14;29076:4;29081:1;29076:7;;;;;;;;;;;;;;29085:4;29090:1;29094;29090:5;29085:11;;;;;;;;;;;;;;29041:56;;;;29113:14;29133:36;29155:5;29162:6;29133:21;:36::i;:::-;29112:57;;;29184:17;29204:7;29212:1;29216;29212:5;29204:14;;;;;;;;;;;;;;29184:34;;29234:18;29254;29285:6;-1:-1:-1;;;;;29276:15:0;:5;-1:-1:-1;;;;;29276:15:0;;:101;;29355:9;29374:1;29276:101;;;29320:1;29324:9;29276:101;29233:144;;;;29392:10;29423:1;29409:4;:11;:15;29405:1;:19;:110;;29512:3;29405:110;;;29444:48;29463:7;29472:6;29480:4;29485:1;29489;29485:5;29480:11;;;;;;;;;;;;;;29444:18;:48::i;:::-;29392:123;;29539:42;29558:7;29567:5;29574:6;29539:18;:42::i;:::-;-1:-1:-1;;;;;29530:57:0;;29606:10;29635;29664:2;29695:1;29685:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29685:12:0;;29530:182;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29530:182:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29021:3:0;;;;;-1:-1:-1;28984:740:0;;-1:-1:-1;;;;;;;;28984:740:0;;;28845:886;;;:::o;35018:1538::-;35156:9;35151:1398;35185:1;35171:4;:11;:15;35167:1;:19;35151:1398;;;35209:13;35224:14;35243:4;35248:1;35243:7;;;;;;;;;;;;;;35252:4;35257:1;35261;35257:5;35252:11;;;;;;;;;;;;;;35208:56;;;;35280:14;35300:36;35322:5;35329:6;35300:21;:36::i;:::-;35279:57;;;35351:13;35394:42;35413:7;35422:5;35429:6;35394:18;:42::i;:::-;35351:100;;35466:19;35500:20;35612:16;35630;35652:4;-1:-1:-1;;;;;35652:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35652:18:0;;;;;;;-1:-1:-1;;;;;35611:59:0;;;;-1:-1:-1;35611:59:0;;-1:-1:-1;35690:20:0;;-1:-1:-1;;;;;35737:15:0;;;;;;;:103;;35821:8;35831;35737:103;;;35777:8;35787;35737:103;35689:151;;;;35873:99;35941:12;35883:5;-1:-1:-1;;;;;35873:26:0;;35908:4;35873:41;;;;;;;;;;;;;-1:-1:-1;;;;;35873:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;:99;35859:113;;36006:147;36052:11;36086:12;36121:13;36006:23;:147::i;:::-;35991:162;;35151:1398;;;;36184:18;36204;36235:6;-1:-1:-1;;;;;36226:15:0;:5;-1:-1:-1;;;;;36226:15:0;;:107;;36308:12;36330:1;36226:107;;;36270:1;36274:12;36226:107;36183:150;;;;36348:10;36379:1;36365:4;:11;:15;36361:1;:19;:110;;36468:3;36361:110;;;36400:48;36419:7;36428:6;36436:4;36441:1;36445;36441:5;36436:11;;;;;;;36400:48;36524:12;;;36534:1;36524:12;;;;;;;;;;-1:-1:-1;;;36486:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;36486:51:0;;;;;;;;;;;;;;;;;;;;;;36348:123;;-1:-1:-1;36486:9:0;;;;;;36496:10;;36508;;36348:123;;36524:12;;36486:51;;;;;;;;36524:12;;36486:51;;;;36524:12;;36486:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35188:3:0;;;;;-1:-1:-1;35151:1398:0;;-1:-1:-1;;;;;;;;;;35151:1398:0;3400:138;3493:5;;;3488:16;;;;3480:50;;;;;-1:-1:-1;;;3480:50:0;;;;;;;;;;;;-1:-1:-1;;;3480:50:0;;;;;;;;;;;;;;6960:549;7096:16;7145:1;7133:9;:13;7125:64;;;;-1:-1:-1;;;7125:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7234:1;7222:9;:13;:31;;;;;7252:1;7239:10;:14;7222:31;7200:115;;;;-1:-1:-1;;;7200:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7326:17;7346:34;7375:4;7346:24;:9;7360;7346:13;:24::i;:::-;:28;;:34::i;:::-;7326:54;-1:-1:-1;7391:19:0;7413:34;7443:3;7413:25;:10;7428:9;7413:14;:25::i;:34::-;7391:56;;7469:32;7499:1;7482:11;7470:9;:23;;;;;;;7469:29;:32::i;:::-;7458:43;6960:549;-1:-1:-1;;;;;;6960:549:0:o;5728:392::-;5853:15;5899:1;5889:7;:11;5881:55;;;;;-1:-1:-1;;;5881:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5980:1;5969:8;:12;:28;;;;;5996:1;5985:8;:12;5969:28;5947:112;;;;-1:-1:-1;;;5947:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6104:8;6080:21;:7;6092:8;6080:11;:21::i;:::-;:32;;;;;;;5728:392;-1:-1:-1;;;;5728:392:0:o;3954:395::-;4056:14;4072;4122:6;-1:-1:-1;;;;;4112:16:0;:6;-1:-1:-1;;;;;4112:16:0;;;4104:60;;;;;-1:-1:-1;;;4104:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4203:6;-1:-1:-1;;;;;4194:15:0;:6;-1:-1:-1;;;;;4194:15:0;;:79;;4258:6;4266;4194:79;;;4226:6;4234;4194:79;4175:98;;-1:-1:-1;4175:98:0;-1:-1:-1;;;;;;4292:20:0;;4284:57;;;;;-1:-1:-1;;;4284:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3954:395;;;;;:::o;19550:1698::-;19780:15;19797;19937:1;-1:-1:-1;;;;;19881:58:0;19893:7;-1:-1:-1;;;;;19881:28:0;;19910:6;19918;19881:44;;;;;;;;;;;;;-1:-1:-1;;;;;19881:44:0;;;;;;-1:-1:-1;;;;;19881:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19881:44:0;-1:-1:-1;;;;;19881:58:0;;19877:138;;;19968:7;-1:-1:-1;;;;;19956:31:0;;19988:6;19996;19956:47;;;;;;;;;;;;;-1:-1:-1;;;;;19956:47:0;;;;;;-1:-1:-1;;;;;19956:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19877:138:0;20026:16;20044;20064:97;20101:7;20123:6;20144;20064:22;:97::i;:::-;20025:136;;;;20176:8;20188:1;20176:13;:30;;;;-1:-1:-1;20193:13:0;;20176:30;20172:1069;;;20245:14;;-1:-1:-1;20261:14:0;;-1:-1:-1;20172:1069:0;;;20309:22;20334:118;20369:14;20402:8;20429;20334:16;:118::i;:::-;20309:143;;20489:14;20471;:32;20467:763;;20572:10;20554:14;:28;;20524:134;;;;;-1:-1:-1;;;20524:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20699:14;;-1:-1:-1;20715:14:0;-1:-1:-1;20715:14:0;20467:763;;;20771:22;20796:134;20835:14;20872:8;20903;20796:16;:134::i;:::-;20771:159;;20974:14;20956;:32;;20949:40;;;;21056:10;21038:14;:28;;21008:134;;;;;-1:-1:-1;;;21008:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21183:14;-1:-1:-1;21199:14:0;;-1:-1:-1;20467:763:0;20172:1069;;19550:1698;;;;;;;;;;;:::o;3546:151::-;3604:9;3634:6;;;:30;;-1:-1:-1;;3649:5:0;;;3663:1;3658;3649:5;3658:1;3644:15;;;;;:20;3634:30;3626:63;;;;;-1:-1:-1;;;3626:63:0;;;;;;;;;;;;-1:-1:-1;;;3626:63:0;;;;;;;;;;;;;;3255:137;3348:5;;;3343:16;;;;3335:49;;;;;-1:-1:-1;;;3335:49:0;;;;;;;;;;;;-1:-1:-1;;;3335:49:0;;;;;;;;;;;;;;5132:483;5259:16;5277;5307:14;5327:26;5338:6;5346;5327:10;:26::i;:::-;5306:47;;;5365:16;5383;5428:32;5436:7;5445:6;5453;5428:7;:32::i;:::-;-1:-1:-1;;;;;5405:78:0;;:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5405:80:0;;;;;;;-1:-1:-1;;;;;5364:121:0;;;;-1:-1:-1;5364:121:0;;-1:-1:-1;;;;;;5519:16:0;;;;;;;:88;;5588:8;5598;5519:88;;;5552:8;5562;5519:88;5496:111;;;;-1:-1:-1;5132:483:0;-1:-1:-1;;;;;;;5132:483:0:o

Swarm Source

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