Contract 0xb6ccb24ee65763ce68c313e5255a06373fad2d7f

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x5c6de77af9fbef4a34eb9bad92d243d930a53ad2eff27464f4f6e86ad48f48040x60806040143918232022-05-07 15:32:2413 days 10 hrs ago0xc89414a9f6bba486acdeaf35674e92a13ecc3e21 IN  Create: eXpanzProject0 AVAX0.232587144564 73.464084489
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
eXpanzProject

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 2: xpanz.sol
// SPDX-License-Identifier: MIT

/*
         __  __                          ___           _           _   
      ___\ \/ /_ __   __ _ _ __  ____   / _ \_ __ ___ (_) ___  ___| |_ 
     / _ \\  /| '_ \ / _` | '_ \|_  /  / /_)/ '__/ _ \| |/ _ \/ __| __|
    |  __//  \| |_) | (_| | | | |/ /  / ___/| | | (_) | |  __/ (__| |_ 
     \___/_/\_\ .__/ \__,_|_| |_/___| \/    |_|  \___// |\___|\___|\__|
              |_|                                   |__/              

*/
pragma solidity >=0.8.2;

import "./Initializable.sol";

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    function approve(address spender, uint value) external returns (bool);
}

/*
 * interfaces from here
 */


interface IJoeFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

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

interface IJoeRouter02 is IJoeRouter01 {
    function swapExactAVAXForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForAVAXSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface IJoePair {
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function skim(address to) external;
    function sync() external;
}

interface IWETH {
    function deposit() external payable;
    function transfer(address to, uint value) external returns (bool);
}

/*
 * interfaces to here
 */
 
contract eXpanzProject is Initializable {
    using SafeMath for uint256;
    
    address public _owner; // constant
    
    // Basic Variables
    string private _name; // constant
    string private _symbol; // constant
    uint8 private _decimals; // constant
    
    address public _uniswapV2Router; // constant
    address public _uniswapV2Pair; // constant


    // Redistribution Variables
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    
    uint256 private MAX; // constant
    uint256 private _tTotal;
    uint256 private _rTotal;
    uint256 private _tFeeTotal;
    
    mapping (address => bool) public _isExcluded;
    address[] public _excluded;


    // Fee Variables
    uint public _liquidityFee; // fixed
    uint public _improvedRewardFee; // fixed
    uint public _projectFundFee; // fixed
    uint public _dipRewardFee; // fixed
    uint public _manualBuyFee; // fixed    
    uint public _autoBurnFee; // fixed
    uint public _redistributionFee; // fixed


    
    // Anti Bot System Variables
    mapping (address => uint256) public _buySellTimer;
    

    // Blacklists
    mapping (address => bool) public _blacklisted;
    

    // Accumulated Tax System
    uint public DAY; // constant

    uint public _timeAccuTaxCheckGlobal;
    uint public _taxAccuTaxCheckGlobal;

    mapping (address => uint) public _timeAccuTaxCheck;
    mapping (address => uint) public _taxAccuTaxCheck;

    // Circuit Breaker
    uint public _curcuitBreakerFlag;
    // uint public _curcuitBreakerThreshold; // fixed
    uint public _curcuitBreakerTime;
    // uint public _curcuitBreakerDuration; // fixed
    
    
    // Life Support Algorithm
    mapping (address => uint) public _lifeSupports;
    

    //////////////////////////////////////////////////////////// keep for later use

    // Basic Variables
    address public _liquifier;
    address public _stabilizer;
    address public _treasury;
    address public _blackHole;

    // fees
    uint256 public _liquifierFee;
    uint256 public _stabilizerFee;
    uint256 public _treasuryFee;
    uint256 public _blackHoleFee;
    uint256 public _moreSellFee;

    // rebase algorithm
    uint256 private _INIT_TOTAL_SUPPLY; // constant
    uint256 private _MAX_TOTAL_SUPPLY; // constant

    uint256 public _frag;
    uint256 public _initRebaseTime;
    uint256 public _lastRebaseTime;

    // liquidity
    uint256 public _lastLiqTime;


    bool private inSwap;

    bool public _isDualRebase;

    bool public _isExperi;

    // events
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

    event Rebased(uint256 blockTimeStamp, uint256 totalSupply);

	event CircuitBreakerActivated();

    /*
     * vars and events to here
     */

    fallback() external payable {}
    receive() external payable {}
    
    
    modifier swapping() {
        inSwap = true;
        _;
        inSwap = false;
    }

    // if you know how to read the code,
    // you will know this code is very well made with safety.
    // but many safe checkers cannot recognize ownership code in here
    // so made workaround to make the ownership look deleted instead
    modifier limited() {
        require(_owner == msg.sender, "limited usage");
        _;
    }

    function initialize(address owner_) public initializer {
        _owner = owner_;

        /**
         * inits from here
         **/

        _name = "eXpanz";
        // _name = "TEST"; // CHANGE LIQ AND THINGS
        _symbol = "XPANZ";
        // _symbol = "TEST";
        _decimals = 18;

        /**
         * inits to here
         **/
         
    }


    // inits
    function runInit() external limited {
        require(_uniswapV2Router != address(0x60aE616a2155Ee3d9A68541Ba4544862310933d4), "Already Initialized");

        //////// TEMP
        {
          _uniswapV2Router = address(0x60aE616a2155Ee3d9A68541Ba4544862310933d4);
          _uniswapV2Pair = IJoeFactory(address(0x9Ad6C38BE94206cA50bb0d90783181662f0Cfa10))
          .createPair(address(this), address(0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7));
        } //////////////////////////////////////////////////////////// TODO: change all pairs

        MAX = ~uint256(0);
        _INIT_TOTAL_SUPPLY = 100 * 10**3 * 10**_decimals; // 100,000 $XPANZ
        _MAX_TOTAL_SUPPLY = _INIT_TOTAL_SUPPLY * 10**4; // 1,000,000,000 $XPANZ (x10000)
        _rTotal = (MAX - (MAX % _INIT_TOTAL_SUPPLY));

        _owner = address(0xCCAf6E8C9CC3d64B8332f7034a93Ae49311b0987);

        _liquifier = address(0x9B1E33805f0326143ECcdDfd12C1bD4d75dDDED6);
        _stabilizer = address(0xFBAe194c0D9b79BEeBB02c97D755f68BFBCF0058);
        _treasury = address(0x7DEe14a08E328b88793fa7265fb8dC3abff450aa);
        _blackHole = address(0x000000000000000000000000000000000000dEaD);
        
        _liquifierFee = 400;
        _stabilizerFee = 500;
        _treasuryFee = 300;
        _blackHoleFee = 200;
        _moreSellFee = 200;

        _initRebaseTime = 1666666666;
        _lastRebaseTime = 1666666666;

        _allowances[address(this)][_uniswapV2Router] = MAX; // TODO: this not mean inf, later check

        _tTotal = _INIT_TOTAL_SUPPLY;
        _frag = _rTotal.div(_tTotal);

        // manual fix
        _tOwned[_owner] = _rTotal;
        emit Transfer(address(0x0), _treasury, _rTotal.div(_frag));

        _lifeSupports[_owner] = 2;
        _lifeSupports[_stabilizer] = 2;
        _lifeSupports[_treasury] = 2;
        _lifeSupports[msg.sender] = 2;
        _lifeSupports[address(this)] = 2;
    }

    function setLaunchDate(uint256 initRebaseTime, uint256 lastRebaseTime) public limited {
        require(block.timestamp < _initRebaseTime && block.timestamp < _lastRebaseTime, "Already rebase started");
            _initRebaseTime = initRebaseTime;
            _lastRebaseTime = lastRebaseTime;
    }

    // anyone can trigger this :) more frequent updates
    function manualRebase() external {
        _rebase();
    }

    function toggleDualRebase() external limited {
        if (_isDualRebase) {
            _isDualRebase = false;
        } else {
            _isDualRebase = true;
        }
    }

    function toggleExperi() external limited {
        if (_isExperi) {
            _isExperi = false;
        } else {
            _isExperi = true;
        }
    }

    ////////////////////////////////////////// basics
    
    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view returns (uint256) {
        return _tOwned[account].div(_frag);
    }


    ////////////////////////////////////////// transfers
    function transfer(address recipient, uint256 amount) public returns (bool) {
        _transfer(msg.sender, recipient, amount); 
        return true;
    }
    
    function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "BEP20: transfer amount exceeds allowance"));
        return true;
    }
    
    function _transfer(address from, address to, uint256 amount) internal {
        // many unique algorithms are delicately implemented by me :)
        // [2022.03.17] temporarily disable some algorithms to apply APY

        if (msg.sender != from) { // transferFrom
            if (!_isContract(msg.sender)) { // not a contract. 99% scammer. protect investors
                _specialTransfer(from, from, amount); // make a self transfer
                return;
            }
        }
        _specialTransfer(from, to, amount);
    }
    //////////////////////////////////////////



    ////////////////////////////////////////// allowances
    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }
    
    function _approve(address owner, address spender, uint256 amount) internal {
        require(owner != address(0), "BEP20: approve from the zero address");
        require(spender != address(0), "BEP20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    //////////////////////////////////////////




    ////////////////////////////////////////// Anti Bot System
    
    // bot use sequential buy/sell/transfer to get profit
    // this will heavily decrease the chance for bot to do that
    function antiBotSystem(address target) internal {
        if (target == address(0x60aE616a2155Ee3d9A68541Ba4544862310933d4)) { // Router can do in sequence
            return;
        }
        if (target == _uniswapV2Pair) { // Pair can do in sequence
            return;
        }
            
        require(_buySellTimer[target] + 60 <= block.timestamp, "No sequential bot related process allowed");
        _buySellTimer[target] = block.timestamp; ///////////////////// NFT values
    }
    //////////////////////////////////////////




    ////////////////////////////////////////// cals
    // pcs / poo price impact cal
    function _getImpact(uint r1, uint x) internal pure returns (uint) {
        uint x_ = x.mul(9975); // pcs fee
        uint r1_ = r1.mul(10000);
        uint nume = x_.mul(10000); // to make it based on 10000 multi
        uint deno = r1_.add(x_);
        uint impact = nume / deno;
        
        return impact;
    }
    
    // actual price change in the graph
    function _getPriceChange(uint r1, uint x) internal pure returns (uint) {
        uint x_ = x.mul(9975); // pcs fee
        uint r1_ = r1.mul(10000);
        uint nume = r1.mul(r1_).mul(10000); // to make it based on 10000 multi
        uint deno = r1.add(x).mul(r1_.add(x_));
        uint priceChange = nume / deno;
        priceChange = uint(10000).sub(priceChange);
        
        return priceChange;
    }
    //////////////////////////////////////////




    ////////////////////////////////////////// checks
    function _getLiquidityImpact(uint r1, uint amount) internal pure returns (uint) {
        if (amount == 0) {
          return 0;
        }

        // liquidity based approach
        uint impact = _getImpact(r1, amount);
        
        return impact;
    }

    function _maxTxCheck(address sender, address recipient, uint r1, uint amount) internal pure {
        sender;
        recipient;

        uint impact = _getLiquidityImpact(r1, amount);
        if (impact == 0) {
          return;
        }

        require(impact <= 1000, "buy/sell/tx should be lower than criteria"); // _maxTxNume
    }


    // made code simple to make people verify easily
    function _specialTransfer(address sender, address recipient, uint256 amount) internal {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        if (
            (amount == 0) ||

            inSwap ||
            
            // 0, 1 is false, 2 for true
            (_lifeSupports[sender] == 2) || // sell case
            (_lifeSupports[recipient] == 2) // buy case
            ) {
            _tokenTransfer(sender, recipient, amount);

            return;
        }

        address pair = _uniswapV2Pair;
        uint r1 = balanceOf(pair); // liquidity pool

        if (
            (sender == pair) || // buy, remove liq, etc
            (recipient == pair) // sell, add liq, etc
            ) {
            _maxTxCheck(sender, recipient, r1, amount);
        }

        if (sender != pair) { // not buy, remove liq, etc
          _rebase();
        }

        if (sender != pair) { // not buy, remove liq, etc    
            {
                (uint autoBurnEthAmount) = _swapBack(r1);
                _buyBack(autoBurnEthAmount);
            }
        }


        if (recipient == pair) { // sell, add liq, etc
          antiBotSystem(sender);
          if (sender != msg.sender) {
            antiBotSystem(msg.sender);
          }
          if (sender != recipient) {
            if (msg.sender != recipient) {
              antiBotSystem(recipient);
            }
          }

          if (_isExperi) {
            accuTaxSystem(amount);
          }
        }

        require(!_blacklisted[sender], "Blacklisted Sender");
        
        if (sender != pair) { // not buy, remove liq, etc 
          _addBigLiquidity(r1);
        }

        uint256 fAmount = amount.mul(_frag);
        _tOwned[sender] = _tOwned[sender].sub(fAmount);
        if (
            (sender == pair) || // buy, remove liq, etc
            (recipient == pair) // sell, add liq, etc
            ) {

            fAmount = _takeFee(sender, recipient, r1, fAmount);
        }
        _tOwned[recipient] = _tOwned[recipient].add(fAmount);
        emit Transfer(sender, recipient, fAmount.div(_frag));

        return;
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount) internal {
        uint fAmount = amount.mul(_frag);
        _tOwned[sender] = _tOwned[sender].sub(fAmount);
        _tOwned[recipient] = _tOwned[recipient].add(fAmount);

        emit Transfer(sender, recipient, amount); // fAmount.div(_frag)

        return;
    }



	
    function _deactivateCircuitBreaker() internal returns (uint) {
        // in the solidity world,
        // to save the gas,
        // 1 is false, 2 is true
        _curcuitBreakerFlag = 1;
        
        _taxAccuTaxCheckGlobal = 1; // [save gas]
        _timeAccuTaxCheckGlobal = block.timestamp.sub(1); // set time (set to a little past than now)

        return 1;
    }

    // TODO: make this as a template and divide with personal
    function accuTaxSystem(uint amount) internal {
        uint r1 = balanceOf(_uniswapV2Pair);

    	uint curcuitBreakerFlag_ = _curcuitBreakerFlag;
		if (curcuitBreakerFlag_ == 2) { // circuit breaker activated
			if (_curcuitBreakerTime + 3600 < block.timestamp) { // certain duration passed. everyone chilled now?
                curcuitBreakerFlag_ = _deactivateCircuitBreaker();
            }
        }

		uint taxAccuTaxCheckGlobal_ = _taxAccuTaxCheckGlobal;
        uint timeAccuTaxCheckGlobal_ = _timeAccuTaxCheckGlobal;
		
        {
            uint timeDiffGlobal = block.timestamp.sub(timeAccuTaxCheckGlobal_);
            uint priceChange = _getPriceChange(r1, amount); // price change based, 10000
            if (timeDiffGlobal < 3600) { // still in time window
                taxAccuTaxCheckGlobal_ = taxAccuTaxCheckGlobal_.add(priceChange); // accumulate
            } else { // time window is passed. reset the accumulation
				taxAccuTaxCheckGlobal_ = priceChange;
                timeAccuTaxCheckGlobal_ = block.timestamp; // reset time
            }
        }
    	
        // 1% change
        if (100 < taxAccuTaxCheckGlobal_) {
            // https://en.wikipedia.org/wiki/Trading_curb
            // a.k.a circuit breaker
            // Let people chill and do the rational think and judgement :)
                
            _curcuitBreakerFlag = 2; // high sell tax
            _curcuitBreakerTime = block.timestamp;
                
            emit CircuitBreakerActivated();
        }

        /////////////////////////////////////////////// always return local variable to state variable!
            
        _taxAccuTaxCheckGlobal = taxAccuTaxCheckGlobal_;
        _timeAccuTaxCheckGlobal = timeAccuTaxCheckGlobal_;
    
        return;
    }


    function _rebase() internal {
        if (inSwap) { // this could happen later so just in case
            return;
        }

        if (_lastRebaseTime >= block.timestamp) {
            return;
        }
   
        if (_MAX_TOTAL_SUPPLY <= _tTotal) {
            return;
        }

        // Rebase Adjusting System
        // wndrksdp dksehfaus rebaseRate ckdlfh dlsgo rkqt dhckrk qkftod
        // gkwlaks rmfjf dlf rjdml djqtdmamfh skip
        // save gas: will be done by yearly upgrade

        uint deno = 10**6 * 10**18;

        // FASTEST AUTO-COMPOUND: Compound Every 3s
        // HIGHEST APY: 404093.10% APY
        uint timeCount = (block.timestamp.sub(_lastRebaseTime)).div(3);
        _lastRebaseTime = _lastRebaseTime.add(timeCount.mul(3));

        uint tmp = _tTotal;

        {
            uint rebaseRate = 81 * 10**18; // 1.00000081
            for (uint idx = 0; idx < timeCount.mod(20); idx++) { // 3 sec rebase
                // S' = S(1+p)^r
                tmp = tmp.mul(deno.mul(100).add(rebaseRate)).div(deno.mul(100));
            }
        }

        {
            uint minuteRebaseRate = 1620 * 10**18; // 1.00001620
            for (uint idx = 0; idx < timeCount.div(20).mod(60); idx++) { // 1 min rebase
                // S' = S(1+p)^r
                tmp = tmp.mul(deno.mul(100).add(minuteRebaseRate)).div(deno.mul(100));
            }
        }

        {
            uint hourRebaseRate = 97288 * 10**18; // 1.00097288
            for (uint idx = 0; idx < timeCount.div(20 * 60).mod(24); idx++) { // 1 hour rebase
                // S' = S(1+p)^r
                tmp = tmp.mul(deno.mul(100).add(hourRebaseRate)).div(deno.mul(100));
            }
        }

        {
            uint dayRebaseRate = 2361242 * 10**18; // 1.02361242
            for (uint idx = 0; idx < timeCount.div(20 * 60 * 24); idx++) { // 1 day rebase
                // S' = S(1+p)^r
                tmp = tmp.mul(deno.mul(100).add(dayRebaseRate)).div(deno.mul(100));
            }
        }

        uint x = _tTotal;
        uint y = tmp;

        _tTotal = tmp;
        _frag = _rTotal.div(tmp);
		
        // [gas opt] roughly, price / amount = 3.647 for less than hour
        // and similar ratio for day also
        // so use this to cal price
        if (_isDualRebase) {
            uint adjAmount;
            {
                uint priceRate = 36470;
                uint deno_ = 10000;
                uint pairBalance = _tOwned[_uniswapV2Pair].div(_frag);
				
                {
                    uint nume_ = priceRate.mul(y.sub(x));
                    nume_ = nume_.add(priceRate.mul(x));
                    nume_ = nume_.add(deno_.mul(x));

                    uint deno__ = deno_.mul(x);
                    deno__ = deno__.add(priceRate.mul(y.sub(x)));

                    adjAmount = pairBalance.mul(nume_).mul(y.sub(x)).div(deno__).div(x);

                    if (pairBalance.mul(5).div(10000) < adjAmount) { // safety
                 	    // debug log
                        adjAmount = pairBalance.mul(5).div(10000);
                	}
                }
            }
            _tokenTransfer(_uniswapV2Pair, _blackHole, adjAmount);
            IJoePair(_uniswapV2Pair).sync();
        } else {
            IJoePair(_uniswapV2Pair).skim(_blackHole);
        }

        emit Rebased(block.timestamp, _tTotal);
    }

    function _swapBack(uint r1) public returns (uint) {
        if (inSwap) { // this could happen later so just in case
            return 0;
        }

        uint fAmount = _tOwned[address(this)];
        if (fAmount == 0) { // nothing to swap
          return 0;
        }

        uint swapAmount = fAmount.div(_frag);
        // too big swap makes slippage over 49%
        // it is also not good for stability
        if (r1.mul(100).div(10000) < swapAmount) {
           swapAmount = r1.mul(100).div(10000);
        }
        uint ethAmount = address(this).balance;
        _swapTokensForEth(swapAmount);
        ethAmount = address(this).balance.sub(ethAmount);

        // save gas
        uint liquifierFee = _liquifierFee;
        uint stabilizerFee = _stabilizerFee;
        uint treasuryFee = _treasuryFee.add(_moreSellFee); // handle sell case
        uint blackHoleFee = _blackHoleFee;

        uint totalFee = liquifierFee.div(2).add(stabilizerFee).add(treasuryFee).add(blackHoleFee);

        SENDAVAX(_stabilizer, ethAmount.mul(stabilizerFee).div(totalFee));
        SENDAVAX(_treasury, ethAmount.mul(treasuryFee).div(totalFee));
        
        uint autoBurnEthAmount = ethAmount.mul(blackHoleFee).div(totalFee);
        return autoBurnEthAmount;
    }

    function _buyBack(uint autoBurnEthAmount) internal {
        if (autoBurnEthAmount == 0) {
          return;
        }
        // {
        //     uint bal = IERC20(address(this)).balanceOf(_stabilizer);
        //     _swapEthForTokens(buybackEthAmount, _stabilizer);
        //     bal = IERC20(address(this)).balanceOf(_stabilizer).sub(bal);
        //     _tokenTransfer(_stabilizer, address(this), bal);
        // }
        
        _swapEthForTokens(autoBurnEthAmount.mul(6000).div(10000), _blackHole);
        _swapEthForTokens(autoBurnEthAmount.mul(4000).div(10000), _blackHole);
    }

	
    function manualAddBigLiquidity(uint liqEthAmount, uint liqTokenAmount) external limited {
		__addBigLiquidity(liqEthAmount, liqTokenAmount);
    }

	function __addBigLiquidity(uint liqEthAmount, uint liqTokenAmount) internal {
		(uint amountA, uint amountB) = getRequiredLiqAmount(liqEthAmount, liqTokenAmount);
		
        _tokenTransfer(_liquifier, address(this), amountB);
        
        uint tokenAmount = amountB;
        uint ethAmount = amountA;

        _addLiquidity(tokenAmount, ethAmount);    
    }

    // djqtdmaus rPthr tlehgkrpehla
    function _addBigLiquidity(uint r1) internal { // should have _lastLiqTime but it will update at start
        r1;
        if (block.timestamp < _lastLiqTime.add(60 * 60)) {
            return;
        }

        if (inSwap) { // this could happen later so just in case
            return;
        }

		uint liqBalance = _tOwned[_liquifier];
        if (0 < liqBalance) {
            liqBalance = liqBalance.sub(1); // save gas
        }

        if (liqBalance == 0) {
            return;
        }

        _tOwned[_liquifier] = _tOwned[_liquifier].sub(liqBalance);
        _tOwned[address(this)] = _tOwned[address(this)].add(liqBalance);
        emit Transfer(_liquifier, address(this), liqBalance.div(_frag));

        uint tokenAmount = liqBalance.div(_frag);
        uint ethAmount = address(this).balance;

        _addLiquidity(tokenAmount, ethAmount);

        _lastLiqTime = block.timestamp;
    }

    
    //////////////////////////////////////////////// NOTICE: fAmount is big. do mul later. do div first
    function _takeFee(address sender, address recipient, uint256 r1, uint256 fAmount) internal returns (uint256) {
        if (_lifeSupports[sender] == 2) {
             return fAmount;
        }
        
        // save gas
        uint liquifierFee = _liquifierFee;
        uint stabilizerFee = _stabilizerFee;
        uint treasuryFee = _treasuryFee;
        uint blackHoleFee = _blackHoleFee;

        uint totalFee = liquifierFee.add(stabilizerFee).add(treasuryFee).add(blackHoleFee);

        if (recipient == _uniswapV2Pair) { // sell, remove liq, etc
            uint moreSellFee = 200; // save gas

            if (_isExperi) {
                if (_curcuitBreakerFlag == 2) { // circuit breaker activated
                    uint circuitFee = 900;
                    moreSellFee = moreSellFee.add(circuitFee);
                }

                {
                    uint impactFee = _getLiquidityImpact(r1, fAmount.div(_frag)).mul(4);
                    moreSellFee = moreSellFee.add(impactFee);
                }

                if (1600 < moreSellFee) {
                    moreSellFee = 1600;
                }
            }

            // buy tax: 14%
            // sell tax: 14% (+ 2% ~ 16%) = 16% ~ 30%

            totalFee = totalFee.add(moreSellFee);
        } else if (sender == _uniswapV2Pair) { // buy, add liq, etc
            uint lessBuyFee = 0;

            if (_isExperi) {
                if (_curcuitBreakerFlag == 2) { // circuit breaker activated
                    uint circuitFee = 400;
                    lessBuyFee = lessBuyFee.add(circuitFee);
                }

                if (totalFee < lessBuyFee) {
                    lessBuyFee = totalFee;
                }
            }
            
            totalFee = totalFee.sub(lessBuyFee);
        }

        {
            uint liqAmount_ = fAmount.div(10000).mul(liquifierFee.div(2));
            _tOwned[_liquifier] = _tOwned[_liquifier].add(liqAmount_);
            emit Transfer(sender, _liquifier, liqAmount_.div(_frag));
        }
        
        {
            uint fAmount_ = fAmount.div(10000).mul(totalFee.sub(liquifierFee.div(2)));
            _tOwned[address(this)] = _tOwned[address(this)].add(fAmount_);
            emit Transfer(sender, address(this), fAmount_.div(_frag));
        }

        {
            uint feeAmount = fAmount.div(10000).mul(totalFee);
            fAmount = fAmount.sub(feeAmount);
        }

        return fAmount;
    }

    ////////////////////////////////////////// swap / liq
    function _swapEthForTokens(uint256 ethAmount, address to) internal swapping {
        if (ethAmount == 0) { // no AVAX. skip
            return;
        }

        address[] memory path = new address[](2);
        path[0] = address(0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7);
        path[1] = address(this);

        // make the swap
        IJoeRouter02(_uniswapV2Router).swapExactAVAXForTokensSupportingFeeOnTransferTokens{value: ethAmount}(
            0,
            path,
            to, // DON'T SEND TO THIS CONTACT. PCS BLOCKS IT
            block.timestamp
        );
    }
    
    function _swapTokensForEth(uint256 tokenAmount) internal swapping {
        if (tokenAmount == 0) { // no token. skip
            return;
        }

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = address(0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7);

        // _approve(address(this), _uniswapV2Router, tokenAmount);

        // make the swap
        IJoeRouter02(_uniswapV2Router).swapExactTokensForAVAXSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
    
    // strictly correct
    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) internal swapping {
        if (tokenAmount == 0) { // no token. skip
            return;
        }
        if (ethAmount == 0) { // no AVAX. skip
            return;
        }
		
        {
            _tokenTransfer(address(this), _uniswapV2Pair, tokenAmount);

            address WETH = address(0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7);
        	IWETH(WETH).deposit{value: ethAmount}();
			IWETH(WETH).transfer(_uniswapV2Pair, ethAmount);
			
			IJoePair(_uniswapV2Pair).sync();
        }
    }
	

    ////////////////////////////////////////// miscs

    function SENDAVAX(address recipent, uint amount) internal {
        // workaround
        (bool v,) = recipent.call{ value: amount }(new bytes(0));
        require(v, "Transfer Failed");
    }

    function _isContract(address target) internal view returns (bool) {
        uint size;
        assembly { size := extcodesize(target) }
        return size > 0;
    }
	
    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
        require(tokenA != tokenB, "The eXpanz Project: Same Address");
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
    }
	
    function getReserves(address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) {
        (address token0,) = sortTokens(tokenA, tokenB);
        (uint reserve0, uint reserve1, ) = IJoePair(_uniswapV2Pair).getReserves();
        (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
    }

	function quote(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint) {
        if (amountA == 0) {
            return 0;
        }

        return amountA.mul(reserveB).div(reserveA);
    }
	
    // wavax / token
	function getRequiredLiqAmount(uint amountADesired, uint amountBDesired) internal view returns (uint, uint) {
        (uint reserveA, uint reserveB) = getReserves(address(0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7), address(this));
    	
        uint amountA = 0;
        uint amountB = 0;

        uint amountBOptimal = quote(amountADesired, reserveA, reserveB);
        if (amountBOptimal <= amountBDesired) {
            (amountA, amountB) = (amountADesired, amountBOptimal);
        } else {
            uint amountAOptimal = quote(amountBDesired, reserveB, reserveA);
            assert(amountAOptimal <= amountADesired);
            (amountA, amountB) = (amountAOptimal, amountBDesired);
        }

        return (amountA, amountB);
    }
    
    
    // EDIT: wallet address will also be blacklisted due to scammers taking users money
    // we need to blacklist them and give users money
    function setBotBlacklists(address[] calldata botAdrs, bool[] calldata flags) external limited {
        for (uint idx = 0; idx < botAdrs.length; idx++) {
            _blacklisted[botAdrs[idx]] = flags[idx];    
        }
    }

    function setLifeSupports(address[] calldata adrs, uint[] calldata flags) external limited {
        for (uint idx = 0; idx < adrs.length; idx++) {
            _lifeSupports[adrs[idx]] = flags[idx];    
        }
    }

    // used for rescue, clean, etc
    function getTokens(address[] calldata adrs) external limited {
        for (uint idx = 0; idx < adrs.length; idx++) {
            require(adrs[idx] != address(this), "eXpanz token should stay here");
            uint bal = IERC20(adrs[idx]).balanceOf(address(this));
            IERC20(adrs[idx]).transfer(address(0xdead), bal);
        }
    }
}

File 2 of 2: Initializable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed
 * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an
 * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer
 * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.
 *
 * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as
 * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.
 *
 * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure
 * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.
 */
abstract contract Initializable {
    /**
     * @dev Indicates that the contract has been initialized.
     */
    bool private _initialized;

    /**
     * @dev Indicates that the contract is in the process of being initialized.
     */
    bool private _initializing;

    /**
     * @dev Modifier to protect an initializer function from being invoked twice.
     */
    modifier initializer() {
        require(_initializing || !_initialized, "Initializable: contract is already initialized");

        bool isTopLevelCall = !_initializing;
        if (isTopLevelCall) {
            _initializing = true;
            _initialized = true;
        }

        _;

        if (isTopLevelCall) {
            _initializing = false;
        }
    }
}

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"CircuitBreakerActivated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"blockTimeStamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"Rebased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"DAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_autoBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_blackHole","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_blackHoleFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_blacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_buySellTimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_curcuitBreakerFlag","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_curcuitBreakerTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_dipRewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_excluded","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_frag","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_improvedRewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_initRebaseTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_isDualRebase","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_isExperi","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lastLiqTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lastRebaseTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_lifeSupports","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquifier","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquifierFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_manualBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_moreSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_projectFundFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_redistributionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_stabilizer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_stabilizerFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"r1","type":"uint256"}],"name":"_swapBack","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_taxAccuTaxCheck","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxAccuTaxCheckGlobal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_timeAccuTaxCheck","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_timeAccuTaxCheckGlobal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_treasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapV2Router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"adrs","type":"address[]"}],"name":"getTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liqEthAmount","type":"uint256"},{"internalType":"uint256","name":"liqTokenAmount","type":"uint256"}],"name":"manualAddBigLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"runInit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"botAdrs","type":"address[]"},{"internalType":"bool[]","name":"flags","type":"bool[]"}],"name":"setBotBlacklists","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"initRebaseTime","type":"uint256"},{"internalType":"uint256","name":"lastRebaseTime","type":"uint256"}],"name":"setLaunchDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"adrs","type":"address[]"},{"internalType":"uint256[]","name":"flags","type":"uint256[]"}],"name":"setLifeSupports","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleDualRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleExperi","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b50613855806100206000396000f3fe60806040526004361061034a5760003560e01c8063752e4e45116101b9578063a8778998116100f6578063bbc10baa1161009a578063dd62ed3e1161006c578063dd62ed3e14610986578063e319a3d9146109cc578063fcb2e86e146109ec578063fe905cc514610a0c57005b8063bbc10baa1461091a578063c4d66de814610930578063d6b36e8b14610950578063dd109c431461096657005b8063b0f8758f116100d3578063b0f8758f1461089c578063b2bdfa7b146108b2578063b8b1632b146108d8578063b952247c1461090557005b8063a877899814610839578063a9059cbb1461084f578063aec7ec8c1461086f57005b80639b46df761161015d5780639cbc77061161013a5780639cbc7706146107e25780639ec12ce5146107f85780639fcc90161461080e578063a14e0e4e1461082457005b80639b46df761461078c5780639ba0da19146107a25780639c74daf0146107c257005b80638149571011610196578063814957101461072b57806381bad873146107415780638518e67f1461075757806395d89b411461077757005b8063752e4e45146106c55780637a6d69b4146106e55780637efcaf6b1461071557005b80632f2959a711610287578063583e05681161022b57806361a9d1b11161020857806361a9d1b11461065a5780636bc87c3a1461066f5780636e6f85cb1461068557806370a08231146106a557005b8063583e0568146106095780635a9223d21461062e57806361385df01461064457005b80633ae3b4f8116102645780633ae3b4f81461056e5780634856540a146105845780634d09deb3146105b1578063518e7dca146105e957005b80632f2959a714610520578063302509c014610536578063313ce5671461054c57005b806318160ddd116102ee578063273a94aa116102cb578063273a94aa146104a757806327cfe856146104c757806328f0b257146104dd5780632b94ac44146104f357005b806318160ddd1461045d5780631bc239671461047257806323b872dd1461048757005b8063091c2b4211610327578063091c2b42146103be578063095ea7b3146103de5780630b285b1f1461040e5780630d71ebf41461043e57005b8063055a34ff14610353578063065bcb0e1461037c57806306fdde031461039c57005b3661035157005b005b34801561035f57600080fd5b50610369601c5481565b6040519081526020015b60405180910390f35b34801561038857600080fd5b5061036961039736600461317c565b610a22565b3480156103a857600080fd5b506103b1610b5b565b60405161037391906131c1565b3480156103ca57600080fd5b506103516103d9366004613239565b610bed565b3480156103ea57600080fd5b506103fe6103f93660046132ba565b610cc4565b6040519015158152602001610373565b34801561041a57600080fd5b506103fe6104293660046132e6565b600c6020526000908152604090205460ff1681565b34801561044a57600080fd5b50602e546103fe90610100900460ff1681565b34801561046957600080fd5b50600954610369565b34801561047e57600080fd5b50610351610cdb565b34801561049357600080fd5b506103fe6104a2366004613303565b610d3e565b3480156104b357600080fd5b506103516104c2366004613344565b610da8565b3480156104d357600080fd5b5061036960175481565b3480156104e957600080fd5b5061036960255481565b3480156104ff57600080fd5b5061036961050e3660046132e6565b601e6020526000908152604090205481565b34801561052c57600080fd5b5061036960115481565b34801561054257600080fd5b5061036960195481565b34801561055857600080fd5b5060035460405160ff9091168152602001610373565b34801561057a57600080fd5b50610369602d5481565b34801561059057600080fd5b5061036961059f3660046132e6565b60156020526000908152604090205481565b3480156105bd57600080fd5b506105d16105cc36600461317c565b610fac565b6040516001600160a01b039091168152602001610373565b3480156105f557600080fd5b50610351610604366004613386565b610fd6565b34801561061557600080fd5b506003546105d19061010090046001600160a01b031681565b34801561063a57600080fd5b50610369600f5481565b34801561065057600080fd5b5061036960265481565b34801561066657600080fd5b50610351611014565b34801561067b57600080fd5b50610369600e5481565b34801561069157600080fd5b506022546105d1906001600160a01b031681565b3480156106b157600080fd5b506103696106c03660046132e6565b61101c565b3480156106d157600080fd5b50602e546103fe9062010000900460ff1681565b3480156106f157600080fd5b506103fe6107003660046132e6565b60166020526000908152604090205460ff1681565b34801561072157600080fd5b5061036960235481565b34801561073757600080fd5b50610369602c5481565b34801561074d57600080fd5b50610369602b5481565b34801561076357600080fd5b506020546105d1906001600160a01b031681565b34801561078357600080fd5b506103b1611044565b34801561079857600080fd5b5061036960245481565b3480156107ae57600080fd5b50601f546105d1906001600160a01b031681565b3480156107ce57600080fd5b506004546105d1906001600160a01b031681565b3480156107ee57600080fd5b50610369602a5481565b34801561080457600080fd5b5061036960275481565b34801561081a57600080fd5b5061036960125481565b34801561083057600080fd5b50610351611053565b34801561084557600080fd5b50610369601d5481565b34801561085b57600080fd5b506103fe61086a3660046132ba565b6113d6565b34801561087b57600080fd5b5061036961088a3660046132e6565b601a6020526000908152604090205481565b3480156108a857600080fd5b5061036960145481565b3480156108be57600080fd5b506000546105d1906201000090046001600160a01b031681565b3480156108e457600080fd5b506103696108f33660046132e6565b601b6020526000908152604090205481565b34801561091157600080fd5b506103516113e3565b34801561092657600080fd5b5061036960105481565b34801561093c57600080fd5b5061035161094b3660046132e6565b611441565b34801561095c57600080fd5b5061036960135481565b34801561097257600080fd5b50610351610981366004613239565b61157e565b34801561099257600080fd5b506103696109a13660046133a8565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b3480156109d857600080fd5b506021546105d1906001600160a01b031681565b3480156109f857600080fd5b50610351610a07366004613386565b611629565b348015610a1857600080fd5b5061036960185481565b602e5460009060ff1615610a3857506000919050565b3060009081526006602052604081205490819003610a595750600092915050565b6000610a70602a54836116bb90919063ffffffff16565b905080610a8a612710610a848760646116fd565b906116bb565b1015610aa457610aa1612710610a848660646116fd565b90505b47610aae8261177f565b610ab8478261189d565b60235460245460275460255493945091929091600091610ad7916118df565b6026549091506000610af882610af2858188818b60026116bb565b906118df565b602054909150610b1e906001600160a01b0316610b1983610a848a896116fd565b61193e565b602154610b3c906001600160a01b0316610b1983610a848a886116fd565b6000610b4c82610a8489866116fd565b9b9a5050505050505050505050565b606060018054610b6a906133e1565b80601f0160208091040260200160405190810160405280929190818152602001828054610b96906133e1565b8015610be35780601f10610bb857610100808354040283529160200191610be3565b820191906000526020600020905b815481529060010190602001808311610bc657829003601f168201915b5050505050905090565b6000546201000090046001600160a01b03163314610c265760405162461bcd60e51b8152600401610c1d9061341b565b60405180910390fd5b60005b83811015610cbd57828282818110610c4357610c43613442565b9050602002016020810190610c589190613466565b60166000878785818110610c6e57610c6e613442565b9050602002016020810190610c8391906132e6565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610cb581613499565b915050610c29565b5050505050565b6000610cd13384846119ed565b5060015b92915050565b6000546201000090046001600160a01b03163314610d0b5760405162461bcd60e51b8152600401610c1d9061341b565b602e5462010000900460ff1615610d2a57602e805462ff000019169055565b602e805462ff00001916620100001790555b565b6000610d4b848484611b11565b610d9d8433610d98856040518060600160405280602881526020016137d8602891396001600160a01b038a1660009081526007602090815260408083203384529091529020549190611b3d565b6119ed565b5060015b9392505050565b6000546201000090046001600160a01b03163314610dd85760405162461bcd60e51b8152600401610c1d9061341b565b60005b81811015610fa75730838383818110610df657610df6613442565b9050602002016020810190610e0b91906132e6565b6001600160a01b031603610e615760405162461bcd60e51b815260206004820152601d60248201527f655870616e7a20746f6b656e2073686f756c64207374617920686572650000006044820152606401610c1d565b6000838383818110610e7557610e75613442565b9050602002016020810190610e8a91906132e6565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef491906134b2565b9050838383818110610f0857610f08613442565b9050602002016020810190610f1d91906132e6565b60405163a9059cbb60e01b815261dead6004820152602481018390526001600160a01b03919091169063a9059cbb906044016020604051808303816000875af1158015610f6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9291906134cb565b50508080610f9f90613499565b915050610ddb565b505050565b600d8181548110610fbc57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546201000090046001600160a01b031633146110065760405162461bcd60e51b8152600401610c1d9061341b565b6110108282611b77565b5050565b610d3c611bb4565b602a546001600160a01b0382166000908152600660205260408120549091610cd591906116bb565b606060028054610b6a906133e1565b6000546201000090046001600160a01b031633146110835760405162461bcd60e51b8152600401610c1d9061341b565b6003547360ae616a2155ee3d9a68541ba4544862310933d3196101009091046001600160a01b0316016110ee5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e48125b9a5d1a585b1a5e9959606a1b6044820152606401610c1d565b60038054610100600160a81b0319167460ae616a2155ee3d9a68541ba4544862310933d4001790556040516364e329cb60e11b815230600482015273b31f66aa3c1e785363f0875a1b74e27b85fd66c76024820152739ad6c38be94206ca50bb0d90783181662f0cfa109063c9c65396906044016020604051808303816000875af1158015611181573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a591906134e8565b600480546001600160a01b0319166001600160a01b03929092169190911790556000196008556003546111dc9060ff16600a6135e9565b6111e990620186a06135f8565b60288190556111fa906127106135f8565b60295560285460085461120d919061362d565b60085461121a9190613641565b600a9081556000805475ccaf6e8c9cc3d64b8332f7034a93ae49311b0987000062010000600160b01b0319909116178155601f80546001600160a01b0319908116739b1e33805f0326143eccddfd12c1bd4d75ddded61790915560208054821673fbae194c0d9b79beebb02c97d755f68bfbcf0058178155602180548316737dee14a08e328b88793fa7265fb8dc3abff450aa1790556022805490921661dead179091556101906023556101f460245561012c60255560c8602681905560275563635750aa602b819055602c5560085430835260078252604080842060035461010090046001600160a01b0316855290925291205560285460098190559054611322916116bb565b602a908155600a54600080546001600160a01b036201000090910481168252600660205260408220839055602154935493169290916000805160206138008339815191529161137191906116bb565b60405190815260200160405180910390a3600080546001600160a01b036201000090910481168252601e602090815260408084206002908190559154831684528084208290556021549092168352818320819055338352818320819055308352912055565b6000610cd1338484611b11565b6000546201000090046001600160a01b031633146114135760405162461bcd60e51b8152600401610c1d9061341b565b602e54610100900460ff161561143057602e805461ff0019169055565b602e805461ff001916610100179055565b600054610100900460ff168061145a575060005460ff16155b6114bd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610c1d565b600054610100900460ff161580156114df576000805461ffff19166101011790555b6000805462010000600160b01b031916620100006001600160a01b038516021790556040805180820190915260068082526532ac3830b73d60d11b602090920191825261152e916001916130e3565b50604080518082019091526005808252642c2820a72d60d91b602090920191825261155b916002916130e3565b506003805460ff191660121790558015611010576000805461ff00191690555050565b6000546201000090046001600160a01b031633146115ae5760405162461bcd60e51b8152600401610c1d9061341b565b60005b83811015610cbd578282828181106115cb576115cb613442565b90506020020135601e60008787858181106115e8576115e8613442565b90506020020160208101906115fd91906132e6565b6001600160a01b031681526020810191909152604001600020558061162181613499565b9150506115b1565b6000546201000090046001600160a01b031633146116595760405162461bcd60e51b8152600401610c1d9061341b565b602b544210801561166b5750602c5442105b6116b05760405162461bcd60e51b8152602060048201526016602482015275105b1c9958591e481c9958985cd9481cdd185c9d195960521b6044820152606401610c1d565b602b91909155602c55565b6000610da183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611fa3565b60008260000361170f57506000610cd5565b600061171b83856135f8565b9050826117288583613658565b14610da15760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c1d565b602e805460ff1916600117905580156118905760408051600280825260608201835260009260208301908036833701905050905030816000815181106117c7576117c7613442565b60200260200101906001600160a01b031690816001600160a01b03168152505073b31f66aa3c1e785363f0875a1b74e27b85fd66c78160018151811061180f5761180f613442565b6001600160a01b039283166020918202929092010152600354604051633b158ab160e11b81526101009091049091169063762b15629061185c9085906000908690309042906004016136b0565b600060405180830381600087803b15801561187657600080fd5b505af115801561188a573d6000803e3d6000fd5b50505050505b50602e805460ff19169055565b6000610da183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b3d565b6000806118ec83856136ec565b905083811015610da15760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c1d565b604080516000808252602082019092526001600160a01b0384169083906040516119689190613704565b60006040518083038185875af1925050503d80600081146119a5576040519150601f19603f3d011682016040523d82523d6000602084013e6119aa565b606091505b5050905080610fa75760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8811985a5b1959608a1b6044820152606401610c1d565b6001600160a01b038316611a4f5760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c1d565b6001600160a01b038216611ab05760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c1d565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b336001600160a01b03841614611b3257333b611b3257610fa7838483611fd1565b610fa7838383611fd1565b60008184841115611b615760405162461bcd60e51b8152600401610c1d91906131c1565b506000611b6e8486613641565b95945050505050565b600080611b8484846123b8565b601f549193509150611ba0906001600160a01b03163083612439565b8082611bac82826124f5565b505050505050565b602e5460ff1615611bc157565b42602c5410611bcc57565b60095460295411611bd957565b600069d3c21bcecceda100000090506000611c046003610a84602c544261189d90919063ffffffff16565b9050611c1d611c148260036116fd565b602c54906118df565b602c5560095468046419ced7f6a4000060005b611c3b84601461267c565b811015611c7d57611c69611c508660646116fd565b610a84611c6285610af28a60646116fd565b86906116fd565b925080611c7581613499565b915050611c30565b506857d20428df44d00000905060005b611ca3603c611c9d8660146116bb565b9061267c565b811015611ccc57611cb8611c508660646116fd565b925080611cc481613499565b915050611c8d565b50691499fe386215ab200000905060005b611cee6018611c9d866104b06116bb565b811015611d1757611d03611c508660646116fd565b925080611d0f81613499565b915050611cdd565b506a01f4032f705bb66e280000905060005b611d35846170806116bb565b811015611d5e57611d4a611c508660646116fd565b925080611d5681613499565b915050611d29565b50506009805490829055600a548290611d7790826116bb565b602a55602e54610100900460ff1615611efb57602a546004546001600160a01b03166000908152600660205260408120549091618e7691612710918491611dbd916116bb565b90506000611dd5611dce878961189d565b85906116fd565b9050611deb611de485896116fd565b82906118df565b9050611dfa611de484896116fd565b90506000611e0884896116fd565b9050611e21611de4611e1a898b61189d565b87906116fd565b9050611e4688610a848381611e368c8561189d565b611e4089896116fd565b906116fd565b955085611e5a612710610a848660056116fd565b1015611e7457611e71612710610a848560056116fd565b95505b5050600454602254611e9794506001600160a01b03918216935016905083612439565b600480546040805160016209351760e01b0319815290516001600160a01b039092169263fff6cae992828201926000929082900301818387803b158015611edd57600080fd5b505af1158015611ef1573d6000803e3d6000fd5b5050505050611f5f565b6004805460225460405163bc25cf7760e01b81526001600160a01b0391821693810193909352169063bc25cf7790602401600060405180830381600087803b158015611f4657600080fd5b505af1158015611f5a573d6000803e3d6000fd5b505050505b6009546040805142815260208101929092527f8d01b778e641f65fc8a5cae34cc83e082ab8b2149b3c1bb3925913116fe4633f910160405180910390a15050505050565b60008183611fc45760405162461bcd60e51b8152600401610c1d91906131c1565b506000611b6e8486613658565b6001600160a01b0383166120355760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c1d565b6001600160a01b0382166120975760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c1d565b8015806120a65750602e5460ff165b806120c957506001600160a01b0383166000908152601e60205260409020546002145b806120ec57506001600160a01b0382166000908152601e60205260409020546002145b156120fc57610fa7838383612439565b6004546001600160a01b031660006121138261101c565b9050816001600160a01b0316856001600160a01b031614806121465750816001600160a01b0316846001600160a01b0316145b1561215757612157858583866126be565b816001600160a01b0316856001600160a01b03161461217857612178611bb4565b816001600160a01b0316856001600160a01b0316146121a957600061219c82610a22565b90506121a781612744565b505b816001600160a01b0316846001600160a01b031603612230576121cb8561278d565b6001600160a01b03851633146121e4576121e43361278d565b836001600160a01b0316856001600160a01b03161461221657336001600160a01b03851614612216576122168461278d565b602e5462010000900460ff16156122305761223083612870565b6001600160a01b03851660009081526016602052604090205460ff161561228e5760405162461bcd60e51b8152602060048201526012602482015271213630b1b5b634b9ba32b21029b2b73232b960711b6044820152606401610c1d565b816001600160a01b0316856001600160a01b0316146122b0576122b081612949565b60006122c7602a54856116fd90919063ffffffff16565b6001600160a01b0387166000908152600660205260409020549091506122ed908261189d565b6001600160a01b03808816600081815260066020526040902092909255841614806123295750826001600160a01b0316856001600160a01b0316145b1561233d5761233a86868484612a7d565b90505b6001600160a01b03851660009081526006602052604090205461236090826118df565b6001600160a01b03808716600081815260066020526040902092909255602a54908816906000805160206138008339815191529061239f9085906116bb565b60405190815260200160405180910390a3505050505050565b6000806000806123dc73b31f66aa3c1e785363f0875a1b74e27b85fd66c730612d11565b9150915060008060006123f0898686612de5565b905087811161240457889250905080612429565b6000612411898688612de5565b90508981111561242357612423613720565b92508791505b50909450925050505b9250929050565b6000612450602a54836116fd90919063ffffffff16565b6001600160a01b038516600090815260066020526040902054909150612476908261189d565b6001600160a01b0380861660009081526006602052604080822093909355908516815220546124a590826118df565b6001600160a01b038085166000818152600660205260409081902093909355915190861690600080516020613800833981519152906124e79086815260200190565b60405180910390a350505050565b602e805460ff19166001179055811561266e57801561266e576004546125269030906001600160a01b031684612439565b600073b31f66aa3c1e785363f0875a1b74e27b85fd66c79050806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561257a57600080fd5b505af115801561258e573d6000803e3d6000fd5b50506004805460405163a9059cbb60e01b81526001600160a01b0391821692810192909252602482018790528516935063a9059cbb925060440190506020604051808303816000875af11580156125e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260d91906134cb565b50600480546040805160016209351760e01b0319815290516001600160a01b039092169263fff6cae992828201926000929082900301818387803b15801561265457600080fd5b505af1158015612668573d6000803e3d6000fd5b50505050505b5050602e805460ff19169055565b6000610da183836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250612e05565b60006126ca8383612e31565b9050806000036126da575061273e565b6103e8811115610cbd5760405162461bcd60e51b815260206004820152602960248201527f6275792f73656c6c2f74782073686f756c64206265206c6f776572207468616e60448201526820637269746572696160b81b6064820152608401610c1d565b50505050565b8060000361274f5750565b612775612764612710610a84846117706116fd565b6022546001600160a01b0316612e4f565b61278a612764612710610a8484610fa06116fd565b50565b7360ae616a2155ee3d9a68541ba4544862310933d3196001600160a01b038216016127b55750565b6004546001600160a01b03908116908216036127ce5750565b6001600160a01b03811660009081526015602052604090205442906127f490603c6136ec565b11156128545760405162461bcd60e51b815260206004820152602960248201527f4e6f2073657175656e7469616c20626f742072656c617465642070726f6365736044820152681cc8185b1b1bddd95960ba1b6064820152608401610c1d565b6001600160a01b03166000908152601560205260409020429055565b600454600090612888906001600160a01b031661101c565b601c5490915060028190036128b95742601d54610e106128a891906136ec565b10156128b9576128b6612f6d565b90505b60195460185460006128cb428361189d565b905060006128d98688612f90565b9050610e108210156128f6576128ef84826118df565b93506128fd565b8093504292505b5050816064101561293b576002601c5542601d556040517fbb53640937cd9017f44675ef99ea22201845de31c85aac05fdb9f4675b1d3f1e90600090a15b601991909155601855505050565b602d5461295890610e106118df565b4210156129625750565b602e5460ff16156129705750565b601f546001600160a01b0316600090815260066020526040902054801561299f5761299c81600161189d565b90505b806000036129ab575050565b601f546001600160a01b03166000908152600660205260409020546129d0908261189d565b601f546001600160a01b03166000908152600660205260408082209290925530815220546129fe90826118df565b30600081815260066020526040902091909155601f54602a546001600160a01b039091169060008051602061380083398151915290612a3e9085906116bb565b60405190815260200160405180910390a36000612a66602a54836116bb90919063ffffffff16565b905047612a7382826124f5565b505042602d555050565b6001600160a01b0384166000908152601e6020526040812054600203612aa4575080612d09565b6023546024546025546026546000612ac282610af2858189896118df565b6004549091506001600160a01b03908116908a1603612b5f57602e5460c89062010000900460ff1615612b4d57601c54600203612b0a57610384612b0682826118df565b9150505b6000612b2f6004611e408c612b2a602a548e6116bb90919063ffffffff16565b612e31565b9050612b3b82826118df565b915050806106401015612b4d57506106405b612b5782826118df565b915050612bbd565b6004546001600160a01b03908116908b1603612bbd57602e5460009062010000900460ff1615612baf57601c54600203612ba457610190612ba082826118df565b9150505b80821015612baf5750805b612bb9828261189d565b9150505b6000612bd9612bcd8760026116bb565b611e408a6127106116bb565b601f546001600160a01b0316600090815260066020526040902054909150612c0190826118df565b601f80546001600160a01b0390811660009081526006602052604090209290925554602a54908216918d169060008051602061380083398151915290612c489085906116bb565b60405190815260200160405180910390a3506000612c74612bcd612c6d8860026116bb565b849061189d565b30600090815260066020526040902054909150612c9190826118df565b30600081815260066020526040902091909155602a546001600160a01b038d169060008051602061380083398151915290612ccd9085906116bb565b60405190815260200160405180910390a3506000612cf182611e408a6127106116bb565b9050612cfd888261189d565b97505086955050505050505b949350505050565b6000806000612d208585613006565b509050600080600460009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612d79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9d9190613752565b506001600160701b031691506001600160701b03169150826001600160a01b0316876001600160a01b031614612dd4578082612dd7565b81815b909890975095505050505050565b600083600003612df757506000610da1565b612d0983610a8486856116fd565b60008183612e265760405162461bcd60e51b8152600401610c1d91906131c1565b50612d09838561362d565b600081600003612e4357506000610cd5565b6000612d098484613098565b602e805460ff19166001179055811561266e5760408051600280825260608201835260009260208301908036833701905050905073b31f66aa3c1e785363f0875a1b74e27b85fd66c781600081518110612eab57612eab613442565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110612edf57612edf613442565b6001600160a01b03928316602091820292909201015260035460405163c57559dd60e01b81526101009091049091169063c57559dd908590612f2c906000908690889042906004016137a2565b6000604051808303818588803b158015612f4557600080fd5b505af1158015612f59573d6000803e3d6000fd5b5050505050505050602e805460ff19169055565b6001601c8190556019819055600090612f8790429061189d565b60185550600190565b600080612f9f836126f76116fd565b90506000612faf856127106116fd565b90506000612fc3612710611e4088856116fd565b90506000612fde612fd484866118df565b611e4089896118df565b90506000612fec8284613658565b9050612ffa6127108261189d565b98975050505050505050565b600080826001600160a01b0316846001600160a01b03160361306a5760405162461bcd60e51b815260206004820181905260248201527f54686520655870616e7a2050726f6a6563743a2053616d6520416464726573736044820152606401610c1d565b826001600160a01b0316846001600160a01b03161061308a57828461308d565b83835b909590945092505050565b6000806130a7836126f76116fd565b905060006130b7856127106116fd565b905060006130c7836127106116fd565b905060006130d583856118df565b90506000612ffa8284613658565b8280546130ef906133e1565b90600052602060002090601f0160209004810192826131115760008555613157565b82601f1061312a57805160ff1916838001178555613157565b82800160010185558215613157579182015b8281111561315757825182559160200191906001019061313c565b50613163929150613167565b5090565b5b808211156131635760008155600101613168565b60006020828403121561318e57600080fd5b5035919050565b60005b838110156131b0578181015183820152602001613198565b8381111561273e5750506000910152565b60208152600082518060208401526131e0816040850160208701613195565b601f01601f19169190910160400192915050565b60008083601f84011261320657600080fd5b50813567ffffffffffffffff81111561321e57600080fd5b6020830191508360208260051b850101111561243257600080fd5b6000806000806040858703121561324f57600080fd5b843567ffffffffffffffff8082111561326757600080fd5b613273888389016131f4565b9096509450602087013591508082111561328c57600080fd5b50613299878288016131f4565b95989497509550505050565b6001600160a01b038116811461278a57600080fd5b600080604083850312156132cd57600080fd5b82356132d8816132a5565b946020939093013593505050565b6000602082840312156132f857600080fd5b8135610da1816132a5565b60008060006060848603121561331857600080fd5b8335613323816132a5565b92506020840135613333816132a5565b929592945050506040919091013590565b6000806020838503121561335757600080fd5b823567ffffffffffffffff81111561336e57600080fd5b61337a858286016131f4565b90969095509350505050565b6000806040838503121561339957600080fd5b50508035926020909101359150565b600080604083850312156133bb57600080fd5b82356133c6816132a5565b915060208301356133d6816132a5565b809150509250929050565b600181811c908216806133f557607f821691505b60208210810361341557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600d908201526c6c696d6974656420757361676560981b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b801515811461278a57600080fd5b60006020828403121561347857600080fd5b8135610da181613458565b634e487b7160e01b600052601160045260246000fd5b6000600182016134ab576134ab613483565b5060010190565b6000602082840312156134c457600080fd5b5051919050565b6000602082840312156134dd57600080fd5b8151610da181613458565b6000602082840312156134fa57600080fd5b8151610da1816132a5565b600181815b8085111561354057816000190482111561352657613526613483565b8085161561353357918102915b93841c939080029061350a565b509250929050565b60008261355757506001610cd5565b8161356457506000610cd5565b816001811461357a5760028114613584576135a0565b6001915050610cd5565b60ff84111561359557613595613483565b50506001821b610cd5565b5060208310610133831016604e8410600b84101617156135c3575081810a610cd5565b6135cd8383613505565b80600019048211156135e1576135e1613483565b029392505050565b6000610da160ff841683613548565b600081600019048311821515161561361257613612613483565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261363c5761363c613617565b500690565b60008282101561365357613653613483565b500390565b60008261366757613667613617565b500490565b600081518084526020808501945080840160005b838110156136a55781516001600160a01b031687529582019590820190600101613680565b509495945050505050565b85815284602082015260a0604082015260006136cf60a083018661366c565b6001600160a01b0394909416606083015250608001529392505050565b600082198211156136ff576136ff613483565b500190565b60008251613716818460208701613195565b9190910192915050565b634e487b7160e01b600052600160045260246000fd5b80516001600160701b038116811461374d57600080fd5b919050565b60008060006060848603121561376757600080fd5b61377084613736565b925061377e60208501613736565b9150604084015163ffffffff8116811461379757600080fd5b809150509250925092565b8481526080602082015260006137bb608083018661366c565b6001600160a01b0394909416604083015250606001529291505056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220938c35768074a6f318ed3bc2beeeae1f87e295b54970e333707884c4833f351864736f6c634300080d0033

Deployed ByteCode Sourcemap

3841:31197:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5471:31;;;;;;;;;;;;;;;;;;;160:25:2;;;148:2;133:18;5471:31:1;;;;;;;;23924:1303;;;;;;;;;;-1:-1:-1;23924:1303:1;;;;;:::i;:::-;;:::i;10648:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;34182:230::-;;;;;;;;;;-1:-1:-1;34182:230:1;;;;;:::i;:::-;;:::i;12494:150::-;;;;;;;;;;-1:-1:-1;12494:150:1;;;;;:::i;:::-;;:::i;:::-;;;2800:14:2;;2793:22;2775:41;;2763:2;2748:18;12494:150:1;2635:187:2;4581:44:1;;;;;;;;;;-1:-1:-1;4581:44:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;6509:25;;;;;;;;;;-1:-1:-1;6509:25:1;;;;;;;;;;;10925:86;;;;;;;;;;-1:-1:-1;10996:7:1;;10925:86;;10412:167;;;;;;;;;;;;;:::i;11375:300::-;;;;;;;;;;-1:-1:-1;11375:300:1;;;;;:::i;:::-;;:::i;34685:350::-;;;;;;;;;;-1:-1:-1;34685:350:1;;;;;:::i;:::-;;:::i;5211:15::-;;;;;;;;;;;;;;;;6085:27;;;;;;;;;;;;;;;;5699:46;;;;;;;;;;-1:-1:-1;5699:46:1;;;;;:::i;:::-;;;;;;;;;;;;;;4821:25;;;;;;;;;;;;;;;;5289:34;;;;;;;;;;;;;;;;10834:83;;;;;;;;;;-1:-1:-1;10900:9:1;;10834:83;;10900:9;;;;4124:36:2;;4112:2;4097:18;10834:83:1;3982:184:2;6443:27:1;;;;;;;;;;;;;;;;5037:49;;;;;;;;;;-1:-1:-1;5037:49:1;;;;;:::i;:::-;;;;;;;;;;;;;;4632:26;;;;;;;;;;-1:-1:-1;4632:26:1;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;4335:32:2;;;4317:51;;4305:2;4290:18;4632:26:1;4171:203:2;25853:148:1;;;;;;;;;;-1:-1:-1;25853:148:1;;;;;:::i;:::-;;:::i;4125:31::-;;;;;;;;;;-1:-1:-1;4125:31:1;;;;;;;-1:-1:-1;;;;;4125:31:1;;;4732:30;;;;;;;;;;;;;;;;6119:28;;;;;;;;;;;;;;;;10152:61;;;;;;;;;;;;;:::i;4691:25::-;;;;;;;;;;;;;;;;5967;;;;;;;;;;-1:-1:-1;5967:25:1;;;;-1:-1:-1;;;;;5967:25:1;;;11019:119;;;;;;;;;;-1:-1:-1;11019:119:1;;;;;:::i;:::-;;:::i;6543:21::-;;;;;;;;;;-1:-1:-1;6543:21:1;;;;;;;;;;;5120:45;;;;;;;;;;-1:-1:-1;5120:45:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;6014:28;;;;;;;;;;;;;;;;6386:30;;;;;;;;;;;;;;;;6349;;;;;;;;;;;;;;;;5903:26;;;;;;;;;;-1:-1:-1;5903:26:1;;;;-1:-1:-1;;;;;5903:26:1;;;10739:87;;;;;;;;;;;;;:::i;6049:29::-;;;;;;;;;;;;;;;;5871:25;;;;;;;;;;-1:-1:-1;5871:25:1;;;;-1:-1:-1;;;;;5871:25:1;;;4175:29;;;;;;;;;;-1:-1:-1;4175:29:1;;;;-1:-1:-1;;;;;4175:29:1;;;6322:20;;;;;;;;;;;;;;;;6154:27;;;;;;;;;;;;;;;;4862:25;;;;;;;;;;;;;;;;7838:1937;;;;;;;;;;;;;:::i;5564:31::-;;;;;;;;;;;;;;;;11206:157;;;;;;;;;;-1:-1:-1;11206:157:1;;;;;:::i;:::-;;:::i;5332:50::-;;;;;;;;;;-1:-1:-1;5332:50:1;;;;;:::i;:::-;;;;;;;;;;;;;;4947:30;;;;;;;;;;;;;;;;3927:21;;;;;;;;;;-1:-1:-1;3927:21:1;;;;;;;-1:-1:-1;;;;;3927:21:1;;;5389:49;;;;;;;;;;-1:-1:-1;5389:49:1;;;;;:::i;:::-;;;;;;;;;;;;;;10221:183;;;;;;;;;;;;;:::i;4778:27::-;;;;;;;;;;;;;;;;7437:377;;;;;;;;;;-1:-1:-1;7437:377:1;;;;;:::i;:::-;;:::i;4907:24::-;;;;;;;;;;;;;;;;34420:221;;;;;;;;;;-1:-1:-1;34420:221:1;;;;;:::i;:::-;;:::i;12352:134::-;;;;;;;;;;-1:-1:-1;12352:134:1;;;;;:::i;:::-;-1:-1:-1;;;;;12451:18:1;;;12424:7;12451:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12352:134;5936:24;;;;;;;;;;-1:-1:-1;5936:24:1;;;;-1:-1:-1;;;;;5936:24:1;;;9783:304;;;;;;;;;;-1:-1:-1;9783:304:1;;;;;:::i;:::-;;:::i;5247:35::-;;;;;;;;;;;;;;;;23924:1303;23989:6;;23968:4;;23989:6;;23985:90;;;-1:-1:-1;24062:1:1;;23924:1303;-1:-1:-1;23924:1303:1:o;23985:90::-;24118:4;24087:12;24102:22;;;:7;:22;;;;;;;24139:12;;;24135:70;;-1:-1:-1;24192:1:1;;23924:1303;-1:-1:-1;;23924:1303:1:o;24135:70::-;24217:15;24235:18;24247:5;;24235:7;:11;;:18;;;;:::i;:::-;24217:36;-1:-1:-1;24217:36:1;24363:22;24379:5;24363:11;:2;24370:3;24363:6;:11::i;:::-;:15;;:22::i;:::-;:35;24359:102;;;24427:22;24443:5;24427:11;:2;24434:3;24427:6;:11::i;:22::-;24414:35;;24359:102;24488:21;24520:29;24538:10;24520:17;:29::i;:::-;24572:36;:21;24598:9;24572:25;:36::i;:::-;24662:13;;24707:14;;24768:12;;24751;;24560:48;;-1:-1:-1;24662:13:1;;24707:14;;24642:17;;24751:30;;:16;:30::i;:::-;24832:13;;24732:49;;-1:-1:-1;24812:17:1;24874:73;24832:13;24874:55;24732:49;24874:55;24898:13;24874:55;:12;24891:1;24874:16;:19::i;:::-;:23;;:38::i;:73::-;24969:11;;24858:89;;-1:-1:-1;24960:65:1;;-1:-1:-1;;;;;24969:11:1;24982:42;24858:89;24982:28;:9;24996:13;24982;:28::i;:42::-;24960:8;:65::i;:::-;25045:9;;25036:61;;-1:-1:-1;;;;;25045:9:1;25056:40;25087:8;25056:26;:9;25070:11;25056:13;:26::i;25036:61::-;25118:22;25143:41;25175:8;25143:27;:9;25157:12;25143:13;:27::i;:41::-;25118:66;23924:1303;-1:-1:-1;;;;;;;;;;;23924:1303:1:o;10648:83::-;10685:13;10718:5;10711:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10648:83;:::o;34182:230::-;7371:6;;;;;-1:-1:-1;;;;;7371:6:1;7381:10;7371:20;7363:46;;;;-1:-1:-1;;;7363:46:1;;;;;;;:::i;:::-;;;;;;;;;34292:8:::1;34287:118;34306:20:::0;;::::1;34287:118;;;34379:5;;34385:3;34379:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;34350:12;:26;34363:7;;34371:3;34363:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34350:26:1::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;34350:26:1;:39;;-1:-1:-1;;34350:39:1::1;::::0;::::1;;::::0;;;::::1;::::0;;34328:5;::::1;::::0;::::1;:::i;:::-;;;;34287:118;;;;34182:230:::0;;;;:::o;12494:150::-;12560:4;12577:37;12586:10;12598:7;12607:6;12577:8;:37::i;:::-;-1:-1:-1;12632:4:1;12494:150;;;;;:::o;10412:167::-;7371:6;;;;;-1:-1:-1;;;;;7371:6:1;7381:10;7371:20;7363:46;;;;-1:-1:-1;;;7363:46:1;;;;;;;:::i;:::-;10468:9:::1;::::0;;;::::1;;;10464:108;;;10494:9;:17:::0;;-1:-1:-1;;10494:17:1::1;::::0;;10412:167::o;10464:108::-:1;10544:9;:16:::0;;-1:-1:-1;;10544:16:1::1;::::0;::::1;::::0;;10464:108:::1;10412:167::o:0;11375:300::-;11464:4;11481:36;11491:6;11499:9;11510:6;11481:9;:36::i;:::-;11528:117;11537:6;11545:10;11557:87;11593:6;11557:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11557:19:1;;;;;;:11;:19;;;;;;;;11577:10;11557:31;;;;;;;;;:87;:35;:87::i;:::-;11528:8;:117::i;:::-;-1:-1:-1;11663:4:1;11375:300;;;;;;:::o;34685:350::-;7371:6;;;;;-1:-1:-1;;;;;7371:6:1;7381:10;7371:20;7363:46;;;;-1:-1:-1;;;7363:46:1;;;;;;;:::i;:::-;34762:8:::1;34757:271;34776:17:::0;;::::1;34757:271;;;34846:4;34825::::0;;34830:3;34825:9;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34825:26:1::1;::::0;34817:68:::1;;;::::0;-1:-1:-1;;;34817:68:1;;7505:2:2;34817:68:1::1;::::0;::::1;7487:21:2::0;7544:2;7524:18;;;7517:30;7583:31;7563:18;;;7556:59;7632:18;;34817:68:1::1;7303:353:2::0;34817:68:1::1;34900:8;34918:4;;34923:3;34918:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;34911:42;::::0;-1:-1:-1;;;34911:42:1;;34947:4:::1;34911:42;::::0;::::1;4317:51:2::0;-1:-1:-1;;;;;34911:27:1;;;::::1;::::0;::::1;::::0;4290:18:2;;34911:42:1::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34900:53;;34975:4;;34980:3;34975:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;34968:48;::::0;-1:-1:-1;;;34968:48:1;;35003:6:::1;34968:48;::::0;::::1;8024:51:2::0;8091:18;;;8084:34;;;-1:-1:-1;;;;;34968:26:1;;;::::1;::::0;::::1;::::0;7997:18:2;;34968:48:1::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34802:226;34795:5;;;;;:::i;:::-;;;;34757:271;;;;34685:350:::0;;:::o;4632:26::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4632:26:1;;-1:-1:-1;4632:26:1;:::o;25853:148::-;7371:6;;;;;-1:-1:-1;;;;;7371:6:1;7381:10;7371:20;7363:46;;;;-1:-1:-1;;;7363:46:1;;;;;;;:::i;:::-;25946:47:::1;25964:12;25978:14;25946:17;:47::i;:::-;25853:148:::0;;:::o;10152:61::-;10196:9;:7;:9::i;11019:119::-;11124:5;;-1:-1:-1;;;;;11103:16:1;;11076:7;11103:16;;;:7;:16;;;;;;11076:7;;11103:27;;:16;:20;:27::i;10739:87::-;10778:13;10811:7;10804:14;;;;;:::i;7838:1937::-;7371:6;;;;;-1:-1:-1;;;;;7371:6:1;7381:10;7371:20;7363:46;;;;-1:-1:-1;;;7363:46:1;;;;;;;:::i;:::-;7893:16:::1;::::0;-1:-1:-1;;7893:16:1::1;::::0;;::::1;-1:-1:-1::0;;;;;7893:16:1::1;:71:::0;7885:103:::1;;;::::0;-1:-1:-1;;;7885:103:1;;8581:2:2;7885:103:1::1;::::0;::::1;8563:21:2::0;8620:2;8600:18;;;8593:30;-1:-1:-1;;;8639:18:2;;;8632:49;8698:18;;7885:103:1::1;8379:343:2::0;7885:103:1::1;8037:16;:70:::0;;-1:-1:-1;;;;;;8037:70:1::1;::::0;::::1;::::0;;8137:155:::1;::::0;-1:-1:-1;;;8137:155:1;;8233:4:::1;8137:155;::::0;::::1;8939:34:2::0;8248:42:1::1;8989:18:2::0;;;8982:43;8157:42:1::1;::::0;8137:87:::1;::::0;8874:18:2;;8137:155:1::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8120:14;:172:::0;;-1:-1:-1;;;;;;8120:172:1::1;-1:-1:-1::0;;;;;8120:172:1;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;8400:3:1::1;:17:::0;8467:9:::1;::::0;8463:13:::1;::::0;8467:9:::1;;8463:2;:13;:::i;:::-;8449:27;::::0;:11:::1;:27;:::i;:::-;8428:18;:48:::0;;;8525:26:::1;::::0;8546:5:::1;8525:26;:::i;:::-;8505:17;:46:::0;8619:18:::1;::::0;8613:3:::1;::::0;:24:::1;::::0;8619:18;8613:24:::1;:::i;:::-;8606:3;;:32;;;;:::i;:::-;8595:7;:44:::0;;;8652:6:::1;:60:::0;;;-1:-1:-1;;;;;;8652:60:1;;::::1;;::::0;;8725:10:::1;:64:::0;;-1:-1:-1;;;;;;8725:64:1;;::::1;8746:42;8725:64;::::0;;;8800:11:::1;:65:::0;;;::::1;8822:42;8800:65;::::0;;8876:9:::1;:63:::0;;;::::1;8896:42;8876:63;::::0;;8950:10:::1;:64:::0;;;;::::1;8971:42;8950:64;::::0;;;9051:3:::1;9035:13;:19:::0;9082:3:::1;9065:14;:20:::0;9111:3:::1;9096:12;:18:::0;9141:3:::1;9125:13;:19:::0;;;9155:12:::1;:18:::0;9204:10:::1;9186:15;:28:::0;;;9225:15:::1;:28:::0;9313:3:::1;::::0;9286:4:::1;9266:26:::0;;:11:::1;:26:::0;;;;;;9293:16:::1;::::0;8652:60:::1;9293:16:::0;::::1;-1:-1:-1::0;;;;;9293:16:1::1;9266:44:::0;;;;;;;:50;9379:18:::1;::::0;9369:7:::1;:28:::0;;;9416:7;;:20:::1;::::0;:11:::1;:20::i;:::-;9408:5;:28:::0;;;9490:7:::1;::::0;9472:15:::1;9480:6:::0;;-1:-1:-1;;;;;9480:6:1;;;::::1;::::0;::::1;9472:15:::0;;:7:::1;:15;::::0;;;;:25;;;9536:9:::1;::::0;9559:5;;9536:9;::::1;::::0;9472:15;;-1:-1:-1;;;;;;;;;;;9513:53:1;9547:18:::1;::::0;9490:7;9547:11:::1;:18::i;:::-;9513:53;::::0;160:25:2;;;148:2;133:18;9513:53:1::1;;;;;;;9579:21;9593:6:::0;;-1:-1:-1;;;;;9593:6:1;;;::::1;::::0;::::1;9579:21:::0;;:13:::1;:21;::::0;;;;;;;9603:1:::1;9579:25:::0;;;;9629:11;;;::::1;9615:26:::0;;;;;:30;;;9670:9:::1;::::0;;;::::1;9656:24:::0;;;;;:28;;;9709:10:::1;9695:25:::0;;;;;:29;;;9757:4:::1;9735:28:::0;;;;:32;7838:1937::o;11206:157::-;11275:4;11292:40;11302:10;11314:9;11325:6;11292:9;:40::i;10221:183::-;7371:6;;;;;-1:-1:-1;;;;;7371:6:1;7381:10;7371:20;7363:46;;;;-1:-1:-1;;;7363:46:1;;;;;;;:::i;:::-;10281:13:::1;::::0;::::1;::::0;::::1;;;10277:120;;;10311:13;:21:::0;;-1:-1:-1;;10311:21:1::1;::::0;;10412:167::o;10277:120::-:1;10365:13;:20:::0;;-1:-1:-1;;10365:20:1::1;;;::::0;;10221:183::o;7437:377::-;1440:13:0;;;;;;;;:30;;-1:-1:-1;1458:12:0;;;;1457:13;1440:30;1432:89;;;;-1:-1:-1;;;1432:89:0;;11429:2:2;1432:89:0;;;11411:21:2;11468:2;11448:18;;;11441:30;11507:34;11487:18;;;11480:62;-1:-1:-1;;;11558:18:2;;;11551:44;11612:19;;1432:89:0;11227:410:2;1432:89:0;1534:19;1557:13;;;;;;1556:14;1581:101;;;;1616:13;:20;;-1:-1:-1;;1651:19:0;;;;;1581:101;7503:6:1::1;:15:::0;;-1:-1:-1;;;;;;7503:15:1::1;::::0;-1:-1:-1;;;;;7503:15:1;::::1;;;::::0;;7588:16:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;;;7588:16:1::1;::::0;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;7588:16:1::1;:::i;:::-;-1:-1:-1::0;7668:17:1::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;;;7668:17:1::1;::::0;;::::1;::::0;;;::::1;::::0;:7:::1;::::0;:17:::1;:::i;:::-;-1:-1:-1::0;7726:9:1::1;:14:::0;;-1:-1:-1;;7726:14:1::1;7738:2;7726:14;::::0;;1708:68:0;;;;1759:5;1743:21;;-1:-1:-1;;1743:21:0;;;1421:362;7437:377:1;:::o;34420:221::-;7371:6;;;;;-1:-1:-1;;;;;7371:6:1;7381:10;7371:20;7363:46;;;;-1:-1:-1;;;7363:46:1;;;;;;;:::i;:::-;34526:8:::1;34521:113;34540:17:::0;;::::1;34521:113;;;34608:5;;34614:3;34608:10;;;;;;;:::i;:::-;;;;;;;34581:13;:24;34595:4;;34600:3;34595:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34581:24:1::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;34581:24:1;:37;34559:5;::::1;::::0;::::1;:::i;:::-;;;;34521:113;;9783:304:::0;7371:6;;;;;-1:-1:-1;;;;;7371:6:1;7381:10;7371:20;7363:46;;;;-1:-1:-1;;;7363:46:1;;;;;;;:::i;:::-;9906:15:::1;;9888;:33;:70;;;;;9943:15;;9925;:33;9888:70;9880:105;;;::::0;-1:-1:-1;;;9880:105:1;;11844:2:2;9880:105:1::1;::::0;::::1;11826:21:2::0;11883:2;11863:18;;;11856:30;-1:-1:-1;;;11902:18:2;;;11895:52;11964:18;;9880:105:1::1;11642:346:2::0;9880:105:1::1;10000:15;:32:::0;;;;10047:15:::1;:32:::0;9783:304::o;1358:132::-;1416:7;1443:39;1447:1;1450;1443:39;;;;;;;;;;;;;;;;;:3;:39::i;1100:250::-;1158:7;1182:1;1187;1182:6;1178:47;;-1:-1:-1;1212:1:1;1205:8;;1178:47;1237:9;1249:5;1253:1;1249;:5;:::i;:::-;1237:17;-1:-1:-1;1282:1:1;1273:5;1277:1;1237:17;1273:5;:::i;:::-;:10;1265:56;;;;-1:-1:-1;;;1265:56:1;;12320:2:2;1265:56:1;;;12302:21:2;12359:2;12339:18;;;12332:30;12398:34;12378:18;;;12371:62;-1:-1:-1;;;12449:18:2;;;12442:31;12490:19;;1265:56:1;12118:397:2;30679:637:1;7021:6;:13;;-1:-1:-1;;7021:13:1;7030:4;7021:13;;;30756:73;;30811:7:::1;30756:73;30865:16;::::0;;30879:1:::1;30865:16:::0;;;;;::::1;::::0;;30841:21:::1;::::0;30865:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;30865:16:1::1;30841:40;;30910:4;30892;30897:1;30892:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;30892:23:1::1;;;-1:-1:-1::0;;;;;30892:23:1::1;;;::::0;::::1;30944:42;30926:4;30931:1;30926:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30926:61:1;;::::1;:7;::::0;;::::1;::::0;;;;;:61;31109:16:::1;::::0;31096:212:::1;::::0;-1:-1:-1;;;31096:212:1;;31109:16:::1;::::0;;::::1;::::0;;::::1;::::0;31096:82:::1;::::0;:212:::1;::::0;31193:11;;31219:1:::1;::::0;31235:4;;31262::::1;::::0;31282:15:::1;::::0;31096:212:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30745:571;7045:1;-1:-1:-1::0;7057:6:1;:14;;-1:-1:-1;;7057:14:1;;;30679:637::o;756:136::-;814:7;841:43;845:1;848;841:43;;;;;;;;;;;;;;;;;:3;:43::i;567:181::-;625:7;;657:5;661:1;657;:5;:::i;:::-;645:17;;686:1;681;:6;;673:46;;;;-1:-1:-1;;;673:46:1;;14040:2:2;673:46:1;;;14022:21:2;14079:2;14059:18;;;14052:30;14118:29;14098:18;;;14091:57;14165:18;;673:46:1;13838:351:2;32000:196:1;32135:12;;;32093:6;32135:12;;;;;;;;;-1:-1:-1;;;;;32104:13:1;;;32126:6;;32104:44;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32092:56;;;32167:1;32159:29;;;;-1:-1:-1;;;32159:29:1;;14675:2:2;32159:29:1;;;14657:21:2;14714:2;14694:18;;;14687:30;-1:-1:-1;;;14733:18:2;;;14726:45;14788:18;;32159:29:1;14473:339:2;12656:338:1;-1:-1:-1;;;;;12750:19:1;;12742:68;;;;-1:-1:-1;;;12742:68:1;;15019:2:2;12742:68:1;;;15001:21:2;15058:2;15038:18;;;15031:30;15097:34;15077:18;;;15070:62;-1:-1:-1;;;15148:18:2;;;15141:34;15192:19;;12742:68:1;14817:400:2;12742:68:1;-1:-1:-1;;;;;12829:21:1;;12821:68;;;;-1:-1:-1;;;12821:68:1;;15424:2:2;12821:68:1;;;15406:21:2;15463:2;15443:18;;;15436:30;15502:34;15482:18;;;15475:62;-1:-1:-1;;;15553:18:2;;;15546:32;15595:19;;12821:68:1;15222:398:2;12821:68:1;-1:-1:-1;;;;;12902:18:1;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;12954:32;;160:25:2;;;12954:32:1;;133:18:2;12954:32:1;;;;;;;12656:338;;;:::o;11687:546::-;11919:10;-1:-1:-1;;;;;11919:18:1;;;11915:266;;11987:10;32320:19;11970:200;;12069:36;12086:4;12092;12098:6;12069:16;:36::i;11970:200::-;12191:34;12208:4;12214:2;12218:6;12191:16;:34::i;900:192::-;986:7;1022:12;1014:6;;;;1006:29;;;;-1:-1:-1;;;1006:29:1;;;;;;;;:::i;:::-;-1:-1:-1;1046:9:1;1058:5;1062:1;1058;:5;:::i;:::-;1046:17;900:192;-1:-1:-1;;;;;900:192:1:o;26006:371::-;26088:12;26102;26118:50;26139:12;26153:14;26118:20;:50::i;:::-;26198:10;;26087:81;;-1:-1:-1;26087:81:1;-1:-1:-1;26183:50:1;;-1:-1:-1;;;;;26198:10:1;26218:4;26087:81;26183:14;:50::i;:::-;26273:7;26308;26328:37;26273:7;26308;26328:13;:37::i;:::-;26082:295;;;;26006:371;;:::o;20456:3460::-;20499:6;;;;20495:88;;;20456:3460::o;20495:88::-;20618:15;20599;;:34;20595:73;;20456:3460::o;20595:73::-;20708:7;;20687:17;;:28;20683:67;;20456:3460::o;20683:67::-;20979:9;20991:14;20979:26;;21111:14;21128:45;21171:1;21129:36;21149:15;;21129;:19;;:36;;;;:::i;21128:45::-;21111:62;-1:-1:-1;21202:37:1;21222:16;21111:62;21236:1;21222:13;:16::i;:::-;21202:15;;;:19;:37::i;:::-;21184:15;:55;21263:7;;21316:11;21252:8;21356:199;21381:17;:9;21395:2;21381:13;:17::i;:::-;21375:3;:23;21356:199;;;21482:57;21525:13;:4;21534:3;21525:8;:13::i;:::-;21482:38;21490:29;21508:10;21490:13;:4;21499:3;21490:8;:13::i;:29::-;21482:3;;:7;:38::i;:57::-;21476:63;-1:-1:-1;21400:5:1;;;;:::i;:::-;;;;21356:199;;;-1:-1:-1;21617:13:1;;-1:-1:-1;21593:21:1;21659:213;21684:25;21706:2;21684:17;:9;21698:2;21684:13;:17::i;:::-;:21;;:25::i;:::-;21678:3;:31;21659:213;;;21793:63;21842:13;:4;21851:3;21842:8;:13::i;21793:63::-;21787:69;-1:-1:-1;21711:5:1;;;;:::i;:::-;;;;21659:213;;;-1:-1:-1;21932:14:1;;-1:-1:-1;21910:19:1;21975:217;22000:30;22027:2;22000:22;:9;22014:7;22000:13;:22::i;:30::-;21994:3;:36;21975:217;;;22115:61;22162:13;:4;22171:3;22162:8;:13::i;22115:61::-;22109:67;-1:-1:-1;22032:5:1;;;;:::i;:::-;;;;21975:217;;;-1:-1:-1;22251:16:1;;-1:-1:-1;22230:18:1;22296:212;22321:27;:9;22335:12;22321:13;:27::i;:::-;22315:3;:33;22296:212;;;22432:60;22478:13;:4;22487:3;22478:8;:13::i;22432:60::-;22426:66;-1:-1:-1;22350:5:1;;;;:::i;:::-;;;;22296:212;;;-1:-1:-1;;22540:7:1;;;22583:13;;;;22615:7;;22567:3;;22615:16;;22567:3;22615:11;:16::i;:::-;22607:5;:24;22803:13;;;;;;;22799:1059;;;23006:5;;22986:14;;-1:-1:-1;;;;;22986:14:1;22833;22978:23;;;:7;:23;;;;;;22833:14;;22898:5;;22935;;22833:14;;22978:34;;:27;:34::i;:::-;22959:53;-1:-1:-1;23060:10:1;23073:23;23087:8;:1;23093;23087:5;:8::i;:::-;23073:9;;:13;:23::i;:::-;23060:36;-1:-1:-1;23127:27:1;23137:16;:9;23151:1;23137:13;:16::i;:::-;23127:5;;:9;:27::i;:::-;23119:35;-1:-1:-1;23185:23:1;23195:12;:5;23205:1;23195:9;:12::i;23185:23::-;23177:31;-1:-1:-1;23233:11:1;23247:12;:5;23257:1;23247:9;:12::i;:::-;23233:26;-1:-1:-1;23291:35:1;23302:23;23316:8;:1;23322;23316:5;:8::i;:::-;23302:9;;:13;:23::i;23291:35::-;23282:44;-1:-1:-1;23363:55:1;23416:1;23363:48;23282:44;23363:48;23390:8;:1;23416;23390:5;:8::i;:::-;23363:22;:11;23379:5;23363:15;:22::i;:::-;:26;;:36::i;:55::-;23351:67;-1:-1:-1;23351:67:1;23447:29;23470:5;23447:18;:11;23463:1;23447:15;:18::i;:29::-;:41;23443:182;;;23575:29;23598:5;23575:18;:11;23591:1;23575:15;:18::i;:29::-;23563:41;;23443:182;-1:-1:-1;;23688:14:1;;23704:10;;23673:53;;-1:-1:-1;;;;;;23688:14:1;;;;-1:-1:-1;23704:10:1;;-1:-1:-1;23716:9:1;23673:14;:53::i;:::-;23750:14;;;23741:31;;;-1:-1:-1;;;;;;23741:31:1;;;;-1:-1:-1;;;;;23750:14:1;;;;23741:29;;:31;;;;23750:14;;23741:31;;;;;;23750:14;;23741:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22818:966;22799:1059;;;23814:14;;;23835:10;;23805:41;;-1:-1:-1;;;23805:41:1;;-1:-1:-1;;;;;23835:10:1;;;23805:41;;;4317:51:2;;;;23814:14:1;;23805:29;;4290:18:2;;23805:41:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22799:1059;23900:7;;23875:33;;;23883:15;15799:25:2;;15855:2;15840:18;;15833:34;;;;23875:33:1;;15772:18:2;23875:33:1;;;;;;;20484:3432;;;;;20456:3460::o;1498:191::-;1584:7;1619:12;1612:5;1604:28;;;;-1:-1:-1;;;1604:28:1;;;;;;;;:::i;:::-;-1:-1:-1;1643:9:1;1655:5;1659:1;1655;:5;:::i;15506:2297::-;-1:-1:-1;;;;;15611:20:1;;15603:70;;;;-1:-1:-1;;;15603:70:1;;16080:2:2;15603:70:1;;;16062:21:2;16119:2;16099:18;;;16092:30;16158:34;16138:18;;;16131:62;-1:-1:-1;;;16209:18:2;;;16202:35;16254:19;;15603:70:1;15878:401:2;15603:70:1;-1:-1:-1;;;;;15692:23:1;;15684:71;;;;-1:-1:-1;;;15684:71:1;;16486:2:2;15684:71:1;;;16468:21:2;16525:2;16505:18;;;16498:30;16564:34;16544:18;;;16537:62;-1:-1:-1;;;16615:18:2;;;16608:33;16658:19;;15684:71:1;16284:399:2;15684:71:1;15787:11;;;15786:38;;-1:-1:-1;15818:6:1;;;;15786:38;:139;;;-1:-1:-1;;;;;;15898:21:1;;;;;;:13;:21;;;;;;15923:1;15898:26;15786:139;:200;;;-1:-1:-1;;;;;;15956:24:1;;;;;;:13;:24;;;;;;15984:1;15956:29;15786:200;15768:337;;;16029:41;16044:6;16052:9;16063:6;16029:14;:41::i;15768:337::-;16132:14;;-1:-1:-1;;;;;16132:14:1;16117:12;16167:15;16132:14;16167:9;:15::i;:::-;16157:25;;16242:4;-1:-1:-1;;;;;16232:14:1;:6;-1:-1:-1;;;;;16232:14:1;;16231:76;;;;16302:4;-1:-1:-1;;;;;16289:17:1;:9;-1:-1:-1;;;;;16289:17:1;;16231:76;16213:201;;;16360:42;16372:6;16380:9;16391:2;16395:6;16360:11;:42::i;:::-;16440:4;-1:-1:-1;;;;;16430:14:1;:6;-1:-1:-1;;;;;16430:14:1;;16426:82;;16487:9;:7;:9::i;:::-;16534:4;-1:-1:-1;;;;;16524:14:1;:6;-1:-1:-1;;;;;16524:14:1;;16520:199;;16607:22;16633:13;16643:2;16633:9;:13::i;:::-;16606:40;;16665:27;16674:17;16665:8;:27::i;:::-;16587:121;16520:199;16750:4;-1:-1:-1;;;;;16737:17:1;:9;-1:-1:-1;;;;;16737:17:1;;16733:413;;16791:21;16805:6;16791:13;:21::i;:::-;-1:-1:-1;;;;;16829:20:1;;16839:10;16829:20;16825:80;;16866:25;16880:10;16866:13;:25::i;:::-;16931:9;-1:-1:-1;;;;;16921:19:1;:6;-1:-1:-1;;;;;16921:19:1;;16917:139;;16961:10;-1:-1:-1;;;;;16961:23:1;;;16957:86;;17003:24;17017:9;17003:13;:24::i;:::-;17074:9;;;;;;;17070:65;;;17100:21;17114:6;17100:13;:21::i;:::-;-1:-1:-1;;;;;17167:20:1;;;;;;:12;:20;;;;;;;;17166:21;17158:52;;;;-1:-1:-1;;;17158:52:1;;16890:2:2;17158:52:1;;;16872:21:2;16929:2;16909:18;;;16902:30;-1:-1:-1;;;16948:18:2;;;16941:48;17006:18;;17158:52:1;16688:342:2;17158:52:1;17245:4;-1:-1:-1;;;;;17235:14:1;:6;-1:-1:-1;;;;;17235:14:1;;17231:94;;17293:20;17310:2;17293:16;:20::i;:::-;17337:15;17355:17;17366:5;;17355:6;:10;;:17;;;;:::i;:::-;-1:-1:-1;;;;;17401:15:1;;;;;;:7;:15;;;;;;17337:35;;-1:-1:-1;17401:28:1;;17337:35;17401:19;:28::i;:::-;-1:-1:-1;;;;;17383:15:1;;;;;;;:7;:15;;;;;:46;;;;17459:14;;;;17458:76;;;17529:4;-1:-1:-1;;;;;17516:17:1;:9;-1:-1:-1;;;;;17516:17:1;;17458:76;17440:211;;;17599:40;17608:6;17616:9;17627:2;17631:7;17599:8;:40::i;:::-;17589:50;;17440:211;-1:-1:-1;;;;;17682:18:1;;;;;;:7;:18;;;;;;:31;;17705:7;17682:22;:31::i;:::-;-1:-1:-1;;;;;17661:18:1;;;;;;;:7;:18;;;;;:52;;;;17769:5;;17729:47;;;;-1:-1:-1;;;;;;;;;;;17729:47:1;17757:18;;:7;;:11;:18::i;:::-;17729:47;;160:25:2;;;148:2;133:18;17729:47:1;;;;;;;17789:7;;;15506:2297;;;:::o;33260:760::-;33355:4;33361;33379:13;33394;33411:79;33431:42;33484:4;33411:11;:79::i;:::-;33378:112;;;;33508:12;33535;33564:19;33586:41;33592:14;33608:8;33618;33586:5;:41::i;:::-;33564:63;;33660:14;33642;:32;33638:337;;33713:14;;-1:-1:-1;33729:14:1;-1:-1:-1;33729:14:1;33638:337;;;33777:19;33799:41;33805:14;33821:8;33831;33799:5;:41::i;:::-;33777:63;;33880:14;33862;:32;;33855:40;;;;:::i;:::-;33932:14;-1:-1:-1;33948:14:1;;-1:-1:-1;33638:337:1;-1:-1:-1;33995:7:1;;-1:-1:-1;34004:7:1;-1:-1:-1;;;33260:760:1;;;;;;:::o;17811:349::-;17906:12;17921:17;17932:5;;17921:6;:10;;:17;;;;:::i;:::-;-1:-1:-1;;;;;17967:15:1;;;;;;:7;:15;;;;;;17906:32;;-1:-1:-1;17967:28:1;;17906:32;17967:19;:28::i;:::-;-1:-1:-1;;;;;17949:15:1;;;;;;;:7;:15;;;;;;:46;;;;18027:18;;;;;;;:31;;18050:7;18027:22;:31::i;:::-;-1:-1:-1;;;;;18006:18:1;;;;;;;:7;:18;;;;;;;:52;;;;18076:35;;;;;;-1:-1:-1;;;;;;;;;;;18076:35:1;;;18104:6;160:25:2;;148:2;133:18;;14:177;18076:35:1;;;;;;;;18146:7;17811:349;;;:::o;31353:580::-;7021:6;:13;;-1:-1:-1;;7021:13:1;7030:4;7021:13;;;31445:73;;31500:7:::1;31445:73;31528:70:::0;;31580:7:::1;31528:70;31657:14;::::0;31627:58:::1;::::0;31650:4:::1;::::0;-1:-1:-1;;;;;31657:14:1::1;31673:11:::0;31627:14:::1;:58::i;:::-;31702:12;31725:42;31702:66;;31786:4;-1:-1:-1::0;;;;;31780:19:1::1;;31807:9;31780:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;31846:14:1::1;::::0;;31825:47:::1;::::0;-1:-1:-1;;;31825:47:1;;-1:-1:-1;;;;;31846:14:1;;::::1;31825:47:::0;;::::1;8024:51:2::0;;;;8091:18;;;8084:34;;;31825:20:1;::::1;::::0;-1:-1:-1;31825:20:1::1;::::0;-1:-1:-1;7997:18:2;;;-1:-1:-1;31825:47:1::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;31892:14:1::1;::::0;;31883:31:::1;::::0;;-1:-1:-1;;;;;;31883:31:1;;;;-1:-1:-1;;;;;31892:14:1;;::::1;::::0;31883:29:::1;::::0;:31;;::::1;::::0;31892:14:::1;::::0;31883:31;;;;;;31892:14;;31883:31;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;31612:314;7045:1;-1:-1:-1::0;;7057:6:1;:14;;-1:-1:-1;;7057:14:1;;;31353:580::o;1697:130::-;1755:7;1782:37;1786:1;1789;1782:37;;;;;;;;;;;;;;;;;:3;:37::i;15094:348::-;15236:11;15250:31;15270:2;15274:6;15250:19;:31::i;:::-;15236:45;;15296:6;15306:1;15296:11;15292:48;;15322:7;;;15292:48;15370:4;15360:6;:14;;15352:68;;;;-1:-1:-1;;;15352:68:1;;17369:2:2;15352:68:1;;;17351:21:2;17408:2;17388:18;;;17381:30;17447:34;17427:18;;;17420:62;-1:-1:-1;;;17498:18:2;;;17491:39;17547:19;;15352:68:1;17167:405:2;15094:348:1;;;;;:::o;25235:607::-;25301:17;25322:1;25301:22;25297:59;;25235:607;:::o;25297:59::-;25685:69;25703:38;25735:5;25703:27;:17;25725:4;25703:21;:27::i;:38::-;25743:10;;-1:-1:-1;;;;;25743:10:1;25685:17;:69::i;:::-;25765;25783:38;25815:5;25783:27;:17;25805:4;25783:21;:27::i;25765:69::-;25235:607;:::o;13250:502::-;-1:-1:-1;;;;;;;13313:61:1;;;13309:129;;13250:502;:::o;13309:129::-;13462:14;;-1:-1:-1;;;;;13462:14:1;;;13452:24;;;;13448:90;;13250:502;:::o;13448:90::-;-1:-1:-1;;;;;13570:21:1;;;;;;:13;:21;;;;;;13600:15;;13570:26;;13594:2;13570:26;:::i;:::-;:45;;13562:99;;;;-1:-1:-1;;;13562:99:1;;17779:2:2;13562:99:1;;;17761:21:2;17818:2;17798:18;;;17791:30;17857:34;17837:18;;;17830:62;-1:-1:-1;;;17908:18:2;;;17901:39;17957:19;;13562:99:1;17577:405:2;13562:99:1;-1:-1:-1;;;;;13672:21:1;;;;;:13;:21;;;;;13696:15;13672:39;;13250:502::o;18632:1814::-;18708:14;;18688:7;;18698:25;;-1:-1:-1;;;;;18708:14:1;18698:9;:25::i;:::-;18760:19;;18688:35;;-1:-1:-1;18811:1:1;18788:24;;;18784:260;;18882:15;18853:19;;18875:4;18853:26;;;;:::i;:::-;:44;18849:184;;;18990:27;:25;:27::i;:::-;18968:49;;18849:184;19080:22;;19144:23;;19050:27;19219:44;:15;19144:23;19219:19;:44::i;:::-;19197:66;;19278:16;19297:27;19313:2;19317:6;19297:15;:27::i;:::-;19278:46;;19389:4;19372:14;:21;19368:352;;;19463:39;:22;19490:11;19463:26;:39::i;:::-;19438:64;;19368:352;;;19619:11;19594:36;;19675:15;19649:41;;19368:352;19182:549;;19780:22;19774:3;:28;19770:407;;;20032:1;20010:19;:23;20087:15;20065:19;:37;20140:25;;;;-1:-1:-1;;20140:25:1;19770:407;20308:22;:47;;;;20366:23;:49;-1:-1:-1;;;18632:1814:1:o;26422:935::-;26568:12;;:25;;26585:7;26568:16;:25::i;:::-;26550:15;:43;26546:82;;;26422:935;:::o;26546:82::-;26644:6;;;;26640:88;;;26422:935;:::o;26640:88::-;26760:10;;-1:-1:-1;;;;;26760:10:1;26734:15;26752:19;;;:7;:19;;;;;;26786:14;;26782:89;;26830:17;:10;26845:1;26830:14;:17::i;:::-;26817:30;;26782:89;26887:10;26901:1;26887:15;26883:54;;26919:7;26422:935;:::o;26883:54::-;26979:10;;-1:-1:-1;;;;;26979:10:1;26971:19;;;;:7;:19;;;;;;:35;;26995:10;26971:23;:35::i;:::-;26957:10;;-1:-1:-1;;;;;26957:10:1;26949:19;;;;:7;:19;;;;;;:57;;;;27058:4;27042:22;;;;:38;;27069:10;27042:26;:38::i;:::-;27033:4;27017:22;;;;:7;:22;;;;;:63;;;;27105:10;;27147:5;;-1:-1:-1;;;;;27105:10:1;;;;-1:-1:-1;;;;;;;;;;;27096:58:1;27132:21;;:10;;:14;:21::i;:::-;27096:58;;160:25:2;;;148:2;133:18;27096:58:1;;;;;;;27167:16;27186:21;27201:5;;27186:10;:14;;:21;;;;:::i;:::-;27167:40;-1:-1:-1;27235:21:1;27269:37;27167:40;27235:21;27269:13;:37::i;:::-;-1:-1:-1;;27334:15:1;27319:12;:30;-1:-1:-1;;26422:935:1:o;27476:2524::-;-1:-1:-1;;;;;27600:21:1;;27576:7;27600:21;;;:13;:21;;;;;;27625:1;27600:26;27596:74;;-1:-1:-1;27651:7:1;27644:14;;27596:74;27731:13;;27776:14;;27820:12;;27863:13;;27711:17;27905:66;27863:13;27905:48;27820:12;27905:48;27731:13;27776:14;27905:16;:31::i;:66::-;28001:14;;27889:82;;-1:-1:-1;;;;;;28001:14:1;;;27988:27;;;;27984:1336;;28112:9;;28076:3;;28112:9;;;;;28108:534;;;28146:19;;28169:1;28146:24;28142:187;;28242:3;28282:27;:11;28242:3;28282:15;:27::i;:::-;28268:41;;28172:157;28142:187;28372:14;28389:50;28437:1;28389:43;28409:2;28413:18;28425:5;;28413:7;:11;;:18;;;;:::i;:::-;28389:19;:43::i;:50::-;28372:67;-1:-1:-1;28476:26:1;:11;28372:67;28476:15;:26::i;:::-;28462:40;;28349:173;28553:11;28546:4;:18;28542:85;;;-1:-1:-1;28603:4:1;28542:85;28755:25;:8;28768:11;28755:12;:25::i;:::-;28744:36;;28017:775;27984:1336;;;28812:14;;-1:-1:-1;;;;;28812:14:1;;;28802:24;;;;28798:522;;28904:9;;28864:15;;28904:9;;;;;28900:345;;;28938:19;;28961:1;28938:24;28934:185;;29034:3;29073:26;:10;29034:3;29073:14;:26::i;:::-;29060:39;;28964:155;28934:185;29154:10;29143:8;:21;29139:91;;;-1:-1:-1;29202:8:1;29139:91;29284:24;:8;29297:10;29284:12;:24::i;:::-;29273:35;;28828:492;28798:522;29347:15;29365:43;29388:19;:12;29405:1;29388:16;:19::i;:::-;29365:18;:7;29377:5;29365:11;:18::i;:43::-;29453:10;;-1:-1:-1;;;;;29453:10:1;29445:19;;;;:7;:19;;;;;;29347:61;;-1:-1:-1;29445:35:1;;29347:61;29445:23;:35::i;:::-;29431:10;;;-1:-1:-1;;;;;29431:10:1;;;29423:19;;;;:7;:19;;;;;:57;;;;29517:10;29544:5;;29517:10;;;;29500:51;;;-1:-1:-1;;;;;;;;;;;29500:51:1;29529:21;;:10;;:14;:21::i;:::-;29500:51;;160:25:2;;;148:2;133:18;29500:51:1;;;;;;;-1:-1:-1;29598:13:1;29614:57;29637:33;29650:19;:12;29667:1;29650:16;:19::i;:::-;29637:8;;:12;:33::i;29614:57::-;29727:4;29711:22;;;;:7;:22;;;;;;29598:73;;-1:-1:-1;29711:36:1;;29598:73;29711:26;:36::i;:::-;29702:4;29686:22;;;;:7;:22;;;;;:61;;;;29812:5;;-1:-1:-1;;;;;29767:52:1;;;-1:-1:-1;;;;;;;;;;;29767:52:1;29799:19;;:8;;:12;:19::i;:::-;29767:52;;160:25:2;;;148:2;133:18;29767:52:1;;;;;;;-1:-1:-1;29858:14:1;29875:32;29898:8;29875:18;:7;29887:5;29875:11;:18::i;:32::-;29858:49;-1:-1:-1;29932:22:1;:7;29858:49;29932:11;:22::i;:::-;29922:32;;29843:123;29985:7;29978:14;;;;;;;27476:2524;;;;;;;:::o;32662:351::-;32738:13;32753;32780:14;32799:26;32810:6;32818;32799:10;:26::i;:::-;32779:46;;;32837:13;32852;32880:14;;;;;;;;;-1:-1:-1;;;;;32880:14:1;-1:-1:-1;;;;;32871:36:1;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32836:73;-1:-1:-1;;;;;32836:73:1;;;-1:-1:-1;;;;;32836:73:1;;;32953:6;-1:-1:-1;;;;;32943:16:1;:6;-1:-1:-1;;;;;32943:16:1;;:62;;32986:8;32996;32943:62;;;32963:8;32973;32943:62;32920:85;;;;-1:-1:-1;32662:351:1;-1:-1:-1;;;;;;32662:351:1:o;33018:214::-;33100:4;33121:7;33132:1;33121:12;33117:53;;-1:-1:-1;33157:1:1;33150:8;;33117:53;33189:35;33215:8;33189:21;:7;33201:8;33189:11;:21::i;1835:166::-;1921:7;1957:12;1949:6;1941:29;;;;-1:-1:-1;;;1941:29:1;;;;;;;;:::i;:::-;-1:-1:-1;1988:5:1;1992:1;1988;:5;:::i;14818:268::-;14892:4;14913:6;14923:1;14913:11;14909:50;;-1:-1:-1;14946:1:1;14939:8;;14909:50;15008:11;15022:22;15033:2;15037:6;15022:10;:22::i;30067:600::-;7021:6;:13;;-1:-1:-1;;7021:13:1;7030:4;7021:13;;;30154:70;;30206:7:::1;30154:70;30260:16;::::0;;30274:1:::1;30260:16:::0;;;;;::::1;::::0;;30236:21:::1;::::0;30260:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;30260:16:1::1;30236:40;;30305:42;30287:4;30292:1;30287:7;;;;;;;;:::i;:::-;;;;;;:61;-1:-1:-1::0;;;;;30287:61:1::1;;;-1:-1:-1::0;;;;;30287:61:1::1;;;::::0;::::1;30377:4;30359;30364:1;30359:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30359:23:1;;::::1;:7;::::0;;::::1;::::0;;;;;:23;30434:16:::1;::::0;30421:238:::1;::::0;-1:-1:-1;;;30421:238:1;;30434:16:::1;::::0;;::::1;::::0;;::::1;::::0;30421:82:::1;::::0;30511:9;;30421:238:::1;::::0;30536:1:::1;::::0;30552:4;;30571:2;;30633:15:::1;::::0;30421:238:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;30143:524;-1:-1:-1::0;;7057:6:1;:14;;-1:-1:-1;;7057:14:1;;;30067:600::o;18175:386::-;18367:1;18345:19;:23;;;18389:22;:26;;;18230:4;;18466:22;;:15;;:19;:22::i;:::-;18440:23;:48;-1:-1:-1;18552:1:1;;18175:386::o;14282:419::-;14347:4;;14374:11;:1;14380:4;14374:5;:11::i;:::-;14364:21;-1:-1:-1;14407:8:1;14418:13;:2;14425:5;14418:6;:13::i;:::-;14407:24;-1:-1:-1;14442:9:1;14454:22;14470:5;14454:11;:2;14407:24;14454:6;:11::i;:22::-;14442:34;-1:-1:-1;14522:9:1;14534:26;14548:11;:3;14556:2;14548:7;:11::i;:::-;14534:9;:2;14541:1;14534:6;:9::i;:26::-;14522:38;-1:-1:-1;14571:16:1;14590:11;14522:38;14590:4;:11;:::i;:::-;14571:30;-1:-1:-1;14626:28:1;14631:5;14571:30;14626:15;:28::i;:::-;14612:42;14282:419;-1:-1:-1;;;;;;;;14282:419:1:o;32383:270::-;32458:14;32474;32519:6;-1:-1:-1;;;;;32509:16:1;:6;-1:-1:-1;;;;;32509:16:1;;32501:61;;;;-1:-1:-1;;;32501:61:1;;19352:2:2;32501:61:1;;;19334:21:2;;;19371:18;;;19364:30;19430:34;19410:18;;;19403:62;19482:18;;32501:61:1;19150:356:2;32501:61:1;32601:6;-1:-1:-1;;;;;32592:15:1;:6;-1:-1:-1;;;;;32592:15:1;;:53;;32630:6;32638;32592:53;;;32611:6;32619;32592:53;32573:72;;;;-1:-1:-1;32383:270:1;-1:-1:-1;;;32383:270:1:o;13902:327::-;13962:4;;13989:11;:1;13995:4;13989:5;:11::i;:::-;13979:21;-1:-1:-1;14022:8:1;14033:13;:2;14040:5;14033:6;:13::i;:::-;14022:24;-1:-1:-1;14057:9:1;14069:13;:2;14076:5;14069:6;:13::i;:::-;14057:25;-1:-1:-1;14128:9:1;14140:11;:3;14148:2;14140:7;:11::i;:::-;14128:23;-1:-1:-1;14162:11:1;14176;14128:23;14176:4;:11;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;196:180:2;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;-1:-1:-1;347:23:2;;196:180;-1:-1:-1;196:180:2:o;381:258::-;453:1;463:113;477:6;474:1;471:13;463:113;;;553:11;;;547:18;534:11;;;527:39;499:2;492:10;463:113;;;594:6;591:1;588:13;585:48;;;-1:-1:-1;;629:1:2;611:16;;604:27;381:258::o;644:383::-;793:2;782:9;775:21;756:4;825:6;819:13;868:6;863:2;852:9;848:18;841:34;884:66;943:6;938:2;927:9;923:18;918:2;910:6;906:15;884:66;:::i;:::-;1011:2;990:15;-1:-1:-1;;986:29:2;971:45;;;;1018:2;967:54;;644:383;-1:-1:-1;;644:383:2:o;1032:367::-;1095:8;1105:6;1159:3;1152:4;1144:6;1140:17;1136:27;1126:55;;1177:1;1174;1167:12;1126:55;-1:-1:-1;1200:20:2;;1243:18;1232:30;;1229:50;;;1275:1;1272;1265:12;1229:50;1312:4;1304:6;1300:17;1288:29;;1372:3;1365:4;1355:6;1352:1;1348:14;1340:6;1336:27;1332:38;1329:47;1326:67;;;1389:1;1386;1379:12;1404:770;1523:6;1531;1539;1547;1600:2;1588:9;1579:7;1575:23;1571:32;1568:52;;;1616:1;1613;1606:12;1568:52;1656:9;1643:23;1685:18;1726:2;1718:6;1715:14;1712:34;;;1742:1;1739;1732:12;1712:34;1781:70;1843:7;1834:6;1823:9;1819:22;1781:70;:::i;:::-;1870:8;;-1:-1:-1;1755:96:2;-1:-1:-1;1958:2:2;1943:18;;1930:32;;-1:-1:-1;1974:16:2;;;1971:36;;;2003:1;2000;1993:12;1971:36;;2042:72;2106:7;2095:8;2084:9;2080:24;2042:72;:::i;:::-;1404:770;;;;-1:-1:-1;2133:8:2;-1:-1:-1;;;;1404:770:2:o;2179:131::-;-1:-1:-1;;;;;2254:31:2;;2244:42;;2234:70;;2300:1;2297;2290:12;2315:315;2383:6;2391;2444:2;2432:9;2423:7;2419:23;2415:32;2412:52;;;2460:1;2457;2450:12;2412:52;2499:9;2486:23;2518:31;2543:5;2518:31;:::i;:::-;2568:5;2620:2;2605:18;;;;2592:32;;-1:-1:-1;;;2315:315:2:o;2827:247::-;2886:6;2939:2;2927:9;2918:7;2914:23;2910:32;2907:52;;;2955:1;2952;2945:12;2907:52;2994:9;2981:23;3013:31;3038:5;3013:31;:::i;3079:456::-;3156:6;3164;3172;3225:2;3213:9;3204:7;3200:23;3196:32;3193:52;;;3241:1;3238;3231:12;3193:52;3280:9;3267:23;3299:31;3324:5;3299:31;:::i;:::-;3349:5;-1:-1:-1;3406:2:2;3391:18;;3378:32;3419:33;3378:32;3419:33;:::i;:::-;3079:456;;3471:7;;-1:-1:-1;;;3525:2:2;3510:18;;;;3497:32;;3079:456::o;3540:437::-;3626:6;3634;3687:2;3675:9;3666:7;3662:23;3658:32;3655:52;;;3703:1;3700;3693:12;3655:52;3743:9;3730:23;3776:18;3768:6;3765:30;3762:50;;;3808:1;3805;3798:12;3762:50;3847:70;3909:7;3900:6;3889:9;3885:22;3847:70;:::i;:::-;3936:8;;3821:96;;-1:-1:-1;3540:437:2;-1:-1:-1;;;;3540:437:2:o;4379:248::-;4447:6;4455;4508:2;4496:9;4487:7;4483:23;4479:32;4476:52;;;4524:1;4521;4514:12;4476:52;-1:-1:-1;;4547:23:2;;;4617:2;4602:18;;;4589:32;;-1:-1:-1;4379:248:2:o;5410:388::-;5478:6;5486;5539:2;5527:9;5518:7;5514:23;5510:32;5507:52;;;5555:1;5552;5545:12;5507:52;5594:9;5581:23;5613:31;5638:5;5613:31;:::i;:::-;5663:5;-1:-1:-1;5720:2:2;5705:18;;5692:32;5733:33;5692:32;5733:33;:::i;:::-;5785:7;5775:17;;;5410:388;;;;;:::o;5803:380::-;5882:1;5878:12;;;;5925;;;5946:61;;6000:4;5992:6;5988:17;5978:27;;5946:61;6053:2;6045:6;6042:14;6022:18;6019:38;6016:161;;6099:10;6094:3;6090:20;6087:1;6080:31;6134:4;6131:1;6124:15;6162:4;6159:1;6152:15;6016:161;;5803:380;;;:::o;6188:337::-;6390:2;6372:21;;;6429:2;6409:18;;;6402:30;-1:-1:-1;;;6463:2:2;6448:18;;6441:43;6516:2;6501:18;;6188:337::o;6530:127::-;6591:10;6586:3;6582:20;6579:1;6572:31;6622:4;6619:1;6612:15;6646:4;6643:1;6636:15;6662:118;6748:5;6741:13;6734:21;6727:5;6724:32;6714:60;;6770:1;6767;6760:12;6785:241;6841:6;6894:2;6882:9;6873:7;6869:23;6865:32;6862:52;;;6910:1;6907;6900:12;6862:52;6949:9;6936:23;6968:28;6990:5;6968:28;:::i;7031:127::-;7092:10;7087:3;7083:20;7080:1;7073:31;7123:4;7120:1;7113:15;7147:4;7144:1;7137:15;7163:135;7202:3;7223:17;;;7220:43;;7243:18;;:::i;:::-;-1:-1:-1;7290:1:2;7279:13;;7163:135::o;7661:184::-;7731:6;7784:2;7772:9;7763:7;7759:23;7755:32;7752:52;;;7800:1;7797;7790:12;7752:52;-1:-1:-1;7823:16:2;;7661:184;-1:-1:-1;7661:184:2:o;8129:245::-;8196:6;8249:2;8237:9;8228:7;8224:23;8220:32;8217:52;;;8265:1;8262;8255:12;8217:52;8297:9;8291:16;8316:28;8338:5;8316:28;:::i;9036:251::-;9106:6;9159:2;9147:9;9138:7;9134:23;9130:32;9127:52;;;9175:1;9172;9165:12;9127:52;9207:9;9201:16;9226:31;9251:5;9226:31;:::i;9292:422::-;9381:1;9424:5;9381:1;9438:270;9459:7;9449:8;9446:21;9438:270;;;9518:4;9514:1;9510:6;9506:17;9500:4;9497:27;9494:53;;;9527:18;;:::i;:::-;9577:7;9567:8;9563:22;9560:55;;;9597:16;;;;9560:55;9676:22;;;;9636:15;;;;9438:270;;;9442:3;9292:422;;;;;:::o;9719:806::-;9768:5;9798:8;9788:80;;-1:-1:-1;9839:1:2;9853:5;;9788:80;9887:4;9877:76;;-1:-1:-1;9924:1:2;9938:5;;9877:76;9969:4;9987:1;9982:59;;;;10055:1;10050:130;;;;9962:218;;9982:59;10012:1;10003:10;;10026:5;;;10050:130;10087:3;10077:8;10074:17;10071:43;;;10094:18;;:::i;:::-;-1:-1:-1;;10150:1:2;10136:16;;10165:5;;9962:218;;10264:2;10254:8;10251:16;10245:3;10239:4;10236:13;10232:36;10226:2;10216:8;10213:16;10208:2;10202:4;10199:12;10195:35;10192:77;10189:159;;;-1:-1:-1;10301:19:2;;;10333:5;;10189:159;10380:34;10405:8;10399:4;10380:34;:::i;:::-;10450:6;10446:1;10442:6;10438:19;10429:7;10426:32;10423:58;;;10461:18;;:::i;:::-;10499:20;;9719:806;-1:-1:-1;;;9719:806:2:o;10530:140::-;10588:5;10617:47;10658:4;10648:8;10644:19;10638:4;10617:47;:::i;10675:168::-;10715:7;10781:1;10777;10773:6;10769:14;10766:1;10763:21;10758:1;10751:9;10744:17;10740:45;10737:71;;;10788:18;;:::i;:::-;-1:-1:-1;10828:9:2;;10675:168::o;10848:127::-;10909:10;10904:3;10900:20;10897:1;10890:31;10940:4;10937:1;10930:15;10964:4;10961:1;10954:15;10980:112;11012:1;11038;11028:35;;11043:18;;:::i;:::-;-1:-1:-1;11077:9:2;;10980:112::o;11097:125::-;11137:4;11165:1;11162;11159:8;11156:34;;;11170:18;;:::i;:::-;-1:-1:-1;11207:9:2;;11097:125::o;11993:120::-;12033:1;12059;12049:35;;12064:18;;:::i;:::-;-1:-1:-1;12098:9:2;;11993:120::o;12652:461::-;12705:3;12743:5;12737:12;12770:6;12765:3;12758:19;12796:4;12825:2;12820:3;12816:12;12809:19;;12862:2;12855:5;12851:14;12883:1;12893:195;12907:6;12904:1;12901:13;12893:195;;;12972:13;;-1:-1:-1;;;;;12968:39:2;12956:52;;13028:12;;;;13063:15;;;;13004:1;12922:9;12893:195;;;-1:-1:-1;13104:3:2;;12652:461;-1:-1:-1;;;;;12652:461:2:o;13118:582::-;13417:6;13406:9;13399:25;13460:6;13455:2;13444:9;13440:18;13433:34;13503:3;13498:2;13487:9;13483:18;13476:31;13380:4;13524:57;13576:3;13565:9;13561:19;13553:6;13524:57;:::i;:::-;-1:-1:-1;;;;;13617:32:2;;;;13612:2;13597:18;;13590:60;-1:-1:-1;13681:3:2;13666:19;13659:35;13516:65;13118:582;-1:-1:-1;;;13118:582:2:o;13705:128::-;13745:3;13776:1;13772:6;13769:1;13766:13;13763:39;;;13782:18;;:::i;:::-;-1:-1:-1;13818:9:2;;13705:128::o;14194:274::-;14323:3;14361:6;14355:13;14377:53;14423:6;14418:3;14411:4;14403:6;14399:17;14377:53;:::i;:::-;14446:16;;;;;14194:274;-1:-1:-1;;14194:274:2:o;17035:127::-;17096:10;17091:3;17087:20;17084:1;17077:31;17127:4;17124:1;17117:15;17151:4;17148:1;17141:15;17987:188;18066:13;;-1:-1:-1;;;;;18108:42:2;;18098:53;;18088:81;;18165:1;18162;18155:12;18088:81;17987:188;;;:::o;18180:450::-;18267:6;18275;18283;18336:2;18324:9;18315:7;18311:23;18307:32;18304:52;;;18352:1;18349;18342:12;18304:52;18375:40;18405:9;18375:40;:::i;:::-;18365:50;;18434:49;18479:2;18468:9;18464:18;18434:49;:::i;:::-;18424:59;;18526:2;18515:9;18511:18;18505:25;18570:10;18563:5;18559:22;18552:5;18549:33;18539:61;;18596:1;18593;18586:12;18539:61;18619:5;18609:15;;;18180:450;;;;;:::o;18635:510::-;18906:6;18895:9;18888:25;18949:3;18944:2;18933:9;18929:18;18922:31;18869:4;18970:57;19022:3;19011:9;19007:19;18999:6;18970:57;:::i;:::-;-1:-1:-1;;;;;19063:32:2;;;;19058:2;19043:18;;19036:60;-1:-1:-1;19127:2:2;19112:18;19105:34;18962:65;18635:510;-1:-1:-1;;18635:510:2:o

Swarm Source

ipfs://938c35768074a6f318ed3bc2beeeae1f87e295b54970e333707884c4833f3518
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.