BERA Price: $3.66 (-0.61%)

Contract

0x2541156984337614cE1Ab49530987C7334e98E13

Overview

BERA Balance

Berachain LogoBerachain LogoBerachain Logo0 BERA

BERA Value

$0.00

Multichain Info

No addresses found
Amount:Between 1-10
Reset Filter

Transaction Hash
Method
Block
From
To

There are no matching entries

Update your filters to view other transactions

Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
OffchainOracle

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at berascan.com on 2025-04-22
*/

// SPDX-License-Identifier: No

pragma solidity 0.8.24;

library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b > a) return (false, 0);
        return (true, a - b);
    }
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (a == 0) return (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) return 0;
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: modulo by zero");
        return a % b;
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        return a - b;
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a / b;
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a % b;
    }
}

library Sqrt {
    function sqrt(uint y) internal pure returns (uint z) {
        if (y > 3) {
            z = y;
            uint x = y / 2 + 1;
            while (x < z) {
                z = x;
                x = (y / x + x) / 2;
            }
        } else if (y != 0) {
            z = 1;
        }
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}
// ver 1 ==> For Uniswap v1
interface IUniswapV1 {
    function getTokenToEthInputPrice(uint256 tokens_sold) external view returns (uint256 );
}
// ver 2 ==> For Uniswap v2, Quickswap v2, Sushiswap v2, pancakeswap v2    
interface IUniswapV2Pair {
    function getReserves() external view returns (uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast);
    function token0() external view returns (address);
    function token1() external view returns (address);
}
// ver 22 ==> For Meshswap
interface IMeshswapPool {
    function token0() external view returns (address);
    function token1() external view returns (address);
    function reserve0() external view returns (uint112);
    function reserve1() external view returns (uint112);
}
// ver 23 ==> For Kyber swap
interface IKyberDmmPool {
    function getTradeInfo() external view returns (uint112 reserve0, uint112 reserve1, uint112 _vReserve0, uint112 _vReserve1, uint256 feeInPrecision);
    function token0() external view returns (address);
    function token1() external view returns (address);
}
// ver 3 ==> For Uniswap v3, Sushiswap v3, Pancakeswap v3, Solidly v3
interface IUniswapV3Pool {
    function slot0() external view returns (uint160 sqrtPriceX96);
    function token0() external view returns (address);
    function token1() external view returns (address);
}
// ver 4 ==> For Quickswap v3
interface IAlgebraPool {
    function globalState() external view returns (uint160 price);
    function token0() external view returns (address);
    function token1() external view returns (address);
}

// ver: 621 ==> For Balancer v2: weighted pool
interface IWeightedPoolV2 {
    function getVault() external view returns (address);
    function getPoolId() external view returns (bytes32);
    function getNormalizedWeights() external view returns (uint256[] memory);
}
// ver: 622 ==> For Balancer v2: stable pool 
interface IStablePoolV2 {
    function getVault() external view returns (address);
    function getTokenRate(address) external view returns (uint256);
}
// ver: 623 For Balancer v2: Gyro E-CLP pool
interface IGyroECLPPoolV2 {
    function getVault() external view returns (address);
    function getPoolId() external view returns (bytes32);
    function getPrice() external view returns (uint256);
}
// ver: 621,622,623 ==> For Balancer v2: vault
interface IVaultV2 {
    function getPoolTokens(bytes32 poolId) external view returns (address[] memory tokens, uint256[] memory balances, uint256 lastChangeBlock);
}
// ver: 631 ==> For Balancer v3: weighted pool
interface IWeightedPoolV3 {
    function getVault() external view returns (address);
    function getNormalizedWeights() external view returns (uint256[] memory);
}
// ver: 632 ==> For Balancer v3: stable pool 
interface IStablePoolV3 {
    function getVault() external view returns (address);
}
// ver: 633 For Balancer v3: Gyro E-CLP pool
interface IGyroECLPPoolV3 {
    function getVault() external view returns (address);
}
// ver: 631,632,633 ==> For Balancer v3: vault
interface IVaultV3 {
    function getPoolTokens(address pool) external view returns (address[] memory tokens);
    function getCurrentLiveBalances(address) external view returns (uint256[] memory balances);
    function getPoolTokenRates(address) external view returns (uint256[] memory decimalScalingFactors, uint256[] memory tokenRates);
}
// ver 7,71,72,73,74,75 ==> For Traderjoe V2.2
interface ITraderjoeV2_2Pool {
    function getSwapOut(uint128 amountIn, bool swapForY) external view returns (uint128 amountInLeft, uint128 amountOut, uint128 fee);
    function getTokenX() external view returns (address);
    function getTokenY() external view returns (address);
}
// ver 8,81,82,83,84,85 ==> For Curve
interface ICurveProvider {
    function get_address (uint256 _id) external view returns (address);
}
// ver 8,81,82,83,84,85 ==> For Curve
interface ICurveMetaregistry {
    //function find_pools_for_coins(address srcToken, address dstToken) external view returns (address[] memory);
    function get_coin_indices(address _pool, address _from, address _to) external view returns (int128, int128, bool);
    //function get_underlying_balances(address _pool) external view returns (uint256[8] memory);
}
// ver 8,81,82,83,84,85 ==> For Curve
interface ICurvePool {
    function allowed_extra_profit() external view returns (uint256);
    function get_rate_mul() external view returns (uint256);
}
// ver 8,81,82,83,84,85 ==> For Curve
interface ICurveStableSwapMeta {
    function get_dy_underlying(int128,int128,uint256) external view returns (uint256);
}
// ver 8,81,82,83,84,85 ==> For Curve
interface ICurveStableSwap {
    function get_dy(int128,int128,uint256) external view returns (uint256);
}
// ver 8,81,82,83,84,85 ==> For Curve
interface ICurveCryptoSwap {
    function get_dy(uint256,uint256,uint256) external view returns (uint256);
}
// ver 9,91,92,93,94,95 ==> For Dodoex V2 DVM & DSP
interface IDodoDVM {
    function _BASE_TOKEN_() external view returns (address);
    function _QUOTE_TOKEN_() external view returns (address);
    function querySellBase(address trader, uint256 payBaseAmount) external view returns (uint256 receiveQuoteAmount, uint256 mtFee);
    function querySellQuote(address trader, uint256 payQuoteAmount) external view returns (uint256 receiveBaseAmount, uint256 mtFee);
}

contract OffchainOracle {
    using SafeMath for uint256;
    using SafeMath for uint112;
    using SafeMath for uint128;
    using Sqrt for uint256;
    address private constant _ETH                              = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
    address private constant _curveAddressProvider             = 0x5ffe7FB82894076ECB99A30D6A32e969e6e35E98;
    address private constant _curveAddressProviderForZksync    = 0x54A5a69e17Aa6eB89d77aa3828E38C9Eb4fF263D;
    function _getCurvePoolType(address pool) private view returns (uint8) {
        // 0 for stableswap, 1 for cryptoswap, 2 for LLAMMA.

        // check if cryptoswap
        (bool success, bytes memory data) = pool.staticcall(abi.encodeWithSelector(ICurvePool.allowed_extra_profit.selector));
        if (success && data.length >= 32) { // vyper could return redundant bytes
            return 1;
        }

        // check if llamma
        (success, data) = pool.staticcall(abi.encodeWithSelector(ICurvePool.get_rate_mul.selector));
        if (success && data.length >= 32) { // vyper could return redundant bytes
            return 2;
        }

        return 0;
    }
    function _getAmountIn(uint32 _ver, uint8 _decimalsFrom) private pure returns (uint256) {
        uint8 num = 4;
        if(_ver == 7 || _ver == 8 || _ver == 9) {
            num = 4;
        }
        if(_ver == 71 || _ver == 81 || _ver == 91) {
            num = 0;
        }
        if(_ver == 72 || _ver == 82 || _ver == 92) {
            num = 2;
        }
        if(_ver == 73 || _ver == 83 || _ver == 93) {
            num = 6;
        }
        if(_ver == 74 || _ver == 84 || _ver == 94) {
            num = 8;
        }
        if(_ver == 75 || _ver == 85 || _ver == 95) {
            num = 10;
        }
        uint256 amountIn = 10**(_decimalsFrom + num - 4);
        return amountIn;
    }

    function getRate(address tokenFrom, address tokenTo, address poolAddress, uint32 ver) external view returns (uint256 rate, uint8 decimalsFrom, uint8 decimalsTo) {
        if(ver == 2 || ver == 22 || ver == 23) {
            address token0;
            address token1;
            uint256 reserve0;
            uint256 reserve1;
            // version = 2 : Uniswap V2 like
            if(ver == 2) {
                token0 = IUniswapV2Pair(poolAddress).token0();
                token1 = IUniswapV2Pair(poolAddress).token1();
                (reserve0, reserve1,) = IUniswapV2Pair(poolAddress).getReserves(); 
            }
            // version = 22 : Meshswap
            else if(ver == 22) {
                token0 = IMeshswapPool(poolAddress).token0();
                token1 = IMeshswapPool(poolAddress).token1();
                reserve0 = IMeshswapPool(poolAddress).reserve0();
                reserve1 = IMeshswapPool(poolAddress).reserve1();
            }
            // version = 23 : Kyber swap
            else if(ver == 23) {
                token0 = IKyberDmmPool(poolAddress).token0();
                token1 = IKyberDmmPool(poolAddress).token1();
                (,, reserve0, reserve1,) = IKyberDmmPool(poolAddress).getTradeInfo();
            }
            if(token0 == tokenFrom) {
                decimalsFrom = IERC20Metadata(token0).decimals();
                decimalsTo = IERC20Metadata(token1).decimals();
                rate = reserve1.mul(1e18).div(reserve0);
            } else {
                decimalsFrom = IERC20Metadata(token1).decimals();
                decimalsTo = IERC20Metadata(token0).decimals();
                rate = reserve0.mul(1e18).div(reserve1);
            }
        }
        // version = 1 : Uniswap V1
        else if(ver == 1) {
            decimalsFrom = IERC20Metadata(tokenFrom).decimals();
            decimalsTo = 18;
            rate = IUniswapV1(poolAddress).getTokenToEthInputPrice(10**decimalsFrom);
        }
        // version = 3 : Uniswap V3
        else if(ver == 3) {
            address token0 = IUniswapV3Pool(poolAddress).token0();
            address token1 = IUniswapV3Pool(poolAddress).token1();
            (uint256 sqrtPriceX96) = IUniswapV3Pool(poolAddress).slot0();
            if(token0 == tokenFrom) {
                decimalsFrom = IERC20Metadata(token0).decimals();
                decimalsTo = IERC20Metadata(token1).decimals();
                rate = (((1e18 * sqrtPriceX96) >> 96) * sqrtPriceX96) >> 96;
            } else {
                decimalsFrom = IERC20Metadata(token1).decimals();
                decimalsTo = IERC20Metadata(token0).decimals();
                rate = (1e18 << 192) / sqrtPriceX96 / sqrtPriceX96;
            }
        } 
        // version = 4 : QuickSwap V3
        else if(ver == 4) {
            address token0 = IAlgebraPool(poolAddress).token0();
            address token1 = IAlgebraPool(poolAddress).token1();
            (uint256 sqrtPriceX96) = IAlgebraPool(poolAddress).globalState();
            if(token0 == tokenFrom) {
                decimalsFrom = IERC20Metadata(token0).decimals();
                decimalsTo = IERC20Metadata(token1).decimals();
                rate = (((1e18 * sqrtPriceX96) >> 96) * sqrtPriceX96) >> 96;
            } else {
                decimalsFrom = IERC20Metadata(token1).decimals();
                decimalsTo = IERC20Metadata(token0).decimals();
                rate = (1e18 << 192) / sqrtPriceX96 / sqrtPriceX96;
            }
        }
        // version = 621 : balancer v2 weighted pool
        else if(ver == 621) {
            address vaultAddress = IWeightedPoolV2(poolAddress).getVault();
            bytes32 poolId = IWeightedPoolV2(poolAddress).getPoolId();
            (uint256[] memory weights) = IWeightedPoolV2(poolAddress).getNormalizedWeights();
            (address[] memory tokens, uint256[] memory balances,) = IVaultV2(vaultAddress).getPoolTokens(poolId);
            uint256 balanceOfTokenFrom = 0;
            uint256 balanceOfTokenTo = 0;
            for(uint8 i = 0; i < tokens.length; i++ ){
                if(tokens[i] == tokenFrom) {
                    balanceOfTokenFrom = balances[i].mul(1e18).div(weights[i]);
                }
                if(tokens[i] == tokenTo) {
                    balanceOfTokenTo = balances[i].mul(1e18).div(weights[i]);
                }
            }
            decimalsFrom = IERC20Metadata(tokenFrom).decimals();
            decimalsTo = IERC20Metadata(tokenTo).decimals();
            rate = balanceOfTokenTo.mul(1e18).div(balanceOfTokenFrom);
        }
        // version = 622 : balancer v2 stable pool
        else if(ver == 622) {
            uint256 rateFrom = IStablePoolV2(poolAddress).getTokenRate(tokenFrom);
            uint256 rateTo = IStablePoolV2(poolAddress).getTokenRate(tokenTo);
            rate = rateFrom.mul(1e18).div(rateTo);
            decimalsFrom = 18;
            decimalsTo = 18;
        }
        // version = 623 : balancer v2 Gyro E-CLP pool
        else if(ver == 623) {
            rate = IGyroECLPPoolV2(poolAddress).getPrice();
            address vaultAddress = IGyroECLPPoolV2(poolAddress).getVault();
            bytes32 poolId = IGyroECLPPoolV2(poolAddress).getPoolId();
            (address[] memory tokens, ,) = IVaultV2(vaultAddress).getPoolTokens(poolId);
            if(tokens[0] == tokenTo) {
                rate = (1e36) / rate;
            }
            decimalsFrom = 18;
            decimalsTo = 18;
        }
        // version = 631 : balancer v3 weighted pool
        else if(ver == 631) {
            address vaultAddress = IWeightedPoolV3(poolAddress).getVault();
            (uint256[] memory weights) = IWeightedPoolV3(poolAddress).getNormalizedWeights();
            (address[] memory tokens) = IVaultV3(vaultAddress).getPoolTokens(poolAddress);
            (uint256[] memory balances) = IVaultV3(vaultAddress).getCurrentLiveBalances(poolAddress);
            uint256 balanceOfTokenFrom = 0;
            uint256 balanceOfTokenTo = 0;
            for(uint8 i = 0; i < tokens.length; i++ ){
                if(tokens[i] == tokenFrom) {
                    balanceOfTokenFrom = balances[i].mul(1e18).div(weights[i]);
                }
                if(tokens[i] == tokenTo) {
                    balanceOfTokenTo = balances[i].mul(1e18).div(weights[i]);
                }
            }
            decimalsFrom = IERC20Metadata(tokenFrom).decimals();
            decimalsTo = IERC20Metadata(tokenTo).decimals();
            rate = balanceOfTokenTo.mul(1e18).div(balanceOfTokenFrom);
        }
        // version = 632 : balancer v3 stable pool
        else if(ver == 632) {
            address vaultAddress = IStablePoolV3(poolAddress).getVault();
            (address[] memory tokens) = IVaultV3(vaultAddress).getPoolTokens(poolAddress);
            (, uint256[] memory tokenRates) = IVaultV3(vaultAddress).getPoolTokenRates(poolAddress); 
            uint256 rateFrom = 1;
            uint256 rateTo = 1;
            for(uint8 i = 0; i < tokens.length; i++ ) {
                if(tokenFrom == tokens[i]) {
                    rateFrom = tokenRates[i];
                }
                if(tokenTo == tokens[i]) {
                    rateTo = tokenRates[i];
                }
            }
            rate = rateFrom.mul(1e18).div(rateTo);
            decimalsFrom = 18;
            decimalsTo = 18;
        }
        // version = 633 : balancer v2 Gyro E-CLP pool
        else if(ver == 633) {
             address vaultAddress = IGyroECLPPoolV3(poolAddress).getVault();
            (address[] memory tokens) = IVaultV3(vaultAddress).getPoolTokens(poolAddress);
            (, uint256[] memory tokenRates) = IVaultV3(vaultAddress).getPoolTokenRates(poolAddress); 
            uint256 rateFrom = 1;
            uint256 rateTo = 1;
            for(uint8 i = 0; i < tokens.length; i++ ) {
                if(tokenFrom == tokens[i]) {
                    rateFrom = tokenRates[i];
                }
                if(tokenTo == tokens[i]) {
                    rateTo = tokenRates[i];
                }
            }
            rate = rateFrom.mul(1e18).div(rateTo);
            decimalsFrom = 18;
            decimalsTo = 18;
        }
        // version = 7 : Traderjoe V2.2 with sell = 1 
        // (ver=71 : sell=10^(-4)) 
        // (ver=72 : sell=10^(-2)) 
        // (ver=73 : sell=10^(2)) 
        // (ver=74 : sell=10^(4)) 
        // (ver=75 : sell=10^(6)) 
        else if(ver == 7 || ver == 71 || ver == 72 || ver == 73 || ver == 74 || ver == 75) {
            address token0 = ITraderjoeV2_2Pool(poolAddress).getTokenX();
            address token1 = ITraderjoeV2_2Pool(poolAddress).getTokenY();

            if(tokenFrom == token0) {
                decimalsFrom = IERC20Metadata(token0).decimals();
                decimalsTo = IERC20Metadata(token1).decimals();
                uint128 amountIn = uint128(_getAmountIn(ver, decimalsFrom));
                (, uint128 amountOut, ) = ITraderjoeV2_2Pool(poolAddress).getSwapOut(amountIn, true);
                rate = amountOut.mul(1e18).div(amountIn);
            } else {
                decimalsFrom = IERC20Metadata(token1).decimals();
                decimalsTo = IERC20Metadata(token0).decimals();
                uint128 amountIn = uint128(_getAmountIn(ver, decimalsFrom));
                (, uint128 amountOut, ) = ITraderjoeV2_2Pool(poolAddress).getSwapOut(amountIn, false);
                rate = amountOut.mul(1e18).div(amountIn);
            }
        }
        // version = 8 : Curve CryptoSwap, StableSwap, StableSwapMeta sell = 1 
        // (ver=81 : sell=10^(-4)) 
        // (ver=82 : sell=10^(-2)) 
        // (ver=83 : sell=10^(2)) 
        // (ver=84 : sell=10^(4)) 
        // (ver=85 : sell=10^(6)) 
        else if(ver == 8 || ver == 81 || ver == 82 || ver == 83 || ver == 84 || ver == 85) {
            ICurveProvider curveProvider;
            if(block.chainid == 324) {
                curveProvider = ICurveProvider(_curveAddressProviderForZksync);
            } else {
                curveProvider = ICurveProvider(_curveAddressProvider);
            }
            ICurveMetaregistry curveMetaregistry = ICurveMetaregistry(curveProvider.get_address(7));
            int128 i;
            int128 j;
            bool isUnderlying = false;
            (i, j, isUnderlying) = curveMetaregistry.get_coin_indices(poolAddress, tokenFrom, tokenTo);
            uint8 poolType = _getCurvePoolType(poolAddress);
            bytes4 selector;
            if (poolType == 0 && isUnderlying) {
                selector = ICurveStableSwapMeta.get_dy_underlying.selector;
            } else if (poolType == 0 && !isUnderlying) {
                selector = ICurveStableSwap.get_dy.selector;
            } else {
                selector = ICurveCryptoSwap.get_dy.selector;
            }
            
            if(tokenFrom == _ETH) {
                decimalsFrom = 18;
            } else {
                decimalsFrom = IERC20Metadata(tokenFrom).decimals();
            }
            if(tokenTo == _ETH) {
                decimalsTo = 18;
            } else {
                decimalsTo = IERC20Metadata(tokenTo).decimals();
            }
            uint256 amountIn = _getAmountIn(ver, decimalsFrom);
            
            (bool success, bytes memory data) = poolAddress.staticcall(abi.encodeWithSelector(selector, uint128(i), uint128(j), amountIn));
            if (success && data.length >= 32) { // vyper could return redundant bytes
                uint256 amountOut = abi.decode(data, (uint256));
                if (amountOut > 0) {
                    //rate = amountOut * 1e18 / amountIn;
                    rate = amountOut.mul(1e18).div(amountIn);
                }
            }
        }
        // version = 9 : Dodoex v2 DVM & DSP with sell = 1 
        // (ver=91 : sell=10^(-4)) 
        // (ver=92 : sell=10^(-2)) 
        // (ver=93 : sell=10^(2)) 
        // (ver=94 : sell=10^(4)) 
        // (ver=95 : sell=10^(6)) 
        else if(ver == 9 || ver == 91 || ver == 92 || ver == 93 || ver == 94 || ver == 95) {
            address token0 = IDodoDVM(poolAddress)._BASE_TOKEN_();
            address token1 = IDodoDVM(poolAddress)._QUOTE_TOKEN_();

            if(tokenFrom == token0) {
                decimalsFrom = IERC20Metadata(token0).decimals();
                decimalsTo = IERC20Metadata(token1).decimals();
                uint256 amountIn = _getAmountIn(ver, decimalsFrom);
                (uint256 receiveQuoteAmount, ) = IDodoDVM(poolAddress).querySellBase(0xD692C31E5ec0d87D032ABC243c1eb2C9Ae204FeA, amountIn);
                rate = receiveQuoteAmount.mul(1e18).div(amountIn);
            } else {
                decimalsFrom = IERC20Metadata(token1).decimals();
                decimalsTo = IERC20Metadata(token0).decimals();
                uint256 amountIn = _getAmountIn(ver, decimalsFrom);
                (uint256 receiveBaseAmount, ) = IDodoDVM(poolAddress).querySellQuote(0xD692C31E5ec0d87D032ABC243c1eb2C9Ae204FeA, amountIn);
                rate = receiveBaseAmount.mul(1e18).div(amountIn);
            }
        }
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"tokenFrom","type":"address"},{"internalType":"address","name":"tokenTo","type":"address"},{"internalType":"address","name":"poolAddress","type":"address"},{"internalType":"uint32","name":"ver","type":"uint32"}],"name":"getRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"},{"internalType":"uint8","name":"decimalsFrom","type":"uint8"},{"internalType":"uint8","name":"decimalsTo","type":"uint8"}],"stateMutability":"view","type":"function"}]

608060405234801561000f575f80fd5b506146058061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063348967ff1461002d575b5f80fd5b610047600480360381019061004291906136d1565b61005f565b60405161005693929190613768565b60405180910390f35b5f805f60028463ffffffff16148061007d575060168463ffffffff16145b8061008e575060178463ffffffff16145b15610803575f805f8060028863ffffffff1603610224578873ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100ee573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061011291906137b1565b93508873ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561015d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061018191906137b1565b92508873ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156101cc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101f09190613833565b826dffffffffffffffffffffffffffff169250816dffffffffffffffffffffffffffff1691505080925081935050506105a7565b60168863ffffffff1603610413578873ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561027b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061029f91906137b1565b93508873ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061030e91906137b1565b92508873ffffffffffffffffffffffffffffffffffffffff1663443cb4bc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610359573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061037d9190613883565b6dffffffffffffffffffffffffffff1691508873ffffffffffffffffffffffffffffffffffffffff16635a76f25e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103d8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103fc9190613883565b6dffffffffffffffffffffffffffff1690506105a6565b60178863ffffffff16036105a5578873ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061048e91906137b1565b93508873ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104fd91906137b1565b92508873ffffffffffffffffffffffffffffffffffffffff1663d66940276040518163ffffffff1660e01b815260040160a060405180830381865afa158015610548573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061056c91906138d8565b909192935090919250826dffffffffffffffffffffffffffff169250816dffffffffffffffffffffffffffff1691505080925081935050505b5b5b8a73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036106ec578373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610623573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106479190613979565b95508273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610692573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106b69190613979565b94506106e5826106d7670de0b6b3a7640000846131f290919063ffffffff16565b61326990919063ffffffff16565b96506107fa565b8273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610735573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107599190613979565b95508373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c89190613979565b94506107f7816107e9670de0b6b3a7640000856131f290919063ffffffff16565b61326990919063ffffffff16565b96505b505050506131e8565b60018463ffffffff160361090f578673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561085a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087e9190613979565b9150601290508473ffffffffffffffffffffffffffffffffffffffff166395b68fe783600a6108ad9190613b00565b6040518263ffffffff1660e01b81526004016108c99190613b4a565b602060405180830381865afa1580156108e4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109089190613b63565b92506131e7565b60038463ffffffff1603610ce2575f8573ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610967573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061098b91906137b1565b90505f8673ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109fb91906137b1565b90505f8773ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a47573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a6b9190613bb8565b73ffffffffffffffffffffffffffffffffffffffff1690508973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610bc2578273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aff573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b239190613979565b94508173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b6e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b929190613979565b9350606081606083670de0b6b3a7640000610bad9190613be3565b901c610bb99190613be3565b901c9550610cda565b8173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c0b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c2f9190613979565b94508273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9e9190613979565b935080817f0de0b6b3a7640000000000000000000000000000000000000000000000000000610ccd9190613c51565b610cd79190613c51565b95505b5050506131e6565b60048463ffffffff16036110b5575f8573ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d3a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d5e91906137b1565b90505f8673ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610daa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dce91906137b1565b90505f8773ffffffffffffffffffffffffffffffffffffffff1663e76c01e46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e1a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e3e9190613bb8565b73ffffffffffffffffffffffffffffffffffffffff1690508973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f95578273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ed2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ef69190613979565b94508173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f41573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f659190613979565b9350606081606083670de0b6b3a7640000610f809190613be3565b901c610f8c9190613be3565b901c95506110ad565b8173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fde573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110029190613979565b94508273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561104d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110719190613979565b935080817f0de0b6b3a76400000000000000000000000000000000000000000000000000006110a09190613c51565b6110aa9190613c51565b95505b5050506131e5565b61026d8463ffffffff160361154a575f8573ffffffffffffffffffffffffffffffffffffffff16638d928af86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561110e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061113291906137b1565b90505f8673ffffffffffffffffffffffffffffffffffffffff166338fff2d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561117e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111a29190613cb4565b90505f8773ffffffffffffffffffffffffffffffffffffffff1663f89f27ed6040518163ffffffff1660e01b81526004015f60405180830381865afa1580156111ed573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906112159190613e2f565b90505f808473ffffffffffffffffffffffffffffffffffffffff1663f94d4668856040518263ffffffff1660e01b81526004016112529190613e85565b5f60405180830381865afa15801561126c573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906112949190613f5e565b50915091505f805f5b84518160ff161015611430578e73ffffffffffffffffffffffffffffffffffffffff16858260ff16815181106112d6576112d5613fe6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361136357611360868260ff168151811061131257611311613fe6565b5b6020026020010151611352670de0b6b3a7640000878560ff168151811061133c5761133b613fe6565b5b60200260200101516131f290919063ffffffff16565b61326990919063ffffffff16565b92505b8d73ffffffffffffffffffffffffffffffffffffffff16858260ff16815181106113905761138f613fe6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361141d5761141a868260ff16815181106113cc576113cb613fe6565b5b602002602001015161140c670de0b6b3a7640000878560ff16815181106113f6576113f5613fe6565b5b60200260200101516131f290919063ffffffff16565b61326990919063ffffffff16565b91505b808061142890614013565b91505061129d565b508d73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561147a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061149e9190613979565b98508c73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061150d9190613979565b975061153c8261152e670de0b6b3a7640000846131f290919063ffffffff16565b61326990919063ffffffff16565b9950505050505050506131e4565b61026e8463ffffffff160361168d575f8573ffffffffffffffffffffffffffffffffffffffff166354dea00a896040518263ffffffff1660e01b8152600401611593919061404a565b602060405180830381865afa1580156115ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115d29190613b63565b90505f8673ffffffffffffffffffffffffffffffffffffffff166354dea00a896040518263ffffffff1660e01b815260040161160e919061404a565b602060405180830381865afa158015611629573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061164d9190613b63565b905061167c8161166e670de0b6b3a7640000856131f290919063ffffffff16565b61326990919063ffffffff16565b9450601293506012925050506131e3565b61026f8463ffffffff16036118e6578473ffffffffffffffffffffffffffffffffffffffff166398d5fdca6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116e5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117099190613b63565b92505f8573ffffffffffffffffffffffffffffffffffffffff16638d928af86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611755573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061177991906137b1565b90505f8673ffffffffffffffffffffffffffffffffffffffff166338fff2d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117e99190613cb4565b90505f8273ffffffffffffffffffffffffffffffffffffffff1663f94d4668836040518263ffffffff1660e01b81526004016118259190613e85565b5f60405180830381865afa15801561183f573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906118679190613f5e565b505090508873ffffffffffffffffffffffffffffffffffffffff16815f8151811061189557611894613fe6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16036118d657856ec097ce7bc90715b34b9f10000000006118d39190613c51565b95505b60129450601293505050506131e2565b6102778463ffffffff1603611d84575f8573ffffffffffffffffffffffffffffffffffffffff16638d928af86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561193f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061196391906137b1565b90505f8673ffffffffffffffffffffffffffffffffffffffff1663f89f27ed6040518163ffffffff1660e01b81526004015f60405180830381865afa1580156119ae573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906119d69190613e2f565b90505f8273ffffffffffffffffffffffffffffffffffffffff1663ca4f2803896040518263ffffffff1660e01b8152600401611a12919061404a565b5f60405180830381865afa158015611a2c573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611a549190614063565b90505f8373ffffffffffffffffffffffffffffffffffffffff1663535cfd8a8a6040518263ffffffff1660e01b8152600401611a90919061404a565b5f60405180830381865afa158015611aaa573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611ad29190613e2f565b90505f805f5b84518160ff161015611c6b578d73ffffffffffffffffffffffffffffffffffffffff16858260ff1681518110611b1157611b10613fe6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603611b9e57611b9b868260ff1681518110611b4d57611b4c613fe6565b5b6020026020010151611b8d670de0b6b3a7640000878560ff1681518110611b7757611b76613fe6565b5b60200260200101516131f290919063ffffffff16565b61326990919063ffffffff16565b92505b8c73ffffffffffffffffffffffffffffffffffffffff16858260ff1681518110611bcb57611bca613fe6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603611c5857611c55868260ff1681518110611c0757611c06613fe6565b5b6020026020010151611c47670de0b6b3a7640000878560ff1681518110611c3157611c30613fe6565b5b60200260200101516131f290919063ffffffff16565b61326990919063ffffffff16565b91505b8080611c6390614013565b915050611ad8565b508c73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cb5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cd99190613979565b97508b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d24573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d489190613979565b9650611d7782611d69670de0b6b3a7640000846131f290919063ffffffff16565b61326990919063ffffffff16565b98505050505050506131e1565b6102788463ffffffff160361204f575f8573ffffffffffffffffffffffffffffffffffffffff16638d928af86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ddd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e0191906137b1565b90505f8173ffffffffffffffffffffffffffffffffffffffff1663ca4f2803886040518263ffffffff1660e01b8152600401611e3d919061404a565b5f60405180830381865afa158015611e57573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611e7f9190614063565b90505f8273ffffffffffffffffffffffffffffffffffffffff16637e361bde896040518263ffffffff1660e01b8152600401611ebb919061404a565b5f60405180830381865afa158015611ed5573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611efd91906140aa565b9150505f600190505f600190505f5b84518160ff16101561200d57848160ff1681518110611f2e57611f2d613fe6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff1603611f8957838160ff1681518110611f7e57611f7d613fe6565b5b602002602001015192505b848160ff1681518110611f9f57611f9e613fe6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1603611ffa57838160ff1681518110611fef57611fee613fe6565b5b602002602001015191505b808061200590614013565b915050611f0c565b5061203b8161202d670de0b6b3a7640000856131f290919063ffffffff16565b61326990919063ffffffff16565b9750601296506012955050505050506131e0565b6102798463ffffffff160361231a575f8573ffffffffffffffffffffffffffffffffffffffff16638d928af86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120a8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120cc91906137b1565b90505f8173ffffffffffffffffffffffffffffffffffffffff1663ca4f2803886040518263ffffffff1660e01b8152600401612108919061404a565b5f60405180830381865afa158015612122573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061214a9190614063565b90505f8273ffffffffffffffffffffffffffffffffffffffff16637e361bde896040518263ffffffff1660e01b8152600401612186919061404a565b5f60405180830381865afa1580156121a0573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906121c891906140aa565b9150505f600190505f600190505f5b84518160ff1610156122d857848160ff16815181106121f9576121f8613fe6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff160361225457838160ff168151811061224957612248613fe6565b5b602002602001015192505b848160ff168151811061226a57612269613fe6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff16036122c557838160ff16815181106122ba576122b9613fe6565b5b602002602001015191505b80806122d090614013565b9150506121d7565b50612306816122f8670de0b6b3a7640000856131f290919063ffffffff16565b61326990919063ffffffff16565b9750601296506012955050505050506131df565b60078463ffffffff161480612335575060478463ffffffff16145b80612346575060488463ffffffff16145b80612357575060498463ffffffff16145b806123685750604a8463ffffffff16145b806123795750604b8463ffffffff16145b1561281d575f8573ffffffffffffffffffffffffffffffffffffffff166305e8746d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ec91906137b1565b90505f8673ffffffffffffffffffffffffffffffffffffffff1663da10610c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612438573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061245c91906137b1565b90508173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1603612656578173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124da573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124fe9190613979565b93508073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612549573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061256d9190613979565b92505f61257a87866132c0565b90505f8873ffffffffffffffffffffffffffffffffffffffff1663e77366f88360016040518363ffffffff1660e01b81526004016125b9929190614164565b606060405180830381865afa1580156125d4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125f891906141b5565b5091505061264d826fffffffffffffffffffffffffffffffff1661263f670de0b6b3a7640000846fffffffffffffffffffffffffffffffff166131f290919063ffffffff16565b61326990919063ffffffff16565b96505050612816565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561269f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126c39190613979565b93508173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561270e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127329190613979565b92505f61273f87866132c0565b90505f8873ffffffffffffffffffffffffffffffffffffffff1663e77366f8835f6040518363ffffffff1660e01b815260040161277d929190614164565b606060405180830381865afa158015612798573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127bc91906141b5565b50915050612811826fffffffffffffffffffffffffffffffff16612803670de0b6b3a7640000846fffffffffffffffffffffffffffffffff166131f290919063ffffffff16565b61326990919063ffffffff16565b965050505b50506131de565b60088463ffffffff161480612838575060518463ffffffff16145b80612849575060528463ffffffff16145b8061285a575060538463ffffffff16145b8061286b575060548463ffffffff16145b8061287c575060558463ffffffff16145b15612d02575f61014446036128a7577354a5a69e17aa6eb89d77aa3828e38c9eb4ff263d90506128bf565b735ffe7fb82894076ecb99a30d6a32e969e6e35e9890505b5f8173ffffffffffffffffffffffffffffffffffffffff1663493f4f7460076040518263ffffffff1660e01b81526004016128fa9190614247565b602060405180830381865afa158015612915573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061293991906137b1565b90505f805f8373ffffffffffffffffffffffffffffffffffffffff1663eb85226d8b8e8e6040518463ffffffff1660e01b815260040161297b93929190614260565b606060405180830381865afa158015612996573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129ba91906142f5565b8093508194508295505050505f6129d08b61343b565b90505f808260ff161480156129e25750825b156129f6576307211ef760e01b9050612a26565b5f8260ff16148015612a06575082155b15612a1a57635e0d443f60e01b9050612a25565b63556d6e9f60e01b90505b5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1603612a765760129850612ae6565b8d73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612abf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ae39190613979565b98505b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff1603612b365760129750612ba6565b8c73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b7f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ba39190613979565b97505b5f612bb18c8b6132c0565b90505f808e73ffffffffffffffffffffffffffffffffffffffff1684898986604051602401612be293929190614345565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051612c4c91906143e6565b5f60405180830381855afa9150503d805f8114612c84576040519150601f19603f3d011682016040523d82523d5f602084013e612c89565b606091505b5091509150818015612c9d57506020815110155b15612cf3575f81806020019051810190612cb79190613b63565b90505f811115612cf157612cee84612ce0670de0b6b3a7640000846131f290919063ffffffff16565b61326990919063ffffffff16565b9d505b505b505050505050505050506131dd565b60098463ffffffff161480612d1d5750605b8463ffffffff16145b80612d2e5750605c8463ffffffff16145b80612d3f5750605d8463ffffffff16145b80612d505750605e8463ffffffff16145b80612d615750605f8463ffffffff16145b156131dc575f8573ffffffffffffffffffffffffffffffffffffffff16634a248d2a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612db0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612dd491906137b1565b90505f8673ffffffffffffffffffffffffffffffffffffffff1663d4b970466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e20573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e4491906137b1565b90508173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff160361302b578173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ec2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ee69190613979565b93508073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f31573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f559190613979565b92505f612f6287866132c0565b90505f8873ffffffffffffffffffffffffffffffffffffffff166379a0487673d692c31e5ec0d87d032abc243c1eb2c9ae204fea846040518363ffffffff1660e01b8152600401612fb49291906143fc565b6040805180830381865afa158015612fce573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ff29190614423565b50905061302282613014670de0b6b3a7640000846131f290919063ffffffff16565b61326990919063ffffffff16565b965050506131d9565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613074573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130989190613979565b93508173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130e3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131079190613979565b92505f61311487866132c0565b90505f8873ffffffffffffffffffffffffffffffffffffffff166366410a2173d692c31e5ec0d87d032abc243c1eb2c9ae204fea846040518363ffffffff1660e01b81526004016131669291906143fc565b6040805180830381865afa158015613180573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131a49190614423565b5090506131d4826131c6670de0b6b3a7640000846131f290919063ffffffff16565b61326990919063ffffffff16565b965050505b50505b5b5b5b5b5b5b5b5b5b5b5b5b9450945094915050565b5f808303613202575f9050613263565b5f828461320f9190613be3565b905082848261321e9190613c51565b1461325e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613255906144e1565b60405180910390fd5b809150505b92915050565b5f8082116132ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a390614549565b60405180910390fd5b81836132b89190613c51565b905092915050565b5f806004905060078463ffffffff1614806132e1575060088463ffffffff16145b806132f2575060098463ffffffff16145b156132fc57600490505b60478463ffffffff161480613317575060518463ffffffff16145b806133285750605b8463ffffffff16145b15613331575f90505b60488463ffffffff16148061334c575060528463ffffffff16145b8061335d5750605c8463ffffffff16145b1561336757600290505b60498463ffffffff161480613382575060538463ffffffff16145b806133935750605d8463ffffffff16145b1561339d57600690505b604a8463ffffffff1614806133b8575060548463ffffffff16145b806133c95750605e8463ffffffff16145b156133d357600890505b604b8463ffffffff1614806133ee575060558463ffffffff16145b806133ff5750605f8463ffffffff16145b1561340957600a90505b5f600482856134189190614567565b613422919061459b565b600a61342e9190613b00565b9050809250505092915050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff166349fe9e7760e01b604051602401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516134cd91906143e6565b5f60405180830381855afa9150503d805f8114613505576040519150601f19603f3d011682016040523d82523d5f602084013e61350a565b606091505b509150915081801561351e57506020815110155b1561352e57600192505050613628565b8373ffffffffffffffffffffffffffffffffffffffff1663095a0fc660e01b604051602401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516135bd91906143e6565b5f60405180830381855afa9150503d805f81146135f5576040519150601f19603f3d011682016040523d82523d5f602084013e6135fa565b606091505b50809250819350505081801561361257506020815110155b1561362257600292505050613628565b5f925050505b919050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6136678261363e565b9050919050565b6136778161365d565b8114613681575f80fd5b50565b5f813590506136928161366e565b92915050565b5f63ffffffff82169050919050565b6136b081613698565b81146136ba575f80fd5b50565b5f813590506136cb816136a7565b92915050565b5f805f80608085870312156136e9576136e8613636565b5b5f6136f687828801613684565b945050602061370787828801613684565b935050604061371887828801613684565b9250506060613729878288016136bd565b91505092959194509250565b5f819050919050565b61374781613735565b82525050565b5f60ff82169050919050565b6137628161374d565b82525050565b5f60608201905061377b5f83018661373e565b6137886020830185613759565b6137956040830184613759565b949350505050565b5f815190506137ab8161366e565b92915050565b5f602082840312156137c6576137c5613636565b5b5f6137d38482850161379d565b91505092915050565b5f6dffffffffffffffffffffffffffff82169050919050565b6137fe816137dc565b8114613808575f80fd5b50565b5f81519050613819816137f5565b92915050565b5f8151905061382d816136a7565b92915050565b5f805f6060848603121561384a57613849613636565b5b5f6138578682870161380b565b93505060206138688682870161380b565b92505060406138798682870161381f565b9150509250925092565b5f6020828403121561389857613897613636565b5b5f6138a58482850161380b565b91505092915050565b6138b781613735565b81146138c1575f80fd5b50565b5f815190506138d2816138ae565b92915050565b5f805f805f60a086880312156138f1576138f0613636565b5b5f6138fe8882890161380b565b955050602061390f8882890161380b565b94505060406139208882890161380b565b93505060606139318882890161380b565b9250506080613942888289016138c4565b9150509295509295909350565b6139588161374d565b8114613962575f80fd5b50565b5f815190506139738161394f565b92915050565b5f6020828403121561398e5761398d613636565b5b5f61399b84828501613965565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115613a2657808604811115613a0257613a016139a4565b5b6001851615613a115780820291505b8081029050613a1f856139d1565b94506139e6565b94509492505050565b5f82613a3e5760019050613af9565b81613a4b575f9050613af9565b8160018114613a615760028114613a6b57613a9a565b6001915050613af9565b60ff841115613a7d57613a7c6139a4565b5b8360020a915084821115613a9457613a936139a4565b5b50613af9565b5060208310610133831016604e8410600b8410161715613acf5782820a905083811115613aca57613ac96139a4565b5b613af9565b613adc84848460016139dd565b92509050818404811115613af357613af26139a4565b5b81810290505b9392505050565b5f613b0a82613735565b9150613b158361374d565b9250613b427fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613a2f565b905092915050565b5f602082019050613b5d5f83018461373e565b92915050565b5f60208284031215613b7857613b77613636565b5b5f613b85848285016138c4565b91505092915050565b613b978161363e565b8114613ba1575f80fd5b50565b5f81519050613bb281613b8e565b92915050565b5f60208284031215613bcd57613bcc613636565b5b5f613bda84828501613ba4565b91505092915050565b5f613bed82613735565b9150613bf883613735565b9250828202613c0681613735565b91508282048414831517613c1d57613c1c6139a4565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613c5b82613735565b9150613c6683613735565b925082613c7657613c75613c24565b5b828204905092915050565b5f819050919050565b613c9381613c81565b8114613c9d575f80fd5b50565b5f81519050613cae81613c8a565b92915050565b5f60208284031215613cc957613cc8613636565b5b5f613cd684828501613ca0565b91505092915050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613d2982613ce3565b810181811067ffffffffffffffff82111715613d4857613d47613cf3565b5b80604052505050565b5f613d5a61362d565b9050613d668282613d20565b919050565b5f67ffffffffffffffff821115613d8557613d84613cf3565b5b602082029050602081019050919050565b5f80fd5b5f613dac613da784613d6b565b613d51565b90508083825260208201905060208402830185811115613dcf57613dce613d96565b5b835b81811015613df85780613de488826138c4565b845260208401935050602081019050613dd1565b5050509392505050565b5f82601f830112613e1657613e15613cdf565b5b8151613e26848260208601613d9a565b91505092915050565b5f60208284031215613e4457613e43613636565b5b5f82015167ffffffffffffffff811115613e6157613e6061363a565b5b613e6d84828501613e02565b91505092915050565b613e7f81613c81565b82525050565b5f602082019050613e985f830184613e76565b92915050565b5f67ffffffffffffffff821115613eb857613eb7613cf3565b5b602082029050602081019050919050565b5f613edb613ed684613e9e565b613d51565b90508083825260208201905060208402830185811115613efe57613efd613d96565b5b835b81811015613f275780613f13888261379d565b845260208401935050602081019050613f00565b5050509392505050565b5f82601f830112613f4557613f44613cdf565b5b8151613f55848260208601613ec9565b91505092915050565b5f805f60608486031215613f7557613f74613636565b5b5f84015167ffffffffffffffff811115613f9257613f9161363a565b5b613f9e86828701613f31565b935050602084015167ffffffffffffffff811115613fbf57613fbe61363a565b5b613fcb86828701613e02565b9250506040613fdc868287016138c4565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61401d8261374d565b915060ff82036140305761402f6139a4565b5b600182019050919050565b6140448161365d565b82525050565b5f60208201905061405d5f83018461403b565b92915050565b5f6020828403121561407857614077613636565b5b5f82015167ffffffffffffffff8111156140955761409461363a565b5b6140a184828501613f31565b91505092915050565b5f80604083850312156140c0576140bf613636565b5b5f83015167ffffffffffffffff8111156140dd576140dc61363a565b5b6140e985828601613e02565b925050602083015167ffffffffffffffff81111561410a5761410961363a565b5b61411685828601613e02565b9150509250929050565b5f6fffffffffffffffffffffffffffffffff82169050919050565b61414481614120565b82525050565b5f8115159050919050565b61415e8161414a565b82525050565b5f6040820190506141775f83018561413b565b6141846020830184614155565b9392505050565b61419481614120565b811461419e575f80fd5b50565b5f815190506141af8161418b565b92915050565b5f805f606084860312156141cc576141cb613636565b5b5f6141d9868287016141a1565b93505060206141ea868287016141a1565b92505060406141fb868287016141a1565b9150509250925092565b5f819050919050565b5f819050919050565b5f61423161422c61422784614205565b61420e565b613735565b9050919050565b61424181614217565b82525050565b5f60208201905061425a5f830184614238565b92915050565b5f6060820190506142735f83018661403b565b614280602083018561403b565b61428d604083018461403b565b949350505050565b5f81600f0b9050919050565b6142aa81614295565b81146142b4575f80fd5b50565b5f815190506142c5816142a1565b92915050565b6142d48161414a565b81146142de575f80fd5b50565b5f815190506142ef816142cb565b92915050565b5f805f6060848603121561430c5761430b613636565b5b5f614319868287016142b7565b935050602061432a868287016142b7565b925050604061433b868287016142e1565b9150509250925092565b5f6060820190506143585f83018661413b565b614365602083018561413b565b614372604083018461373e565b949350505050565b5f81519050919050565b5f81905092915050565b5f5b838110156143ab578082015181840152602081019050614390565b5f8484015250505050565b5f6143c08261437a565b6143ca8185614384565b93506143da81856020860161438e565b80840191505092915050565b5f6143f182846143b6565b915081905092915050565b5f60408201905061440f5f83018561403b565b61441c602083018461373e565b9392505050565b5f806040838503121561443957614438613636565b5b5f614446858286016138c4565b9250506020614457858286016138c4565b9150509250929050565b5f82825260208201905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6144cb602183614461565b91506144d682614471565b604082019050919050565b5f6020820190508181035f8301526144f8816144bf565b9050919050565b7f536166654d6174683a206469766973696f6e206279207a65726f0000000000005f82015250565b5f614533601a83614461565b915061453e826144ff565b602082019050919050565b5f6020820190508181035f83015261456081614527565b9050919050565b5f6145718261374d565b915061457c8361374d565b9250828201905060ff811115614595576145946139a4565b5b92915050565b5f6145a58261374d565b91506145b08361374d565b9250828203905060ff8111156145c9576145c86139a4565b5b9291505056fea2646970667358221220e11ffbf866ab8e503a6527822784605ee28dc3c767da4a75925085c28073267664736f6c63430008180033

Deployed Bytecode

0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063348967ff1461002d575b5f80fd5b610047600480360381019061004291906136d1565b61005f565b60405161005693929190613768565b60405180910390f35b5f805f60028463ffffffff16148061007d575060168463ffffffff16145b8061008e575060178463ffffffff16145b15610803575f805f8060028863ffffffff1603610224578873ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100ee573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061011291906137b1565b93508873ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561015d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061018191906137b1565b92508873ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156101cc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101f09190613833565b826dffffffffffffffffffffffffffff169250816dffffffffffffffffffffffffffff1691505080925081935050506105a7565b60168863ffffffff1603610413578873ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561027b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061029f91906137b1565b93508873ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061030e91906137b1565b92508873ffffffffffffffffffffffffffffffffffffffff1663443cb4bc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610359573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061037d9190613883565b6dffffffffffffffffffffffffffff1691508873ffffffffffffffffffffffffffffffffffffffff16635a76f25e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103d8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103fc9190613883565b6dffffffffffffffffffffffffffff1690506105a6565b60178863ffffffff16036105a5578873ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061048e91906137b1565b93508873ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104fd91906137b1565b92508873ffffffffffffffffffffffffffffffffffffffff1663d66940276040518163ffffffff1660e01b815260040160a060405180830381865afa158015610548573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061056c91906138d8565b909192935090919250826dffffffffffffffffffffffffffff169250816dffffffffffffffffffffffffffff1691505080925081935050505b5b5b8a73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036106ec578373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610623573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106479190613979565b95508273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610692573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106b69190613979565b94506106e5826106d7670de0b6b3a7640000846131f290919063ffffffff16565b61326990919063ffffffff16565b96506107fa565b8273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610735573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107599190613979565b95508373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c89190613979565b94506107f7816107e9670de0b6b3a7640000856131f290919063ffffffff16565b61326990919063ffffffff16565b96505b505050506131e8565b60018463ffffffff160361090f578673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561085a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087e9190613979565b9150601290508473ffffffffffffffffffffffffffffffffffffffff166395b68fe783600a6108ad9190613b00565b6040518263ffffffff1660e01b81526004016108c99190613b4a565b602060405180830381865afa1580156108e4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109089190613b63565b92506131e7565b60038463ffffffff1603610ce2575f8573ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610967573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061098b91906137b1565b90505f8673ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109fb91906137b1565b90505f8773ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a47573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a6b9190613bb8565b73ffffffffffffffffffffffffffffffffffffffff1690508973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610bc2578273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aff573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b239190613979565b94508173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b6e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b929190613979565b9350606081606083670de0b6b3a7640000610bad9190613be3565b901c610bb99190613be3565b901c9550610cda565b8173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c0b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c2f9190613979565b94508273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9e9190613979565b935080817f0de0b6b3a7640000000000000000000000000000000000000000000000000000610ccd9190613c51565b610cd79190613c51565b95505b5050506131e6565b60048463ffffffff16036110b5575f8573ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d3a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d5e91906137b1565b90505f8673ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610daa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dce91906137b1565b90505f8773ffffffffffffffffffffffffffffffffffffffff1663e76c01e46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e1a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e3e9190613bb8565b73ffffffffffffffffffffffffffffffffffffffff1690508973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f95578273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ed2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ef69190613979565b94508173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f41573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f659190613979565b9350606081606083670de0b6b3a7640000610f809190613be3565b901c610f8c9190613be3565b901c95506110ad565b8173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fde573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110029190613979565b94508273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561104d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110719190613979565b935080817f0de0b6b3a76400000000000000000000000000000000000000000000000000006110a09190613c51565b6110aa9190613c51565b95505b5050506131e5565b61026d8463ffffffff160361154a575f8573ffffffffffffffffffffffffffffffffffffffff16638d928af86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561110e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061113291906137b1565b90505f8673ffffffffffffffffffffffffffffffffffffffff166338fff2d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561117e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111a29190613cb4565b90505f8773ffffffffffffffffffffffffffffffffffffffff1663f89f27ed6040518163ffffffff1660e01b81526004015f60405180830381865afa1580156111ed573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906112159190613e2f565b90505f808473ffffffffffffffffffffffffffffffffffffffff1663f94d4668856040518263ffffffff1660e01b81526004016112529190613e85565b5f60405180830381865afa15801561126c573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906112949190613f5e565b50915091505f805f5b84518160ff161015611430578e73ffffffffffffffffffffffffffffffffffffffff16858260ff16815181106112d6576112d5613fe6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361136357611360868260ff168151811061131257611311613fe6565b5b6020026020010151611352670de0b6b3a7640000878560ff168151811061133c5761133b613fe6565b5b60200260200101516131f290919063ffffffff16565b61326990919063ffffffff16565b92505b8d73ffffffffffffffffffffffffffffffffffffffff16858260ff16815181106113905761138f613fe6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361141d5761141a868260ff16815181106113cc576113cb613fe6565b5b602002602001015161140c670de0b6b3a7640000878560ff16815181106113f6576113f5613fe6565b5b60200260200101516131f290919063ffffffff16565b61326990919063ffffffff16565b91505b808061142890614013565b91505061129d565b508d73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561147a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061149e9190613979565b98508c73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061150d9190613979565b975061153c8261152e670de0b6b3a7640000846131f290919063ffffffff16565b61326990919063ffffffff16565b9950505050505050506131e4565b61026e8463ffffffff160361168d575f8573ffffffffffffffffffffffffffffffffffffffff166354dea00a896040518263ffffffff1660e01b8152600401611593919061404a565b602060405180830381865afa1580156115ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115d29190613b63565b90505f8673ffffffffffffffffffffffffffffffffffffffff166354dea00a896040518263ffffffff1660e01b815260040161160e919061404a565b602060405180830381865afa158015611629573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061164d9190613b63565b905061167c8161166e670de0b6b3a7640000856131f290919063ffffffff16565b61326990919063ffffffff16565b9450601293506012925050506131e3565b61026f8463ffffffff16036118e6578473ffffffffffffffffffffffffffffffffffffffff166398d5fdca6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116e5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117099190613b63565b92505f8573ffffffffffffffffffffffffffffffffffffffff16638d928af86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611755573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061177991906137b1565b90505f8673ffffffffffffffffffffffffffffffffffffffff166338fff2d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117e99190613cb4565b90505f8273ffffffffffffffffffffffffffffffffffffffff1663f94d4668836040518263ffffffff1660e01b81526004016118259190613e85565b5f60405180830381865afa15801561183f573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906118679190613f5e565b505090508873ffffffffffffffffffffffffffffffffffffffff16815f8151811061189557611894613fe6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16036118d657856ec097ce7bc90715b34b9f10000000006118d39190613c51565b95505b60129450601293505050506131e2565b6102778463ffffffff1603611d84575f8573ffffffffffffffffffffffffffffffffffffffff16638d928af86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561193f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061196391906137b1565b90505f8673ffffffffffffffffffffffffffffffffffffffff1663f89f27ed6040518163ffffffff1660e01b81526004015f60405180830381865afa1580156119ae573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906119d69190613e2f565b90505f8273ffffffffffffffffffffffffffffffffffffffff1663ca4f2803896040518263ffffffff1660e01b8152600401611a12919061404a565b5f60405180830381865afa158015611a2c573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611a549190614063565b90505f8373ffffffffffffffffffffffffffffffffffffffff1663535cfd8a8a6040518263ffffffff1660e01b8152600401611a90919061404a565b5f60405180830381865afa158015611aaa573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611ad29190613e2f565b90505f805f5b84518160ff161015611c6b578d73ffffffffffffffffffffffffffffffffffffffff16858260ff1681518110611b1157611b10613fe6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603611b9e57611b9b868260ff1681518110611b4d57611b4c613fe6565b5b6020026020010151611b8d670de0b6b3a7640000878560ff1681518110611b7757611b76613fe6565b5b60200260200101516131f290919063ffffffff16565b61326990919063ffffffff16565b92505b8c73ffffffffffffffffffffffffffffffffffffffff16858260ff1681518110611bcb57611bca613fe6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603611c5857611c55868260ff1681518110611c0757611c06613fe6565b5b6020026020010151611c47670de0b6b3a7640000878560ff1681518110611c3157611c30613fe6565b5b60200260200101516131f290919063ffffffff16565b61326990919063ffffffff16565b91505b8080611c6390614013565b915050611ad8565b508c73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cb5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cd99190613979565b97508b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d24573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d489190613979565b9650611d7782611d69670de0b6b3a7640000846131f290919063ffffffff16565b61326990919063ffffffff16565b98505050505050506131e1565b6102788463ffffffff160361204f575f8573ffffffffffffffffffffffffffffffffffffffff16638d928af86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ddd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e0191906137b1565b90505f8173ffffffffffffffffffffffffffffffffffffffff1663ca4f2803886040518263ffffffff1660e01b8152600401611e3d919061404a565b5f60405180830381865afa158015611e57573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611e7f9190614063565b90505f8273ffffffffffffffffffffffffffffffffffffffff16637e361bde896040518263ffffffff1660e01b8152600401611ebb919061404a565b5f60405180830381865afa158015611ed5573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611efd91906140aa565b9150505f600190505f600190505f5b84518160ff16101561200d57848160ff1681518110611f2e57611f2d613fe6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff1603611f8957838160ff1681518110611f7e57611f7d613fe6565b5b602002602001015192505b848160ff1681518110611f9f57611f9e613fe6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1603611ffa57838160ff1681518110611fef57611fee613fe6565b5b602002602001015191505b808061200590614013565b915050611f0c565b5061203b8161202d670de0b6b3a7640000856131f290919063ffffffff16565b61326990919063ffffffff16565b9750601296506012955050505050506131e0565b6102798463ffffffff160361231a575f8573ffffffffffffffffffffffffffffffffffffffff16638d928af86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120a8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120cc91906137b1565b90505f8173ffffffffffffffffffffffffffffffffffffffff1663ca4f2803886040518263ffffffff1660e01b8152600401612108919061404a565b5f60405180830381865afa158015612122573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061214a9190614063565b90505f8273ffffffffffffffffffffffffffffffffffffffff16637e361bde896040518263ffffffff1660e01b8152600401612186919061404a565b5f60405180830381865afa1580156121a0573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906121c891906140aa565b9150505f600190505f600190505f5b84518160ff1610156122d857848160ff16815181106121f9576121f8613fe6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff160361225457838160ff168151811061224957612248613fe6565b5b602002602001015192505b848160ff168151811061226a57612269613fe6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff16036122c557838160ff16815181106122ba576122b9613fe6565b5b602002602001015191505b80806122d090614013565b9150506121d7565b50612306816122f8670de0b6b3a7640000856131f290919063ffffffff16565b61326990919063ffffffff16565b9750601296506012955050505050506131df565b60078463ffffffff161480612335575060478463ffffffff16145b80612346575060488463ffffffff16145b80612357575060498463ffffffff16145b806123685750604a8463ffffffff16145b806123795750604b8463ffffffff16145b1561281d575f8573ffffffffffffffffffffffffffffffffffffffff166305e8746d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ec91906137b1565b90505f8673ffffffffffffffffffffffffffffffffffffffff1663da10610c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612438573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061245c91906137b1565b90508173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1603612656578173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124da573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124fe9190613979565b93508073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612549573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061256d9190613979565b92505f61257a87866132c0565b90505f8873ffffffffffffffffffffffffffffffffffffffff1663e77366f88360016040518363ffffffff1660e01b81526004016125b9929190614164565b606060405180830381865afa1580156125d4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125f891906141b5565b5091505061264d826fffffffffffffffffffffffffffffffff1661263f670de0b6b3a7640000846fffffffffffffffffffffffffffffffff166131f290919063ffffffff16565b61326990919063ffffffff16565b96505050612816565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561269f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126c39190613979565b93508173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561270e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127329190613979565b92505f61273f87866132c0565b90505f8873ffffffffffffffffffffffffffffffffffffffff1663e77366f8835f6040518363ffffffff1660e01b815260040161277d929190614164565b606060405180830381865afa158015612798573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127bc91906141b5565b50915050612811826fffffffffffffffffffffffffffffffff16612803670de0b6b3a7640000846fffffffffffffffffffffffffffffffff166131f290919063ffffffff16565b61326990919063ffffffff16565b965050505b50506131de565b60088463ffffffff161480612838575060518463ffffffff16145b80612849575060528463ffffffff16145b8061285a575060538463ffffffff16145b8061286b575060548463ffffffff16145b8061287c575060558463ffffffff16145b15612d02575f61014446036128a7577354a5a69e17aa6eb89d77aa3828e38c9eb4ff263d90506128bf565b735ffe7fb82894076ecb99a30d6a32e969e6e35e9890505b5f8173ffffffffffffffffffffffffffffffffffffffff1663493f4f7460076040518263ffffffff1660e01b81526004016128fa9190614247565b602060405180830381865afa158015612915573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061293991906137b1565b90505f805f8373ffffffffffffffffffffffffffffffffffffffff1663eb85226d8b8e8e6040518463ffffffff1660e01b815260040161297b93929190614260565b606060405180830381865afa158015612996573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129ba91906142f5565b8093508194508295505050505f6129d08b61343b565b90505f808260ff161480156129e25750825b156129f6576307211ef760e01b9050612a26565b5f8260ff16148015612a06575082155b15612a1a57635e0d443f60e01b9050612a25565b63556d6e9f60e01b90505b5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1603612a765760129850612ae6565b8d73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612abf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ae39190613979565b98505b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff1603612b365760129750612ba6565b8c73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b7f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ba39190613979565b97505b5f612bb18c8b6132c0565b90505f808e73ffffffffffffffffffffffffffffffffffffffff1684898986604051602401612be293929190614345565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051612c4c91906143e6565b5f60405180830381855afa9150503d805f8114612c84576040519150601f19603f3d011682016040523d82523d5f602084013e612c89565b606091505b5091509150818015612c9d57506020815110155b15612cf3575f81806020019051810190612cb79190613b63565b90505f811115612cf157612cee84612ce0670de0b6b3a7640000846131f290919063ffffffff16565b61326990919063ffffffff16565b9d505b505b505050505050505050506131dd565b60098463ffffffff161480612d1d5750605b8463ffffffff16145b80612d2e5750605c8463ffffffff16145b80612d3f5750605d8463ffffffff16145b80612d505750605e8463ffffffff16145b80612d615750605f8463ffffffff16145b156131dc575f8573ffffffffffffffffffffffffffffffffffffffff16634a248d2a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612db0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612dd491906137b1565b90505f8673ffffffffffffffffffffffffffffffffffffffff1663d4b970466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e20573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e4491906137b1565b90508173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff160361302b578173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ec2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ee69190613979565b93508073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f31573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f559190613979565b92505f612f6287866132c0565b90505f8873ffffffffffffffffffffffffffffffffffffffff166379a0487673d692c31e5ec0d87d032abc243c1eb2c9ae204fea846040518363ffffffff1660e01b8152600401612fb49291906143fc565b6040805180830381865afa158015612fce573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ff29190614423565b50905061302282613014670de0b6b3a7640000846131f290919063ffffffff16565b61326990919063ffffffff16565b965050506131d9565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613074573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130989190613979565b93508173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130e3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131079190613979565b92505f61311487866132c0565b90505f8873ffffffffffffffffffffffffffffffffffffffff166366410a2173d692c31e5ec0d87d032abc243c1eb2c9ae204fea846040518363ffffffff1660e01b81526004016131669291906143fc565b6040805180830381865afa158015613180573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131a49190614423565b5090506131d4826131c6670de0b6b3a7640000846131f290919063ffffffff16565b61326990919063ffffffff16565b965050505b50505b5b5b5b5b5b5b5b5b5b5b5b5b9450945094915050565b5f808303613202575f9050613263565b5f828461320f9190613be3565b905082848261321e9190613c51565b1461325e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613255906144e1565b60405180910390fd5b809150505b92915050565b5f8082116132ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a390614549565b60405180910390fd5b81836132b89190613c51565b905092915050565b5f806004905060078463ffffffff1614806132e1575060088463ffffffff16145b806132f2575060098463ffffffff16145b156132fc57600490505b60478463ffffffff161480613317575060518463ffffffff16145b806133285750605b8463ffffffff16145b15613331575f90505b60488463ffffffff16148061334c575060528463ffffffff16145b8061335d5750605c8463ffffffff16145b1561336757600290505b60498463ffffffff161480613382575060538463ffffffff16145b806133935750605d8463ffffffff16145b1561339d57600690505b604a8463ffffffff1614806133b8575060548463ffffffff16145b806133c95750605e8463ffffffff16145b156133d357600890505b604b8463ffffffff1614806133ee575060558463ffffffff16145b806133ff5750605f8463ffffffff16145b1561340957600a90505b5f600482856134189190614567565b613422919061459b565b600a61342e9190613b00565b9050809250505092915050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff166349fe9e7760e01b604051602401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516134cd91906143e6565b5f60405180830381855afa9150503d805f8114613505576040519150601f19603f3d011682016040523d82523d5f602084013e61350a565b606091505b509150915081801561351e57506020815110155b1561352e57600192505050613628565b8373ffffffffffffffffffffffffffffffffffffffff1663095a0fc660e01b604051602401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516135bd91906143e6565b5f60405180830381855afa9150503d805f81146135f5576040519150601f19603f3d011682016040523d82523d5f602084013e6135fa565b606091505b50809250819350505081801561361257506020815110155b1561362257600292505050613628565b5f925050505b919050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6136678261363e565b9050919050565b6136778161365d565b8114613681575f80fd5b50565b5f813590506136928161366e565b92915050565b5f63ffffffff82169050919050565b6136b081613698565b81146136ba575f80fd5b50565b5f813590506136cb816136a7565b92915050565b5f805f80608085870312156136e9576136e8613636565b5b5f6136f687828801613684565b945050602061370787828801613684565b935050604061371887828801613684565b9250506060613729878288016136bd565b91505092959194509250565b5f819050919050565b61374781613735565b82525050565b5f60ff82169050919050565b6137628161374d565b82525050565b5f60608201905061377b5f83018661373e565b6137886020830185613759565b6137956040830184613759565b949350505050565b5f815190506137ab8161366e565b92915050565b5f602082840312156137c6576137c5613636565b5b5f6137d38482850161379d565b91505092915050565b5f6dffffffffffffffffffffffffffff82169050919050565b6137fe816137dc565b8114613808575f80fd5b50565b5f81519050613819816137f5565b92915050565b5f8151905061382d816136a7565b92915050565b5f805f6060848603121561384a57613849613636565b5b5f6138578682870161380b565b93505060206138688682870161380b565b92505060406138798682870161381f565b9150509250925092565b5f6020828403121561389857613897613636565b5b5f6138a58482850161380b565b91505092915050565b6138b781613735565b81146138c1575f80fd5b50565b5f815190506138d2816138ae565b92915050565b5f805f805f60a086880312156138f1576138f0613636565b5b5f6138fe8882890161380b565b955050602061390f8882890161380b565b94505060406139208882890161380b565b93505060606139318882890161380b565b9250506080613942888289016138c4565b9150509295509295909350565b6139588161374d565b8114613962575f80fd5b50565b5f815190506139738161394f565b92915050565b5f6020828403121561398e5761398d613636565b5b5f61399b84828501613965565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115613a2657808604811115613a0257613a016139a4565b5b6001851615613a115780820291505b8081029050613a1f856139d1565b94506139e6565b94509492505050565b5f82613a3e5760019050613af9565b81613a4b575f9050613af9565b8160018114613a615760028114613a6b57613a9a565b6001915050613af9565b60ff841115613a7d57613a7c6139a4565b5b8360020a915084821115613a9457613a936139a4565b5b50613af9565b5060208310610133831016604e8410600b8410161715613acf5782820a905083811115613aca57613ac96139a4565b5b613af9565b613adc84848460016139dd565b92509050818404811115613af357613af26139a4565b5b81810290505b9392505050565b5f613b0a82613735565b9150613b158361374d565b9250613b427fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613a2f565b905092915050565b5f602082019050613b5d5f83018461373e565b92915050565b5f60208284031215613b7857613b77613636565b5b5f613b85848285016138c4565b91505092915050565b613b978161363e565b8114613ba1575f80fd5b50565b5f81519050613bb281613b8e565b92915050565b5f60208284031215613bcd57613bcc613636565b5b5f613bda84828501613ba4565b91505092915050565b5f613bed82613735565b9150613bf883613735565b9250828202613c0681613735565b91508282048414831517613c1d57613c1c6139a4565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613c5b82613735565b9150613c6683613735565b925082613c7657613c75613c24565b5b828204905092915050565b5f819050919050565b613c9381613c81565b8114613c9d575f80fd5b50565b5f81519050613cae81613c8a565b92915050565b5f60208284031215613cc957613cc8613636565b5b5f613cd684828501613ca0565b91505092915050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613d2982613ce3565b810181811067ffffffffffffffff82111715613d4857613d47613cf3565b5b80604052505050565b5f613d5a61362d565b9050613d668282613d20565b919050565b5f67ffffffffffffffff821115613d8557613d84613cf3565b5b602082029050602081019050919050565b5f80fd5b5f613dac613da784613d6b565b613d51565b90508083825260208201905060208402830185811115613dcf57613dce613d96565b5b835b81811015613df85780613de488826138c4565b845260208401935050602081019050613dd1565b5050509392505050565b5f82601f830112613e1657613e15613cdf565b5b8151613e26848260208601613d9a565b91505092915050565b5f60208284031215613e4457613e43613636565b5b5f82015167ffffffffffffffff811115613e6157613e6061363a565b5b613e6d84828501613e02565b91505092915050565b613e7f81613c81565b82525050565b5f602082019050613e985f830184613e76565b92915050565b5f67ffffffffffffffff821115613eb857613eb7613cf3565b5b602082029050602081019050919050565b5f613edb613ed684613e9e565b613d51565b90508083825260208201905060208402830185811115613efe57613efd613d96565b5b835b81811015613f275780613f13888261379d565b845260208401935050602081019050613f00565b5050509392505050565b5f82601f830112613f4557613f44613cdf565b5b8151613f55848260208601613ec9565b91505092915050565b5f805f60608486031215613f7557613f74613636565b5b5f84015167ffffffffffffffff811115613f9257613f9161363a565b5b613f9e86828701613f31565b935050602084015167ffffffffffffffff811115613fbf57613fbe61363a565b5b613fcb86828701613e02565b9250506040613fdc868287016138c4565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61401d8261374d565b915060ff82036140305761402f6139a4565b5b600182019050919050565b6140448161365d565b82525050565b5f60208201905061405d5f83018461403b565b92915050565b5f6020828403121561407857614077613636565b5b5f82015167ffffffffffffffff8111156140955761409461363a565b5b6140a184828501613f31565b91505092915050565b5f80604083850312156140c0576140bf613636565b5b5f83015167ffffffffffffffff8111156140dd576140dc61363a565b5b6140e985828601613e02565b925050602083015167ffffffffffffffff81111561410a5761410961363a565b5b61411685828601613e02565b9150509250929050565b5f6fffffffffffffffffffffffffffffffff82169050919050565b61414481614120565b82525050565b5f8115159050919050565b61415e8161414a565b82525050565b5f6040820190506141775f83018561413b565b6141846020830184614155565b9392505050565b61419481614120565b811461419e575f80fd5b50565b5f815190506141af8161418b565b92915050565b5f805f606084860312156141cc576141cb613636565b5b5f6141d9868287016141a1565b93505060206141ea868287016141a1565b92505060406141fb868287016141a1565b9150509250925092565b5f819050919050565b5f819050919050565b5f61423161422c61422784614205565b61420e565b613735565b9050919050565b61424181614217565b82525050565b5f60208201905061425a5f830184614238565b92915050565b5f6060820190506142735f83018661403b565b614280602083018561403b565b61428d604083018461403b565b949350505050565b5f81600f0b9050919050565b6142aa81614295565b81146142b4575f80fd5b50565b5f815190506142c5816142a1565b92915050565b6142d48161414a565b81146142de575f80fd5b50565b5f815190506142ef816142cb565b92915050565b5f805f6060848603121561430c5761430b613636565b5b5f614319868287016142b7565b935050602061432a868287016142b7565b925050604061433b868287016142e1565b9150509250925092565b5f6060820190506143585f83018661413b565b614365602083018561413b565b614372604083018461373e565b949350505050565b5f81519050919050565b5f81905092915050565b5f5b838110156143ab578082015181840152602081019050614390565b5f8484015250505050565b5f6143c08261437a565b6143ca8185614384565b93506143da81856020860161438e565b80840191505092915050565b5f6143f182846143b6565b915081905092915050565b5f60408201905061440f5f83018561403b565b61441c602083018461373e565b9392505050565b5f806040838503121561443957614438613636565b5b5f614446858286016138c4565b9250506020614457858286016138c4565b9150509250929050565b5f82825260208201905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6144cb602183614461565b91506144d682614471565b604082019050919050565b5f6020820190508181035f8301526144f8816144bf565b9050919050565b7f536166654d6174683a206469766973696f6e206279207a65726f0000000000005f82015250565b5f614533601a83614461565b915061453e826144ff565b602082019050919050565b5f6020820190508181035f83015261456081614527565b9050919050565b5f6145718261374d565b915061457c8361374d565b9250828201905060ff811115614595576145946139a4565b5b92915050565b5f6145a58261374d565b91506145b08361374d565b9250828203905060ff8111156145c9576145c86139a4565b5b9291505056fea2646970667358221220e11ffbf866ab8e503a6527822784605ee28dc3c767da4a75925085c28073267664736f6c63430008180033

Deployed Bytecode Sourcemap

9089:15317:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11005:13398;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;11114:12;11128:18;11148:16;11187:1;11180:3;:8;;;:21;;;;11199:2;11192:3;:9;;;11180:21;:34;;;;11212:2;11205:3;:9;;;11180:34;11177:13219;;;11231:14;11260;11289:16;11320;11407:1;11400:3;:8;;;11397:895;;11453:11;11438:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11429:45;;11517:11;11502:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11493:45;;11596:11;11581:39;;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11557:65;;;;;;;;;;;;;;;;;;;11397:895;;;11708:2;11701:3;:9;;;11698:594;;11754:11;11740:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11731:44;;11817:11;11803:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11794:44;;11882:11;11868:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11857:48;;;;11949:11;11935:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11924:48;;;;11698:594;;;12059:2;12052:3;:9;;;12049:243;;12105:11;12091:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12082:44;;12168:11;12154:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12145:44;;12249:11;12235:39;;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12208:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;12049:243;11698:594;11397:895;12319:9;12309:19;;:6;:19;;;12306:442;;12379:6;12364:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12349:48;;12444:6;12429:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12416:46;;12488:32;12511:8;12488:18;12501:4;12488:8;:12;;:18;;;;:::i;:::-;:22;;:32;;;;:::i;:::-;12481:39;;12306:442;;;12591:6;12576:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12561:48;;12656:6;12641:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12628:46;;12700:32;12723:8;12700:18;12713:4;12700:8;:12;;:18;;;;:::i;:::-;:22;;:32;;;;:::i;:::-;12693:39;;12306:442;11216:1543;;;;11177:13219;;;12821:1;12814:3;:8;;;12811:11585;;12869:9;12854:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12839:51;;12918:2;12905:15;;12953:11;12942:47;;;12994:12;12990:2;:16;;;;:::i;:::-;12942:65;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12935:72;;12811:11585;;;13081:1;13074:3;:8;;;13071:11325;;13099:14;13131:11;13116:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13099:53;;13167:14;13199:11;13184:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13167:53;;13236:20;13275:11;13260:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13235:60;;;;13323:9;13313:19;;:6;:19;;;13310:473;;13383:6;13368:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13353:48;;13448:6;13433:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13420:46;;13542:2;13525:12;13519:2;13502:12;13495:4;:19;;;;:::i;:::-;13494:27;;13493:44;;;;:::i;:::-;13492:52;;13485:59;;13310:473;;;13615:6;13600:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13585:48;;13680:6;13665:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13652:46;;13755:12;13740;13725:11;13724:28;;;;:::i;:::-;:43;;;;:::i;:::-;13717:50;;13310:473;13084:710;;;13071:11325;;;13859:1;13852:3;:8;;;13849:10547;;13877:14;13907:11;13894:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13877:51;;13943:14;13973:11;13960:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13943:51;;14010:20;14047:11;14034:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14009:64;;;;14101:9;14091:19;;:6;:19;;;14088:473;;14161:6;14146:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14131:48;;14226:6;14211:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14198:46;;14320:2;14303:12;14297:2;14280:12;14273:4;:19;;;;:::i;:::-;14272:27;;14271:44;;;;:::i;:::-;14270:52;;14263:59;;14088:473;;;14393:6;14378:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14363:48;;14458:6;14443:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14430:46;;14533:12;14518;14503:11;14502:28;;;;:::i;:::-;:43;;;;:::i;:::-;14495:50;;14088:473;13862:710;;;13849:10547;;;14651:3;14644;:10;;;14641:9755;;14671:20;14710:11;14694:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14671:62;;14748:14;14781:11;14765:38;;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14748:57;;14821:24;14865:11;14849:49;;;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14820:80;;14916:23;14941:25;14980:12;14971:36;;;15008:6;14971:44;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14915:100;;;;;15030:26;15075:24;15122:7;15118:345;15139:6;:13;15135:1;:17;;;15118:345;;;15194:9;15181:22;;:6;15188:1;15181:9;;;;;;;;;;:::i;:::-;;;;;;;;:22;;;15178:128;;15249:37;15275:7;15283:1;15275:10;;;;;;;;;;:::i;:::-;;;;;;;;15249:21;15265:4;15249:8;15258:1;15249:11;;;;;;;;;;:::i;:::-;;;;;;;;:15;;:21;;;;:::i;:::-;:25;;:37;;;;:::i;:::-;15228:58;;15178:128;15340:7;15327:20;;:6;15334:1;15327:9;;;;;;;;;;:::i;:::-;;;;;;;;:20;;;15324:124;;15391:37;15417:7;15425:1;15417:10;;;;;;;;;;:::i;:::-;;;;;;;;15391:21;15407:4;15391:8;15400:1;15391:11;;;;;;;;;;:::i;:::-;;;;;;;;:15;;:21;;;;:::i;:::-;:25;;:37;;;;:::i;:::-;15372:56;;15324:124;15154:3;;;;;:::i;:::-;;;;15118:345;;;;15507:9;15492:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15477:51;;15571:7;15556:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15543:47;;15612:50;15643:18;15612:26;15633:4;15612:16;:20;;:26;;;;:::i;:::-;:30;;:50;;;;:::i;:::-;15605:57;;14656:1018;;;;;;;14641:9755;;;15751:3;15744;:10;;;15741:8655;;15771:16;15804:11;15790:39;;;15830:9;15790:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15771:69;;15855:14;15886:11;15872:39;;;15912:7;15872:48;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15855:65;;15942:30;15965:6;15942:18;15955:4;15942:8;:12;;:18;;;;:::i;:::-;:22;;:30;;;;:::i;:::-;15935:37;;16002:2;15987:17;;16032:2;16019:15;;15756:290;;15741:8655;;;16127:3;16120;:10;;;16117:8279;;16170:11;16154:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16147:46;;16208:20;16247:11;16231:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16208:62;;16285:14;16318:11;16302:38;;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16285:57;;16358:23;16397:12;16388:36;;;16425:6;16388:44;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16357:75;;;;16463:7;16450:20;;:6;16457:1;16450:9;;;;;;;;:::i;:::-;;;;;;;;:20;;;16447:80;;16507:4;16499;16498:13;;;;:::i;:::-;16491:20;;16447:80;16556:2;16541:17;;16586:2;16573:15;;16132:468;;;16117:8279;;;16679:3;16672;:10;;;16669:7727;;16699:20;16738:11;16722:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16699:62;;16777:24;16821:11;16805:49;;;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16776:80;;16872:23;16908:12;16899:36;;;16936:11;16899:49;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16871:77;;16964:25;17002:12;16993:45;;;17039:11;16993:58;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16963:88;;17066:26;17111:24;17158:7;17154:345;17175:6;:13;17171:1;:17;;;17154:345;;;17230:9;17217:22;;:6;17224:1;17217:9;;;;;;;;;;:::i;:::-;;;;;;;;:22;;;17214:128;;17285:37;17311:7;17319:1;17311:10;;;;;;;;;;:::i;:::-;;;;;;;;17285:21;17301:4;17285:8;17294:1;17285:11;;;;;;;;;;:::i;:::-;;;;;;;;:15;;:21;;;;:::i;:::-;:25;;:37;;;;:::i;:::-;17264:58;;17214:128;17376:7;17363:20;;:6;17370:1;17363:9;;;;;;;;;;:::i;:::-;;;;;;;;:20;;;17360:124;;17427:37;17453:7;17461:1;17453:10;;;;;;;;;;:::i;:::-;;;;;;;;17427:21;17443:4;17427:8;17436:1;17427:11;;;;;;;;;;:::i;:::-;;;;;;;;:15;;:21;;;;:::i;:::-;:25;;:37;;;;:::i;:::-;17408:56;;17360:124;17190:3;;;;;:::i;:::-;;;;17154:345;;;;17543:9;17528:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17513:51;;17607:7;17592:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17579:47;;17648:50;17679:18;17648:26;17669:4;17648:16;:20;;:26;;;;:::i;:::-;:30;;:50;;;;:::i;:::-;17641:57;;16684:1026;;;;;;16669:7727;;;17787:3;17780;:10;;;17777:6619;;17807:20;17844:11;17830:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17807:60;;17883:23;17919:12;17910:36;;;17947:11;17910:49;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17882:77;;17977:27;18017:12;18008:40;;;18049:11;18008:53;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17974:87;;;18077:16;18096:1;18077:20;;18112:14;18129:1;18112:18;;18149:7;18145:278;18166:6;:13;18162:1;:17;;;18145:278;;;18222:6;18229:1;18222:9;;;;;;;;;;:::i;:::-;;;;;;;;18209:22;;:9;:22;;;18206:94;;18267:10;18278:1;18267:13;;;;;;;;;;:::i;:::-;;;;;;;;18256:24;;18206:94;18332:6;18339:1;18332:9;;;;;;;;;;:::i;:::-;;;;;;;;18321:20;;:7;:20;;;18318:90;;18375:10;18386:1;18375:13;;;;;;;;;;:::i;:::-;;;;;;;;18366:22;;18318:90;18181:3;;;;;:::i;:::-;;;;18145:278;;;;18444:30;18467:6;18444:18;18457:4;18444:8;:12;;:18;;;;:::i;:::-;:22;;:30;;;;:::i;:::-;18437:37;;18504:2;18489:17;;18534:2;18521:15;;17792:756;;;;;17777:6619;;;18629:3;18622;:10;;;18619:5777;;18650:20;18689:11;18673:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18650:62;;18728:23;18764:12;18755:36;;;18792:11;18755:49;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18727:77;;18822:27;18862:12;18853:40;;;18894:11;18853:53;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18819:87;;;18922:16;18941:1;18922:20;;18957:14;18974:1;18957:18;;18994:7;18990:278;19011:6;:13;19007:1;:17;;;18990:278;;;19067:6;19074:1;19067:9;;;;;;;;;;:::i;:::-;;;;;;;;19054:22;;:9;:22;;;19051:94;;19112:10;19123:1;19112:13;;;;;;;;;;:::i;:::-;;;;;;;;19101:24;;19051:94;19177:6;19184:1;19177:9;;;;;;;;;;:::i;:::-;;;;;;;;19166:20;;:7;:20;;;19163:90;;19220:10;19231:1;19220:13;;;;;;;;;;:::i;:::-;;;;;;;;19211:22;;19163:90;19026:3;;;;;:::i;:::-;;;;18990:278;;;;19289:30;19312:6;19289:18;19302:4;19289:8;:12;;:18;;;;:::i;:::-;:22;;:30;;;;:::i;:::-;19282:37;;19349:2;19334:17;;19379:2;19366:15;;18634:759;;;;;18619:5777;;;19656:1;19649:3;:8;;;:21;;;;19668:2;19661:3;:9;;;19649:21;:34;;;;19681:2;19674:3;:9;;;19649:34;:47;;;;19694:2;19687:3;:9;;;19649:47;:60;;;;19707:2;19700:3;:9;;;19649:60;:73;;;;19720:2;19713:3;:9;;;19649:73;19646:4750;;;19739:14;19775:11;19756:41;;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19739:60;;19814:14;19850:11;19831:41;;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19814:60;;19907:6;19894:19;;:9;:19;;;19891:807;;19964:6;19949:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19934:48;;20029:6;20014:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20001:46;;20066:16;20093:31;20106:3;20111:12;20093;:31::i;:::-;20066:59;;20147:17;20189:11;20170:42;;;20213:8;20223:4;20170:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20144:84;;;;20254:33;20278:8;20254:33;;:19;20268:4;20254:9;:13;;;;:19;;;;:::i;:::-;:23;;:33;;;;:::i;:::-;20247:40;;19915:388;;19891:807;;;20358:6;20343:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20328:48;;20423:6;20408:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20395:46;;20460:16;20487:31;20500:3;20505:12;20487;:31::i;:::-;20460:59;;20541:17;20583:11;20564:42;;;20607:8;20617:5;20564:59;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20538:85;;;;20649:33;20673:8;20649:33;;:19;20663:4;20649:9;:13;;;;:19;;;;:::i;:::-;:23;;:33;;;;:::i;:::-;20642:40;;20309:389;;19891:807;19724:985;;19646:4750;;;20997:1;20990:3;:8;;;:21;;;;21009:2;21002:3;:9;;;20990:21;:34;;;;21022:2;21015:3;:9;;;20990:34;:47;;;;21035:2;21028:3;:9;;;20990:47;:60;;;;21048:2;21041:3;:9;;;20990:60;:73;;;;21061:2;21054:3;:9;;;20990:73;20987:3409;;;21080:28;21143:3;21126:13;:20;21123:216;;9529:42;21167:62;;21123:216;;;9419:42;21270:53;;21123:216;21353:36;21411:13;:25;;;21437:1;21411:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21353:87;;21455:8;21478;21501:17;21564;:34;;;21599:11;21612:9;21623:7;21564:67;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21541:90;;;;;;;;;;;;21646:14;21663:30;21681:11;21663:17;:30::i;:::-;21646:47;;21708:15;21754:1;21742:8;:13;;;:29;;;;;21759:12;21742:29;21738:332;;;21803:47;;;21792:58;;21738:332;;;21888:1;21876:8;:13;;;:30;;;;;21894:12;21893:13;21876:30;21872:198;;;21938:32;;;21927:43;;21872:198;;;22022:32;;;22011:43;;21872:198;21738:332;9309:42;22101:17;;:9;:17;;;22098:166;;22154:2;22139:17;;22098:166;;;22227:9;22212:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22197:51;;22098:166;9309:42;22281:15;;:7;:15;;;22278:158;;22330:2;22317:15;;22278:158;;;22401:7;22386:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22373:47;;22278:158;22450:16;22469:31;22482:3;22487:12;22469;:31::i;:::-;22450:50;;22530:12;22544:17;22565:11;:22;;22611:8;22629:1;22641;22645:8;22588:66;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22565:90;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22529:126;;;;22674:7;:28;;;;;22700:2;22685:4;:11;:17;;22674:28;22670:333;;;22761:17;22792:4;22781:27;;;;;;;;;;;;:::i;:::-;22761:47;;22843:1;22831:9;:13;22827:161;;;22935:33;22959:8;22935:19;22949:4;22935:9;:13;;:19;;;;:::i;:::-;:23;;:33;;;;:::i;:::-;22928:40;;22827:161;22704:299;22670:333;21065:1949;;;;;;;;;;20987:3409;;;23282:1;23275:3;:8;;;:21;;;;23294:2;23287:3;:9;;;23275:21;:34;;;;23307:2;23300:3;:9;;;23275:34;:47;;;;23320:2;23313:3;:9;;;23275:47;:60;;;;23333:2;23326:3;:9;;;23275:60;:73;;;;23346:2;23339:3;:9;;;23275:73;23272:1124;;;23365:14;23391:11;23382:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23365:53;;23433:14;23459:11;23450:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23433:54;;23520:6;23507:19;;:9;:19;;;23504:881;;23577:6;23562:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23547:48;;23642:6;23627:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23614:46;;23679:16;23698:31;23711:3;23716:12;23698;:31::i;:::-;23679:50;;23749:26;23790:11;23781:35;;;23817:42;23861:8;23781:89;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23748:122;;;23896:42;23929:8;23896:28;23919:4;23896:18;:22;;:28;;;;:::i;:::-;:32;;:42;;;;:::i;:::-;23889:49;;23528:426;;23504:881;;;24009:6;23994:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23979:48;;24074:6;24059:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24046:46;;24111:16;24130:31;24143:3;24148:12;24130;:31::i;:::-;24111:50;;24181:25;24221:11;24212:36;;;24249:42;24293:8;24212:90;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24180:122;;;24328:41;24360:8;24328:27;24350:4;24328:17;:21;;:27;;;;:::i;:::-;:31;;:41;;;;:::i;:::-;24321:48;;23960:425;;23504:881;23350:1046;;23272:1124;20987:3409;19646:4750;18619:5777;17777:6619;16669:7727;16117:8279;15741:8655;14641:9755;13849:10547;13071:11325;12811:11585;11177:13219;11005:13398;;;;;;;;:::o;1328:220::-;1386:7;1415:1;1410;:6;1406:20;;1425:1;1418:8;;;;1406:20;1437:9;1453:1;1449;:5;;;;:::i;:::-;1437:17;;1482:1;1477;1473;:5;;;;:::i;:::-;:10;1465:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1539:1;1532:8;;;1328:220;;;;;:::o;1554:153::-;1612:7;1644:1;1640;:5;1632:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;1698:1;1694;:5;;;;:::i;:::-;1687:12;;1554:153;;;;:::o;10273:724::-;10351:7;10371:9;10383:1;10371:13;;10406:1;10398:4;:9;;;:22;;;;10419:1;10411:4;:9;;;10398:22;:35;;;;10432:1;10424:4;:9;;;10398:35;10395:74;;;10456:1;10450:7;;10395:74;10490:2;10482:4;:10;;;:24;;;;10504:2;10496:4;:10;;;10482:24;:38;;;;10518:2;10510:4;:10;;;10482:38;10479:77;;;10543:1;10537:7;;10479:77;10577:2;10569:4;:10;;;:24;;;;10591:2;10583:4;:10;;;10569:24;:38;;;;10605:2;10597:4;:10;;;10569:38;10566:77;;;10630:1;10624:7;;10566:77;10664:2;10656:4;:10;;;:24;;;;10678:2;10670:4;:10;;;10656:24;:38;;;;10692:2;10684:4;:10;;;10656:38;10653:77;;;10717:1;10711:7;;10653:77;10751:2;10743:4;:10;;;:24;;;;10765:2;10757:4;:10;;;10743:24;:38;;;;10779:2;10771:4;:10;;;10743:38;10740:77;;;10804:1;10798:7;;10740:77;10838:2;10830:4;:10;;;:24;;;;10852:2;10844:4;:10;;;10830:24;:38;;;;10866:2;10858:4;:10;;;10830:38;10827:78;;;10891:2;10885:8;;10827:78;10915:16;10961:1;10955:3;10939:13;:19;;;;:::i;:::-;:23;;;;:::i;:::-;10934:2;:29;;;;:::i;:::-;10915:48;;10981:8;10974:15;;;;10273:724;;;;:::o;9578:689::-;9641:5;9756:12;9770:17;9791:4;:15;;9830:40;;;9807:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9791:81;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9755:117;;;;9887:7;:28;;;;;9913:2;9898:4;:11;:17;;9887:28;9883:107;;;9977:1;9970:8;;;;;;9883:107;10048:4;:15;;10087:32;;;10064:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10048:73;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10030:91;;;;;;;;10136:7;:28;;;;;10162:2;10147:4;:11;:17;;10136:28;10132:107;;;10226:1;10219:8;;;;;;10132:107;10258:1;10251:8;;;;9578:689;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:93::-;877:7;917:10;910:5;906:22;895:33;;841:93;;;:::o;940:120::-;1012:23;1029:5;1012:23;:::i;:::-;1005:5;1002:34;992:62;;1050:1;1047;1040:12;992:62;940:120;:::o;1066:137::-;1111:5;1149:6;1136:20;1127:29;;1165:32;1191:5;1165:32;:::i;:::-;1066:137;;;;:::o;1209:763::-;1294:6;1302;1310;1318;1367:3;1355:9;1346:7;1342:23;1338:33;1335:120;;;1374:79;;:::i;:::-;1335:120;1494:1;1519:53;1564:7;1555:6;1544:9;1540:22;1519:53;:::i;:::-;1509:63;;1465:117;1621:2;1647:53;1692:7;1683:6;1672:9;1668:22;1647:53;:::i;:::-;1637:63;;1592:118;1749:2;1775:53;1820:7;1811:6;1800:9;1796:22;1775:53;:::i;:::-;1765:63;;1720:118;1877:2;1903:52;1947:7;1938:6;1927:9;1923:22;1903:52;:::i;:::-;1893:62;;1848:117;1209:763;;;;;;;:::o;1978:77::-;2015:7;2044:5;2033:16;;1978:77;;;:::o;2061:118::-;2148:24;2166:5;2148:24;:::i;:::-;2143:3;2136:37;2061:118;;:::o;2185:86::-;2220:7;2260:4;2253:5;2249:16;2238:27;;2185:86;;;:::o;2277:112::-;2360:22;2376:5;2360:22;:::i;:::-;2355:3;2348:35;2277:112;;:::o;2395:426::-;2536:4;2574:2;2563:9;2559:18;2551:26;;2587:71;2655:1;2644:9;2640:17;2631:6;2587:71;:::i;:::-;2668:68;2732:2;2721:9;2717:18;2708:6;2668:68;:::i;:::-;2746;2810:2;2799:9;2795:18;2786:6;2746:68;:::i;:::-;2395:426;;;;;;:::o;2827:143::-;2884:5;2915:6;2909:13;2900:22;;2931:33;2958:5;2931:33;:::i;:::-;2827:143;;;;:::o;2976:351::-;3046:6;3095:2;3083:9;3074:7;3070:23;3066:32;3063:119;;;3101:79;;:::i;:::-;3063:119;3221:1;3246:64;3302:7;3293:6;3282:9;3278:22;3246:64;:::i;:::-;3236:74;;3192:128;2976:351;;;;:::o;3333:114::-;3370:7;3410:30;3403:5;3399:42;3388:53;;3333:114;;;:::o;3453:122::-;3526:24;3544:5;3526:24;:::i;:::-;3519:5;3516:35;3506:63;;3565:1;3562;3555:12;3506:63;3453:122;:::o;3581:143::-;3638:5;3669:6;3663:13;3654:22;;3685:33;3712:5;3685:33;:::i;:::-;3581:143;;;;:::o;3730:141::-;3786:5;3817:6;3811:13;3802:22;;3833:32;3859:5;3833:32;:::i;:::-;3730:141;;;;:::o;3877:661::-;3964:6;3972;3980;4029:2;4017:9;4008:7;4004:23;4000:32;3997:119;;;4035:79;;:::i;:::-;3997:119;4155:1;4180:64;4236:7;4227:6;4216:9;4212:22;4180:64;:::i;:::-;4170:74;;4126:128;4293:2;4319:64;4375:7;4366:6;4355:9;4351:22;4319:64;:::i;:::-;4309:74;;4264:129;4432:2;4458:63;4513:7;4504:6;4493:9;4489:22;4458:63;:::i;:::-;4448:73;;4403:128;3877:661;;;;;:::o;4544:351::-;4614:6;4663:2;4651:9;4642:7;4638:23;4634:32;4631:119;;;4669:79;;:::i;:::-;4631:119;4789:1;4814:64;4870:7;4861:6;4850:9;4846:22;4814:64;:::i;:::-;4804:74;;4760:128;4544:351;;;;:::o;4901:122::-;4974:24;4992:5;4974:24;:::i;:::-;4967:5;4964:35;4954:63;;5013:1;5010;5003:12;4954:63;4901:122;:::o;5029:143::-;5086:5;5117:6;5111:13;5102:22;;5133:33;5160:5;5133:33;:::i;:::-;5029:143;;;;:::o;5178:977::-;5284:6;5292;5300;5308;5316;5365:3;5353:9;5344:7;5340:23;5336:33;5333:120;;;5372:79;;:::i;:::-;5333:120;5492:1;5517:64;5573:7;5564:6;5553:9;5549:22;5517:64;:::i;:::-;5507:74;;5463:128;5630:2;5656:64;5712:7;5703:6;5692:9;5688:22;5656:64;:::i;:::-;5646:74;;5601:129;5769:2;5795:64;5851:7;5842:6;5831:9;5827:22;5795:64;:::i;:::-;5785:74;;5740:129;5908:2;5934:64;5990:7;5981:6;5970:9;5966:22;5934:64;:::i;:::-;5924:74;;5879:129;6047:3;6074:64;6130:7;6121:6;6110:9;6106:22;6074:64;:::i;:::-;6064:74;;6018:130;5178:977;;;;;;;;:::o;6161:118::-;6232:22;6248:5;6232:22;:::i;:::-;6225:5;6222:33;6212:61;;6269:1;6266;6259:12;6212:61;6161:118;:::o;6285:139::-;6340:5;6371:6;6365:13;6356:22;;6387:31;6412:5;6387:31;:::i;:::-;6285:139;;;;:::o;6430:347::-;6498:6;6547:2;6535:9;6526:7;6522:23;6518:32;6515:119;;;6553:79;;:::i;:::-;6515:119;6673:1;6698:62;6752:7;6743:6;6732:9;6728:22;6698:62;:::i;:::-;6688:72;;6644:126;6430:347;;;;:::o;6783:180::-;6831:77;6828:1;6821:88;6928:4;6925:1;6918:15;6952:4;6949:1;6942:15;6969:102;7011:8;7058:5;7055:1;7051:13;7030:34;;6969:102;;;:::o;7077:848::-;7138:5;7145:4;7169:6;7160:15;;7193:5;7184:14;;7207:712;7228:1;7218:8;7215:15;7207:712;;;7323:4;7318:3;7314:14;7308:4;7305:24;7302:50;;;7332:18;;:::i;:::-;7302:50;7382:1;7372:8;7368:16;7365:451;;;7797:4;7790:5;7786:16;7777:25;;7365:451;7847:4;7841;7837:15;7829:23;;7877:32;7900:8;7877:32;:::i;:::-;7865:44;;7207:712;;;7077:848;;;;;;;:::o;7931:1073::-;7985:5;8176:8;8166:40;;8197:1;8188:10;;8199:5;;8166:40;8225:4;8215:36;;8242:1;8233:10;;8244:5;;8215:36;8311:4;8359:1;8354:27;;;;8395:1;8390:191;;;;8304:277;;8354:27;8372:1;8363:10;;8374:5;;;8390:191;8435:3;8425:8;8422:17;8419:43;;;8442:18;;:::i;:::-;8419:43;8491:8;8488:1;8484:16;8475:25;;8526:3;8519:5;8516:14;8513:40;;;8533:18;;:::i;:::-;8513:40;8566:5;;;8304:277;;8690:2;8680:8;8677:16;8671:3;8665:4;8662:13;8658:36;8640:2;8630:8;8627:16;8622:2;8616:4;8613:12;8609:35;8593:111;8590:246;;;8746:8;8740:4;8736:19;8727:28;;8781:3;8774:5;8771:14;8768:40;;;8788:18;;:::i;:::-;8768:40;8821:5;;8590:246;8861:42;8899:3;8889:8;8883:4;8880:1;8861:42;:::i;:::-;8846:57;;;;8935:4;8930:3;8926:14;8919:5;8916:25;8913:51;;;8944:18;;:::i;:::-;8913:51;8993:4;8986:5;8982:16;8973:25;;7931:1073;;;;;;:::o;9010:281::-;9068:5;9092:23;9110:4;9092:23;:::i;:::-;9084:31;;9136:25;9152:8;9136:25;:::i;:::-;9124:37;;9180:104;9217:66;9207:8;9201:4;9180:104;:::i;:::-;9171:113;;9010:281;;;;:::o;9297:222::-;9390:4;9428:2;9417:9;9413:18;9405:26;;9441:71;9509:1;9498:9;9494:17;9485:6;9441:71;:::i;:::-;9297:222;;;;:::o;9525:351::-;9595:6;9644:2;9632:9;9623:7;9619:23;9615:32;9612:119;;;9650:79;;:::i;:::-;9612:119;9770:1;9795:64;9851:7;9842:6;9831:9;9827:22;9795:64;:::i;:::-;9785:74;;9741:128;9525:351;;;;:::o;9882:122::-;9955:24;9973:5;9955:24;:::i;:::-;9948:5;9945:35;9935:63;;9994:1;9991;9984:12;9935:63;9882:122;:::o;10010:143::-;10067:5;10098:6;10092:13;10083:22;;10114:33;10141:5;10114:33;:::i;:::-;10010:143;;;;:::o;10159:351::-;10229:6;10278:2;10266:9;10257:7;10253:23;10249:32;10246:119;;;10284:79;;:::i;:::-;10246:119;10404:1;10429:64;10485:7;10476:6;10465:9;10461:22;10429:64;:::i;:::-;10419:74;;10375:128;10159:351;;;;:::o;10516:410::-;10556:7;10579:20;10597:1;10579:20;:::i;:::-;10574:25;;10613:20;10631:1;10613:20;:::i;:::-;10608:25;;10668:1;10665;10661:9;10690:30;10708:11;10690:30;:::i;:::-;10679:41;;10869:1;10860:7;10856:15;10853:1;10850:22;10830:1;10823:9;10803:83;10780:139;;10899:18;;:::i;:::-;10780:139;10564:362;10516:410;;;;:::o;10932:180::-;10980:77;10977:1;10970:88;11077:4;11074:1;11067:15;11101:4;11098:1;11091:15;11118:185;11158:1;11175:20;11193:1;11175:20;:::i;:::-;11170:25;;11209:20;11227:1;11209:20;:::i;:::-;11204:25;;11248:1;11238:35;;11253:18;;:::i;:::-;11238:35;11295:1;11292;11288:9;11283:14;;11118:185;;;;:::o;11309:77::-;11346:7;11375:5;11364:16;;11309:77;;;:::o;11392:122::-;11465:24;11483:5;11465:24;:::i;:::-;11458:5;11455:35;11445:63;;11504:1;11501;11494:12;11445:63;11392:122;:::o;11520:143::-;11577:5;11608:6;11602:13;11593:22;;11624:33;11651:5;11624:33;:::i;:::-;11520:143;;;;:::o;11669:351::-;11739:6;11788:2;11776:9;11767:7;11763:23;11759:32;11756:119;;;11794:79;;:::i;:::-;11756:119;11914:1;11939:64;11995:7;11986:6;11975:9;11971:22;11939:64;:::i;:::-;11929:74;;11885:128;11669:351;;;;:::o;12026:117::-;12135:1;12132;12125:12;12149:102;12190:6;12241:2;12237:7;12232:2;12225:5;12221:14;12217:28;12207:38;;12149:102;;;:::o;12257:180::-;12305:77;12302:1;12295:88;12402:4;12399:1;12392:15;12426:4;12423:1;12416:15;12443:281;12526:27;12548:4;12526:27;:::i;:::-;12518:6;12514:40;12656:6;12644:10;12641:22;12620:18;12608:10;12605:34;12602:62;12599:88;;;12667:18;;:::i;:::-;12599:88;12707:10;12703:2;12696:22;12486:238;12443:281;;:::o;12730:129::-;12764:6;12791:20;;:::i;:::-;12781:30;;12820:33;12848:4;12840:6;12820:33;:::i;:::-;12730:129;;;:::o;12865:311::-;12942:4;13032:18;13024:6;13021:30;13018:56;;;13054:18;;:::i;:::-;13018:56;13104:4;13096:6;13092:17;13084:25;;13164:4;13158;13154:15;13146:23;;12865:311;;;:::o;13182:117::-;13291:1;13288;13281:12;13322:732;13429:5;13454:81;13470:64;13527:6;13470:64;:::i;:::-;13454:81;:::i;:::-;13445:90;;13555:5;13584:6;13577:5;13570:21;13618:4;13611:5;13607:16;13600:23;;13671:4;13663:6;13659:17;13651:6;13647:30;13700:3;13692:6;13689:15;13686:122;;;13719:79;;:::i;:::-;13686:122;13834:6;13817:231;13851:6;13846:3;13843:15;13817:231;;;13926:3;13955:48;13999:3;13987:10;13955:48;:::i;:::-;13950:3;13943:61;14033:4;14028:3;14024:14;14017:21;;13893:155;13877:4;13872:3;13868:14;13861:21;;13817:231;;;13821:21;13435:619;;13322:732;;;;;:::o;14077:385::-;14159:5;14208:3;14201:4;14193:6;14189:17;14185:27;14175:122;;14216:79;;:::i;:::-;14175:122;14326:6;14320:13;14351:105;14452:3;14444:6;14437:4;14429:6;14425:17;14351:105;:::i;:::-;14342:114;;14165:297;14077:385;;;;:::o;14468:554::-;14563:6;14612:2;14600:9;14591:7;14587:23;14583:32;14580:119;;;14618:79;;:::i;:::-;14580:119;14759:1;14748:9;14744:17;14738:24;14789:18;14781:6;14778:30;14775:117;;;14811:79;;:::i;:::-;14775:117;14916:89;14997:7;14988:6;14977:9;14973:22;14916:89;:::i;:::-;14906:99;;14709:306;14468:554;;;;:::o;15028:118::-;15115:24;15133:5;15115:24;:::i;:::-;15110:3;15103:37;15028:118;;:::o;15152:222::-;15245:4;15283:2;15272:9;15268:18;15260:26;;15296:71;15364:1;15353:9;15349:17;15340:6;15296:71;:::i;:::-;15152:222;;;;:::o;15380:311::-;15457:4;15547:18;15539:6;15536:30;15533:56;;;15569:18;;:::i;:::-;15533:56;15619:4;15611:6;15607:17;15599:25;;15679:4;15673;15669:15;15661:23;;15380:311;;;:::o;15714:732::-;15821:5;15846:81;15862:64;15919:6;15862:64;:::i;:::-;15846:81;:::i;:::-;15837:90;;15947:5;15976:6;15969:5;15962:21;16010:4;16003:5;15999:16;15992:23;;16063:4;16055:6;16051:17;16043:6;16039:30;16092:3;16084:6;16081:15;16078:122;;;16111:79;;:::i;:::-;16078:122;16226:6;16209:231;16243:6;16238:3;16235:15;16209:231;;;16318:3;16347:48;16391:3;16379:10;16347:48;:::i;:::-;16342:3;16335:61;16425:4;16420:3;16416:14;16409:21;;16285:155;16269:4;16264:3;16260:14;16253:21;;16209:231;;;16213:21;15827:619;;15714:732;;;;;:::o;16469:385::-;16551:5;16600:3;16593:4;16585:6;16581:17;16577:27;16567:122;;16608:79;;:::i;:::-;16567:122;16718:6;16712:13;16743:105;16844:3;16836:6;16829:4;16821:6;16817:17;16743:105;:::i;:::-;16734:114;;16557:297;16469:385;;;;:::o;16860:1069::-;16998:6;17006;17014;17063:2;17051:9;17042:7;17038:23;17034:32;17031:119;;;17069:79;;:::i;:::-;17031:119;17210:1;17199:9;17195:17;17189:24;17240:18;17232:6;17229:30;17226:117;;;17262:79;;:::i;:::-;17226:117;17367:89;17448:7;17439:6;17428:9;17424:22;17367:89;:::i;:::-;17357:99;;17160:306;17526:2;17515:9;17511:18;17505:25;17557:18;17549:6;17546:30;17543:117;;;17579:79;;:::i;:::-;17543:117;17684:89;17765:7;17756:6;17745:9;17741:22;17684:89;:::i;:::-;17674:99;;17476:307;17822:2;17848:64;17904:7;17895:6;17884:9;17880:22;17848:64;:::i;:::-;17838:74;;17793:129;16860:1069;;;;;:::o;17935:180::-;17983:77;17980:1;17973:88;18080:4;18077:1;18070:15;18104:4;18101:1;18094:15;18121:167;18158:3;18181:22;18197:5;18181:22;:::i;:::-;18172:31;;18225:4;18218:5;18215:15;18212:41;;18233:18;;:::i;:::-;18212:41;18280:1;18273:5;18269:13;18262:20;;18121:167;;;:::o;18294:118::-;18381:24;18399:5;18381:24;:::i;:::-;18376:3;18369:37;18294:118;;:::o;18418:222::-;18511:4;18549:2;18538:9;18534:18;18526:26;;18562:71;18630:1;18619:9;18615:17;18606:6;18562:71;:::i;:::-;18418:222;;;;:::o;18646:554::-;18741:6;18790:2;18778:9;18769:7;18765:23;18761:32;18758:119;;;18796:79;;:::i;:::-;18758:119;18937:1;18926:9;18922:17;18916:24;18967:18;18959:6;18956:30;18953:117;;;18989:79;;:::i;:::-;18953:117;19094:89;19175:7;19166:6;19155:9;19151:22;19094:89;:::i;:::-;19084:99;;18887:306;18646:554;;;;:::o;19206:913::-;19335:6;19343;19392:2;19380:9;19371:7;19367:23;19363:32;19360:119;;;19398:79;;:::i;:::-;19360:119;19539:1;19528:9;19524:17;19518:24;19569:18;19561:6;19558:30;19555:117;;;19591:79;;:::i;:::-;19555:117;19696:89;19777:7;19768:6;19757:9;19753:22;19696:89;:::i;:::-;19686:99;;19489:306;19855:2;19844:9;19840:18;19834:25;19886:18;19878:6;19875:30;19872:117;;;19908:79;;:::i;:::-;19872:117;20013:89;20094:7;20085:6;20074:9;20070:22;20013:89;:::i;:::-;20003:99;;19805:307;19206:913;;;;;:::o;20125:118::-;20162:7;20202:34;20195:5;20191:46;20180:57;;20125:118;;;:::o;20249:::-;20336:24;20354:5;20336:24;:::i;:::-;20331:3;20324:37;20249:118;;:::o;20373:90::-;20407:7;20450:5;20443:13;20436:21;20425:32;;20373:90;;;:::o;20469:109::-;20550:21;20565:5;20550:21;:::i;:::-;20545:3;20538:34;20469:109;;:::o;20584:320::-;20699:4;20737:2;20726:9;20722:18;20714:26;;20750:71;20818:1;20807:9;20803:17;20794:6;20750:71;:::i;:::-;20831:66;20893:2;20882:9;20878:18;20869:6;20831:66;:::i;:::-;20584:320;;;;;:::o;20910:122::-;20983:24;21001:5;20983:24;:::i;:::-;20976:5;20973:35;20963:63;;21022:1;21019;21012:12;20963:63;20910:122;:::o;21038:143::-;21095:5;21126:6;21120:13;21111:22;;21142:33;21169:5;21142:33;:::i;:::-;21038:143;;;;:::o;21187:663::-;21275:6;21283;21291;21340:2;21328:9;21319:7;21315:23;21311:32;21308:119;;;21346:79;;:::i;:::-;21308:119;21466:1;21491:64;21547:7;21538:6;21527:9;21523:22;21491:64;:::i;:::-;21481:74;;21437:128;21604:2;21630:64;21686:7;21677:6;21666:9;21662:22;21630:64;:::i;:::-;21620:74;;21575:129;21743:2;21769:64;21825:7;21816:6;21805:9;21801:22;21769:64;:::i;:::-;21759:74;;21714:129;21187:663;;;;;:::o;21856:85::-;21901:7;21930:5;21919:16;;21856:85;;;:::o;21947:60::-;21975:3;21996:5;21989:12;;21947:60;;;:::o;22013:158::-;22071:9;22104:61;22122:42;22131:32;22157:5;22131:32;:::i;:::-;22122:42;:::i;:::-;22104:61;:::i;:::-;22091:74;;22013:158;;;:::o;22177:147::-;22272:45;22311:5;22272:45;:::i;:::-;22267:3;22260:58;22177:147;;:::o;22330:238::-;22431:4;22469:2;22458:9;22454:18;22446:26;;22482:79;22558:1;22547:9;22543:17;22534:6;22482:79;:::i;:::-;22330:238;;;;:::o;22574:442::-;22723:4;22761:2;22750:9;22746:18;22738:26;;22774:71;22842:1;22831:9;22827:17;22818:6;22774:71;:::i;:::-;22855:72;22923:2;22912:9;22908:18;22899:6;22855:72;:::i;:::-;22937;23005:2;22994:9;22990:18;22981:6;22937:72;:::i;:::-;22574:442;;;;;;:::o;23022:92::-;23058:7;23102:5;23098:2;23087:21;23076:32;;23022:92;;;:::o;23120:120::-;23192:23;23209:5;23192:23;:::i;:::-;23185:5;23182:34;23172:62;;23230:1;23227;23220:12;23172:62;23120:120;:::o;23246:141::-;23302:5;23333:6;23327:13;23318:22;;23349:32;23375:5;23349:32;:::i;:::-;23246:141;;;;:::o;23393:116::-;23463:21;23478:5;23463:21;:::i;:::-;23456:5;23453:32;23443:60;;23499:1;23496;23489:12;23443:60;23393:116;:::o;23515:137::-;23569:5;23600:6;23594:13;23585:22;;23616:30;23640:5;23616:30;:::i;:::-;23515:137;;;;:::o;23658:653::-;23741:6;23749;23757;23806:2;23794:9;23785:7;23781:23;23777:32;23774:119;;;23812:79;;:::i;:::-;23774:119;23932:1;23957:63;24012:7;24003:6;23992:9;23988:22;23957:63;:::i;:::-;23947:73;;23903:127;24069:2;24095:63;24150:7;24141:6;24130:9;24126:22;24095:63;:::i;:::-;24085:73;;24040:128;24207:2;24233:61;24286:7;24277:6;24266:9;24262:22;24233:61;:::i;:::-;24223:71;;24178:126;23658:653;;;;;:::o;24317:442::-;24466:4;24504:2;24493:9;24489:18;24481:26;;24517:71;24585:1;24574:9;24570:17;24561:6;24517:71;:::i;:::-;24598:72;24666:2;24655:9;24651:18;24642:6;24598:72;:::i;:::-;24680;24748:2;24737:9;24733:18;24724:6;24680:72;:::i;:::-;24317:442;;;;;;:::o;24765:98::-;24816:6;24850:5;24844:12;24834:22;;24765:98;;;:::o;24869:147::-;24970:11;25007:3;24992:18;;24869:147;;;;:::o;25022:246::-;25103:1;25113:113;25127:6;25124:1;25121:13;25113:113;;;25212:1;25207:3;25203:11;25197:18;25193:1;25188:3;25184:11;25177:39;25149:2;25146:1;25142:10;25137:15;;25113:113;;;25260:1;25251:6;25246:3;25242:16;25235:27;25084:184;25022:246;;;:::o;25274:386::-;25378:3;25406:38;25438:5;25406:38;:::i;:::-;25460:88;25541:6;25536:3;25460:88;:::i;:::-;25453:95;;25557:65;25615:6;25610:3;25603:4;25596:5;25592:16;25557:65;:::i;:::-;25647:6;25642:3;25638:16;25631:23;;25382:278;25274:386;;;;:::o;25666:271::-;25796:3;25818:93;25907:3;25898:6;25818:93;:::i;:::-;25811:100;;25928:3;25921:10;;25666:271;;;;:::o;25943:332::-;26064:4;26102:2;26091:9;26087:18;26079:26;;26115:71;26183:1;26172:9;26168:17;26159:6;26115:71;:::i;:::-;26196:72;26264:2;26253:9;26249:18;26240:6;26196:72;:::i;:::-;25943:332;;;;;:::o;26281:507::-;26360:6;26368;26417:2;26405:9;26396:7;26392:23;26388:32;26385:119;;;26423:79;;:::i;:::-;26385:119;26543:1;26568:64;26624:7;26615:6;26604:9;26600:22;26568:64;:::i;:::-;26558:74;;26514:128;26681:2;26707:64;26763:7;26754:6;26743:9;26739:22;26707:64;:::i;:::-;26697:74;;26652:129;26281:507;;;;;:::o;26794:169::-;26878:11;26912:6;26907:3;26900:19;26952:4;26947:3;26943:14;26928:29;;26794:169;;;;:::o;26969:220::-;27109:34;27105:1;27097:6;27093:14;27086:58;27178:3;27173:2;27165:6;27161:15;27154:28;26969:220;:::o;27195:366::-;27337:3;27358:67;27422:2;27417:3;27358:67;:::i;:::-;27351:74;;27434:93;27523:3;27434:93;:::i;:::-;27552:2;27547:3;27543:12;27536:19;;27195:366;;;:::o;27567:419::-;27733:4;27771:2;27760:9;27756:18;27748:26;;27820:9;27814:4;27810:20;27806:1;27795:9;27791:17;27784:47;27848:131;27974:4;27848:131;:::i;:::-;27840:139;;27567:419;;;:::o;27992:176::-;28132:28;28128:1;28120:6;28116:14;28109:52;27992:176;:::o;28174:366::-;28316:3;28337:67;28401:2;28396:3;28337:67;:::i;:::-;28330:74;;28413:93;28502:3;28413:93;:::i;:::-;28531:2;28526:3;28522:12;28515:19;;28174:366;;;:::o;28546:419::-;28712:4;28750:2;28739:9;28735:18;28727:26;;28799:9;28793:4;28789:20;28785:1;28774:9;28770:17;28763:47;28827:131;28953:4;28827:131;:::i;:::-;28819:139;;28546:419;;;:::o;28971:188::-;29009:3;29028:18;29044:1;29028:18;:::i;:::-;29023:23;;29060:18;29076:1;29060:18;:::i;:::-;29055:23;;29101:1;29098;29094:9;29087:16;;29124:4;29119:3;29116:13;29113:39;;;29132:18;;:::i;:::-;29113:39;28971:188;;;;:::o;29165:191::-;29203:4;29223:18;29239:1;29223:18;:::i;:::-;29218:23;;29255:18;29271:1;29255:18;:::i;:::-;29250:23;;29297:1;29294;29290:9;29282:17;;29321:4;29315;29312:14;29309:40;;;29329:18;;:::i;:::-;29309:40;29165:191;;;;:::o

Swarm Source

ipfs://e11ffbf866ab8e503a6527822784605ee28dc3c767da4a75925085c280732676

Block Transaction Gas Used Reward
view all blocks produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.