ETH Price: $3,275.06 (+0.74%)
Gas: 2 Gwei

Contract

0x6e892da9FAA00Aa3f17D6C70431f8d0D4123B0a3
 

Overview

ETH Balance

0.029119181706347899 ETH

Eth Value

$95.37 (@ $3,275.06/ETH)

Token Holdings

Multichain Info

1 address found via
Transaction Hash
Method
Block
From
To
BUY148092242022-05-20 5:10:00799 days ago1653023400IN
0x6e892da9...D4123B0a3
0.03376383 ETH0.0022196214.56026876
BUY148082952022-05-20 1:31:01799 days ago1653010261IN
0x6e892da9...D4123B0a3
0.05 ETH0.0031883320.912859
BUY148082692022-05-20 1:25:03799 days ago1653009903IN
0x6e892da9...D4123B0a3
0.03 ETH0.0035116123.0354272
Sync147899782022-05-17 2:44:20802 days ago1652755460IN
0x6e892da9...D4123B0a3
0 ETH0.0054829333.31269222
Sync147899372022-05-17 2:32:59802 days ago1652754779IN
0x6e892da9...D4123B0a3
0 ETH0.0072625244.12496151
SELL147797362022-05-15 11:36:50803 days ago1652614610IN
0x6e892da9...D4123B0a3
0 ETH0.0109127217.03130292
BUY147736852022-05-14 12:44:28804 days ago1652532268IN
0x6e892da9...D4123B0a3
0.06 ETH0.0143088236.40497254
BUY147711582022-05-14 2:48:26805 days ago1652496506IN
0x6e892da9...D4123B0a3
0.02422453 ETH0.029782553
BUY147670442022-05-13 11:18:09805 days ago1652440689IN
0x6e892da9...D4123B0a3
0.06 ETH0.0198864350.59569219
BUY147652562022-05-13 4:30:20806 days ago1652416220IN
0x6e892da9...D4123B0a3
0.35432901 ETH0.0306147177.89093092
BUY147637802022-05-12 22:45:19806 days ago1652395519IN
0x6e892da9...D4123B0a3
0.14 ETH0.0371025491.51766829
BUY147635562022-05-12 21:53:06806 days ago1652392386IN
0x6e892da9...D4123B0a3
0.04 ETH0.0287343473.10942053
BUY147608322022-05-12 11:29:50806 days ago1652354990IN
0x6e892da9...D4123B0a3
0.08622601 ETH0.0209939132.46786427
BUY147522872022-05-11 2:47:30808 days ago1652237250IN
0x6e892da9...D4123B0a3
0.01 ETH0.0136973634.85051243
BUY147510572022-05-10 21:59:56808 days ago1652219996IN
0x6e892da9...D4123B0a3
0.17 ETH0.0590796668.88663887
BUY147485912022-05-10 12:35:24808 days ago1652186124IN
0x6e892da9...D4123B0a3
0.37432277 ETH0.0129555631.586764
BUY147480322022-05-10 10:24:49808 days ago1652178289IN
0x6e892da9...D4123B0a3
0.26 ETH0.0116022329.51786332
BUY147465342022-05-10 4:27:26809 days ago1652156846IN
0x6e892da9...D4123B0a3
0.28 ETH0.0185368345.19437573
BUY147438862022-05-09 18:21:05809 days ago1652120465IN
0x6e892da9...D4123B0a3
0.2 ETH0.0302069676.85350195
BUY147393852022-05-09 0:59:00810 days ago1652057940IN
0x6e892da9...D4123B0a3
0.08196383 ETH0.0108401227.57978314
SELL147370112022-05-08 16:05:43810 days ago1652025943IN
0x6e892da9...D4123B0a3
0 ETH0.0132187829.17628264
BUY147339622022-05-08 4:24:57811 days ago1651983897IN
0x6e892da9...D4123B0a3
0.08235692 ETH0.0084479521.49422181
BUY147339282022-05-08 4:18:04811 days ago1651983484IN
0x6e892da9...D4123B0a3
0.07088062 ETH0.0099974824.37542662
BUY147336862022-05-08 3:16:37811 days ago1651979797IN
0x6e892da9...D4123B0a3
0.09 ETH0.0098398723.99116038
BUY147335722022-05-08 2:51:08811 days ago1651978268IN
0x6e892da9...D4123B0a3
0.08277157 ETH0.0081937151.70090587
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
148092242022-05-20 5:10:00799 days ago1653023400
0x6e892da9...D4123B0a3
0.00016881 ETH
148092242022-05-20 5:10:00799 days ago1653023400
0x6e892da9...D4123B0a3
0.03359501 ETH
148082952022-05-20 1:31:01799 days ago1653010261
0x6e892da9...D4123B0a3
0.00025 ETH
148082952022-05-20 1:31:01799 days ago1653010261
0x6e892da9...D4123B0a3
0.04975 ETH
148082692022-05-20 1:25:03799 days ago1653009903
0x6e892da9...D4123B0a3
0.00015 ETH
148082692022-05-20 1:25:03799 days ago1653009903
0x6e892da9...D4123B0a3
0.02985 ETH
147797362022-05-15 11:36:50803 days ago1652614610
0x6e892da9...D4123B0a3
0.00526748 ETH
147797362022-05-15 11:36:50803 days ago1652614610
0x6e892da9...D4123B0a3
0.00526748 ETH
147797362022-05-15 11:36:50803 days ago1652614610
0x6e892da9...D4123B0a3
0.84616871 ETH
147797362022-05-15 11:36:50803 days ago1652614610
0x6e892da9...D4123B0a3
0.84744562 ETH
147736852022-05-14 12:44:28804 days ago1652532268
0x6e892da9...D4123B0a3
0.0003 ETH
147736852022-05-14 12:44:28804 days ago1652532268
0x6e892da9...D4123B0a3
0.0597 ETH
147711582022-05-14 2:48:26805 days ago1652496506
0x6e892da9...D4123B0a3
0.00012112 ETH
147711582022-05-14 2:48:26805 days ago1652496506
0x6e892da9...D4123B0a3
0.0241034 ETH
147670442022-05-13 11:18:09805 days ago1652440689
0x6e892da9...D4123B0a3
0.0003 ETH
147670442022-05-13 11:18:09805 days ago1652440689
0x6e892da9...D4123B0a3
0.0597 ETH
147652562022-05-13 4:30:20806 days ago1652416220
0x6e892da9...D4123B0a3
0.00177164 ETH
147652562022-05-13 4:30:20806 days ago1652416220
0x6e892da9...D4123B0a3
0.35255736 ETH
147637802022-05-12 22:45:19806 days ago1652395519
0x6e892da9...D4123B0a3
0.00397746 ETH
147637802022-05-12 22:45:19806 days ago1652395519
0x6e892da9...D4123B0a3
0.0007 ETH
147637802022-05-12 22:45:19806 days ago1652395519
0x6e892da9...D4123B0a3
0.1393 ETH
147635562022-05-12 21:53:06806 days ago1652392386
0x6e892da9...D4123B0a3
0.0002 ETH
147635562022-05-12 21:53:06806 days ago1652392386
0x6e892da9...D4123B0a3
0.0398 ETH
147608322022-05-12 11:29:50806 days ago1652354990
0x6e892da9...D4123B0a3
0.00043113 ETH
147608322022-05-12 11:29:50806 days ago1652354990
0x6e892da9...D4123B0a3
0.08579488 ETH
View All Internal Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x80598337...3ACE27272
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
FEGexPRO

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 5 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-19
*/

pragma solidity 0.8.7;     
// SPDX-License-Identifier: UNLICENSED 

contract FEGmath {

    function btoi(uint256 a)
        internal pure
        returns (uint256)
    {
        return a / 1e18;
    }

    function bfloor(uint256 a)
        internal pure
        returns (uint256)
    {
        return btoi(a) * 1e18;
    }

    function badd(uint256 a, uint256 b)
        internal pure
        returns (uint256)
    {
        uint256 c = a + b;
        require(c >= a, "ERR_ADD_OVERFLOW");
        return c;
    }

    function bsub(uint256 a, uint256 b)
        internal pure
        returns (uint256)
    {
        (uint256 c, bool flag) = bsubSign(a, b);
        require(!flag, "ERR_SUB_UNDERFLOW");
        return c;
    }

    function bsubSign(uint256 a, uint256 b)
        internal pure
        returns (uint, bool)
    {
        if (a >= b) {
            return (a - b, false);
        } else {
            return (b - a, true);
        }
    }

    function bmul(uint256 a, uint256 b)
        internal pure
        returns (uint256)
    {
        uint256 c0 = a * b;
        require(a == 0 || c0 / a == b, "ERR_MUL_OVERFLOW");
        uint256 c1 = c0 + (1e18 / 2);
        require(c1 >= c0, "ERR_MUL_OVERFLOW");
        uint256 c2 = c1 / 1e18;
        return c2;
    }

    function bdiv(uint256 a, uint256 b)
        internal pure
        returns (uint256)
    {
        require(b != 0, "ERR_DIV_ZERO");
        uint256 c0 = a * 1e18;
        require(a == 0 || c0 / a == 1e18, "ERR_DIV_INTERNAL"); // bmul overflow
        uint256 c1 = c0 + (b / 2);
        require(c1 >= c0, "ERR_DIV_INTERNAL"); //  badd require
        uint256 c2 = c1 / b;
        return c2;
    }

    function bpowi(uint256 a, uint256 n)
        internal pure
        returns (uint256)
    {
        uint256 z = n % 2 != 0 ? a : 1e18;

        for (n /= 2; n != 0; n /= 2) {
            a = bmul(a, a);

            if (n % 2 != 0) {
                z = bmul(z, a);
            }
        }
        return z;
    }

    function bpow(uint256 base, uint256 exp)
        internal pure
        returns (uint256)
    {
        require(base >= 1 wei, "ERR_BPOW_BASE_TOO_LOW");
        require(base <= (2 * 1e18) - 1 wei, "ERR_BPOW_BASE_TOO_HIGH");

        uint256 whole  = bfloor(exp);
        uint256 remain = bsub(exp, whole);

        uint256 wholePow = bpowi(base, btoi(whole));

        if (remain == 0) {
            return wholePow;
        }

        uint256 partialResult = bpowApprox(base, remain, 1e18 / 1e10);
        return bmul(wholePow, partialResult);
    }

    function bpowApprox(uint256 base, uint256 exp, uint256 precision)
        internal pure
        returns (uint256)
    {
        uint256 a     = exp;
        (uint256 x, bool xneg)  = bsubSign(base, 1e18);
        uint256 term = 1e18;
        uint256 sum   = term;
        bool negative = false;


        for (uint256 i = 1; term >= precision; i++) {
            uint256 bigK = i * 1e18;
            (uint256 c, bool cneg) = bsubSign(a, bsub(bigK, 1e18));
            term = bmul(term, bmul(c, x));
            term = bdiv(term, bigK);
            if (term == 0) break;

            if (xneg) negative = !negative;
            if (cneg) negative = !negative;
            if (negative) {
                sum = bsub(sum, term);
            } else {
                sum = badd(sum, term);
            }
        }

        return sum;
    }
}

contract FMath is FEGmath {
    
        function calcSpotPrice(
        uint256 tokenBalanceIn,
        uint256 tokenWeightIn,
        uint256 tokenBalanceOut,
        uint256 tokenWeightOut,
        uint256 swapFee
    )
        public pure
        returns (uint256 spotPrice)
    {
        uint256 numer = bdiv(tokenBalanceIn, tokenWeightIn);
        uint256 denom = bdiv(tokenBalanceOut, tokenWeightOut);
        uint256 ratio = bdiv(numer, denom);
        uint256 scale = bdiv(10**18, bsub(10**18, swapFee));
        return  (spotPrice = bmul(ratio, scale));
    }


    function calcOutGivenIn(
        uint256 tokenBalanceIn,
        uint256 tokenWeightIn,
        uint256 tokenBalanceOut,
        uint256 tokenWeightOut,
        uint256 tokenAmountIn,
        uint256 swapFee
    )
        public pure
        returns (uint256 tokenAmountOut, uint256 tokenInFee)
    {
        uint256 weightRatio = bdiv(tokenWeightIn, tokenWeightOut);
        uint256 adjustedIn = bsub(10**18, swapFee);
        adjustedIn = bmul(tokenAmountIn, adjustedIn);
        uint256 y = bdiv(tokenBalanceIn, badd(tokenBalanceIn, adjustedIn));
        uint256 foo = bpow(y, weightRatio);
        uint256 bar = bsub(1e18, foo);
        tokenAmountOut = bmul(tokenBalanceOut, bar);
        tokenInFee = bsub(tokenAmountIn, adjustedIn);
        return (tokenAmountOut, tokenInFee);
    }

    function calcOutGivenIn1(
        uint256 tokenBalanceIn,
        uint256 tokenWeightIn,
        uint256 tokenBalanceOut,
        uint256 tokenWeightOut,
        uint256 tokenAmountIn
    )
        public pure
        returns (uint256 tokenAmountOut)
    {
        uint256 weightRatio = bdiv(tokenWeightIn, tokenWeightOut);
        uint256 adjustedIn = bsub(10**18, 0);
        adjustedIn = bmul(tokenAmountIn, adjustedIn);
        uint256 y = bdiv(tokenBalanceIn, badd(tokenBalanceIn, adjustedIn));
        uint256 foo = bpow(y, weightRatio);
        uint256 bar = bsub(1e18, foo);
        tokenAmountOut = bmul(tokenBalanceOut, bar);
        return tokenAmountOut;
    }

    function calcInGivenOut(
        uint256 tokenBalanceIn,
        uint256 tokenWeightIn,
        uint256 tokenBalanceOut,
        uint256 tokenWeightOut,
        uint256 tokenAmountOut,
        uint256 swapFee
    )
        public pure
        returns (uint256 tokenAmountIn, uint256 tokenInFee)
    {
        uint256 weightRatio = bdiv(tokenWeightOut, tokenWeightIn);
        uint256 diff = bsub(tokenBalanceOut, tokenAmountOut);
        uint256 y = bdiv(tokenBalanceOut, diff);
        uint256 foo = bpow(y, weightRatio);
        foo = bsub(foo, 1e18);
        foo = bmul(tokenBalanceIn, foo);
        tokenAmountIn = bsub(1e18, swapFee);
        tokenAmountIn = bdiv(foo, tokenAmountIn);
        tokenInFee = bdiv(foo, 1e18);
        tokenInFee = bsub(tokenAmountIn, tokenInFee);
        return (tokenAmountIn, tokenInFee);
    }
}

interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address whom) external view returns (uint256);
    function allowance(address src, address dst) external view returns (uint256);
    function approve(address dst, uint256 amt) external returns (bool);
    function transfer(address dst, uint256 amt) external returns (bool);
    function transferFrom(
        address src, address dst, uint256 amt
    ) external returns (bool);
}

interface wrap {
    function deposit() external payable;
    function withdraw(uint256 amt) external;
    function transfer(address recipient, uint256 amount) external returns (bool);
}

interface swap {
    function depositInternal(address asset, uint256 amt) external;
    function payMain(address payee, uint256 amount) external;
    function payToken(address payee, uint256 amount) external;
    function BUY(uint256 dot, address to, uint256 minAmountOut) external payable;
}

library TransferHelper {
    
    function safeTransferFrom(address token, address from, address to, uint256 value) internal {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED');
    }

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

library Address {
    
    function isContract(address account) internal view returns (bool) {
         bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }
    
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
   
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract LPTokenBase is FEGmath {

    mapping(address => uint256)                   internal _balance;
    mapping(address => mapping(address=>uint256)) internal _allowance;
    uint256 public totalSupply = 0;
    event Approval(address indexed src, address indexed dst, uint256 amt);
    event Transfer(address indexed src, address indexed dst, uint256 amt);
    
    function _mint(uint256 amt) internal {
        _balance[address(this)] = badd(_balance[address(this)], amt);
        totalSupply = badd(totalSupply, amt);
        emit Transfer(address(0), address(this), amt);
    }

    function _move(address src, address dst, uint256 amt) internal {
        require(_balance[src] >= amt);
        _balance[src] = bsub(_balance[src], amt);
        _balance[dst] = badd(_balance[dst], amt);
        emit Transfer(src, dst, amt);
    }

    function _push(address to, uint256 amt) internal {
        _move(address(this), to, amt);
    }
}

contract LPToken is LPTokenBase {

    string  public name     = "FEGex PRO";
    string  public symbol   = "LP Token";
    uint8   public decimals = 18;

    function allowance(address src, address dst) external view returns (uint256) {
        return _allowance[src][dst];
    }

    function balanceOf(address whom) external view returns (uint256) {
        return _balance[whom];
    }

    function approve(address dst, uint256 amt) external returns (bool) {
        _allowance[msg.sender][dst] = amt;
        emit Approval(msg.sender, dst, amt);
        return true;
    }

    function increaseApproval(address dst, uint256 amt) external returns (bool) {
        _allowance[msg.sender][dst] = badd(_allowance[msg.sender][dst], amt);
        emit Approval(msg.sender, dst, _allowance[msg.sender][dst]);
        return true;
    }

    function decreaseApproval(address dst, uint256 amt) external returns (bool) {
        uint256 oldValue = _allowance[msg.sender][dst];
        if (amt > oldValue) {
            _allowance[msg.sender][dst] = 0;
        } else {
            _allowance[msg.sender][dst] = bsub(oldValue, amt);
        }
        emit Approval(msg.sender, dst, _allowance[msg.sender][dst]);
        return true;
    }
}


interface FEGexPair {
    function initialize(address, address, address, address, uint256) external; 
    function deploySwap(address, uint256) external;
    function userBalanceInternal(address _addr) external returns (uint256, uint256);
}

interface newDeployer {
    function createPair(address token, uint256 liqmain, uint256 liqtoken, address owner) external;
}

contract FEGexPRO is LPToken, FMath {
    using Address for address;
    struct Record {
        uint256 index;
        uint256 balance;
    }
    
    struct userLock {
        bool setLock; // true = lockedLiquidity, false = unlockedLiquidity
        uint256 unlockTime; // time liquidity can be released
    }
    
    function getUserLock(address usr) public view returns(bool lock){
        return (_userlock[usr].setLock);
    }

    event LOG_SWAP(
        address indexed caller,
        address indexed tokenIn,
        address indexed tokenOut,
        uint256         tokenAmountIn,
        uint256         tokenAmountOut
);

    event LOG_JOIN(
        address indexed caller,
        address indexed tokenIn,
        uint256         tokenAmountIn,
        uint256         reservesAmount
);

    event LOG_EXIT(
        address indexed caller,
        address indexed tokenOut,
        uint256         tokenAmountOut,
        uint256         reservesAmount
    );

    event LOG_SMARTSWAP(
        address indexed caller,
        address indexed tokenIn,
        address indexed tokenOut,
        uint256         AmountIn,
        uint256         AmountOut
);

    uint256 private spec;
    address private _controller = 0x4c9BC793716e8dC05d1F48D8cA8f84318Ec3043C; 
    address private _setter = 0x86882FA66aC57039b10D78e2D3205592A44664c0;
    address private fegp;
    address private FEG = 0x389999216860AB8E0175387A0c90E5c52522C945;
    address private burn = 0x000000000000000000000000000000000000dEaD;
    address public _poolOwner;
    address public Main = 0xf786c34106762Ab4Eeb45a51B42a62470E9D5332;
    address private newDep;
    address public Token;
    address public pairRewardPool;
    address private FEGstake;
    address public Bonus;
    uint256 public MAX_BUY_RATIO = 100e18;
    uint256 public MAX_SELL_RATIO;
    uint256 public PSS = 20; // pairRewardPool Share 0.2% default
    uint256 public RPF = 1000; // Smart Rising Price Floor Setting
    address[] private _tokens;
    uint256 public _totalSupply1;
    uint256 public _totalSupply2;
    uint256 public _totalSupply7;
    uint256 public _totalSupply8;
    uint256 public lockedLiquidity;
    uint256 public totalSentRebates;
    bool private live = false;
    //bool private on = true;
    bool public open = false;
    mapping(address=>Record) private  _records;
    mapping(address=>userLock) private  _userlock;
    mapping(address=>userLock) public  _unlockTime;
    mapping(address=>bool) private whiteListContract;
    mapping(address => uint256) private _balances1;
    mapping(address => uint256) private _balances2;
    uint256 private constant MAX_RATIO  = 50; // Max ratio for all trades based on liquidity amount
    uint256 public tx1;
    uint256 public tx2 = 99;
    uint256 private status = 0;
   
    function initialize( address _token1, address owner, address _made, address _fegp, uint256 ol) external{
        require(live == false, "Can only use once");
        Token = _token1;
        _poolOwner = owner;
        pairRewardPool = owner;
        spec = ol;
        fegp = _fegp;
        FEGstake = _made;
        MAX_SELL_RATIO = bmul(IERC20(Token).totalSupply(), bdiv(1, 20));
    }
    
    receive() external payable {
    }

    function userBalanceInternal(address _addr) public view returns(uint256, uint256) {
        uint256 main  = _balances2[_addr];
        uint256 token = _balances1[_addr];
        return (token, main);
    } 
    
    function isContract(address account) internal view returns(bool) {
        
        if(IsWhiteListContract(account)) {  return false; }
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        assembly { codehash := extcodehash(account) }
        return (codehash != 0x0 && codehash != accountHash);
    }
    
    function addWhiteListContract(address _addy, bool boolean) public {
        require(msg.sender == _setter);
        whiteListContract[_addy] = boolean;
    }
    
    function IsWhiteListContract(address _addy) public view returns(bool){
        return whiteListContract[_addy];
    }
    
    modifier noContract() {
        require(isContract(msg.sender) == false, "Unapproved contracts are not allowed to interact with the swap");
        _;
    }
    
    function sync() public {  // updates the liquidity to current state
        _records[Token].balance = IERC20(Token).balanceOf(address(this)) - _totalSupply1;  
        uint256 al = (_totalSupply2 + _totalSupply7 + _totalSupply8);
        _records[Main].balance = IERC20(Main).balanceOf(address(this)) - al;
    }
    
    function setMaxBuySellRatio(uint256 sellmax, uint256 buymax) public {
        require(msg.sender == _poolOwner, "You do not have permission");
        uint256 tob = IERC20(Token).totalSupply();
        require (sellmax >= tob/1000 && sellmax <= tob, "min 0.1% of token supply, max 100% of token supply"); 
        require (buymax >= 1e18, "1 BNB minimum");
        MAX_SELL_RATIO = sellmax;
        MAX_BUY_RATIO = buymax;
    }
    
    function openit() public{ // Since only sets to true, trading can never be turned off
        require(msg.sender == _poolOwner);
        open = true;
    }
    
    function setBonus(address _bonus) public{ // For tokens that have a 3rd party token reflection
        require(msg.sender == _poolOwner && _bonus != Main  && _bonus != Token);
        require(isContract(_bonus) == true);
        Bonus = _bonus;
    }
    
    function setStakePool(address _stake, address _fegp, address newd) public {
        require(msg.sender == _setter);
        FEGstake = _stake;
        fegp = _fegp;
        newDep = newd;
    }
    
    function setPRP(address prp) public {
        require(msg.sender == _setter);
        pairRewardPool = prp;
    }
    
    function setTX1(uint256 amt) public {
        require(msg.sender == _setter);
        tx1 = amt;
    }
    
    function getBalance(address token)
        external view
        returns (uint256)
    {
        
        return _records[token].balance;
    }

    function setCont(address manager, address set, address ad)
        external
    {
        require(msg.sender == _controller);
        _controller = manager;
        _setter = set;
        _poolOwner = ad; // Incase pool owner wallet was compromised and needs new access
    }
    
    function setLockLiquidity() public { //
        address user;
        user = msg.sender;
        require(getUserLock(user) == false, "Liquidity already locked");
        uint256 total = IERC20(address(this)).balanceOf(user);
        userLock storage ulock = _userlock[user];
        userLock storage time = _unlockTime[user];
        ulock.setLock = true;
        time.unlockTime = block.timestamp + 90 days; 
        lockedLiquidity += total;
    }
    
    function deploySwap (address _from, uint256 liqtoken)
        external
        {
        require(live == false);
        uint256 much = IERC20(Token).balanceOf(address(this));
        uint256 much1 = IERC20(Main).balanceOf(address(this));
        _records[Token] = Record({
            index: _tokens.length,
            balance: much
        });
        
        _records[Main] = Record({
            index: _tokens.length,
            balance: much1
        });
        
        _tokens.push(Token);
        _tokens.push(Main);
        uint256 a = bdiv(_records[Token].balance, 1e9);
        uint256 b = bdiv(_records[Main].balance, 1e18);
        uint256 c = a + b;
        _mint(c);
        _push(_from, c);
        lockedLiquidity = badd(lockedLiquidity, c);
        userLock storage ulock = _userlock[_from];
        userLock storage time = _unlockTime[_from];
        ulock.setLock = true;
        time.unlockTime = block.timestamp + 365 days; 
        live = true;
        tx1 = bmul(100, bdiv(much, liqtoken)); 
    }
   
    function getSpotPrice(address tokenIn, address tokenOut)
        public view
        returns (uint256 spotPrice)
    {
        
        Record storage inRecord = _records[address(tokenIn)];
        Record storage outRecord = _records[address(tokenOut)];
        return calcSpotPrice(inRecord.balance, bmul(1e18, 25), outRecord.balance, bmul(1e18, 25), 2e15);
    }
        
    function depositInternal(address asset, uint256 amt) external {
        require(asset == Main || asset == Token, "Not supported");
        require(status == 0, "No reentry");
        status = 1;
        require(open == true);
        
        if(asset == Token){
        uint256 bef = _records[Token].balance;     
        _pullUnderlying(Token, msg.sender, amt);
        uint256 aft = bsub(IERC20(Token).balanceOf(address(this)), _totalSupply1);  
        uint256 finalAmount = bsub(aft, bef);  
        _totalSupply1 += finalAmount;
        _balances1[msg.sender] += finalAmount;
        }
        else{
        uint256 bef = _records[Main].balance;
        _pullUnderlying(Main, msg.sender, amt);
        uint256 aft = bsub(IERC20(Main).balanceOf(address(this)), badd(_totalSupply2, badd(_totalSupply7, _totalSupply8)));
        uint256 finalAmount = bsub(aft, bef);
        _totalSupply2  += finalAmount;
        _balances2[msg.sender] += finalAmount;
        }
        status = 0;
    }

    function withdrawInternal(address asset, uint256 amt) external {
        require(asset == Main || asset == Token, "Not supported");
        require(status == 0, "No reentry");
        status = 1;
        
        if(asset == Token){
        require(_balances1[msg.sender] >= amt, "Not enough Token");
        _totalSupply1 -= amt;
        _balances1[msg.sender] -= amt;
        _pushUnderlying(Token, msg.sender, amt);
        }
        else{
        require(_balances2[msg.sender] >= amt, "Not enough Main");
        _totalSupply2 -= amt;
        _balances2[msg.sender] -= amt;
        _pushUnderlying(Main, msg.sender, amt);
        }
        status = 0;
    }

    function swapToSwap(address path, address asset, address to, uint256 amt) external {
        require(asset == Main || asset == Token, "Not supported");
        require(status == 0, "No reentry");
        status = 1;
        if(asset == Main){
        require(_balances2[msg.sender] >= amt, "Not enough Main");
        IERC20(address(Main)).approve(address(path), amt);   
        _totalSupply2 -= amt;
        _balances2[msg.sender] -= amt;
        swap(path).depositInternal(Main, amt);
        (uint256 tokens, uint256 mains) = FEGexPair(path).userBalanceInternal(address(this));
        swap(path).payMain(to, mains);
        tokens = 0;
        }
    
        else{
        require(_balances1[msg.sender] >= amt, "Not enough Token");
        IERC20(address(Token)).approve(address(path), amt);
        _totalSupply1 -= amt;
        _balances1[msg.sender] -= amt;
        swap(path).depositInternal(Token, amt);
        (uint256 tokens, uint256 mains) = FEGexPair(path).userBalanceInternal(address(this));
        swap(path).payToken(to, tokens);
        mains = 0;
        }
        status = 0;
    }
    
    function transfer(address dst, uint256 amt) external returns(bool) {
        require(getUserLock(msg.sender) == false, "Liquidity is locked, you cannot remove liquidity until after lock time.");
        _move(msg.sender, dst, amt);
        return true;
    }

    function transferFrom(address src, address dst, uint256 amt) external returns(bool) {
        require(msg.sender == src || amt <= _allowance[src][msg.sender]);
        require(getUserLock(msg.sender) == false, "Liquidity is locked, you cannot remove liquidity until after lock time.");
        _move(src, dst, amt);
        if (msg.sender != src && _allowance[src][msg.sender] != type(uint256).max) {
            _allowance[src][msg.sender] = bsub(_allowance[src][msg.sender], amt);
            emit Approval(msg.sender, dst, _allowance[src][msg.sender]);
        }
        return true;
    }
    
    function addBothLiquidity(uint256 poolAmountOut, uint[] calldata maxAmountsIn)
        external 
    {
        require(status == 0, "No reentry");
        status = 1;
        uint256 poolTotal = totalSupply;
        uint256 ratio = bdiv(poolAmountOut, poolTotal);
        
        if(getUserLock(msg.sender) == true){
        lockedLiquidity += poolAmountOut;    
        }
        
        for (uint256 i = 0; i < _tokens.length; i++) {
            address t = _tokens[i];
            uint256 bal = _records[t].balance;
            
            uint256 tokenAmountIn = bmul(ratio, bal); 
            require(tokenAmountIn <= maxAmountsIn[i]);
            emit LOG_JOIN(msg.sender, t, tokenAmountIn, 0);
            _pullUnderlying(t, msg.sender, tokenAmountIn);
            
        }
        _mint(poolAmountOut);
        _push(msg.sender, poolAmountOut);
        sync();
        status = 0;
    }
   
    function removeBothLiquidity(uint256 poolAmountIn, uint[] calldata minAmountsOut)
        external 
    {
        
        require(getUserLock(msg.sender) == false, "Liquidity is locked, you cannot remove liquidity until after lock time.");
        require(status == 0, "No reentry");
        status = 1;
        sync();
        uint256 poolTotal = totalSupply;
        uint256 ratio = bdiv(poolAmountIn, poolTotal);

        _balance[msg.sender] -= poolAmountIn;
        totalSupply -= poolAmountIn;
        emit Transfer(msg.sender, address(0), poolAmountIn);
        
        for (uint256 i = 0; i < _tokens.length; i++) {
            address t = _tokens[i];
            uint256 bal = _records[t].balance;
            uint256 tokenAmountOut = bmul(ratio, bal);
            require(tokenAmountOut >= minAmountsOut[i], "Minimum amount out not met");
            emit LOG_EXIT(msg.sender, t, tokenAmountOut, 0);
            _pushUnderlying(t, msg.sender, tokenAmountOut);
        }
        
        uint256 tab = bmul(ratio, _balances2[burn]);
        _balances2[burn] -= tab;
        _balances2[msg.sender] += tab;
        sync();
        if(Bonus != address(0)){
        uint256 bal1 = bmul(ratio, IERC20(Bonus).balanceOf(address(this)));
        if(bal1 > 0){
        _pushUnderlying(Bonus, msg.sender, bal1);
        }
        }
        status = 0;
    }
    
    function sendRebate() internal {
        uint256 re = address(this).balance / 8;
        TransferHelper.safeTransferETH(msg.sender, re);
        totalSentRebates += re;
    }
    
    function BUYSmart(
        uint256 tokenAmountIn,
        uint256 minAmountOut
    )   
        external 
        returns(uint256 tokenAmountOut)
    {

        require(_balances2[msg.sender] >= tokenAmountIn, "Not enough Main, deposit more");
        require(status == 0, "No reentry");
        status = 1;
        Record storage inRecord = _records[address(Main)];
        Record storage outRecord = _records[address(Token)];
        require(tokenAmountIn <= MAX_BUY_RATIO, "ERR_BUY_IN_RATIO");
        uint256 tokenInFee;
        (tokenAmountOut, tokenInFee) = calcOutGivenIn(
                                            inRecord.balance,
                                            bmul(1e18, 25),
                                            outRecord.balance,
                                            bmul(1e18, 25),
                                            bmul(tokenAmountIn, bdiv(999, 1000)),
                                            0
                                        );
        
        require(tokenAmountOut <= bmul(outRecord.balance, bdiv(MAX_RATIO, 100)), "Over MAX_OUT_RATIO");                                
        require(tokenAmountOut >= minAmountOut, "Minimum amount out not met");   
        _balances2[msg.sender] -= tokenAmountIn;
        _totalSupply2 -= tokenAmountIn;
        _balances1[msg.sender] += tokenAmountOut;
        _totalSupply1 += tokenAmountOut;
        _totalSupply8 += bmul(tokenAmountIn, bdiv(1, 1000));
        sync();
        emit LOG_SMARTSWAP(msg.sender, Main, Token, tokenAmountIn, tokenAmountOut);
        uint256 hold = IERC20(FEG).balanceOf(address(msg.sender));
        if(address(this).balance > 0 && tokenAmountIn >= 5e16 && hold >= 2e19){
        uint256 re = bdiv(address(this).balance, 8);
        TransferHelper.safeTransferETH(msg.sender, re);
        totalSentRebates += re;
        }
        status = 0;
        return(tokenAmountOut);
    }
    
    function BUY(
        uint256 dot,
        address to,
        uint256 minAmountOut
    )  
        external payable
        returns(uint256 tokenAmountOut)
    {
        require(status == 0, "No reentry");
        status = 1;
        require(open == true, "Swap not opened");
        uint256 maker = bmul(msg.value, bdiv(995, 1000));
        wrap(Main).deposit{value: maker}();
        TransferHelper.safeTransferETH(msg.sender, bmul(msg.value, bdiv(5, 1000)));
        
        if(Address.isContract(msg.sender) == true){ 
        require(dot == spec, "Contracts are not allowed to interact with the Swap");
        }
        
        uint256 hold = IERC20(FEG).balanceOf(address(msg.sender));
        uint256 io = address(this).balance;
        
        if(io > 0 && msg.value >= 5e16 && hold >= 2e19){
        sendRebate();
        }
        
        Record storage inRecord = _records[address(Main)];
        Record storage outRecord = _records[address(Token)];
        
        require(msg.value <= MAX_BUY_RATIO, "ERR_BUY_IN_RATIO");
        
        uint256 tokenInFee;
        (tokenAmountOut, tokenInFee) = calcOutGivenIn(
                                            inRecord.balance,
                                            bmul(1e18, 25),
                                            outRecord.balance,
                                            bmul(1e18, 25),
                                            bmul(maker, bdiv(999, 1000)),
                                            0
                                        );
                                        
        require(tokenAmountOut <= bmul(outRecord.balance, bdiv(MAX_RATIO, 100)), "Over MAX_OUT_RATIO");
        _totalSupply8 += bmul(msg.value, bdiv(1, 1000));                                
        require(tokenAmountOut >= minAmountOut, "Minimum amount out not met");
        _pushUnderlying(Token, to, tokenAmountOut);
        sync();

        emit LOG_SWAP(msg.sender, Main, Token, msg.value, bmul(tokenAmountOut, bdiv(tx1, 100)));
        status = 0;
        return(tokenAmountOut);
    }
    
    function SELL(
        uint256 dot,
        address to,
        uint256 tokenAmountIn,
        uint256 minAmountOut
    )   
        external
        returns(uint256 tokenAmountOut)
    {   
        if(IsWhiteListContract(msg.sender) == false){
        require(status == 0, "No reentry");
        }
        status = 1;
        require(open == true, "Swap not opened");
        if(Address.isContract(msg.sender) == true){ 
        require(dot == spec, "Contracts are not allowed to interact with the Swap");
        }
        
        require(tokenAmountIn <= MAX_SELL_RATIO, "ERR_SELL_RATIO");
        uint256 omm = _records[Token].balance;
        _pullUnderlying(Token, msg.sender, tokenAmountIn);
        _records[Token].balance = IERC20(Token).balanceOf(address(this)) - _totalSupply1;
        uint256 trueamount = bmul((_records[Token].balance - omm), bdiv(998, 1000));
        
        tokenAmountOut = calcOutGivenIn1(
                                            _records[Token].balance,
                                            bmul(1e18, 25),
                                            _records[Main].balance,
                                            bmul(1e18, 25),
                                            trueamount
                                        );
        
        require(tokenAmountOut <= bmul(_records[Main].balance, bdiv(MAX_RATIO, 100)), "Over MAX_OUT_RATIO");                                
        require(tokenAmountOut >= minAmountOut, "Minimum amount out not met");
        uint256 toka = bmul(tokenAmountOut, bdiv(RPF, 1000));
        uint256 tokAmountI  = bmul(toka, bdiv(15, 10000));
        uint256 tok = bmul(toka, bdiv(15, 10000));
        uint256 tokAmountI2 =  bmul(toka, bdiv(PSS, 10000));
        uint256 io = (toka - (tokAmountI + tok + tokAmountI2));
        uint256 tokAmountI1 = bmul(io, bdiv(999, 1000));
        uint256 ox = _balances2[address(this)];
        
        if(ox > 1e16){
        _totalSupply2 -= ox;
        _balances2[address(this)] = 0;
        }
        
        wrap(Main).withdraw(tokAmountI1 + ox + tokAmountI);
        TransferHelper.safeTransferETH(to, bmul(tokAmountI1, bdiv(99, 100)));
        _totalSupply8 += bmul(io, bdiv(1, 1000));
        uint256 oss = bmul(tokAmountI2, bdiv(5, 100));
        uint256 osss = bmul(tokAmountI2, bdiv(15, 100));
        _balances2[pairRewardPool] += bmul(tokAmountI2, bdiv(80, 100));
        _balances2[_setter] += osss;
        _balances2[burn] += oss;
        _totalSupply2 += tokAmountI2;
        _totalSupply7 += tok;
        payStake();
        burnFEG();
        sync();
        emit LOG_SWAP(msg.sender, Token, Main, trueamount, bmul(tokAmountI1, bdiv(99, 100)));
        status = 0;
        return tokAmountI1;
    }
    
     function SELLSmart(
        uint256 tokenAmountIn,
        uint256 minAmountOut
    )   
        external
        returns(uint256 tokenAmountOut)
    {
        require(status == 0, "No reentry");
        status = 1;
        uint256 tai = tokenAmountIn;
        require(_balances1[msg.sender] >= tokenAmountIn, "Not enough Token");
        Record storage inRecord = _records[address(Token)];
        Record storage outRecord = _records[address(Main)];
        require(tokenAmountIn <= MAX_SELL_RATIO, "ERR_SELL_RATIO");

        tokenAmountOut = calcOutGivenIn1(
                                            inRecord.balance,
                                            bmul(1e18, 25),
                                            outRecord.balance,
                                            bmul(1e18, 25),
                                            bmul(tokenAmountIn, bdiv(998, 1000)) // 0.2% liquidity fee
                                        );

        require(tokenAmountOut <= bmul(outRecord.balance, bdiv(MAX_RATIO, 100)), "Over MAX_OUT_RATIO");
        uint256 toka = bmul(tokenAmountOut, bdiv(RPF, 1000));
        uint256 tokAmountI  = bmul(toka, bdiv(15, 10000));
        uint256 tok = bmul(toka, bdiv(15, 10000));
        uint256 tokAmountI2 =  bmul(toka, bdiv(PSS, 10000));
        uint256 io = (toka - (tokAmountI + tok + tokAmountI2));
        uint256 tokAmountI1 = bmul(io, bdiv(999, 1000));
        _totalSupply8 += bmul(io, bdiv(1, 1000));
        require(tokAmountI1 >= minAmountOut, "Minimum amount out not met");
        _balances1[msg.sender] -= tokenAmountIn;
        _totalSupply1 -= tokenAmountIn;
        _balances2[msg.sender] += tokAmountI1;
        _balances2[address(this)] += tokAmountI;
        uint256 os = bmul(tokAmountI2, bdiv(80, 100));
        uint256 oss = bmul(tokAmountI2, bdiv(5, 100));
        uint256 osss = bmul(tokAmountI2, bdiv(15, 100));
        _balances2[pairRewardPool] += os;
        _balances2[_setter] += osss;
        _balances2[burn] += oss;
        _totalSupply2 += (tokAmountI + tokAmountI2 + tokAmountI1);
        _totalSupply7 += tok;
        sync();
        burnFEG();
        emit LOG_SMARTSWAP(msg.sender, Token, Main, tai, tokAmountI1);
        status = 0;
        return(tokAmountI1);
    }
        
    function setPSSRPF(uint256 _PSS, uint256 _RPF) external {
        
        uint256 tot = _records[Main].balance;
        require(msg.sender == _poolOwner && tot >= 5e18, "You do not have permission");
        
        if(tot < 20e18) {// Incentive for providing higher liquidity
        require(_RPF >= 990 && _RPF <= 1000 && _PSS <= 100 && _PSS != 0, "Cannot set over 1%"); 
        }
        
        if(tot >= 20e18) {// Incentive for providing higher liquidity
        require(_RPF >= 900 && _RPF <= 1000 && _PSS <= 500 && _PSS != 0, "Cannot set PSS over 5% or RPF over 10%"); 
        }
        
        RPF = _RPF;
        PSS = _PSS;
    }
    
    function releaseLiquidity(address user) external { // Allows removal of liquidity after the lock period is over
        require(status == 0, "No reentry");
        status = 1;
        require(getUserLock(user) == true, "Liquidity not locked");
        userLock storage ulock = _userlock[user];
        userLock storage time = _unlockTime[user];
        if(msg.sender == _controller){
        time.unlockTime = block.timestamp + 1 days; // 24 hour notice for users
        }
        else{
        require(block.timestamp >= time.unlockTime && msg.sender == _poolOwner, "Liquidity is locked, you cannot release liquidity until after lock time.");
        ulock.setLock = false;
        uint256 total = IERC20(address(this)).balanceOf(user);
        lockedLiquidity -= total;
        }
        status = 0;
    }

    function Migrate() external { //Incase we upgrade to PROv2 in the future
        require(status == 0, "No reentry");
        status = 1;
        require(msg.sender == _poolOwner || msg.sender == _controller && newDep != address(0), "Not ready");
        sync();
        userLock storage ulock = _userlock[_poolOwner];
        IERC20(Main).approve(newDep, 1e30);
        IERC20(Token).approve(newDep, 1e50);
        uint256 tot = _balance[_poolOwner];
        _balance[_poolOwner] -= tot;
        uint256 ts = totalSupply;
        uint256 amt = bmul(_records[Main].balance, bdiv(tot, ts));
        uint256 amt1 = bmul(_records[Token].balance, bdiv(tot, ts));
        totalSupply -= tot;
        ulock.setLock = false;
        lockedLiquidity -= tot;
        newDeployer(newDep).createPair(Token, amt, amt1, _poolOwner);
        sync();
        status = 0;
    }

    function _pullUnderlying(address erc20, address from, uint256 amount)
        internal 
    {   
        bool xfer = IERC20(erc20).transferFrom(from, address(this), amount);
        require(xfer);
    }
    
    function _pushUnderlying(address erc20, address to, uint256 amount)
        internal 
    {   
        bool xfer = IERC20(erc20).transfer(to, amount);
        require(xfer);
    }
    
    function burnFEG() internal {
        if(_totalSupply8 > 25e14){ 
        wrap(Main).withdraw(_totalSupply8);
        swap(fegp).BUY{value:bmul(_totalSupply8, bdiv(99, 100))}(1001, burn, 1);
        _totalSupply8 = 0;
        }
    }
    
    function payStake() internal {   
        if(_totalSupply7 > 2e15) {
        _pushUnderlying(Main, FEGstake, _totalSupply7);
        _totalSupply7 = 0;
        }
    }
    
    function payMain(address payee, uint256 amount)
        external  
        
    {   
        require(_balances2[msg.sender] >= amount, "Not enough token");
        uint256 amt = bmul(amount, bdiv(997, 1000));
        _balances2[msg.sender] -= amount;
        _balances2[payee] += amt;
        _balances2[burn] += bsub(amount, amt);
        status = 0;
    }
    
    function payToken(address payee, uint256 amount)
        external  
        
    {
        require(status == 0, "No reentry");
        status = 1;
        require(_balances1[msg.sender] >= amount, "Not enough token");
        _balances1[msg.sender] -= amount;
        _balances1[payee] += amount;
        status = 0;
    }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":true,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"amt","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reservesAmount","type":"uint256"}],"name":"LOG_EXIT","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reservesAmount","type":"uint256"}],"name":"LOG_JOIN","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"AmountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"AmountOut","type":"uint256"}],"name":"LOG_SMARTSWAP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenAmountOut","type":"uint256"}],"name":"LOG_SWAP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":true,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"amt","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"dot","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BUY","outputs":[{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmountIn","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BUYSmart","outputs":[{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Bonus","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addy","type":"address"}],"name":"IsWhiteListContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BUY_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SELL_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Main","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Migrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"PSS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RPF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"dot","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenAmountIn","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"SELL","outputs":[{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmountIn","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"SELLSmart","outputs":[{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_poolOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply7","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply8","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_unlockTime","outputs":[{"internalType":"bool","name":"setLock","type":"bool"},{"internalType":"uint256","name":"unlockTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"}],"name":"addBothLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addy","type":"address"},{"internalType":"bool","name":"boolean","type":"bool"}],"name":"addWhiteListContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"whom","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenBalanceIn","type":"uint256"},{"internalType":"uint256","name":"tokenWeightIn","type":"uint256"},{"internalType":"uint256","name":"tokenBalanceOut","type":"uint256"},{"internalType":"uint256","name":"tokenWeightOut","type":"uint256"},{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"}],"name":"calcInGivenOut","outputs":[{"internalType":"uint256","name":"tokenAmountIn","type":"uint256"},{"internalType":"uint256","name":"tokenInFee","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenBalanceIn","type":"uint256"},{"internalType":"uint256","name":"tokenWeightIn","type":"uint256"},{"internalType":"uint256","name":"tokenBalanceOut","type":"uint256"},{"internalType":"uint256","name":"tokenWeightOut","type":"uint256"},{"internalType":"uint256","name":"tokenAmountIn","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"}],"name":"calcOutGivenIn","outputs":[{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"},{"internalType":"uint256","name":"tokenInFee","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenBalanceIn","type":"uint256"},{"internalType":"uint256","name":"tokenWeightIn","type":"uint256"},{"internalType":"uint256","name":"tokenBalanceOut","type":"uint256"},{"internalType":"uint256","name":"tokenWeightOut","type":"uint256"},{"internalType":"uint256","name":"tokenAmountIn","type":"uint256"}],"name":"calcOutGivenIn1","outputs":[{"internalType":"uint256","name":"tokenAmountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenBalanceIn","type":"uint256"},{"internalType":"uint256","name":"tokenWeightIn","type":"uint256"},{"internalType":"uint256","name":"tokenBalanceOut","type":"uint256"},{"internalType":"uint256","name":"tokenWeightOut","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"}],"name":"calcSpotPrice","outputs":[{"internalType":"uint256","name":"spotPrice","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"decreaseApproval","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"liqtoken","type":"uint256"}],"name":"deploySwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"depositInternal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"}],"name":"getSpotPrice","outputs":[{"internalType":"uint256","name":"spotPrice","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"getUserLock","outputs":[{"internalType":"bool","name":"lock","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"increaseApproval","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token1","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"_made","type":"address"},{"internalType":"address","name":"_fegp","type":"address"},{"internalType":"uint256","name":"ol","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lockedLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"open","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pairRewardPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"payee","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"payMain","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"payee","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"payToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"releaseLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeBothLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_bonus","type":"address"}],"name":"setBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"address","name":"set","type":"address"},{"internalType":"address","name":"ad","type":"address"}],"name":"setCont","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setLockLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellmax","type":"uint256"},{"internalType":"uint256","name":"buymax","type":"uint256"}],"name":"setMaxBuySellRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"prp","type":"address"}],"name":"setPRP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_PSS","type":"uint256"},{"internalType":"uint256","name":"_RPF","type":"uint256"}],"name":"setPSSRPF","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stake","type":"address"},{"internalType":"address","name":"_fegp","type":"address"},{"internalType":"address","name":"newd","type":"address"}],"name":"setStakePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"setTX1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"path","type":"address"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"swapToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSentRebates","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tx1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tx2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"userBalanceInternal","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"withdrawInternal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

Deployed Bytecode

0x6080604052600436106102e15760003560e01c80627b44a7146102ed5780630149e5c714610316578063036fe1bb14610346578063055a03c51461035c57806306fdde031461037257806307d729c414610394578063095ea7b3146103e5578063103ff68d1461040557806310510ec11461042757806312dcff7a1461044757806315e84af91461046757806318160ddd14610487578063192661121461049d578063207aba24146104bd5780632140fb40146104d257806323b872dd146104f257806329dfe3b2146105125780632b9abe1a14610532578063313ce5671461058257806331705705146105ae578063390a73e2146105db57806349a3fa9e146105f15780634f5c3d1b14610611578063520bb81b1461063157806365d1a40d1461065157806366188463146106715780636a8ebcd2146106915780636c5c6814146106a657806370a08231146106bc57806371a1e6dd146106f25780637bc224f91461071257806388f60dcb146107325780638c340f641461075257806395d89b411461077257806396c4b648146107875780639a6204ed146107a7578063a16faa18146107bd578063a221ee49146107d2578063a2e70a2e146107f2578063a9059cbb14610808578063ac7a36a214610828578063add975cc14610848578063ae1931be14610868578063b071148314610888578063b4398244146108a8578063ba9530a6146108be578063bbf12714146108de578063c172715c146108fe578063c241267614610911578063cdfec52d14610931578063d62b6f7e14610947578063d68de8de14610967578063d73dd62314610987578063da6d6578146109a7578063dbb74e22146109bd578063dd62ed3e146109dd578063ef8fdfd814610a23578063f1091b6e14610a43578063f7013ef614610a59578063f8b2cb4f14610a79578063f8d6aed414610ab2578063fbe8998914610ad2578063fcfff16f14610ae8578063fea4393a14610b07578063fff6cae914610b2757600080fd5b366102e857005b600080fd5b3480156102f957600080fd5b5061030360165481565b6040519081526020015b60405180910390f35b34801561032257600080fd5b50610336610331366004614c0c565b610b3c565b604051901515815260200161030d565b34801561035257600080fd5b5061030360195481565b34801561036857600080fd5b5061030360135481565b34801561037e57600080fd5b50610387610b5a565b60405161030d919061501b565b3480156103a057600080fd5b506103ce6103af366004614c0c565b6021602052600090815260409020805460019091015460ff9091169082565b60408051921515835260208301919091520161030d565b3480156103f157600080fd5b50610336610400366004614db7565b610be8565b34801561041157600080fd5b50610425610420366004614d80565b610c43565b005b34801561043357600080fd5b50610425610442366004614db7565b610c85565b34801561045357600080fd5b50610425610462366004614c0c565b610d3c565b34801561047357600080fd5b50610303610482366004614c27565b610dc0565b34801561049357600080fd5b5061030360025481565b3480156104a957600080fd5b506104256104b8366004614db7565b610e2e565b3480156104c957600080fd5b50610425610fbe565b3480156104de57600080fd5b506103366104ed366004614c0c565b6112ff565b3480156104fe57600080fd5b5061033661050d366004614d44565b61131c565b34801561051e57600080fd5b5061042561052d366004614e90565b61145b565b34801561053e57600080fd5b5061057461054d366004614c0c565b6001600160a01b031660009081526024602090815260408083205460239092529091205491565b60405161030d929190615327565b34801561058e57600080fd5b5060055461059c9060ff1681565b60405160ff909116815260200161030d565b3480156105ba57600080fd5b506010546105ce906001600160a01b031681565b60405161030d9190614fee565b3480156105e757600080fd5b50610303601b5481565b3480156105fd57600080fd5b5061042561060c366004614c5a565b611773565b34801561061d57600080fd5b5061030361062c366004614f54565b6117c9565b34801561063d57600080fd5b50600c546105ce906001600160a01b031681565b34801561065d57600080fd5b5061042561066c366004614db7565b61184f565b34801561067d57600080fd5b5061033661068c366004614db7565b61192c565b34801561069d57600080fd5b50610425611a02565b3480156106b257600080fd5b5061030360255481565b3480156106c857600080fd5b506103036106d7366004614c0c565b6001600160a01b031660009081526020819052604090205490565b3480156106fe57600080fd5b5061042561070d366004614e90565b611a2a565b34801561071e57600080fd5b5061042561072d366004614c5a565b611b94565b34801561073e57600080fd5b5061042561074d366004614f0e565b611bea565b34801561075e57600080fd5b5061042561076d366004614f0e565b611d61565b34801561077e57600080fd5b50610387611ee0565b34801561079357600080fd5b506104256107a2366004614c0c565b611eed565b3480156107b357600080fd5b50610303601d5481565b3480156107c957600080fd5b506104256120dd565b3480156107de57600080fd5b506103036107ed366004614f54565b612207565b3480156107fe57600080fd5b5061030360185481565b34801561081457600080fd5b50610336610823366004614db7565b61226c565b34801561083457600080fd5b50610425610843366004614db7565b6122a8565b34801561085457600080fd5b50610303610863366004614e55565b61257a565b34801561087457600080fd5b50610303610883366004614f0e565b612b18565b34801561089457600080fd5b506104256108a3366004614cf9565b612f39565b3480156108b457600080fd5b50610303601c5481565b3480156108ca57600080fd5b506105746108d9366004614f8f565b613443565b3480156108ea57600080fd5b506104256108f9366004614db7565b6134d4565b61030361090c366004614e30565b6137a0565b34801561091d57600080fd5b50600f546105ce906001600160a01b031681565b34801561093d57600080fd5b5061030360145481565b34801561095357600080fd5b50600d546105ce906001600160a01b031681565b34801561097357600080fd5b50610425610982366004614dfe565b613b15565b34801561099357600080fd5b506103366109a2366004614db7565b613b31565b3480156109b357600080fd5b50610303601a5481565b3480156109c957600080fd5b506104256109d8366004614c0c565b613ba4565b3480156109e957600080fd5b506103036109f8366004614c27565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a2f57600080fd5b506012546105ce906001600160a01b031681565b348015610a4f57600080fd5b5061030360155481565b348015610a6557600080fd5b50610425610a74366004614c9d565b613bdd565b348015610a8557600080fd5b50610303610a94366004614c0c565b6001600160a01b03166000908152601f602052604090206001015490565b348015610abe57600080fd5b50610574610acd366004614f8f565b613d06565b348015610ade57600080fd5b5061030360265481565b348015610af457600080fd5b50601e5461033690610100900460ff1681565b348015610b1357600080fd5b50610303610b22366004614f0e565b613db0565b348015610b3357600080fd5b506104256140d3565b6001600160a01b031660009081526022602052604090205460ff1690565b60038054610b67906153c3565b80601f0160208091040260200160405190810160405280929190818152602001828054610b93906153c3565b8015610be05780601f10610bb557610100808354040283529160200191610be0565b820191906000526020600020905b815481529060010190602001808311610bc357829003601f168201915b505050505081565b3360008181526001602090815260408083206001600160a01b0387168085529252808320859055519192909160008051602061550183398151915290610c319086815260200190565b60405180910390a35060015b92915050565b6008546001600160a01b03163314610c5a57600080fd5b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b60275415610cae5760405162461bcd60e51b8152600401610ca59061504e565b60405180910390fd5b600160275533600090815260236020526040902054811115610ce25760405162461bcd60e51b8152600401610ca5906150d0565b3360009081526023602052604081208054839290610d01908490615380565b90915550506001600160a01b03821660009081526023602052604081208054839290610d2e908490615335565b909155505060006027555050565b600c546001600160a01b031633148015610d645750600d546001600160a01b03828116911614155b8015610d7e5750600f546001600160a01b03828116911614155b610d8757600080fd5b610d908161424e565b1515600114610d9e57600080fd5b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038083166000908152601f6020526040808220928416825281206001830154919291610e2590610e00670de0b6b3a7640000601961428e565b8360010154610e18670de0b6b3a7640000601961428e565b66071afd498d0000612207565b95945050505050565b600d546001600160a01b0383811691161480610e575750600f546001600160a01b038381169116145b610e735760405162461bcd60e51b8152600401610ca590615300565b60275415610e935760405162461bcd60e51b8152600401610ca59061504e565b6001602755600f546001600160a01b0383811691161415610f345733600090815260236020526040902054811115610edd5760405162461bcd60e51b8152600401610ca5906150a6565b8060186000828254610eef9190615380565b90915550503360009081526023602052604081208054839290610f13908490615380565b9091555050600f54610f2f906001600160a01b03163383614322565b610fb5565b33600090815260246020526040902054811115610f635760405162461bcd60e51b8152600401610ca5906151a9565b8060196000828254610f759190615380565b90915550503360009081526024602052604081208054839290610f99908490615380565b9091555050600d54610fb5906001600160a01b03163383614322565b50506000602755565b60275415610fde5760405162461bcd60e51b8152600401610ca59061504e565b6001602755600c546001600160a01b031633148061101b57506007546001600160a01b03163314801561101b5750600e546001600160a01b031615155b6110535760405162461bcd60e51b81526020600482015260096024820152684e6f7420726561647960b81b6044820152606401610ca5565b61105b6140d3565b600c546001600160a01b03908116600090815260208052604090819020600d54600e54925163095ea7b360e01b815291939081169263095ea7b3926110b592919091169068327cb2734119d3b7a9601e1b90600401615002565b602060405180830381600087803b1580156110cf57600080fd5b505af11580156110e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111079190614de1565b50600f54600e5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611150929116906e111b0ec57e6499a1f4b1014d3f6d5960321b90600401615002565b602060405180830381600087803b15801561116a57600080fd5b505af115801561117e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a29190614de1565b50600c546001600160a01b031660009081526020819052604081208054918291906111cd8380615380565b9091555050600254600d546001600160a01b03166000908152601f60205260408120600101546112069061120185856143b7565b61428e565b600f546001600160a01b03166000908152601f6020526040812060010154919250906112369061120186866143b7565b9050836002600082825461124a9190615380565b9091555050845460ff19168555601c805485919060009061126c908490615380565b9091555050600e54600f54600c54604051632f1c0f2560e01b81526001600160a01b03928316600482015260248101869052604481018590529082166064820152911690632f1c0f2590608401600060405180830381600087803b1580156112d357600080fd5b505af11580156112e7573d6000803e3d6000fd5b505050506112f36140d3565b50506000602755505050565b6001600160a01b0316600090815260208052604090205460ff1690565b6000336001600160a01b038516148061135857506001600160a01b03841660009081526001602090815260408083203384529091529020548211155b61136157600080fd5b61136a336112ff565b156113875760405162461bcd60e51b8152600401610ca59061514e565b611392848484614489565b336001600160a01b038516148015906113d057506001600160a01b038416600090815260016020908152604080832033845290915290205460001914155b15611451576001600160a01b03841660009081526001602090815260408083203384529091529020546114039083614547565b6001600160a01b038581166000908152600160209081526040808320338085529083529281902085905551938452918616929091600080516020615501833981519152910160405180910390a35b5060019392505050565b611464336112ff565b156114815760405162461bcd60e51b8152600401610ca59061514e565b602754156114a15760405162461bcd60e51b8152600401610ca59061504e565b60016027556114ae6140d3565b60025460006114bd85836143b7565b336000908152602081905260408120805492935087929091906114e1908490615380565b9250508190555084600260008282546114fa9190615380565b909155505060405185815260009033906000805160206154e18339815191529060200160405180910390a360005b6017548110156116255760006017828154811061154757611547615459565b60009182526020808320909101546001600160a01b0316808352601f90915260408220600101549092509061157c858361428e565b905087878581811061159057611590615459565b905060200201358110156115b65760405162461bcd60e51b8152600401610ca5906151d2565b826001600160a01b0316336001600160a01b03167f9d9058fd2f25ccc389fec7720abef0ca83472f5abfafd5f10d37f51e6a0493f38360006040516115fc929190615327565b60405180910390a361160f833383614322565b505050808061161d906153fe565b915050611528565b50600b546001600160a01b031660009081526024602052604081205461164c90839061428e565b600b546001600160a01b031660009081526024602052604081208054929350839290919061167b908490615380565b9091555050336000908152602460205260408120805483929061169f908490615335565b909155506116ad90506140d3565b6012546001600160a01b031615611766576012546040516370a0823160e01b81526000916117459185916001600160a01b0316906370a08231906116f5903090600401614fee565b60206040518083038186803b15801561170d57600080fd5b505afa158015611721573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112019190614e17565b9050801561176457601254611764906001600160a01b03163383614322565b505b5050600060275550505050565b6008546001600160a01b0316331461178a57600080fd5b601180546001600160a01b039485166001600160a01b0319918216179091556009805493851693821693909317909255600e8054919093169116179055565b6000806117d686856143b7565b905060006117ed670de0b6b3a76400006000614547565b90506117f9848261428e565b905060006118108961180b8b856145a4565b6143b7565b9050600061181e82856145fd565b90506000611834670de0b6b3a764000083614547565b9050611840898261428e565b9b9a5050505050505050505050565b3360009081526024602052604090205481111561187e5760405162461bcd60e51b8152600401610ca5906150d0565b6000611892826112016103e56103e86143b7565b336000908152602460205260408120805492935084929091906118b6908490615380565b90915550506001600160a01b038316600090815260246020526040812080548392906118e3908490615335565b909155506118f390508282614547565b600b546001600160a01b03166000908152602460205260408120805490919061191d908490615335565b90915550506000602755505050565b3360009081526001602090815260408083206001600160a01b038616845290915281205480831115611981573360009081526001602090815260408083206001600160a01b03881684529091528120556119b0565b61198b8184614547565b3360009081526001602090815260408083206001600160a01b03891684529091529020555b3360008181526001602090815260408083206001600160a01b03891680855290835292819020549051908152919291600080516020615501833981519152910160405180910390a35060019392505050565b600c546001600160a01b03163314611a1957600080fd5b601e805461ff001916610100179055565b60275415611a4a5760405162461bcd60e51b8152600401610ca59061504e565b60016027556002546000611a5e85836143b7565b9050611a69336112ff565b151560011415611a8b5784601c6000828254611a859190615335565b90915550505b60005b601754811015611b7857600060178281548110611aad57611aad615459565b60009182526020808320909101546001600160a01b0316808352601f909152604082206001015490925090611ae2858361428e565b9050878785818110611af657611af6615459565b90506020020135811115611b0957600080fd5b826001600160a01b0316336001600160a01b03167f15a8ca63e37b2cff1677df2b6b82d36fcf8a524228bd7a4b4d02d107c28c1e8a836000604051611b4f929190615327565b60405180910390a3611b62833383614701565b5050508080611b70906153fe565b915050611a8e565b50611b8285614740565b611b8c33866147a3565b6112f36140d3565b6007546001600160a01b03163314611bab57600080fd5b600780546001600160a01b039485166001600160a01b0319918216179091556008805493851693821693909317909255600c8054919093169116179055565b600d546001600160a01b039081166000908152601f6020526040902060010154600c5490911633148015611c265750674563918244f400008110155b611c425760405162461bcd60e51b8152600401610ca590615072565b6801158e460913d00000811015611cc0576103de8210158015611c6757506103e88211155b8015611c74575060648311155b8015611c7f57508215155b611cc05760405162461bcd60e51b815260206004820152601260248201527143616e6e6f7420736574206f76657220312560701b6044820152606401610ca5565b6801158e460913d000008110611d58576103848210158015611ce457506103e88211155b8015611cf257506101f48311155b8015611cfd57508215155b611d585760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742073657420505353206f766572203525206f7220525046206f7660448201526565722031302560d01b6064820152608401610ca5565b50601655601555565b600c546001600160a01b03163314611d8b5760405162461bcd60e51b8152600401610ca590615072565b600f54604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd916004808301926020929190829003018186803b158015611dd057600080fd5b505afa158015611de4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e089190614e17565b9050611e166103e88261534d565b8310158015611e255750808311155b611e8c5760405162461bcd60e51b815260206004820152603260248201527f6d696e20302e3125206f6620746f6b656e20737570706c792c206d61782031306044820152713025206f6620746f6b656e20737570706c7960701b6064820152608401610ca5565b670de0b6b3a7640000821015611ed45760405162461bcd60e51b815260206004820152600d60248201526c3120424e42206d696e696d756d60981b6044820152606401610ca5565b50601491909155601355565b60048054610b67906153c3565b60275415611f0d5760405162461bcd60e51b8152600401610ca59061504e565b6001602755611f1b816112ff565b1515600114611f635760405162461bcd60e51b8152602060048201526014602482015273131a5c5d5a591a5d1e481b9bdd081b1bd8dad95960621b6044820152606401610ca5565b6001600160a01b0381811660009081526020808052604080832060219092529091206007549192909116331415611fab57611fa14262015180615335565b60018201556120d3565b80600101544210158015611fc95750600c546001600160a01b031633145b61203a5760405162461bcd60e51b8152602060048201526048602482015260008051602061552183398151915260448201527f72656c65617365206c697175696469747920756e74696c206166746572206c6f60648201526731b5903a34b6b29760c11b608482015260a401610ca5565b815460ff191682556040516370a0823160e01b815260009030906370a0823190612068908790600401614fee565b60206040518083038186803b15801561208057600080fd5b505afa158015612094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b89190614e17565b905080601c60008282546120cc9190615380565b9091555050505b5050600060275550565b336120e7816112ff565b1561212f5760405162461bcd60e51b8152602060048201526018602482015277131a5c5d5a591a5d1e48185b1c9958591e481b1bd8dad95960421b6044820152606401610ca5565b6040516370a0823160e01b815260009030906370a0823190612155908590600401614fee565b60206040518083038186803b15801561216d57600080fd5b505afa158015612181573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a59190614e17565b6001600160a01b0383166000908152602080805260408083206021909252909120815460ff19166001178255919250906121e2426276a700615335565b816001018190555082601c60008282546121fc9190615335565b909155505050505050565b60008061221487876143b7565b9050600061222286866143b7565b9050600061223083836143b7565b90506000612252670de0b6b3a764000061180b670de0b6b3a764000089614547565b905061225e828261428e565b9a9950505050505050505050565b6000612277336112ff565b156122945760405162461bcd60e51b8152600401610ca59061514e565b61229f338484614489565b50600192915050565b601e5460ff16156122b857600080fd5b600f546040516370a0823160e01b81526000916001600160a01b0316906370a08231906122e9903090600401614fee565b60206040518083038186803b15801561230157600080fd5b505afa158015612315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123399190614e17565b600d546040516370a0823160e01b81529192506000916001600160a01b03909116906370a082319061236f903090600401614fee565b60206040518083038186803b15801561238757600080fd5b505afa15801561239b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123bf9190614e17565b6040805180820182526017805482526020808301878152600f80546001600160a01b039081166000908152601f80865288822097518855935160019788015587518089018952865481528086018a8152600d80548516845295909652888220905181559451948701949094558154855480880187557fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c1590810180549284166001600160a01b03199384161790559354865480890190975595909301805495821695909316949094179091555490911681529182200154919250906124a790633b9aca006143b7565b600d546001600160a01b03166000908152601f6020526040812060010154919250906124db90670de0b6b3a76400006143b7565b905060006124e98284615335565b90506124f481614740565b6124fe87826147a3565b61250a601c54826145a4565b601c556001600160a01b0387166000908152602080805260408083206021909252909120815460ff19166001178255612547426301e13380615335565b600180830191909155601e805460ff1916909117905561256c6064611201898b6143b7565b602555505050505050505050565b600061258533610b3c565b6125a957602754156125a95760405162461bcd60e51b8152600401610ca59061504e565b60016027819055601e54610100900460ff161515146125da5760405162461bcd60e51b8152600401610ca590615206565b6125e3336147b2565b15156001141561260e57600654851461260e5760405162461bcd60e51b8152600401610ca5906152ad565b6014548311156126305760405162461bcd60e51b8152600401610ca590615259565b600f546001600160a01b03166000818152601f60205260409020600101549061265a903386614701565b601854600f546040516370a0823160e01b81526001600160a01b03909116906370a082319061268d903090600401614fee565b60206040518083038186803b1580156126a557600080fd5b505afa1580156126b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126dd9190614e17565b6126e79190615380565b600f80546001600160a01b039081166000908152601f602052604080822060019081019590955592549091168152908120909101546127399061272b908490615380565b6112016103e66103e86143b7565b600f546001600160a01b03166000908152601f60205260409020600101549091506127a890612771670de0b6b3a7640000601961428e565b600d546001600160a01b03166000908152601f60205260409020600101546127a2670de0b6b3a7640000601961428e565b856117c9565b600d546001600160a01b03166000908152601f60205260409020600101549093506127d990611201603260646143b7565b8311156127f85760405162461bcd60e51b8152600401610ca590615281565b838310156128185760405162461bcd60e51b8152600401610ca5906151d2565b600061282c846112016016546103e86143b7565b9050600061284182611201600f6127106143b7565b9050600061285683611201600f6127106143b7565b9050600061286c846112016015546127106143b7565b905060008161287b8486615335565b6128859190615335565b61288f9086615380565b905060006128a5826112016103e76103e86143b7565b30600090815260246020526040902054909150662386f26fc100008111156128ef5780601960008282546128d99190615380565b9091555050306000908152602460205260408120555b600d546001600160a01b0316632e1a7d4d8761290b8486615335565b6129159190615335565b6040518263ffffffff1660e01b815260040161293391815260200190565b600060405180830381600087803b15801561294d57600080fd5b505af1158015612961573d6000803e3d6000fd5b5050505061297e8d61297984611201606360646143b7565b6147d9565b61298f8361120160016103e86143b7565b601b60008282546129a09190615335565b90915550600090506129b885611201600560646143b7565b905060006129cc86611201600f60646143b7565b90506129de86611201605060646143b7565b6010546001600160a01b031660009081526024602052604081208054909190612a08908490615335565b90915550506008546001600160a01b031660009081526024602052604081208054839290612a37908490615335565b9091555050600b546001600160a01b031660009081526024602052604081208054849290612a66908490615335565b925050819055508560196000828254612a7f9190615335565b9250508190555086601a6000828254612a989190615335565b90915550612aa690506148a7565b612aae6148e0565b612ab66140d3565b600d54600f546001600160a01b039182169116336000805160206154c18339815191528d612aea89611201606360646143b7565b604051612af8929190615327565b60405180910390a450506000602755509c9b505050505050505050505050565b6000602754600014612b3c5760405162461bcd60e51b8152600401610ca59061504e565b6001602755336000908152602360205260409020548390811115612b725760405162461bcd60e51b8152600401610ca5906150a6565b600f546001600160a01b039081166000908152601f6020526040808220600d5490931682529020601454861115612bbb5760405162461bcd60e51b8152600401610ca590615259565b612c008260010154612bd6670de0b6b3a7640000601961428e565b8360010154612bee670de0b6b3a7640000601961428e565b61062c8b6112016103e66103e86143b7565b9350612c168160010154611201603260646143b7565b841115612c355760405162461bcd60e51b8152600401610ca590615281565b6000612c49856112016016546103e86143b7565b90506000612c5e82611201600f6127106143b7565b90506000612c7383611201600f6127106143b7565b90506000612c89846112016015546127106143b7565b9050600081612c988486615335565b612ca29190615335565b612cac9086615380565b90506000612cc2826112016103e76103e86143b7565b9050612cd58261120160016103e86143b7565b601b6000828254612ce69190615335565b90915550508a811015612d0b5760405162461bcd60e51b8152600401610ca5906151d2565b33600090815260236020526040812080548e9290612d2a908490615380565b925050819055508b60186000828254612d439190615380565b90915550503360009081526024602052604081208054839290612d67908490615335565b90915550503060009081526024602052604081208054879290612d8b908490615335565b9091555060009050612da384611201605060646143b7565b90506000612db785611201600560646143b7565b90506000612dcb86611201600f60646143b7565b6010546001600160a01b0316600090815260246020526040812080549293508592909190612dfa908490615335565b90915550506008546001600160a01b031660009081526024602052604081208054839290612e29908490615335565b9091555050600b546001600160a01b031660009081526024602052604081208054849290612e58908490615335565b90915550849050612e69878a615335565b612e739190615335565b60196000828254612e849190615335565b9250508190555086601a6000828254612e9d9190615335565b90915550612eab90506140d3565b612eb36148e0565b600d60009054906101000a90046001600160a01b03166001600160a01b0316600f60009054906101000a90046001600160a01b03166001600160a01b0316336001600160a01b03166000805160206154a18339815191528f88604051612f1a929190615327565b60405180910390a450506000602755509b9a5050505050505050505050565b600d546001600160a01b0384811691161480612f625750600f546001600160a01b038481169116145b612f7e5760405162461bcd60e51b8152600401610ca590615300565b60275415612f9e5760405162461bcd60e51b8152600401610ca59061504e565b6001602755600d546001600160a01b03848116911614156131fb5733600090815260246020526040902054811115612fe85760405162461bcd60e51b8152600401610ca5906151a9565b600d5460405163095ea7b360e01b81526001600160a01b039091169063095ea7b39061301a9087908590600401615002565b602060405180830381600087803b15801561303457600080fd5b505af1158015613048573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061306c9190614de1565b50806019600082825461307f9190615380565b909155505033600090815260246020526040812080548392906130a3908490615380565b9091555050600d54604051632efc49c560e21b81526001600160a01b038681169263bbf12714926130dc92909116908590600401615002565b600060405180830381600087803b1580156130f657600080fd5b505af115801561310a573d6000803e3d6000fd5b50505050600080856001600160a01b0316632b9abe1a306040518263ffffffff1660e01b815260040161313d9190614fee565b6040805180830381600087803b15801561315657600080fd5b505af115801561316a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061318e9190614f30565b6040516365d1a40d60e01b815291935091506001600160a01b038716906365d1a40d906131c19087908590600401615002565b600060405180830381600087803b1580156131db57600080fd5b505af11580156131ef573d6000803e3d6000fd5b50613438945050505050565b3360009081526023602052604090205481111561322a5760405162461bcd60e51b8152600401610ca5906150a6565b600f5460405163095ea7b360e01b81526001600160a01b039091169063095ea7b39061325c9087908590600401615002565b602060405180830381600087803b15801561327657600080fd5b505af115801561328a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132ae9190614de1565b5080601860008282546132c19190615380565b909155505033600090815260236020526040812080548392906132e5908490615380565b9091555050600f54604051632efc49c560e21b81526001600160a01b038681169263bbf127149261331e92909116908590600401615002565b600060405180830381600087803b15801561333857600080fd5b505af115801561334c573d6000803e3d6000fd5b50505050600080856001600160a01b0316632b9abe1a306040518263ffffffff1660e01b815260040161337f9190614fee565b6040805180830381600087803b15801561339857600080fd5b505af11580156133ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133d09190614f30565b6040516310510ec160e01b815291935091506001600160a01b038716906310510ec1906134039087908690600401615002565b600060405180830381600087803b15801561341d57600080fd5b505af1158015613431573d6000803e3d6000fd5b5050505050505b505060006027555050565b600080600061345288876143b7565b90506000613468670de0b6b3a764000086614547565b9050613474868261428e565b905060006134868b61180b8d856145a4565b9050600061349482856145fd565b905060006134aa670de0b6b3a764000083614547565b90506134b68b8261428e565b96506134c28985614547565b95505050505050965096945050505050565b600d546001600160a01b03838116911614806134fd5750600f546001600160a01b038381169116145b6135195760405162461bcd60e51b8152600401610ca590615300565b602754156135395760405162461bcd60e51b8152600401610ca59061504e565b60016027819055601e54610100900460ff1615151461355757600080fd5b600f546001600160a01b038381169116141561367a57600f546001600160a01b03166000818152601f602052604090206001015490613597903384614701565b600f546040516370a0823160e01b8152600091613626916001600160a01b03909116906370a08231906135ce903090600401614fee565b60206040518083038186803b1580156135e657600080fd5b505afa1580156135fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361e9190614e17565b601854614547565b905060006136348284614547565b905080601860008282546136489190615335565b9091555050336000908152602360205260408120805483929061366c908490615335565b90915550610fb59350505050565b600d546001600160a01b03166000818152601f6020526040902060010154906136a4903384614701565b600d546040516370a0823160e01b8152600091613749916001600160a01b03909116906370a08231906136db903090600401614fee565b60206040518083038186803b1580156136f357600080fd5b505afa158015613707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061372b9190614e17565b61374460195461373f601a54601b546145a4565b6145a4565b614547565b905060006137578284614547565b9050806019600082825461376b9190615335565b9091555050336000908152602460205260408120805483929061378f908490615335565b909155505050505050506000602755565b60006027546000146137c45760405162461bcd60e51b8152600401610ca59061504e565b60016027819055601e54610100900460ff161515146137f55760405162461bcd60e51b8152600401610ca590615206565b6000613809346112016103e36103e86143b7565b9050600d60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561385b57600080fd5b505af115801561386f573d6000803e3d6000fd5b5050505050613889336129793461120160056103e86143b7565b613892336147b2565b1515600114156138bd5760065485146138bd5760405162461bcd60e51b8152600401610ca5906152ad565b600a546040516370a0823160e01b81526000916001600160a01b0316906370a08231906138ee903390600401614fee565b60206040518083038186803b15801561390657600080fd5b505afa15801561391a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061393e9190614e17565b9050478015801590613957575066b1a2bc2ec500003410155b801561396c57506801158e460913d000008210155b15613979576139796149f2565b600d546001600160a01b039081166000908152601f6020526040808220600f54909316825290206013543411156139c25760405162461bcd60e51b8152600401610ca5906150fa565b6000613a1083600101546139df670de0b6b3a7640000601961428e565b84600101546139f7670de0b6b3a7640000601961428e565b613a098b6112016103e76103e86143b7565b6000613443565b60018401549198509150613a2a90611201603260646143b7565b871115613a495760405162461bcd60e51b8152600401610ca590615281565b613a5a3461120160016103e86143b7565b601b6000828254613a6b9190615335565b909155505087871015613a905760405162461bcd60e51b8152600401610ca5906151d2565b600f54613aa7906001600160a01b03168a89614322565b613aaf6140d3565b600f54600d546025546001600160a01b03928316929091169033906000805160206154c1833981519152903490613aed908d906112019060646143b7565b604051613afb929190615327565b60405180910390a450506000602755505050509392505050565b6008546001600160a01b03163314613b2c57600080fd5b602555565b3360009081526001602090815260408083206001600160a01b0386168452909152812054613b5f90836145a4565b3360008181526001602090815260408083206001600160a01b038916808552908352928190208590555193845290926000805160206155018339815191529101610c31565b6008546001600160a01b03163314613bbb57600080fd5b601080546001600160a01b0319166001600160a01b0392909216919091179055565b601e5460ff1615613c245760405162461bcd60e51b815260206004820152601160248201527043616e206f6e6c7920757365206f6e636560781b6044820152606401610ca5565b600f80546001600160a01b038088166001600160a01b03199283168117909355600c8054888316908416811790915560108054841690911790556006849055600980548683169084161790556011805491871691909216179055604080516318160ddd60e01b81529051613cfc92916318160ddd916004808301926020929190829003018186803b158015613cb857600080fd5b505afa158015613ccc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cf09190614e17565b611201600160146143b7565b6014555050505050565b6000806000613d1586896143b7565b90506000613d238887614547565b90506000613d3189836143b7565b90506000613d3f82856145fd565b9050613d5381670de0b6b3a7640000614547565b9050613d5f8c8261428e565b9050613d73670de0b6b3a764000088614547565b9550613d7f81876143b7565b9550613d9381670de0b6b3a76400006143b7565b9450613d9f8686614547565b945050505050965096945050505050565b33600090815260246020526040812054831115613e0f5760405162461bcd60e51b815260206004820152601d60248201527f4e6f7420656e6f756768204d61696e2c206465706f736974206d6f72650000006044820152606401610ca5565b60275415613e2f5760405162461bcd60e51b8152600401610ca59061504e565b6001602755600d546001600160a01b039081166000908152601f6020526040808220600f5490931682529020601354851115613e7d5760405162461bcd60e51b8152600401610ca5906150fa565b6000613e9a83600101546139df670de0b6b3a7640000601961428e565b60018401549195509150613eb490611201603260646143b7565b841115613ed35760405162461bcd60e51b8152600401610ca590615281565b84841015613ef35760405162461bcd60e51b8152600401610ca5906151d2565b3360009081526024602052604081208054889290613f12908490615380565b925050819055508560196000828254613f2b9190615380565b90915550503360009081526023602052604081208054869290613f4f908490615335565b925050819055508360186000828254613f689190615335565b90915550613f7f90508661120160016103e86143b7565b601b6000828254613f909190615335565b90915550613f9e90506140d3565b600f54600d546040516001600160a01b03928316929091169033906000805160206154a183398151915290613fd6908b908a90615327565b60405180910390a4600a546040516370a0823160e01b81526000916001600160a01b0316906370a082319061400f903390600401614fee565b60206040518083038186803b15801561402757600080fd5b505afa15801561403b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405f9190614e17565b9050600047118015614078575066b1a2bc2ec500008710155b801561408d57506801158e460913d000008110155b156140c457600061409f4760086143b7565b90506140ab33826147d9565b80601d60008282546140bd9190615335565b9091555050505b50506000602755505092915050565b601854600f546040516370a0823160e01b81526001600160a01b03909116906370a0823190614106903090600401614fee565b60206040518083038186803b15801561411e57600080fd5b505afa158015614132573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141569190614e17565b6141609190615380565b600f546001600160a01b03166000908152601f6020526040812060010191909155601b54601a546019546141949190615335565b61419e9190615335565b600d546040516370a0823160e01b815291925082916001600160a01b03909116906370a08231906141d3903090600401614fee565b60206040518083038186803b1580156141eb57600080fd5b505afa1580156141ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142239190614e17565b61422d9190615380565b600d546001600160a01b03166000908152601f602052604090206001015550565b600061425982610b3c565b1561426657506000919050565b813f60008051602061548183398151915281158015906142865750808214155b949350505050565b60008061429b8385615361565b90508315806142b25750826142b0858361534d565b145b6142ce5760405162461bcd60e51b8152600401610ca59061522f565b60006142e2826706f05b59d3b20000615335565b9050818110156143045760405162461bcd60e51b8152600401610ca59061522f565b6000614318670de0b6b3a76400008361534d565b9695505050505050565b60405163a9059cbb60e01b81526000906001600160a01b0385169063a9059cbb906143539086908690600401615002565b602060405180830381600087803b15801561436d57600080fd5b505af1158015614381573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143a59190614de1565b9050806143b157600080fd5b50505050565b6000816143f55760405162461bcd60e51b815260206004820152600c60248201526b4552525f4449565f5a45524f60a01b6044820152606401610ca5565b600061440984670de0b6b3a7640000615361565b9050831580614428575061441d848261534d565b670de0b6b3a7640000145b6144445760405162461bcd60e51b8152600401610ca590615124565b600061445160028561534d565b61445b9083615335565b90508181101561447d5760405162461bcd60e51b8152600401610ca590615124565b6000614318858361534d565b6001600160a01b0383166000908152602081905260409020548111156144ae57600080fd5b6001600160a01b0383166000908152602081905260409020546144d19082614547565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461450090826145a4565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616916000805160206154e1833981519152910160405180910390a3505050565b60008060006145568585614a25565b91509150801561459c5760405162461bcd60e51b81526020600482015260116024820152704552525f5355425f554e444552464c4f5760781b6044820152606401610ca5565b509392505050565b6000806145b18385615335565b9050838110156145f65760405162461bcd60e51b815260206004820152601060248201526f4552525f4144445f4f564552464c4f5760801b6044820152606401610ca5565b9392505050565b600060018310156146485760405162461bcd60e51b81526020600482015260156024820152744552525f42504f575f424153455f544f4f5f4c4f5760581b6044820152606401610ca5565b671bc16d674ec7ffff8311156146995760405162461bcd60e51b815260206004820152601660248201527508aa4a4be84a09eaebe8482a68abea89e9ebe90928e960531b6044820152606401610ca5565b60006146a483614a5c565b905060006146b28483614547565b905060006146c8866146c385614a79565b614a8d565b9050816146d9579250610c3d915050565b60006146ea87846305f5e100614b00565b90506146f6828261428e565b979650505050505050565b6040516323b872dd60e01b81526001600160a01b03838116600483015230602483015260448201839052600091908516906323b872dd90606401614353565b3060009081526020819052604090205461475a90826145a4565b3060009081526020819052604090205560025461477790826145a4565b60025560405181815230906000906000805160206154e18339815191529060200160405180910390a350565b6147ae308383614489565b5050565b6000813f600080516020615481833981519152818114801590614286575050151592915050565b604080516000808252602082019092526001600160a01b0384169083906040516148039190614fd2565b60006040518083038185875af1925050503d8060008114614840576040519150601f19603f3d011682016040523d82523d6000602084013e614845565b606091505b50509050806148a25760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201526213115160ea1b6064820152608401610ca5565b505050565b66071afd498d0000601a5411156148de57600d54601154601a546148d8926001600160a01b03908116921690614322565b6000601a555b565b6608e1bc9bf04000601b5411156148de57600d54601b54604051632e1a7d4d60e01b81526001600160a01b0390921691632e1a7d4d916149269160040190815260200190565b600060405180830381600087803b15801561494057600080fd5b505af1158015614954573d6000803e3d6000fd5b5050600954601b546001600160a01b03909116925063c172715c915061498090611201606360646143b7565b600b5460405160e084901b6001600160e01b03191681526103e960048201526001600160a01b039091166024820152600160448201526064016000604051808303818588803b1580156149d257600080fd5b505af11580156149e6573d6000803e3d6000fd5b50506000601b55505050565b60006149ff60084761534d565b9050614a0b33826147d9565b80601d6000828254614a1d9190615335565b909155505050565b600080828410614a4457614a398385615380565b600091509150614a55565b614a4e8484615380565b6001915091505b9250929050565b6000614a6782614a79565b610c3d90670de0b6b3a7640000615361565b6000610c3d670de0b6b3a76400008361534d565b600080614a9b600284615419565b614aad57670de0b6b3a7640000614aaf565b835b9050614abc60028461534d565b92505b82156145f657614acf848561428e565b9350614adc600284615419565b15614aee57614aeb818561428e565b90505b614af960028461534d565b9250614abf565b6000828180614b1787670de0b6b3a7640000614a25565b9092509050670de0b6b3a764000080600060015b888410614be1576000614b4682670de0b6b3a7640000615361565b9050600080614b668a614b6185670de0b6b3a7640000614547565b614a25565b91509150614b7887611201848c61428e565b9650614b8487846143b7565b965086614b9357505050614be1565b8715614b9d579315935b8015614ba7579315935b8415614bbe57614bb78688614547565b9550614bcb565b614bc886886145a4565b95505b5050508080614bd9906153fe565b915050614b2b565b50909998505050505050505050565b80356001600160a01b0381168114614c0757600080fd5b919050565b600060208284031215614c1e57600080fd5b6145f682614bf0565b60008060408385031215614c3a57600080fd5b614c4383614bf0565b9150614c5160208401614bf0565b90509250929050565b600080600060608486031215614c6f57600080fd5b614c7884614bf0565b9250614c8660208501614bf0565b9150614c9460408501614bf0565b90509250925092565b600080600080600060a08688031215614cb557600080fd5b614cbe86614bf0565b9450614ccc60208701614bf0565b9350614cda60408701614bf0565b9250614ce860608701614bf0565b949793965091946080013592915050565b60008060008060808587031215614d0f57600080fd5b614d1885614bf0565b9350614d2660208601614bf0565b9250614d3460408601614bf0565b9396929550929360600135925050565b600080600060608486031215614d5957600080fd5b614d6284614bf0565b9250614d7060208501614bf0565b9150604084013590509250925092565b60008060408385031215614d9357600080fd5b614d9c83614bf0565b91506020830135614dac8161546f565b809150509250929050565b60008060408385031215614dca57600080fd5b614dd383614bf0565b946020939093013593505050565b600060208284031215614df357600080fd5b81516145f68161546f565b600060208284031215614e1057600080fd5b5035919050565b600060208284031215614e2957600080fd5b5051919050565b600080600060608486031215614e4557600080fd5b83359250614d7060208501614bf0565b60008060008060808587031215614e6b57600080fd5b84359350614e7b60208601614bf0565b93969395505050506040820135916060013590565b600080600060408486031215614ea557600080fd5b8335925060208401356001600160401b0380821115614ec357600080fd5b818601915086601f830112614ed757600080fd5b813581811115614ee657600080fd5b8760208260051b8501011115614efb57600080fd5b6020830194508093505050509250925092565b60008060408385031215614f2157600080fd5b50508035926020909101359150565b60008060408385031215614f4357600080fd5b505080516020909101519092909150565b600080600080600060a08688031215614f6c57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060008060008060c08789031215614fa857600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b60008251614fe4818460208701615397565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b602081526000825180602084015261503a816040850160208701615397565b601f01601f19169190910160400192915050565b6020808252600a90820152694e6f207265656e74727960b01b604082015260600190565b6020808252601a90820152792cb7ba903237903737ba103430bb32903832b936b4b9b9b4b7b760311b604082015260600190565b60208082526010908201526f2737ba1032b737bab3b4102a37b5b2b760811b604082015260600190565b60208082526010908201526f2737ba1032b737bab3b4103a37b5b2b760811b604082015260600190565b60208082526010908201526f4552525f4255595f494e5f524154494f60801b604082015260600190565b60208082526010908201526f11549497d1125597d25395115493905360821b604082015260600190565b602080825260479082015260008051602061552183398151915260408201527f72656d6f7665206c697175696469747920756e74696c206166746572206c6f6360608201526635903a34b6b29760c91b608082015260a00190565b6020808252600f908201526e2737ba1032b737bab3b41026b0b4b760891b604082015260600190565b6020808252601a9082015279135a5b9a5b5d5b48185b5bdd5b9d081bdd5d081b9bdd081b595d60321b604082015260600190565b6020808252600f908201526e14ddd85c081b9bdd081bdc195b9959608a1b604082015260600190565b60208082526010908201526f4552525f4d554c5f4f564552464c4f5760801b604082015260600190565b6020808252600e908201526d4552525f53454c4c5f524154494f60901b604082015260600190565b6020808252601290820152714f766572204d41585f4f55545f524154494f60701b604082015260600190565b60208082526033908201527f436f6e74726163747320617265206e6f7420616c6c6f77656420746f20696e7460408201527206572616374207769746820746865205377617606c1b606082015260800190565b6020808252600d908201526c139bdd081cdd5c1c1bdc9d1959609a1b604082015260600190565b918252602082015260400190565b600082198211156153485761534861542d565b500190565b60008261535c5761535c615443565b500490565b600081600019048311821515161561537b5761537b61542d565b500290565b6000828210156153925761539261542d565b500390565b60005b838110156153b257818101518382015260200161539a565b838111156143b15750506000910152565b600181811c908216806153d757607f821691505b602082108114156153f857634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156154125761541261542d565b5060010190565b60008261542857615428615443565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b801515811461547d57600080fd5b5056fec5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470c5f954edb6f50c3415e43c4c343ed2fac83243f08807d721c27e2ccb634c36fa908fb5ee8f16c6bc9bc3690973819f32a4d4b10188134543c88706e0e1d43378ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9254c6971756964697479206973206c6f636b65642c20796f752063616e6e6f7420a26469706673582212206e975ff83a4186e01467ea640ea3732de6c1a56f22974857b5b47eb9274d0e3464736f6c63430008070033

Deployed Bytecode Sourcemap

13034:27959:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15009:25;;;;;;;;;;;;;;;;;;;21195::1;;;21183:2;21168:18;15009:25:0;;;;;;;;17172:119;;;;;;;;;;-1:-1:-1;17172:119:0;;;;;:::i;:::-;;:::i;:::-;;;8732:14:1;;8725:22;8707:41;;8695:2;8680:18;17172:119:0;8567:187:1;15144:28:0;;;;;;;;;;;;;;;;14862:37;;;;;;;;;;;;;;;;11418;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;15519:46::-;;;;;;;;;;-1:-1:-1;15519:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8952:14:1;;8945:22;8927:41;;8999:2;8984:18;;8977:34;;;;8900:18;15519:46:0;8759:258:1;11786:187:0;;;;;;;;;;-1:-1:-1;11786:187:0;;;;;:::i;:::-;;:::i;17000:160::-;;;;;;;;;;-1:-1:-1;17000:160:0;;;;;:::i;:::-;;:::i;:::-;;40658:332;;;;;;;;;;-1:-1:-1;40658:332:0;;;;;:::i;:::-;;:::i;18419:254::-;;;;;;;;;;-1:-1:-1;18419:254:0;;;;;:::i;:::-;;:::i;21129:372::-;;;;;;;;;;-1:-1:-1;21129:372:0;;;;;:::i;:::-;;:::i;10591:30::-;;;;;;;;;;;;;;;;22539:680;;;;;;;;;;-1:-1:-1;22539:680:0;;;;;:::i;:::-;;:::i;38542:879::-;;;;;;;;;;;;;:::i;13368:114::-;;;;;;;;;;-1:-1:-1;13368:114:0;;;;;:::i;:::-;;:::i;24639:601::-;;;;;;;;;;-1:-1:-1;24639:601:0;;;;;:::i;:::-;;:::i;26188:1393::-;;;;;;;;;;-1:-1:-1;26188:1393:0;;;;;:::i;:::-;;:::i;16379:209::-;;;;;;;;;;-1:-1:-1;16379:209:0;;;;;:::i;:::-;-1:-1:-1;;;;;16488:17:0;16443:7;16488:17;;;:10;:17;;;;;;;;;16532:10;:17;;;;;;;;16379:209;;;;;;;;;:::i;11505:28::-;;;;;;;;;;-1:-1:-1;11505:28:0;;;;;;;;;;;21917:4:1;21905:17;;;21887:36;;21875:2;21860:18;11505:28:0;21745:184:1;14768:29:0;;;;;;;;;;-1:-1:-1;14768:29:0;;;;-1:-1:-1;;;;;14768:29:0;;;;;;;;;;:::i;15214:28::-;;;;;;;;;;;;;;;;18685:198;;;;;;;;;;-1:-1:-1;18685:198:0;;;;;:::i;:::-;;:::i;4953:690::-;;;;;;;;;;-1:-1:-1;4953:690:0;;;;;:::i;:::-;;:::i;14609:25::-;;;;;;;;;;-1:-1:-1;14609:25:0;;;;-1:-1:-1;;;;;14609:25:0;;;40279:367;;;;;;;;;;-1:-1:-1;40279:367:0;;;;;:::i;:::-;;:::i;12244:403::-;;;;;;;;;;-1:-1:-1;12244:403:0;;;;;:::i;:::-;;:::i;18249:158::-;;;;;;;;;;;;;:::i;15834:18::-;;;;;;;;;;;;;;;;11673:105;;;;;;;;;;-1:-1:-1;11673:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;11756:14:0;11729:7;11756:14;;;;;;;;;;;;11673:105;25252:925;;;;;;;;;;-1:-1:-1;25252:925:0;;;;;:::i;:::-;;:::i;19297:282::-;;;;;;;;;;-1:-1:-1;19297:282:0;;;;;:::i;:::-;;:::i;37037:661::-;;;;;;;;;;-1:-1:-1;37037:661:0;;;;;:::i;:::-;;:::i;17802:435::-;;;;;;;;;;-1:-1:-1;17802:435:0;;;;;:::i;:::-;;:::i;11462:36::-;;;;;;;;;;;;;:::i;37710:824::-;;;;;;;;;;-1:-1:-1;37710:824:0;;;;;:::i;:::-;;:::i;15286:31::-;;;;;;;;;;;;;;;;19591:459;;;;;;;;;;;;;:::i;3582:543::-;;;;;;;;;;-1:-1:-1;3582:543:0;;;;;:::i;:::-;;:::i;15109:28::-;;;;;;;;;;;;;;;;24369:262;;;;;;;;;;-1:-1:-1;24369:262:0;;;;;:::i;:::-;;:::i;20062:1056::-;;;;;;;;;;-1:-1:-1;20062:1056:0;;;;;:::i;:::-;;:::i;31894:2806::-;;;;;;;;;;-1:-1:-1;31894:2806:0;;;;;:::i;:::-;;:::i;34713:2308::-;;;;;;;;;;-1:-1:-1;34713:2308:0;;;;;:::i;:::-;;:::i;23227:1130::-;;;;;;;;;;-1:-1:-1;23227:1130:0;;;;;:::i;:::-;;:::i;15249:30::-;;;;;;;;;;;;;;;;4135:810;;;;;;;;;;-1:-1:-1;4135:810:0;;;;;:::i;:::-;;:::i;21517:1014::-;;;;;;;;;;-1:-1:-1;21517:1014:0;;;;;:::i;:::-;;:::i;29755:2127::-;;;;;;:::i;:::-;;:::i;14741:20::-;;;;;;;;;;-1:-1:-1;14741:20:0;;;;-1:-1:-1;;;;;14741:20:0;;;14906:29;;;;;;;;;;;;;;;;14641:64;;;;;;;;;;-1:-1:-1;14641:64:0;;;;-1:-1:-1;;;;;14641:64:0;;;19023:105;;;;;;;;;;-1:-1:-1;19023:105:0;;;;;:::i;:::-;;:::i;11981:255::-;;;;;;;;;;-1:-1:-1;11981:255:0;;;;;:::i;:::-;;:::i;15179:28::-;;;;;;;;;;;;;;;;18895:116;;;;;;;;;;-1:-1:-1;18895:116:0;;;;;:::i;:::-;;:::i;11542:123::-;;;;;;;;;;-1:-1:-1;11542:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;11637:15:0;;;11610:7;11637:15;;;:10;:15;;;;;;;;:20;;;;;;;;;;;;;11542:123;14835:20;;;;;;;;;;-1:-1:-1;14835:20:0;;;;-1:-1:-1;;;;;14835:20:0;;;14942:23;;;;;;;;;;;;;;;;15927:397;;;;;;;;;;-1:-1:-1;15927:397:0;;;;;:::i;:::-;;:::i;19140:149::-;;;;;;;;;;-1:-1:-1;19140:149:0;;;;;:::i;:::-;-1:-1:-1;;;;;19258:15:0;19216:7;19258:15;;;:8;:15;;;;;:23;;;;19140:149;5651:853;;;;;;;;;;-1:-1:-1;5651:853:0;;;;;:::i;:::-;;:::i;15859:23::-;;;;;;;;;;;;;;;;15387:24;;;;;;;;;;-1:-1:-1;15387:24:0;;;;;;;;;;;27783:1960;;;;;;;;;;-1:-1:-1;27783:1960:0;;;;;:::i;:::-;;:::i;17474:316::-;;;;;;;;;;;;;:::i;17172:119::-;-1:-1:-1;;;;;17259:24:0;17236:4;17259:24;;;:17;:24;;;;;;;;;17172:119::o;11418:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11786:187::-;11875:10;11847:4;11864:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;11864:27:0;;;;;;;;;;:33;;;11913:30;11847:4;;11864:27;;-1:-1:-1;;;;;;;;;;;11913:30:0;;;11894:3;21195:25:1;;21183:2;21168:18;;21049:177;11913:30:0;;;;;;;;-1:-1:-1;11961:4:0;11786:187;;;;;:::o;17000:160::-;17099:7;;-1:-1:-1;;;;;17099:7:0;17085:10;:21;17077:30;;;;;;-1:-1:-1;;;;;17118:24:0;;;;;;;;:17;:24;;;;;:34;;-1:-1:-1;;17118:34:0;;;;;;;;;;17000:160::o;40658:332::-;40761:6;;:11;40753:34;;;;-1:-1:-1;;;40753:34:0;;;;;;;:::i;:::-;;;;;;;;;40807:1;40798:6;:10;40838;40827:22;;;;:10;:22;;;;;;:32;-1:-1:-1;40827:32:0;40819:61;;;;-1:-1:-1;;;40819:61:0;;;;;;;:::i;:::-;40902:10;40891:22;;;;:10;:22;;;;;:32;;40917:6;;40891:22;:32;;40917:6;;40891:32;:::i;:::-;;;;-1:-1:-1;;;;;;;40934:17:0;;;;;;:10;:17;;;;;:27;;40955:6;;40934:17;:27;;40955:6;;40934:27;:::i;:::-;;;;-1:-1:-1;;40981:1:0;40972:6;:10;-1:-1:-1;;40658:332:0:o;18419:254::-;18545:10;;-1:-1:-1;;;;;18545:10:0;18531;:24;:42;;;;-1:-1:-1;18569:4:0;;-1:-1:-1;;;;;18559:14:0;;;18569:4;;18559:14;;18531:42;:62;;;;-1:-1:-1;18588:5:0;;-1:-1:-1;;;;;18578:15:0;;;18588:5;;18578:15;;18531:62;18523:71;;;;;;18613:18;18624:6;18613:10;:18::i;:::-;:26;;18635:4;18613:26;18605:35;;;;;;18651:5;:14;;-1:-1:-1;;;;;;18651:14:0;-1:-1:-1;;;;;18651:14:0;;;;;;;;;;18419:254::o;21129:372::-;-1:-1:-1;;;;;21296:26:0;;;21225:17;21296:26;;;:8;:26;;;;;;21360:27;;;;;;;21419:16;;;;21225:17;;21296:26;21405:88;;21437:14;21442:4;21448:2;21437:4;:14::i;:::-;21453:9;:17;;;21472:14;21477:4;21483:2;21472:4;:14::i;:::-;21488:4;21405:13;:88::i;:::-;21398:95;21129:372;-1:-1:-1;;;;;21129:372:0:o;22539:680::-;22630:4;;-1:-1:-1;;;;;22621:13:0;;;22630:4;;22621:13;;:31;;-1:-1:-1;22647:5:0;;-1:-1:-1;;;;;22638:14:0;;;22647:5;;22638:14;22621:31;22613:57;;;;-1:-1:-1;;;22613:57:0;;;;;;;:::i;:::-;22689:6;;:11;22681:34;;;;-1:-1:-1;;;22681:34:0;;;;;;;:::i;:::-;22735:1;22726:6;:10;22769:5;;-1:-1:-1;;;;;22760:14:0;;;22769:5;;22760:14;22757:434;;;22805:10;22794:22;;;;:10;:22;;;;;;:29;-1:-1:-1;22794:29:0;22786:58;;;;-1:-1:-1;;;22786:58:0;;;;;;;:::i;:::-;22872:3;22855:13;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;;22897:10:0;22886:22;;;;:10;:22;;;;;:29;;22912:3;;22886:22;:29;;22912:3;;22886:29;:::i;:::-;;;;-1:-1:-1;;22942:5:0;;22926:39;;-1:-1:-1;;;;;22942:5:0;22949:10;22961:3;22926:15;:39::i;:::-;22757:434;;;23021:10;23010:22;;;;:10;:22;;;;;;:29;-1:-1:-1;23010:29:0;23002:57;;;;-1:-1:-1;;;23002:57:0;;;;;;;:::i;:::-;23087:3;23070:13;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;;23112:10:0;23101:22;;;;:10;:22;;;;;:29;;23127:3;;23101:22;:29;;23127:3;;23101:29;:::i;:::-;;;;-1:-1:-1;;23157:4:0;;23141:38;;-1:-1:-1;;;;;23157:4:0;23163:10;23175:3;23141:15;:38::i;:::-;-1:-1:-1;;23210:1:0;23201:6;:10;22539:680::o;38542:879::-;38632:6;;:11;38624:34;;;;-1:-1:-1;;;38624:34:0;;;;;;;:::i;:::-;38678:1;38669:6;:10;38712;;-1:-1:-1;;;;;38712:10:0;38698;:24;;:77;;-1:-1:-1;38740:11:0;;-1:-1:-1;;;;;38740:11:0;38726:10;:25;:49;;;;-1:-1:-1;38755:6:0;;-1:-1:-1;;;;;38755:6:0;:20;;38726:49;38690:99;;;;-1:-1:-1;;;38690:99:0;;10675:2:1;38690:99:0;;;10657:21:1;10714:1;10694:18;;;10687:29;-1:-1:-1;;;10732:18:1;;;10725:39;10781:18;;38690:99:0;10473:332:1;38690:99:0;38800:6;:4;:6::i;:::-;38852:10;;-1:-1:-1;;;;;38852:10:0;;;38817:22;38842:21;;;:9;:21;;;;;;;38881:4;;38895:6;;38874:34;;-1:-1:-1;;;38874:34:0;;38842:21;;38881:4;;;;38874:20;;:34;;38895:6;;;;;-1:-1:-1;;;38903:4:0;38874:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;38926:5:0;;38941:6;;38919:35;;-1:-1:-1;;;38919:35:0;;-1:-1:-1;;;;;38926:5:0;;;;38919:21;;:35;;38941:6;;;-1:-1:-1;;;38949:4:0;38919:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;38988:10:0;;-1:-1:-1;;;;;38988:10:0;38965:11;38979:20;;;;;;;;;;;;;;;;39010:27;38979:20;;39010:27;:::i;:::-;;;;-1:-1:-1;;39061:11:0;;39111:4;;-1:-1:-1;;;;;39111:4:0;39048:10;39102:14;;;:8;:14;;;;;39111:4;39102:22;;39097:43;;39126:13;39131:3;39061:11;39126:4;:13::i;:::-;39097:4;:43::i;:::-;39180:5;;-1:-1:-1;;;;;39180:5:0;39151:12;39171:15;;;:8;:15;;;;;39180:5;39171:23;;39083:57;;-1:-1:-1;39151:12:0;39166:44;;39196:13;39201:3;39206:2;39196:4;:13::i;39166:44::-;39151:59;;39236:3;39221:11;;:18;;;;;;;:::i;:::-;;;;-1:-1:-1;;39250:21:0;;-1:-1:-1;;39250:21:0;;;39282:15;:22;;39301:3;;39282:15;39266:5;;39282:22;;39301:3;;39282:22;:::i;:::-;;;;-1:-1:-1;;39327:6:0;;39346:5;;39364:10;;39315:60;;-1:-1:-1;;;39315:60:0;;-1:-1:-1;;;;;39346:5:0;;;39315:60;;;8384:34:1;8434:18;;;8427:34;;;8477:18;;;8470:34;;;39364:10:0;;;8520:18:1;;;8513:43;39327:6:0;;;39315:30;;8318:19:1;;39315:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39386:6;:4;:6::i;:::-;-1:-1:-1;;39412:1:0;39403:6;:10;-1:-1:-1;;;38542:879:0:o;13368:114::-;-1:-1:-1;;;;;13451:14:0;13422:9;13451:14;;;:9;:14;;;;;:22;;;;13368:114::o;24639:601::-;24717:4;24742:10;-1:-1:-1;;;;;24742:17:0;;;;:55;;-1:-1:-1;;;;;;24770:15:0;;;;;;:10;:15;;;;;;;;24786:10;24770:27;;;;;;;;24763:34;;;24742:55;24734:64;;;;;;24817:23;24829:10;24817:11;:23::i;:::-;:32;24809:116;;;;-1:-1:-1;;;24809:116:0;;;;;;;:::i;:::-;24936:20;24942:3;24947;24952;24936:5;:20::i;:::-;24971:10;-1:-1:-1;;;;;24971:17:0;;;;;;:69;;-1:-1:-1;;;;;;24992:15:0;;;;;;:10;:15;;;;;;;;25008:10;24992:27;;;;;;;;-1:-1:-1;;24992:48:0;;24971:69;24967:244;;;-1:-1:-1;;;;;25092:15:0;;;;;;:10;:15;;;;;;;;25108:10;25092:27;;;;;;;;25087:38;;25121:3;25087:4;:38::i;:::-;-1:-1:-1;;;;;25057:15:0;;;;;;;:10;:15;;;;;;;;25073:10;25057:27;;;;;;;;;;:68;;;25145:54;21195:25:1;;;25145:54:0;;;;25073:10;;-1:-1:-1;;;;;;;;;;;25145:54:0;21168:18:1;25145:54:0;;;;;;;24967:244;-1:-1:-1;25228:4:0;24639:601;;;;;:::o;26188:1393::-;26323:23;26335:10;26323:11;:23::i;:::-;:32;26315:116;;;;-1:-1:-1;;;26315:116:0;;;;;;;:::i;:::-;26450:6;;:11;26442:34;;;;-1:-1:-1;;;26442:34:0;;;;;;;:::i;:::-;26496:1;26487:6;:10;26508:6;:4;:6::i;:::-;26545:11;;26525:17;26583:29;26588:12;26545:11;26583:4;:29::i;:::-;26634:10;26625:8;:20;;;;;;;;;;:36;;26567:45;;-1:-1:-1;26649:12:0;;26625:20;;:8;:36;;26649:12;;26625:36;:::i;:::-;;;;;;;;26687:12;26672:11;;:27;;;;;;;:::i;:::-;;;;-1:-1:-1;;26715:46:0;;21195:25:1;;;26744:1:0;;26724:10;;-1:-1:-1;;;;;;;;;;;26715:46:0;21183:2:1;21168:18;26715:46:0;;;;;;;26787:9;26782:409;26806:7;:14;26802:18;;26782:409;;;26842:9;26854:7;26862:1;26854:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26854:10:0;26893:11;;;:8;:11;;;;;;26854:10;26893:19;;26854:10;;-1:-1:-1;26893:19:0;26952:16;26957:5;26893:19;26952:4;:16::i;:::-;26927:41;;27009:13;;27023:1;27009:16;;;;;;;:::i;:::-;;;;;;;26991:14;:34;;26983:73;;;;-1:-1:-1;;;26983:73:0;;;;;;;:::i;:::-;27097:1;-1:-1:-1;;;;;27076:42:0;27085:10;-1:-1:-1;;;;;27076:42:0;;27100:14;27116:1;27076:42;;;;;;;:::i;:::-;;;;;;;;27133:46;27149:1;27152:10;27164:14;27133:15;:46::i;:::-;26827:364;;;26822:3;;;;;:::i;:::-;;;;26782:409;;;-1:-1:-1;27248:4:0;;-1:-1:-1;;;;;27248:4:0;27211:11;27237:16;;;:10;:16;;;;;;27225:29;;27230:5;;27225:4;:29::i;:::-;27276:4;;-1:-1:-1;;;;;27276:4:0;27265:16;;;;:10;:16;;;;;:23;;27211:43;;-1:-1:-1;27211:43:0;;27265:16;;;:23;;27211:43;;27265:23;:::i;:::-;;;;-1:-1:-1;;27310:10:0;27299:22;;;;:10;:22;;;;;:29;;27325:3;;27299:22;:29;;27325:3;;27299:29;:::i;:::-;;;;-1:-1:-1;27339:6:0;;-1:-1:-1;27339:4:0;:6::i;:::-;27359:5;;-1:-1:-1;;;;;27359:5:0;:19;27356:197;;27424:5;;27417:38;;-1:-1:-1;;;27417:38:0;;27390:12;;27405:51;;27410:5;;-1:-1:-1;;;;;27424:5:0;;27417:23;;:38;;27449:4;;27417:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;27405:51::-;27390:66;-1:-1:-1;27470:8:0;;27467:75;;27506:5;;27490:40;;-1:-1:-1;;;;;27506:5:0;27513:10;27525:4;27490:15;:40::i;:::-;27379:174;27356:197;-1:-1:-1;;27572:1:0;27563:6;:10;-1:-1:-1;;;;26188:1393:0:o;18685:198::-;18792:7;;-1:-1:-1;;;;;18792:7:0;18778:10;:21;18770:30;;;;;;18811:8;:17;;-1:-1:-1;;;;;18811:17:0;;;-1:-1:-1;;;;;;18811:17:0;;;;;;;18839:4;:12;;;;;;;;;;;;;;;18862:6;:13;;;;;;;;;;;18685:198::o;4953:690::-;5188:22;5228:19;5250:35;5255:13;5270:14;5250:4;:35::i;:::-;5228:57;;5296:18;5317:15;5322:6;5330:1;5317:4;:15::i;:::-;5296:36;;5356:31;5361:13;5376:10;5356:4;:31::i;:::-;5343:44;;5398:9;5410:54;5415:14;5431:32;5436:14;5452:10;5431:4;:32::i;:::-;5410:4;:54::i;:::-;5398:66;;5475:11;5489:20;5494:1;5497:11;5489:4;:20::i;:::-;5475:34;;5520:11;5534:15;5539:4;5545:3;5534:4;:15::i;:::-;5520:29;;5577:26;5582:15;5599:3;5577:4;:26::i;:::-;5560:43;4953:690;-1:-1:-1;;;;;;;;;;;4953:690:0:o;40279:367::-;40395:10;40384:22;;;;:10;:22;;;;;;:32;-1:-1:-1;40384:32:0;40376:61;;;;-1:-1:-1;;;40376:61:0;;;;;;;:::i;:::-;40448:11;40462:29;40467:6;40475:15;40480:3;40485:4;40475;:15::i;40462:29::-;40513:10;40502:22;;;;:10;:22;;;;;:32;;40448:43;;-1:-1:-1;40528:6:0;;40502:22;;;:32;;40528:6;;40502:32;:::i;:::-;;;;-1:-1:-1;;;;;;;40545:17:0;;;;;;:10;:17;;;;;:24;;40566:3;;40545:17;:24;;40566:3;;40545:24;:::i;:::-;;;;-1:-1:-1;40600:17:0;;-1:-1:-1;40605:6:0;40613:3;40600:4;:17::i;:::-;40591:4;;-1:-1:-1;;;;;40591:4:0;40580:16;;;;:10;:16;;;;;:37;;:16;;;:37;;;;;:::i;:::-;;;;-1:-1:-1;;40637:1:0;40628:6;:10;-1:-1:-1;;;40279:367:0:o;12244:403::-;12361:10;12314:4;12350:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;12350:27:0;;;;;;;;;;12392:14;;;12388:160;;;12434:10;12453:1;12423:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;12423:27:0;;;;;;;;;:31;12388:160;;;12517:19;12522:8;12532:3;12517:4;:19::i;:::-;12498:10;12487:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;12487:27:0;;;;;;;;;:49;12388:160;12572:10;12589:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;12563:54:0;;12589:27;;;;;;;;;;;12563:54;;21195:25:1;;;12563:54:0;;12572:10;-1:-1:-1;;;;;;;;;;;12563:54:0;21168:18:1;12563:54:0;;;;;;;-1:-1:-1;12635:4:0;;12244:403;-1:-1:-1;;;12244:403:0:o;18249:158::-;18366:10;;-1:-1:-1;;;;;18366:10:0;18352;:24;18344:33;;;;;;18388:4;:11;;-1:-1:-1;;18388:11:0;;;;;18249:158::o;25252:925::-;25374:6;;:11;25366:34;;;;-1:-1:-1;;;25366:34:0;;;;;;;:::i;:::-;25420:1;25411:6;:10;25452:11;;25432:17;25490:30;25495:13;25452:11;25490:4;:30::i;:::-;25474:46;;25544:23;25556:10;25544:11;:23::i;:::-;:31;;25571:4;25544:31;25541:94;;;25606:13;25587:15;;:32;;;;;;;:::i;:::-;;;;-1:-1:-1;;25541:94:0;25660:9;25655:403;25679:7;:14;25675:18;;25655:403;;;25715:9;25727:7;25735:1;25727:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;25727:10:0;25766:11;;;:8;:11;;;;;;25727:10;25766:19;;25727:10;;-1:-1:-1;25766:19:0;25838:16;25843:5;25766:19;25838:4;:16::i;:::-;25814:40;;25895:12;;25908:1;25895:15;;;;;;;:::i;:::-;;;;;;;25878:13;:32;;25870:41;;;;;;25952:1;-1:-1:-1;;;;;25931:41:0;25940:10;-1:-1:-1;;;;;25931:41:0;;25955:13;25970:1;25931:41;;;;;;;:::i;:::-;;;;;;;;25987:45;26003:1;26006:10;26018:13;25987:15;:45::i;:::-;25700:358;;;25695:3;;;;;:::i;:::-;;;;25655:403;;;;26068:20;26074:13;26068:5;:20::i;:::-;26099:32;26105:10;26117:13;26099:5;:32::i;:::-;26142:6;:4;:6::i;19297:282::-;19412:11;;-1:-1:-1;;;;;19412:11:0;19398:10;:25;19390:34;;;;;;19435:11;:21;;-1:-1:-1;;;;;19435:21:0;;;-1:-1:-1;;;;;;19435:21:0;;;;;;;19467:7;:13;;;;;;;;;;;;;;;19491:10;:15;;;;;;;;;;;19297:282::o;37037:661::-;37137:4;;-1:-1:-1;;;;;37137:4:0;;;37114:11;37128:14;;;:8;:14;;;;;37137:4;37128:22;;37183:10;;37128:22;;37183:10;37169;:24;:39;;;;;37204:4;37197:3;:11;;37169:39;37161:78;;;;-1:-1:-1;;;37161:78:0;;;;;;;:::i;:::-;37269:5;37263:3;:11;37260:169;;;37346:3;37338:4;:11;;:27;;;;;37361:4;37353;:12;;37338:27;:42;;;;;37377:3;37369:4;:11;;37338:42;:55;;;;-1:-1:-1;37384:9:0;;;37338:55;37330:86;;;;-1:-1:-1;;;37330:86:0;;20553:2:1;37330:86:0;;;20535:21:1;20592:2;20572:18;;;20565:30;-1:-1:-1;;;20611:18:1;;;20604:48;20669:18;;37330:86:0;20351:342:1;37330:86:0;37459:5;37452:3;:12;37449:190;;37536:3;37528:4;:11;;:27;;;;;37551:4;37543;:12;;37528:27;:42;;;;;37567:3;37559:4;:11;;37528:42;:55;;;;-1:-1:-1;37574:9:0;;;37528:55;37520:106;;;;-1:-1:-1;;;37520:106:0;;15157:2:1;37520:106:0;;;15139:21:1;15196:2;15176:18;;;15169:30;15235:34;15215:18;;;15208:62;-1:-1:-1;;;15286:18:1;;;15279:36;15332:19;;37520:106:0;14955:402:1;37520:106:0;-1:-1:-1;37659:3:0;:10;37680:3;:10;37037:661::o;17802:435::-;17903:10;;-1:-1:-1;;;;;17903:10:0;17889;:24;17881:63;;;;-1:-1:-1;;;17881:63:0;;;;;;;:::i;:::-;17976:5;;17969:27;;;-1:-1:-1;;;17969:27:0;;;;17955:11;;-1:-1:-1;;;;;17976:5:0;;17969:25;;:27;;;;;;;;;;;;;;17976:5;17969:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17955:41;-1:-1:-1;18027:8:0;18031:4;17955:41;18027:8;:::i;:::-;18016:7;:19;;:37;;;;;18050:3;18039:7;:14;;18016:37;18007:101;;;;-1:-1:-1;;;18007:101:0;;14048:2:1;18007:101:0;;;14030:21:1;14087:2;14067:18;;;14060:30;14126:34;14106:18;;;14099:62;-1:-1:-1;;;14177:18:1;;;14170:48;14235:19;;18007:101:0;13846:414:1;18007:101:0;18139:4;18129:6;:14;;18120:41;;;;-1:-1:-1;;;18120:41:0;;12191:2:1;18120:41:0;;;12173:21:1;12230:2;12210:18;;;12203:30;-1:-1:-1;;;12249:18:1;;;12242:43;12302:18;;18120:41:0;11989:337:1;18120:41:0;-1:-1:-1;18172:14:0;:24;;;;18207:13;:22;17802:435::o;11462:36::-;;;;;;;:::i;37710:824::-;37839:6;;:11;37831:34;;;;-1:-1:-1;;;37831:34:0;;;;;;;:::i;:::-;37885:1;37876:6;:10;37905:17;37917:4;37905:11;:17::i;:::-;:25;;37926:4;37905:25;37897:58;;;;-1:-1:-1;;;37897:58:0;;15919:2:1;37897:58:0;;;15901:21:1;15958:2;15938:18;;;15931:30;-1:-1:-1;;;15977:18:1;;;15970:50;16037:18;;37897:58:0;15717:344:1;37897:58:0;-1:-1:-1;;;;;37991:15:0;;;37966:22;37991:15;;;:9;:15;;;;;;;38041:11;:17;;;;;;38086:11;;37991:15;;38041:17;;38086:11;38072:10;:25;38069:437;;;38127:24;:15;38145:6;38127:24;:::i;:::-;38109:15;;;:42;38069:437;;;38243:4;:15;;;38224;:34;;:62;;;;-1:-1:-1;38276:10:0;;-1:-1:-1;;;;;38276:10:0;38262;:24;38224:62;38216:147;;;;-1:-1:-1;;;38216:147:0;;11710:2:1;38216:147:0;;;11692:21:1;11749:2;11729:18;;;11722:30;-1:-1:-1;;;;;;;;;;;11768:18:1;;;11761:62;11859:34;11839:18;;;11832:62;-1:-1:-1;;;11910:19:1;;;11903:39;11959:19;;38216:147:0;11508:476:1;38216:147:0;38374:21;;-1:-1:-1;;38374:21:0;;;38422:37;;-1:-1:-1;;;38422:37:0;;38390:5;;38437:4;;38422:31;;:37;;38454:4;;38422:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38406:53;;38489:5;38470:15;;:24;;;;;;;:::i;:::-;;;;-1:-1:-1;;;38069:437:0;-1:-1:-1;;38525:1:0;38516:6;:10;-1:-1:-1;37710:824:0:o;19591:459::-;19670:10;19699:17;19670:10;19699:11;:17::i;:::-;:26;19691:63;;;;-1:-1:-1;;;19691:63:0;;11357:2:1;19691:63:0;;;11339:21:1;11396:2;11376:18;;;11369:30;-1:-1:-1;;;11415:18:1;;;11408:54;11479:18;;19691:63:0;11155:348:1;19691:63:0;19781:37;;-1:-1:-1;;;19781:37:0;;19765:13;;19796:4;;19781:31;;:37;;19813:4;;19781:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19854:15:0;;19829:22;19854:15;;;:9;:15;;;;;;;19904:11;:17;;;;;;19932:20;;-1:-1:-1;;19932:20:0;19948:4;19932:20;;;19765:53;;-1:-1:-1;19854:15:0;19981:25;:15;19999:7;19981:25;:::i;:::-;19963:4;:15;;:43;;;;20037:5;20018:15;;:24;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;19591:459:0:o;3582:543::-;3809:17;3844:13;3860:35;3865:14;3881:13;3860:4;:35::i;:::-;3844:51;;3906:13;3922:37;3927:15;3944:14;3922:4;:37::i;:::-;3906:53;;3970:13;3986:18;3991:5;3998;3986:4;:18::i;:::-;3970:34;;4015:13;4031:35;4036:6;4044:21;4049:6;4057:7;4044:4;:21::i;4031:35::-;4015:51;;4098:18;4103:5;4110;4098:4;:18::i;:::-;4086:30;3582:543;-1:-1:-1;;;;;;;;;;3582:543:0:o;24369:262::-;24430:4;24455:23;24467:10;24455:11;:23::i;:::-;:32;24447:116;;;;-1:-1:-1;;;24447:116:0;;;;;;;:::i;:::-;24574:27;24580:10;24592:3;24597;24574:5;:27::i;:::-;-1:-1:-1;24619:4:0;24369:262;;;;:::o;20062:1056::-;20162:4;;;;:13;20154:22;;;;;;20209:5;;20202:38;;-1:-1:-1;;;20202:38:0;;20187:12;;-1:-1:-1;;;;;20209:5:0;;20202:23;;:38;;20234:4;;20202:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20274:4;;20267:37;;-1:-1:-1;;;20267:37:0;;20187:53;;-1:-1:-1;20251:13:0;;-1:-1:-1;;;;;20274:4:0;;;;20267:22;;:37;;20298:4;;20267:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20333:83;;;;;;;;20362:7;:14;;20333:83;;;;;;;;;20324:5;;;-1:-1:-1;;;;;20324:5:0;;;-1:-1:-1;20315:15:0;;;:8;:15;;;;;;:101;;;;;;20324:5;20315:101;;;;20454:84;;;;;;;20483:14;;20454:84;;;;;;;;20446:4;;;;;20437:14;;;;;;;;;:101;;;;;;;;;;;;;20572:5;;20559:19;;;;;;;;;;;;;20572:5;;;-1:-1:-1;;;;;;20559:19:0;;;;;;20602:4;;20589:18;;;;;;;;;;;;;;20602:4;;;20589:18;;;;;;;;;;;20644:5;;;;20635:15;;;;;:23;;20454:84;;-1:-1:-1;;20630:34:0;;20660:3;20630:4;:34::i;:::-;20701:4;;-1:-1:-1;;;;;20701:4:0;20675:9;20692:14;;;:8;:14;;;;;20701:4;20692:22;;20618:46;;-1:-1:-1;20675:9:0;20687:34;;20716:4;20687;:34::i;:::-;20675:46;-1:-1:-1;20732:9:0;20744:5;20675:46;20744:1;:5;:::i;:::-;20732:17;;20760:8;20766:1;20760:5;:8::i;:::-;20779:15;20785:5;20792:1;20779:5;:15::i;:::-;20823:24;20828:15;;20845:1;20823:4;:24::i;:::-;20805:15;:42;-1:-1:-1;;;;;20883:16:0;;20858:22;20883:16;;;:9;:16;;;;;;;20934:11;:18;;;;;;20963:20;;-1:-1:-1;;20963:20:0;20979:4;20963:20;;;21012:26;:15;21030:8;21012:26;:::i;:::-;20994:15;;;;:44;;;;21050:4;:11;;-1:-1:-1;;21050:11:0;;;;;;21078:31;21083:3;21088:20;21093:4;21099:8;21088:4;:20::i;21078:31::-;21072:3;:37;-1:-1:-1;;;;;;;;;20062:1056:0:o;31894:2806::-;32059:22;32105:31;32125:10;32105:19;:31::i;:::-;32102:101;;32165:6;;:11;32157:34;;;;-1:-1:-1;;;32157:34:0;;;;;;;:::i;:::-;32222:1;32213:6;:10;;;32242:4;;;;;;;:12;;;32234:40;;;;-1:-1:-1;;;32234:40:0;;;;;;;:::i;:::-;32288:30;32307:10;32288:18;:30::i;:::-;:38;;32322:4;32288:38;32285:141;;;32354:4;;32347:3;:11;32339:75;;;;-1:-1:-1;;;32339:75:0;;;;;;;:::i;:::-;32471:14;;32454:13;:31;;32446:58;;;;-1:-1:-1;;;32446:58:0;;;;;;;:::i;:::-;32538:5;;-1:-1:-1;;;;;32538:5:0;32515:11;32529:15;;;:8;:15;;;;;32538:5;32529:23;;;32563:49;;32586:10;32598:13;32563:15;:49::i;:::-;32690:13;;32656:5;;32649:38;;-1:-1:-1;;;32649:38:0;;-1:-1:-1;;;;;32656:5:0;;;;32649:23;;:38;;32681:4;;32649:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;;;:::i;:::-;32632:5;;;-1:-1:-1;;;;;32632:5:0;;;32623:15;;;;:8;:15;;;;;;32632:5;32623:23;;;:80;;;;32750:5;;;;;32741:15;;;;;:23;;;;32735:54;;32741:29;;32767:3;;32741:29;:::i;:::-;32773:15;32778:3;32783:4;32773;:15::i;32735:54::-;32898:5;;-1:-1:-1;;;;;32898:5:0;32889:15;;;;:8;:15;;;;;32898:5;32889:23;;32714:75;;-1:-1:-1;32827:376:0;;32959:14;32964:4;32970:2;32959:4;:14::i;:::-;33029:4;;-1:-1:-1;;;;;33029:4:0;33020:14;;;;:8;:14;;;;;33029:4;33020:22;;33089:14;33094:4;33100:2;33089:4;:14::i;:::-;33150:10;32827:15;:376::i;:::-;33264:4;;-1:-1:-1;;;;;33264:4:0;33255:14;;;;:8;:14;;;;;33264:4;33255:22;;32810:393;;-1:-1:-1;33250:50:0;;33279:20;15771:2;33295:3;33279:4;:20::i;33250:50::-;33232:14;:68;;33224:99;;;;-1:-1:-1;;;33224:99:0;;;;;;;:::i;:::-;33392:12;33374:14;:30;;33366:69;;;;-1:-1:-1;;;33366:69:0;;;;;;;:::i;:::-;33446:12;33461:37;33466:14;33482:15;33487:3;;33492:4;33482;:15::i;33461:37::-;33446:52;;33509:18;33531:27;33536:4;33542:15;33547:2;33551:5;33542:4;:15::i;33531:27::-;33509:49;;33569:11;33583:27;33588:4;33594:15;33599:2;33603:5;33594:4;:15::i;33583:27::-;33569:41;;33621:19;33644:28;33649:4;33655:16;33660:3;;33665:5;33655:4;:16::i;33644:28::-;33621:51;-1:-1:-1;33683:10:0;33621:51;33705:16;33718:3;33705:10;:16;:::i;:::-;:30;;;;:::i;:::-;33697:39;;:4;:39;:::i;:::-;33683:54;;33748:19;33770:25;33775:2;33779:15;33784:3;33789:4;33779;:15::i;33770:25::-;33838:4;33806:10;33819:25;;;:10;:25;;;;;;33748:47;;-1:-1:-1;33873:4:0;33868:9;;33865:95;;;33906:2;33889:13;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;;33938:4:0;33947:1;33919:25;;;:10;:25;;;;;:29;33865:95;33985:4;;-1:-1:-1;;;;;33985:4:0;33980:19;34019:10;34000:16;34014:2;34000:11;:16;:::i;:::-;:29;;;;:::i;:::-;33980:50;;;;;;;;;;;;;21195:25:1;;21183:2;21168:18;;21049:177;33980:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34041:68;34072:2;34076:32;34081:11;34094:13;34099:2;34103:3;34094:4;:13::i;34076:32::-;34041:30;:68::i;:::-;34137:23;34142:2;34146:13;34151:1;34154:4;34146;:13::i;34137:23::-;34120:13;;:40;;;;;;;:::i;:::-;;;;-1:-1:-1;34171:11:0;;-1:-1:-1;34185:31:0;34190:11;34203:12;34208:1;34211:3;34203:4;:12::i;34185:31::-;34171:45;;34227:12;34242:32;34247:11;34260:13;34265:2;34269:3;34260:4;:13::i;34242:32::-;34227:47;;34315:32;34320:11;34333:13;34338:2;34342:3;34333:4;:13::i;34315:32::-;34296:14;;-1:-1:-1;;;;;34296:14:0;34285:26;;;;:10;:26;;;;;:62;;:26;;;:62;;;;;:::i;:::-;;;;-1:-1:-1;;34369:7:0;;-1:-1:-1;;;;;34369:7:0;34358:19;;;;:10;:19;;;;;:27;;34381:4;;34358:19;:27;;34381:4;;34358:27;:::i;:::-;;;;-1:-1:-1;;34407:4:0;;-1:-1:-1;;;;;34407:4:0;34396:16;;;;:10;:16;;;;;:23;;34416:3;;34396:16;:23;;34416:3;;34396:23;:::i;:::-;;;;;;;;34447:11;34430:13;;:28;;;;;;;:::i;:::-;;;;;;;;34486:3;34469:13;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;34500:10:0;;-1:-1:-1;34500:8:0;:10::i;:::-;34521:9;:7;:9::i;:::-;34541:6;:4;:6::i;:::-;34591:4;;34584:5;;-1:-1:-1;;;;;34591:4:0;;;;34584:5;34572:10;-1:-1:-1;;;;;;;;;;;34597:10:0;34609:32;34614:11;34627:13;34632:2;34636:3;34627:4;:13::i;34609:32::-;34563:79;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;34662:1:0;34653:6;:10;-1:-1:-1;34681:11:0;31894:2806;-1:-1:-1;;;;;;;;;;;;31894:2806:0:o;34713:2308::-;34840:22;34888:6;;34898:1;34888:11;34880:34;;;;-1:-1:-1;;;34880:34:0;;;;;;;:::i;:::-;34934:1;34925:6;:10;35003;34946:11;34992:22;;;:10;:22;;;;;;34960:13;;34992:39;-1:-1:-1;34992:39:0;34984:68;;;;-1:-1:-1;;;34984:68:0;;;;;;;:::i;:::-;35106:5;;-1:-1:-1;;;;;35106:5:0;;;35063:23;35089:24;;;:8;:24;;;;;;35168:4;;;;;35151:23;;;;35210:14;;35193:31;;;35185:58;;;;-1:-1:-1;;;35185:58:0;;;;;;;:::i;:::-;35273:412;35335:8;:16;;;35398:14;35403:4;35409:2;35398:4;:14::i;:::-;35459:9;:17;;;35523:14;35528:4;35534:2;35523:4;:14::i;:::-;35584:36;35589:13;35604:15;35609:3;35614:4;35604;:15::i;35273:412::-;35256:429;;35724:45;35729:9;:17;;;35748:20;15771:2;35764:3;35748:4;:20::i;35724:45::-;35706:14;:63;;35698:94;;;;-1:-1:-1;;;35698:94:0;;;;;;;:::i;:::-;35803:12;35818:37;35823:14;35839:15;35844:3;;35849:4;35839;:15::i;35818:37::-;35803:52;;35866:18;35888:27;35893:4;35899:15;35904:2;35908:5;35899:4;:15::i;35888:27::-;35866:49;;35926:11;35940:27;35945:4;35951:15;35956:2;35960:5;35951:4;:15::i;35940:27::-;35926:41;;35978:19;36001:28;36006:4;36012:16;36017:3;;36022:5;36012:4;:16::i;36001:28::-;35978:51;-1:-1:-1;36040:10:0;35978:51;36062:16;36075:3;36062:10;:16;:::i;:::-;:30;;;;:::i;:::-;36054:39;;:4;:39;:::i;:::-;36040:54;;36105:19;36127:25;36132:2;36136:15;36141:3;36146:4;36136;:15::i;36127:25::-;36105:47;;36180:23;36185:2;36189:13;36194:1;36197:4;36189;:13::i;36180:23::-;36163:13;;:40;;;;;;;:::i;:::-;;;;-1:-1:-1;;36222:27:0;;;;36214:66;;;;-1:-1:-1;;;36214:66:0;;;;;;;:::i;:::-;36302:10;36291:22;;;;:10;:22;;;;;:39;;36317:13;;36291:22;:39;;36317:13;;36291:39;:::i;:::-;;;;;;;;36358:13;36341;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;36393:10:0;36382:22;;;;:10;:22;;;;;:37;;36408:11;;36382:22;:37;;36408:11;;36382:37;:::i;:::-;;;;-1:-1:-1;;36449:4:0;36430:25;;;;:10;:25;;;;;:39;;36459:10;;36430:25;:39;;36459:10;;36430:39;:::i;:::-;;;;-1:-1:-1;36480:10:0;;-1:-1:-1;36493:32:0;36498:11;36511:13;36516:2;36520:3;36511:4;:13::i;36493:32::-;36480:45;;36536:11;36550:31;36555:11;36568:12;36573:1;36576:3;36568:4;:12::i;36550:31::-;36536:45;;36592:12;36607:32;36612:11;36625:13;36630:2;36634:3;36625:4;:13::i;36607:32::-;36661:14;;-1:-1:-1;;;;;36661:14:0;36650:26;;;;:10;:26;;;;;:32;;36592:47;;-1:-1:-1;36680:2:0;;36650:26;;;:32;;36680:2;;36650:32;:::i;:::-;;;;-1:-1:-1;;36704:7:0;;-1:-1:-1;;;;;36704:7:0;36693:19;;;;:10;:19;;;;;:27;;36716:4;;36693:19;:27;;36716:4;;36693:27;:::i;:::-;;;;-1:-1:-1;;36742:4:0;;-1:-1:-1;;;;;36742:4:0;36731:16;;;;:10;:16;;;;;:23;;36751:3;;36731:16;:23;;36751:3;;36731:23;:::i;:::-;;;;-1:-1:-1;36810:11:0;;-1:-1:-1;36783:24:0;36796:11;36783:10;:24;:::i;:::-;:38;;;;:::i;:::-;36765:13;;:57;;;;;;;:::i;:::-;;;;;;;;36850:3;36833:13;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;36864:6:0;;-1:-1:-1;36864:4:0;:6::i;:::-;36881:9;:7;:9::i;:::-;36939:4;;;;;;;;;-1:-1:-1;;;;;36939:4:0;-1:-1:-1;;;;;36906:56:0;36932:5;;;;;;;;;-1:-1:-1;;;;;36932:5:0;-1:-1:-1;;;;;36906:56:0;36920:10;-1:-1:-1;;;;;36906:56:0;-1:-1:-1;;;;;;;;;;;36945:3:0;36950:11;36906:56;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;36982:1:0;36973:6;:10;-1:-1:-1;37001:11:0;34713:2308;-1:-1:-1;;;;;;;;;;;34713:2308:0:o;23227:1130::-;23338:4;;-1:-1:-1;;;;;23329:13:0;;;23338:4;;23329:13;;:31;;-1:-1:-1;23355:5:0;;-1:-1:-1;;;;;23346:14:0;;;23355:5;;23346:14;23329:31;23321:57;;;;-1:-1:-1;;;23321:57:0;;;;;;;:::i;:::-;23397:6;;:11;23389:34;;;;-1:-1:-1;;;23389:34:0;;;;;;;:::i;:::-;23443:1;23434:6;:10;23467:4;;-1:-1:-1;;;;;23458:13:0;;;23467:4;;23458:13;23455:874;;;23502:10;23491:22;;;;:10;:22;;;;;;:29;-1:-1:-1;23491:29:0;23483:57;;;;-1:-1:-1;;;23483:57:0;;;;;;;:::i;:::-;23566:4;;23551:49;;-1:-1:-1;;;23551:49:0;;-1:-1:-1;;;;;23566:4:0;;;;23551:29;;:49;;23589:4;;23596:3;;23551:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23631:3;23614:13;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;;23656:10:0;23645:22;;;;:10;:22;;;;;:29;;23671:3;;23645:22;:29;;23671:3;;23645:29;:::i;:::-;;;;-1:-1:-1;;23712:4:0;;23685:37;;-1:-1:-1;;;23685:37:0;;-1:-1:-1;;;;;23685:26:0;;;;;;:37;;23712:4;;;;23718:3;;23685:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23734:14;23750:13;23777:4;-1:-1:-1;;;;;23767:35:0;;23811:4;23767:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23828:29;;-1:-1:-1;;;23828:29:0;;23733:84;;-1:-1:-1;23733:84:0;-1:-1:-1;;;;;;23828:18:0;;;;;:29;;23847:2;;23733:84;;23828:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23455:874:0;;-1:-1:-1;;;;;23455:874:0;;23940:10;23929:22;;;;:10;:22;;;;;;:29;-1:-1:-1;23929:29:0;23921:58;;;;-1:-1:-1;;;23921:58:0;;;;;;;:::i;:::-;24005:5;;23990:50;;-1:-1:-1;;;23990:50:0;;-1:-1:-1;;;;;24005:5:0;;;;23990:30;;:50;;24029:4;;24036:3;;23990:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24068:3;24051:13;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;;24093:10:0;24082:22;;;;:10;:22;;;;;:29;;24108:3;;24082:22;:29;;24108:3;;24082:29;:::i;:::-;;;;-1:-1:-1;;24149:5:0;;24122:38;;-1:-1:-1;;;24122:38:0;;-1:-1:-1;;;;;24122:26:0;;;;;;:38;;24149:5;;;;24156:3;;24122:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24172:14;24188:13;24215:4;-1:-1:-1;;;;;24205:35:0;;24249:4;24205:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24266:31;;-1:-1:-1;;;24266:31:0;;24171:84;;-1:-1:-1;24171:84:0;-1:-1:-1;;;;;;24266:19:0;;;;;:31;;24286:2;;24171:84;;24266:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23455:874:0;-1:-1:-1;;24348:1:0;24339:6;:10;-1:-1:-1;;23227:1130:0:o;4135:810::-;4395:22;4419:18;4455:19;4477:35;4482:13;4497:14;4477:4;:35::i;:::-;4455:57;;4523:18;4544:21;4549:6;4557:7;4544:4;:21::i;:::-;4523:42;;4589:31;4594:13;4609:10;4589:4;:31::i;:::-;4576:44;;4631:9;4643:54;4648:14;4664:32;4669:14;4685:10;4664:4;:32::i;4643:54::-;4631:66;;4708:11;4722:20;4727:1;4730:11;4722:4;:20::i;:::-;4708:34;;4753:11;4767:15;4772:4;4778:3;4767:4;:15::i;:::-;4753:29;;4810:26;4815:15;4832:3;4810:4;:26::i;:::-;4793:43;;4860:31;4865:13;4880:10;4860:4;:31::i;:::-;4847:44;;4902:35;;;;;4135:810;;;;;;;;;:::o;21517:1014::-;21607:4;;-1:-1:-1;;;;;21598:13:0;;;21607:4;;21598:13;;:31;;-1:-1:-1;21624:5:0;;-1:-1:-1;;;;;21615:14:0;;;21624:5;;21615:14;21598:31;21590:57;;;;-1:-1:-1;;;21590:57:0;;;;;;;:::i;:::-;21666:6;;:11;21658:34;;;;-1:-1:-1;;;21658:34:0;;;;;;;:::i;:::-;21712:1;21703:6;:10;;;21732:4;;;;;;;:12;;;21724:21;;;;;;21778:5;;-1:-1:-1;;;;;21769:14:0;;;21778:5;;21769:14;21766:737;;;21818:5;;-1:-1:-1;;;;;21818:5:0;21795:11;21809:15;;;:8;:15;;;;;21818:5;21809:23;;;21848:39;;21871:10;21883:3;21848:15;:39::i;:::-;21924:5;;21917:38;;-1:-1:-1;;;21917:38:0;;21898:11;;21912:59;;-1:-1:-1;;;;;21924:5:0;;;;21917:23;;:38;;21949:4;;21917:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21957:13;;21912:4;:59::i;:::-;21898:73;;21984:19;22006:14;22011:3;22016;22006:4;:14::i;:::-;21984:36;;22050:11;22033:13;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;;22083:10:0;22072:22;;;;:10;:22;;;;;:37;;22098:11;;22072:22;:37;;22098:11;;22072:37;:::i;:::-;;;;-1:-1:-1;21766:737:0;;-1:-1:-1;;;;21766:737:0;;22169:4;;-1:-1:-1;;;;;22169:4:0;22146:11;22160:14;;;:8;:14;;;;;22169:4;22160:22;;;22193:38;;22215:10;22227:3;22193:15;:38::i;:::-;22268:4;;22261:37;;-1:-1:-1;;;22261:37:0;;22242:11;;22256:100;;-1:-1:-1;;;;;22268:4:0;;;;22261:22;;:37;;22292:4;;22261:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22300:55;22305:13;;22320:34;22325:13;;22340;;22320:4;:34::i;:::-;22300:4;:55::i;:::-;22256:4;:100::i;:::-;22242:114;;22367:19;22389:14;22394:3;22399;22389:4;:14::i;:::-;22367:36;;22432:11;22414:13;;:29;;;;;;;:::i;:::-;;;;-1:-1:-1;;22465:10:0;22454:22;;;;:10;:22;;;;;:37;;22480:11;;22454:22;:37;;22480:11;;22454:37;:::i;:::-;;;;-1:-1:-1;;;;;;;22522:1:0;22513:6;:10;21517:1014::o;29755:2127::-;29894:22;29942:6;;29952:1;29942:11;29934:34;;;;-1:-1:-1;;;29934:34:0;;;;;;;:::i;:::-;29988:1;29979:6;:10;;;30008:4;;;;;;;:12;;;30000:40;;;;-1:-1:-1;;;30000:40:0;;;;;;;:::i;:::-;30051:13;30067:32;30072:9;30083:15;30088:3;30093:4;30083;:15::i;30067:32::-;30051:48;;30115:4;;;;;;;;;-1:-1:-1;;;;;30115:4:0;-1:-1:-1;;;;;30110:18:0;;30136:5;30110:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30155:74;30186:10;30198:30;30203:9;30214:13;30219:1;30222:4;30214;:13::i;30155:74::-;30253:30;30272:10;30253:18;:30::i;:::-;:38;;30287:4;30253:38;30250:141;;;30319:4;;30312:3;:11;30304:75;;;;-1:-1:-1;;;30304:75:0;;;;;;;:::i;:::-;30433:3;;30426:42;;-1:-1:-1;;;30426:42:0;;30411:12;;-1:-1:-1;;;;;30433:3:0;;30426:21;;:42;;30456:10;;30426:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30411:57;-1:-1:-1;30492:21:0;30537:6;;;;;:27;;;30560:4;30547:9;:17;;30537:27;:43;;;;;30576:4;30568;:12;;30537:43;30534:82;;;30592:12;:10;:12::i;:::-;30679:4;;-1:-1:-1;;;;;30679:4:0;;;30636:23;30662;;;:8;:23;;;;;;30740:5;;;;;30723:24;;;;30789:13;;30776:9;:26;;30768:55;;;;-1:-1:-1;;;30768:55:0;;;;;;;:::i;:::-;30844:18;30904:429;30965:8;:16;;;31028:14;31033:4;31039:2;31028:4;:14::i;:::-;31089:9;:17;;;31153:14;31158:4;31164:2;31153:4;:14::i;:::-;31214:28;31219:5;31226:15;31231:3;31236:4;31226;:15::i;31214:28::-;31289:1;30904:14;:429::i;:::-;31417:17;;;;30873:460;;-1:-1:-1;30873:460:0;-1:-1:-1;31412:45:0;;31436:20;15771:2;31452:3;31436:4;:20::i;31412:45::-;31394:14;:63;;31386:94;;;;-1:-1:-1;;;31386:94:0;;;;;;;:::i;:::-;31508:30;31513:9;31524:13;31529:1;31532:4;31524;:13::i;31508:30::-;31491:13;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;31589:30:0;;;;31581:69;;;;-1:-1:-1;;;31581:69:0;;;;;;;:::i;:::-;31677:5;;31661:42;;-1:-1:-1;;;;;31677:5:0;31684:2;31688:14;31661:15;:42::i;:::-;31714:6;:4;:6::i;:::-;31765:5;;31759:4;;31809:3;;-1:-1:-1;;;;;31765:5:0;;;;31759:4;;;;31747:10;;-1:-1:-1;;;;;;;;;;;31738:82:0;31772:9;;31783:36;;31788:14;;31804;;31814:3;31804:4;:14::i;31783:36::-;31738:82;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;31840:1:0;31831:6;:10;-1:-1:-1;;;;29755:2127:0;;;;;:::o;19023:105::-;19092:7;;-1:-1:-1;;;;;19092:7:0;19078:10;:21;19070:30;;;;;;19111:3;:9;19023:105::o;11981:255::-;12114:10;12051:4;12103:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;12103:27:0;;;;;;;;;;12098:38;;12132:3;12098:4;:38::i;:::-;12079:10;12068:22;;;;:10;:22;;;;;;;;-1:-1:-1;;;;;12068:27:0;;;;;;;;;;;;:68;;;12152:54;21195:25:1;;;12068:27:0;;-1:-1:-1;;;;;;;;;;;12152:54:0;21168:18:1;12152:54:0;21049:177:1;18895:116:0;18964:7;;-1:-1:-1;;;;;18964:7:0;18950:10;:21;18942:30;;;;;;18983:14;:20;;-1:-1:-1;;;;;;18983:20:0;-1:-1:-1;;;;;18983:20:0;;;;;;;;;;18895:116::o;15927:397::-;16049:4;;;;:13;16041:43;;;;-1:-1:-1;;;16041:43:0;;14811:2:1;16041:43:0;;;14793:21:1;14850:2;14830:18;;;14823:30;-1:-1:-1;;;14869:18:1;;;14862:47;14926:18;;16041:43:0;14609:341:1;16041:43:0;16095:5;:15;;-1:-1:-1;;;;;16095:15:0;;;-1:-1:-1;;;;;;16095:15:0;;;;;;;;16121:10;:18;;;;;;;;;;;;;16150:14;:22;;;;;;;;;16183:4;:9;;;-1:-1:-1;16203:12:0;;;;;;;;;;;16226:8;:16;;;;;;;;;;;;16275:27;;;-1:-1:-1;;;16275:27:0;;;;16270:46;;16095:15;16275:25;;:27;;;;;;;;;;;;;;16095:15;16275:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16304:11;16309:1;16312:2;16304:4;:11::i;16270:46::-;16253:14;:63;-1:-1:-1;;;;;15927:397:0:o;5651:853::-;5912:21;5935:18;5971:19;5993:35;5998:14;6014:13;5993:4;:35::i;:::-;5971:57;;6039:12;6054:37;6059:15;6076:14;6054:4;:37::i;:::-;6039:52;;6102:9;6114:27;6119:15;6136:4;6114;:27::i;:::-;6102:39;;6152:11;6166:20;6171:1;6174:11;6166:4;:20::i;:::-;6152:34;;6203:15;6208:3;6213:4;6203;:15::i;:::-;6197:21;;6235:25;6240:14;6256:3;6235:4;:25::i;:::-;6229:31;;6287:19;6292:4;6298:7;6287:4;:19::i;:::-;6271:35;;6333:24;6338:3;6343:13;6333:4;:24::i;:::-;6317:40;;6381:15;6386:3;6391:4;6381;:15::i;:::-;6368:28;;6420:31;6425:13;6440:10;6420:4;:31::i;:::-;6407:44;;6462:34;;;;5651:853;;;;;;;;;:::o;27783:1960::-;27971:10;27910:22;27960;;;:10;:22;;;;;;:39;-1:-1:-1;27960:39:0;27952:81;;;;-1:-1:-1;;;27952:81:0;;18758:2:1;27952:81:0;;;18740:21:1;18797:2;18777:18;;;18770:30;18836:31;18816:18;;;18809:59;18885:18;;27952:81:0;18556:353:1;27952:81:0;28052:6;;:11;28044:34;;;;-1:-1:-1;;;28044:34:0;;;;;;;:::i;:::-;28098:1;28089:6;:10;28153:4;;-1:-1:-1;;;;;28153:4:0;;;28110:23;28136;;;:8;:23;;;;;;28214:5;;;;;28197:24;;;;28257:13;;28240:30;;;28232:59;;;;-1:-1:-1;;;28232:59:0;;;;;;;:::i;:::-;28302:18;28362:437;28423:8;:16;;;28486:14;28491:4;28497:2;28486:4;:14::i;28362:437::-;28851:17;;;;28331:468;;-1:-1:-1;28331:468:0;-1:-1:-1;28846:45:0;;28870:20;15771:2;28886:3;28870:4;:20::i;28846:45::-;28828:14;:63;;28820:94;;;;-1:-1:-1;;;28820:94:0;;;;;;;:::i;:::-;28983:12;28965:14;:30;;28957:69;;;;-1:-1:-1;;;28957:69:0;;;;;;;:::i;:::-;29051:10;29040:22;;;;:10;:22;;;;;:39;;29066:13;;29040:22;:39;;29066:13;;29040:39;:::i;:::-;;;;;;;;29107:13;29090;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;;29142:10:0;29131:22;;;;:10;:22;;;;;:40;;29157:14;;29131:22;:40;;29157:14;;29131:40;:::i;:::-;;;;;;;;29199:14;29182:13;;:31;;;;;;;:::i;:::-;;;;-1:-1:-1;29241:34:0;;-1:-1:-1;29246:13:0;29261;29266:1;29269:4;29261;:13::i;29241:34::-;29224:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;29286:6:0;;-1:-1:-1;29286:4:0;:6::i;:::-;29340:5;;29334:4;;29308:69;;-1:-1:-1;;;;;29340:5:0;;;;29334:4;;;;29322:10;;-1:-1:-1;;;;;;;;;;;29308:69:0;;;29347:13;;29362:14;;29308:69;:::i;:::-;;;;;;;;29410:3;;29403:42;;-1:-1:-1;;;29403:42:0;;29388:12;;-1:-1:-1;;;;;29410:3:0;;29403:21;;:42;;29433:10;;29403:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29388:57;;29483:1;29459:21;:25;:50;;;;;29505:4;29488:13;:21;;29459:50;:66;;;;;29521:4;29513;:12;;29459:66;29456:226;;;29537:10;29550:30;29555:21;29578:1;29550:4;:30::i;:::-;29537:43;;29591:46;29622:10;29634:2;29591:30;:46::i;:::-;29668:2;29648:16;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;29456:226:0;-1:-1:-1;;29701:1:0;29692:6;:10;-1:-1:-1;;27783:1960:0;;;;:::o;17474:316::-;17618:13;;17584:5;;17577:38;;-1:-1:-1;;;17577:38:0;;-1:-1:-1;;;;;17584:5:0;;;;17577:23;;:38;;17609:4;;17577:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;;;:::i;:::-;17560:5;;-1:-1:-1;;;;;17560:5:0;17551:15;;;;:8;:15;;;;;17560:5;17551:23;:80;;;;17690:13;;17674;;17658;;:29;;17674:13;17658:29;:::i;:::-;:45;;;;:::i;:::-;17747:4;;17740:37;;-1:-1:-1;;;17740:37:0;;17644:60;;-1:-1:-1;17644:60:0;;-1:-1:-1;;;;;17747:4:0;;;;17740:22;;:37;;17771:4;;17740:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;;;;:::i;:::-;17724:4;;-1:-1:-1;;;;;17724:4:0;17715:14;;;;:8;:14;;;;;17724:4;17715:22;:67;-1:-1:-1;17474:316:0:o;16601:387::-;16660:4;16690:28;16710:7;16690:19;:28::i;:::-;16687:51;;;-1:-1:-1;16730:5:0;;16601:387;-1:-1:-1;16601:387:0:o;16687:51::-;16897:20;;-1:-1:-1;;;;;;;;;;;16937:15:0;;;;;:42;;;16968:11;16956:8;:23;;16937:42;16929:51;16601:387;-1:-1:-1;;;;16601:387:0:o;1009:329::-;1086:7;;1124:5;1128:1;1124;:5;:::i;:::-;1111:18;-1:-1:-1;1148:6:0;;;:21;;-1:-1:-1;1168:1:0;1158:6;1163:1;1158:2;:6;:::i;:::-;:11;1148:21;1140:50;;;;-1:-1:-1;;;1140:50:0;;;;;;;:::i;:::-;1201:10;1214:15;:2;1220:8;1214:15;:::i;:::-;1201:28;;1254:2;1248;:8;;1240:37;;;;-1:-1:-1;;;1240:37:0;;;;;;;:::i;:::-;1288:10;1301:9;1306:4;1301:2;:9;:::i;:::-;1288:22;1009:329;-1:-1:-1;;;;;;1009:329:0:o;39648:184::-;39766:34;;-1:-1:-1;;;39766:34:0;;39754:9;;-1:-1:-1;;;;;39766:22:0;;;;;:34;;39789:2;;39793:6;;39766:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39754:46;;39819:4;39811:13;;;;;;39740:92;39648:184;;;:::o;1346:405::-;1423:7;1456:6;1448:31;;;;-1:-1:-1;;;1448:31:0;;16957:2:1;1448:31:0;;;16939:21:1;16996:2;16976:18;;;16969:30;-1:-1:-1;;;17015:18:1;;;17008:42;17067:18;;1448:31:0;16755:336:1;1448:31:0;1490:10;1503:8;:1;1507:4;1503:8;:::i;:::-;1490:21;-1:-1:-1;1530:6:0;;;:24;;-1:-1:-1;1540:6:0;1545:1;1540:2;:6;:::i;:::-;1550:4;1540:14;1530:24;1522:53;;;;-1:-1:-1;;;1522:53:0;;;;;;;:::i;:::-;1603:10;1622:5;1626:1;1622;:5;:::i;:::-;1616:12;;:2;:12;:::i;:::-;1603:25;;1653:2;1647;:8;;1639:37;;;;-1:-1:-1;;;1639:37:0;;;;;;;:::i;:::-;1704:10;1717:6;1722:1;1717:2;:6;:::i;11013:252::-;-1:-1:-1;;;;;11095:13:0;;:8;:13;;;;;;;;;;;:20;-1:-1:-1;11095:20:0;11087:29;;;;;;-1:-1:-1;;;;;11148:13:0;;:8;:13;;;;;;;;;;;11143:24;;11163:3;11143:4;:24::i;:::-;-1:-1:-1;;;;;11127:13:0;;;:8;:13;;;;;;;;;;;:40;;;;11199:13;;;;;;;11194:24;;11214:3;11194:4;:24::i;:::-;-1:-1:-1;;;;;11178:13:0;;;:8;:13;;;;;;;;;;;;:40;;;;11234:23;21195:25:1;;;11178:13:0;;11234:23;;;;-1:-1:-1;;;;;;;;;;;11234:23:0;21168:18:1;11234:23:0;;;;;;;11013:252;;;:::o;550:214::-;627:7;653:9;664;677:14;686:1;689;677:8;:14::i;:::-;652:39;;;;711:4;710:5;702:35;;;;-1:-1:-1;;;702:35:0;;19520:2:1;702:35:0;;;19502:21:1;19559:2;19539:18;;;19532:30;-1:-1:-1;;;19578:18:1;;;19571:47;19635:18;;702:35:0;19318:341:1;702:35:0;-1:-1:-1;755:1:0;550:214;-1:-1:-1;;;550:214:0:o;350:192::-;427:7;;464:5;468:1;464;:5;:::i;:::-;452:17;;493:1;488;:6;;480:35;;;;-1:-1:-1;;;480:35:0;;19866:2:1;480:35:0;;;19848:21:1;19905:2;19885:18;;;19878:30;-1:-1:-1;;;19924:18:1;;;19917:46;19980:18;;480:35:0;19664:340:1;480:35:0;533:1;350:192;-1:-1:-1;;;350:192:0:o;2093:567::-;2175:7;2216:5;2208:4;:13;;2200:47;;;;-1:-1:-1;;;2200:47:0;;18408:2:1;2200:47:0;;;18390:21:1;18447:2;18427:18;;;18420:30;-1:-1:-1;;;18466:18:1;;;18459:51;18527:18;;2200:47:0;18206:345:1;2200:47:0;2274:18;2266:4;:26;;2258:61;;;;-1:-1:-1;;;2258:61:0;;20900:2:1;2258:61:0;;;20882:21:1;20939:2;20919:18;;;20912:30;-1:-1:-1;;;20958:18:1;;;20951:52;21020:18;;2258:61:0;20698:346:1;2258:61:0;2332:13;2349:11;2356:3;2349:6;:11::i;:::-;2332:28;;2371:14;2388:16;2393:3;2398:5;2388:4;:16::i;:::-;2371:33;;2417:16;2436:24;2442:4;2448:11;2453:5;2448:4;:11::i;:::-;2436:5;:24::i;:::-;2417:43;-1:-1:-1;2477:11:0;2473:59;;2512:8;-1:-1:-1;2505:15:0;;-1:-1:-1;;2505:15:0;2473:59;2544:21;2568:37;2579:4;2585:6;2593:11;2568:10;:37::i;:::-;2544:61;;2623:29;2628:8;2638:13;2623:4;:29::i;:::-;2616:36;2093:567;-1:-1:-1;;;;;;;2093:567:0:o;39429:207::-;39549:55;;-1:-1:-1;;;39549:55:0;;-1:-1:-1;;;;;7060:15:1;;;39549:55:0;;;7042:34:1;39590:4:0;7092:18:1;;;7085:43;7144:18;;;7137:34;;;39537:9:0;;39549:26;;;;;;6977:18:1;;39549:55:0;6802:375:1;10786:219:0;10882:4;10865:8;:23;;;;;;;;;;;10860:34;;10890:3;10860:4;:34::i;:::-;10851:4;10834:8;:23;;;;;;;;;;:60;10924:11;;10919:22;;10937:3;10919:4;:22::i;:::-;10905:11;:36;10957:40;;21195:25:1;;;10986:4:0;;10974:1;;-1:-1:-1;;;;;;;;;;;10957:40:0;21183:2:1;21168:18;10957:40:0;;;;;;;10786:219;:::o;11273:97::-;11333:29;11347:4;11354:2;11358:3;11333:5;:29::i;:::-;11273:97;;:::o;8106:318::-;8166:4;8333:20;;-1:-1:-1;;;;;;;;;;;8373:23:0;;;;;;:42;;-1:-1:-1;;8400:15:0;;;8365:51;-1:-1:-1;;8106:318:0:o;7872:198::-;7983:12;;;7945;7983;;;;;;;;;-1:-1:-1;;;;;7962:7:0;;;7976:5;;7962:34;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7944:52;;;8015:7;8007:55;;;;-1:-1:-1;;;8007:55:0;;19116:2:1;8007:55:0;;;19098:21:1;19155:2;19135:18;;;19128:30;19194:34;19174:18;;;19167:62;-1:-1:-1;;;19245:18:1;;;19238:33;19288:19;;8007:55:0;18914:399:1;8007:55:0;7933:137;7872:198;;:::o;40095:172::-;40157:4;40141:13;;:20;40138:122;;;40190:4;;40196:8;;40206:13;;40174:46;;-1:-1:-1;;;;;40190:4:0;;;;40196:8;;40174:15;:46::i;:::-;40247:1;40231:13;:17;40138:122;40095:172::o;39844:239::-;39902:5;39886:13;;:21;39883:193;;;39925:4;;39940:13;;39920:34;;-1:-1:-1;;;39920:34:0;;-1:-1:-1;;;;;39925:4:0;;;;39920:19;;:34;;;;21195:25:1;;;21183:2;21168:18;;21049:177;39920:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;39970:4:0;;39991:13;;-1:-1:-1;;;;;39970:4:0;;;;-1:-1:-1;39965:14:0;;-1:-1:-1;39986:34:0;;40006:13;40011:2;40015:3;40006:4;:13::i;39986:34::-;40028:4;;39965:71;;;;;;-1:-1:-1;;;;;;39965:71:0;;;40022:4;39965:71;;;9243:25:1;-1:-1:-1;;;;;40028:4:0;;;9284:18:1;;;9277:60;40028:4:0;9353:18:1;;;9346:34;9216:18;;39965:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;40063:1:0;40047:13;:17;-1:-1:-1;;;39844:239:0:o;27593:178::-;27635:10;27648:25;27672:1;27648:21;:25;:::i;:::-;27635:38;;27684:46;27715:10;27727:2;27684:30;:46::i;:::-;27761:2;27741:16;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;27593:178:0:o;772:229::-;853:4;859;890:1;885;:6;881:113;;916:5;920:1;916;:5;:::i;:::-;923;908:21;;;;;;881:113;970:5;974:1;970;:5;:::i;:::-;977:4;962:20;;;;881:113;772:229;;;;;:::o;220:122::-;288:7;320;325:1;320:4;:7::i;:::-;:14;;330:4;320:14;:::i;98:114::-;164:7;196:8;200:4;196:1;:8;:::i;1759:326::-;1837:7;;1874:5;1878:1;1874;:5;:::i;:::-;:21;;1891:4;1874:21;;;1887:1;1874:21;1862:33;-1:-1:-1;1913:6:0;1918:1;1913:6;;:::i;:::-;;;1908:151;1921:6;;1908:151;;1956:10;1961:1;1964;1956:4;:10::i;:::-;1952:14;-1:-1:-1;1987:5:0;1991:1;1987;:5;:::i;:::-;:10;1983:65;;2022:10;2027:1;2030;2022:4;:10::i;:::-;2018:14;;1983:65;1929:6;1934:1;1929:6;;:::i;:::-;;;1908:151;;2668:864;2775:7;2816:3;2775:7;;2856:20;2865:4;2871;2856:8;:20::i;:::-;2830:46;;-1:-1:-1;2830:46:0;-1:-1:-1;2902:4:0;;2887:12;3001:1;2984:518;3012:9;3004:4;:17;2984:518;;3043:12;3058:8;:1;3062:4;3058:8;:::i;:::-;3043:23;;3082:9;3093;3106:29;3115:1;3118:16;3123:4;3129;3118;:16::i;:::-;3106:8;:29::i;:::-;3081:54;;;;3157:22;3162:4;3168:10;3173:1;3176;3168:4;:10::i;3157:22::-;3150:29;;3201:16;3206:4;3212;3201;:16::i;:::-;3194:23;-1:-1:-1;3236:9:0;3232:20;;3247:5;;;;;3232:20;3273:4;3269:30;;;3290:9;;;3269:30;3318:4;3314:30;;;3335:9;;;3314:30;3363:8;3359:132;;;3398:15;3403:3;3408:4;3398;:15::i;:::-;3392:21;;3359:132;;;3460:15;3465:3;3470:4;3460;:15::i;:::-;3454:21;;3359:132;3028:474;;;3023:3;;;;;:::i;:::-;;;;2984:518;;;-1:-1:-1;3521:3:0;;2668:864;-1:-1:-1;;;;;;;;;2668:864:0:o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;383:260::-;451:6;459;512:2;500:9;491:7;487:23;483:32;480:52;;;528:1;525;518:12;480:52;551:29;570:9;551:29;:::i;:::-;541:39;;599:38;633:2;622:9;618:18;599:38;:::i;:::-;589:48;;383:260;;;;;:::o;648:334::-;725:6;733;741;794:2;782:9;773:7;769:23;765:32;762:52;;;810:1;807;800:12;762:52;833:29;852:9;833:29;:::i;:::-;823:39;;881:38;915:2;904:9;900:18;881:38;:::i;:::-;871:48;;938:38;972:2;961:9;957:18;938:38;:::i;:::-;928:48;;648:334;;;;;:::o;987:478::-;1082:6;1090;1098;1106;1114;1167:3;1155:9;1146:7;1142:23;1138:33;1135:53;;;1184:1;1181;1174:12;1135:53;1207:29;1226:9;1207:29;:::i;:::-;1197:39;;1255:38;1289:2;1278:9;1274:18;1255:38;:::i;:::-;1245:48;;1312:38;1346:2;1335:9;1331:18;1312:38;:::i;:::-;1302:48;;1369:38;1403:2;1392:9;1388:18;1369:38;:::i;:::-;987:478;;;;-1:-1:-1;987:478:1;;1454:3;1439:19;1426:33;;987:478;-1:-1:-1;;987:478:1:o;1470:403::-;1556:6;1564;1572;1580;1633:3;1621:9;1612:7;1608:23;1604:33;1601:53;;;1650:1;1647;1640:12;1601:53;1673:29;1692:9;1673:29;:::i;:::-;1663:39;;1721:38;1755:2;1744:9;1740:18;1721:38;:::i;:::-;1711:48;;1778:38;1812:2;1801:9;1797:18;1778:38;:::i;:::-;1470:403;;;;-1:-1:-1;1768:48:1;;1863:2;1848:18;1835:32;;-1:-1:-1;;1470:403:1:o;1878:328::-;1955:6;1963;1971;2024:2;2012:9;2003:7;1999:23;1995:32;1992:52;;;2040:1;2037;2030:12;1992:52;2063:29;2082:9;2063:29;:::i;:::-;2053:39;;2111:38;2145:2;2134:9;2130:18;2111:38;:::i;:::-;2101:48;;2196:2;2185:9;2181:18;2168:32;2158:42;;1878:328;;;;;:::o;2211:315::-;2276:6;2284;2337:2;2325:9;2316:7;2312:23;2308:32;2305:52;;;2353:1;2350;2343:12;2305:52;2376:29;2395:9;2376:29;:::i;:::-;2366:39;;2455:2;2444:9;2440:18;2427:32;2468:28;2490:5;2468:28;:::i;:::-;2515:5;2505:15;;;2211:315;;;;;:::o;2531:254::-;2599:6;2607;2660:2;2648:9;2639:7;2635:23;2631:32;2628:52;;;2676:1;2673;2666:12;2628:52;2699:29;2718:9;2699:29;:::i;:::-;2689:39;2775:2;2760:18;;;;2747:32;;-1:-1:-1;;;2531:254:1:o;2790:245::-;2857:6;2910:2;2898:9;2889:7;2885:23;2881:32;2878:52;;;2926:1;2923;2916:12;2878:52;2958:9;2952:16;2977:28;2999:5;2977:28;:::i;3040:180::-;3099:6;3152:2;3140:9;3131:7;3127:23;3123:32;3120:52;;;3168:1;3165;3158:12;3120:52;-1:-1:-1;3191:23:1;;3040:180;-1:-1:-1;3040:180:1:o;3225:184::-;3295:6;3348:2;3336:9;3327:7;3323:23;3319:32;3316:52;;;3364:1;3361;3354:12;3316:52;-1:-1:-1;3387:16:1;;3225:184;-1:-1:-1;3225:184:1:o;3414:322::-;3491:6;3499;3507;3560:2;3548:9;3539:7;3535:23;3531:32;3528:52;;;3576:1;3573;3566:12;3528:52;3612:9;3599:23;3589:33;;3641:38;3675:2;3664:9;3660:18;3641:38;:::i;3741:391::-;3827:6;3835;3843;3851;3904:3;3892:9;3883:7;3879:23;3875:33;3872:53;;;3921:1;3918;3911:12;3872:53;3957:9;3944:23;3934:33;;3986:38;4020:2;4009:9;4005:18;3986:38;:::i;:::-;3741:391;;3976:48;;-1:-1:-1;;;;4071:2:1;4056:18;;4043:32;;4122:2;4107:18;4094:32;;3741:391::o;4137:683::-;4232:6;4240;4248;4301:2;4289:9;4280:7;4276:23;4272:32;4269:52;;;4317:1;4314;4307:12;4269:52;4340:23;;;-1:-1:-1;4414:2:1;4399:18;;4386:32;-1:-1:-1;;;;;4467:14:1;;;4464:34;;;4494:1;4491;4484:12;4464:34;4532:6;4521:9;4517:22;4507:32;;4577:7;4570:4;4566:2;4562:13;4558:27;4548:55;;4599:1;4596;4589:12;4548:55;4639:2;4626:16;4665:2;4657:6;4654:14;4651:34;;;4681:1;4678;4671:12;4651:34;4734:7;4729:2;4719:6;4716:1;4712:14;4708:2;4704:23;4700:32;4697:45;4694:65;;;4755:1;4752;4745:12;4694:65;4786:2;4782;4778:11;4768:21;;4808:6;4798:16;;;;;4137:683;;;;;:::o;4825:248::-;4893:6;4901;4954:2;4942:9;4933:7;4929:23;4925:32;4922:52;;;4970:1;4967;4960:12;4922:52;-1:-1:-1;;4993:23:1;;;5063:2;5048:18;;;5035:32;;-1:-1:-1;4825:248:1:o;5078:245::-;5157:6;5165;5218:2;5206:9;5197:7;5193:23;5189:32;5186:52;;;5234:1;5231;5224:12;5186:52;-1:-1:-1;;5257:16:1;;5313:2;5298:18;;;5292:25;5257:16;;5292:25;;-1:-1:-1;5078:245:1:o;5328:454::-;5423:6;5431;5439;5447;5455;5508:3;5496:9;5487:7;5483:23;5479:33;5476:53;;;5525:1;5522;5515:12;5476:53;-1:-1:-1;;5548:23:1;;;5618:2;5603:18;;5590:32;;-1:-1:-1;5669:2:1;5654:18;;5641:32;;5720:2;5705:18;;5692:32;;-1:-1:-1;5771:3:1;5756:19;5743:33;;-1:-1:-1;5328:454:1;-1:-1:-1;5328:454:1:o;5787:523::-;5891:6;5899;5907;5915;5923;5931;5984:3;5972:9;5963:7;5959:23;5955:33;5952:53;;;6001:1;5998;5991:12;5952:53;-1:-1:-1;;6024:23:1;;;6094:2;6079:18;;6066:32;;-1:-1:-1;6145:2:1;6130:18;;6117:32;;6196:2;6181:18;;6168:32;;-1:-1:-1;6247:3:1;6232:19;;6219:33;;-1:-1:-1;6299:3:1;6284:19;6271:33;;-1:-1:-1;5787:523:1;-1:-1:-1;5787:523:1:o;6315:274::-;6444:3;6482:6;6476:13;6498:53;6544:6;6539:3;6532:4;6524:6;6520:17;6498:53;:::i;:::-;6567:16;;;;;6315:274;-1:-1:-1;;6315:274:1:o;6594:203::-;-1:-1:-1;;;;;6758:32:1;;;;6740:51;;6728:2;6713:18;;6594:203::o;7182:332::-;-1:-1:-1;;;;;7432:32:1;;;;7414:51;;7496:2;7481:18;;7474:34;7402:2;7387:18;;7182:332::o;9391:383::-;9540:2;9529:9;9522:21;9503:4;9572:6;9566:13;9615:6;9610:2;9599:9;9595:18;9588:34;9631:66;9690:6;9685:2;9674:9;9670:18;9665:2;9657:6;9653:15;9631:66;:::i;:::-;9758:2;9737:15;-1:-1:-1;;9733:29:1;9718:45;;;;9765:2;9714:54;;9391:383;-1:-1:-1;;9391:383:1:o;9779:334::-;9981:2;9963:21;;;10020:2;10000:18;;;9993:30;-1:-1:-1;;;10054:2:1;10039:18;;10032:40;10104:2;10089:18;;9779:334::o;10118:350::-;10320:2;10302:21;;;10359:2;10339:18;;;10332:30;-1:-1:-1;;;10393:2:1;10378:18;;10371:56;10459:2;10444:18;;10118:350::o;10810:340::-;11012:2;10994:21;;;11051:2;11031:18;;;11024:30;-1:-1:-1;;;11085:2:1;11070:18;;11063:46;11141:2;11126:18;;10810:340::o;12331:::-;12533:2;12515:21;;;12572:2;12552:18;;;12545:30;-1:-1:-1;;;12606:2:1;12591:18;;12584:46;12662:2;12647:18;;12331:340::o;12676:::-;12878:2;12860:21;;;12917:2;12897:18;;;12890:30;-1:-1:-1;;;12951:2:1;12936:18;;12929:46;13007:2;12992:18;;12676:340::o;13021:::-;13223:2;13205:21;;;13262:2;13242:18;;;13235:30;-1:-1:-1;;;13296:2:1;13281:18;;13274:46;13352:2;13337:18;;13021:340::o;13366:475::-;13568:2;13550:21;;;13607:2;13587:18;;;13580:30;-1:-1:-1;;;;;;;;;;;13641:2:1;13626:18;;13619:62;13717:34;13712:2;13697:18;;13690:62;-1:-1:-1;;;13783:3:1;13768:19;;13761:38;13831:3;13816:19;;13366:475::o;14265:339::-;14467:2;14449:21;;;14506:2;14486:18;;;14479:30;-1:-1:-1;;;14540:2:1;14525:18;;14518:45;14595:2;14580:18;;14265:339::o;15362:350::-;15564:2;15546:21;;;15603:2;15583:18;;;15576:30;-1:-1:-1;;;15637:2:1;15622:18;;15615:56;15703:2;15688:18;;15362:350::o;16066:339::-;16268:2;16250:21;;;16307:2;16287:18;;;16280:30;-1:-1:-1;;;16341:2:1;16326:18;;16319:45;16396:2;16381:18;;16066:339::o;16410:340::-;16612:2;16594:21;;;16651:2;16631:18;;;16624:30;-1:-1:-1;;;16685:2:1;16670:18;;16663:46;16741:2;16726:18;;16410:340::o;17096:338::-;17298:2;17280:21;;;17337:2;17317:18;;;17310:30;-1:-1:-1;;;17371:2:1;17356:18;;17349:44;17425:2;17410:18;;17096:338::o;17439:342::-;17641:2;17623:21;;;17680:2;17660:18;;;17653:30;-1:-1:-1;;;17714:2:1;17699:18;;17692:48;17772:2;17757:18;;17439:342::o;17786:415::-;17988:2;17970:21;;;18027:2;18007:18;;;18000:30;18066:34;18061:2;18046:18;;18039:62;-1:-1:-1;;;18132:2:1;18117:18;;18110:49;18191:3;18176:19;;17786:415::o;20009:337::-;20211:2;20193:21;;;20250:2;20230:18;;;20223:30;-1:-1:-1;;;20284:2:1;20269:18;;20262:43;20337:2;20322:18;;20009:337::o;21231:256::-;21413:25;;;21469:2;21454:18;;21447:34;21401:2;21386:18;;21231:256::o;21934:128::-;21974:3;22005:1;22001:6;21998:1;21995:13;21992:39;;;22011:18;;:::i;:::-;-1:-1:-1;22047:9:1;;21934:128::o;22067:120::-;22107:1;22133;22123:35;;22138:18;;:::i;:::-;-1:-1:-1;22172:9:1;;22067:120::o;22192:168::-;22232:7;22298:1;22294;22290:6;22286:14;22283:1;22280:21;22275:1;22268:9;22261:17;22257:45;22254:71;;;22305:18;;:::i;:::-;-1:-1:-1;22345:9:1;;22192:168::o;22365:125::-;22405:4;22433:1;22430;22427:8;22424:34;;;22438:18;;:::i;:::-;-1:-1:-1;22475:9:1;;22365:125::o;22495:258::-;22567:1;22577:113;22591:6;22588:1;22585:13;22577:113;;;22667:11;;;22661:18;22648:11;;;22641:39;22613:2;22606:10;22577:113;;;22708:6;22705:1;22702:13;22699:48;;;-1:-1:-1;;22743:1:1;22725:16;;22718:27;22495:258::o;22758:380::-;22837:1;22833:12;;;;22880;;;22901:61;;22955:4;22947:6;22943:17;22933:27;;22901:61;23008:2;23000:6;22997:14;22977:18;22974:38;22971:161;;;23054:10;23049:3;23045:20;23042:1;23035:31;23089:4;23086:1;23079:15;23117:4;23114:1;23107:15;22971:161;;22758:380;;;:::o;23143:135::-;23182:3;-1:-1:-1;;23203:17:1;;23200:43;;;23223:18;;:::i;:::-;-1:-1:-1;23270:1:1;23259:13;;23143:135::o;23283:112::-;23315:1;23341;23331:35;;23346:18;;:::i;:::-;-1:-1:-1;23380:9:1;;23283:112::o;23400:127::-;23461:10;23456:3;23452:20;23449:1;23442:31;23492:4;23489:1;23482:15;23516:4;23513:1;23506:15;23532:127;23593:10;23588:3;23584:20;23581:1;23574:31;23624:4;23621:1;23614:15;23648:4;23645:1;23638:15;23664:127;23725:10;23720:3;23716:20;23713:1;23706:31;23756:4;23753:1;23746:15;23780:4;23777:1;23770:15;23928:118;24014:5;24007:13;24000:21;23993:5;23990:32;23980:60;;24036:1;24033;24026:12;23980:60;23928:118;:::o

Swarm Source

ipfs://6e975ff83a4186e01467ea640ea3732de6c1a56f22974857b5b47eb9274d0e34

Block Transaction Difficulty 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
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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.