ETH Price: $2,536.50 (-4.18%)
Gas: 1 Gwei

Token

Charge (CHRG)
 

Overview

Max Total Supply

100,000,000,000 CHRG

Holders

231

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
69,920,000 CHRG

Value
$0.00
0x93228d6bc5f2002022291a481b692d2b9773dea4
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
charge

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 100 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-02
*/

// SPDX-License-Identifier: GNU
pragma solidity ^0.8.4;

interface IERC20 {
  function totalSupply() external view returns (uint256);

  function decimals() external view returns (uint8);

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

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

  function getowner() external view returns (address);

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

  function transfer(address recipient, uint256 amount) external returns (bool);

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

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

  function transferFrom(
    address sender,
    address recipient,
    uint256 amount
  ) external returns (bool);

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

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

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

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

  function decimals() external pure returns (uint8);

  function totalSupply() external view returns (uint256);

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

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

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

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

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

  function DOMAIN_SEPARATOR() external view returns (bytes32);

  function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

  function feeTo() external view returns (address);

  function feeToSetter() external view returns (address);

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

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

  function allPairsLength() external view returns (uint256);

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

  function setFeeTo(address) external;

  function setFeeToSetter(address) external;
}

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

  function addLiquidityETH(
    address token,
    uint256 amountTokenDesired,
    uint256 amountTokenMin,
    uint256 amountETHMin,
    address to,
    uint256 deadline
  )
    external
    payable
    returns (
      uint256 amountToken,
      uint256 amountETH,
      uint256 liquidity
    );

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

  function removeLiquidityETH(
    address token,
    uint256 liquidity,
    uint256 amountTokenMin,
    uint256 amountETHMin,
    address to,
    uint256 deadline
  ) external returns (uint256 amountToken, uint256 amountETH);

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

  function removeLiquidityETHWithPermit(
    address token,
    uint256 liquidity,
    uint256 amountTokenMin,
    uint256 amountETHMin,
    address to,
    uint256 deadline,
    bool approveMax,
    uint8 v,
    bytes32 r,
    bytes32 s
  ) external returns (uint256 amountToken, uint256 amountETH);

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

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

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

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

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

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

  function factory() external pure returns (address);

  function WETH() external pure returns (address);

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

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

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

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

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

interface IUniswapRouter02 is IUniswapRouter01 {
  function removeLiquidityETHSupportingFeeOnTransferTokens(
    address token,
    uint256 liquidity,
    uint256 amountTokenMin,
    uint256 amountETHMin,
    address to,
    uint256 deadline
  ) external returns (uint256 amountETH);

  function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
    address token,
    uint256 liquidity,
    uint256 amountTokenMin,
    uint256 amountETHMin,
    address to,
    uint256 deadline,
    bool approveMax,
    uint8 v,
    bytes32 r,
    bytes32 s
  ) external returns (uint256 amountETH);

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

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

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

contract protected {

    mapping (address => bool) is_auth;

    function authorized(address addy) public view returns(bool) {
        return is_auth[addy];
    }

    function set_authorized(address addy, bool booly) public onlyAuth {
        is_auth[addy] = booly;
    }

    modifier onlyAuth() {
        require( is_auth[msg.sender] || msg.sender==owner, "not owner");
        _;
    }

    address owner;
    modifier onlyowner {
        require(msg.sender==owner, "not owner");
        _;
    }

    bool locked;
    modifier safe() {
        require(!locked, "reentrant");
        locked = true;
        _;
        locked = false;
    }
}


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

  function name() external pure returns (string memory);
  function symbol() external pure returns (string memory);
  function decimals() external pure returns (uint8);
  function totalSupply() external view returns (uint);
  function balanceOf(address owner) external view returns (uint);
  function allowance(address owner, address spender) external view returns (uint);

  function approve(address spender, uint value) external returns (bool);
  function transfer(address to, uint value) external returns (bool);
  function transferFrom(address from, address to, uint value) external returns (bool);

  function DOMAIN_SEPARATOR() external view returns (bytes32);
  function PERMIT_TYPEHASH() external pure returns (bytes32);
  function nonces(address owner) external view returns (uint);

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

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

  function MINIMUM_LIQUIDITY() external pure returns (uint);
  function factory() external view returns (address);
  function token0() external view returns (address);
  function token1() external view returns (address);
  function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
  function price0CumulativeLast() external view returns (uint);
  function price1CumulativeLast() external view returns (uint);
  function kLast() external view returns (uint);

  function mint(address to) external returns (uint liquidity);
  function burn(address to) external returns (uint amount0, uint amount1);
  function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
  function skim(address to) external;
  function sync() external;
}

contract smart {
    address router_address = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    IUniswapRouter02 router = IUniswapRouter02(router_address);

    function create_weth_pair(address token) private returns (address, IUniswapV2Pair) {
       address pair_address = IUniswapFactory(router.factory()).createPair(token, router.WETH());
       return (pair_address, IUniswapV2Pair(pair_address));
    }

    function get_weth_reserve(address pair_address) private  view returns(uint, uint) {
        IUniswapV2Pair pair = IUniswapV2Pair(pair_address);
        uint112 token_reserve;
        uint112 native_reserve;
        uint32 last_timestamp;
        (token_reserve, native_reserve, last_timestamp) = pair.getReserves();
        return (token_reserve, native_reserve);
    }

    function get_weth_price_impact(address token, uint amount, bool sell) public view returns(uint) {
        address pair_address = IUniswapFactory(router.factory()).getPair(token, router.WETH());
        (uint res_token, uint res_weth) = get_weth_reserve(pair_address);
        uint impact;
        if(sell) {
            impact = (amount * 100) / res_token;
        } else {
            impact = (amount * 100) / res_weth;
        }
        return impact;
    }
}

contract charge is IERC20, protected, smart {

  mapping(address => uint256) private _balances;
  mapping(address => mapping(address => uint256)) private _allowances;
  mapping(address => uint256) private _sellLock;

  // Exclusions
  mapping(address => bool) isBalanceFree;
  mapping(address => bool) isMarketMakerTaxFree;
  mapping(address => bool) isMarketingTaxFree;
  mapping(address => bool) isRewardTaxFree;
  mapping(address => bool) isAuthorized;
  mapping(address => bool) isWhitelisted;
  mapping (address => bool)  private _excluded;
  mapping (address => bool)  private _whiteList;
  mapping (address => bool)  private _excludedFromSellLock;
  mapping (address => bool)  private _excludedFromDistributing;
  uint excludedAmount;
  mapping(address => bool) public _blacklist;
  mapping(address => bool) public isOpen;
  bool isBlacklist = true;
  string private constant _name = "Charge";
  string private constant _symbol = "CHRG";
  uint8 private constant _decimals = 9;
  uint256 public constant InitialSupply = 100 * 10**9 * 10**_decimals;
  uint8 public constant BalanceLimitDivider = 50;
  uint16 public constant SellLimitDivider = 100;
  uint16 public constant MaxSellLockTime = 10 seconds;
  mapping(uint8 => mapping(address => bool)) public is_claimable;
  address public constant UniswapRouterAddy =
    0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
  address public constant Dead = 0x000000000000000000000000000000000000dEaD;
  address public rewardWallet_one =0xeFdE792d107ea9d3133839d8468cB599E4C33974;
  address public rewardWallet_two = 0xeFdE792d107ea9d3133839d8468cB599E4C33974;
  address public marketingWallet = 0xeFdE792d107ea9d3133839d8468cB599E4C33974;
  address public marketMakerWallet = 0xeFdE792d107ea9d3133839d8468cB599E4C33974;
  bool blacklist_enabled = true;
  mapping(address => uint8) is_slot;
  uint256 private _circulatingSupply = InitialSupply;
  uint256 public balanceLimit = _circulatingSupply;
  uint256 public sellLimit = _circulatingSupply;
  uint256 public qtyTokenToSwap = (sellLimit * 10) / 100;
  uint256 public swapTreshold = qtyTokenToSwap;
  uint256 public portionLimit;
  bool manualTokenToSwap = false;
  uint256 manualQtyTokenToSwap = (sellLimit * 10) / 100;
  bool sellAll = false;
  bool sellPeg = true;
  bool botKiller = true;
  uint8 public constant MaxTax = 15;
  uint8 private _buyTax;
  uint8 private _sellTax;
  uint8 private _portionTax;
  uint8 private _transferTax;
  uint8 private _marketMakerTax;
  uint8 private _liquidityTax;
  uint8 private _marketingTax;
  uint8 private _stakeTax_one;
  uint8 private _stakeTax_two;

  uint8 public impactTreshold;
  bool public enabledImpactTreshold;

  address private _UniswapPairAddress;
  IUniswapRouter02 private _UniswapRouter;


  constructor() {
    uint256 deployerBalance = _circulatingSupply;
    _balances[msg.sender] = deployerBalance;
    emit Transfer(address(0), msg.sender, deployerBalance);

    _UniswapRouter = IUniswapRouter02(UniswapRouterAddy);

    _UniswapPairAddress = IUniswapFactory(_UniswapRouter.factory()).createPair(
      address(this),
      _UniswapRouter.WETH()
    );

    _excludedFromSellLock[rewardWallet_one] = true;
    _excludedFromSellLock[rewardWallet_two] = true;
    _excludedFromSellLock[marketingWallet] = true;
    _excludedFromSellLock[marketMakerWallet] = true;
    _excludedFromDistributing[0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D] = true;

    balanceLimit = InitialSupply / BalanceLimitDivider;
    sellLimit = InitialSupply / SellLimitDivider;

    sellLockTime = 2 seconds;

    _buyTax = 0;
    _sellTax = 12;
    _portionTax = 20;
    _transferTax = 12;

    _liquidityTax = 10;
    _marketingTax = 10;
    _marketMakerTax = 30;
    _stakeTax_one = 33;
    _stakeTax_two = 17;

    impactTreshold = 2;

    _excluded[msg.sender] = true;

    _excludedFromDistributing[address(_UniswapRouter)] = true;
    _excludedFromDistributing[_UniswapPairAddress] = true;
    _excludedFromDistributing[address(this)] = true;
    _excludedFromDistributing[0x000000000000000000000000000000000000dEaD] = true;

    owner = msg.sender;
    is_auth[owner] = true;
  }

 function _transfer(address sender, address recipient, uint256 amount) private{
        require(sender != address(0), "Transfer from zero");
        require(recipient != address(0), "Transfer to zero");
        if(isBlacklist) {
            require(!_blacklist[sender] && !_blacklist[recipient], "Blacklisted!");
        }


        bool isExcluded = (_excluded[sender] || _excluded[recipient] || is_auth[sender] || is_auth[recipient]);

        bool isContractTransfer=(sender==address(this) || recipient==address(this));

        bool isLiquidityTransfer = ((sender == _UniswapPairAddress && recipient == UniswapRouterAddy)
        || (recipient == _UniswapPairAddress && sender == UniswapRouterAddy));


        if(isContractTransfer || isLiquidityTransfer || isExcluded ){
            _feelessTransfer(sender, recipient, amount,  is_slot[sender]);
        }
      
      if (!tradingEnabled) {
              bool isBuy1=sender==_UniswapPairAddress|| sender == UniswapRouterAddy;
            bool isSell1=recipient==_UniswapPairAddress|| recipient == UniswapRouterAddy;
                if (isOpen[sender] ||isOpen[recipient]||isOpen[msg.sender]) {

                        _taxedTransfer(sender,recipient,amount,isBuy1,isSell1);}
                    else{

                    if(botKiller) {
                        emit Transfer(sender,recipient,0);
                        return;
                    }
                    else {
                        require(tradingEnabled,"trading not yet enabled");
                    }
                }}
           
           else{     
            bool isBuy=sender==_UniswapPairAddress|| sender == UniswapRouterAddy;
            bool isSell=recipient==_UniswapPairAddress|| recipient == UniswapRouterAddy;
            _taxedTransfer(sender,recipient,amount,isBuy,isSell);}

        }
    

  

  function get_paid(address addy) public view returns(uint) {
        uint8 slot = is_slot[addy];
        return (profitPerShare[(slot*1)] * _balances[addy]);
  }


  function _taxedTransfer(
    address sender,
    address recipient,
    uint256 amount,
    bool isBuy,
    bool isSell
  ) private {
    uint8 slot = is_slot[sender];
    uint256 recipientBalance = _balances[recipient];
    uint256 senderBalance = _balances[sender];
    require(senderBalance >= amount, "Transfer exceeds balance");
    uint8 tax;

    uint8 impact = uint8(get_weth_price_impact(address(this), amount, isSell));

    if (isSell) {
      if (!_excludedFromSellLock[sender]) {
        require(
          _sellLock[sender] <= block.timestamp || sellLockDisabled,
          "Seller in sellLock"
        );

        _sellLock[sender] = block.timestamp + sellLockTime;
      }

      require(amount <= sellLimit, "Dump protection");
      uint availableSupply = InitialSupply - _balances[Dead] - _balances[address(this)];
      uint portionControl = (availableSupply/100) * portionLimit;
      if(amount >= portionControl) {
        tax = _portionTax;
      } else {
        tax = _sellTax;
        if(enabledImpactTreshold) {
            if(impact > impactTreshold) {
                tax = tax + (impactTreshold - impact);
            }
        }
      }
    } else if (isBuy) {
      if (!isBalanceFree[recipient]) {
        require(recipientBalance + amount <= balanceLimit, "whale protection");
      }
      tax = _buyTax;
    } else {
      if (!isBalanceFree[recipient]) {
        require(recipientBalance + amount <= balanceLimit, "whale protection");
      }
      require(recipientBalance + amount <= balanceLimit, "whale protection");

      if (!_excludedFromSellLock[sender])
        require(
          _sellLock[sender] <= block.timestamp || sellLockDisabled,
          "Sender in Lock"
        );
      tax = _transferTax;
    }

    if (
      (sender != _UniswapPairAddress) &&
      (!manualConversion) &&
      (!_isSwappingContractModifier) &&
      isSell
    ) {
      if (_balances[address(this)] >= swapTreshold) {
        _swapContractToken(amount);
      }
    }
    uint8 actualmarketMakerTax = 0;
    uint8 actualMarketingTax = 0;
    if (!isMarketingTaxFree[sender]) {
      actualMarketingTax = _marketingTax;
    }
    if (!isMarketMakerTaxFree[sender]) {
      actualmarketMakerTax = _marketMakerTax;
    }
    uint8 stakeTax;
    if (slot == 0) {
      stakeTax = _stakeTax_one;
    } else if (slot == 1) {
      stakeTax = _stakeTax_two;
    }

    uint256 contractToken = _calculateFee(
      amount,
      tax,
        _liquidityTax +
        actualMarketingTax +
        actualmarketMakerTax +
        _stakeTax_one +
        _stakeTax_two
    );
    uint256 taxedAmount = amount - (contractToken);

    _removeToken(sender, amount, slot);

    _balances[address(this)] += contractToken;

    _addToken(recipient, taxedAmount, slot);

    emit Transfer(sender, recipient, taxedAmount);
  }

  function _feelessTransfer(
    address sender,
    address recipient,
    uint256 amount,
    uint8 slot
  ) private {
    uint256 senderBalance = _balances[sender];
    require(senderBalance >= amount, "Transfer exceeds balance");

    _removeToken(sender, amount, slot);

    _addToken(recipient, amount, slot);

    emit Transfer(sender, recipient, amount);
  }

  function _calculateFee(
    uint256 amount,
    uint8 tax,
    uint8 taxPercent
  ) private pure returns (uint256) {
    return (amount * tax * taxPercent) / 10000;
  }

  bool private _isWithdrawing;
  uint256 private constant DistributionMultiplier = 2**64;
  mapping(uint8 => uint256) public profitPerShare;
  uint256 public totalDistributingReward;
  uint256 public oneDistributingReward;
  uint256 public twoDistributingReward;
  uint256 public totalPayouts;
  uint256 public marketingBalance;
  uint256 public marketMakerBalance;
  mapping(uint8 => uint256) rewardBalance;
  mapping(address => mapping(uint256 => uint256)) private alreadyPaidShares;
  mapping(address => uint256) private toERCaid;

  function isExcludedFromDistributing(address addr) public view returns (bool) {
    return _excludedFromDistributing[addr];
  }

  function _getTotalShares() public view returns (uint256) {
    uint256 shares = _circulatingSupply;
    shares -=  excludedAmount;
    return shares;
  }

  function _addToken(
    address addr,
    uint256 amount,
    uint8 slot
  ) private {
    uint256 newAmount = _balances[addr] + amount;

    if (_excludedFromDistributing[addr]) {
      _balances[addr] = newAmount;
      return;
    }

    uint256 payment = _newDividentsOf(addr, slot);

    alreadyPaidShares[addr][slot] = profitPerShare[slot] * newAmount;

    toERCaid[addr] += payment;

    _balances[addr] = newAmount;
  }

  function _removeToken(
    address addr,
    uint256 amount,
    uint8 slot
  ) private {
    uint256 newAmount = _balances[addr] - amount;

    if (_excludedFromDistributing[addr]) {
      _balances[addr] = newAmount;
      return;
    }

    uint256 payment = _newDividentsOf(addr, slot);

    _balances[addr] = newAmount;

    alreadyPaidShares[addr][slot] = profitPerShare[slot] * newAmount;

    toERCaid[addr] += payment;
  }

  function _newDividentsOf(address staker, uint8 slot)
    private
    view
    returns (uint256)
  {
    uint256 fullPayout = profitPerShare[slot] * _balances[staker];

    if (fullPayout < alreadyPaidShares[staker][slot]) return 0;
    return
      (fullPayout - alreadyPaidShares[staker][slot]) / DistributionMultiplier;
  }

  function _distributeStake(uint256 ETHamount) private {
    uint256 marketingSplit = (ETHamount * _marketingTax) / 100;
    uint256 marketMakerSplit = (ETHamount * _marketMakerTax) / 100;
    uint256 amount_one = (ETHamount * _stakeTax_one) / 100;
    uint256 amount_two = (ETHamount * _stakeTax_two) / 100;
    marketingBalance += marketingSplit;
    marketMakerBalance += marketMakerSplit;

    if (amount_one > 0) {
      totalDistributingReward += amount_one;
      oneDistributingReward += amount_one;
      uint256 totalShares = _getTotalShares();
      if (totalShares == 0) {
        marketingBalance += amount_one;
      } else {
        profitPerShare[0] += ((amount_one * DistributionMultiplier) /
          totalShares);
        rewardBalance[0] += amount_one;
      }
    }

    if (amount_two > 0) {
      totalDistributingReward += amount_two;
      twoDistributingReward += amount_two;
      uint256 totalShares = _getTotalShares();
      if (totalShares == 0) {
        marketingBalance += amount_two;
      } else {
        profitPerShare[1] += ((amount_two * DistributionMultiplier) /
          totalShares);
        rewardBalance[1] += amount_two;
      }
    }

  }

  event OnWithdrawFarmedToken(uint256 amount, address recipient);

  ///@dev Claim tokens correspondant to a slot, if enabled
  function claimFarmedToken(
    address addr,
    address tkn,
    uint8 slot
  ) private {
    if (slot == 1) {
      require(isAuthorized[addr], "You cant retrieve it");
    }
    require(!_isWithdrawing);
    require(is_claimable[slot][tkn], "Not enabled");
    _isWithdrawing = true;
    uint256 amount;
    if (_excludedFromDistributing[addr]) {
      amount = toERCaid[addr];
      toERCaid[addr] = 0;
    } else {
      uint256 newAmount = _newDividentsOf(addr, slot);

      alreadyPaidShares[addr][slot] = profitPerShare[slot] * _balances[addr];

      amount = toERCaid[addr] + newAmount;
      toERCaid[addr] = 0;
    }
    if (amount == 0) {
      _isWithdrawing = false;
      return;
    }
    totalPayouts += amount;
    address[] memory path = new address[](2);
    path[0] = _UniswapRouter.WETH();
    path[1] = tkn;
    _UniswapRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{
      value: amount
    }(0, path, addr, block.timestamp);

    emit OnWithdrawFarmedToken(amount, addr);
    _isWithdrawing = false;
  }

  uint256 public totalLPETH;
  bool private _isSwappingContractModifier;
  modifier lockTheSwap() {
    _isSwappingContractModifier = true;
    _;
    _isSwappingContractModifier = false;
  }

  function _swapContractToken(uint256 sellAmount)
    private
    lockTheSwap
  {
    uint256 contractBalance = _balances[address(this)];
    uint16 totalTax = _liquidityTax +  _stakeTax_one + _stakeTax_two;

    uint256 tokenToSwap = (sellLimit * 10) / 100;
    if (manualTokenToSwap) {
      tokenToSwap = manualQtyTokenToSwap;
    } 

    bool prevSellPeg = sellPeg;
    if (sellPeg) {
      if (tokenToSwap > sellAmount) {
        tokenToSwap = sellAmount / 2;
      }
    }
    sellPeg = prevSellPeg;
    if (sellAll) {
    tokenToSwap = contractBalance - 1;
  }
    

    if (contractBalance < tokenToSwap || totalTax == 0) {
      return;
    }

    uint256 tokenForLiquidity = (tokenToSwap * _liquidityTax) / totalTax;
    uint256 tokenForMarketing = (tokenToSwap * _marketingTax) / totalTax;
    uint256 tokenForMarketMaker = (tokenToSwap * _marketMakerTax) / totalTax;
    uint256 swapToken = tokenForLiquidity +
      tokenForMarketing +
      tokenForMarketMaker;
    // Avoid solidity imprecisions
    if (swapToken >= tokenToSwap) {
      tokenForMarketMaker -= (tokenToSwap - (swapToken));
    }

    uint256 liqToken = tokenForLiquidity / 2;
    uint256 liqETHToken = tokenForLiquidity - liqToken;

    swapToken = liqETHToken + tokenForMarketing + tokenForMarketMaker;

    uint256 initialETHBalance = address(this).balance;
    _swapTokenForETH(swapToken);
    uint256 newETH = (address(this).balance - initialETHBalance);

    uint256 liqETH = (newETH * liqETHToken) / swapToken;
    _addLiquidity(liqToken, liqETH);

    _distributeStake(address(this).balance - initialETHBalance);
  }

  function _swapTokenForETH(uint256 amount) private {
    _approve(address(this), address(_UniswapRouter), amount);
    address[] memory path = new address[](2);
    path[0] = address(this);
    path[1] = _UniswapRouter.WETH();
    _UniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
      amount,
      0,
      path,
      address(this),
      block.timestamp
    );
  }

  function _addLiquidity(uint256 tokenamount, uint256 ETHamount) private {
    totalLPETH += ETHamount;
    _approve(address(this), address(_UniswapRouter), tokenamount);
    _UniswapRouter.addLiquidityETH{value: ETHamount}(
      address(this),
      tokenamount,
      0,
      0,
      address(this),
      block.timestamp
    );
  }

  function getLimits() public view returns (uint256 balance, uint256 sell) {
    return (balanceLimit / 10**_decimals, sellLimit / 10**_decimals);
  }

  function getTaxes()
    public
    view
    returns (
      uint256 marketingTax,
      uint256 marketMakerTax,
      uint256 liquidityTax,
      uint256 stakeTax_one,
        uint256 stakeTax_two,
 uint256 buyTax,
      uint256 sellTax,
      uint256 transferTax
    )
  {
    return (
      _marketingTax,
      _marketMakerTax,
      _liquidityTax,
      _stakeTax_one,
      _stakeTax_two,
      _buyTax,
      _sellTax,
      _transferTax
    );
  }

  function getWhitelistedStatus(address AddressToCheck)
    public
    view
    returns (bool)
  {
    return _whiteList[AddressToCheck];
  }

  function getAddressSellLockTimeInSeconds(address AddressToCheck)
    public
    view
    returns (uint256)
  {
    uint256 lockTime = _sellLock[AddressToCheck];
    if (lockTime <= block.timestamp) {
      return 0;
    }
    return lockTime - block.timestamp;
  }

  function getSellLockTimeInSeconds() public view returns (uint256) {
    return sellLockTime;
  }

  ///@dev Reset cooldown for an address
  function AddressResetSellLock() public {
    _sellLock[msg.sender] = block.timestamp + sellLockTime;
  }

  ///@dev Retrieve slot 1
  function FarmedTokenWithdrawSlotOne(address tkn) public {
    claimFarmedToken(msg.sender, tkn, 0);
  }

  
  ///@dev Retrieve slot 2
  function FarmedTokenWithdrawSlotTwo(address tkn) public {
    claimFarmedToken(msg.sender, tkn, 1);
  }

  function getDividends(address addr, uint8 slot)
    public
    view
    returns (uint256)
  {
    if (_excludedFromDistributing[addr]) return toERCaid[addr];
    return _newDividentsOf(addr, slot) + toERCaid[addr];
  }

  bool public sellLockDisabled;
  uint256 public sellLockTime;
  bool public manualConversion;
 
  ///@dev Airdrop tokens
  function airdropAddresses(
    address[] memory addys,
    address token,
    uint256 qty
  ) public onlyAuth {
    uint256 single_drop = qty / addys.length;
    IERC20 airtoken = IERC20(token);
    bool sent;
    for (uint256 i; i <= (addys.length - 1); i++) {
      sent = airtoken.transfer(addys[i], single_drop);
      require(sent);
      sent = false;
    }
  }

  ///@dev Airdrop a N of addresses
  function airdropAddressesNative(address[] memory addys)
    public
    payable
    onlyAuth
  {
    uint256 qty = msg.value;
    uint256 single_drop = qty / addys.length;
    bool sent;
    for (uint256 i; i <= (addys.length - 1); i++) {
      sent = payable(addys[i]).send(single_drop);
      require(sent);
      sent = false;
    }
  }

  ///@dev Enable pools for a token
  function ControlEnabledClaims(
    uint8 slot,
    address tkn,
    bool booly
  ) public onlyAuth {
    is_claimable[slot][tkn] = booly;
  }

  ///@dev Rekt all the snipers
  function ControlBotKiller(bool booly) public onlyAuth {
    botKiller = booly;
  }

  ///@dev Minimum tokens to sell
  function ControlSetSwapTreshold(uint256 treshold) public onlyAuth {
    swapTreshold = treshold * 10**_decimals;
  }

  ///@dev Exclude from distribution
  function ControlExcludeFromDistributing(address addr, uint8 slot)
    public
    onlyAuth
  {
    require(_excludedFromDistributing[addr]);
    uint256 newDividents = _newDividentsOf(addr, slot);
    alreadyPaidShares[addr][slot] = _balances[addr] * profitPerShare[slot];
    toERCaid[addr] += newDividents;
    _excludedFromDistributing[addr] = true;
    excludedAmount += _balances[addr];
  }

  ///@dev Include into distribution
  function ControlIncludeToDistributing(address addr, uint8 slot)
    public
    onlyAuth
  {
    require(_excludedFromDistributing[addr]);
    _excludedFromDistributing[addr] = false;
    excludedAmount -= _balances[addr];

    alreadyPaidShares[addr][slot] = _balances[addr] * profitPerShare[slot];
  }

  ///@dev Take out the marketing balance
  function ControlWithdrawMarketingETH() public onlyAuth {
    uint256 amount = marketingBalance;
    marketingBalance = 0;
    (bool sent, ) = marketingWallet.call{value: (amount)}("");
    require(sent, "withdraw failed");
  }

  ///@dev Peg sells to the tx
  function ControlSwapSetSellPeg(bool setter) public onlyAuth {
    sellPeg = setter;
  }


  ///@dev Disable tax reward for address
  function ControlSetRewardTaxFree(address addy, bool booly) public onlyAuth {
    isRewardTaxFree[addy] = booly;
  }

  ///@dev Disable address balance limit
  function ControlSetBalanceFree(address addy, bool booly) public onlyAuth {
    isBalanceFree[addy] = booly;
  }

  ///@dev Enable or disable manual sell
  function ControlSwapSetManualLiqSell(bool setter) public onlyAuth {
    manualTokenToSwap = setter;
  }

  ///@dev Turn sells into manual
  function ControlSwapSetManualLiqSellTokens(uint256 amount) public onlyAuth {
    require(amount > 1 && amount < 100000000, "Values between 1 and 100000000");
    manualQtyTokenToSwap = amount * 10**_decimals;
  }

  ///@dev Disable auto sells
  function ControlSwapSwitchManualETHConversion(bool manual) public onlyAuth {
    manualConversion = manual;
  }

  ///@dev Set cooldown on or off (ONCE)
  function ControlDisableSellLock(bool disabled) public onlyAuth {
    sellLockDisabled = disabled;
  }

  ///@dev Set cooldown
  function ControlSetSellLockTime(uint256 sellLockSeconds) public onlyAuth {
    require(sellLockSeconds <= MaxSellLockTime, "Sell Lock time too high");
    sellLockTime = sellLockSeconds;
  }


  ///@dev Set taxes
  function ControlSetTaxes(
    uint8 buyTax,
    uint8 sellTax,
    uint8 portionTax,
    uint8 transferTax
  ) public onlyAuth {
    require(
      buyTax <= MaxTax && sellTax <= MaxTax && transferTax <= MaxTax,
      "taxes higher than max tax"
    );

    _buyTax = buyTax;
    _sellTax = sellTax;
    _portionTax = portionTax;
    _transferTax = transferTax;
  }

  function ControlSetShares(
    uint8 marketingTaxes,
    uint8 marketMakerTaxes,
    uint8 liquidityTaxes,
    uint8 stakeTaxes_one,
    uint8 stakeTaxes_two) public onlyAuth {

     uint8 totalTax = marketingTaxes +
      marketMakerTaxes +
      liquidityTaxes +
      stakeTaxes_one +
      stakeTaxes_two;
    require(totalTax == 100, "total taxes needs to equal 100%");

    require(marketingTaxes <= 15, "Max 15%");
    require(marketMakerTaxes <= 15, "Max 15%");
    require(stakeTaxes_one <= 15, "Max 15%");
    require(stakeTaxes_two <= 15, "Max 15%");

    _marketingTax = marketingTaxes;
    _marketMakerTax = marketMakerTaxes;
    _liquidityTax = liquidityTaxes;
    _stakeTax_one = stakeTaxes_one;
    _stakeTax_two = stakeTaxes_two;
  }

  ///@dev Manually sell and create LP
  function ControlCreateLPandETH() public onlyAuth {
    _swapContractToken(192919291929192919291929192919291929);
  }

  ///@dev Manually sell all tokens gathered
  function ControlSellAllTokens() public onlyAuth {
    sellAll = true;
    _swapContractToken(192919291929192919291929192919291929);
    sellAll = false;
  }

  ///@dev Free from fees
  function ControlExcludeAccountFromFees(address account) public onlyAuth {
    _excluded[account] = true;
  }

  ///@dev Include in fees
  function ControlIncludeAccountToFees(address account) public onlyAuth {
    _excluded[account] = true;
  }

  ///@dev Exclude from cooldown
  function ControlExcludeAccountFromSellLock(address account) public onlyAuth {
    _excludedFromSellLock[account] = true;
  }

  ///@dev Enable cooldown
  function ControlIncludeAccountToSellLock(address account) public onlyAuth {
    _excludedFromSellLock[account] = true;
  }

  ///@dev Enable or disable pool 2 for an address
  function ControlIncludeAccountToSubset(address account, bool booly)
    public
    onlyAuth
  {
    isAuthorized[account] = booly;
  }

  ///@dev Control all the tx, buy and sell limits
  function ControlUpdateLimits(uint256 newBalanceLimit, uint256 newSellLimit)
    public
    onlyAuth
  {
    newBalanceLimit = newBalanceLimit * 10**_decimals;
    newSellLimit = newSellLimit * 10**_decimals;

    uint256 targetBalanceLimit = _circulatingSupply / BalanceLimitDivider;
    uint256 targetSellLimit = _circulatingSupply / SellLimitDivider;
    require(
      (newBalanceLimit >= targetBalanceLimit),
      "newBalanceLimit needs to be at least target"
    );
    require(
      (newSellLimit >= targetSellLimit),
      "newSellLimit needs to be at least target"
    );
    balanceLimit = newBalanceLimit;
    sellLimit = newSellLimit;
  }

  bool public tradingEnabled;
  address private _liquidityTokenAddress;


  function setMarketingWallet(address addy) public onlyAuth {
    marketingWallet = addy;
    _excludedFromSellLock[marketingWallet] = true;
  }
  function setMarketMakingWallet(address addy) public onlyAuth {
    marketMakerWallet = addy;
    _excludedFromSellLock[marketMakerWallet] = true;
  }
    function setSlotOneWallet(address addy) public onlyAuth {
    rewardWallet_one = addy;
    _excludedFromSellLock[rewardWallet_one] = true;
  }
    function setSlotTwoWallet(address addy) public onlyAuth {
    rewardWallet_two = addy;
    _excludedFromSellLock[rewardWallet_two] = true;
  }

  ///@dev Start/stop trading
  function SetupEnableTrading(bool booly) public onlyAuth {
    tradingEnabled = booly;
  }

  ///@dev Define a new liquidity pair
  function SetupLiquidityTokenAddress(address liquidityTokenAddress)
    public
    onlyAuth
  {
    _liquidityTokenAddress = liquidityTokenAddress;
  }

  ///@dev Add to WL
  function SetupAddToWhitelist(address addressToAdd) public onlyAuth {
    _whiteList[addressToAdd] = true;
  }

  ///@dev Remove from whitelist
  function SetupRemoveFromWhitelist(address addressToRemove) public onlyAuth {
    _whiteList[addressToRemove] = false;
  }

  ///@dev Take back tokens stuck into the contract
  function rescueTokens(address tknAddress) public onlyAuth {
    IERC20 token = IERC20(tknAddress);
    uint256 ourBalance = token.balanceOf(address(this));
    require(ourBalance > 0, "No tokens in our balance");
    token.transfer(msg.sender, ourBalance);
  }

  ///@dev Disable PERMANENTLY blacklist functions
  function disableBlacklist() public onlyAuth {
    isBlacklist = false;
  }

  ///@dev Blacklist someone
  function setBlacklistedAddress(address toBlacklist) public onlyAuth {
    _blacklist[toBlacklist] = true;
  }

  ///@dev Remove from blacklist
  function removeBlacklistedAddress(address toRemove) public onlyAuth {
    _blacklist[toRemove] = false;
  }

  ///@dev Block or unblock an address
 /* function setisOpen(address addy, bool booly) public onlyAuth {
    isOpen[addy] = booly;
  }*/
    function setisOpenArry(address[] calldata addy, bool[] calldata booly) public onlyAuth {
        for(uint256 i; i < addy.length; i++){
            isOpen[addy[i]] = booly[i];
        }
        }

  function ToggleImpactTreshold( uint8 inty , bool booly) public onlyAuth {
      impactTreshold = inty;
	enabledImpactTreshold = booly;
  }

 

  ///@dev Remove the balance remaining in the contract
  function ControlRemoveRemainingETH() public onlyAuth {
    (bool sent, ) = owner.call{value: (address(this).balance)}("");
    require(sent);
  }

  receive() external payable {}

  fallback() external payable {}

  function getowner() external view override returns (address) {
    return owner;
  }

  function name() external pure override returns (string memory) {
    return _name;
  }

  function symbol() external pure override returns (string memory) {
    return _symbol;
  }

  function decimals() external pure override returns (uint8) {
    return _decimals;
  }

  function totalSupply() external view override returns (uint256) {
    return _circulatingSupply;
  }

  function balanceOf(address account) external view override returns (uint256) {
    return _balances[account];
  }

  function transfer(address recipient, uint256 amount)
    external
    override
    returns (bool)
  {
    _transfer(msg.sender, recipient, amount);
    return true;
  }

  function allowance(address _owner, address spender)
    external
    view
    override
    returns (uint256)
  {
    return _allowances[_owner][spender];
  }

  function approve(address spender, uint256 amount)
    external
    override
    returns (bool)
  {
    _approve(msg.sender, spender, amount);
    return true;
  }

  function _approve(
    address _owner,
    address spender,
    uint256 amount
  ) private {
    require(_owner != address(0), "Approve from zero");
    require(spender != address(0), "Approve to zero");
    _allowances[_owner][spender] = amount;
    emit Approval(_owner, spender, amount);
  }

  function transferFrom(
    address sender,
    address recipient,
    uint256 amount
  ) external override returns (bool) {
    _transfer(sender, recipient, amount);
    uint256 currentAllowance = _allowances[sender][msg.sender];
    require(currentAllowance >= amount, "Transfer > allowance");
    _approve(sender, msg.sender, currentAllowance - amount);
    return true;
  }

  function increaseAllowance(address spender, uint256 addedValue)
    external
    returns (bool)
  {
    _approve(
      msg.sender,
      spender,
      _allowances[msg.sender][spender] + addedValue
    );
    return true;
  }

  function decreaseAllowance(address spender, uint256 subtractedValue)
    external
    returns (bool)
  {
    uint256 currentAllowance = _allowances[msg.sender][spender];
    require(currentAllowance >= subtractedValue, "<0 allowance");
    _approve(msg.sender, spender, currentAllowance - subtractedValue);
    return true;
  }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"OnWithdrawFarmedToken","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":"AddressResetSellLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"BalanceLimitDivider","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"booly","type":"bool"}],"name":"ControlBotKiller","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ControlCreateLPandETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"disabled","type":"bool"}],"name":"ControlDisableSellLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"slot","type":"uint8"},{"internalType":"address","name":"tkn","type":"address"},{"internalType":"bool","name":"booly","type":"bool"}],"name":"ControlEnabledClaims","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"ControlExcludeAccountFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"ControlExcludeAccountFromSellLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint8","name":"slot","type":"uint8"}],"name":"ControlExcludeFromDistributing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"ControlIncludeAccountToFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"ControlIncludeAccountToSellLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"booly","type":"bool"}],"name":"ControlIncludeAccountToSubset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint8","name":"slot","type":"uint8"}],"name":"ControlIncludeToDistributing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ControlRemoveRemainingETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ControlSellAllTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"},{"internalType":"bool","name":"booly","type":"bool"}],"name":"ControlSetBalanceFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"},{"internalType":"bool","name":"booly","type":"bool"}],"name":"ControlSetRewardTaxFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellLockSeconds","type":"uint256"}],"name":"ControlSetSellLockTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"marketingTaxes","type":"uint8"},{"internalType":"uint8","name":"marketMakerTaxes","type":"uint8"},{"internalType":"uint8","name":"liquidityTaxes","type":"uint8"},{"internalType":"uint8","name":"stakeTaxes_one","type":"uint8"},{"internalType":"uint8","name":"stakeTaxes_two","type":"uint8"}],"name":"ControlSetShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"treshold","type":"uint256"}],"name":"ControlSetSwapTreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"buyTax","type":"uint8"},{"internalType":"uint8","name":"sellTax","type":"uint8"},{"internalType":"uint8","name":"portionTax","type":"uint8"},{"internalType":"uint8","name":"transferTax","type":"uint8"}],"name":"ControlSetTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"setter","type":"bool"}],"name":"ControlSwapSetManualLiqSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ControlSwapSetManualLiqSellTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"setter","type":"bool"}],"name":"ControlSwapSetSellPeg","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"manual","type":"bool"}],"name":"ControlSwapSwitchManualETHConversion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBalanceLimit","type":"uint256"},{"internalType":"uint256","name":"newSellLimit","type":"uint256"}],"name":"ControlUpdateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ControlWithdrawMarketingETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Dead","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tkn","type":"address"}],"name":"FarmedTokenWithdrawSlotOne","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tkn","type":"address"}],"name":"FarmedTokenWithdrawSlotTwo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"InitialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxSellLockTime","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SellLimitDivider","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addressToAdd","type":"address"}],"name":"SetupAddToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"booly","type":"bool"}],"name":"SetupEnableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"liquidityTokenAddress","type":"address"}],"name":"SetupLiquidityTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addressToRemove","type":"address"}],"name":"SetupRemoveFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"inty","type":"uint8"},{"internalType":"bool","name":"booly","type":"bool"}],"name":"ToggleImpactTreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"UniswapRouterAddy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getTotalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addys","type":"address[]"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"airdropAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addys","type":"address[]"}],"name":"airdropAddressesNative","outputs":[],"stateMutability":"payable","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":"addy","type":"address"}],"name":"authorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balanceLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enabledImpactTreshold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"AddressToCheck","type":"address"}],"name":"getAddressSellLockTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint8","name":"slot","type":"uint8"}],"name":"getDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLimits","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellLockTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTaxes","outputs":[{"internalType":"uint256","name":"marketingTax","type":"uint256"},{"internalType":"uint256","name":"marketMakerTax","type":"uint256"},{"internalType":"uint256","name":"liquidityTax","type":"uint256"},{"internalType":"uint256","name":"stakeTax_one","type":"uint256"},{"internalType":"uint256","name":"stakeTax_two","type":"uint256"},{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","type":"uint256"},{"internalType":"uint256","name":"transferTax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"AddressToCheck","type":"address"}],"name":"getWhitelistedStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"}],"name":"get_paid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"sell","type":"bool"}],"name":"get_weth_price_impact","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getowner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"impactTreshold","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isExcludedFromDistributing","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"address","name":"","type":"address"}],"name":"is_claimable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualConversion","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketMakerBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketMakerWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"oneDistributingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"portionLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"profitPerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"qtyTokenToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toRemove","type":"address"}],"name":"removeBlacklistedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tknAddress","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardWallet_one","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardWallet_two","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLockDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toBlacklist","type":"address"}],"name":"setBlacklistedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"}],"name":"setMarketMakingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"}],"name":"setSlotOneWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"}],"name":"setSlotTwoWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"},{"internalType":"bool","name":"booly","type":"bool"}],"name":"set_authorized","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addy","type":"address[]"},{"internalType":"bool[]","name":"booly","type":"bool[]"}],"name":"setisOpenArry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalDistributingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalLPETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPayouts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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"},{"inputs":[],"name":"twoDistributingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260028054737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031991821681179092556003805482169092179091556014805460ff191660011790556016805473efde792d107ea9d3133839d8468cb599e4c3397490831681179091556017805483168217905560188054909216179055601980546001600160a81b0319167401efde792d107ea9d3133839d8468cb599e4c33974179055620000b16009600a620005d7565b620000c29064174876e80062000698565b601b55601b54601c55601b54601d556064601d54600a620000e4919062000698565b620000f091906200056b565b601e819055601f556021805460ff19169055601d546064906200011590600a62000698565b6200012191906200056b565b6022556023805462ffffff1916620101001790553480156200014257600080fd5b50601b54336000818152600460209081526040808320859055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3602580546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b158015620001ea57600080fd5b505afa158015620001ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000225919062000539565b6001600160a01b031663c9c6539630602560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200028357600080fd5b505afa15801562000298573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002be919062000539565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200030757600080fd5b505af11580156200031c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000342919062000539565b602480546001600160a01b0319166001600160a01b0392831617905560165481166000908152600f60209081526040808320805460ff19908116600190811790925560175486168552828520805482168317905560185486168552828520805482168317905560195490951684529083208054851682179055737a250d5630b4cf539739df2c5dacb4c659f2488d909252601090527feb1861b62122c39d7846b597c3c20bac261ab9032a26ee7d64c4c7f875977df880549092161790556032620004106009600a620005d7565b620004219064174876e80062000698565b6200042d91906200056b565b601c556064620004406009600a620005d7565b620004519064174876e80062000698565b6200045d91906200056b565b601d55506002603255602380546301000000600160681b0319166c0211210a0a1e0c140c00000000179055336000818152600d60209081526040808320805460ff1990811660019081179092556025546001600160a01b039081168652601085528386208054831684179055602454168552828520805482168317905530855282852080548216831790557f9e93e1db4a1f807cc22b2aecf4deeb0bf5745f1ecb319e87c68c5624c0fa6b69805482168317905581546001600160a01b03191686178255948452918390529091208054909216179055620006d0565b6000602082840312156200054c57600080fd5b81516001600160a01b03811681146200056457600080fd5b9392505050565b6000826200058957634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115620005cf578160001904821115620005b357620005b3620006ba565b80851615620005c157918102915b93841c939080029062000593565b509250929050565b60006200056460ff841683600082620005f35750600162000692565b81620006025750600062000692565b81600181146200061b5760028114620006265762000646565b600191505062000692565b60ff8411156200063a576200063a620006ba565b50506001821b62000692565b5060208310610133831016604e8410600b84101617156200066b575081810a62000692565b6200067783836200058e565b80600019048211156200068e576200068e620006ba565b0290505b92915050565b6000816000190483118215151615620006b557620006b5620006ba565b500290565b634e487b7160e01b600052601160045260246000fd5b61555e80620006e06000396000f3fe60806040526004361061052d5760003560e01c806373babfe6116102ab578063b76289b81161016f578063e117ff6e116100d1578063eb8e88631161008d578063eb8e88631461117b578063ec8bb4f414610b0f578063ef8a4a8114611190578063f80683ae146111b0578063f88b0e46146111d0578063fe0174bd146111e6578063ffe94e4f1461120457005b8063e117ff6e14610b2f578063e46b9df4146110fb578063e52fb9ec1461111b578063e69e03ee14611131578063e77bf5f814611146578063ea43915e1461116657005b8063d42d65091161012b578063d42d650914610fe6578063d8e8de3414610ffc578063d9f1dd4114611035578063da68eeb614611055578063db09034814611075578063dd62ed3e14611095578063e00aee41146110db57005b8063b76289b814610f16578063b918161114610f36578063bb733d4e14610f6f578063bcbe95bb14610f85578063c56f4ff514610fa5578063c6ec02fb14610fc657005b80638eecb63011610218578063a457c2d7116101d4578063a457c2d714610e3e578063a5740b2b14610e5e578063a9059cbb14610e7e578063a921783714610e9e578063aab286fe14610eb3578063afbfaf8714610ec8578063b70a829314610f0357005b80638eecb63014610d6b5780638fec412f14610d8b57806395d89b4114610da1578063965f8a8814610dce578063a20623ce14610dee578063a25af82614610e1e57005b806382c4767b1161026757806382c4767b14610cbc57806386d0ada814610cd25780638708516c14610cec5780638728ecd114610d0c578063887c60fb14610d2c5780638eb26ecd14610d4b57005b806373babfe614610c1057806374dc3fac14610c2657806375f0a87414610c46578063762bb28214610c665780637acfe0ec14610c7c5780637bcaa42114610c9c57005b806339509351116103f25780635110af051161035f57806361172f951161031b57806361172f9514610b0f57806363d8291a14610b2f57806367d84c2514610b4f5780636f89e40914610b7057806370798ca514610b9a57806370a0823114610bba57806371259fb514610bf057005b80635110af0514610a3c57806352187e5514610a695780635575e68314610a8957806358780a8214610ab957806358e5536514610ad95780635d098b3814610aef57005b8063470bf673116103ae578063470bf6731461099c57806348e53164146109bc5780634ada218b146109d15780634cdaf0ae146109f05780634d97ba7514610a105780634f91e48c14610a2657005b806339509351146108e85780633cc39b7a146109085780633d8dbf5d1461091e5780634089b1701461093e5780634394c0ec146109545780634464ddd01461097c57005b80632772f1751161049b578063313ce56711610457578063313ce567146108075780633190c5061461081b57806331b242d41461083b5780633328b7211461085b5780633478154b1461087b578063378c715814610890578063378c8ada146108c857005b80632772f175146106b85780632973ef2d146106d85780632bfe8742146107675780632bff1192146107875780632dd66eee146107a7578063311a8697146107e057005b80631285073c116104ea5780631285073c1461062457806314f879f41461064357806318160ddd146106585780631eb25d131461066d57806323b872dd14610682578063257ab075146106a257005b8062ae3bf814610536578063052258511461055657806306fdde031461056b578063095ea7b3146105ac5780630d59ccf5146105dc5780630fd99e16146105fc57005b3661053457005b005b34801561054257600080fd5b50610534610551366004614c5d565b611224565b34801561056257600080fd5b506105346113c0565b34801561057757600080fd5b5060408051808201909152600681526543686172676560d01b60208201525b6040516105a39190615190565b60405180910390f35b3480156105b857600080fd5b506105cc6105c7366004614d3f565b611435565b60405190151581526020016105a3565b3480156105e857600080fd5b506105346105f7366004614f7d565b61144c565b34801561060857600080fd5b50610611606481565b60405161ffff90911681526020016105a3565b34801561063057600080fd5b506032545b6040519081526020016105a3565b34801561064f57600080fd5b506105346115bf565b34801561066457600080fd5b50601b54610635565b34801561067957600080fd5b50610635611666565b34801561068e57600080fd5b506105cc61069d366004614cd0565b611684565b3480156106ae57600080fd5b5061063560275481565b3480156106c457600080fd5b506106356106d3366004614d6b565b61171b565b3480156106e457600080fd5b506023546040805160ff600160481b840481168252600160381b840481166020830152600160401b8404811692820192909252600160501b830482166060820152600160581b83048216608082015263010000008304821660a08201526401000000008304821660c0820152600160301b9092041660e0820152610100016105a3565b34801561077357600080fd5b50610534610782366004614d11565b611912565b34801561079357600080fd5b506105346107a2366004615042565b611981565b3480156107b357600080fd5b506105cc6107c2366004614c5d565b6001600160a01b031660009081526010602052604090205460ff1690565b3480156107ec57600080fd5b506107f5603281565b60405160ff90911681526020016105a3565b34801561081357600080fd5b5060096107f5565b34801561082757600080fd5b506105346108363660046150b2565b6119fc565b34801561084757600080fd5b50610534610856366004614ecc565b611bc9565b34801561086757600080fd5b50610534610876366004614c5d565b611c20565b34801561088757600080fd5b50610611600a81565b34801561089c57600080fd5b506016546108b0906001600160a01b031681565b6040516001600160a01b0390911681526020016105a3565b3480156108d457600080fd5b506105346108e336600461505e565b611c85565b3480156108f457600080fd5b506105cc610903366004614d3f565b611da0565b34801561091457600080fd5b5061063560305481565b34801561092a57600080fd5b50610534610939366004614c5d565b611dd7565b34801561094a57600080fd5b50610635602a5481565b34801561096057600080fd5b506108b0737a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561098857600080fd5b50610534610997366004614ecc565b611e3f565b3480156109a857600080fd5b506105346109b7366004614c5d565b611e9d565b3480156109c857600080fd5b50610534611f1b565b3480156109dd57600080fd5b506033546105cc90610100900460ff1681565b3480156109fc57600080fd5b50610534610a0b366004614c5d565b611f3a565b348015610a1c57600080fd5b5061063560205481565b348015610a3257600080fd5b50610635601d5481565b348015610a4857600080fd5b50610635610a57366004614fcd565b60266020526000908152604090205481565b348015610a7557600080fd5b50610534610a84366004614ecc565b611fa8565b348015610a9557600080fd5b506105cc610aa4366004614c5d565b60136020526000908152604090205460ff1681565b348015610ac557600080fd5b50610534610ad4366004614ecc565b611fff565b348015610ae557600080fd5b50610635602b5481565b348015610afb57600080fd5b50610534610b0a366004614c5d565b61205d565b348015610b1b57600080fd5b50610534610b2a366004614c5d565b6120db565b348015610b3b57600080fd5b50610534610b4a366004614c5d565b612143565b348015610b5b57600080fd5b506023546105cc90600160681b900460ff1681565b348015610b7c57600080fd5b50610b856121ab565b604080519283526020830191909152016105a3565b348015610ba657600080fd5b506017546108b0906001600160a01b031681565b348015610bc657600080fd5b50610635610bd5366004614c5d565b6001600160a01b031660009081526004602052604090205490565b348015610bfc57600080fd5b50610534610c0b366004614c5d565b6121e8565b348015610c1c57600080fd5b5061063560285481565b348015610c3257600080fd5b50610534610c41366004614dad565b6121f4565b348015610c5257600080fd5b506018546108b0906001600160a01b031681565b348015610c7257600080fd5b50610635601c5481565b348015610c8857600080fd5b506019546108b0906001600160a01b031681565b348015610ca857600080fd5b50610534610cb7366004614d11565b612335565b348015610cc857600080fd5b506108b061dead81565b348015610cde57600080fd5b506033546105cc9060ff1681565b348015610cf857600080fd5b50610534610d07366004614d11565b6123a4565b348015610d1857600080fd5b50610635610d27366004614c5d565b612413565b348015610d3857600080fd5b506031546105cc90610100900460ff1681565b348015610d5757600080fd5b50610534610d66366004614f4b565b61244d565b348015610d7757600080fd5b50610534610d86366004614ecc565b6124e1565b348015610d9757600080fd5b50610635602c5481565b348015610dad57600080fd5b506040805180820190915260048152634348524760e01b6020820152610596565b348015610dda57600080fd5b50610534610de9366004614d11565b61253f565b348015610dfa57600080fd5b506105cc610e09366004614c5d565b60126020526000908152604090205460ff1681565b348015610e2a57600080fd5b50610635610e39366004614c5d565b6125ae565b348015610e4a57600080fd5b506105cc610e59366004614d3f565b612605565b348015610e6a57600080fd5b50610534610e79366004614f4b565b612681565b348015610e8a57600080fd5b506105cc610e99366004614d3f565b612740565b348015610eaa57600080fd5b5061053461274d565b348015610ebf57600080fd5b506105346127ab565b348015610ed457600080fd5b506105cc610ee3366004614fe8565b601560209081526000928352604080842090915290825290205460ff1681565b610534610f11366004614e4e565b612894565b348015610f2257600080fd5b50610534610f31366004614c5d565b61296d565b348015610f4257600080fd5b506105cc610f51366004614c5d565b6001600160a01b031660009081526020819052604090205460ff1690565b348015610f7b57600080fd5b50610635601e5481565b348015610f9157600080fd5b50610534610fa0366004614c5d565b6129d5565b348015610fb157600080fd5b506023546107f590600160601b900460ff1681565b348015610fd257600080fd5b50610534610fe1366004614c5d565b612a53565b348015610ff257600080fd5b5061063560295481565b34801561100857600080fd5b506105cc611017366004614c5d565b6001600160a01b03166000908152600e602052604090205460ff1690565b34801561104157600080fd5b50610534611050366004614c5d565b612ad1565b34801561106157600080fd5b50610534611070366004614f4b565b612add565b34801561108157600080fd5b50610534611090366004614de2565b612b3d565b3480156110a157600080fd5b506106356110b0366004614c97565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156110e757600080fd5b506105346110f6366004615004565b612c18565b34801561110757600080fd5b50610534611116366004614e83565b612c96565b34801561112757600080fd5b50610635601f5481565b34801561113d57600080fd5b50610635612ddc565b34801561115257600080fd5b50610534611161366004614c5d565b612df0565b34801561117257600080fd5b50610534612e55565b34801561118757600080fd5b506107f5600f81565b34801561119c57600080fd5b506105346111ab366004614ecc565b612ea5565b3480156111bc57600080fd5b506105346111cb366004614dad565b612f05565b3480156111dc57600080fd5b5061063560325481565b3480156111f257600080fd5b506001546001600160a01b03166108b0565b34801561121057600080fd5b5061063561121f366004614dad565b613010565b3360009081526020819052604090205460ff168061124c57506001546001600160a01b031633145b6112715760405162461bcd60e51b815260040161126890615262565b60405180910390fd5b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a082319060240160206040518083038186803b1580156112b557600080fd5b505afa1580156112c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ed9190614f64565b90506000811161133a5760405162461bcd60e51b81526020600482015260186024820152774e6f20746f6b656e7320696e206f75722062616c616e636560401b6044820152606401611268565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb90604401602060405180830381600087803b15801561138257600080fd5b505af1158015611396573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ba9190614ee9565b50505050565b3360009081526020819052604090205460ff16806113e857506001546001600160a01b031633145b6114045760405162461bcd60e51b815260040161126890615262565b6023805460ff191660011790556114296e2527a7cbd749423f3d225f7c81581961307d565b6023805460ff19169055565b60006114423384846132d6565b5060015b92915050565b3360009081526020819052604090205460ff168061147457506001546001600160a01b031633145b6114905760405162461bcd60e51b815260040161126890615262565b61149c6009600a615363565b6114a6908361540e565b91506114b46009600a615363565b6114be908261540e565b90506000603260ff16601b546114d491906152fe565b90506000606461ffff16601b546114eb91906152fe565b9050818410156115515760405162461bcd60e51b815260206004820152602b60248201527f6e657742616c616e63654c696d6974206e6565647320746f206265206174206c60448201526a19585cdd081d185c99d95d60aa1b6064820152608401611268565b808310156115b25760405162461bcd60e51b815260206004820152602860248201527f6e657753656c6c4c696d6974206e6565647320746f206265206174206c6561736044820152671d081d185c99d95d60c21b6064820152608401611268565b5050601c91909155601d55565b3360009081526020819052604090205460ff16806115e757506001546001600160a01b031633145b6116035760405162461bcd60e51b815260040161126890615262565b6001546040516000916001600160a01b03169047908381818185875af1925050503d8060008114611650576040519150601f19603f3d011682016040523d82523d6000602084013e611655565b606091505b505090508061166357600080fd5b50565b6116726009600a615363565b6116819064174876e80061540e565b81565b60006116918484846133c9565b6001600160a01b0384166000908152600560209081526040808320338452909152902054828110156116fc5760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401611268565b611710853361170b868561544e565b6132d6565b506001949350505050565b600080600360009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561176c57600080fd5b505afa158015611780573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a49190614c7a565b6001600160a01b031663e6a4390586600360009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561180157600080fd5b505afa158015611815573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118399190614c7a565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561187f57600080fd5b505afa158015611893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b79190614c7a565b90506000806118c58361388b565b91509150600085156118ee57826118dd88606461540e565b6118e791906152fe565b9050611907565b816118fa88606461540e565b61190491906152fe565b90505b979650505050505050565b3360009081526020819052604090205460ff168061193a57506001546001600160a01b031633145b6119565760405162461bcd60e51b815260040161126890615262565b6001600160a01b03919091166000908152602081905260409020805460ff1916911515919091179055565b3360009081526020819052604090205460ff16806119a957506001546001600160a01b031633145b6119c55760405162461bcd60e51b815260040161126890615262565b6023805461ffff60601b1916600160601b60ff949094169390930260ff60681b191692909217600160681b91151591909102179055565b3360009081526020819052604090205460ff1680611a2457506001546001600160a01b031633145b611a405760405162461bcd60e51b815260040161126890615262565b6000818385611a4f888a6152d9565b611a5991906152d9565b611a6391906152d9565b611a6d91906152d9565b90508060ff16606414611ac25760405162461bcd60e51b815260206004820152601f60248201527f746f74616c207461786573206e6565647320746f20657175616c2031303025006044820152606401611268565b600f8660ff161115611ae65760405162461bcd60e51b815260040161126890615217565b600f8560ff161115611b0a5760405162461bcd60e51b815260040161126890615217565b600f8360ff161115611b2e5760405162461bcd60e51b815260040161126890615217565b600f8260ff161115611b525760405162461bcd60e51b815260040161126890615217565b506023805462ff00ff60381b1916600160481b60ff9788160260ff60381b191617600160381b958716959095029490941762ff00ff60401b1916600160401b9386169390930260ff60501b191692909217600160501b918516919091021760ff60581b1916600160581b9190931602919091179055565b3360009081526020819052604090205460ff1680611bf157506001546001600160a01b031633145b611c0d5760405162461bcd60e51b815260040161126890615262565b6033805460ff1916911515919091179055565b3360009081526020819052604090205460ff1680611c4857506001546001600160a01b031633145b611c645760405162461bcd60e51b815260040161126890615262565b6001600160a01b03166000908152601260205260409020805460ff19169055565b3360009081526020819052604090205460ff1680611cad57506001546001600160a01b031633145b611cc95760405162461bcd60e51b815260040161126890615262565b600f60ff851611801590611ce15750600f60ff841611155b8015611cf15750600f60ff821611155b611d395760405162461bcd60e51b81526020600482015260196024820152780e8c2f0cae640d0d2ced0cae440e8d0c2dc40dac2f040e8c2f603b1b6044820152606401611268565b6023805464ffff0000001916630100000060ff9687160264ff00000000191617640100000000948616949094029390931766ffff00000000001916600160281b9285169290920266ff000000000000191691909117600160301b9190931602919091179055565b3360008181526005602090815260408083206001600160a01b0387168452909152812054909161144291859061170b9086906152c1565b3360009081526020819052604090205460ff1680611dff57506001546001600160a01b031633145b611e1b5760405162461bcd60e51b815260040161126890615262565b6001600160a01b03166000908152601260205260409020805460ff19166001179055565b3360009081526020819052604090205460ff1680611e6757506001546001600160a01b031633145b611e835760405162461bcd60e51b815260040161126890615262565b602380549115156101000261ff0019909216919091179055565b3360009081526020819052604090205460ff1680611ec557506001546001600160a01b031633145b611ee15760405162461bcd60e51b815260040161126890615262565b601980546001600160a01b039092166001600160a01b0319909216821790556000908152600f60205260409020805460ff19166001179055565b603254611f2890426152c1565b33600090815260066020526040902055565b3360009081526020819052604090205460ff1680611f6257506001546001600160a01b031633145b611f7e5760405162461bcd60e51b815260040161126890615262565b603380546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b3360009081526020819052604090205460ff1680611fd057506001546001600160a01b031633145b611fec5760405162461bcd60e51b815260040161126890615262565b6021805460ff1916911515919091179055565b3360009081526020819052604090205460ff168061202757506001546001600160a01b031633145b6120435760405162461bcd60e51b815260040161126890615262565b603380549115156101000261ff0019909216919091179055565b3360009081526020819052604090205460ff168061208557506001546001600160a01b031633145b6120a15760405162461bcd60e51b815260040161126890615262565b601880546001600160a01b039092166001600160a01b0319909216821790556000908152600f60205260409020805460ff19166001179055565b3360009081526020819052604090205460ff168061210357506001546001600160a01b031633145b61211f5760405162461bcd60e51b815260040161126890615262565b6001600160a01b03166000908152600d60205260409020805460ff19166001179055565b3360009081526020819052604090205460ff168061216b57506001546001600160a01b031633145b6121875760405162461bcd60e51b815260040161126890615262565b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b6000806121ba6009600a615363565b601c546121c791906152fe565b6121d36009600a615363565b601d546121e091906152fe565b915091509091565b61166333826001613923565b3360009081526020819052604090205460ff168061221c57506001546001600160a01b031633145b6122385760405162461bcd60e51b815260040161126890615262565b6001600160a01b03821660009081526010602052604090205460ff1661225d57600080fd5b60006122698383613ce5565b60ff83166000908152602660209081526040808320546001600160a01b03881684526004909252909120549192506122a09161540e565b6001600160a01b0384166000818152602e6020908152604080832060ff88168452825280832094909455918152602f90915290812080548392906122e59084906152c1565b90915550506001600160a01b0383166000908152601060209081526040808320805460ff191660011790556004909152812054601180549192909161232b9084906152c1565b9091555050505050565b3360009081526020819052604090205460ff168061235d57506001546001600160a01b031633145b6123795760405162461bcd60e51b815260040161126890615262565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b3360009081526020819052604090205460ff16806123cc57506001546001600160a01b031633145b6123e85760405162461bcd60e51b815260040161126890615262565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6001600160a01b03811660009081526006602052604081205442811161243c5750600092915050565b612446428261544e565b9392505050565b3360009081526020819052604090205460ff168061247557506001546001600160a01b031633145b6124915760405162461bcd60e51b815260040161126890615262565b600a8111156124dc5760405162461bcd60e51b81526020600482015260176024820152760a6cad8d84098dec6d640e8d2daca40e8dede40d0d2ced604b1b6044820152606401611268565b603255565b3360009081526020819052604090205460ff168061250957506001546001600160a01b031633145b6125255760405162461bcd60e51b815260040161126890615262565b603180549115156101000261ff0019909216919091179055565b3360009081526020819052604090205460ff168061256757506001546001600160a01b031633145b6125835760405162461bcd60e51b815260040161126890615262565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6001600160a01b0381166000908152601a6020908152604080832054600490925282205460ff909116906026836125e684600161542d565b60ff1660ff16815260200190815260200160002054612446919061540e565b3360009081526005602090815260408083206001600160a01b0386168452909152812054828110156126685760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401611268565b612677338561170b868561544e565b5060019392505050565b3360009081526020819052604090205460ff16806126a957506001546001600160a01b031633145b6126c55760405162461bcd60e51b815260040161126890615262565b6001811180156126d857506305f5e10081105b6127245760405162461bcd60e51b815260206004820152601e60248201527f56616c756573206265747765656e203120616e642031303030303030303000006044820152606401611268565b6127306009600a615363565b61273a908261540e565b60225550565b60006114423384846133c9565b3360009081526020819052604090205460ff168061277557506001546001600160a01b031633145b6127915760405162461bcd60e51b815260040161126890615262565b6127a96e2527a7cbd749423f3d225f7c81581961307d565b565b3360009081526020819052604090205460ff16806127d357506001546001600160a01b031633145b6127ef5760405162461bcd60e51b815260040161126890615262565b602b80546000918290556018546040519192916001600160a01b039091169083908381818185875af1925050503d8060008114612848576040519150601f19603f3d011682016040523d82523d6000602084013e61284d565b606091505b50509050806128905760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401611268565b5050565b3360009081526020819052604090205460ff16806128bc57506001546001600160a01b031633145b6128d85760405162461bcd60e51b815260040161126890615262565b805134906000906128e990836152fe565b90506000805b600185516128fd919061544e565b811161296657848181518110612915576129156154b9565b60200260200101516001600160a01b03166108fc849081150290604051600060405180830381858888f1935050505091508161295057600080fd5b600091508061295e81615488565b9150506128ef565b5050505050565b3360009081526020819052604090205460ff168061299557506001546001600160a01b031633145b6129b15760405162461bcd60e51b815260040161126890615262565b6001600160a01b03166000908152600e60205260409020805460ff19166001179055565b3360009081526020819052604090205460ff16806129fd57506001546001600160a01b031633145b612a195760405162461bcd60e51b815260040161126890615262565b601680546001600160a01b039092166001600160a01b0319909216821790556000908152600f60205260409020805460ff19166001179055565b3360009081526020819052604090205460ff1680612a7b57506001546001600160a01b031633145b612a975760405162461bcd60e51b815260040161126890615262565b601780546001600160a01b039092166001600160a01b0319909216821790556000908152600f60205260409020805460ff19166001179055565b61166333826000613923565b3360009081526020819052604090205460ff1680612b0557506001546001600160a01b031633145b612b215760405162461bcd60e51b815260040161126890615262565b612b2d6009600a615363565b612b37908261540e565b601f5550565b3360009081526020819052604090205460ff1680612b6557506001546001600160a01b031633145b612b815760405162461bcd60e51b815260040161126890615262565b60005b8381101561296657828282818110612b9e57612b9e6154b9565b9050602002016020810190612bb39190614ecc565b60136000878785818110612bc957612bc96154b9565b9050602002016020810190612bde9190614c5d565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580612c1081615488565b915050612b84565b3360009081526020819052604090205460ff1680612c4057506001546001600160a01b031633145b612c5c5760405162461bcd60e51b815260040161126890615262565b60ff90921660009081526015602090815260408083206001600160a01b03909416835292905220805491151560ff19909216919091179055565b3360009081526020819052604090205460ff1680612cbe57506001546001600160a01b031633145b612cda5760405162461bcd60e51b815260040161126890615262565b6000835182612ce991906152fe565b9050826000805b60018751612cfe919061544e565b8111612dd357826001600160a01b031663a9059cbb888381518110612d2557612d256154b9565b6020026020010151866040518363ffffffff1660e01b8152600401612d5f9291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b158015612d7957600080fd5b505af1158015612d8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db19190614ee9565b915081612dbd57600080fd5b6000915080612dcb81615488565b915050612cf0565b50505050505050565b601b5460115460009190611446908261544e565b3360009081526020819052604090205460ff1680612e1857506001546001600160a01b031633145b612e345760405162461bcd60e51b815260040161126890615262565b6001600160a01b03166000908152600e60205260409020805460ff19169055565b3360009081526020819052604090205460ff1680612e7d57506001546001600160a01b031633145b612e995760405162461bcd60e51b815260040161126890615262565b6014805460ff19169055565b3360009081526020819052604090205460ff1680612ecd57506001546001600160a01b031633145b612ee95760405162461bcd60e51b815260040161126890615262565b60238054911515620100000262ff000019909216919091179055565b3360009081526020819052604090205460ff1680612f2d57506001546001600160a01b031633145b612f495760405162461bcd60e51b815260040161126890615262565b6001600160a01b03821660009081526010602052604090205460ff16612f6e57600080fd5b6001600160a01b0382166000908152601060209081526040808320805460ff1916905560049091528120546011805491929091612fac90849061544e565b909155505060ff81166000908152602660209081526040808320546001600160a01b0386168452600490925290912054612fe6919061540e565b6001600160a01b039092166000908152602e6020908152604080832060ff90941683529290522055565b6001600160a01b03821660009081526010602052604081205460ff161561305057506001600160a01b0382166000908152602f6020526040902054611446565b6001600160a01b0383166000908152602f60205260409020546130738484613ce5565b61244691906152c1565b6031805460ff1916600117905530600090815260046020526040812054602354909190600160581b810460ff908116916130c891600160501b8204811691600160401b9004166152d9565b6130d291906152d9565b60ff16905060006064601d54600a6130ea919061540e565b6130f491906152fe565b60215490915060ff161561310757506022545b602354610100900460ff16801561312e578482111561312e5761312b6002866152fe565b91505b602380548215156101000261ff00198216811790925560ff9182169116171561315f5761315c60018561544e565b91505b8184108061316f575061ffff8316155b1561317d57505050506132c9565b60235460009061ffff85169061319d90600160401b900460ff168561540e565b6131a791906152fe565b60235490915060009061ffff8616906131ca90600160481b900460ff168661540e565b6131d491906152fe565b60235490915060009061ffff8716906131f790600160381b900460ff168761540e565b61320191906152fe565b905060008161321084866152c1565b61321a91906152c1565b905085811061323a5761322d818761544e565b613237908361544e565b91505b60006132476002866152fe565b90506000613255828761544e565b90508361326286836152c1565b61326c91906152c1565b92504761327884613d9e565b6000613284824761544e565b9050600085613293858461540e565b61329d91906152fe565b90506132a98582613efe565b6132bb6132b6844761544e565b613fce565b505050505050505050505050505b506031805460ff19169055565b6001600160a01b0383166133205760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401611268565b6001600160a01b0382166133685760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401611268565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166134145760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401611268565b6001600160a01b03821661345d5760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b6044820152606401611268565b60145460ff16156134e5576001600160a01b03831660009081526012602052604090205460ff161580156134aa57506001600160a01b03821660009081526012602052604090205460ff16155b6134e55760405162461bcd60e51b815260206004820152600c60248201526b426c61636b6c69737465642160a01b6044820152606401611268565b6001600160a01b0383166000908152600d602052604081205460ff168061352457506001600160a01b0383166000908152600d602052604090205460ff165b8061354757506001600160a01b03841660009081526020819052604090205460ff165b8061356a57506001600160a01b03831660009081526020819052604090205460ff165b905060006001600160a01b03851630148061358d57506001600160a01b03841630145b6024549091506000906001600160a01b0387811691161480156135cc57506001600160a01b038516737a250d5630b4cf539739df2c5dacb4c659f2488d145b8061360b57506024546001600160a01b03868116911614801561360b57506001600160a01b038616737a250d5630b4cf539739df2c5dacb4c659f2488d145b905081806136165750805b8061361e5750825b1561364e576001600160a01b0386166000908152601a602052604090205461364e9087908790879060ff166142b0565b603354610100900460ff166137f8576024546000906001600160a01b038881169116148061369857506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b6024549091506000906001600160a01b03888116911614806136d657506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b6001600160a01b03891660009081526013602052604090205490915060ff168061371857506001600160a01b03871660009081526013602052604090205460ff165b8061373257503360009081526013602052604090205460ff165b15613749576137448888888585614341565b6137f1565b60235462010000900460ff16156137a057866001600160a01b0316886001600160a01b0316600080516020615509833981519152600060405161378e91815260200190565b60405180910390a35050505050505050565b603354610100900460ff166137f15760405162461bcd60e51b81526020600482015260176024820152761d1c98591a5b99c81b9bdd081e595d08195b98589b1959604a1b6044820152606401611268565b5050613883565b6024546000906001600160a01b038881169116148061383357506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b6024549091506000906001600160a01b038881169116148061387157506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b90506138808888888585614341565b50505b505050505050565b60008060008390506000806000836001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156138d157600080fd5b505afa1580156138e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139099190614f06565b506001600160701b03918216999116975095505050505050565b8060ff166001141561398e576001600160a01b0383166000908152600b602052604090205460ff1661398e5760405162461bcd60e51b8152602060048201526014602482015273165bdd4818d85b9d081c995d1c9a595d99481a5d60621b6044820152606401611268565b602554600160a01b900460ff16156139a557600080fd5b60ff80821660009081526015602090815260408083206001600160a01b038716845290915290205416613a085760405162461bcd60e51b815260206004820152600b60248201526a139bdd08195b98589b195960aa1b6044820152606401611268565b6025805460ff60a01b1916600160a01b1790556001600160a01b03831660009081526010602052604081205460ff1615613a5f57506001600160a01b0383166000908152602f602052604081208054919055613afe565b6000613a6b8584613ce5565b6001600160a01b03861660009081526004602090815260408083205460ff88168452602690925290912054919250613aa29161540e565b6001600160a01b0386166000818152602e6020908152604080832060ff89168452825280832094909455918152602f9091522054613ae19082906152c1565b6001600160a01b0386166000908152602f60205260408120559150505b80613b165750506025805460ff60a01b191690555050565b80602a6000828254613b2891906152c1565b90915550506040805160028082526060820183526000926020830190803683375050602554604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015613b9257600080fd5b505afa158015613ba6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bca9190614c7a565b81600081518110613bdd57613bdd6154b9565b60200260200101906001600160a01b031690816001600160a01b0316815250508381600181518110613c1157613c116154b9565b6001600160a01b03928316602091820292909201015260255460405163b6f9de9560e01b815291169063b6f9de95908490613c579060009086908b90429060040161515b565b6000604051808303818588803b158015613c7057600080fd5b505af1158015613c84573d6000803e3d6000fd5b5050604080518681526001600160a01b038a1660208201527f460fc16181df188bd2ec645a6f6dbe15da259268704aabeb2a5b7c94427e71299450019150613cc99050565b60405180910390a150506025805460ff60a01b19169055505050565b6001600160a01b03821660009081526004602090815260408083205460ff8516845260269092528220548291613d1a9161540e565b6001600160a01b0385166000908152602e6020908152604080832060ff88168452909152902054909150811015613d55576000915050611446565b6001600160a01b0384166000908152602e6020908152604080832060ff87168452909152902054600160401b90613d8c908361544e565b613d9691906152fe565b949350505050565b602554613db69030906001600160a01b0316836132d6565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613deb57613deb6154b9565b6001600160a01b03928316602091820292909201810191909152602554604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015613e3f57600080fd5b505afa158015613e53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e779190614c7a565b81600181518110613e8a57613e8a6154b9565b6001600160a01b03928316602091820292909201015260255460405163791ac94760e01b815291169063791ac94790613ed0908590600090869030904290600401615285565b600060405180830381600087803b158015613eea57600080fd5b505af1158015613883573d6000803e3d6000fd5b8060306000828254613f1091906152c1565b9091555050602554613f2d9030906001600160a01b0316846132d6565b60255460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c4016060604051808303818588803b158015613f9557600080fd5b505af1158015613fa9573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129669190614f9f565b602354600090606490613feb90600160481b900460ff168461540e565b613ff591906152fe565b60235490915060009060649061401590600160381b900460ff168561540e565b61401f91906152fe565b60235490915060009060649061403f90600160501b900460ff168661540e565b61404991906152fe565b60235490915060009060649061406990600160581b900460ff168761540e565b61407391906152fe565b905083602b600082825461408791906152c1565b9250508190555082602c60008282546140a091906152c1565b909155505081156141a65781602760008282546140bd91906152c1565b9250508190555081602860008282546140d691906152c1565b90915550600090506140e6612ddc565b90508061410a5782602b60008282546140ff91906152c1565b909155506141a49050565b80614119600160401b8561540e565b61412391906152fe565b600080805260266020527f673668fde1539921a3231470503848f53fc614c057a2345bc3a2f36758a6d3ac805490919061415e9084906152c1565b90915550506000808052602d6020527f6648a85983aca0407b603b260cacb25b5e5e8e5194522de3d8a800e71aa41bae805485929061419e9084906152c1565b90915550505b505b80156129665780602760008282546141be91906152c1565b9250508190555080602960008282546141d791906152c1565b90915550600090506141e7612ddc565b90508061420b5781602b600082825461420091906152c1565b909155506138839050565b8061421a600160401b8461540e565b61422491906152fe565b6001600090815260266020527f5db1dfd2ced311e642486f0e890a646498a1bdee1ad9403b0a73141af8a4c41180549091906142619084906152c1565b909155505060016000908152602d6020527f4ac3b22e31fa68474eb1c8f858cd447cf1ee3eef7de8984178a7afa8f4fe0cd080548492906142a39084906152c1565b9091555050505050505050565b6001600160a01b038416600090815260046020526040902054828110156142e95760405162461bcd60e51b8152600401611268906151e5565b6142f485848461490d565b6142ff848484614a0d565b836001600160a01b0316856001600160a01b03166000805160206155098339815191528560405161433291815260200190565b60405180910390a35050505050565b6001600160a01b038086166000818152601a6020908152604080832054948916835260049091528082205492825290205460ff90921691858110156143985760405162461bcd60e51b8152600401611268906151e5565b6000806143a630898861171b565b905085156145ac576001600160a01b038a166000908152600f602052604090205460ff16614464576001600160a01b038a16600090815260066020526040902054421015806143fc5750603154610100900460ff165b61443d5760405162461bcd60e51b815260206004820152601260248201527153656c6c657220696e2073656c6c4c6f636b60701b6044820152606401611268565b60325461444a90426152c1565b6001600160a01b038b166000908152600660205260409020555b601d548811156144a85760405162461bcd60e51b815260206004820152600f60248201526e223ab6b810383937ba32b1ba34b7b760891b6044820152606401611268565b3060009081526004602052604081205461dead82527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd546144eb6009600a615363565b6144fa9064174876e80061540e565b614504919061544e565b61450e919061544e565b9050600060205460648361452291906152fe565b61452c919061540e565b9050808a1061454957602354600160281b900460ff1693506145a5565b60235460ff640100000000820481169550600160681b90910416156145a55760235460ff600160601b909104811690841611156145a557602354614598908490600160601b900460ff16615465565b6145a290856152d9565b93505b5050614722565b8615614611576001600160a01b03891660009081526007602052604090205460ff166145fd57601c546145df89866152c1565b11156145fd5760405162461bcd60e51b815260040161126890615238565b6023546301000000900460ff169150614722565b6001600160a01b03891660009081526007602052604090205460ff1661465c57601c5461463e89866152c1565b111561465c5760405162461bcd60e51b815260040161126890615238565b601c5461466989866152c1565b11156146875760405162461bcd60e51b815260040161126890615238565b6001600160a01b038a166000908152600f602052604090205460ff16614712576001600160a01b038a16600090815260066020526040902054421015806146d55750603154610100900460ff165b6147125760405162461bcd60e51b815260206004820152600e60248201526d53656e64657220696e204c6f636b60901b6044820152606401611268565b602354600160301b900460ff1691505b6024546001600160a01b038b8116911614801590614743575060335460ff16155b8015614752575060315460ff16155b801561475b5750855b1561478157601f543060009081526004602052604090205410614781576147818861307d565b6001600160a01b038a16600090815260096020526040812054819060ff166147b25750602354600160481b900460ff165b6001600160a01b038c1660009081526008602052604090205460ff166147e257602354600160381b900460ff1691505b600060ff88166147ff5750602354600160501b900460ff1661481a565b8760ff166001141561481a5750602354600160581b900460ff165b602354600090614876908d90889060ff600160581b8204811691600160501b81048216918a91614853918b91600160401b9004166152d9565b61485d91906152d9565b61486791906152d9565b61487191906152d9565b614b0f565b90506000614884828e61544e565b90506148918f8e8c61490d565b30600090815260046020526040812080548492906148b09084906152c1565b909155506148c190508e828c614a0d565b8d6001600160a01b03168f6001600160a01b0316600080516020615509833981519152836040516148f491815260200190565b60405180910390a3505050505050505050505050505050565b6001600160a01b03831660009081526004602052604081205461493190849061544e565b6001600160a01b03851660009081526010602052604090205490915060ff1615614976576001600160a01b039093166000908152600460205260409020929092555050565b60006149828584613ce5565b6001600160a01b038616600090815260046020908152604080832086905560ff8716835260269091529020549091506149bc90839061540e565b6001600160a01b0386166000818152602e6020908152604080832060ff89168452825280832094909455918152602f9091529081208054839290614a019084906152c1565b90915550505050505050565b6001600160a01b038316600090815260046020526040812054614a319084906152c1565b6001600160a01b03851660009081526010602052604090205490915060ff1615614a76576001600160a01b039093166000908152600460205260409020929092555050565b6000614a828584613ce5565b60ff8416600090815260266020526040902054909150614aa390839061540e565b6001600160a01b0386166000818152602e6020908152604080832060ff89168452825280832094909455918152602f9091529081208054839290614ae89084906152c1565b9091555050506001600160a01b039093166000908152600460205260409020929092555050565b60006127108260ff168460ff1686614b27919061540e565b613d8c919061540e565b8035614b3c816154e5565b919050565b60008083601f840112614b5357600080fd5b50813567ffffffffffffffff811115614b6b57600080fd5b6020830191508360208260051b8501011115614b8657600080fd5b9250929050565b600082601f830112614b9e57600080fd5b8135602067ffffffffffffffff80831115614bbb57614bbb6154cf565b8260051b604051601f19603f83011681018181108482111715614be057614be06154cf565b60405284815283810192508684018288018501891015614bff57600080fd5b600092505b85831015614c2957614c1581614b31565b845292840192600192909201918401614c04565b50979650505050505050565b80516001600160701b0381168114614b3c57600080fd5b803560ff81168114614b3c57600080fd5b600060208284031215614c6f57600080fd5b8135612446816154e5565b600060208284031215614c8c57600080fd5b8151612446816154e5565b60008060408385031215614caa57600080fd5b8235614cb5816154e5565b91506020830135614cc5816154e5565b809150509250929050565b600080600060608486031215614ce557600080fd5b8335614cf0816154e5565b92506020840135614d00816154e5565b929592945050506040919091013590565b60008060408385031215614d2457600080fd5b8235614d2f816154e5565b91506020830135614cc5816154fa565b60008060408385031215614d5257600080fd5b8235614d5d816154e5565b946020939093013593505050565b600080600060608486031215614d8057600080fd5b8335614d8b816154e5565b9250602084013591506040840135614da2816154fa565b809150509250925092565b60008060408385031215614dc057600080fd5b8235614dcb816154e5565b9150614dd960208401614c4c565b90509250929050565b60008060008060408587031215614df857600080fd5b843567ffffffffffffffff80821115614e1057600080fd5b614e1c88838901614b41565b90965094506020870135915080821115614e3557600080fd5b50614e4287828801614b41565b95989497509550505050565b600060208284031215614e6057600080fd5b813567ffffffffffffffff811115614e7757600080fd5b613d9684828501614b8d565b600080600060608486031215614e9857600080fd5b833567ffffffffffffffff811115614eaf57600080fd5b614ebb86828701614b8d565b9350506020840135614d00816154e5565b600060208284031215614ede57600080fd5b8135612446816154fa565b600060208284031215614efb57600080fd5b8151612446816154fa565b600080600060608486031215614f1b57600080fd5b614f2484614c35565b9250614f3260208501614c35565b9150604084015163ffffffff81168114614da257600080fd5b600060208284031215614f5d57600080fd5b5035919050565b600060208284031215614f7657600080fd5b5051919050565b60008060408385031215614f9057600080fd5b50508035926020909101359150565b600080600060608486031215614fb457600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215614fdf57600080fd5b61244682614c4c565b60008060408385031215614ffb57600080fd5b614cb583614c4c565b60008060006060848603121561501957600080fd5b61502284614c4c565b92506020840135615032816154e5565b91506040840135614da2816154fa565b6000806040838503121561505557600080fd5b614d2f83614c4c565b6000806000806080858703121561507457600080fd5b61507d85614c4c565b935061508b60208601614c4c565b925061509960408601614c4c565b91506150a760608601614c4c565b905092959194509250565b600080600080600060a086880312156150ca57600080fd5b6150d386614c4c565b94506150e160208701614c4c565b93506150ef60408701614c4c565b92506150fd60608701614c4c565b915061510b60808701614c4c565b90509295509295909350565b600081518084526020808501945080840160005b838110156151505781516001600160a01b03168752958201959082019060010161512b565b509495945050505050565b8481526080602082015260006151746080830186615117565b6001600160a01b03949094166040830152506060015292915050565b600060208083528351808285015260005b818110156151bd578581018301518582016040015282016151a1565b818111156151cf576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252601890820152775472616e7366657220657863656564732062616c616e636560401b604082015260600190565b6020808252600790820152664d61782031352560c81b604082015260600190565b60208082526010908201526f3bb430b63290383937ba32b1ba34b7b760811b604082015260600190565b6020808252600990820152683737ba1037bbb732b960b91b604082015260600190565b85815284602082015260a0604082015260006152a460a0830186615117565b6001600160a01b0394909416606083015250608001529392505050565b600082198211156152d4576152d46154a3565b500190565b600060ff821660ff84168060ff038211156152f6576152f66154a3565b019392505050565b60008261531b57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561535b578160001904821115615341576153416154a3565b8085161561534e57918102915b93841c9390800290615325565b509250929050565b600061244660ff84168360008261537c57506001611446565b8161538957506000611446565b816001811461539f57600281146153a9576153c5565b6001915050611446565b60ff8411156153ba576153ba6154a3565b50506001821b611446565b5060208310610133831016604e8410600b84101617156153e8575081810a611446565b6153f28383615320565b8060001904821115615406576154066154a3565b029392505050565b6000816000190483118215151615615428576154286154a3565b500290565b600060ff821660ff84168160ff0481118215151615615406576154066154a3565b600082821015615460576154606154a3565b500390565b600060ff821660ff84168082101561547f5761547f6154a3565b90039392505050565b600060001982141561549c5761549c6154a3565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461166357600080fd5b801515811461166357600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212201eb5892d50b0b1db28689f942c39fa41939dafa68e4bf85ffb0e5618c6ca558064736f6c63430008070033

Deployed Bytecode

0x60806040526004361061052d5760003560e01c806373babfe6116102ab578063b76289b81161016f578063e117ff6e116100d1578063eb8e88631161008d578063eb8e88631461117b578063ec8bb4f414610b0f578063ef8a4a8114611190578063f80683ae146111b0578063f88b0e46146111d0578063fe0174bd146111e6578063ffe94e4f1461120457005b8063e117ff6e14610b2f578063e46b9df4146110fb578063e52fb9ec1461111b578063e69e03ee14611131578063e77bf5f814611146578063ea43915e1461116657005b8063d42d65091161012b578063d42d650914610fe6578063d8e8de3414610ffc578063d9f1dd4114611035578063da68eeb614611055578063db09034814611075578063dd62ed3e14611095578063e00aee41146110db57005b8063b76289b814610f16578063b918161114610f36578063bb733d4e14610f6f578063bcbe95bb14610f85578063c56f4ff514610fa5578063c6ec02fb14610fc657005b80638eecb63011610218578063a457c2d7116101d4578063a457c2d714610e3e578063a5740b2b14610e5e578063a9059cbb14610e7e578063a921783714610e9e578063aab286fe14610eb3578063afbfaf8714610ec8578063b70a829314610f0357005b80638eecb63014610d6b5780638fec412f14610d8b57806395d89b4114610da1578063965f8a8814610dce578063a20623ce14610dee578063a25af82614610e1e57005b806382c4767b1161026757806382c4767b14610cbc57806386d0ada814610cd25780638708516c14610cec5780638728ecd114610d0c578063887c60fb14610d2c5780638eb26ecd14610d4b57005b806373babfe614610c1057806374dc3fac14610c2657806375f0a87414610c46578063762bb28214610c665780637acfe0ec14610c7c5780637bcaa42114610c9c57005b806339509351116103f25780635110af051161035f57806361172f951161031b57806361172f9514610b0f57806363d8291a14610b2f57806367d84c2514610b4f5780636f89e40914610b7057806370798ca514610b9a57806370a0823114610bba57806371259fb514610bf057005b80635110af0514610a3c57806352187e5514610a695780635575e68314610a8957806358780a8214610ab957806358e5536514610ad95780635d098b3814610aef57005b8063470bf673116103ae578063470bf6731461099c57806348e53164146109bc5780634ada218b146109d15780634cdaf0ae146109f05780634d97ba7514610a105780634f91e48c14610a2657005b806339509351146108e85780633cc39b7a146109085780633d8dbf5d1461091e5780634089b1701461093e5780634394c0ec146109545780634464ddd01461097c57005b80632772f1751161049b578063313ce56711610457578063313ce567146108075780633190c5061461081b57806331b242d41461083b5780633328b7211461085b5780633478154b1461087b578063378c715814610890578063378c8ada146108c857005b80632772f175146106b85780632973ef2d146106d85780632bfe8742146107675780632bff1192146107875780632dd66eee146107a7578063311a8697146107e057005b80631285073c116104ea5780631285073c1461062457806314f879f41461064357806318160ddd146106585780631eb25d131461066d57806323b872dd14610682578063257ab075146106a257005b8062ae3bf814610536578063052258511461055657806306fdde031461056b578063095ea7b3146105ac5780630d59ccf5146105dc5780630fd99e16146105fc57005b3661053457005b005b34801561054257600080fd5b50610534610551366004614c5d565b611224565b34801561056257600080fd5b506105346113c0565b34801561057757600080fd5b5060408051808201909152600681526543686172676560d01b60208201525b6040516105a39190615190565b60405180910390f35b3480156105b857600080fd5b506105cc6105c7366004614d3f565b611435565b60405190151581526020016105a3565b3480156105e857600080fd5b506105346105f7366004614f7d565b61144c565b34801561060857600080fd5b50610611606481565b60405161ffff90911681526020016105a3565b34801561063057600080fd5b506032545b6040519081526020016105a3565b34801561064f57600080fd5b506105346115bf565b34801561066457600080fd5b50601b54610635565b34801561067957600080fd5b50610635611666565b34801561068e57600080fd5b506105cc61069d366004614cd0565b611684565b3480156106ae57600080fd5b5061063560275481565b3480156106c457600080fd5b506106356106d3366004614d6b565b61171b565b3480156106e457600080fd5b506023546040805160ff600160481b840481168252600160381b840481166020830152600160401b8404811692820192909252600160501b830482166060820152600160581b83048216608082015263010000008304821660a08201526401000000008304821660c0820152600160301b9092041660e0820152610100016105a3565b34801561077357600080fd5b50610534610782366004614d11565b611912565b34801561079357600080fd5b506105346107a2366004615042565b611981565b3480156107b357600080fd5b506105cc6107c2366004614c5d565b6001600160a01b031660009081526010602052604090205460ff1690565b3480156107ec57600080fd5b506107f5603281565b60405160ff90911681526020016105a3565b34801561081357600080fd5b5060096107f5565b34801561082757600080fd5b506105346108363660046150b2565b6119fc565b34801561084757600080fd5b50610534610856366004614ecc565b611bc9565b34801561086757600080fd5b50610534610876366004614c5d565b611c20565b34801561088757600080fd5b50610611600a81565b34801561089c57600080fd5b506016546108b0906001600160a01b031681565b6040516001600160a01b0390911681526020016105a3565b3480156108d457600080fd5b506105346108e336600461505e565b611c85565b3480156108f457600080fd5b506105cc610903366004614d3f565b611da0565b34801561091457600080fd5b5061063560305481565b34801561092a57600080fd5b50610534610939366004614c5d565b611dd7565b34801561094a57600080fd5b50610635602a5481565b34801561096057600080fd5b506108b0737a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561098857600080fd5b50610534610997366004614ecc565b611e3f565b3480156109a857600080fd5b506105346109b7366004614c5d565b611e9d565b3480156109c857600080fd5b50610534611f1b565b3480156109dd57600080fd5b506033546105cc90610100900460ff1681565b3480156109fc57600080fd5b50610534610a0b366004614c5d565b611f3a565b348015610a1c57600080fd5b5061063560205481565b348015610a3257600080fd5b50610635601d5481565b348015610a4857600080fd5b50610635610a57366004614fcd565b60266020526000908152604090205481565b348015610a7557600080fd5b50610534610a84366004614ecc565b611fa8565b348015610a9557600080fd5b506105cc610aa4366004614c5d565b60136020526000908152604090205460ff1681565b348015610ac557600080fd5b50610534610ad4366004614ecc565b611fff565b348015610ae557600080fd5b50610635602b5481565b348015610afb57600080fd5b50610534610b0a366004614c5d565b61205d565b348015610b1b57600080fd5b50610534610b2a366004614c5d565b6120db565b348015610b3b57600080fd5b50610534610b4a366004614c5d565b612143565b348015610b5b57600080fd5b506023546105cc90600160681b900460ff1681565b348015610b7c57600080fd5b50610b856121ab565b604080519283526020830191909152016105a3565b348015610ba657600080fd5b506017546108b0906001600160a01b031681565b348015610bc657600080fd5b50610635610bd5366004614c5d565b6001600160a01b031660009081526004602052604090205490565b348015610bfc57600080fd5b50610534610c0b366004614c5d565b6121e8565b348015610c1c57600080fd5b5061063560285481565b348015610c3257600080fd5b50610534610c41366004614dad565b6121f4565b348015610c5257600080fd5b506018546108b0906001600160a01b031681565b348015610c7257600080fd5b50610635601c5481565b348015610c8857600080fd5b506019546108b0906001600160a01b031681565b348015610ca857600080fd5b50610534610cb7366004614d11565b612335565b348015610cc857600080fd5b506108b061dead81565b348015610cde57600080fd5b506033546105cc9060ff1681565b348015610cf857600080fd5b50610534610d07366004614d11565b6123a4565b348015610d1857600080fd5b50610635610d27366004614c5d565b612413565b348015610d3857600080fd5b506031546105cc90610100900460ff1681565b348015610d5757600080fd5b50610534610d66366004614f4b565b61244d565b348015610d7757600080fd5b50610534610d86366004614ecc565b6124e1565b348015610d9757600080fd5b50610635602c5481565b348015610dad57600080fd5b506040805180820190915260048152634348524760e01b6020820152610596565b348015610dda57600080fd5b50610534610de9366004614d11565b61253f565b348015610dfa57600080fd5b506105cc610e09366004614c5d565b60126020526000908152604090205460ff1681565b348015610e2a57600080fd5b50610635610e39366004614c5d565b6125ae565b348015610e4a57600080fd5b506105cc610e59366004614d3f565b612605565b348015610e6a57600080fd5b50610534610e79366004614f4b565b612681565b348015610e8a57600080fd5b506105cc610e99366004614d3f565b612740565b348015610eaa57600080fd5b5061053461274d565b348015610ebf57600080fd5b506105346127ab565b348015610ed457600080fd5b506105cc610ee3366004614fe8565b601560209081526000928352604080842090915290825290205460ff1681565b610534610f11366004614e4e565b612894565b348015610f2257600080fd5b50610534610f31366004614c5d565b61296d565b348015610f4257600080fd5b506105cc610f51366004614c5d565b6001600160a01b031660009081526020819052604090205460ff1690565b348015610f7b57600080fd5b50610635601e5481565b348015610f9157600080fd5b50610534610fa0366004614c5d565b6129d5565b348015610fb157600080fd5b506023546107f590600160601b900460ff1681565b348015610fd257600080fd5b50610534610fe1366004614c5d565b612a53565b348015610ff257600080fd5b5061063560295481565b34801561100857600080fd5b506105cc611017366004614c5d565b6001600160a01b03166000908152600e602052604090205460ff1690565b34801561104157600080fd5b50610534611050366004614c5d565b612ad1565b34801561106157600080fd5b50610534611070366004614f4b565b612add565b34801561108157600080fd5b50610534611090366004614de2565b612b3d565b3480156110a157600080fd5b506106356110b0366004614c97565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156110e757600080fd5b506105346110f6366004615004565b612c18565b34801561110757600080fd5b50610534611116366004614e83565b612c96565b34801561112757600080fd5b50610635601f5481565b34801561113d57600080fd5b50610635612ddc565b34801561115257600080fd5b50610534611161366004614c5d565b612df0565b34801561117257600080fd5b50610534612e55565b34801561118757600080fd5b506107f5600f81565b34801561119c57600080fd5b506105346111ab366004614ecc565b612ea5565b3480156111bc57600080fd5b506105346111cb366004614dad565b612f05565b3480156111dc57600080fd5b5061063560325481565b3480156111f257600080fd5b506001546001600160a01b03166108b0565b34801561121057600080fd5b5061063561121f366004614dad565b613010565b3360009081526020819052604090205460ff168061124c57506001546001600160a01b031633145b6112715760405162461bcd60e51b815260040161126890615262565b60405180910390fd5b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a082319060240160206040518083038186803b1580156112b557600080fd5b505afa1580156112c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ed9190614f64565b90506000811161133a5760405162461bcd60e51b81526020600482015260186024820152774e6f20746f6b656e7320696e206f75722062616c616e636560401b6044820152606401611268565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb90604401602060405180830381600087803b15801561138257600080fd5b505af1158015611396573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ba9190614ee9565b50505050565b3360009081526020819052604090205460ff16806113e857506001546001600160a01b031633145b6114045760405162461bcd60e51b815260040161126890615262565b6023805460ff191660011790556114296e2527a7cbd749423f3d225f7c81581961307d565b6023805460ff19169055565b60006114423384846132d6565b5060015b92915050565b3360009081526020819052604090205460ff168061147457506001546001600160a01b031633145b6114905760405162461bcd60e51b815260040161126890615262565b61149c6009600a615363565b6114a6908361540e565b91506114b46009600a615363565b6114be908261540e565b90506000603260ff16601b546114d491906152fe565b90506000606461ffff16601b546114eb91906152fe565b9050818410156115515760405162461bcd60e51b815260206004820152602b60248201527f6e657742616c616e63654c696d6974206e6565647320746f206265206174206c60448201526a19585cdd081d185c99d95d60aa1b6064820152608401611268565b808310156115b25760405162461bcd60e51b815260206004820152602860248201527f6e657753656c6c4c696d6974206e6565647320746f206265206174206c6561736044820152671d081d185c99d95d60c21b6064820152608401611268565b5050601c91909155601d55565b3360009081526020819052604090205460ff16806115e757506001546001600160a01b031633145b6116035760405162461bcd60e51b815260040161126890615262565b6001546040516000916001600160a01b03169047908381818185875af1925050503d8060008114611650576040519150601f19603f3d011682016040523d82523d6000602084013e611655565b606091505b505090508061166357600080fd5b50565b6116726009600a615363565b6116819064174876e80061540e565b81565b60006116918484846133c9565b6001600160a01b0384166000908152600560209081526040808320338452909152902054828110156116fc5760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401611268565b611710853361170b868561544e565b6132d6565b506001949350505050565b600080600360009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561176c57600080fd5b505afa158015611780573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a49190614c7a565b6001600160a01b031663e6a4390586600360009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561180157600080fd5b505afa158015611815573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118399190614c7a565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561187f57600080fd5b505afa158015611893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b79190614c7a565b90506000806118c58361388b565b91509150600085156118ee57826118dd88606461540e565b6118e791906152fe565b9050611907565b816118fa88606461540e565b61190491906152fe565b90505b979650505050505050565b3360009081526020819052604090205460ff168061193a57506001546001600160a01b031633145b6119565760405162461bcd60e51b815260040161126890615262565b6001600160a01b03919091166000908152602081905260409020805460ff1916911515919091179055565b3360009081526020819052604090205460ff16806119a957506001546001600160a01b031633145b6119c55760405162461bcd60e51b815260040161126890615262565b6023805461ffff60601b1916600160601b60ff949094169390930260ff60681b191692909217600160681b91151591909102179055565b3360009081526020819052604090205460ff1680611a2457506001546001600160a01b031633145b611a405760405162461bcd60e51b815260040161126890615262565b6000818385611a4f888a6152d9565b611a5991906152d9565b611a6391906152d9565b611a6d91906152d9565b90508060ff16606414611ac25760405162461bcd60e51b815260206004820152601f60248201527f746f74616c207461786573206e6565647320746f20657175616c2031303025006044820152606401611268565b600f8660ff161115611ae65760405162461bcd60e51b815260040161126890615217565b600f8560ff161115611b0a5760405162461bcd60e51b815260040161126890615217565b600f8360ff161115611b2e5760405162461bcd60e51b815260040161126890615217565b600f8260ff161115611b525760405162461bcd60e51b815260040161126890615217565b506023805462ff00ff60381b1916600160481b60ff9788160260ff60381b191617600160381b958716959095029490941762ff00ff60401b1916600160401b9386169390930260ff60501b191692909217600160501b918516919091021760ff60581b1916600160581b9190931602919091179055565b3360009081526020819052604090205460ff1680611bf157506001546001600160a01b031633145b611c0d5760405162461bcd60e51b815260040161126890615262565b6033805460ff1916911515919091179055565b3360009081526020819052604090205460ff1680611c4857506001546001600160a01b031633145b611c645760405162461bcd60e51b815260040161126890615262565b6001600160a01b03166000908152601260205260409020805460ff19169055565b3360009081526020819052604090205460ff1680611cad57506001546001600160a01b031633145b611cc95760405162461bcd60e51b815260040161126890615262565b600f60ff851611801590611ce15750600f60ff841611155b8015611cf15750600f60ff821611155b611d395760405162461bcd60e51b81526020600482015260196024820152780e8c2f0cae640d0d2ced0cae440e8d0c2dc40dac2f040e8c2f603b1b6044820152606401611268565b6023805464ffff0000001916630100000060ff9687160264ff00000000191617640100000000948616949094029390931766ffff00000000001916600160281b9285169290920266ff000000000000191691909117600160301b9190931602919091179055565b3360008181526005602090815260408083206001600160a01b0387168452909152812054909161144291859061170b9086906152c1565b3360009081526020819052604090205460ff1680611dff57506001546001600160a01b031633145b611e1b5760405162461bcd60e51b815260040161126890615262565b6001600160a01b03166000908152601260205260409020805460ff19166001179055565b3360009081526020819052604090205460ff1680611e6757506001546001600160a01b031633145b611e835760405162461bcd60e51b815260040161126890615262565b602380549115156101000261ff0019909216919091179055565b3360009081526020819052604090205460ff1680611ec557506001546001600160a01b031633145b611ee15760405162461bcd60e51b815260040161126890615262565b601980546001600160a01b039092166001600160a01b0319909216821790556000908152600f60205260409020805460ff19166001179055565b603254611f2890426152c1565b33600090815260066020526040902055565b3360009081526020819052604090205460ff1680611f6257506001546001600160a01b031633145b611f7e5760405162461bcd60e51b815260040161126890615262565b603380546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b3360009081526020819052604090205460ff1680611fd057506001546001600160a01b031633145b611fec5760405162461bcd60e51b815260040161126890615262565b6021805460ff1916911515919091179055565b3360009081526020819052604090205460ff168061202757506001546001600160a01b031633145b6120435760405162461bcd60e51b815260040161126890615262565b603380549115156101000261ff0019909216919091179055565b3360009081526020819052604090205460ff168061208557506001546001600160a01b031633145b6120a15760405162461bcd60e51b815260040161126890615262565b601880546001600160a01b039092166001600160a01b0319909216821790556000908152600f60205260409020805460ff19166001179055565b3360009081526020819052604090205460ff168061210357506001546001600160a01b031633145b61211f5760405162461bcd60e51b815260040161126890615262565b6001600160a01b03166000908152600d60205260409020805460ff19166001179055565b3360009081526020819052604090205460ff168061216b57506001546001600160a01b031633145b6121875760405162461bcd60e51b815260040161126890615262565b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b6000806121ba6009600a615363565b601c546121c791906152fe565b6121d36009600a615363565b601d546121e091906152fe565b915091509091565b61166333826001613923565b3360009081526020819052604090205460ff168061221c57506001546001600160a01b031633145b6122385760405162461bcd60e51b815260040161126890615262565b6001600160a01b03821660009081526010602052604090205460ff1661225d57600080fd5b60006122698383613ce5565b60ff83166000908152602660209081526040808320546001600160a01b03881684526004909252909120549192506122a09161540e565b6001600160a01b0384166000818152602e6020908152604080832060ff88168452825280832094909455918152602f90915290812080548392906122e59084906152c1565b90915550506001600160a01b0383166000908152601060209081526040808320805460ff191660011790556004909152812054601180549192909161232b9084906152c1565b9091555050505050565b3360009081526020819052604090205460ff168061235d57506001546001600160a01b031633145b6123795760405162461bcd60e51b815260040161126890615262565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b3360009081526020819052604090205460ff16806123cc57506001546001600160a01b031633145b6123e85760405162461bcd60e51b815260040161126890615262565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6001600160a01b03811660009081526006602052604081205442811161243c5750600092915050565b612446428261544e565b9392505050565b3360009081526020819052604090205460ff168061247557506001546001600160a01b031633145b6124915760405162461bcd60e51b815260040161126890615262565b600a8111156124dc5760405162461bcd60e51b81526020600482015260176024820152760a6cad8d84098dec6d640e8d2daca40e8dede40d0d2ced604b1b6044820152606401611268565b603255565b3360009081526020819052604090205460ff168061250957506001546001600160a01b031633145b6125255760405162461bcd60e51b815260040161126890615262565b603180549115156101000261ff0019909216919091179055565b3360009081526020819052604090205460ff168061256757506001546001600160a01b031633145b6125835760405162461bcd60e51b815260040161126890615262565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6001600160a01b0381166000908152601a6020908152604080832054600490925282205460ff909116906026836125e684600161542d565b60ff1660ff16815260200190815260200160002054612446919061540e565b3360009081526005602090815260408083206001600160a01b0386168452909152812054828110156126685760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401611268565b612677338561170b868561544e565b5060019392505050565b3360009081526020819052604090205460ff16806126a957506001546001600160a01b031633145b6126c55760405162461bcd60e51b815260040161126890615262565b6001811180156126d857506305f5e10081105b6127245760405162461bcd60e51b815260206004820152601e60248201527f56616c756573206265747765656e203120616e642031303030303030303000006044820152606401611268565b6127306009600a615363565b61273a908261540e565b60225550565b60006114423384846133c9565b3360009081526020819052604090205460ff168061277557506001546001600160a01b031633145b6127915760405162461bcd60e51b815260040161126890615262565b6127a96e2527a7cbd749423f3d225f7c81581961307d565b565b3360009081526020819052604090205460ff16806127d357506001546001600160a01b031633145b6127ef5760405162461bcd60e51b815260040161126890615262565b602b80546000918290556018546040519192916001600160a01b039091169083908381818185875af1925050503d8060008114612848576040519150601f19603f3d011682016040523d82523d6000602084013e61284d565b606091505b50509050806128905760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401611268565b5050565b3360009081526020819052604090205460ff16806128bc57506001546001600160a01b031633145b6128d85760405162461bcd60e51b815260040161126890615262565b805134906000906128e990836152fe565b90506000805b600185516128fd919061544e565b811161296657848181518110612915576129156154b9565b60200260200101516001600160a01b03166108fc849081150290604051600060405180830381858888f1935050505091508161295057600080fd5b600091508061295e81615488565b9150506128ef565b5050505050565b3360009081526020819052604090205460ff168061299557506001546001600160a01b031633145b6129b15760405162461bcd60e51b815260040161126890615262565b6001600160a01b03166000908152600e60205260409020805460ff19166001179055565b3360009081526020819052604090205460ff16806129fd57506001546001600160a01b031633145b612a195760405162461bcd60e51b815260040161126890615262565b601680546001600160a01b039092166001600160a01b0319909216821790556000908152600f60205260409020805460ff19166001179055565b3360009081526020819052604090205460ff1680612a7b57506001546001600160a01b031633145b612a975760405162461bcd60e51b815260040161126890615262565b601780546001600160a01b039092166001600160a01b0319909216821790556000908152600f60205260409020805460ff19166001179055565b61166333826000613923565b3360009081526020819052604090205460ff1680612b0557506001546001600160a01b031633145b612b215760405162461bcd60e51b815260040161126890615262565b612b2d6009600a615363565b612b37908261540e565b601f5550565b3360009081526020819052604090205460ff1680612b6557506001546001600160a01b031633145b612b815760405162461bcd60e51b815260040161126890615262565b60005b8381101561296657828282818110612b9e57612b9e6154b9565b9050602002016020810190612bb39190614ecc565b60136000878785818110612bc957612bc96154b9565b9050602002016020810190612bde9190614c5d565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580612c1081615488565b915050612b84565b3360009081526020819052604090205460ff1680612c4057506001546001600160a01b031633145b612c5c5760405162461bcd60e51b815260040161126890615262565b60ff90921660009081526015602090815260408083206001600160a01b03909416835292905220805491151560ff19909216919091179055565b3360009081526020819052604090205460ff1680612cbe57506001546001600160a01b031633145b612cda5760405162461bcd60e51b815260040161126890615262565b6000835182612ce991906152fe565b9050826000805b60018751612cfe919061544e565b8111612dd357826001600160a01b031663a9059cbb888381518110612d2557612d256154b9565b6020026020010151866040518363ffffffff1660e01b8152600401612d5f9291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b158015612d7957600080fd5b505af1158015612d8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db19190614ee9565b915081612dbd57600080fd5b6000915080612dcb81615488565b915050612cf0565b50505050505050565b601b5460115460009190611446908261544e565b3360009081526020819052604090205460ff1680612e1857506001546001600160a01b031633145b612e345760405162461bcd60e51b815260040161126890615262565b6001600160a01b03166000908152600e60205260409020805460ff19169055565b3360009081526020819052604090205460ff1680612e7d57506001546001600160a01b031633145b612e995760405162461bcd60e51b815260040161126890615262565b6014805460ff19169055565b3360009081526020819052604090205460ff1680612ecd57506001546001600160a01b031633145b612ee95760405162461bcd60e51b815260040161126890615262565b60238054911515620100000262ff000019909216919091179055565b3360009081526020819052604090205460ff1680612f2d57506001546001600160a01b031633145b612f495760405162461bcd60e51b815260040161126890615262565b6001600160a01b03821660009081526010602052604090205460ff16612f6e57600080fd5b6001600160a01b0382166000908152601060209081526040808320805460ff1916905560049091528120546011805491929091612fac90849061544e565b909155505060ff81166000908152602660209081526040808320546001600160a01b0386168452600490925290912054612fe6919061540e565b6001600160a01b039092166000908152602e6020908152604080832060ff90941683529290522055565b6001600160a01b03821660009081526010602052604081205460ff161561305057506001600160a01b0382166000908152602f6020526040902054611446565b6001600160a01b0383166000908152602f60205260409020546130738484613ce5565b61244691906152c1565b6031805460ff1916600117905530600090815260046020526040812054602354909190600160581b810460ff908116916130c891600160501b8204811691600160401b9004166152d9565b6130d291906152d9565b60ff16905060006064601d54600a6130ea919061540e565b6130f491906152fe565b60215490915060ff161561310757506022545b602354610100900460ff16801561312e578482111561312e5761312b6002866152fe565b91505b602380548215156101000261ff00198216811790925560ff9182169116171561315f5761315c60018561544e565b91505b8184108061316f575061ffff8316155b1561317d57505050506132c9565b60235460009061ffff85169061319d90600160401b900460ff168561540e565b6131a791906152fe565b60235490915060009061ffff8616906131ca90600160481b900460ff168661540e565b6131d491906152fe565b60235490915060009061ffff8716906131f790600160381b900460ff168761540e565b61320191906152fe565b905060008161321084866152c1565b61321a91906152c1565b905085811061323a5761322d818761544e565b613237908361544e565b91505b60006132476002866152fe565b90506000613255828761544e565b90508361326286836152c1565b61326c91906152c1565b92504761327884613d9e565b6000613284824761544e565b9050600085613293858461540e565b61329d91906152fe565b90506132a98582613efe565b6132bb6132b6844761544e565b613fce565b505050505050505050505050505b506031805460ff19169055565b6001600160a01b0383166133205760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401611268565b6001600160a01b0382166133685760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401611268565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166134145760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401611268565b6001600160a01b03821661345d5760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b6044820152606401611268565b60145460ff16156134e5576001600160a01b03831660009081526012602052604090205460ff161580156134aa57506001600160a01b03821660009081526012602052604090205460ff16155b6134e55760405162461bcd60e51b815260206004820152600c60248201526b426c61636b6c69737465642160a01b6044820152606401611268565b6001600160a01b0383166000908152600d602052604081205460ff168061352457506001600160a01b0383166000908152600d602052604090205460ff165b8061354757506001600160a01b03841660009081526020819052604090205460ff165b8061356a57506001600160a01b03831660009081526020819052604090205460ff165b905060006001600160a01b03851630148061358d57506001600160a01b03841630145b6024549091506000906001600160a01b0387811691161480156135cc57506001600160a01b038516737a250d5630b4cf539739df2c5dacb4c659f2488d145b8061360b57506024546001600160a01b03868116911614801561360b57506001600160a01b038616737a250d5630b4cf539739df2c5dacb4c659f2488d145b905081806136165750805b8061361e5750825b1561364e576001600160a01b0386166000908152601a602052604090205461364e9087908790879060ff166142b0565b603354610100900460ff166137f8576024546000906001600160a01b038881169116148061369857506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b6024549091506000906001600160a01b03888116911614806136d657506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b6001600160a01b03891660009081526013602052604090205490915060ff168061371857506001600160a01b03871660009081526013602052604090205460ff165b8061373257503360009081526013602052604090205460ff165b15613749576137448888888585614341565b6137f1565b60235462010000900460ff16156137a057866001600160a01b0316886001600160a01b0316600080516020615509833981519152600060405161378e91815260200190565b60405180910390a35050505050505050565b603354610100900460ff166137f15760405162461bcd60e51b81526020600482015260176024820152761d1c98591a5b99c81b9bdd081e595d08195b98589b1959604a1b6044820152606401611268565b5050613883565b6024546000906001600160a01b038881169116148061383357506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b6024549091506000906001600160a01b038881169116148061387157506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b90506138808888888585614341565b50505b505050505050565b60008060008390506000806000836001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156138d157600080fd5b505afa1580156138e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139099190614f06565b506001600160701b03918216999116975095505050505050565b8060ff166001141561398e576001600160a01b0383166000908152600b602052604090205460ff1661398e5760405162461bcd60e51b8152602060048201526014602482015273165bdd4818d85b9d081c995d1c9a595d99481a5d60621b6044820152606401611268565b602554600160a01b900460ff16156139a557600080fd5b60ff80821660009081526015602090815260408083206001600160a01b038716845290915290205416613a085760405162461bcd60e51b815260206004820152600b60248201526a139bdd08195b98589b195960aa1b6044820152606401611268565b6025805460ff60a01b1916600160a01b1790556001600160a01b03831660009081526010602052604081205460ff1615613a5f57506001600160a01b0383166000908152602f602052604081208054919055613afe565b6000613a6b8584613ce5565b6001600160a01b03861660009081526004602090815260408083205460ff88168452602690925290912054919250613aa29161540e565b6001600160a01b0386166000818152602e6020908152604080832060ff89168452825280832094909455918152602f9091522054613ae19082906152c1565b6001600160a01b0386166000908152602f60205260408120559150505b80613b165750506025805460ff60a01b191690555050565b80602a6000828254613b2891906152c1565b90915550506040805160028082526060820183526000926020830190803683375050602554604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015613b9257600080fd5b505afa158015613ba6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bca9190614c7a565b81600081518110613bdd57613bdd6154b9565b60200260200101906001600160a01b031690816001600160a01b0316815250508381600181518110613c1157613c116154b9565b6001600160a01b03928316602091820292909201015260255460405163b6f9de9560e01b815291169063b6f9de95908490613c579060009086908b90429060040161515b565b6000604051808303818588803b158015613c7057600080fd5b505af1158015613c84573d6000803e3d6000fd5b5050604080518681526001600160a01b038a1660208201527f460fc16181df188bd2ec645a6f6dbe15da259268704aabeb2a5b7c94427e71299450019150613cc99050565b60405180910390a150506025805460ff60a01b19169055505050565b6001600160a01b03821660009081526004602090815260408083205460ff8516845260269092528220548291613d1a9161540e565b6001600160a01b0385166000908152602e6020908152604080832060ff88168452909152902054909150811015613d55576000915050611446565b6001600160a01b0384166000908152602e6020908152604080832060ff87168452909152902054600160401b90613d8c908361544e565b613d9691906152fe565b949350505050565b602554613db69030906001600160a01b0316836132d6565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613deb57613deb6154b9565b6001600160a01b03928316602091820292909201810191909152602554604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015613e3f57600080fd5b505afa158015613e53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e779190614c7a565b81600181518110613e8a57613e8a6154b9565b6001600160a01b03928316602091820292909201015260255460405163791ac94760e01b815291169063791ac94790613ed0908590600090869030904290600401615285565b600060405180830381600087803b158015613eea57600080fd5b505af1158015613883573d6000803e3d6000fd5b8060306000828254613f1091906152c1565b9091555050602554613f2d9030906001600160a01b0316846132d6565b60255460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c4016060604051808303818588803b158015613f9557600080fd5b505af1158015613fa9573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129669190614f9f565b602354600090606490613feb90600160481b900460ff168461540e565b613ff591906152fe565b60235490915060009060649061401590600160381b900460ff168561540e565b61401f91906152fe565b60235490915060009060649061403f90600160501b900460ff168661540e565b61404991906152fe565b60235490915060009060649061406990600160581b900460ff168761540e565b61407391906152fe565b905083602b600082825461408791906152c1565b9250508190555082602c60008282546140a091906152c1565b909155505081156141a65781602760008282546140bd91906152c1565b9250508190555081602860008282546140d691906152c1565b90915550600090506140e6612ddc565b90508061410a5782602b60008282546140ff91906152c1565b909155506141a49050565b80614119600160401b8561540e565b61412391906152fe565b600080805260266020527f673668fde1539921a3231470503848f53fc614c057a2345bc3a2f36758a6d3ac805490919061415e9084906152c1565b90915550506000808052602d6020527f6648a85983aca0407b603b260cacb25b5e5e8e5194522de3d8a800e71aa41bae805485929061419e9084906152c1565b90915550505b505b80156129665780602760008282546141be91906152c1565b9250508190555080602960008282546141d791906152c1565b90915550600090506141e7612ddc565b90508061420b5781602b600082825461420091906152c1565b909155506138839050565b8061421a600160401b8461540e565b61422491906152fe565b6001600090815260266020527f5db1dfd2ced311e642486f0e890a646498a1bdee1ad9403b0a73141af8a4c41180549091906142619084906152c1565b909155505060016000908152602d6020527f4ac3b22e31fa68474eb1c8f858cd447cf1ee3eef7de8984178a7afa8f4fe0cd080548492906142a39084906152c1565b9091555050505050505050565b6001600160a01b038416600090815260046020526040902054828110156142e95760405162461bcd60e51b8152600401611268906151e5565b6142f485848461490d565b6142ff848484614a0d565b836001600160a01b0316856001600160a01b03166000805160206155098339815191528560405161433291815260200190565b60405180910390a35050505050565b6001600160a01b038086166000818152601a6020908152604080832054948916835260049091528082205492825290205460ff90921691858110156143985760405162461bcd60e51b8152600401611268906151e5565b6000806143a630898861171b565b905085156145ac576001600160a01b038a166000908152600f602052604090205460ff16614464576001600160a01b038a16600090815260066020526040902054421015806143fc5750603154610100900460ff165b61443d5760405162461bcd60e51b815260206004820152601260248201527153656c6c657220696e2073656c6c4c6f636b60701b6044820152606401611268565b60325461444a90426152c1565b6001600160a01b038b166000908152600660205260409020555b601d548811156144a85760405162461bcd60e51b815260206004820152600f60248201526e223ab6b810383937ba32b1ba34b7b760891b6044820152606401611268565b3060009081526004602052604081205461dead82527f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd546144eb6009600a615363565b6144fa9064174876e80061540e565b614504919061544e565b61450e919061544e565b9050600060205460648361452291906152fe565b61452c919061540e565b9050808a1061454957602354600160281b900460ff1693506145a5565b60235460ff640100000000820481169550600160681b90910416156145a55760235460ff600160601b909104811690841611156145a557602354614598908490600160601b900460ff16615465565b6145a290856152d9565b93505b5050614722565b8615614611576001600160a01b03891660009081526007602052604090205460ff166145fd57601c546145df89866152c1565b11156145fd5760405162461bcd60e51b815260040161126890615238565b6023546301000000900460ff169150614722565b6001600160a01b03891660009081526007602052604090205460ff1661465c57601c5461463e89866152c1565b111561465c5760405162461bcd60e51b815260040161126890615238565b601c5461466989866152c1565b11156146875760405162461bcd60e51b815260040161126890615238565b6001600160a01b038a166000908152600f602052604090205460ff16614712576001600160a01b038a16600090815260066020526040902054421015806146d55750603154610100900460ff165b6147125760405162461bcd60e51b815260206004820152600e60248201526d53656e64657220696e204c6f636b60901b6044820152606401611268565b602354600160301b900460ff1691505b6024546001600160a01b038b8116911614801590614743575060335460ff16155b8015614752575060315460ff16155b801561475b5750855b1561478157601f543060009081526004602052604090205410614781576147818861307d565b6001600160a01b038a16600090815260096020526040812054819060ff166147b25750602354600160481b900460ff165b6001600160a01b038c1660009081526008602052604090205460ff166147e257602354600160381b900460ff1691505b600060ff88166147ff5750602354600160501b900460ff1661481a565b8760ff166001141561481a5750602354600160581b900460ff165b602354600090614876908d90889060ff600160581b8204811691600160501b81048216918a91614853918b91600160401b9004166152d9565b61485d91906152d9565b61486791906152d9565b61487191906152d9565b614b0f565b90506000614884828e61544e565b90506148918f8e8c61490d565b30600090815260046020526040812080548492906148b09084906152c1565b909155506148c190508e828c614a0d565b8d6001600160a01b03168f6001600160a01b0316600080516020615509833981519152836040516148f491815260200190565b60405180910390a3505050505050505050505050505050565b6001600160a01b03831660009081526004602052604081205461493190849061544e565b6001600160a01b03851660009081526010602052604090205490915060ff1615614976576001600160a01b039093166000908152600460205260409020929092555050565b60006149828584613ce5565b6001600160a01b038616600090815260046020908152604080832086905560ff8716835260269091529020549091506149bc90839061540e565b6001600160a01b0386166000818152602e6020908152604080832060ff89168452825280832094909455918152602f9091529081208054839290614a019084906152c1565b90915550505050505050565b6001600160a01b038316600090815260046020526040812054614a319084906152c1565b6001600160a01b03851660009081526010602052604090205490915060ff1615614a76576001600160a01b039093166000908152600460205260409020929092555050565b6000614a828584613ce5565b60ff8416600090815260266020526040902054909150614aa390839061540e565b6001600160a01b0386166000818152602e6020908152604080832060ff89168452825280832094909455918152602f9091529081208054839290614ae89084906152c1565b9091555050506001600160a01b039093166000908152600460205260409020929092555050565b60006127108260ff168460ff1686614b27919061540e565b613d8c919061540e565b8035614b3c816154e5565b919050565b60008083601f840112614b5357600080fd5b50813567ffffffffffffffff811115614b6b57600080fd5b6020830191508360208260051b8501011115614b8657600080fd5b9250929050565b600082601f830112614b9e57600080fd5b8135602067ffffffffffffffff80831115614bbb57614bbb6154cf565b8260051b604051601f19603f83011681018181108482111715614be057614be06154cf565b60405284815283810192508684018288018501891015614bff57600080fd5b600092505b85831015614c2957614c1581614b31565b845292840192600192909201918401614c04565b50979650505050505050565b80516001600160701b0381168114614b3c57600080fd5b803560ff81168114614b3c57600080fd5b600060208284031215614c6f57600080fd5b8135612446816154e5565b600060208284031215614c8c57600080fd5b8151612446816154e5565b60008060408385031215614caa57600080fd5b8235614cb5816154e5565b91506020830135614cc5816154e5565b809150509250929050565b600080600060608486031215614ce557600080fd5b8335614cf0816154e5565b92506020840135614d00816154e5565b929592945050506040919091013590565b60008060408385031215614d2457600080fd5b8235614d2f816154e5565b91506020830135614cc5816154fa565b60008060408385031215614d5257600080fd5b8235614d5d816154e5565b946020939093013593505050565b600080600060608486031215614d8057600080fd5b8335614d8b816154e5565b9250602084013591506040840135614da2816154fa565b809150509250925092565b60008060408385031215614dc057600080fd5b8235614dcb816154e5565b9150614dd960208401614c4c565b90509250929050565b60008060008060408587031215614df857600080fd5b843567ffffffffffffffff80821115614e1057600080fd5b614e1c88838901614b41565b90965094506020870135915080821115614e3557600080fd5b50614e4287828801614b41565b95989497509550505050565b600060208284031215614e6057600080fd5b813567ffffffffffffffff811115614e7757600080fd5b613d9684828501614b8d565b600080600060608486031215614e9857600080fd5b833567ffffffffffffffff811115614eaf57600080fd5b614ebb86828701614b8d565b9350506020840135614d00816154e5565b600060208284031215614ede57600080fd5b8135612446816154fa565b600060208284031215614efb57600080fd5b8151612446816154fa565b600080600060608486031215614f1b57600080fd5b614f2484614c35565b9250614f3260208501614c35565b9150604084015163ffffffff81168114614da257600080fd5b600060208284031215614f5d57600080fd5b5035919050565b600060208284031215614f7657600080fd5b5051919050565b60008060408385031215614f9057600080fd5b50508035926020909101359150565b600080600060608486031215614fb457600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215614fdf57600080fd5b61244682614c4c565b60008060408385031215614ffb57600080fd5b614cb583614c4c565b60008060006060848603121561501957600080fd5b61502284614c4c565b92506020840135615032816154e5565b91506040840135614da2816154fa565b6000806040838503121561505557600080fd5b614d2f83614c4c565b6000806000806080858703121561507457600080fd5b61507d85614c4c565b935061508b60208601614c4c565b925061509960408601614c4c565b91506150a760608601614c4c565b905092959194509250565b600080600080600060a086880312156150ca57600080fd5b6150d386614c4c565b94506150e160208701614c4c565b93506150ef60408701614c4c565b92506150fd60608701614c4c565b915061510b60808701614c4c565b90509295509295909350565b600081518084526020808501945080840160005b838110156151505781516001600160a01b03168752958201959082019060010161512b565b509495945050505050565b8481526080602082015260006151746080830186615117565b6001600160a01b03949094166040830152506060015292915050565b600060208083528351808285015260005b818110156151bd578581018301518582016040015282016151a1565b818111156151cf576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252601890820152775472616e7366657220657863656564732062616c616e636560401b604082015260600190565b6020808252600790820152664d61782031352560c81b604082015260600190565b60208082526010908201526f3bb430b63290383937ba32b1ba34b7b760811b604082015260600190565b6020808252600990820152683737ba1037bbb732b960b91b604082015260600190565b85815284602082015260a0604082015260006152a460a0830186615117565b6001600160a01b0394909416606083015250608001529392505050565b600082198211156152d4576152d46154a3565b500190565b600060ff821660ff84168060ff038211156152f6576152f66154a3565b019392505050565b60008261531b57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561535b578160001904821115615341576153416154a3565b8085161561534e57918102915b93841c9390800290615325565b509250929050565b600061244660ff84168360008261537c57506001611446565b8161538957506000611446565b816001811461539f57600281146153a9576153c5565b6001915050611446565b60ff8411156153ba576153ba6154a3565b50506001821b611446565b5060208310610133831016604e8410600b84101617156153e8575081810a611446565b6153f28383615320565b8060001904821115615406576154066154a3565b029392505050565b6000816000190483118215151615615428576154286154a3565b500290565b600060ff821660ff84168160ff0481118215151615615406576154066154a3565b600082821015615460576154606154a3565b500390565b600060ff821660ff84168082101561547f5761547f6154a3565b90039392505050565b600060001982141561549c5761549c6154a3565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461166357600080fd5b801515811461166357600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212201eb5892d50b0b1db28689f942c39fa41939dafa68e4bf85ffb0e5618c6ca558064736f6c63430008070033

Deployed Bytecode Sourcemap

12249:30990:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39345:265;;;;;;;;;;-1:-1:-1;39345:265:0;;;;;:::i;:::-;;:::i;36285:160::-;;;;;;;;;;;;;:::i;40915:88::-;;;;;;;;;;-1:-1:-1;40992:5:0;;;;;;;;;;;;-1:-1:-1;;;40992:5:0;;;;40915:88;;;;;;;:::i;:::-;;;;;;;;41781:169;;;;;;;;;;-1:-1:-1;41781:169:0;;;;;:::i;:::-;;:::i;:::-;;;12609:14:1;;12602:22;12584:41;;12572:2;12557:18;41781:169:0;12444:187:1;37303:670:0;;;;;;;;;;-1:-1:-1;37303:670:0;;;;;:::i;:::-;;:::i;13383:45::-;;;;;;;;;;;;13425:3;13383:45;;;;;22918:6:1;22906:19;;;22888:38;;22876:2;22861:18;13383:45:0;22744:188:1;30283:98:0;;;;;;;;;;-1:-1:-1;30363:12:0;;30283:98;;;12790:25:1;;;12778:2;12763:18;30283:98:0;12636:185:1;40598:148:0;;;;;;;;;;;;;:::i;41201:102::-;;;;;;;;;;-1:-1:-1;41279:18:0;;41201:102;;13260:67;;;;;;;;;;;;;:::i;42265:386::-;;;;;;;;;;-1:-1:-1;42265:386:0;;;;;:::i;:::-;;:::i;22207:38::-;;;;;;;;;;;;;;;;11772:470;;;;;;;;;;-1:-1:-1;11772:470:0;;;;;:::i;:::-;;:::i;29368:478::-;;;;;;;;;;-1:-1:-1;29676:13:0;;29368:478;;;29676:13;-1:-1:-1;;;29676:13:0;;;;24581:25:1;;-1:-1:-1;;;29698:15:0;;;;24637:2:1;24622:18;;24615:34;-1:-1:-1;;;29722:13:0;;;;24665:18:1;;;24658:34;;;;-1:-1:-1;;;29744:13:0;;;;24723:2:1;24708:18;;24701:34;-1:-1:-1;;;29766:13:0;;;;24766:3:1;24751:19;;24744:35;29788:7:0;;;;;24810:3:1;24795:19;;24788:35;29804:8:0;;;;;24854:3:1;24839:19;;24832:35;-1:-1:-1;;;29821:12:0;;;;24898:3:1;24883:19;;24876:35;24568:3;24553:19;29368:478:0;24238:679:1;8144:106:0;;;;;;;;;;-1:-1:-1;8144:106:0;;;;;:::i;:::-;;:::i;40390:141::-;;;;;;;;;;-1:-1:-1;40390:141:0;;;;;:::i;:::-;;:::i;22611:128::-;;;;;;;;;;-1:-1:-1;22611:128:0;;;;;:::i;:::-;-1:-1:-1;;;;;22702:31:0;22682:4;22702:31;;;:25;:31;;;;;;;;;22611:128;13332:46;;;;;;;;;;;;13376:2;13332:46;;;;;25094:4:1;25082:17;;;25064:36;;25052:2;25037:18;13332:46:0;24922:184:1;41107:88:0;;;;;;;;;;-1:-1:-1;13254:1:0;41107:88;;35297:774;;;;;;;;;;-1:-1:-1;35297:774:0;;;;;:::i;:::-;;:::i;34396:113::-;;;;;;;;;;-1:-1:-1;34396:113:0;;;;;:::i;:::-;;:::i;39928:109::-;;;;;;;;;;-1:-1:-1;39928:109:0;;;;;:::i;:::-;;:::i;13433:51::-;;;;;;;;;;;;13474:10;13433:51;;13730:75;;;;;;;;;;-1:-1:-1;13730:75:0;;;;-1:-1:-1;;;;;13730:75:0;;;;;;-1:-1:-1;;;;;11200:32:1;;;11182:51;;11170:2;11155:18;13730:75:0;11036:203:1;34911:380:0;;;;;;;;;;-1:-1:-1;34911:380:0;;;;;:::i;:::-;;:::i;42657:236::-;;;;;;;;;;-1:-1:-1;42657:236:0;;;;;:::i;:::-;;:::i;26596:25::-;;;;;;;;;;;;;;;;39778:111;;;;;;;;;;-1:-1:-1;39778:111:0;;;;;:::i;:::-;;:::i;22332:27::-;;;;;;;;;;;;;;;;13556:91;;;;;;;;;;;;13605:42;13556:91;;33537:89;;;;;;;;;;-1:-1:-1;33537:89:0;;;;;:::i;:::-;;:::i;38206:152::-;;;;;;;;;;-1:-1:-1;38206:152:0;;;;;:::i;:::-;;:::i;30428:106::-;;;;;;;;;;;;;:::i;37979:26::-;;;;;;;;;;-1:-1:-1;37979:26:0;;;;;;;;;;;38832:155;;;;;;;;;;-1:-1:-1;38832:155:0;;;;;:::i;:::-;;:::i;14391:27::-;;;;;;;;;;;;;;;;14233:45;;;;;;;;;;;;;;;;22155:47;;;;;;;;;;-1:-1:-1;22155:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;34000:105;;;;;;;;;;-1:-1:-1;34000:105:0;;;;;:::i;:::-;;:::i;13058:38::-;;;;;;;;;;-1:-1:-1;13058:38:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;38696:91;;;;;;;;;;-1:-1:-1;38696:91:0;;;;;:::i;:::-;;:::i;22364:31::-;;;;;;;;;;;;;;;;38057:145;;;;;;;;;;-1:-1:-1;38057:145:0;;;;;:::i;:::-;;:::i;36620:108::-;;;;;;;;;;-1:-1:-1;36620:108:0;;;;;:::i;:::-;;:::i;36767:126::-;;;;;;;;;;-1:-1:-1;36767:126:0;;;;;:::i;:::-;;:::i;14939:33::-;;;;;;;;;;-1:-1:-1;14939:33:0;;;;-1:-1:-1;;;14939:33:0;;;;;;29212:150;;;;;;;;;;;;;:::i;:::-;;;;24159:25:1;;;24215:2;24200:18;;24193:34;;;;24132:18;29212:150:0;23985:248:1;13810:76:0;;;;;;;;;;-1:-1:-1;13810:76:0;;;;-1:-1:-1;;;;;13810:76:0;;;41309:115;;;;;;;;;;-1:-1:-1;41309:115:0;;;;;:::i;:::-;-1:-1:-1;;;;;41400:18:0;41377:7;41400:18;;;:9;:18;;;;;;;41309:115;30709:105;;;;;;;;;;-1:-1:-1;30709:105:0;;;;;:::i;:::-;;:::i;22250:36::-;;;;;;;;;;;;;;;;32463:404;;;;;;;;;;-1:-1:-1;32463:404:0;;;;;:::i;:::-;;:::i;13891:75::-;;;;;;;;;;-1:-1:-1;13891:75:0;;;;-1:-1:-1;;;;;13891:75:0;;;14180:48;;;;;;;;;;;;;;;;13971:77;;;;;;;;;;-1:-1:-1;13971:77:0;;;;-1:-1:-1;;;;;13971:77:0;;;33676:117;;;;;;;;;;-1:-1:-1;33676:117:0;;;;;:::i;:::-;;:::i;13652:73::-;;;;;;;;;;;;13683:42;13652:73;;31116:28;;;;;;;;;;-1:-1:-1;31116:28:0;;;;;;;;37107:139;;;;;;;;;;-1:-1:-1;37107:139:0;;;;;:::i;:::-;;:::i;30003:274::-;;;;;;;;;;-1:-1:-1;30003:274:0;;;;;:::i;:::-;;:::i;31051:28::-;;;;;;;;;;-1:-1:-1;31051:28:0;;;;;;;;;;;34689:193;;;;;;;;;;-1:-1:-1;34689:193:0;;;;;:::i;:::-;;:::i;34556:103::-;;;;;;;;;;-1:-1:-1;34556:103:0;;;;;:::i;:::-;;:::i;22400:33::-;;;;;;;;;;;;;;;;41009:92;;;;;;;;;;-1:-1:-1;41088:7:0;;;;;;;;;;;;-1:-1:-1;;;41088:7:0;;;;41009:92;;33840:113;;;;;;;;;;-1:-1:-1;33840:113:0;;;;;:::i;:::-;;:::i;13011:42::-;;;;;;;;;;-1:-1:-1;13011:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18384:163;;;;;;;;;;-1:-1:-1;18384:163:0;;;;;:::i;:::-;;:::i;42899:335::-;;;;;;;;;;-1:-1:-1;42899:335:0;;;;;:::i;:::-;;:::i;34145:215::-;;;;;;;;;;-1:-1:-1;34145:215:0;;;;;:::i;:::-;;:::i;41430:175::-;;;;;;;;;;-1:-1:-1;41430:175:0;;;;;:::i;:::-;;:::i;36116:118::-;;;;;;;;;;;;;:::i;33269:231::-;;;;;;;;;;;;;:::i;13489:62::-;;;;;;;;;;-1:-1:-1;13489:62:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;31600:351;;;;;;:::i;:::-;;:::i;39014:111::-;;;;;;;;;;-1:-1:-1;39014:111:0;;;;;:::i;:::-;;:::i;8037:99::-;;;;;;;;;;-1:-1:-1;8037:99:0;;;;;:::i;:::-;-1:-1:-1;;;;;8115:13:0;8091:4;8115:13;;;;;;;;;;;;;;8037:99;14283:54;;;;;;;;;;;;;;;;38364:145;;;;;;;;;;-1:-1:-1;38364:145:0;;;;;:::i;:::-;;:::i;14907:27::-;;;;;;;;;;-1:-1:-1;14907:27:0;;;;-1:-1:-1;;;14907:27:0;;;;;;38515:145;;;;;;;;;;-1:-1:-1;38515:145:0;;;;;:::i;:::-;;:::i;22291:36::-;;;;;;;;;;;;;;;;29852:145;;;;;;;;;;-1:-1:-1;29852:145:0;;;;;:::i;:::-;-1:-1:-1;;;;;29965:26:0;29942:4;29965:26;;;:10;:26;;;;;;;;;29852:145;30567:105;;;;;;;;;;-1:-1:-1;30567:105:0;;;;;:::i;:::-;;:::i;32302:118::-;;;;;;;;;;-1:-1:-1;32302:118:0;;;;;:::i;:::-;;:::i;40186:198::-;;;;;;;;;;-1:-1:-1;40186:198:0;;;;;:::i;:::-;;:::i;41611:164::-;;;;;;;;;;-1:-1:-1;41611:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;41741:19:0;;;41715:7;41741:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;41611:164;31993:147;;;;;;;;;;-1:-1:-1;31993:147:0;;;;;:::i;:::-;;:::i;31178:380::-;;;;;;;;;;-1:-1:-1;31178:380:0;;;;;:::i;:::-;;:::i;14342:44::-;;;;;;;;;;;;;;;;22745:157;;;;;;;;;;;;;:::i;39164:123::-;;;;;;;;;;-1:-1:-1;39164:123:0;;;;;:::i;:::-;;:::i;39667:76::-;;;;;;;;;;;;;:::i;14591:33::-;;;;;;;;;;;;14622:2;14591:33;;32178:84;;;;;;;;;;-1:-1:-1;32178:84:0;;;;;:::i;:::-;;:::i;32910:311::-;;;;;;;;;;-1:-1:-1;32910:311:0;;;;;:::i;:::-;;:::i;31084:27::-;;;;;;;;;;;;;;;;40823:86;;;;;;;;;;-1:-1:-1;40898:5:0;;-1:-1:-1;;;;;40898:5:0;40823:86;;30820:225;;;;;;;;;;-1:-1:-1;30820:225:0;;;;;:::i;:::-;;:::i;39345:265::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;;;;;;;;;39471:30:::1;::::0;-1:-1:-1;;;39471:30:0;;39495:4:::1;39471:30;::::0;::::1;11182:51:1::0;39432:10:0;;39410:12:::1;::::0;-1:-1:-1;;;;;39471:15:0;::::1;::::0;::::1;::::0;11155:18:1;;39471:30:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39450:51;;39529:1;39516:10;:14;39508:51;;;::::0;-1:-1:-1;;;39508:51:0;;18781:2:1;39508:51:0::1;::::0;::::1;18763:21:1::0;18820:2;18800:18;;;18793:30;-1:-1:-1;;;18839:18:1;;;18832:54;18903:18;;39508:51:0::1;18579:348:1::0;39508:51:0::1;39566:38;::::0;-1:-1:-1;;;39566:38:0;;39581:10:::1;39566:38;::::0;::::1;11727:51:1::0;11794:18;;;11787:34;;;-1:-1:-1;;;;;39566:14:0;::::1;::::0;::::1;::::0;11700:18:1;;39566:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39403:207;;39345:265:::0;:::o;36285:160::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;36340:7:::1;:14:::0;;-1:-1:-1;;36340:14:0::1;36350:4;36340:14;::::0;;36361:56:::1;36380:36;36361:18;:56::i;:::-;36424:7;:15:::0;;-1:-1:-1;;36424:15:0::1;::::0;;36285:160::o;41781:169::-;41873:4;41889:37;41898:10;41910:7;41919:6;41889:8;:37::i;:::-;-1:-1:-1;41940:4:0;41781:169;;;;;:::o;37303:670::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;37451:13:::1;13254:1;37451:2;:13;:::i;:::-;37433:31;::::0;:15;:31:::1;:::i;:::-;37415:49:::0;-1:-1:-1;37501:13:0::1;13254:1;37501:2;:13;:::i;:::-;37486:28;::::0;:12;:28:::1;:::i;:::-;37471:43;;37523:26;13376:2;37552:40;;:18;;:40;;;;:::i;:::-;37523:69;;37599:23;13425:3;37625:37;;:18;;:37;;;;:::i;:::-;37599:63;;37705:18;37686:15;:37;;37669:116;;;::::0;-1:-1:-1;;;37669:116:0;;15205:2:1;37669:116:0::1;::::0;::::1;15187:21:1::0;15244:2;15224:18;;;15217:30;15283:34;15263:18;;;15256:62;-1:-1:-1;;;15334:18:1;;;15327:41;15385:19;;37669:116:0::1;15003:407:1::0;37669:116:0::1;37825:15;37809:12;:31;;37792:107;;;::::0;-1:-1:-1;;;37792:107:0;;17685:2:1;37792:107:0::1;::::0;::::1;17667:21:1::0;17724:2;17704:18;;;17697:30;17763:34;17743:18;;;17736:62;-1:-1:-1;;;17814:18:1;;;17807:38;17862:19;;37792:107:0::1;17483:404:1::0;37792:107:0::1;-1:-1:-1::0;;37906:12:0::1;:30:::0;;;;37943:9:::1;:24:::0;37303:670::o;40598:148::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;40674:5:::1;::::0;:46:::1;::::0;40659:9:::1;::::0;-1:-1:-1;;;;;40674:5:0::1;::::0;40693:21:::1;::::0;40659:9;40674:46;40659:9;40674:46;40693:21;40674:5;:46:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40658:62;;;40735:4;40727:13;;;::::0;::::1;;40651:95;40598:148::o:0;13260:67::-;13314:13;13254:1;13314:2;:13;:::i;:::-;13300:27;;:11;:27;:::i;:::-;13260:67;:::o;42265:386::-;42385:4;42398:36;42408:6;42416:9;42427:6;42398:9;:36::i;:::-;-1:-1:-1;;;;;42468:19:0;;42441:24;42468:19;;;:11;:19;;;;;;;;42488:10;42468:31;;;;;;;;42514:26;;;;42506:59;;;;-1:-1:-1;;;42506:59:0;;16648:2:1;42506:59:0;;;16630:21:1;16687:2;16667:18;;;16660:30;-1:-1:-1;;;16706:18:1;;;16699:50;16766:18;;42506:59:0;16446:344:1;42506:59:0;42572:55;42581:6;42589:10;42601:25;42620:6;42601:16;:25;:::i;:::-;42572:8;:55::i;:::-;-1:-1:-1;42641:4:0;;42265:386;-1:-1:-1;;;;42265:386:0:o;11772:470::-;11862:4;11879:20;11918:6;;;;;;;;;-1:-1:-1;;;;;11918:6:0;-1:-1:-1;;;;;11918:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11902:41:0;;11944:5;11951:6;;;;;;;;;-1:-1:-1;;;;;11951:6:0;-1:-1:-1;;;;;11951:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11902:63;;-1:-1:-1;;;;;;11902:63:0;;;;;;;-1:-1:-1;;;;;11474:15:1;;;11902:63:0;;;11456:34:1;11526:15;;11506:18;;;11499:43;11391:18;;11902:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11879:86;;11977:14;11993:13;12010:30;12027:12;12010:16;:30::i;:::-;11976:64;;;;12051:11;12076:4;12073:138;;;12123:9;12107:12;:6;12116:3;12107:12;:::i;:::-;12106:26;;;;:::i;:::-;12097:35;;12073:138;;;12191:8;12175:12;:6;12184:3;12175:12;:::i;:::-;12174:25;;;;:::i;:::-;12165:34;;12073:138;12228:6;11772:470;-1:-1:-1;;;;;;;11772:470:0:o;8144:106::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8221:13:0;;;::::1;:7;:13:::0;;;::::1;::::0;;;;;;:21;;-1:-1:-1;;8221:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;8144:106::o;40390:141::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;40471:14:::1;:21:::0;;-1:-1:-1;;;;40496:29:0;-1:-1:-1;;;40471:21:0::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;40496:29:0;;;;;-1:-1:-1;;;40496:29:0;::::1;;::::0;;;::::1;;::::0;;40390:141::o;35297:774::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;35487:14:::1;35602::::0;35578;35554;35504:40:::1;35528:16:::0;35504:14;:40:::1;:::i;:::-;:64;;;;:::i;:::-;:88;;;;:::i;:::-;:112;;;;:::i;:::-;35487:129;;35631:8;:15;;35643:3;35631:15;35623:59;;;::::0;-1:-1:-1;;;35623:59:0;;14845:2:1;35623:59:0::1;::::0;::::1;14827:21:1::0;14884:2;14864:18;;;14857:30;14923:33;14903:18;;;14896:61;14974:18;;35623:59:0::1;14643:355:1::0;35623:59:0::1;35717:2;35699:14;:20;;;;35691:40;;;;-1:-1:-1::0;;;35691:40:0::1;;;;;;;:::i;:::-;35766:2;35746:16;:22;;;;35738:42;;;;-1:-1:-1::0;;;35738:42:0::1;;;;;;;:::i;:::-;35813:2;35795:14;:20;;;;35787:40;;;;-1:-1:-1::0;;;35787:40:0::1;;;;;;;:::i;:::-;35860:2;35842:14;:20;;;;35834:40;;;;-1:-1:-1::0;;;35834:40:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;35883:13:0::1;:30:::0;;-1:-1:-1;;;;35920:34:0;-1:-1:-1;;;35883:30:0::1;::::0;;::::1;;-1:-1:-1::0;;;;35920:34:0;;-1:-1:-1;;;35920:34:0;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;35998:30:0;-1:-1:-1;;;35961:30:0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;35998:30:0;;;;;-1:-1:-1;;;35998:30:0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;36035:30:0::1;-1:-1:-1::0;;;36035:30:0;;;::::1;;::::0;;;::::1;::::0;;35297:774::o;34396:113::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;34478:16:::1;:25:::0;;-1:-1:-1;;34478:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34396:113::o;39928:109::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40003:20:0::1;40026:5;40003:20:::0;;;:10:::1;:20;::::0;;;;:28;;-1:-1:-1;;40003:28:0::1;::::0;;39928:109::o;34911:380::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;14622:2:::1;35066:16;::::0;::::1;;::::0;::::1;::::0;:37:::1;;-1:-1:-1::0;14622:2:0::1;35086:17;::::0;::::1;;;35066:37;:62;;;;-1:-1:-1::0;14622:2:0::1;35107:21;::::0;::::1;;;35066:62;35050:121;;;::::0;-1:-1:-1;;;35050:121:0;;20183:2:1;35050:121:0::1;::::0;::::1;20165:21:1::0;20222:2;20202:18;;;20195:30;-1:-1:-1;;;20241:18:1;;;20234:55;20306:18;;35050:121:0::1;19981:349:1::0;35050:121:0::1;35180:7;:16:::0;;-1:-1:-1;;35203:18:0;35180:16;::::1;::::0;;::::1;;-1:-1:-1::0;;35203:18:0;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;35259:26:0;-1:-1:-1;;;35228:24:0;;::::1;::::0;;;::::1;-1:-1:-1::0;;35259:26:0;;;;;-1:-1:-1;;;35259:26:0;;;::::1;;::::0;;;::::1;::::0;;34911:380::o;42657:236::-;42782:10;42749:4;42817:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;42817:32:0;;;;;;;;;;42749:4;;42765:104;;42801:7;;42817:45;;42852:10;;42817:45;:::i;39778:111::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39853:23:0::1;;::::0;;;:10:::1;:23;::::0;;;;:30;;-1:-1:-1;;39853:30:0::1;39879:4;39853:30;::::0;;39778:111::o;33537:89::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;33604:7:::1;:16:::0;;;::::1;;;;-1:-1:-1::0;;33604:16:0;;::::1;::::0;;;::::1;::::0;;33537:89::o;38206:152::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;38274:17:::1;:24:::0;;-1:-1:-1;;;;;38274:24:0;;::::1;-1:-1:-1::0;;;;;;38274:24:0;;::::1;::::0;::::1;::::0;;:17:::1;38305:40:::0;;;:21:::1;:40;::::0;;;;:47;;-1:-1:-1;;38305:47:0::1;38274:24:::0;38305:47:::1;::::0;;38206:152::o;30428:106::-;30516:12;;30498:30;;:15;:30;:::i;:::-;30484:10;30474:21;;;;:9;:21;;;;;:54;30428:106::o;38832:155::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;38935:22:::1;:46:::0;;-1:-1:-1;;;;;38935:46:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;38935:46:0;;::::1;::::0;;;::::1;::::0;;38832:155::o;34000:105::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;34073:17:::1;:26:::0;;-1:-1:-1;;34073:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34000:105::o;38696:91::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;38759:14:::1;:22:::0;;;::::1;;;;-1:-1:-1::0;;38759:22:0;;::::1;::::0;;;::::1;::::0;;38696:91::o;38057:145::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;38122:15:::1;:22:::0;;-1:-1:-1;;;;;38122:22:0;;::::1;-1:-1:-1::0;;;;;;38122:22:0;;::::1;::::0;::::1;::::0;;:15:::1;38151:38:::0;;;:21:::1;:38;::::0;;;;:45;;-1:-1:-1;;38151:45:0::1;38122:22:::0;38151:45:::1;::::0;;38057:145::o;36620:108::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36697:18:0::1;;::::0;;;:9:::1;:18;::::0;;;;:25;;-1:-1:-1;;36697:25:0::1;36718:4;36697:25;::::0;;36620:108::o;36767:126::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36850:30:0::1;;::::0;;;:21:::1;:30;::::0;;;;:37;;-1:-1:-1;;36850:37:0::1;36883:4;36850:37;::::0;;36767:126::o;29212:150::-;29254:15;;29315:13;13254:1;29315:2;:13;:::i;:::-;29300:12;;:28;;;;:::i;:::-;29342:13;13254:1;29342:2;:13;:::i;:::-;29330:9;;:25;;;;:::i;:::-;29292:64;;;;29212:150;;:::o;30709:105::-;30772:36;30789:10;30801:3;30806:1;30772:16;:36::i;32463:404::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32573:31:0;::::1;;::::0;;;:25:::1;:31;::::0;;;;;::::1;;32565:40;;;::::0;::::1;;32612:20;32635:27;32651:4;32657;32635:15;:27::i;:::-;32719:20;::::0;::::1;;::::0;;;:14:::1;:20;::::0;;;;;;;;-1:-1:-1;;;;;32701:15:0;::::1;::::0;;:9:::1;:15:::0;;;;;;;32612:50;;-1:-1:-1;32701:38:0::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;;;;32669:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;:29:::1;::::0;::::1;::::0;;;;;;;:70;;;;32746:14;;;:8:::1;:14:::0;;;;;;:30;;32764:12;;32669:23;32746:30:::1;::::0;32764:12;;32746:30:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;32783:31:0;::::1;;::::0;;;:25:::1;:31;::::0;;;;;;;:38;;-1:-1:-1;;32783:38:0::1;32817:4;32783:38;::::0;;32846:9:::1;:15:::0;;;;;;32828:14:::1;:33:::0;;32846:15;;32828:14;;:33:::1;::::0;32846:15;;32828:33:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;32463:404:0:o;33676:117::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33758:21:0;;;::::1;;::::0;;;:15:::1;:21;::::0;;;;:29;;-1:-1:-1;;33758:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33676:117::o;37107:139::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37211:21:0;;;::::1;;::::0;;;:12:::1;:21;::::0;;;;:29;;-1:-1:-1;;37211:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37107:139::o;30003:274::-;-1:-1:-1;;;;;30142:25:0;;30104:7;30142:25;;;:9;:25;;;;;;30190:15;30178:27;;30174:58;;-1:-1:-1;30223:1:0;;30003:274;-1:-1:-1;;30003:274:0:o;30174:58::-;30245:26;30256:15;30245:8;:26;:::i;:::-;30238:33;30003:274;-1:-1:-1;;;30003:274:0:o;34689:193::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;13474:10:::1;34777:34:::0;::::1;;34769:70;;;::::0;-1:-1:-1;;;34769:70:0;;21906:2:1;34769:70:0::1;::::0;::::1;21888:21:1::0;21945:2;21925:18;;;21918:30;-1:-1:-1;;;21964:18:1;;;21957:53;22027:18;;34769:70:0::1;21704:347:1::0;34769:70:0::1;34846:12;:30:::0;34689:193::o;34556:103::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;34626:16:::1;:27:::0;;;::::1;;;;-1:-1:-1::0;;34626:27:0;;::::1;::::0;;;::::1;::::0;;34556:103::o;33840:113::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33920:19:0;;;::::1;;::::0;;;:13:::1;:19;::::0;;;;:27;;-1:-1:-1;;33920:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33840:113::o;18384:163::-;-1:-1:-1;;;;;18466:13:0;;18436:4;18466:13;;;:7;:13;;;;;;;;;18525:9;:15;;;;;;18466:13;;;;;18498:14;18436:4;18514:6;18466:13;;18514:6;:::i;:::-;18498:24;;;;;;;;;;;;;;;;:42;;;;:::i;42899:335::-;43051:10;42996:4;43039:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;43039:32:0;;;;;;;;;;43086:35;;;;43078:60;;;;-1:-1:-1;;;43078:60:0;;22258:2:1;43078:60:0;;;22240:21:1;22297:2;22277:18;;;22270:30;-1:-1:-1;;;22316:18:1;;;22309:42;22368:18;;43078:60:0;22056:336:1;43078:60:0;43145:65;43154:10;43166:7;43175:34;43194:15;43175:16;:34;:::i;43145:65::-;-1:-1:-1;43224:4:0;;42899:335;-1:-1:-1;;;42899:335:0:o;34145:215::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;34244:1:::1;34235:6;:10;:32;;;;;34258:9;34249:6;:18;34235:32;34227:75;;;::::0;-1:-1:-1;;;34227:75:0;;19824:2:1;34227:75:0::1;::::0;::::1;19806:21:1::0;19863:2;19843:18;;;19836:30;19902:32;19882:18;;;19875:60;19952:18;;34227:75:0::1;19622:354:1::0;34227:75:0::1;34341:13;13254:1;34341:2;:13;:::i;:::-;34332:22;::::0;:6;:22:::1;:::i;:::-;34309:20;:45:::0;-1:-1:-1;34145:215:0:o;41430:175::-;41525:4;41541:40;41551:10;41563:9;41574:6;41541:9;:40::i;36116:118::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;36172:56:::1;36191:36;36172:18;:56::i;:::-;36116:118::o:0;33269:231::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;33348:16:::1;::::0;;33331:14:::1;33371:20:::0;;;;33414:15:::1;::::0;:41:::1;::::0;33348:16;;33331:14;-1:-1:-1;;;;;33414:15:0;;::::1;::::0;33348:16;;33331:14;33414:41;33331:14;33414:41;33348:16;33414:15;:41:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33398:57;;;33470:4;33462:32;;;::::0;-1:-1:-1;;;33462:32:0;;21562:2:1;33462:32:0::1;::::0;::::1;21544:21:1::0;21601:2;21581:18;;;21574:30;-1:-1:-1;;;21620:18:1;;;21613:45;21675:18;;33462:32:0::1;21360:339:1::0;33462:32:0::1;33324:176;;33269:231::o:0;31600:351::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;31763:12;;31719:9:::1;::::0;31705:11:::1;::::0;31757:18:::1;::::0;31719:9;31757:18:::1;:::i;:::-;31735:40;;31782:9;31803::::0;31798:148:::1;31835:1;31820:5;:12;:16;;;;:::i;:::-;31814:1;:23;31798:148;;31868:5;31874:1;31868:8;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;31860:22:0::1;:35;31883:11;31860:35;;;;;;;;;;;;;;;;;;;;;;;31853:42;;31912:4;31904:13;;;::::0;::::1;;31933:5;::::0;-1:-1:-1;31839:3:0;::::1;::::0;::::1;:::i;:::-;;;;31798:148;;;;31698:253;;;31600:351:::0;:::o;39014:111::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39088:24:0::1;;::::0;;;:10:::1;:24;::::0;;;;:31;;-1:-1:-1;;39088:31:0::1;39115:4;39088:31;::::0;;39014:111::o;38364:145::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;38427:16:::1;:23:::0;;-1:-1:-1;;;;;38427:23:0;;::::1;-1:-1:-1::0;;;;;;38427:23:0;;::::1;::::0;::::1;::::0;;:16:::1;38457:39:::0;;;:21:::1;:39;::::0;;;;:46;;-1:-1:-1;;38457:46:0::1;38427:23:::0;38457:46:::1;::::0;;38364:145::o;38515:::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;38578:16:::1;:23:::0;;-1:-1:-1;;;;;38578:23:0;;::::1;-1:-1:-1::0;;;;;;38578:23:0;;::::1;::::0;::::1;::::0;;:16:::1;38608:39:::0;;;:21:::1;:39;::::0;;;;:46;;-1:-1:-1;;38608:46:0::1;38578:23:::0;38608:46:::1;::::0;;38515:145::o;30567:105::-;30630:36;30647:10;30659:3;30664:1;30630:16;:36::i;32302:118::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;32401:13:::1;13254:1;32401:2;:13;:::i;:::-;32390:24;::::0;:8;:24:::1;:::i;:::-;32375:12;:39:::0;-1:-1:-1;32302:118:0:o;40186:198::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;40288:9:::1;40284:89;40299:15:::0;;::::1;40284:89;;;40353:5;;40359:1;40353:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;40335:6;:15;40342:4;;40347:1;40342:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40335:15:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;40335:15:0;:26;;-1:-1:-1;;40335:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40316:3;::::1;::::0;::::1;:::i;:::-;;;;40284:89;;31993:147:::0;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;32103:18:::1;::::0;;::::1;;::::0;;;:12:::1;:18;::::0;;;;;;;-1:-1:-1;;;;;32103:23:0;;::::1;::::0;;;;;;:31;;;::::1;;-1:-1:-1::0;;32103:31:0;;::::1;::::0;;;::::1;::::0;;31993:147::o;31178:380::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;31299:19:::1;31327:5;:12;31321:3;:18;;;;:::i;:::-;31299:40:::0;-1:-1:-1;31371:5:0;31346:15:::1;::::0;31400:153:::1;31437:1;31422:5;:12;:16;;;;:::i;:::-;31416:1;:23;31400:153;;31462:8;-1:-1:-1::0;;;;;31462:17:0::1;;31480:5;31486:1;31480:8;;;;;;;;:::i;:::-;;;;;;;31490:11;31462:40;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;11745:32:1;;;;11727:51;;11809:2;11794:18;;11787:34;11715:2;11700:18;;11553:274;31462:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31455:47;;31519:4;31511:13;;;::::0;::::1;;31540:5;::::0;-1:-1:-1;31441:3:0;::::1;::::0;::::1;:::i;:::-;;;;31400:153;;;;31292:266;;;31178:380:::0;;;:::o;22745:157::-;22826:18;;22862:14;;22793:7;;22826:18;22851:25;;22826:18;22851:25;:::i;39164:123::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39246:27:0::1;39276:5;39246:27:::0;;;:10:::1;:27;::::0;;;;:35;;-1:-1:-1;;39246:35:0::1;::::0;;39164:123::o;39667:76::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;39718:11:::1;:19:::0;;-1:-1:-1;;39718:19:0::1;::::0;;39667:76::o;32178:84::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;32239:9:::1;:17:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;32239:17:0;;::::1;::::0;;;::::1;::::0;;32178:84::o;32910:311::-;8306:10;8298:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;8333:5:0;;-1:-1:-1;;;;;8333:5:0;8321:10;:17;8298:40;8289:63;;;;-1:-1:-1;;;8289:63:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33018:31:0;::::1;;::::0;;;:25:::1;:31;::::0;;;;;::::1;;33010:40;;;::::0;::::1;;-1:-1:-1::0;;;;;33057:31:0;::::1;33091:5;33057:31:::0;;;:25:::1;:31;::::0;;;;;;;:39;;-1:-1:-1;;33057:39:0::1;::::0;;33121:9:::1;:15:::0;;;;;;33103:14:::1;:33:::0;;33121:15;;33103:14;;:33:::1;::::0;33121:15;;33103:33:::1;:::i;:::-;::::0;;;-1:-1:-1;;33195:20:0::1;::::0;::::1;;::::0;;;:14:::1;:20;::::0;;;;;;;;-1:-1:-1;;;;;33177:15:0;::::1;::::0;;:9:::1;:15:::0;;;;;;;:38:::1;::::0;33195:20;33177:38:::1;:::i;:::-;-1:-1:-1::0;;;;;33145:23:0;;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;:29:::1;::::0;;::::1;::::0;;;;;;:70;32910:311::o;30820:225::-;-1:-1:-1;;;;;30927:31:0;;30904:7;30927:31;;;:25;:31;;;;;;;;30923:58;;;-1:-1:-1;;;;;;30967:14:0;;;;;;:8;:14;;;;;;30960:21;;30923:58;-1:-1:-1;;;;;31025:14:0;;;;;;:8;:14;;;;;;30995:27;31034:4;31017;30995:15;:27::i;:::-;:44;;;;:::i;26797:1655::-;26701:27;:34;;-1:-1:-1;;26701:34:0;26731:4;26701:34;;;26929:4:::1;26701:27:::0;26911:24;;;:9:::1;:24;::::0;;;;;26993:13:::1;::::0;26911:24;;26701:27;-1:-1:-1;;;26993:13:0;::::1;26701:34:::0;26993:13;;::::1;::::0;26960:30:::1;::::0;-1:-1:-1;;;26977:13:0;::::1;::::0;::::1;::::0;-1:-1:-1;;;26960:13:0;::::1;;:30;:::i;:::-;:46;;;;:::i;:::-;26942:64;;;;27015:19;27056:3;27038:9;;27050:2;27038:14;;;;:::i;:::-;27037:22;;;;:::i;:::-;27070:17;::::0;27015:44;;-1:-1:-1;27070:17:0::1;;27066:74;;;-1:-1:-1::0;27112:20:0::1;::::0;27066:74:::1;27168:7;::::0;::::1;::::0;::::1;;;27182:108:::0;::::1;;;27222:10;27208:11;:24;27204:79;;;27259:14;27272:1;27259:10:::0;:14:::1;:::i;:::-;27245:28;;27204:79;27296:7;:21:::0;;;::::1;;;;-1:-1:-1::0;;27296:21:0;::::1;::::0;::::1;::::0;;;::::1;27328:7:::0;;;;;;27324:59:::1;;;27358:19;27376:1;27358:15:::0;:19:::1;:::i;:::-;27344:33;;27324:59;27419:11;27401:15;:29;:46;;;-1:-1:-1::0;27434:13:0::1;::::0;::::1;::::0;27401:46:::1;27397:75;;;27458:7;;;;;;27397:75;27523:13;::::0;27480:25:::1;::::0;27508:40:::1;::::0;::::1;::::0;27509:27:::1;::::0;-1:-1:-1;;;27523:13:0;::::1;;;27509:11:::0;:27:::1;:::i;:::-;27508:40;;;;:::i;:::-;27598:13;::::0;27480:68;;-1:-1:-1;27555:25:0::1;::::0;27583:40:::1;::::0;::::1;::::0;27584:27:::1;::::0;-1:-1:-1;;;27598:13:0;::::1;;;27584:11:::0;:27:::1;:::i;:::-;27583:40;;;;:::i;:::-;27675:15;::::0;27555:68;;-1:-1:-1;27630:27:0::1;::::0;27660:42:::1;::::0;::::1;::::0;27661:29:::1;::::0;-1:-1:-1;;;27675:15:0;::::1;;;27661:11:::0;:29:::1;:::i;:::-;27660:42;;;;:::i;:::-;27630:72:::0;-1:-1:-1;27709:17:0::1;27630:72:::0;27729:44:::1;27756:17:::0;27729;:44:::1;:::i;:::-;:73;;;;:::i;:::-;27709:93;;27862:11;27849:9;:24;27845:97;;27908:25;27923:9:::0;27908:11;:25:::1;:::i;:::-;27884:50;::::0;;::::1;:::i;:::-;;;27845:97;27950:16;27969:21;27989:1;27969:17:::0;:21:::1;:::i;:::-;27950:40:::0;-1:-1:-1;27997:19:0::1;28019:28;27950:40:::0;28019:17;:28:::1;:::i;:::-;27997:50:::0;-1:-1:-1;28102:19:0;28068:31:::1;28082:17:::0;27997:50;28068:31:::1;:::i;:::-;:53;;;;:::i;:::-;28056:65:::0;-1:-1:-1;28158:21:0::1;28186:27;28056:65:::0;28186:16:::1;:27::i;:::-;28220:14;28238:41;28262:17:::0;28238:21:::1;:41;:::i;:::-;28220:60:::0;-1:-1:-1;28289:14:0::1;28331:9:::0;28307:20:::1;28316:11:::0;28220:60;28307:20:::1;:::i;:::-;28306:34;;;;:::i;:::-;28289:51;;28347:31;28361:8;28371:6;28347:13;:31::i;:::-;28387:59;28404:41;28428:17:::0;28404:21:::1;:41;:::i;:::-;28387:16;:59::i;:::-;26878:1574;;;;;;;;;;;;;26742:1;-1:-1:-1::0;26750:27:0;:35;;-1:-1:-1;;26750:35:0;;;26797:1655::o;41956:303::-;-1:-1:-1;;;;;42066:20:0;;42058:50;;;;-1:-1:-1;;;42058:50:0;;15617:2:1;42058:50:0;;;15599:21:1;15656:2;15636:18;;;15629:30;-1:-1:-1;;;15675:18:1;;;15668:47;15732:18;;42058:50:0;15415:341:1;42058:50:0;-1:-1:-1;;;;;42123:21:0;;42115:49;;;;-1:-1:-1;;;42115:49:0;;17341:2:1;42115:49:0;;;17323:21:1;17380:2;17360:18;;;17353:30;-1:-1:-1;;;17399:18:1;;;17392:45;17454:18;;42115:49:0;17139:339:1;42115:49:0;-1:-1:-1;;;;;42171:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;42220:33;;12790:25:1;;;42220:33:0;;12763:18:1;42220:33:0;;;;;;;41956:303;;;:::o;16491:1875::-;-1:-1:-1;;;;;16587:20:0;;16579:51;;;;-1:-1:-1;;;16579:51:0;;14145:2:1;16579:51:0;;;14127:21:1;14184:2;14164:18;;;14157:30;-1:-1:-1;;;14203:18:1;;;14196:48;14261:18;;16579:51:0;13943:342:1;16579:51:0;-1:-1:-1;;;;;16649:23:0;;16641:52;;;;-1:-1:-1;;;16641:52:0;;15963:2:1;16641:52:0;;;15945:21:1;16002:2;15982:18;;;15975:30;-1:-1:-1;;;16021:18:1;;;16014:46;16077:18;;16641:52:0;15761:340:1;16641:52:0;16707:11;;;;16704:113;;;-1:-1:-1;;;;;16744:18:0;;;;;;:10;:18;;;;;;;;16743:19;:45;;;;-1:-1:-1;;;;;;16767:21:0;;;;;;:10;:21;;;;;;;;16766:22;16743:45;16735:70;;;;-1:-1:-1;;;16735:70:0;;19483:2:1;16735:70:0;;;19465:21:1;19522:2;19502:18;;;19495:30;-1:-1:-1;;;19541:18:1;;;19534:42;19593:18;;16735:70:0;19281:336:1;16735:70:0;-1:-1:-1;;;;;16850:17:0;;16831:15;16850:17;;;:9;:17;;;;;;;;;:41;;-1:-1:-1;;;;;;16871:20:0;;;;;;:9;:20;;;;;;;;16850:41;:60;;;-1:-1:-1;;;;;;16895:15:0;;:7;:15;;;;;;;;;;;;;16850:60;:82;;;-1:-1:-1;;;;;;16914:18:0;;:7;:18;;;;;;;;;;;;;16850:82;16831:102;-1:-1:-1;16946:23:0;-1:-1:-1;;;;;16971:21:0;;16987:4;16971:21;;:49;;-1:-1:-1;;;;;;16996:24:0;;17015:4;16996:24;16971:49;17073:19;;16946:75;;-1:-1:-1;17034:24:0;;-1:-1:-1;;;;;17063:29:0;;;17073:19;;17063:29;:63;;;;-1:-1:-1;;;;;;17096:30:0;;13605:42;17096:30;17063:63;17062:143;;;-1:-1:-1;17154:19:0;;-1:-1:-1;;;;;17141:32:0;;;17154:19;;17141:32;:63;;;;-1:-1:-1;;;;;;17177:27:0;;13605:42;17177:27;17141:63;17034:172;;17224:18;:41;;;;17246:19;17224:41;:55;;;;17269:10;17224:55;17221:148;;;-1:-1:-1;;;;;17341:15:0;;;;;;:7;:15;;;;;;17296:61;;17313:6;;17321:9;;17332:6;;17341:15;;17296:16;:61::i;:::-;17390:14;;;;;;;17385:968;;17443:19;;17423:11;;-1:-1:-1;;;;;17435:27:0;;;17443:19;;17435:27;;:57;;-1:-1:-1;;;;;;17465:27:0;;13605:42;17465:27;17435:57;17531:19;;17423:69;;-1:-1:-1;17507:12:0;;-1:-1:-1;;;;;17520:30:0;;;17531:19;;17520:30;;:63;;-1:-1:-1;;;;;;17553:30:0;;13605:42;17553:30;17520:63;-1:-1:-1;;;;;17606:14:0;;;;;;:6;:14;;;;;;17507:76;;-1:-1:-1;17606:14:0;;;:34;;-1:-1:-1;;;;;;17623:17:0;;;;;;:6;:17;;;;;;;;17606:34;:54;;;-1:-1:-1;17649:10:0;17642:18;;;;:6;:18;;;;;;;;17606:54;17602:473;;;17691:54;17706:6;17713:9;17723:6;17730;17737:7;17691:14;:54::i;:::-;17602:473;;;17801:9;;;;;;;17798:258;;;17860:9;-1:-1:-1;;;;;17844:28:0;17853:6;-1:-1:-1;;;;;17844:28:0;-1:-1:-1;;;;;;;;;;;17870:1:0;17844:28;;;;12790:25:1;;12778:2;12763:18;;12636:185;17844:28:0;;;;;;;;17899:7;;;;;16491:1875;;;:::o;17798:258::-;17991:14;;;;;;;17983:49;;;;-1:-1:-1;;;17983:49:0;;18094:2:1;17983:49:0;;;18076:21:1;18133:2;18113:18;;;18106:30;-1:-1:-1;;;18152:18:1;;;18145:53;18215:18;;17983:49:0;17892:347:1;17983:49:0;17406:670;;17385:968;;;18145:19;;18126:10;;-1:-1:-1;;;;;18137:27:0;;;18145:19;;18137:27;;:57;;-1:-1:-1;;;;;;18167:27:0;;13605:42;18167:27;18137:57;18232:19;;18126:68;;-1:-1:-1;18209:11:0;;-1:-1:-1;;;;;18221:30:0;;;18232:19;;18221:30;;:63;;-1:-1:-1;;;;;;18254:30:0;;13605:42;18254:30;18221:63;18209:75;;18299:52;18314:6;18321:9;18331:6;18338:5;18344:6;18299:14;:52::i;:::-;18106:247;;17385:968;16568:1798;;;16491:1875;;;:::o;11388:376::-;11458:4;11464;11481:19;11518:12;11481:50;;11542:21;11574:22;11607:21;11689:4;-1:-1:-1;;;;;11689:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;11718:38:0;;;;;;;-1:-1:-1;11388:376:0;-1:-1:-1;;;;;;11388:376:0:o;25512:1078::-;25616:4;:9;;25624:1;25616:9;25612:83;;;-1:-1:-1;;;;;25644:18:0;;;;;;:12;:18;;;;;;;;25636:51;;;;-1:-1:-1;;;25636:51:0;;19134:2:1;25636:51:0;;;19116:21:1;19173:2;19153:18;;;19146:30;-1:-1:-1;;;19192:18:1;;;19185:50;19252:18;;25636:51:0;18932:344:1;25636:51:0;25710:14;;-1:-1:-1;;;25710:14:0;;;;25709:15;25701:24;;;;;;25740:18;;;;;;;;:12;:18;;;;;;;;-1:-1:-1;;;;;25740:23:0;;;;;;;;;;;25732:47;;;;-1:-1:-1;;;25732:47:0;;16308:2:1;25732:47:0;;;16290:21:1;16347:2;16327:18;;;16320:30;-1:-1:-1;;;16366:18:1;;;16359:41;16417:18;;25732:47:0;16106:335:1;25732:47:0;25786:14;:21;;-1:-1:-1;;;;25786:21:0;-1:-1:-1;;;25786:21:0;;;-1:-1:-1;;;;;25839:31:0;;25786:21;25839:31;;;:25;:31;;;;;;25786:21;25839:31;25835:328;;;-1:-1:-1;;;;;;25890:14:0;;;;;;:8;:14;;;;;;;25913:18;;;25835:328;;;25954:17;25974:27;25990:4;25996;25974:15;:27::i;:::-;-1:-1:-1;;;;;26067:15:0;;;;;;:9;:15;;;;;;;;;26044:20;;;;;:14;:20;;;;;;;25954:47;;-1:-1:-1;26044:38:0;;;:::i;:::-;-1:-1:-1;;;;;26012:23:0;;;;;;:17;:23;;;;;;;;:29;;;;;;;;;;:70;;;;26102:14;;;:8;:14;;;;;:26;;26119:9;;26102:26;:::i;:::-;-1:-1:-1;;;;;26137:14:0;;26154:1;26137:14;;;:8;:14;;;;;:18;26093:35;-1:-1:-1;;25835:328:0;26173:11;26169:71;;-1:-1:-1;;26195:14:0;:22;;-1:-1:-1;;;;26195:22:0;;;-1:-1:-1;;25512:1078:0:o;26169:71::-;26262:6;26246:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;26299:16:0;;;26313:1;26299:16;;;;;;;;26275:21;;26299:16;;;;;;;;-1:-1:-1;;26332:14:0;;:21;;;-1:-1:-1;;;26332:21:0;;;;26275:40;;-1:-1:-1;;;;;;26332:14:0;;;;:19;;-1:-1:-1;26332:21:0;;;;;;;;;;;;;;:14;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26322:4;26327:1;26322:7;;;;;;;;:::i;:::-;;;;;;:31;-1:-1:-1;;;;;26322:31:0;;;-1:-1:-1;;;;;26322:31:0;;;;;26370:3;26360:4;26365:1;26360:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26360:13:0;;;:7;;;;;;;;;:13;26380:14;;:126;;-1:-1:-1;;;26380:126:0;;:14;;;:65;;26461:6;;26380:126;;:14;;26478:4;;26484;;26490:15;;26380:126;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26520:35:0;;;23293:25:1;;;-1:-1:-1;;;;;23354:32:1;;23349:2;23334:18;;23327:60;26520:35:0;;-1:-1:-1;23266:18:1;;-1:-1:-1;26520:35:0;;-1:-1:-1;23119:274:1;26520:35:0;;;;;;;;-1:-1:-1;;26562:14:0;:22;;-1:-1:-1;;;;26562:22:0;;;-1:-1:-1;;;25512:1078:0:o;23817:335::-;-1:-1:-1;;;;;23970:17:0;;23907:7;23970:17;;;:9;:17;;;;;;;;;23947:20;;;;;:14;:20;;;;;;23907:7;;23947:40;;;:::i;:::-;-1:-1:-1;;;;;24013:25:0;;;;;;:17;:25;;;;;;;;:31;;;;;;;;;;;23926:61;;-1:-1:-1;24000:44:0;;23996:58;;;24053:1;24046:8;;;;;23996:58;-1:-1:-1;;;;;24089:25:0;;;;;;:17;:25;;;;;;;;:31;;;;;;;;;;;-1:-1:-1;;;22145:5:0;24076:44;;:10;:44;:::i;:::-;24075:71;;;;:::i;:::-;24061:85;23817:335;-1:-1:-1;;;;23817:335:0:o;28458:397::-;28547:14;;28515:56;;28532:4;;-1:-1:-1;;;;;28547:14:0;28564:6;28515:8;:56::i;:::-;28602:16;;;28616:1;28602:16;;;;;;;;28578:21;;28602:16;;;;;;;;;;-1:-1:-1;28602:16:0;28578:40;;28643:4;28625;28630:1;28625:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28625:23:0;;;:7;;;;;;;;;;:23;;;;28665:14;;:21;;;-1:-1:-1;;;28665:21:0;;;;:14;;;;;:19;;:21;;;;;28625:7;;28665:21;;;;;:14;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28655:4;28660:1;28655:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28655:31:0;;;:7;;;;;;;;;:31;28693:14;;:156;;-1:-1:-1;;;28693:156:0;;:14;;;:65;;:156;;28767:6;;28693:14;;28792:4;;28813;;28827:15;;28693:156;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28861:345;28953:9;28939:10;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;29001:14:0;;28969:61;;28986:4;;-1:-1:-1;;;;;29001:14:0;29018:11;28969:8;:61::i;:::-;29037:14;;:163;;-1:-1:-1;;;29037:163:0;;29102:4;29037:163;;;12173:34:1;;;12223:18;;;12216:34;;;29037:14:0;12266:18:1;;;12259:34;;;12309:18;;;12302:34;12352:19;;;12345:44;29178:15:0;12405:19:1;;;12398:35;-1:-1:-1;;;;;29037:14:0;;;;:30;;29075:9;;12107:19:1;;29037:163:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24158:1219::-;24256:13;;24218:22;;24273:3;;24244:25;;-1:-1:-1;;;24256:13:0;;;;24244:9;:25;:::i;:::-;24243:33;;;;:::i;:::-;24323:15;;24218:58;;-1:-1:-1;24283:24:0;;24342:3;;24311:27;;-1:-1:-1;;;24323:15:0;;;;24311:9;:27;:::i;:::-;24310:35;;;;:::i;:::-;24386:13;;24283:62;;-1:-1:-1;24352:18:0;;24403:3;;24374:25;;-1:-1:-1;;;24386:13:0;;;;24374:9;:25;:::i;:::-;24373:33;;;;:::i;:::-;24447:13;;24352:54;;-1:-1:-1;24413:18:0;;24464:3;;24435:25;;-1:-1:-1;;;24447:13:0;;;;24435:9;:25;:::i;:::-;24434:33;;;;:::i;:::-;24413:54;;24494:14;24474:16;;:34;;;;;;;:::i;:::-;;;;;;;;24537:16;24515:18;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;;24566:14:0;;24562:400;;24618:10;24591:23;;:37;;;;;;;:::i;:::-;;;;;;;;24662:10;24637:21;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;24681:19:0;;-1:-1:-1;24703:17:0;:15;:17::i;:::-;24681:39;-1:-1:-1;24733:16:0;24729:226;;24782:10;24762:16;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;24729:226:0;;-1:-1:-1;24729:226:0;;24892:11;24842:35;-1:-1:-1;;;24842:10:0;:35;:::i;:::-;24841:62;;;;:::i;:::-;24819:17;;;;:14;:17;;;:85;;:17;;;:85;;;;;:::i;:::-;;;;-1:-1:-1;;24915:16:0;;;;:13;:16;;;:30;;24935:10;;24915:16;:30;;24935:10;;24915:30;:::i;:::-;;;;-1:-1:-1;;24729:226:0;24582:380;24562:400;24974:14;;24970:400;;25026:10;24999:23;;:37;;;;;;;:::i;:::-;;;;;;;;25070:10;25045:21;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;25089:19:0;;-1:-1:-1;25111:17:0;:15;:17::i;:::-;25089:39;-1:-1:-1;25141:16:0;25137:226;;25190:10;25170:16;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;25137:226:0;;-1:-1:-1;25137:226:0;;25300:11;25250:35;-1:-1:-1;;;25250:10:0;:35;:::i;:::-;25249:62;;;;:::i;:::-;25242:1;25227:17;;;;:14;:17;;;:85;;:17;;;:85;;;;;:::i;:::-;;;;-1:-1:-1;;25337:1:0;25323:16;;;;:13;:16;;;:30;;25343:10;;25323:16;:30;;25343:10;;25323:30;:::i;:::-;;;;-1:-1:-1;;24990:380:0;24211:1166;;;;24158:1219;:::o;21499:378::-;-1:-1:-1;;;;;21652:17:0;;21628:21;21652:17;;;:9;:17;;;;;;21684:23;;;;21676:60;;;;-1:-1:-1;;;21676:60:0;;;;;;;:::i;:::-;21745:34;21758:6;21766;21774:4;21745:12;:34::i;:::-;21788;21798:9;21809:6;21817:4;21788:9;:34::i;:::-;21853:9;-1:-1:-1;;;;;21836:35:0;21845:6;-1:-1:-1;;;;;21836:35:0;-1:-1:-1;;;;;;;;;;;21864:6:0;21836:35;;;;12790:25:1;;12778:2;12763:18;;12636:185;21836:35:0;;;;;;;;21621:256;21499:378;;;;:::o;18555:2938::-;-1:-1:-1;;;;;18713:15:0;;;18700:10;18713:15;;;:7;:15;;;;;;;;;18762:20;;;;;:9;:20;;;;;;;18813:17;;;;;;18713:15;;;;;18845:23;;;;18837:60;;;;-1:-1:-1;;;18837:60:0;;;;;;;:::i;:::-;18904:9;18922:12;18943:52;18973:4;18980:6;18988;18943:21;:52::i;:::-;18922:74;;19009:6;19005:1360;;;-1:-1:-1;;;;;19031:29:0;;;;;;:21;:29;;;;;;;;19026:240;;-1:-1:-1;;;;;19093:17:0;;;;;;:9;:17;;;;;;19114:15;-1:-1:-1;19093:36:0;;:56;;-1:-1:-1;19133:16:0;;;;;;;19093:56;19073:120;;;;-1:-1:-1;;;19073:120:0;;22599:2:1;19073:120:0;;;22581:21:1;22638:2;22618:18;;;22611:30;-1:-1:-1;;;22657:18:1;;;22650:48;22715:18;;19073:120:0;22397:342:1;19073:120:0;19244:12;;19226:30;;:15;:30;:::i;:::-;-1:-1:-1;;;;;19206:17:0;;;;;;:9;:17;;;;;:50;19026:240;19294:9;;19284:6;:19;;19276:47;;;;-1:-1:-1;;;19276:47:0;;16997:2:1;19276:47:0;;;16979:21:1;17036:2;17016:18;;;17009:30;-1:-1:-1;;;17055:18:1;;;17048:45;17110:18;;19276:47:0;16795:339:1;19276:47:0;19407:4;19332:20;19389:24;;;:9;:24;;;;;;13683:42;19371:15;;;;13314:13;13254:1;13314:2;:13;:::i;:::-;13300:27;;:11;:27;:::i;:::-;19355:31;;;;:::i;:::-;:58;;;;:::i;:::-;19332:81;;19422:19;19468:12;;19461:3;19445:15;:19;;;;:::i;:::-;19444:36;;;;:::i;:::-;19422:58;;19502:14;19492:6;:24;19489:270;;19535:11;;-1:-1:-1;;;19535:11:0;;;;;-1:-1:-1;19489:270:0;;;19579:8;;;;;;;;;-1:-1:-1;;;;19601:21:0;;;;19598:152;;;19651:14;;;-1:-1:-1;;;19651:14:0;;;;;19642:23;;;;19639:100;;;19699:14;;:23;;19716:6;;-1:-1:-1;;;19699:14:0;;;;:23;:::i;:::-;19692:31;;:3;:31;:::i;:::-;19686:37;;19639:100;19017:749;;19005:1360;;;19776:5;19772:593;;;-1:-1:-1;;;;;19797:24:0;;;;;;:13;:24;;;;;;;;19792:122;;19871:12;;19842:25;19861:6;19842:16;:25;:::i;:::-;:41;;19834:70;;;;-1:-1:-1;;;19834:70:0;;;;;;;:::i;:::-;19928:7;;;;;;;;-1:-1:-1;19772:593:0;;;-1:-1:-1;;;;;19963:24:0;;;;;;:13;:24;;;;;;;;19958:122;;20037:12;;20008:25;20027:6;20008:16;:25;:::i;:::-;:41;;20000:70;;;;-1:-1:-1;;;20000:70:0;;;;;;;:::i;:::-;20125:12;;20096:25;20115:6;20096:16;:25;:::i;:::-;:41;;20088:70;;;;-1:-1:-1;;;20088:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20174:29:0;;;;;;:21;:29;;;;;;;;20169:161;;-1:-1:-1;;;;;20234:17:0;;;;;;:9;:17;;;;;;20255:15;-1:-1:-1;20234:36:0;;:56;;-1:-1:-1;20274:16:0;;;;;;;20234:56;20214:116;;;;-1:-1:-1;;;20214:116:0;;20882:2:1;20214:116:0;;;20864:21:1;20921:2;20901:18;;;20894:30;-1:-1:-1;;;20940:18:1;;;20933:44;20994:18;;20214:116:0;20680:338:1;20214:116:0;20345:12;;-1:-1:-1;;;20345:12:0;;;;;-1:-1:-1;19772:593:0;20396:19;;-1:-1:-1;;;;;20386:29:0;;;20396:19;;20386:29;;;;20385:61;;-1:-1:-1;20429:16:0;;;;20428:17;20385:61;:102;;;;-1:-1:-1;20459:27:0;;;;20458:28;20385:102;:119;;;;;20498:6;20385:119;20373:248;;;20553:12;;20543:4;20525:24;;;;:9;:24;;;;;;:40;20521:93;;20578:26;20597:6;20578:18;:26::i;:::-;-1:-1:-1;;;;;20704:26:0;;20627;20704;;;:18;:26;;;;;;20627;;20704;;20699:84;;-1:-1:-1;20762:13:0;;-1:-1:-1;;;20762:13:0;;;;20699:84;-1:-1:-1;;;;;20794:28:0;;;;;;:20;:28;;;;;;;;20789:90;;20856:15;;-1:-1:-1;;;20856:15:0;;;;;-1:-1:-1;20789:90:0;20885:14;20910:9;;;20906:118;;-1:-1:-1;20941:13:0;;-1:-1:-1;;;20941:13:0;;;;20906:118;;;20972:4;:9;;20980:1;20972:9;20968:56;;;-1:-1:-1;21003:13:0;;-1:-1:-1;;;21003:13:0;;;;20968:56;21219:13;;21032:21;;21056:183;;21078:6;;21093:3;;21219:13;-1:-1:-1;;;21219:13:0;;;;;-1:-1:-1;;;21194:13:0;;;;;21162:20;;21107:43;;21132:18;;-1:-1:-1;;;21107:13:0;;;:43;:::i;:::-;:75;;;;:::i;:::-;:100;;;;:::i;:::-;:125;;;;:::i;:::-;21056:13;:183::i;:::-;21032:207;-1:-1:-1;21246:19:0;21268:24;21032:207;21268:6;:24;:::i;:::-;21246:46;;21301:34;21314:6;21322;21330:4;21301:12;:34::i;:::-;21362:4;21344:24;;;;:9;:24;;;;;:41;;21372:13;;21344:24;:41;;21372:13;;21344:41;:::i;:::-;;;;-1:-1:-1;21394:39:0;;-1:-1:-1;21404:9:0;21415:11;21428:4;21394:9;:39::i;:::-;21464:9;-1:-1:-1;;;;;21447:40:0;21456:6;-1:-1:-1;;;;;21447:40:0;-1:-1:-1;;;;;;;;;;;21475:11:0;21447:40;;;;12790:25:1;;12778:2;12763:18;;12636:185;21447:40:0;;;;;;;;18693:2800;;;;;;;;;;18555:2938;;;;;:::o;23361:450::-;-1:-1:-1;;;;;23480:15:0;;23460:17;23480:15;;;:9;:15;;;;;;:24;;23498:6;;23480:24;:::i;:::-;-1:-1:-1;;;;;23517:31:0;;;;;;:25;:31;;;;;;23460:44;;-1:-1:-1;23517:31:0;;23513:96;;;-1:-1:-1;;;;;23559:15:0;;;;;;;:9;:15;;;;;:27;;;;-1:-1:-1;;23361:450:0:o;23513:96::-;23617:15;23635:27;23651:4;23657;23635:15;:27::i;:::-;-1:-1:-1;;;;;23671:15:0;;;;;;:9;:15;;;;;;;;:27;;;23739:20;;;;;:14;:20;;;;;;23617:45;;-1:-1:-1;23739:32:0;;23689:9;;23739:32;:::i;:::-;-1:-1:-1;;;;;23707:23:0;;;;;;:17;:23;;;;;;;;:29;;;;;;;;;;:64;;;;23780:14;;;:8;:14;;;;;;:25;;23798:7;;23707:23;23780:25;;23798:7;;23780:25;:::i;:::-;;;;-1:-1:-1;;;;;;;23361:450:0:o;22908:447::-;-1:-1:-1;;;;;23024:15:0;;23004:17;23024:15;;;:9;:15;;;;;;:24;;23042:6;;23024:24;:::i;:::-;-1:-1:-1;;;;;23061:31:0;;;;;;:25;:31;;;;;;23004:44;;-1:-1:-1;23061:31:0;;23057:96;;;-1:-1:-1;;;;;23103:15:0;;;;;;;:9;:15;;;;;:27;;;;-1:-1:-1;;22908:447:0:o;23057:96::-;23161:15;23179:27;23195:4;23201;23179:15;:27::i;:::-;23247:20;;;;;;;:14;:20;;;;;;23161:45;;-1:-1:-1;23247:32:0;;23270:9;;23247:32;:::i;:::-;-1:-1:-1;;;;;23215:23:0;;;;;;:17;:23;;;;;;;;:29;;;;;;;;;;:64;;;;23288:14;;;:8;:14;;;;;;:25;;23306:7;;23215:23;23288:25;;23306:7;;23288:25;:::i;:::-;;;;-1:-1:-1;;;;;;;;23322:15:0;;;;;;;:9;:15;;;;;:27;;;;-1:-1:-1;;22908:447:0:o;21883:174::-;21993:7;22046:5;22032:10;22017:25;;22026:3;22017:12;;:6;:12;;;;:::i;:::-;:25;;;;:::i;14:134:1:-;82:20;;111:31;82:20;111:31;:::i;:::-;14:134;;;:::o;153:367::-;216:8;226:6;280:3;273:4;265:6;261:17;257:27;247:55;;298:1;295;288:12;247:55;-1:-1:-1;321:20:1;;364:18;353:30;;350:50;;;396:1;393;386:12;350:50;433:4;425:6;421:17;409:29;;493:3;486:4;476:6;473:1;469:14;461:6;457:27;453:38;450:47;447:67;;;510:1;507;500:12;447:67;153:367;;;;;:::o;525:919::-;579:5;632:3;625:4;617:6;613:17;609:27;599:55;;650:1;647;640:12;599:55;686:6;673:20;712:4;735:18;772:2;768;765:10;762:36;;;778:18;;:::i;:::-;824:2;821:1;817:10;856:2;850:9;919:2;915:7;910:2;906;902:11;898:25;890:6;886:38;974:6;962:10;959:22;954:2;942:10;939:18;936:46;933:72;;;985:18;;:::i;:::-;1021:2;1014:22;1071:18;;;1105:15;;;;-1:-1:-1;1140:15:1;;;1174;;;1170:24;;1167:33;-1:-1:-1;1164:53:1;;;1213:1;1210;1203:12;1164:53;1235:1;1226:10;;1245:169;1259:2;1256:1;1253:9;1245:169;;;1316:23;1335:3;1316:23;:::i;:::-;1304:36;;1360:12;;;;1277:1;1270:9;;;;;1392:12;;1245:169;;;-1:-1:-1;1432:6:1;525:919;-1:-1:-1;;;;;;;525:919:1:o;1449:177::-;1528:13;;-1:-1:-1;;;;;1570:31:1;;1560:42;;1550:70;;1616:1;1613;1606:12;1631:156;1697:20;;1757:4;1746:16;;1736:27;;1726:55;;1777:1;1774;1767:12;1792:247;1851:6;1904:2;1892:9;1883:7;1879:23;1875:32;1872:52;;;1920:1;1917;1910:12;1872:52;1959:9;1946:23;1978:31;2003:5;1978:31;:::i;2044:251::-;2114:6;2167:2;2155:9;2146:7;2142:23;2138:32;2135:52;;;2183:1;2180;2173:12;2135:52;2215:9;2209:16;2234:31;2259:5;2234:31;:::i;2300:388::-;2368:6;2376;2429:2;2417:9;2408:7;2404:23;2400:32;2397:52;;;2445:1;2442;2435:12;2397:52;2484:9;2471:23;2503:31;2528:5;2503:31;:::i;:::-;2553:5;-1:-1:-1;2610:2:1;2595:18;;2582:32;2623:33;2582:32;2623:33;:::i;:::-;2675:7;2665:17;;;2300:388;;;;;:::o;2693:456::-;2770:6;2778;2786;2839:2;2827:9;2818:7;2814:23;2810:32;2807:52;;;2855:1;2852;2845:12;2807:52;2894:9;2881:23;2913:31;2938:5;2913:31;:::i;:::-;2963:5;-1:-1:-1;3020:2:1;3005:18;;2992:32;3033:33;2992:32;3033:33;:::i;:::-;2693:456;;3085:7;;-1:-1:-1;;;3139:2:1;3124:18;;;;3111:32;;2693:456::o;3154:382::-;3219:6;3227;3280:2;3268:9;3259:7;3255:23;3251:32;3248:52;;;3296:1;3293;3286:12;3248:52;3335:9;3322:23;3354:31;3379:5;3354:31;:::i;:::-;3404:5;-1:-1:-1;3461:2:1;3446:18;;3433:32;3474:30;3433:32;3474:30;:::i;3541:315::-;3609:6;3617;3670:2;3658:9;3649:7;3645:23;3641:32;3638:52;;;3686:1;3683;3676:12;3638:52;3725:9;3712:23;3744:31;3769:5;3744:31;:::i;:::-;3794:5;3846:2;3831:18;;;;3818:32;;-1:-1:-1;;;3541:315:1:o;3861:450::-;3935:6;3943;3951;4004:2;3992:9;3983:7;3979:23;3975:32;3972:52;;;4020:1;4017;4010:12;3972:52;4059:9;4046:23;4078:31;4103:5;4078:31;:::i;:::-;4128:5;-1:-1:-1;4180:2:1;4165:18;;4152:32;;-1:-1:-1;4236:2:1;4221:18;;4208:32;4249:30;4208:32;4249:30;:::i;:::-;4298:7;4288:17;;;3861:450;;;;;:::o;4316:317::-;4382:6;4390;4443:2;4431:9;4422:7;4418:23;4414:32;4411:52;;;4459:1;4456;4449:12;4411:52;4498:9;4485:23;4517:31;4542:5;4517:31;:::i;:::-;4567:5;-1:-1:-1;4591:36:1;4623:2;4608:18;;4591:36;:::i;:::-;4581:46;;4316:317;;;;;:::o;4638:770::-;4757:6;4765;4773;4781;4834:2;4822:9;4813:7;4809:23;4805:32;4802:52;;;4850:1;4847;4840:12;4802:52;4890:9;4877:23;4919:18;4960:2;4952:6;4949:14;4946:34;;;4976:1;4973;4966:12;4946:34;5015:70;5077:7;5068:6;5057:9;5053:22;5015:70;:::i;:::-;5104:8;;-1:-1:-1;4989:96:1;-1:-1:-1;5192:2:1;5177:18;;5164:32;;-1:-1:-1;5208:16:1;;;5205:36;;;5237:1;5234;5227:12;5205:36;;5276:72;5340:7;5329:8;5318:9;5314:24;5276:72;:::i;:::-;4638:770;;;;-1:-1:-1;5367:8:1;-1:-1:-1;;;;4638:770:1:o;5413:348::-;5497:6;5550:2;5538:9;5529:7;5525:23;5521:32;5518:52;;;5566:1;5563;5556:12;5518:52;5606:9;5593:23;5639:18;5631:6;5628:30;5625:50;;;5671:1;5668;5661:12;5625:50;5694:61;5747:7;5738:6;5727:9;5723:22;5694:61;:::i;5766:551::-;5868:6;5876;5884;5937:2;5925:9;5916:7;5912:23;5908:32;5905:52;;;5953:1;5950;5943:12;5905:52;5993:9;5980:23;6026:18;6018:6;6015:30;6012:50;;;6058:1;6055;6048:12;6012:50;6081:61;6134:7;6125:6;6114:9;6110:22;6081:61;:::i;:::-;6071:71;;;6192:2;6181:9;6177:18;6164:32;6205:31;6230:5;6205:31;:::i;6322:241::-;6378:6;6431:2;6419:9;6410:7;6406:23;6402:32;6399:52;;;6447:1;6444;6437:12;6399:52;6486:9;6473:23;6505:28;6527:5;6505:28;:::i;6568:245::-;6635:6;6688:2;6676:9;6667:7;6663:23;6659:32;6656:52;;;6704:1;6701;6694:12;6656:52;6736:9;6730:16;6755:28;6777:5;6755:28;:::i;6818:450::-;6905:6;6913;6921;6974:2;6962:9;6953:7;6949:23;6945:32;6942:52;;;6990:1;6987;6980:12;6942:52;7013:40;7043:9;7013:40;:::i;:::-;7003:50;;7072:49;7117:2;7106:9;7102:18;7072:49;:::i;:::-;7062:59;;7164:2;7153:9;7149:18;7143:25;7208:10;7201:5;7197:22;7190:5;7187:33;7177:61;;7234:1;7231;7224:12;7273:180;7332:6;7385:2;7373:9;7364:7;7360:23;7356:32;7353:52;;;7401:1;7398;7391:12;7353:52;-1:-1:-1;7424:23:1;;7273:180;-1:-1:-1;7273:180:1:o;7458:184::-;7528:6;7581:2;7569:9;7560:7;7556:23;7552:32;7549:52;;;7597:1;7594;7587:12;7549:52;-1:-1:-1;7620:16:1;;7458:184;-1:-1:-1;7458:184:1:o;7647:248::-;7715:6;7723;7776:2;7764:9;7755:7;7751:23;7747:32;7744:52;;;7792:1;7789;7782:12;7744:52;-1:-1:-1;;7815:23:1;;;7885:2;7870:18;;;7857:32;;-1:-1:-1;7647:248:1:o;7900:306::-;7988:6;7996;8004;8057:2;8045:9;8036:7;8032:23;8028:32;8025:52;;;8073:1;8070;8063:12;8025:52;8102:9;8096:16;8086:26;;8152:2;8141:9;8137:18;8131:25;8121:35;;8196:2;8185:9;8181:18;8175:25;8165:35;;7900:306;;;;;:::o;8211:182::-;8268:6;8321:2;8309:9;8300:7;8296:23;8292:32;8289:52;;;8337:1;8334;8327:12;8289:52;8360:27;8377:9;8360:27;:::i;8398:317::-;8464:6;8472;8525:2;8513:9;8504:7;8500:23;8496:32;8493:52;;;8541:1;8538;8531:12;8493:52;8564:27;8581:9;8564:27;:::i;8720:452::-;8792:6;8800;8808;8861:2;8849:9;8840:7;8836:23;8832:32;8829:52;;;8877:1;8874;8867:12;8829:52;8900:27;8917:9;8900:27;:::i;:::-;8890:37;;8977:2;8966:9;8962:18;8949:32;8990:31;9015:5;8990:31;:::i;:::-;9040:5;-1:-1:-1;9097:2:1;9082:18;;9069:32;9110:30;9069:32;9110:30;:::i;9177:311::-;9240:6;9248;9301:2;9289:9;9280:7;9276:23;9272:32;9269:52;;;9317:1;9314;9307:12;9269:52;9340:27;9357:9;9340:27;:::i;9493:393::-;9571:6;9579;9587;9595;9648:3;9636:9;9627:7;9623:23;9619:33;9616:53;;;9665:1;9662;9655:12;9616:53;9688:27;9705:9;9688:27;:::i;:::-;9678:37;;9734:36;9766:2;9755:9;9751:18;9734:36;:::i;:::-;9724:46;;9789:36;9821:2;9810:9;9806:18;9789:36;:::i;:::-;9779:46;;9844:36;9876:2;9865:9;9861:18;9844:36;:::i;:::-;9834:46;;9493:393;;;;;;;:::o;9891:464::-;9976:6;9984;9992;10000;10008;10061:3;10049:9;10040:7;10036:23;10032:33;10029:53;;;10078:1;10075;10068:12;10029:53;10101:27;10118:9;10101:27;:::i;:::-;10091:37;;10147:36;10179:2;10168:9;10164:18;10147:36;:::i;:::-;10137:46;;10202:36;10234:2;10223:9;10219:18;10202:36;:::i;:::-;10192:46;;10257:36;10289:2;10278:9;10274:18;10257:36;:::i;:::-;10247:46;;10312:37;10344:3;10333:9;10329:19;10312:37;:::i;:::-;10302:47;;9891:464;;;;;;;;:::o;10360:461::-;10413:3;10451:5;10445:12;10478:6;10473:3;10466:19;10504:4;10533:2;10528:3;10524:12;10517:19;;10570:2;10563:5;10559:14;10591:1;10601:195;10615:6;10612:1;10609:13;10601:195;;;10680:13;;-1:-1:-1;;;;;10676:39:1;10664:52;;10736:12;;;;10771:15;;;;10712:1;10630:9;10601:195;;;-1:-1:-1;10812:3:1;;10360:461;-1:-1:-1;;;;;10360:461:1:o;12826:510::-;13097:6;13086:9;13079:25;13140:3;13135:2;13124:9;13120:18;13113:31;13060:4;13161:57;13213:3;13202:9;13198:19;13190:6;13161:57;:::i;:::-;-1:-1:-1;;;;;13254:32:1;;;;13249:2;13234:18;;13227:60;-1:-1:-1;13318:2:1;13303:18;13296:34;13153:65;12826:510;-1:-1:-1;;12826:510:1:o;13341:597::-;13453:4;13482:2;13511;13500:9;13493:21;13543:6;13537:13;13586:6;13581:2;13570:9;13566:18;13559:34;13611:1;13621:140;13635:6;13632:1;13629:13;13621:140;;;13730:14;;;13726:23;;13720:30;13696:17;;;13715:2;13692:26;13685:66;13650:10;;13621:140;;;13779:6;13776:1;13773:13;13770:91;;;13849:1;13844:2;13835:6;13824:9;13820:22;13816:31;13809:42;13770:91;-1:-1:-1;13922:2:1;13901:15;-1:-1:-1;;13897:29:1;13882:45;;;;13929:2;13878:54;;13341:597;-1:-1:-1;;;13341:597:1:o;14290:348::-;14492:2;14474:21;;;14531:2;14511:18;;;14504:30;-1:-1:-1;;;14565:2:1;14550:18;;14543:54;14629:2;14614:18;;14290:348::o;18244:330::-;18446:2;18428:21;;;18485:1;18465:18;;;18458:29;-1:-1:-1;;;18518:2:1;18503:18;;18496:37;18565:2;18550:18;;18244:330::o;20335:340::-;20537:2;20519:21;;;20576:2;20556:18;;;20549:30;-1:-1:-1;;;20610:2:1;20595:18;;20588:46;20666:2;20651:18;;20335:340::o;21023:332::-;21225:2;21207:21;;;21264:1;21244:18;;;21237:29;-1:-1:-1;;;21297:2:1;21282:18;;21275:39;21346:2;21331:18;;21023:332::o;23398:582::-;23697:6;23686:9;23679:25;23740:6;23735:2;23724:9;23720:18;23713:34;23783:3;23778:2;23767:9;23763:18;23756:31;23660:4;23804:57;23856:3;23845:9;23841:19;23833:6;23804:57;:::i;:::-;-1:-1:-1;;;;;23897:32:1;;;;23892:2;23877:18;;23870:60;-1:-1:-1;23961:3:1;23946:19;23939:35;23796:65;23398:582;-1:-1:-1;;;23398:582:1:o;25111:128::-;25151:3;25182:1;25178:6;25175:1;25172:13;25169:39;;;25188:18;;:::i;:::-;-1:-1:-1;25224:9:1;;25111:128::o;25244:204::-;25282:3;25318:4;25315:1;25311:12;25350:4;25347:1;25343:12;25385:3;25379:4;25375:14;25370:3;25367:23;25364:49;;;25393:18;;:::i;:::-;25429:13;;25244:204;-1:-1:-1;;;25244:204:1:o;25453:217::-;25493:1;25519;25509:132;;25563:10;25558:3;25554:20;25551:1;25544:31;25598:4;25595:1;25588:15;25626:4;25623:1;25616:15;25509:132;-1:-1:-1;25655:9:1;;25453:217::o;25675:422::-;25764:1;25807:5;25764:1;25821:270;25842:7;25832:8;25829:21;25821:270;;;25901:4;25897:1;25893:6;25889:17;25883:4;25880:27;25877:53;;;25910:18;;:::i;:::-;25960:7;25950:8;25946:22;25943:55;;;25980:16;;;;25943:55;26059:22;;;;26019:15;;;;25821:270;;;25825:3;25675:422;;;;;:::o;26102:140::-;26160:5;26189:47;26230:4;26220:8;26216:19;26210:4;26296:5;26326:8;26316:80;;-1:-1:-1;26367:1:1;26381:5;;26316:80;26415:4;26405:76;;-1:-1:-1;26452:1:1;26466:5;;26405:76;26497:4;26515:1;26510:59;;;;26583:1;26578:130;;;;26490:218;;26510:59;26540:1;26531:10;;26554:5;;;26578:130;26615:3;26605:8;26602:17;26599:43;;;26622:18;;:::i;:::-;-1:-1:-1;;26678:1:1;26664:16;;26693:5;;26490:218;;26792:2;26782:8;26779:16;26773:3;26767:4;26764:13;26760:36;26754:2;26744:8;26741:16;26736:2;26730:4;26727:12;26723:35;26720:77;26717:159;;;-1:-1:-1;26829:19:1;;;26861:5;;26717:159;26908:34;26933:8;26927:4;26908:34;:::i;:::-;26978:6;26974:1;26970:6;26966:19;26957:7;26954:32;26951:58;;;26989:18;;:::i;:::-;27027:20;;26247:806;-1:-1:-1;;;26247:806:1:o;27058:168::-;27098:7;27164:1;27160;27156:6;27152:14;27149:1;27146:21;27141:1;27134:9;27127:17;27123:45;27120:71;;;27171:18;;:::i;:::-;-1:-1:-1;27211:9:1;;27058:168::o;27231:238::-;27269:7;27309:4;27306:1;27302:12;27341:4;27338:1;27334:12;27401:3;27395:4;27391:14;27386:3;27383:23;27376:3;27369:11;27362:19;27358:49;27355:75;;;27410:18;;:::i;27474:125::-;27514:4;27542:1;27539;27536:8;27533:34;;;27547:18;;:::i;:::-;-1:-1:-1;27584:9:1;;27474:125::o;27604:195::-;27642:4;27679;27676:1;27672:12;27711:4;27708:1;27704:12;27736:3;27731;27728:12;27725:38;;;27743:18;;:::i;:::-;27780:13;;;27604:195;-1:-1:-1;;;27604:195:1:o;27804:135::-;27843:3;-1:-1:-1;;27864:17:1;;27861:43;;;27884:18;;:::i;:::-;-1:-1:-1;27931:1:1;27920:13;;27804:135::o;27944:127::-;28005:10;28000:3;27996:20;27993:1;27986:31;28036:4;28033:1;28026:15;28060:4;28057:1;28050:15;28076:127;28137:10;28132:3;28128:20;28125:1;28118:31;28168:4;28165:1;28158:15;28192:4;28189:1;28182:15;28208:127;28269:10;28264:3;28260:20;28257:1;28250:31;28300:4;28297:1;28290:15;28324:4;28321:1;28314:15;28340:131;-1:-1:-1;;;;;28415:31:1;;28405:42;;28395:70;;28461:1;28458;28451:12;28476:118;28562:5;28555:13;28548:21;28541:5;28538:32;28528:60;;28584:1;28581;28574:12

Swarm Source

ipfs://1eb5892d50b0b1db28689f942c39fa41939dafa68e4bf85ffb0e5618c6ca5580
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.