Contract 0x80B8d36f2A85EC557eC1955c373961e2221c7540

Router 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xc5ace74e4a8ec2c65fb8613ce39bf52726ee6231fe3aba913308932ceefd2a61Swap Exact Token...202951192022-09-26 9:41:271 day 18 hrs ago0x58b80ff10946cfda425c81f8619c6c1615a517b5 IN  Alligator: Router0 AVAX0.00270405000125.00000001
0xe733454779e467b4a0403b28423d61ac0d44740bf836e282bb11ca8e90219bb8Swap Exact Token...202669962022-09-25 17:24:322 days 10 hrs ago0x58b80ff10946cfda425c81f8619c6c1615a517b5 IN  Alligator: Router0 AVAX0.00270405000125.00000001
0xbb1de7ef2322441ee9fbcb21fd4f99766b491d9aa60d24b9a1700e3db100efb0Swap Exact Token...198894932022-09-15 5:56:5612 days 22 hrs ago0x58b80ff10946cfda425c81f8619c6c1615a517b5 IN  Alligator: Router0 AVAX0.00270405000125.00000001
0x5964c74db781dce65fde03af8235162c5c71c98ed703cc44961f128395c6a919Swap Exact Token...198158852022-09-13 2:02:1515 days 2 hrs ago0x58b80ff10946cfda425c81f8619c6c1615a517b5 IN  Alligator: Router0 AVAX0.00270375000125.00000001
0xa4bb90f6d304614b39aafe4c8c0dfe16aa98dd320e173986eb4cdf465d5de0e9Swap Exact Token...194959832022-09-03 17:59:4724 days 10 hrs ago0x3ff4d8f00981dfead7db80970aef1665cb32e876 IN  Alligator: Router0 AVAX0.004892059 26.5
0xff986718d7fd320f9f68c4e59cf4e560ed46b499f5b2da730e9e16109b7dbda4Remove Liquidity...194959722022-09-03 17:59:2524 days 10 hrs ago0x3ff4d8f00981dfead7db80970aef1665cb32e876 IN  Alligator: Router0 AVAX0.0076082295 26.5
0xce0feedfb6c8424d79616b8dc19ed42f801df55ed10916d2a83474bfb6946d0cSwap Exact Token...194003902022-09-01 12:17:0126 days 15 hrs ago0x55986cc9eb57e29875a80a7f70b9abcef063cfaf IN  Alligator: Router0 AVAX0.004447305681 26.56598737
0xfeb5b4a2f9ec93f9464b8f615ae9217646e53332539e730ee38cd5442c130b43Swap Exact Token...193727192022-08-31 20:47:5127 days 7 hrs ago0xd8fb90cde47d868348042f216e1f5b38911586f4 IN  Alligator: Router0 AVAX0.00382268727
0xa2716bc8f7e8f8a999be2aba52ced05460799ff2a3fd142b974597dd650eda2bSwap Exact Token...193727022022-08-31 20:47:1727 days 7 hrs ago0xd8fb90cde47d868348042f216e1f5b38911586f4 IN  Alligator: Router0 AVAX0.00382365927
0xa5e92e7e997297d02f50084a49a9e651a7631b497993920465698c32f4ac0328Swap Exact Token...192885552022-08-29 21:46:1729 days 6 hrs ago0x58b80ff10946cfda425c81f8619c6c1615a517b5 IN  Alligator: Router0 AVAX0.00313155000125.00000001
0x6ddd20b84c2801eab074953780480b1d65bd0bd0b46ba20cee0a46c0efc50ccbSwap Exact Token...191868592022-08-27 12:38:5331 days 15 hrs ago0x581e88d79c0c4fe7fa1738308ad972d045ee7022 IN  Alligator: Router0 AVAX0.0037525325 26.5
0xde4c3a7baa5109f27fefec52f115a6e0b8294dab8a28bb6431b165919e98f1d2Swap Exact Token...191867692022-08-27 12:35:5031 days 15 hrs ago0x581e88d79c0c4fe7fa1738308ad972d045ee7022 IN  Alligator: Router0 AVAX0.0037525325 26.5
0xef14ea1f23a0a131bb018830790099db2368e5e341731b213576ff3609266a59Remove Liquidity...191867332022-08-27 12:34:3831 days 15 hrs ago0x581e88d79c0c4fe7fa1738308ad972d045ee7022 IN  Alligator: Router0 AVAX0.0076079115 26.5
0xdb4b680a4ab5916e836140fa147f4b50a65cdda3129bc8b8d482157362365300Swap Exact Token...191051902022-08-25 14:46:1033 days 13 hrs ago0xd8fb90cde47d868348042f216e1f5b38911586f4 IN  Alligator: Router0 AVAX0.0038645127
0x93356059ae97dad0cc3cf90bfcb49b209e0aed72d62095610441ec8032d35d6aRemove Liquidity...191051532022-08-25 14:44:5733 days 13 hrs ago0xd8fb90cde47d868348042f216e1f5b38911586f4 IN  Alligator: Router0 AVAX0.00745021827
0xa36108e3b992246eb3d46524d1954e93c3de7d8ae79703f184a4f8a7c39c214aAdd Liquidity AV...191050842022-08-25 14:42:3933 days 13 hrs ago0xd8fb90cde47d868348042f216e1f5b38911586f4 IN  Alligator: Router0.496271331605491 AVAX0.00524750427
0x7291fa6a90f7bb4487d99a11a8d4a2f15902a5c0b746b98732d350f7fa094c03Swap Tokens For ...191050662022-08-25 14:42:0233 days 13 hrs ago0xd8fb90cde47d868348042f216e1f5b38911586f4 IN  Alligator: Router0 AVAX0.00382646727
0xbe67fe9beb3b5734d2a8c048a6b112ca4608db8039231292ab281f9fbcaa23beRemove Liquidity...191049052022-08-25 14:36:4033 days 13 hrs ago0xd8fb90cde47d868348042f216e1f5b38911586f4 IN  Alligator: Router0 AVAX0.00698082327
0xfec6b3d7ceb78c0367fea9efcb4a10cdf87f77ff0f85fdbfa501bec49b796944Remove Liquidity...191048622022-08-25 14:35:1433 days 13 hrs ago0xd8fb90cde47d868348042f216e1f5b38911586f4 IN  Alligator: Router0 AVAX0.00775178127
0x4d6dbb6176cb75a684294c901c7408049d81e4e4126c9a64d42d2e73cd6470d7Swap Exact Token...190486772022-08-24 6:51:4334 days 21 hrs ago0x58b80ff10946cfda425c81f8619c6c1615a517b5 IN  Alligator: Router0 AVAX0.00270405000125.00000001
0xb95fa6abdd0a9b3092f6d1b510f94a3e92f4b0d84e96bc91c008efa8badc6638Swap Exact AVAX ...189868512022-08-22 20:13:2136 days 8 hrs ago0x55986cc9eb57e29875a80a7f70b9abcef063cfaf IN  Alligator: Router0.02 AVAX0.0042228015 26.5
0xa5b24b5aca1aae3354eda3e8b5105bf964eb1ec061308f02c235016ec71195e0Add Liquidity AV...189866612022-08-22 20:06:5736 days 8 hrs ago0x55986cc9eb57e29875a80a7f70b9abcef063cfaf IN  Alligator: Router0.14 AVAX0.062568903629 26.660677232
0xb8ece9e7217ccdc7bfb80510e80b35db3d606a87426d0fd14406e8a2ef6d5391Add Liquidity189851652022-08-22 19:16:5836 days 8 hrs ago0x55986cc9eb57e29875a80a7f70b9abcef063cfaf IN  Alligator: Router0 AVAX0.0620753225 26.5
0x3ca1c78cab78903d52bb2f22d2de7595898b06b6a232422793edbe8c4fb03632Add Liquidity AV...189697942022-08-22 10:40:1436 days 17 hrs ago0x581e88d79c0c4fe7fa1738308ad972d045ee7022 IN  Alligator: Router0.026659331881401 AVAX0.005038763 26.5
0x6feb3b005474a43d2e70c4b2457fd35f6671a25651d559767179cb609b432b40Add Liquidity AV...189697162022-08-22 10:37:3336 days 17 hrs ago0x581e88d79c0c4fe7fa1738308ad972d045ee7022 IN  Alligator: Router0.51115690994942 AVAX0.0052507895 26.5
[ Download CSV Export 

OVERVIEW

Alligator is a decentralized trading platform on Avalanche.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xff986718d7fd320f9f68c4e59cf4e560ed46b499f5b2da730e9e16109b7dbda4194959722022-09-03 17:59:2524 days 10 hrs ago Alligator: Router0x3ff4d8f00981dfead7db80970aef1665cb32e8760.776872420162611651 AVAX
0xff986718d7fd320f9f68c4e59cf4e560ed46b499f5b2da730e9e16109b7dbda4194959722022-09-03 17:59:2524 days 10 hrs ago Wrapped AVAX Alligator: Router0.776872420162611651 AVAX
0xfeb5b4a2f9ec93f9464b8f615ae9217646e53332539e730ee38cd5442c130b43193727192022-08-31 20:47:5127 days 7 hrs ago Alligator: Router0xd8fb90cde47d868348042f216e1f5b38911586f40.304569238623394862 AVAX
0xfeb5b4a2f9ec93f9464b8f615ae9217646e53332539e730ee38cd5442c130b43193727192022-08-31 20:47:5127 days 7 hrs ago Wrapped AVAX Alligator: Router0.304569238623394862 AVAX
0xa2716bc8f7e8f8a999be2aba52ced05460799ff2a3fd142b974597dd650eda2b193727022022-08-31 20:47:1727 days 7 hrs ago Alligator: Router0xd8fb90cde47d868348042f216e1f5b38911586f42.400151776237238099 AVAX
0xa2716bc8f7e8f8a999be2aba52ced05460799ff2a3fd142b974597dd650eda2b193727022022-08-31 20:47:1727 days 7 hrs ago Wrapped AVAX Alligator: Router2.400151776237238099 AVAX
0x6ddd20b84c2801eab074953780480b1d65bd0bd0b46ba20cee0a46c0efc50ccb191868592022-08-27 12:38:5331 days 15 hrs ago Alligator: Router0x581e88d79c0c4fe7fa1738308ad972d045ee70221.502860962795712774 AVAX
0x6ddd20b84c2801eab074953780480b1d65bd0bd0b46ba20cee0a46c0efc50ccb191868592022-08-27 12:38:5331 days 15 hrs ago Wrapped AVAX Alligator: Router1.502860962795712774 AVAX
0xde4c3a7baa5109f27fefec52f115a6e0b8294dab8a28bb6431b165919e98f1d2191867692022-08-27 12:35:5031 days 15 hrs ago Alligator: Router0x581e88d79c0c4fe7fa1738308ad972d045ee70221.535028666354875317 AVAX
0xde4c3a7baa5109f27fefec52f115a6e0b8294dab8a28bb6431b165919e98f1d2191867692022-08-27 12:35:5031 days 15 hrs ago Wrapped AVAX Alligator: Router1.535028666354875317 AVAX
0xef14ea1f23a0a131bb018830790099db2368e5e341731b213576ff3609266a59191867332022-08-27 12:34:3831 days 15 hrs ago Alligator: Router0x581e88d79c0c4fe7fa1738308ad972d045ee70221.650788032846212175 AVAX
0xef14ea1f23a0a131bb018830790099db2368e5e341731b213576ff3609266a59191867332022-08-27 12:34:3831 days 15 hrs ago Wrapped AVAX Alligator: Router1.650788032846212175 AVAX
0xdb4b680a4ab5916e836140fa147f4b50a65cdda3129bc8b8d482157362365300191051902022-08-25 14:46:1033 days 13 hrs ago Alligator: Router0xd8fb90cde47d868348042f216e1f5b38911586f40.493791431160473798 AVAX
0xdb4b680a4ab5916e836140fa147f4b50a65cdda3129bc8b8d482157362365300191051902022-08-25 14:46:1033 days 13 hrs ago Wrapped AVAX Alligator: Router0.493791431160473798 AVAX
0x93356059ae97dad0cc3cf90bfcb49b209e0aed72d62095610441ec8032d35d6a191051532022-08-25 14:44:5733 days 13 hrs ago Alligator: Router0xd8fb90cde47d868348042f216e1f5b38911586f40.496271331605344225 AVAX
0x93356059ae97dad0cc3cf90bfcb49b209e0aed72d62095610441ec8032d35d6a191051532022-08-25 14:44:5733 days 13 hrs ago Wrapped AVAX Alligator: Router0.496271331605344225 AVAX
0xa36108e3b992246eb3d46524d1954e93c3de7d8ae79703f184a4f8a7c39c214a191050842022-08-25 14:42:3933 days 13 hrs ago Alligator: Router Wrapped AVAX0.496271331605491292 AVAX
0x7291fa6a90f7bb4487d99a11a8d4a2f15902a5c0b746b98732d350f7fa094c03191050662022-08-25 14:42:0233 days 13 hrs ago Alligator: Router0xd8fb90cde47d868348042f216e1f5b38911586f40.4 AVAX
0x7291fa6a90f7bb4487d99a11a8d4a2f15902a5c0b746b98732d350f7fa094c03191050662022-08-25 14:42:0233 days 13 hrs ago Wrapped AVAX Alligator: Router0.4 AVAX
0xfec6b3d7ceb78c0367fea9efcb4a10cdf87f77ff0f85fdbfa501bec49b796944191048622022-08-25 14:35:1433 days 13 hrs ago Alligator: Router0xd8fb90cde47d868348042f216e1f5b38911586f40.316677137630747844 AVAX
0xfec6b3d7ceb78c0367fea9efcb4a10cdf87f77ff0f85fdbfa501bec49b796944191048622022-08-25 14:35:1433 days 13 hrs ago Wrapped AVAX Alligator: Router0.316677137630747844 AVAX
0xb95fa6abdd0a9b3092f6d1b510f94a3e92f4b0d84e96bc91c008efa8badc6638189868512022-08-22 20:13:2136 days 8 hrs ago Alligator: Router Wrapped AVAX0.02 AVAX
0xa5b24b5aca1aae3354eda3e8b5105bf964eb1ec061308f02c235016ec71195e0189866612022-08-22 20:06:5736 days 8 hrs ago Alligator: Router Wrapped AVAX0.14 AVAX
0x3ca1c78cab78903d52bb2f22d2de7595898b06b6a232422793edbe8c4fb03632189697942022-08-22 10:40:1436 days 17 hrs ago Alligator: Router Wrapped AVAX0.026659331881401827 AVAX
0x6feb3b005474a43d2e70c4b2457fd35f6671a25651d559767179cb609b432b40189697162022-08-22 10:37:3336 days 17 hrs ago Alligator: Router Wrapped AVAX0.511156909949420127 AVAX
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AlligatorRouter

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-12-27
*/

// File: contracts/operations/interfaces/IAlligatorPair.sol

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.5.0;

interface IAlligatorPair {
    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/libraries/SafeMath.sol

pragma solidity 0.6.12;

// a library for performing overflow-safe math,
// updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math)
library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
        require((c = a + b) >= b, "SafeMath: Add Overflow");
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256 c) {
        require((c = a - b) <= a, "SafeMath: Underflow");
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
        require(b == 0 || (c = a * b) / b == a, "SafeMath: Mul Overflow");
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256 c) {
        require(b > 0, "SafeMath: Div by Zero");
        c = a / b;
    }

    function to128(uint256 a) internal pure returns (uint128 c) {
        require(a <= uint128(-1), "SafeMath: uint128 Overflow");
        c = uint128(a);
    }
}

library SafeMath128 {
    function add(uint128 a, uint128 b) internal pure returns (uint128 c) {
        require((c = a + b) >= b, "SafeMath: Add Overflow");
    }

    function sub(uint128 a, uint128 b) internal pure returns (uint128 c) {
        require((c = a - b) <= a, "SafeMath: Underflow");
    }
}

// File: contracts/libraries/AlligatorLibrary.sol

pragma solidity >=0.5.0;

library AlligatorLibrary {
    using SafeMath for uint256;

    // returns sorted token addresses, used to handle return values from pairs sorted in this order
    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
        require(tokenA != tokenB, "AlligatorLibrary: IDENTICAL_ADDRESSES");
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), "AlligatorLibrary: 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"b9e24d8adc9950d2bbad93f3262b77c880fd74a80f80a3b68da543e284a99a58" // init code
                    )
                )
            )
        );
    }

    // 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, ) = IAlligatorPair(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, "AlligatorLibrary: INSUFFICIENT_AMOUNT");
        require(reserveA > 0 && reserveB > 0, "AlligatorLibrary: 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, "AlligatorLibrary: INSUFFICIENT_INPUT_AMOUNT");
        require(reserveIn > 0 && reserveOut > 0, "AlligatorLibrary: 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, "AlligatorLibrary: INSUFFICIENT_OUTPUT_AMOUNT");
        require(reserveIn > 0 && reserveOut > 0, "AlligatorLibrary: 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, "AlligatorLibrary: 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, "AlligatorLibrary: 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/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");
    }
}

// File: contracts/interfaces/IAlligatorRouter.sol

pragma solidity >=0.6.2;

interface IAlligatorRouter {
    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 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 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 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;

    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/operations/interfaces/IAlligatorFactory.sol

pragma solidity >=0.5.0;

interface IAlligatorFactory {
    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/interfaces/IERC20Alligator.sol

pragma solidity >=0.5.0;

interface IERC20Alligator {
    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/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/AlligatorRouter.sol

pragma solidity =0.6.12;

contract AlligatorRouter is IAlligatorRouter {
    using SafeMath for uint256;

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

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

    function swapExactAVAXForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable virtual override ensure(deadline) {
        require(path[0] == WAVAX, "AlligatorRouter: INVALID_PATH");
        uint256 amountIn = msg.value;
        IWAVAX(WAVAX).deposit{value: amountIn}();
        assert(IWAVAX(WAVAX).transfer(AlligatorLibrary.pairFor(factory, path[0], path[1]), amountIn));
        uint256 balanceBefore = IERC20Alligator(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20Alligator(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            "AlligatorRouter: 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, "AlligatorRouter: INVALID_PATH");
        TransferHelper.safeTransferFrom(
            path[0],
            msg.sender,
            AlligatorLibrary.pairFor(factory, path[0], path[1]),
            amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint256 amountOut = IERC20Alligator(WAVAX).balanceOf(address(this));
        require(amountOut >= amountOutMin, "AlligatorRouter: 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 AlligatorLibrary.quote(amountA, reserveA, reserveB);
    }

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

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

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

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

60c060405234801561001057600080fd5b50604051620046ea380380620046ea8339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c614565620001856000398061015f5280610e085280610f3d5280610f7852806114bb528061164b5280611701528061176f528061182352806118f752806119d25280611aac5280611b825280611e0c5280611f4f5280611fd75280612171528061229d52806123e3528061246b528061285052806128e552806129595280612d2a5280612d805280612db45280612e28525080610cb35280610cec5280610de65280611055528061112c528061125852806115495280611c105280611d165280611e9f5280612009528061214f5280612330528061249d52806125f052806127e8528061298b5280612b825280612c0b5280612d5e52806137f8528061383b52806139dd5280613b535280613f425280613ffb52806140ae52506145656000f3fe60806040526004361061014f5760003560e01c806385f8c259116100b6578063baa2abde1161006f578063baa2abde14610a26578063c45a015514610a83578063c57559dd14610a98578063d06ca61f14610b1c578063e8e3370014610bd1578063f91b3f7214610c5157610188565b806385f8c259146107a95780638803dbee146107df5780638a657e67146108755780639fc27226146108f9578063a2a1623d1461096c578063ad615dec146109f057610188565b80635c11d795116101085780635c11d795146104cd578063676528d11461056357806373b295c2146105f957806373bc79cf1461062a578063762b15621461067d5780637a42416a1461071357610188565b8063054d50d41461018d5780631f00ca74146101d55780632195995c146102da5780632c4070241461037157806333c6b725146103e457806338ed17391461043757610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101c3600480360360608110156101b057600080fd5b5080359060208101359060400135610c97565b60408051918252519081900360200190f35b3480156101e157600080fd5b5061028a600480360360408110156101f857600080fd5b81359190810190604081016020820135600160201b81111561021957600080fd5b82018360208201111561022b57600080fd5b803590602001918460208302840111600160201b8311171561024c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610cac945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102c65781810151838201526020016102ae565b505050509050019250505060405180910390f35b3480156102e657600080fd5b5061035860048036036101608110156102fe57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135610ce2565b6040805192835260208301919091528051918290030190f35b34801561037d57600080fd5b50610358600480360361014081101561039557600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135610ddc565b3480156103f057600080fd5b50610358600480360360c081101561040757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610ef0565b34801561044357600080fd5b5061028a600480360360a081101561045a57600080fd5b813591602081013591810190606081016040820135600160201b81111561048057600080fd5b82018360208201111561049257600080fd5b803590602001918460208302840111600160201b831117156104b357600080fd5b91935091506001600160a01b03813516906020013561100a565b3480156104d957600080fd5b50610186600480360360a08110156104f057600080fd5b813591602081013591810190606081016040820135600160201b81111561051657600080fd5b82018360208201111561052857600080fd5b803590602001918460208302840111600160201b8311171561054957600080fd5b91935091506001600160a01b0381351690602001356111ee565b34801561056f57600080fd5b5061028a600480360360a081101561058657600080fd5b813591602081013591810190606081016040820135600160201b8111156105ac57600080fd5b8201836020820111156105be57600080fd5b803590602001918460208302840111600160201b831117156105df57600080fd5b91935091506001600160a01b03813516906020013561146b565b34801561060557600080fd5b5061060e6116ff565b604080516001600160a01b039092168252519081900360200190f35b34801561063657600080fd5b506101c3600480360360c081101561064d57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611723565b34801561068957600080fd5b50610186600480360360a08110156106a057600080fd5b813591602081013591810190606081016040820135600160201b8111156106c657600080fd5b8201836020820111156106d857600080fd5b803590602001918460208302840111600160201b831117156106f957600080fd5b91935091506001600160a01b0381351690602001356118a9565b34801561071f57600080fd5b5061028a600480360360a081101561073657600080fd5b813591602081013591810190606081016040820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b32565b3480156107b557600080fd5b506101c3600480360360608110156107cc57600080fd5b5080359060208101359060400135611cbe565b3480156107eb57600080fd5b5061028a600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611ccb565b61028a6004803603608081101561088b57600080fd5b81359190810190604081016020820135600160201b8111156108ac57600080fd5b8201836020820111156108be57600080fd5b803590602001918460208302840111600160201b831117156108df57600080fd5b91935091506001600160a01b038135169060200135611dc4565b34801561090557600080fd5b506101c3600480360361014081101561091d57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612147565b61028a6004803603608081101561098257600080fd5b81359190810190604081016020820135600160201b8111156109a357600080fd5b8201836020820111156109b557600080fd5b803590602001918460208302840111600160201b831117156109d657600080fd5b91935091506001600160a01b038135169060200135612255565b3480156109fc57600080fd5b506101c360048036036060811015610a1357600080fd5b5080359060208101359060400135612595565b348015610a3257600080fd5b50610358600480360360e0811015610a4957600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356125a2565b348015610a8f57600080fd5b5061060e6127e6565b61018660048036036080811015610aae57600080fd5b81359190810190604081016020820135600160201b811115610acf57600080fd5b820183602082011115610ae157600080fd5b803590602001918460208302840111600160201b83111715610b0257600080fd5b91935091506001600160a01b03813516906020013561280a565b348015610b2857600080fd5b5061028a60048036036040811015610b3f57600080fd5b81359190810190604081016020820135600160201b811115610b6057600080fd5b820183602082011115610b7257600080fd5b803590602001918460208302840111600160201b83111715610b9357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612b7b945050505050565b348015610bdd57600080fd5b50610c336004803603610100811015610bf557600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612ba8565b60408051938452602084019290925282820152519081900360600190f35b610c33600480360360c0811015610c6757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612cdb565b6000610ca4848484612f6e565b949350505050565b6060610cd97f00000000000000000000000000000000000000000000000000000000000000008484613046565b90505b92915050565b6000806000610d127f00000000000000000000000000000000000000000000000000000000000000008f8f613193565b9050600087610d21578c610d25565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015610d9b57600080fd5b505af1158015610daf573d6000803e3d6000fd5b50505050610dc28f8f8f8f8f8f8f6125a2565b809450819550505050509b509b9950505050505050505050565b6000806000610e2c7f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613193565b9050600087610e3b578c610e3f565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015610eb557600080fd5b505af1158015610ec9573d6000803e3d6000fd5b50505050610edb8e8e8e8e8e8e610ef0565b909f909e509c50505050505050505050505050565b6000808242811015610f37576040805162461bcd60e51b81526020600482015260186024820152600080516020614366833981519152604482015290519081900360640190fd5b610f66897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6125a2565b9093509150610f76898685613253565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610fdc57600080fd5b505af1158015610ff0573d6000803e3d6000fd5b50505050610ffe85836133bd565b50965096945050505050565b60608142811015611050576040805162461bcd60e51b81526020600482015260186024820152600080516020614366833981519152604482015290519081900360640190fd5b6110ae7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506134b592505050565b915086826001845103815181106110c157fe5b602002602001015110156111065760405162461bcd60e51b815260040180806020018281038252602b8152602001806144e1602b913960400191505060405180910390fd5b6111a48686600081811061111657fe5b905060200201356001600160a01b03163361118a7f00000000000000000000000000000000000000000000000000000000000000008a8a600081811061115857fe5b905060200201356001600160a01b03168b8b600181811061117557fe5b905060200201356001600160a01b0316613193565b8560008151811061119757fe5b60200260200101516135ec565b6111e382878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613749915050565b509695505050505050565b8042811015611232576040805162461bcd60e51b81526020600482015260186024820152600080516020614366833981519152604482015290519081900360640190fd5b6112a78585600081811061124257fe5b905060200201356001600160a01b0316336112a17f00000000000000000000000000000000000000000000000000000000000000008989600081811061128457fe5b905060200201356001600160a01b03168a8a600181811061117557fe5b8a6135ec565b6000858560001981018181106112b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561131557600080fd5b505afa158015611329573d6000803e3d6000fd5b505050506040513d602081101561133f57600080fd5b50516040805160208881028281018201909352888252929350611381929091899189918291850190849080828437600092019190915250889250613986915050565b86611424828888600019810181811061139657fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156113f257600080fd5b505afa158015611406573d6000803e3d6000fd5b505050506040513d602081101561141c57600080fd5b505190613c88565b10156114615760405162461bcd60e51b815260040180806020018281038252602b8152602001806144e1602b913960400191505060405180910390fd5b5050505050505050565b606081428110156114b1576040805162461bcd60e51b81526020600482015260186024820152600080516020614366833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106114eb57fe5b905060200201356001600160a01b03166001600160a01b031614611544576040805162461bcd60e51b815260206004820152601d6024820152600080516020614386833981519152604482015290519081900360640190fd5b6115a27f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506134b592505050565b915086826001845103815181106115b557fe5b602002602001015110156115fa5760405162461bcd60e51b815260040180806020018281038252602b8152602001806144e1602b913960400191505060405180910390fd5b61160a8686600081811061111657fe5b61164982878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613749915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061168857fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156116c657600080fd5b505af11580156116da573d6000803e3d6000fd5b505050506111e384836001855103815181106116f257fe5b60200260200101516133bd565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008142811015611769576040805162461bcd60e51b81526020600482015260186024820152600080516020614366833981519152604482015290519081900360640190fd5b611798887f000000000000000000000000000000000000000000000000000000000000000089898930896125a2565b90508092505061182188858a6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156117f057600080fd5b505afa158015611804573d6000803e3d6000fd5b505050506040513d602081101561181a57600080fd5b5051613253565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561188757600080fd5b505af115801561189b573d6000803e3d6000fd5b505050506111e384836133bd565b80428110156118ed576040805162461bcd60e51b81526020600482015260186024820152600080516020614366833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061192757fe5b905060200201356001600160a01b03166001600160a01b031614611980576040805162461bcd60e51b815260206004820152601d6024820152600080516020614386833981519152604482015290519081900360640190fd5b6119908585600081811061124257fe5b6119ce858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613986915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611a3d57600080fd5b505afa158015611a51573d6000803e3d6000fd5b505050506040513d6020811015611a6757600080fd5b5051905086811015611aaa5760405162461bcd60e51b815260040180806020018281038252602b8152602001806144e1602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611b1057600080fd5b505af1158015611b24573d6000803e3d6000fd5b5050505061146184826133bd565b60608142811015611b78576040805162461bcd60e51b81526020600482015260186024820152600080516020614366833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110611bb257fe5b905060200201356001600160a01b03166001600160a01b031614611c0b576040805162461bcd60e51b815260206004820152601d6024820152600080516020614386833981519152604482015290519081900360640190fd5b611c697f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061304692505050565b91508682600081518110611c7957fe5b602002602001015111156115fa5760405162461bcd60e51b81526004018080602001828103825260278152602001806144946027913960400191505060405180910390fd5b6000610ca4848484613cd6565b60608142811015611d11576040805162461bcd60e51b81526020600482015260186024820152600080516020614366833981519152604482015290519081900360640190fd5b611d6f7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061304692505050565b91508682600081518110611d7f57fe5b602002602001015111156111065760405162461bcd60e51b81526004018080602001828103825260278152602001806144946027913960400191505060405180910390fd5b60608142811015611e0a576040805162461bcd60e51b81526020600482015260186024820152600080516020614366833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611e4157fe5b905060200201356001600160a01b03166001600160a01b031614611e9a576040805162461bcd60e51b815260206004820152601d6024820152600080516020614386833981519152604482015290519081900360640190fd5b611ef87f00000000000000000000000000000000000000000000000000000000000000008888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061304692505050565b91503482600081518110611f0857fe5b60200260200101511115611f4d5760405162461bcd60e51b81526004018080602001828103825260278152602001806144946027913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611f8957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611fbc57600080fd5b505af1158015611fd0573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6120357f00000000000000000000000000000000000000000000000000000000000000008989600081811061128457fe5b8460008151811061204257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561209057600080fd5b505af11580156120a4573d6000803e3d6000fd5b505050506040513d60208110156120ba57600080fd5b50516120c257fe5b61210182878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613749915050565b8160008151811061210e57fe5b602002602001015134111561213d5761213d338360008151811061212e57fe5b602002602001015134036133bd565b5095945050505050565b6000806121957f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613193565b90506000866121a4578b6121a8565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561221e57600080fd5b505af1158015612232573d6000803e3d6000fd5b505050506122448d8d8d8d8d8d611723565b9d9c50505050505050505050505050565b6060814281101561229b576040805162461bcd60e51b81526020600482015260186024820152600080516020614366833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316868660008181106122d257fe5b905060200201356001600160a01b03166001600160a01b03161461232b576040805162461bcd60e51b815260206004820152601d6024820152600080516020614386833981519152604482015290519081900360640190fd5b6123897f0000000000000000000000000000000000000000000000000000000000000000348888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506134b592505050565b9150868260018451038151811061239c57fe5b602002602001015110156123e15760405162461bcd60e51b815260040180806020018281038252602b8152602001806144e1602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db08360008151811061241d57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561245057600080fd5b505af1158015612464573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6124c97f00000000000000000000000000000000000000000000000000000000000000008989600081811061128457fe5b846000815181106124d657fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561252457600080fd5b505af1158015612538573d6000803e3d6000fd5b505050506040513d602081101561254e57600080fd5b505161255657fe5b61213d82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613749915050565b6000610ca4848484613dae565b60008082428110156125e9576040805162461bcd60e51b81526020600482015260186024820152600080516020614366833981519152604482015290519081900360640190fd5b60006126167f00000000000000000000000000000000000000000000000000000000000000008c8c613193565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561267157600080fd5b505af1158015612685573d6000803e3d6000fd5b505050506040513d602081101561269b57600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156126e857600080fd5b505af11580156126fc573d6000803e3d6000fd5b505050506040513d604081101561271257600080fd5b5080516020909101519092509050600061272c8e8e613e54565b509050806001600160a01b03168e6001600160a01b03161461274f578183612752565b82825b90975095508a8710156127965760405162461bcd60e51b81526004018080602001828103825260268152602001806144bb6026913960400191505060405180910390fd5b898610156127d55760405162461bcd60e51b81526004018080602001828103825260268152602001806144176026913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b804281101561284e576040805162461bcd60e51b81526020600482015260186024820152600080516020614366833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168585600081811061288557fe5b905060200201356001600160a01b03166001600160a01b0316146128de576040805162461bcd60e51b815260206004820152601d6024820152600080516020614386833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561293e57600080fd5b505af1158015612952573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6129b77f00000000000000000000000000000000000000000000000000000000000000008989600081811061128457fe5b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156129fe57600080fd5b505af1158015612a12573d6000803e3d6000fd5b505050506040513d6020811015612a2857600080fd5b5051612a3057fe5b600086866000198101818110612a4257fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612a9e57600080fd5b505afa158015612ab2573d6000803e3d6000fd5b505050506040513d6020811015612ac857600080fd5b50516040805160208981028281018201909352898252929350612b0a9290918a918a918291850190849080828437600092019190915250899250613986915050565b876114248289896000198101818110612b1f57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156113f257600080fd5b6060610cd97f000000000000000000000000000000000000000000000000000000000000000084846134b5565b60008060008342811015612bf1576040805162461bcd60e51b81526020600482015260186024820152600080516020614366833981519152604482015290519081900360640190fd5b612bff8c8c8c8c8c8c613f32565b90945092506000612c317f00000000000000000000000000000000000000000000000000000000000000008e8e613193565b9050612c3f8d3383886135ec565b612c4b8c3383876135ec565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b158015612c9a57600080fd5b505af1158015612cae573d6000803e3d6000fd5b505050506040513d6020811015612cc457600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015612d24576040805162461bcd60e51b81526020600482015260186024820152600080516020614366833981519152604482015290519081900360640190fd5b612d528a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613f32565b90945092506000612da47f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613193565b9050612db28b3383886135ec565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e0d57600080fd5b505af1158015612e21573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612e9d57600080fd5b505af1158015612eb1573d6000803e3d6000fd5b505050506040513d6020811015612ec757600080fd5b5051612ecf57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b158015612f1e57600080fd5b505af1158015612f32573d6000803e3d6000fd5b505050506040513d6020811015612f4857600080fd5b5051925034841015612f6057612f60338534036133bd565b505096509650969350505050565b6000808411612fae5760405162461bcd60e51b815260040180806020018281038252602b815260200180614469602b913960400191505060405180910390fd5b600083118015612fbe5750600082115b612ff95760405162461bcd60e51b81526004018080602001828103825260288152602001806143ca6028913960400191505060405180910390fd5b6000613007856103e56141c3565b9050600061301582856141c3565b9050600061302f83613029886103e86141c3565b90614228565b905080828161303a57fe5b04979650505050505050565b606060028251101561309f576040805162461bcd60e51b815260206004820152601e60248201527f416c6c696761746f724c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff811180156130b757600080fd5b506040519080825280602002602001820160405280156130e1578160200160208202803683370190505b50905082816001835103815181106130f557fe5b60209081029190910101528151600019015b801561318b576000806131448786600186038151811061312357fe5b602002602001015187868151811061313757fe5b6020026020010151614279565b9150915061316684848151811061315757fe5b60200260200101518383613cd6565b84600185038151811061317557fe5b6020908102919091010152505060001901613107565b509392505050565b60008060006131a28585613e54565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527fb9e24d8adc9950d2bbad93f3262b77c880fd74a80f80a3b68da543e284a99a58609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106132d05780518252601f1990920191602091820191016132b1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613332576040519150601f19603f3d011682016040523d82523d6000602084013e613337565b606091505b5091509150818015613365575080511580613365575080806020019051602081101561336257600080fd5b50515b6133b6576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106134095780518252601f1990920191602091820191016133ea565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461346b576040519150601f19603f3d011682016040523d82523d6000602084013e613470565b606091505b50509050806134b05760405162461bcd60e51b81526004018080602001828103825260248152602001806143a66024913960400191505060405180910390fd5b505050565b606060028251101561350e576040805162461bcd60e51b815260206004820152601e60248201527f416c6c696761746f724c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561352657600080fd5b50604051908082528060200260200182016040528015613550578160200160208202803683370190505b509050828160008151811061356157fe5b60200260200101818152505060005b600183510381101561318b576000806135a68786858151811061358f57fe5b602002602001015187866001018151811061313757fe5b915091506135c88484815181106135b957fe5b60200260200101518383612f6e565b8484600101815181106135d757fe5b60209081029190910101525050600101613570565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106136715780518252601f199092019160209182019101613652565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146136d3576040519150601f19603f3d011682016040523d82523d6000602084013e6136d8565b606091505b5091509150818015613706575080511580613706575080806020019051602081101561370357600080fd5b50515b6137415760405162461bcd60e51b815260040180806020018281038252602481526020018061450c6024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156139805760008084838151811061376757fe5b602002602001015185846001018151811061377e57fe5b60200260200101519150915060006137968383613e54565b50905060008785600101815181106137aa57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146137d8578260006137dc565b6000835b91509150600060028a510388106137f35788613834565b6138347f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061382757fe5b6020026020010151613193565b90506138617f00000000000000000000000000000000000000000000000000000000000000008888613193565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f19166020018201604052801561389e576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156139065781810151838201526020016138ee565b50505050905090810190601f1680156139335780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561395557600080fd5b505af1158015613969573d6000803e3d6000fd5b50506001909901985061374c975050505050505050565b50505050565b60005b60018351038110156134b0576000808483815181106139a457fe5b60200260200101518584600101815181106139bb57fe5b60200260200101519150915060006139d38383613e54565b5090506000613a037f00000000000000000000000000000000000000000000000000000000000000008585613193565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613a4457600080fd5b505afa158015613a58573d6000803e3d6000fd5b505050506040513d6060811015613a6e57600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613aa4578284613aa7565b83835b91509150613afc828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156113f257600080fd5b9550613b09868383612f6e565b945050505050600080856001600160a01b0316886001600160a01b031614613b3357826000613b37565b6000835b91509150600060028c51038a10613b4e578a613b82565b613b827f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061382757fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c0c578181015183820152602001613bf4565b50505050905090810190601f168015613c395780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613c5b57600080fd5b505af1158015613c6f573d6000803e3d6000fd5b50506001909b019a506139899950505050505050505050565b80820382811115610cdc576040805162461bcd60e51b8152602060048201526013602482015272536166654d6174683a20556e646572666c6f7760681b604482015290519081900360640190fd5b6000808411613d165760405162461bcd60e51b815260040180806020018281038252602c81526020018061443d602c913960400191505060405180910390fd5b600083118015613d265750600082115b613d615760405162461bcd60e51b81526004018080602001828103825260288152602001806143ca6028913960400191505060405180910390fd5b6000613d796103e8613d7386886141c3565b906141c3565b90506000613d8d6103e5613d738689613c88565b9050613da46001828481613d9d57fe5b0490614228565b9695505050505050565b6000808411613dee5760405162461bcd60e51b81526004018080602001828103825260258152602001806143416025913960400191505060405180910390fd5b600083118015613dfe5750600082115b613e395760405162461bcd60e51b81526004018080602001828103825260288152602001806143ca6028913960400191505060405180910390fd5b82613e4485846141c3565b81613e4b57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613ea85760405162461bcd60e51b81526004018080602001828103825260258152602001806143f26025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613ec8578284613ecb565b83835b90925090506001600160a01b038216613f2b576040805162461bcd60e51b815260206004820152601e60248201527f416c6c696761746f724c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b60008060006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e6a439058a8a6040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b158015613fbe57600080fd5b505afa158015613fd2573d6000803e3d6000fd5b505050506040513d6020811015613fe857600080fd5b50516001600160a01b031614156140a6577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c9c6539689896040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050602060405180830381600087803b15801561407957600080fd5b505af115801561408d573d6000803e3d6000fd5b505050506040513d60208110156140a357600080fd5b50505b6000806140d47f00000000000000000000000000000000000000000000000000000000000000008b8b614279565b915091508160001480156140e6575080155b156140f6578793508692506141b6565b6000614103898484613dae565b9050878111614156578581101561414b5760405162461bcd60e51b81526004018080602001828103825260268152602001806144176026913960400191505060405180910390fd5b8894509250826141b4565b6000614163898486613dae565b90508981111561416f57fe5b878110156141ae5760405162461bcd60e51b81526004018080602001828103825260268152602001806144bb6026913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806141de575050808202828282816141db57fe5b04145b610cdc576040805162461bcd60e51b8152602060048201526016602482015275536166654d6174683a204d756c204f766572666c6f7760501b604482015290519081900360640190fd5b81810181811015610cdc576040805162461bcd60e51b8152602060048201526016602482015275536166654d6174683a20416464204f766572666c6f7760501b604482015290519081900360640190fd5b60008060006142888585613e54565b509050600080614299888888613193565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156142d157600080fd5b505afa1580156142e5573d6000803e3d6000fd5b505050506040513d60608110156142fb57600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b038781169084161461432e578082614331565b81815b9099909850965050505050505056fe416c6c696761746f724c6962726172793a20494e53554646494349454e545f414d4f554e54416c6c696761746f72526f757465723a20455850495245440000000000000000416c6c696761746f72526f757465723a20494e56414c49445f504154480000005472616e7366657248656c7065723a20415641585f5452414e534645525f4641494c4544416c6c696761746f724c6962726172793a20494e53554646494349454e545f4c4951554944495459416c6c696761746f724c6962726172793a204944454e544943414c5f414444524553534553416c6c696761746f72526f757465723a20494e53554646494349454e545f425f414d4f554e54416c6c696761746f724c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54416c6c696761746f724c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54416c6c696761746f72526f757465723a204558434553534956455f494e5055545f414d4f554e54416c6c696761746f72526f757465723a20494e53554646494349454e545f415f414d4f554e54416c6c696761746f72526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a264697066735822122027e3fbc6adbd9c11abe2b6d1b48425bb9186313303a3704a96b8565d3a0c9a9d64736f6c634300060c0033000000000000000000000000d9362aa8e0405c93299c573036e7fb4ec3be1240000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c7

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

000000000000000000000000d9362aa8e0405c93299c573036e7fb4ec3be1240000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c7

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

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


Deployed ByteCode Sourcemap

18743:19764:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19231:10;-1:-1:-1;;;;;19245:5:0;19231:19;;19224:27;;;;18743:19764;;;;;37447:258;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37447:258:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;38245:259;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38245:259:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38245:259:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38245:259:0;;-1:-1:-1;38245:259:0;;-1:-1:-1;;;;;38245:259:0:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24425:728;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24425:728:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;25161:727;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25161:727:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23715:702::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23715:702:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28460:679::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28460:679:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28460:679:0;;;;;;;;;;;;-1:-1:-1;28460:679:0;-1:-1:-1;;;;;;28460:679:0;;;;;;;;:::i;34658:783::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34658:783:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34658:783:0;;;;;;;;;;;;-1:-1:-1;34658:783:0;-1:-1:-1;;;;;;34658:783:0;;;;;;;;:::i;31410:908::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31410:908:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31410:908:0;;;;;;;;;;;;-1:-1:-1;31410:908:0;-1:-1:-1;;;;;;31410:908:0;;;;;;;;:::i;18878:39::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;18878:39:0;;;;;;;;;;;;;;25967:735;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25967:735:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;36293:868::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36293:868:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36293:868:0;;;;;;;;;;;;-1:-1:-1;36293:868:0;-1:-1:-1;;;;;;36293:868:0;;;;;;;;:::i;30516:886::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30516:886:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30516:886:0;;;;;;;;;;;;-1:-1:-1;30516:886:0;-1:-1:-1;;;;;;30516:886:0;;;;;;;;:::i;37713:257::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37713:257:0;;;;;;;;;;;;:::i;29147:657::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29147:657:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29147:657:0;;;;;;;;;;;;-1:-1:-1;29147:657:0;-1:-1:-1;;;;;;29147:657:0;;;;;;;;:::i;32326:810::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32326:810:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32326:810:0;;;;;;;;;;;;-1:-1:-1;32326:810:0;-1:-1:-1;;;;;;32326:810:0;;;;;;;;:::i;26710:838::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26710:838:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29812:696::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29812:696:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29812:696:0;;;;;;;;;;;;-1:-1:-1;29812:696:0;-1:-1:-1;;;;;;29812:696:0;;;;;;;;:::i;37205:234::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37205:234:0;;;;;;;;;;;;:::i;22817:890::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22817:890:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18830:41::-;;;;;;;;;;;;;:::i;35449:836::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;35449:836:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;35449:836:0;;;;;;;;;;;;-1:-1:-1;35449:836:0;-1:-1:-1;;;;;;35449:836:0;;;;;;;;:::i;37978:259::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37978:259:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37978:259:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37978:259:0;;-1:-1:-1;37978:259:0;;-1:-1:-1;;;;;37978:259:0:i;20784:862::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20784:862:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;21654:1120;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21654:1120:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;37447:258::-;37598:17;37635:62;37665:8;37675:9;37686:10;37635:29;:62::i;:::-;37628:69;37447:258;-1:-1:-1;;;;37447:258:0:o;38245:259::-;38392:24;38441:55;38471:7;38480:9;38491:4;38441:29;:55::i;:::-;38434:62;;38245:259;;;;;:::o;24425:728::-;24770:15;24787;24815:12;24830:49;24855:7;24864:6;24872;24830:24;:49::i;:::-;24815:64;;24890:13;24906:10;:36;;24933:9;24906:36;;;-1:-1:-1;;24906:36:0;24953:80;;;-1:-1:-1;;;24953:80:0;;24981:10;24953:80;;;;25001:4;24953:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24890:52;;-1:-1:-1;;;;;;24953:27:0;;;;;:80;;;;;-1:-1:-1;;24953:80:0;;;;;;;;-1:-1:-1;24953:27:0;:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25065;25081:6;25089;25097:9;25108:10;25120;25132:2;25136:8;25065:15;:80::i;:::-;25044:101;;;;;;;;24425:728;;;;;;;;;;;;;;;;:::o;25161:727::-;25491:19;25512:18;25543:12;25558:47;25583:7;25592:5;25599;25558:24;:47::i;:::-;25543:62;;25616:13;25632:10;:36;;25659:9;25632:36;;;-1:-1:-1;;25632:36:0;25679:80;;;-1:-1:-1;;;25679:80:0;;25707:10;25679:80;;;;25727:4;25679:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25616:52;;-1:-1:-1;;;;;;25679:27:0;;;;;:80;;;;;-1:-1:-1;;25679:80:0;;;;;;;;-1:-1:-1;25679:27:0;:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25798:82;25818:5;25825:9;25836:14;25852:13;25867:2;25871:8;25798:19;:82::i;:::-;25770:110;;;;-1:-1:-1;25161:727:0;-1:-1:-1;;;;;;;;;;;;;25161:727:0:o;23715:702::-;23966:19;23987:18;23947:8;18991:15;18979:8;:27;;18971:64;;;;;-1:-1:-1;;;18971:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18971:64:0;;;;;;;;;;;;;;;24046:198:::1;24076:5;24096;24116:9;24140:14;24169:13;24205:4;24225:8;24046:15;:198::i;:::-;24018:226:::0;;-1:-1:-1;24018:226:0;-1:-1:-1;24255:51:0::1;24283:5:::0;24290:2;24018:226;24255:27:::1;:51::i;:::-;24324:5;-1:-1:-1::0;;;;;24317:22:0::1;;24340:10;24317:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24362:47;24394:2;24398:10;24362:31;:47::i;:::-;23715:702:::0;;;;;;;;;;:::o;28460:679::-;28693:24;28674:8;18991:15;18979:8;:27;;18971:64;;;;;-1:-1:-1;;;18971:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18971:64:0;;;;;;;;;;;;;;;28740:55:::1;28771:7;28780:8;28790:4;;28740:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;28740:30:0::1;::::0;-1:-1:-1;;;28740:55:0:i:1;:::-;28730:65;;28845:12;28814:7;28839:1;28822:7;:14;:18;28814:27;;;;;;;;;;;;;;:43;;28806:99;;;;-1:-1:-1::0;;;28806:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28916:180;28962:4;;28967:1;28962:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28962:7:0::1;28984:10;29009:51;29034:7;29043:4;;29048:1;29043:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29043:7:0::1;29052:4;;29057:1;29052:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29052:7:0::1;29009:24;:51::i;:::-;29075:7;29083:1;29075:10;;;;;;;;;;;;;;28916:31;:180::i;:::-;29107:24;29113:7;29122:4;;29107:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29128:2:0;;-1:-1:-1;29107:5:0::1;::::0;-1:-1:-1;;29107:24:0:i:1;:::-;28460:679:::0;;;;;;;;;:::o;34658:783::-;34901:8;18991:15;18979:8;:27;;18971:64;;;;;-1:-1:-1;;;18971:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18971:64:0;;;;;;;;;;;;;;;34922:178:::1;34968:4;;34973:1;34968:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;34968:7:0::1;34990:10;35015:51;35040:7;35049:4;;35054:1;35049:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;35049:7:0::1;35058:4;;35063:1;35058:7;;;;;;35015:51;35081:8;34922:31;:178::i;:::-;35111:21;35151:4:::0;;-1:-1:-1;;35156:15:0;;35151:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;35151:21:0::1;-1:-1:-1::0;;;;;35135:48:0::1;;35184:2;35135:52;;;;;;;;;;;;;-1:-1:-1::0;;;;;35135:52:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;35135:52:0;35198:44:::1;::::0;;35135:52:::1;35198:44:::0;;::::1;::::0;;;;;;;;;;;35135:52;;-1:-1:-1;35198:44:0::1;::::0;;;35233:4;;;;;;35198:44;::::1;::::0;35233:4;;35198:44;35233:4;35198:44;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;35239:2:0;;-1:-1:-1;35198:34:0::1;::::0;-1:-1:-1;;35198:44:0:i:1;:::-;35350:12:::0;35275:71:::1;35332:13:::0;35291:4;;-1:-1:-1;;35296:15:0;;35291:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;35291:21:0::1;-1:-1:-1::0;;;;;35275:48:0::1;;35324:2;35275:52;;;;;;;;;;;;;-1:-1:-1::0;;;;;35275:52:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;35275:52:0;;:56:::1;:71::i;:::-;:87;;35253:180;;;;-1:-1:-1::0;;;35253:180:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19046:1;34658:783:::0;;;;;;;:::o;31410:908::-;31641:24;31622:8;18991:15;18979:8;:27;;18971:64;;;;;-1:-1:-1;;;18971:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18971:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31711:5:0::1;31686:30;:4:::0;;-1:-1:-1;;31691:15:0;;31686:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31686:21:0::1;-1:-1:-1::0;;;;;31686:30:0::1;;31678:72;;;::::0;;-1:-1:-1;;;31678:72:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31678:72:0;;;;;;;;;;;;;::::1;;31771:55;31802:7;31811:8;31821:4;;31771:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;31771:30:0::1;::::0;-1:-1:-1;;;31771:55:0:i:1;:::-;31761:65;;31876:12;31845:7;31870:1;31853:7;:14;:18;31845:27;;;;;;;;;;;;;;:43;;31837:99;;;;-1:-1:-1::0;;;31837:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31947:180;31993:4;;31998:1;31993:7;;;;;;31947:180;32138:35;32144:7;32153:4;;32138:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;32167:4:0::1;::::0;-1:-1:-1;32138:5:0::1;::::0;-1:-1:-1;;32138:35:0:i:1;:::-;32191:5;-1:-1:-1::0;;;;;32184:22:0::1;;32207:7;32232:1;32215:7;:14;:18;32207:27;;;;;;;;;;;;;;32184:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;32246:64;32278:2;32282:7;32307:1;32290:7;:14;:18;32282:27;;;;;;;;;;;;;;32246:31;:64::i;18878:39::-:0;;;:::o;25967:735::-;26247:18;26228:8;18991:15;18979:8;:27;;18971:64;;;;;-1:-1:-1;;;18971:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18971:64:0;;;;;;;;;;;;;;;26295:198:::1;26325:5;26345;26365:9;26389:14;26418:13;26454:4;26474:8;26295:15;:198::i;:::-;26278:215;;;;;;26504:87;26532:5;26539:2;26559:5;-1:-1:-1::0;;;;;26543:32:0::1;;26584:4;26543:47;;;;;;;;;;;;;-1:-1:-1::0;;;;;26543:47:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;26543:47:0;26504:27:::1;:87::i;:::-;26609:5;-1:-1:-1::0;;;;;26602:22:0::1;;26625:10;26602:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26647:47;26679:2;26683:10;26647:31;:47::i;36293:868::-:0;36534:8;18991:15;18979:8;:27;;18971:64;;;;;-1:-1:-1;;;18971:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18971:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;36588:5:0::1;36563:30;:4:::0;;-1:-1:-1;;36568:15:0;;36563:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;36563:21:0::1;-1:-1:-1::0;;;;;36563:30:0::1;;36555:72;;;::::0;;-1:-1:-1;;;36555:72:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;36555:72:0;;;;;;;;;;;;;::::1;;36638:178;36684:4;;36689:1;36684:7;;;;;;36638:178;36827:55;36862:4;;36827:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;36876:4:0::1;::::0;-1:-1:-1;36827:34:0::1;::::0;-1:-1:-1;;36827:55:0:i:1;:::-;36893:17;36929:5;-1:-1:-1::0;;;;;36913:32:0::1;;36954:4;36913:47;;;;;;;;;;;;;-1:-1:-1::0;;;;;36913:47:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;36913:47:0;;-1:-1:-1;36979:25:0;;::::1;;36971:81;;;;-1:-1:-1::0;;;36971:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37070:5;-1:-1:-1::0;;;;;37063:22:0::1;;37086:9;37063:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;37107:46;37139:2;37143:9;37107:31;:46::i;30516:886::-:0;30747:24;30728:8;18991:15;18979:8;:27;;18971:64;;;;;-1:-1:-1;;;18971:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18971:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;30817:5:0::1;30792:30;:4:::0;;-1:-1:-1;;30797:15:0;;30792:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30792:21:0::1;-1:-1:-1::0;;;;;30792:30:0::1;;30784:72;;;::::0;;-1:-1:-1;;;30784:72:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;30784:72:0;;;;;;;;;;;;;::::1;;30877:55;30907:7;30916:9;30927:4;;30877:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;30877:29:0::1;::::0;-1:-1:-1;;;30877:55:0:i:1;:::-;30867:65;;30965:11;30951:7;30959:1;30951:10;;;;;;;;;;;;;;:25;;30943:77;;;;-1:-1:-1::0;;;30943:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37713:257:::0;37864:16;37900:62;37929:9;37940;37951:10;37900:28;:62::i;29147:657::-;29380:24;29361:8;18991:15;18979:8;:27;;18971:64;;;;;-1:-1:-1;;;18971:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18971:64:0;;;;;;;;;;;;;;;29427:55:::1;29457:7;29466:9;29477:4;;29427:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;29427:29:0::1;::::0;-1:-1:-1;;;29427:55:0:i:1;:::-;29417:65;;29515:11;29501:7;29509:1;29501:10;;;;;;;;;;;;;;:25;;29493:77;;;;-1:-1:-1::0;;;29493:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32326:810:::0;32535:24;32516:8;18991:15;18979:8;:27;;18971:64;;;;;-1:-1:-1;;;18971:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18971:64:0;;;;;;;;;;;;;;;32591:5:::1;-1:-1:-1::0;;;;;32580:16:0::1;:4;;32585:1;32580:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32580:7:0::1;-1:-1:-1::0;;;;;32580:16:0::1;;32572:58;;;::::0;;-1:-1:-1;;;32572:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32572:58:0;;;;;;;;;;;;;::::1;;32651:55;32681:7;32690:9;32701:4;;32651:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;32651:29:0::1;::::0;-1:-1:-1;;;32651:55:0:i:1;:::-;32641:65;;32739:9;32725:7;32733:1;32725:10;;;;;;;;;;;;;;:23;;32717:75;;;;-1:-1:-1::0;;;32717:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32810:5;-1:-1:-1::0;;;;;32803:21:0::1;;32832:7;32840:1;32832:10;;;;;;;;;;;;;;32803:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;32870:5;-1:-1:-1::0;;;;;32863:22:0::1;;32886:51;32911:7;32920:4;;32925:1;32920:7;;;;;;32886:51;32939:7;32947:1;32939:10;;;;;;;;;;;;;;32863:87;;;;;;;;;;;;;-1:-1:-1::0;;;;;32863:87:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32863:87:0;32856:95:::1;;;;32962:24;32968:7;32977:4;;32962:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;32983:2:0;;-1:-1:-1;32962:5:0::1;::::0;-1:-1:-1;;32962:24:0:i:1;:::-;33049:7;33057:1;33049:10;;;;;;;;;;;;;;33037:9;:22;33033:95;;;33061:67;33093:10;33117:7;33125:1;33117:10;;;;;;;;;;;;;;33105:9;:22;33061:31;:67::i;:::-;32326:810:::0;;;;;;;;:::o;26710:838::-;27069:18;27100:12;27115:47;27140:7;27149:5;27156;27115:24;:47::i;:::-;27100:62;;27173:13;27189:10;:36;;27216:9;27189:36;;;-1:-1:-1;;27189:36:0;27236:80;;;-1:-1:-1;;;27236:80:0;;27264:10;27236:80;;;;27284:4;27236:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27173:52;;-1:-1:-1;;;;;;27236:27:0;;;;;:80;;;;;-1:-1:-1;;27236:80:0;;;;;;;;-1:-1:-1;27236:27:0;:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27340:200;27403:5;27423:9;27447:14;27476:13;27504:2;27521:8;27340:48;:200::i;:::-;27327:213;26710:838;-1:-1:-1;;;;;;;;;;;;;26710:838:0:o;29812:696::-;30024:24;30005:8;18991:15;18979:8;:27;;18971:64;;;;;-1:-1:-1;;;18971:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18971:64:0;;;;;;;;;;;;;;;30080:5:::1;-1:-1:-1::0;;;;;30069:16:0::1;:4;;30074:1;30069:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30069:7:0::1;-1:-1:-1::0;;;;;30069:16:0::1;;30061:58;;;::::0;;-1:-1:-1;;;30061:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;30061:58:0;;;;;;;;;;;;;::::1;;30140:56;30171:7;30180:9;30191:4;;30140:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;30140:30:0::1;::::0;-1:-1:-1;;;30140:56:0:i:1;:::-;30130:66;;30246:12;30215:7;30240:1;30223:7;:14;:18;30215:27;;;;;;;;;;;;;;:43;;30207:99;;;;-1:-1:-1::0;;;30207:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30324:5;-1:-1:-1::0;;;;;30317:21:0::1;;30346:7;30354:1;30346:10;;;;;;;;;;;;;;30317:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;30384:5;-1:-1:-1::0;;;;;30377:22:0::1;;30400:51;30425:7;30434:4;;30439:1;30434:7;;;;;;30400:51;30453:7;30461:1;30453:10;;;;;;;;;;;;;;30377:87;;;;;;;;;;;;;-1:-1:-1::0;;;;;30377:87:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;30377:87:0;30370:95:::1;;;;30476:24;30482:7;30491:4;;30476:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;30497:2:0;;-1:-1:-1;30476:5:0::1;::::0;-1:-1:-1;;30476:24:0:i:1;37205:234::-:0;37345:15;37380:51;37403:7;37412:8;37422;37380:22;:51::i;22817:890::-;23083:15;23100;23064:8;18991:15;18979:8;:27;;18971:64;;;;;-1:-1:-1;;;18971:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18971:64:0;;;;;;;;;;;;;;;23128:12:::1;23143:49;23168:7;23177:6;23185;23143:24;:49::i;:::-;23203:62;::::0;;-1:-1:-1;;;23203:62:0;;23237:10:::1;23203:62;::::0;::::1;::::0;-1:-1:-1;;;;;23203:33:0;::::1;:62:::0;;;;;;;;;;;;;;23128:64;;-1:-1:-1;23203:33:0;;::::1;::::0;:62;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;23203:33:0;:62;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;23339:29:0::1;::::0;;-1:-1:-1;;;23339:29:0;;-1:-1:-1;;;;;23339:29:0;;::::1;;::::0;::::1;::::0;;;23303:15:::1;::::0;;;23339:25;;::::1;::::0;::::1;::::0;:29;;;;;;;;;;;23303:15;23339:25;:29;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;23339:29:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;23339:29:0;-1:-1:-1;23380:14:0::1;23400:43;23428:6:::0;23436;23400:27:::1;:43::i;:::-;23379:64;;;23485:6;-1:-1:-1::0;;;;;23475:16:0::1;:6;-1:-1:-1::0;;;;;23475:16:0::1;;:58;;23516:7;23525;23475:58;;;23495:7;23504;23475:58;23454:79:::0;;-1:-1:-1;23454:79:0;-1:-1:-1;23552:21:0;;::::1;;23544:72;;;;-1:-1:-1::0;;;23544:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23646:10;23635:7;:21;;23627:72;;;;-1:-1:-1::0;;;23627:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19046:1;;;;22817:890:::0;;;;;;;;;;;:::o;18830:41::-;;;:::o;35449:836::-;35671:8;18991:15;18979:8;:27;;18971:64;;;;;-1:-1:-1;;;18971:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18971:64:0;;;;;;;;;;;;;;;35711:5:::1;-1:-1:-1::0;;;;;35700:16:0::1;:4;;35705:1;35700:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;35700:7:0::1;-1:-1:-1::0;;;;;35700:16:0::1;;35692:58;;;::::0;;-1:-1:-1;;;35692:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;35692:58:0;;;;;;;;;;;;;::::1;;35761:16;35780:9;35761:28;;35807:5;-1:-1:-1::0;;;;;35800:21:0::1;;35829:8;35800:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;35865:5;-1:-1:-1::0;;;;;35858:22:0::1;;35881:51;35906:7;35915:4;;35920:1;35915:7;;;;;;35881:51;35934:8;35858:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;35858:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;35858:85:0;35851:93:::1;;;;35955:21;35995:4:::0;;-1:-1:-1;;36000:15:0;;35995:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;35995:21:0::1;-1:-1:-1::0;;;;;35979:48:0::1;;36028:2;35979:52;;;;;;;;;;;;;-1:-1:-1::0;;;;;35979:52:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;35979:52:0;36042:44:::1;::::0;;35979:52:::1;36042:44:::0;;::::1;::::0;;;;;;;;;;;35979:52;;-1:-1:-1;36042:44:0::1;::::0;;;36077:4;;;;;;36042:44;::::1;::::0;36077:4;;36042:44;36077:4;36042:44;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;36083:2:0;;-1:-1:-1;36042:34:0::1;::::0;-1:-1:-1;;36042:44:0:i:1;:::-;36194:12:::0;36119:71:::1;36176:13:::0;36135:4;;-1:-1:-1;;36140:15:0;;36135:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;36135:21:0::1;-1:-1:-1::0;;;;;36119:48:0::1;;36168:2;36119:52;;;;;;;;;;;;;-1:-1:-1::0;;;;;36119:52:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;37978:259:::0;38125:24;38174:55;38205:7;38214:8;38224:4;38174:30;:55::i;20784:862::-;21146:15;21176;21206:17;21104:8;18991:15;18979:8;:27;;18971:64;;;;;-1:-1:-1;;;18971:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18971:64:0;;;;;;;;;;;;;;;21272:85:::1;21286:6;21294;21302:14;21318;21334:10;21346;21272:13;:85::i;:::-;21251:106:::0;;-1:-1:-1;21251:106:0;-1:-1:-1;21368:12:0::1;21383:49;21408:7;21417:6:::0;21425;21383:24:::1;:49::i;:::-;21368:64;;21443:66;21475:6;21483:10;21495:4;21501:7;21443:31;:66::i;:::-;21520;21552:6;21560:10;21572:4;21578:7;21520:31;:66::i;:::-;21624:4;-1:-1:-1::0;;;;;21609:25:0::1;;21635:2;21609:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;21609:29:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;21609:29:0;20784:862;;;;-1:-1:-1;21609:29:0;;-1:-1:-1;20784:862:0;;-1:-1:-1;;;;;;;;;20784:862:0:o;21654:1120::-;21989:19;22023:18;22056:17;21947:8;18991:15;18979:8;:27;;18971:64;;;;;-1:-1:-1;;;18971:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;18971:64:0;;;;;;;;;;;;;;;22129:178:::1;22157:5;22177;22197:18;22230:9;22254:14;22283:13;22129;:178::i;:::-;22101:206:::0;;-1:-1:-1;22101:206:0;-1:-1:-1;22318:12:0::1;22333:47;22358:7;22367:5:::0;22374::::1;22333:24;:47::i;:::-;22318:62;;22391:69;22423:5;22430:10;22442:4;22448:11;22391:31;:69::i;:::-;22478:5;-1:-1:-1::0;;;;;22471:21:0::1;;22500:10;22471:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;22538:5;-1:-1:-1::0;;;;;22531:22:0::1;;22554:4;22560:10;22531:40;;;;;;;;;;;;;-1:-1:-1::0;;;;;22531:40:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;22531:40:0;22524:48:::1;;;;22610:4;-1:-1:-1::0;;;;;22595:25:0::1;;22621:2;22595:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;22595:29:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;22595:29:0;;-1:-1:-1;22675:9:0::1;:22:::0;-1:-1:-1;22671:95:0::1;;;22699:67;22731:10;22755;22743:9;:22;22699:31;:67::i;:::-;19046:1;21654:1120:::0;;;;;;;;;;;:::o;6680:572::-;6816:17;6865:1;6854:8;:12;6846:68;;;;-1:-1:-1;;;6846:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6945:1;6933:9;:13;:31;;;;;6963:1;6950:10;:14;6933:31;6925:84;;;;-1:-1:-1;;;6925:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7020:23;7046:17;:8;7059:3;7046:12;:17::i;:::-;7020:43;-1:-1:-1;7074:17:0;7094:31;7020:43;7114:10;7094:19;:31::i;:::-;7074:51;-1:-1:-1;7136:19:0;7158:40;7182:15;7158:19;:9;7172:4;7158:13;:19::i;:::-;:23;;:40::i;:::-;7136:62;;7233:11;7221:9;:23;;;;;;;6680:572;-1:-1:-1;;;;;;;6680:572:0:o;8623:584::-;8761:24;8821:1;8806:4;:11;:16;;8798:59;;;;;-1:-1:-1;;;8798:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8892:4;:11;8878:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8878:26:0;;8868:36;;8945:9;8915:7;8940:1;8923:7;:14;:18;8915:27;;;;;;;;;;;;;;;;;:39;8982:11;;-1:-1:-1;;8982:15:0;8965:235;8999:5;;8965:235;;9027:17;9046:18;9068:42;9080:7;9089:4;9098:1;9094;:5;9089:11;;;;;;;;;;;;;;9102:4;9107:1;9102:7;;;;;;;;;;;;;;9068:11;:42::i;:::-;9026:84;;;;9142:46;9154:7;9162:1;9154:10;;;;;;;;;;;;;;9166:9;9177:10;9142:11;:46::i;:::-;9125:7;9137:1;9133;:5;9125:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;9006:3:0;8965:235;;;;8623:584;;;;;:::o;4935:646::-;5058:12;5084:14;5100;5118:26;5129:6;5137;5118:10;:26::i;:::-;5363:32;;;-1:-1:-1;;5363:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5353:43;;;;;;-1:-1:-1;;;;;;5242:286:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5210:337;;;;;;;;;4935:646;-1:-1:-1;;;;;4935:646:0:o;9839:398::-;10071:45;;;-1:-1:-1;;;;;10071:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10071:45:0;-1:-1:-1;;;10071:45:0;;;10060:57;;;;10025:12;;10039:17;;10060:10;;;;10071:45;10060:57;;;10071:45;10060:57;;10071:45;10060:57;;;;;;;;;;-1:-1:-1;;10060:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10024:93;;;;10136:7;:57;;;;-1:-1:-1;10148:11:0;;:16;;:44;;;10179:4;10168:24;;;;;;;;;;;;;;;-1:-1:-1;10168:24:0;10148:44;10128:101;;;;;-1:-1:-1;;;10128:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9839:398;;;;;:::o;10701:202::-;10815:12;;;10775;10815;;;;;;;;;-1:-1:-1;;;;;10793:7:0;;;10808:5;;10793:35;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10793:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10774:54;;;10847:7;10839:56;;;;-1:-1:-1;;;10839:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10701:202;;;:::o;7979:563::-;8117:24;8177:1;8162:4;:11;:16;;8154:59;;;;;-1:-1:-1;;;8154:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8248:4;:11;8234:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8234:26:0;;8224:36;;8284:8;8271:7;8279:1;8271:10;;;;;;;;;;;;;:21;;;;;8308:9;8303:232;8337:1;8323:4;:11;:15;8319:1;:19;8303:232;;;8361:17;8380:18;8402:42;8414:7;8423:4;8428:1;8423:7;;;;;;;;;;;;;;8432:4;8437:1;8441;8437:5;8432:11;;;;;;;8402:42;8360:84;;;;8476:47;8489:7;8497:1;8489:10;;;;;;;;;;;;;;8501:9;8512:10;8476:12;:47::i;:::-;8459:7;8467:1;8471;8467:5;8459:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;8340:3:0;;8303:232;;10245:448;10516:51;;;-1:-1:-1;;;;;10516:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10516:51:0;-1:-1:-1;;;10516:51:0;;;10505:63;;;;10470:12;;10484:17;;10505:10;;;;10516:51;10505:63;;;10516:51;10505:63;;10516:51;10505:63;;;;;;;;;;-1:-1:-1;;10505:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10469:99;;;;10587:7;:57;;;;-1:-1:-1;10599:11:0;;:16;;:44;;;10630:4;10619:24;;;;;;;;;;;;;;;-1:-1:-1;10619:24:0;10599:44;10579:106;;;;-1:-1:-1;;;10579:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10245:448;;;;;;:::o;27659:793::-;27803:9;27798:647;27832:1;27818:4;:11;:15;27814:1;:19;27798:647;;;27856:13;27871:14;27890:4;27895:1;27890:7;;;;;;;;;;;;;;27899:4;27904:1;27908;27904:5;27899:11;;;;;;;;;;;;;;27855:56;;;;27927:14;27947:42;27975:5;27982:6;27947:27;:42::i;:::-;27926:63;;;28004:17;28024:7;28032:1;28036;28032:5;28024:14;;;;;;;;;;;;;;28004:34;;28054:18;28074;28105:6;-1:-1:-1;;;;;28096:15:0;:5;-1:-1:-1;;;;;28096:15:0;;:101;;28175:9;28194:1;28096:101;;;28140:1;28144:9;28096:101;28053:144;;;;28212:10;28243:1;28229:4;:11;:15;28225:1;:19;:82;;28304:3;28225:82;;;28247:54;28272:7;28281:6;28289:4;28294:1;28298;28294:5;28289:11;;;;;;;;;;;;;;28247:24;:54::i;:::-;28212:95;;28337:48;28362:7;28371:5;28378:6;28337:24;:48::i;:::-;-1:-1:-1;;;;;28322:69:0;;28392:10;28404;28416:2;28430:1;28420:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28420:12:0;;28322:111;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28322:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27835:3:0;;;;;-1:-1:-1;27798:647:0;;-1:-1:-1;;;;;;;;27798:647:0;;;27659:793;;;:::o;33283:1367::-;33396:9;33391:1252;33425:1;33411:4;:11;:15;33407:1;:19;33391:1252;;;33449:13;33464:14;33483:4;33488:1;33483:7;;;;;;;;;;;;;;33492:4;33497:1;33501;33497:5;33492:11;;;;;;;;;;;;;;33448:56;;;;33520:14;33540:42;33568:5;33575:6;33540:27;:42::i;:::-;33519:63;;;33597:19;33634:48;33659:7;33668:5;33675:6;33634:24;:48::i;:::-;33597:86;;33698:19;33732:20;33844:16;33862;33884:4;-1:-1:-1;;;;;33884:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33884:18:0;;;;;;;-1:-1:-1;;;;;33843:59:0;;;;-1:-1:-1;33843:59:0;;-1:-1:-1;33922:20:0;;-1:-1:-1;;;;;33969:15:0;;;;;;;:103;;34053:8;34063;33969:103;;;34009:8;34019;33969:103;33921:151;;;;34105:65;34157:12;34121:5;-1:-1:-1;;;;;34105:32:0;;34146:4;34105:47;;;;;;;;;;;;;-1:-1:-1;;;;;34105:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;:65;34091:79;;34204:71;34234:11;34247:12;34261:13;34204:29;:71::i;:::-;34189:86;;33391:1252;;;;34306:18;34326;34357:6;-1:-1:-1;;;;;34348:15:0;:5;-1:-1:-1;;;;;34348:15:0;;:107;;34430:12;34452:1;34348:107;;;34392:1;34396:12;34348:107;34305:150;;;;34470:10;34501:1;34487:4;:11;:15;34483:1;:19;:82;;34562:3;34483:82;;;34505:54;34530:7;34539:6;34547:4;34552:1;34556;34552:5;34547:11;;;;;;;34505:54;34618:12;;;34628:1;34618:12;;;;;;;;;;-1:-1:-1;;;34580:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;34580:51:0;;;;;;;;;;;;;;;;;;;;;;34470:95;;-1:-1:-1;34580:9:0;;;;;;34590:10;;34602;;34470:95;;34618:12;;34580:51;;;;;;;;34618:12;;34580:51;;;;34618:12;;34580:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33428:3:0;;;;;-1:-1:-1;33391:1252:0;;-1:-1:-1;;;;;;;;;;33391:1252:0;3302:136;3395:5;;;3390:16;;;;3382:48;;;;;-1:-1:-1;;;3382:48:0;;;;;;;;;;;;-1:-1:-1;;;3382:48:0;;;;;;;;;;;;;;7373:524;7509:16;7558:1;7546:9;:13;7538:70;;;;-1:-1:-1;;;7538:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7639:1;7627:9;:13;:31;;;;;7657:1;7644:10;:14;7627:31;7619:84;;;;-1:-1:-1;;;7619:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7714:17;7734:34;7763:4;7734:24;:9;7748;7734:13;:24::i;:::-;:28;;:34::i;:::-;7714:54;-1:-1:-1;7779:19:0;7801:34;7831:3;7801:25;:10;7816:9;7801:14;:25::i;:34::-;7779:56;;7857:32;7887:1;7870:11;7858:9;:23;;;;;;;7857:29;:32::i;:::-;7846:43;7373:524;-1:-1:-1;;;;;;7373:524:0:o;6191:367::-;6316:15;6362:1;6352:7;:11;6344:61;;;;-1:-1:-1;;;6344:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6435:1;6424:8;:12;:28;;;;;6451:1;6440:8;:12;6424:28;6416:81;;;;-1:-1:-1;;;6416:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6542:8;6518:21;:7;6530:8;6518:11;:21::i;:::-;:32;;;;;;;6191:367;-1:-1:-1;;;;6191:367:0:o;4494:349::-;4569:14;4585;4630:6;-1:-1:-1;;;;;4620:16:0;:6;-1:-1:-1;;;;;4620:16:0;;;4612:66;;;;-1:-1:-1;;;4612:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4717:6;-1:-1:-1;;;;;4708:15:0;:6;-1:-1:-1;;;;;4708:15:0;;:53;;4746:6;4754;4708:53;;;4727:6;4735;4708:53;4689:72;;-1:-1:-1;4689:72:0;-1:-1:-1;;;;;;4780:20:0;;4772:63;;;;;-1:-1:-1;;;4772:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4494:349;;;;;:::o;19356:1420::-;19586:15;19603;19749:1;-1:-1:-1;;;;;19687:64:0;19705:7;-1:-1:-1;;;;;19687:34:0;;19722:6;19730;19687:50;;;;;;;;;;;;;-1:-1:-1;;;;;19687:50:0;;;;;;-1:-1:-1;;;;;19687:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19687:50:0;-1:-1:-1;;;;;19687:64:0;;19683:150;;;19786:7;-1:-1:-1;;;;;19768:37:0;;19806:6;19814;19768:53;;;;;;;;;;;;;-1:-1:-1;;;;;19768:53:0;;;;;;-1:-1:-1;;;;;19768:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19683:150:0;19844:16;19862;19882:53;19911:7;19920:6;19928;19882:28;:53::i;:::-;19843:92;;;;19950:8;19962:1;19950:13;:30;;;;-1:-1:-1;19967:13:0;;19950:30;19946:823;;;20019:14;;-1:-1:-1;20035:14:0;;-1:-1:-1;19946:823:0;;;20083:22;20108:58;20131:14;20147:8;20157;20108:22;:58::i;:::-;20083:83;;20203:14;20185;:32;20181:577;;20264:10;20246:14;:28;;20238:79;;;;-1:-1:-1;;;20238:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20358:14;;-1:-1:-1;20374:14:0;-1:-1:-1;20374:14:0;20181:577;;;20430:22;20455:58;20478:14;20494:8;20504;20455:22;:58::i;:::-;20430:83;;20557:14;20539;:32;;20532:40;;;;20617:10;20599:14;:28;;20591:79;;;;-1:-1:-1;;;20591:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20711:14;-1:-1:-1;20727:14:0;;-1:-1:-1;20181:577:0;19946:823;;19356:1420;;;;;;;;;;;:::o;3446:153::-;3504:9;3534:6;;;:30;;-1:-1:-1;;3549:5:0;;;3563:1;3558;3549:5;3558:1;3544:15;;;;;:20;3534:30;3526:65;;;;;-1:-1:-1;;;3526:65:0;;;;;;;;;;;;-1:-1:-1;;;3526:65:0;;;;;;;;;;;;;;3155:139;3248:5;;;3243:16;;;;3235:51;;;;;-1:-1:-1;;;3235:51:0;;;;;;;;;;;;-1:-1:-1;;;3235:51:0;;;;;;;;;;;;;;5639:439;5766:16;5784;5814:14;5834:26;5845:6;5853;5834:10;:26::i;:::-;5813:47;;;5872:16;5890;5927:32;5935:7;5944:6;5952;5927:7;:32::i;:::-;-1:-1:-1;;;;;5912:60:0;;:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5912:62:0;;;;;;;-1:-1:-1;;;;;5871:103:0;;;;-1:-1:-1;5871:103:0;;-1:-1:-1;;;;;;6008:16:0;;;;;;;:62;;6051:8;6061;6008:62;;;6028:8;6038;6008:62;5985:85;;;;-1:-1:-1;5639:439:0;-1:-1:-1;;;;;;;5639:439:0:o

Swarm Source

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