Contract 0xfffdb68ff64aad40e17279edd2a8dc10b248a4ae

Contract Overview

Balance:
0 MATIC
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x3c28b27f38116e4345bc5f1d9d83bba903cf3ffbf9824d930b23e34231b23e070x60c06040239124132022-01-15 12:25:5613 days 7 hrs ago0x7b77a255acea5687d8c032494383c5538e4f5a87 IN  Create: CoinTool0 MATIC0.018091595057 2.500000008
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CoinTool

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2022-01-15
*/

pragma solidity ^0.8.4;
  // SPDX-License-Identifier: Unlicensed
  interface IERC20 {
  
      function totalSupply() external view returns (uint256);
  
 
      function balanceOf(address account) external view returns (uint256);
  

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

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

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

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

      event Transfer(address indexed from, address indexed to, uint256 value);
  

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

   
  library SafeMath {

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

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

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

      function mul(uint256 a, uint256 b) internal pure returns (uint256) {
          // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
          // benefit is lost if 'b' is also tested.
          // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
          if (a == 0) {
              return 0;
          }
  
          uint256 c = a * b;
          require(c / a == b, "SafeMath: multiplication overflow");
  
          return c;
      }
  

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

      function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
          require(b > 0, errorMessage);
          uint256 c = a / b;
          // assert(a == b * c + a % b); // There is no case in which this doesn't hold
  
          return c;
      }
  

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

      function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
          require(b != 0, errorMessage);
          return a % b;
      }
  }
  
  abstract contract Context {
      function _msgSender() internal view virtual returns (address payable) {
        return payable(msg.sender);
    }
  
      function _msgData() internal view virtual returns (bytes memory) {
          this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
          return msg.data;
      }
  }
  
  
  /**
   * @dev Collection of functions related to the address type
   */
  library Address {

      function isContract(address account) internal view returns (bool) {
          bytes32 codehash;
          bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
          // solhint-disable-next-line no-inline-assembly
          assembly { codehash := extcodehash(account) }
          return (codehash != accountHash && codehash != 0x0);
      }

      function sendValue(address payable recipient, uint256 amount) internal {
          require(address(this).balance >= amount, "Address: insufficient balance");
  
          // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
          (bool success, ) = recipient.call{ value: amount }("");
          require(success, "Address: unable to send value, recipient may have reverted");
      }
  

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

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

      function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
          return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
      }
  
 
      function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
          require(address(this).balance >= value, "Address: insufficient balance for call");
          return _functionCallWithValue(target, data, value, errorMessage);
      }
  
      function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
          require(isContract(target), "Address: call to non-contract");
  
          // solhint-disable-next-line avoid-low-level-calls
          (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
          if (success) {
              return returndata;
          } else {
              // Look for revert reason and bubble it up if present
              if (returndata.length > 0) {
                  // The easiest way to bubble the revert reason is using memory via assembly
  
                  // solhint-disable-next-line no-inline-assembly
                  assembly {
                      let returndata_size := mload(returndata)
                      revert(add(32, returndata), returndata_size)
                  }
              } else {
                  revert(errorMessage);
              }
          }
      }
  }
  

  contract Ownable is Context {
      address private _owner;
      address private _previousOwner;
      uint256 private _lockTime;
  
      event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
  
      /**
       * @dev Initializes the contract setting the deployer as the initial owner.
       */
      constructor () {
          address msgSender = _msgSender();
          _owner = msgSender;
          emit OwnershipTransferred(address(0), msgSender);
      }
  
      /**
       * @dev Returns the address of the current owner.
       */
      function owner() public view returns (address) {
          return _owner;
      }
  
      /**
       * @dev Throws if called by any account other than the owner.
       */
      modifier onlyOwner() {
          require(_owner == _msgSender(), "Ownable: caller is not the owner");
          _;
      }

      function renounceOwnership() public virtual onlyOwner {
          emit OwnershipTransferred(_owner, address(0));
          _owner = address(0);
      }
  

      function transferOwnership(address newOwner) public virtual onlyOwner {
          require(newOwner != address(0), "Ownable: new owner is the zero address");
          emit OwnershipTransferred(_owner, newOwner);
          _owner = newOwner;
      }
  
      function geUnlockTime() public view returns (uint256) {
          return _lockTime;
      }
  
      //Locks the contract for owner for the amount of time provided
      function lock(uint256 time) public virtual onlyOwner {
          _previousOwner = _owner;
          _owner = address(0);
          _lockTime = block.timestamp + time;
          emit OwnershipTransferred(_owner, address(0));
      }
      
      //Unlocks the contract for owner when _lockTime is exceeds
      function unlock() public virtual {
          require(_previousOwner == msg.sender, "You don't have permission to unlock");
          require(block.timestamp > _lockTime , "Contract is locked until 7 days");
          emit OwnershipTransferred(_owner, _previousOwner);
          _owner = _previousOwner;
      }
  }
  
  // pragma solidity >=0.5.0;
  
  interface IUniswapV2Factory {
      event PairCreated(address indexed token0, address indexed token1, address pair, uint);
  
      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(uint) external view returns (address pair);
      function allPairsLength() external view returns (uint);
  
      function createPair(address tokenA, address tokenB) external returns (address pair);
  
      function setFeeTo(address) external;
      function setFeeToSetter(address) external;
  }
  
  
  // pragma solidity >=0.5.0;
  
  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;
  
      function initialize(address, address) external;
  }
  
  // pragma solidity >=0.6.2;
  
  interface IUniswapV2Router01 {
      function factory() external pure returns (address);
      function WETH() external pure returns (address);
  
      function addLiquidity(
          address tokenA,
          address tokenB,
          uint amountADesired,
          uint amountBDesired,
          uint amountAMin,
          uint amountBMin,
          address to,
          uint deadline
      ) external returns (uint amountA, uint amountB, uint liquidity);
      function addLiquidityETH(
          address token,
          uint amountTokenDesired,
          uint amountTokenMin,
          uint amountETHMin,
          address to,
          uint deadline
      ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
      function removeLiquidity(
          address tokenA,
          address tokenB,
          uint liquidity,
          uint amountAMin,
          uint amountBMin,
          address to,
          uint deadline
      ) external returns (uint amountA, uint amountB);
      function removeLiquidityETH(
          address token,
          uint liquidity,
          uint amountTokenMin,
          uint amountETHMin,
          address to,
          uint deadline
      ) external returns (uint amountToken, uint amountETH);
      function removeLiquidityWithPermit(
          address tokenA,
          address tokenB,
          uint liquidity,
          uint amountAMin,
          uint amountBMin,
          address to,
          uint deadline,
          bool approveMax, uint8 v, bytes32 r, bytes32 s
      ) external returns (uint amountA, uint amountB);
      function removeLiquidityETHWithPermit(
          address token,
          uint liquidity,
          uint amountTokenMin,
          uint amountETHMin,
          address to,
          uint deadline,
          bool approveMax, uint8 v, bytes32 r, bytes32 s
      ) external returns (uint amountToken, uint amountETH);
      function swapExactTokensForTokens(
          uint amountIn,
          uint amountOutMin,
          address[] calldata path,
          address to,
          uint deadline
      ) external returns (uint[] memory amounts);
      function swapTokensForExactTokens(
          uint amountOut,
          uint amountInMax,
          address[] calldata path,
          address to,
          uint deadline
      ) external returns (uint[] memory amounts);
      function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
          external
          payable
          returns (uint[] memory amounts);
      function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
          external
          returns (uint[] memory amounts);
      function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
          external
          returns (uint[] memory amounts);
      function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
          external
          payable
          returns (uint[] memory amounts);
  
      function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
      function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
      function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
      function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
      function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
  }
  
  
  
  // pragma solidity >=0.6.2;
  
  interface IUniswapV2Router02 is IUniswapV2Router01 {
      function removeLiquidityETHSupportingFeeOnTransferTokens(
          address token,
          uint liquidity,
          uint amountTokenMin,
          uint amountETHMin,
          address to,
          uint deadline
      ) external returns (uint amountETH);
      function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
          address token,
          uint liquidity,
          uint amountTokenMin,
          uint amountETHMin,
          address to,
          uint deadline,
          bool approveMax, uint8 v, bytes32 r, bytes32 s
      ) external returns (uint amountETH);
  
      function swapExactTokensForTokensSupportingFeeOnTransferTokens(
          uint amountIn,
          uint amountOutMin,
          address[] calldata path,
          address to,
          uint deadline
      ) external;
      function swapExactETHForTokensSupportingFeeOnTransferTokens(
          uint amountOutMin,
          address[] calldata path,
          address to,
          uint deadline
      ) external payable;
      function swapExactTokensForETHSupportingFeeOnTransferTokens(
          uint amountIn,
          uint amountOutMin,
          address[] calldata path,
          address to,
          uint deadline
      ) external;
  }
  
  
  contract CoinTool is Context, IERC20, Ownable {
      using SafeMath for uint256;
      using Address for address;
  
      mapping (address => uint256) private _rOwned;
      mapping (address => uint256) private _tOwned;
      mapping (address => mapping (address => uint256)) private _allowances;
  
      mapping (address => bool) private _isExcludedFromFee;
  
      mapping (address => bool) private _isExcluded;
      address[] private _excluded;
     
      uint256 private constant MAX = ~uint256(0);
      uint256 private _tTotal = 1000000000 * 10**6 * 10**9;
      uint256 private _rTotal = (MAX - (MAX % _tTotal));
      uint256 private _tFeeTotal;
  
      string private _name = "CoinTool";
      string private _symbol = "CoinTool";
      uint8 private _decimals = 9;
      
      uint256 public _taxFee = 5;
      uint256 private _previousTaxFee = _taxFee;
      
      uint256 public _liquidityFee = 5;
      uint256 private _previousLiquidityFee = _liquidityFee;
  
      IUniswapV2Router02 public immutable uniswapV2Router;
      address public immutable uniswapV2Pair;
      
      bool inSwapAndLiquify;
      bool public swapAndLiquifyEnabled = true;
      
      uint256 public _maxTxAmount = 5000000 * 10**6 * 10**9;
      uint256 private numTokensSellToAddToLiquidity = 500000 * 10**6 * 10**9;

      address public routerAddress = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506;
      
      event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
      event SwapAndLiquifyEnabledUpdated(bool enabled);
      event SwapAndLiquify(
          uint256 tokensSwapped,
          uint256 ethReceived,
          uint256 tokensIntoLiqudity
      );
      
      modifier lockTheSwap {
          inSwapAndLiquify = true;
          _;
          inSwapAndLiquify = false;
      }
      
      constructor () {
          _rOwned[_msgSender()] = _rTotal;
          
          IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(routerAddress);
           // Create a uniswap pair for this new token
          uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
              .createPair(address(this), _uniswapV2Router.WETH());
  
          // set the rest of the contract variables
          uniswapV2Router = _uniswapV2Router;
          
          //exclude owner and this contract from fee
          _isExcludedFromFee[owner()] = true;
          _isExcludedFromFee[address(this)] = true;
          
          emit Transfer(address(0), _msgSender(), _tTotal);
      }
  
      function name() public view returns (string memory) {
          return _name;
      }
  
      function symbol() public view returns (string memory) {
          return _symbol;
      }
  
      function decimals() public view returns (uint8) {
          return _decimals;
      }
  
      function totalSupply() public view override returns (uint256) {
          return _tTotal;
      }
  
      function balanceOf(address account) public view override returns (uint256) {
          if (_isExcluded[account]) return _tOwned[account];
          return tokenFromReflection(_rOwned[account]);
      }
  
      function transfer(address recipient, uint256 amount) public override returns (bool) {
          _transfer(_msgSender(), recipient, amount);
          return true;
      }
  
      function allowance(address owner, address spender) public view override returns (uint256) {
          return _allowances[owner][spender];
      }
  
      function approve(address spender, uint256 amount) public override returns (bool) {
          _approve(_msgSender(), spender, amount);
          return true;
      }
  
      function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
          _transfer(sender, recipient, amount);
          _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
          return true;
      }
  
      function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
          _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
          return true;
      }
  
      function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
          _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
          return true;
      }
  
      function isExcludedFromReward(address account) public view returns (bool) {
          return _isExcluded[account];
      }
  
      function totalFees() public view returns (uint256) {
          return _tFeeTotal;
      }
  
      function deliver(uint256 tAmount) public {
          address sender = _msgSender();
          require(!_isExcluded[sender], "Excluded addresses cannot call this function");
          (uint256 rAmount,,,,,) = _getValues(tAmount);
          _rOwned[sender] = _rOwned[sender].sub(rAmount);
          _rTotal = _rTotal.sub(rAmount);
          _tFeeTotal = _tFeeTotal.add(tAmount);
      }
  
      function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
          require(tAmount <= _tTotal, "Amount must be less than supply");
          if (!deductTransferFee) {
              (uint256 rAmount,,,,,) = _getValues(tAmount);
              return rAmount;
          } else {
              (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
              return rTransferAmount;
          }
      }
  
      function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
          require(rAmount <= _rTotal, "Amount must be less than total reflections");
          uint256 currentRate =  _getRate();
          return rAmount.div(currentRate);
      }
  
      function excludeFromReward(address account) public onlyOwner() {
          // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
          require(!_isExcluded[account], "Account is already excluded");
          if(_rOwned[account] > 0) {
              _tOwned[account] = tokenFromReflection(_rOwned[account]);
          }
          _isExcluded[account] = true;
          _excluded.push(account);
      }
  
      function includeInReward(address account) external onlyOwner() {
          require(_isExcluded[account], "Account is already excluded");
          for (uint256 i = 0; i < _excluded.length; i++) {
              if (_excluded[i] == account) {
                  _excluded[i] = _excluded[_excluded.length - 1];
                  _tOwned[account] = 0;
                  _isExcluded[account] = false;
                  _excluded.pop();
                  break;
              }
          }
      }
          function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
          (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
          _tOwned[sender] = _tOwned[sender].sub(tAmount);
          _rOwned[sender] = _rOwned[sender].sub(rAmount);
          _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
          _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
          _takeLiquidity(tLiquidity);
          _reflectFee(rFee, tFee);
          emit Transfer(sender, recipient, tTransferAmount);
      }
      
          function excludeFromFee(address account) public onlyOwner {
          _isExcludedFromFee[account] = true;
      }
      
      function includeInFee(address account) public onlyOwner {
          _isExcludedFromFee[account] = false;
      }
      
      function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
          _taxFee = taxFee;
      }
      
      function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
          _liquidityFee = liquidityFee;
      }
     
      function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
          _maxTxAmount = _tTotal.mul(maxTxPercent).div(
              10**2
          );
      }
  
      function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
          swapAndLiquifyEnabled = _enabled;
          emit SwapAndLiquifyEnabledUpdated(_enabled);
      }
      
       //to recieve ETH from uniswapV2Router when swaping
      receive() external payable {}
  
      function _reflectFee(uint256 rFee, uint256 tFee) private {
          _rTotal = _rTotal.sub(rFee);
          _tFeeTotal = _tFeeTotal.add(tFee);
      }
  
      function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
          (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
          (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
          return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
      }
  
      function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
          uint256 tFee = calculateTaxFee(tAmount);
          uint256 tLiquidity = calculateLiquidityFee(tAmount);
          uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
          return (tTransferAmount, tFee, tLiquidity);
      }
  
      function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
          uint256 rAmount = tAmount.mul(currentRate);
          uint256 rFee = tFee.mul(currentRate);
          uint256 rLiquidity = tLiquidity.mul(currentRate);
          uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
          return (rAmount, rTransferAmount, rFee);
      }
  
      function _getRate() private view returns(uint256) {
          (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
          return rSupply.div(tSupply);
      }
  
      function _getCurrentSupply() private view returns(uint256, uint256) {
          uint256 rSupply = _rTotal;
          uint256 tSupply = _tTotal;      
          for (uint256 i = 0; i < _excluded.length; i++) {
              if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
              rSupply = rSupply.sub(_rOwned[_excluded[i]]);
              tSupply = tSupply.sub(_tOwned[_excluded[i]]);
          }
          if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
          return (rSupply, tSupply);
      }
      
      function _takeLiquidity(uint256 tLiquidity) private {
          uint256 currentRate =  _getRate();
          uint256 rLiquidity = tLiquidity.mul(currentRate);
          _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
          if(_isExcluded[address(this)])
              _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
      }
      
      function calculateTaxFee(uint256 _amount) private view returns (uint256) {
          return _amount.mul(_taxFee).div(
              10**2
          );
      }
  
      function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
          return _amount.mul(_liquidityFee).div(
              10**2
          );
      }
      
      function removeAllFee() private {
          if(_taxFee == 0 && _liquidityFee == 0) return;
          
          _previousTaxFee = _taxFee;
          _previousLiquidityFee = _liquidityFee;
          
          _taxFee = 0;
          _liquidityFee = 0;
      }
      
      function restoreAllFee() private {
          _taxFee = _previousTaxFee;
          _liquidityFee = _previousLiquidityFee;
      }
      
      function isExcludedFromFee(address account) public view returns(bool) {
          return _isExcludedFromFee[account];
      }
  
      function _approve(address owner, address spender, uint256 amount) private {
          require(owner != address(0), "ERC20: approve from the zero address");
          require(spender != address(0), "ERC20: approve to the zero address");
  
          _allowances[owner][spender] = amount;
          emit Approval(owner, spender, amount);
      }
  
      function _transfer(
          address from,
          address to,
          uint256 amount
      ) private {
          require(from != address(0), "ERC20: transfer from the zero address");
          require(to != address(0), "ERC20: transfer to the zero address");
          require(amount > 0, "Transfer amount must be greater than zero");
          if(from != owner() && to != owner())
              require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
  
          // is the token balance of this contract address over the min number of
          // tokens that we need to initiate a swap + liquidity lock?
          // also, don't get caught in a circular liquidity event.
          // also, don't swap & liquify if sender is uniswap pair.
          uint256 contractTokenBalance = balanceOf(address(this));
          
          if(contractTokenBalance >= _maxTxAmount)
          {
              contractTokenBalance = _maxTxAmount;
          }
          
          bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
          if (
              overMinTokenBalance &&
              !inSwapAndLiquify &&
              from != uniswapV2Pair &&
              swapAndLiquifyEnabled
          ) {
              contractTokenBalance = numTokensSellToAddToLiquidity;
              //add liquidity
              swapAndLiquify(contractTokenBalance);
          }
          
          //indicates if fee should be deducted from transfer
          bool takeFee = true;
          
          //if any account belongs to _isExcludedFromFee account then remove the fee
          if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
              takeFee = false;
          }
          
          //transfer amount, it will take tax, burn, liquidity fee
          _tokenTransfer(from,to,amount,takeFee);
      }
  
      function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
          // split the contract balance into halves
          uint256 half = contractTokenBalance.div(2);
          uint256 otherHalf = contractTokenBalance.sub(half);
  
          // capture the contract's current ETH balance.
          // this is so that we can capture exactly the amount of ETH that the
          // swap creates, and not make the liquidity event include any ETH that
          // has been manually sent to the contract
          uint256 initialBalance = address(this).balance;
  
          // swap tokens for ETH
          swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered
  
          // how much ETH did we just swap into?
          uint256 newBalance = address(this).balance.sub(initialBalance);
  
          // add liquidity to uniswap
          addLiquidity(otherHalf, newBalance);
          
          emit SwapAndLiquify(half, newBalance, otherHalf);
      }
  
      function swapTokensForEth(uint256 tokenAmount) private {
          // generate the uniswap pair path of token -> weth
          address[] memory path = new address[](2);
          path[0] = address(this);
          path[1] = uniswapV2Router.WETH();
  
          _approve(address(this), address(uniswapV2Router), tokenAmount);
  
          // make the swap
          uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
              tokenAmount,
              0, // accept any amount of ETH
              path,
              address(this),
              block.timestamp
          );
      }
  
      function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
          // approve token transfer to cover all possible scenarios
          _approve(address(this), address(uniswapV2Router), tokenAmount);
  
          // add the liquidity
          uniswapV2Router.addLiquidityETH{value: ethAmount}(
              address(this),
              tokenAmount,
              0, // slippage is unavoidable
              0, // slippage is unavoidable
              owner(),
              block.timestamp
          );
      }
  
      //this method is responsible for taking all fee, if takeFee is true
      function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
          if(!takeFee)
              removeAllFee();
          
          if (_isExcluded[sender] && !_isExcluded[recipient]) {
              _transferFromExcluded(sender, recipient, amount);
          } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
              _transferToExcluded(sender, recipient, amount);
          } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
              _transferStandard(sender, recipient, amount);
          } else if (_isExcluded[sender] && _isExcluded[recipient]) {
              _transferBothExcluded(sender, recipient, amount);
          } else {
              _transferStandard(sender, recipient, amount);
          }
          
          if(!takeFee)
              restoreAllFee();
      }
  
      function _transferStandard(address sender, address recipient, uint256 tAmount) private {
          (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
          _rOwned[sender] = _rOwned[sender].sub(rAmount);
          _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
          _takeLiquidity(tLiquidity);
          _reflectFee(rFee, tFee);
          emit Transfer(sender, recipient, tTransferAmount);
      }
  
      function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
          (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
          _rOwned[sender] = _rOwned[sender].sub(rAmount);
          _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
          _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
          _takeLiquidity(tLiquidity);
          _reflectFee(rFee, tFee);
          emit Transfer(sender, recipient, tTransferAmount);
      }
  
      function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
          (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
          _tOwned[sender] = _tOwned[sender].sub(tAmount);
          _rOwned[sender] = _rOwned[sender].sub(rAmount);
          _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
          _takeLiquidity(tLiquidity);
          _reflectFee(rFee, tFee);
          emit Transfer(sender, recipient, tTransferAmount);
      }
  
  
      
  
  }

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":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","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":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"routerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405269d3c21bcecceda100000060095560095460001962000024919062000849565b6000196200003391906200079a565b600a556040518060400160405280600881526020017f436f696e546f6f6c000000000000000000000000000000000000000000000000815250600c9080519060200190620000839291906200063b565b506040518060400160405280600881526020017f436f696e546f6f6c000000000000000000000000000000000000000000000000815250600d9080519060200190620000d19291906200063b565b506009600e60006101000a81548160ff021916908360ff1602179055506005600f55600f5460105560056011556011546012556001601360016101000a81548160ff02191690831515021790555069010f0cf064dd59200000601455681b1ae4d6e2ef500000601555731b02da8cb0d097eb8d57a175b88c7d8b47997506601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200019c57600080fd5b506000620001af6200060a60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600a5460036000620002646200060a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200031057600080fd5b505afa15801562000325573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034b919062000702565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003ae57600080fd5b505afa158015620003c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e9919062000702565b6040518363ffffffff1660e01b81526004016200040892919062000750565b602060405180830381600087803b1580156200042357600080fd5b505af115801562000438573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200045e919062000702565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600160066000620004e16200061260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200059a6200060a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600954604051620005fb91906200077d565b60405180910390a35062000928565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620006499062000813565b90600052602060002090601f0160209004810192826200066d5760008555620006b9565b82601f106200068857805160ff1916838001178555620006b9565b82800160010185558215620006b9579182015b82811115620006b85782518255916020019190600101906200069b565b5b509050620006c89190620006cc565b5090565b5b80821115620006e7576000816000905550600101620006cd565b5090565b600081519050620006fc816200090e565b92915050565b6000602082840312156200071557600080fd5b60006200072584828501620006eb565b91505092915050565b6200073981620007d5565b82525050565b6200074a8162000809565b82525050565b60006040820190506200076760008301856200072e565b6200077660208301846200072e565b9392505050565b60006020820190506200079460008301846200073f565b92915050565b6000620007a78262000809565b9150620007b48362000809565b925082821015620007ca57620007c962000881565b5b828203905092915050565b6000620007e282620007e9565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060028204905060018216806200082c57607f821691505b60208210811415620008435762000842620008df565b5b50919050565b6000620008568262000809565b9150620008638362000809565b925082620008765762000875620008b0565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6200091981620007d5565b81146200092557600080fd5b50565b60805160601c60a05160601c6155bf6200097e600039600081816113bb015261286c015260008181610a7a015281816135670152818161367d015281816136a401528181613740015261376701526155bf6000f3fe6080604052600436106102295760003560e01c80635342acb411610123578063a457c2d7116100ab578063d543dbeb1161006f578063d543dbeb1461083e578063dd46706414610867578063dd62ed3e14610890578063ea2f0b37146108cd578063f2fde38b146108f657610230565b8063a457c2d714610759578063a69df4b514610796578063a9059cbb146107ad578063b6c52324146107ea578063c49b9a801461081557610230565b80637d1db4a5116100f25780637d1db4a51461067257806388f820201461069d5780638da5cb5b146106da5780638ee88c531461070557806395d89b411461072e57610230565b80635342acb4146105b65780636bc87c3a146105f357806370a082311461061e578063715018a61461065b57610230565b80633268cc56116101b1578063437823ec11610175578063437823ec146104d15780634549b039146104fa57806349bd5a5e146105375780634a74bb021461056257806352390c021461058d57610230565b80633268cc56146103ec5780633685d4191461041757806339509351146104405780633b124fe71461047d5780633bd5d173146104a857610230565b80631694505e116101f85780631694505e146102f157806318160ddd1461031c57806323b872dd146103475780632d83811914610384578063313ce567146103c157610230565b8063061c82d01461023557806306fdde031461025e578063095ea7b31461028957806313114a9d146102c657610230565b3661023057005b600080fd5b34801561024157600080fd5b5061025c600480360381019061025791906145ed565b61091f565b005b34801561026a57600080fd5b506102736109be565b6040516102809190614a9b565b60405180910390f35b34801561029557600080fd5b506102b060048036038101906102ab9190614588565b610a50565b6040516102bd9190614a65565b60405180910390f35b3480156102d257600080fd5b506102db610a6e565b6040516102e89190614cbd565b60405180910390f35b3480156102fd57600080fd5b50610306610a78565b6040516103139190614a80565b60405180910390f35b34801561032857600080fd5b50610331610a9c565b60405161033e9190614cbd565b60405180910390f35b34801561035357600080fd5b5061036e60048036038101906103699190614539565b610aa6565b60405161037b9190614a65565b60405180910390f35b34801561039057600080fd5b506103ab60048036038101906103a691906145ed565b610b7f565b6040516103b89190614cbd565b60405180910390f35b3480156103cd57600080fd5b506103d6610bed565b6040516103e39190614d69565b60405180910390f35b3480156103f857600080fd5b50610401610c04565b60405161040e91906149e9565b60405180910390f35b34801561042357600080fd5b5061043e600480360381019061043991906144ab565b610c2a565b005b34801561044c57600080fd5b5061046760048036038101906104629190614588565b611011565b6040516104749190614a65565b60405180910390f35b34801561048957600080fd5b506104926110c4565b60405161049f9190614cbd565b60405180910390f35b3480156104b457600080fd5b506104cf60048036038101906104ca91906145ed565b6110ca565b005b3480156104dd57600080fd5b506104f860048036038101906104f391906144ab565b611245565b005b34801561050657600080fd5b50610521600480360381019061051c9190614616565b611335565b60405161052e9190614cbd565b60405180910390f35b34801561054357600080fd5b5061054c6113b9565b60405161055991906149e9565b60405180910390f35b34801561056e57600080fd5b506105776113dd565b6040516105849190614a65565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af91906144ab565b6113f0565b005b3480156105c257600080fd5b506105dd60048036038101906105d891906144ab565b6116a4565b6040516105ea9190614a65565b60405180910390f35b3480156105ff57600080fd5b506106086116fa565b6040516106159190614cbd565b60405180910390f35b34801561062a57600080fd5b50610645600480360381019061064091906144ab565b611700565b6040516106529190614cbd565b60405180910390f35b34801561066757600080fd5b506106706117eb565b005b34801561067e57600080fd5b5061068761193e565b6040516106949190614cbd565b60405180910390f35b3480156106a957600080fd5b506106c460048036038101906106bf91906144ab565b611944565b6040516106d19190614a65565b60405180910390f35b3480156106e657600080fd5b506106ef61199a565b6040516106fc91906149e9565b60405180910390f35b34801561071157600080fd5b5061072c600480360381019061072791906145ed565b6119c3565b005b34801561073a57600080fd5b50610743611a62565b6040516107509190614a9b565b60405180910390f35b34801561076557600080fd5b50610780600480360381019061077b9190614588565b611af4565b60405161078d9190614a65565b60405180910390f35b3480156107a257600080fd5b506107ab611bc1565b005b3480156107b957600080fd5b506107d460048036038101906107cf9190614588565b611d95565b6040516107e19190614a65565b60405180910390f35b3480156107f657600080fd5b506107ff611db3565b60405161080c9190614cbd565b60405180910390f35b34801561082157600080fd5b5061083c600480360381019061083791906145c4565b611dbd565b005b34801561084a57600080fd5b50610865600480360381019061086091906145ed565b611ea6565b005b34801561087357600080fd5b5061088e600480360381019061088991906145ed565b611f6c565b005b34801561089c57600080fd5b506108b760048036038101906108b291906144fd565b612133565b6040516108c49190614cbd565b60405180910390f35b3480156108d957600080fd5b506108f460048036038101906108ef91906144ab565b6121ba565b005b34801561090257600080fd5b5061091d600480360381019061091891906144ab565b6122aa565b005b61092761246c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ab90614bdd565b60405180910390fd5b80600f8190555050565b6060600c80546109cd90614fac565b80601f01602080910402602001604051908101604052809291908181526020018280546109f990614fac565b8015610a465780601f10610a1b57610100808354040283529160200191610a46565b820191906000526020600020905b815481529060010190602001808311610a2957829003601f168201915b5050505050905090565b6000610a64610a5d61246c565b8484612474565b6001905092915050565b6000600b54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600954905090565b6000610ab384848461263f565b610b7484610abf61246c565b610b6f8560405180606001604052806028815260200161553d60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b2561246c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129ac9092919063ffffffff16565b612474565b600190509392505050565b6000600a54821115610bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbd90614add565b60405180910390fd5b6000610bd0612a10565b9050610be58184612a3b90919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c3261246c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb690614bdd565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4290614b5d565b60405180910390fd5b60005b60088054905081101561100d578173ffffffffffffffffffffffffffffffffffffffff1660088281548110610dac577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610ffa5760086001600880549050610e079190614eba565b81548110610e3e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110610ea3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008805480610fc0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561100d565b808061100590614fde565b915050610d4e565b5050565b60006110ba61101e61246c565b846110b5856005600061102f61246c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a8590919063ffffffff16565b612474565b6001905092915050565b600f5481565b60006110d461246c565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115a90614c7d565b60405180910390fd5b600061116e83612ae3565b505050505090506111c781600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b3f90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061121f81600a54612b3f90919063ffffffff16565b600a8190555061123a83600b54612a8590919063ffffffff16565b600b81905550505050565b61124d61246c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d190614bdd565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060095483111561137c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137390614b7d565b60405180910390fd5b8161139c57600061138c84612ae3565b50505050509050809150506113b3565b60006113a784612ae3565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601360019054906101000a900460ff1681565b6113f861246c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147c90614bdd565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611512576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150990614b5d565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156115e6576115a2600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b7f565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60115481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561179b57600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506117e6565b6117e3600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b7f565b90505b919050565b6117f361246c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611880576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187790614bdd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60145481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119cb61246c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4f90614bdd565b60405180910390fd5b8060118190555050565b6060600d8054611a7190614fac565b80601f0160208091040260200160405190810160405280929190818152602001828054611a9d90614fac565b8015611aea5780601f10611abf57610100808354040283529160200191611aea565b820191906000526020600020905b815481529060010190602001808311611acd57829003601f168201915b5050505050905090565b6000611bb7611b0161246c565b84611bb2856040518060600160405280602581526020016155656025913960056000611b2b61246c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129ac9092919063ffffffff16565b612474565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4890614c9d565b60405180910390fd5b6002544211611c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8c90614c5d565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611da9611da261246c565b848461263f565b6001905092915050565b6000600254905090565b611dc561246c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4990614bdd565b60405180910390fd5b80601360016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611e9b9190614a65565b60405180910390a150565b611eae61246c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3290614bdd565b60405180910390fd5b611f636064611f5583600954612b8990919063ffffffff16565b612a3b90919063ffffffff16565b60148190555050565b611f7461246c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff890614bdd565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080426120af9190614dd9565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6121c261246c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461224f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224690614bdd565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6122b261246c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461233f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233690614bdd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a690614afd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124db90614c3d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254b90614b1d565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126329190614cbd565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a690614c1d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561271f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271690614abd565b60405180910390fd5b60008111612762576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275990614bfd565b60405180910390fd5b61276a61199a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127d857506127a861199a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561282357601454811115612822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281990614b9d565b60405180910390fd5b5b600061282e30611700565b9050601454811061283f5760145490505b600060155482101590508080156128635750601360009054906101000a900460ff16155b80156128bb57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156128d35750601360019054906101000a900460ff165b156128e75760155491506128e682612c04565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061298e5750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561299857600090505b6129a486868684612cda565b505050505050565b60008383111582906129f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129eb9190614a9b565b60405180910390fd5b5060008385612a039190614eba565b9050809150509392505050565b6000806000612a1d612feb565b91509150612a348183612a3b90919063ffffffff16565b9250505090565b6000612a7d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613336565b905092915050565b6000808284612a949190614dd9565b905083811015612ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad090614b3d565b60405180910390fd5b8091505092915050565b6000806000806000806000806000612afa8a613399565b9250925092506000806000612b188d8686612b13612a10565b6133f3565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000612b8183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506129ac565b905092915050565b600080831415612b9c5760009050612bfe565b60008284612baa9190614e60565b9050828482612bb99190614e2f565b14612bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf090614bbd565b60405180910390fd5b809150505b92915050565b6001601360006101000a81548160ff0219169083151502179055506000612c35600283612a3b90919063ffffffff16565b90506000612c4c8284612b3f90919063ffffffff16565b90506000479050612c5c8361347c565b6000612c718247612b3f90919063ffffffff16565b9050612c7d838261373a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051612cb093929190614d32565b60405180910390a1505050506000601360006101000a81548160ff02191690831515021790555050565b80612ce857612ce761382a565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d8b5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612da057612d9b84848461386d565b612fd7565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e435750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e5857612e53848484613acd565b612fd6565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612efc5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f1157612f0c848484613d2d565b612fd5565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fb35750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612fc857612fc3848484613ef8565b612fd4565b612fd3848484613d2d565b5b5b5b5b80612fe557612fe46141ed565b5b50505050565b6000806000600a5490506000600954905060005b6008805490508110156132f95782600360006008848154811061304b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061315f57508160046000600884815481106130f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561317657600a5460095494509450505050613332565b61322c60036000600884815481106131b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612b3f90919063ffffffff16565b92506132e4600460006008848154811061326f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612b3f90919063ffffffff16565b915080806132f190614fde565b915050612fff565b50613311600954600a54612a3b90919063ffffffff16565b82101561332957600a54600954935093505050613332565b81819350935050505b9091565b6000808311829061337d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133749190614a9b565b60405180910390fd5b506000838561338c9190614e2f565b9050809150509392505050565b6000806000806133a885614201565b905060006133b586614232565b905060006133de826133d0858a612b3f90919063ffffffff16565b612b3f90919063ffffffff16565b90508083839550955095505050509193909250565b60008060008061340c8589612b8990919063ffffffff16565b905060006134238689612b8990919063ffffffff16565b9050600061343a8789612b8990919063ffffffff16565b90506000613463826134558587612b3f90919063ffffffff16565b612b3f90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff8111156134bf577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156134ed5781602001602082028036833780820191505090505b509050308160008151811061352b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156135cb57600080fd5b505afa1580156135df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061360391906144d4565b8160018151811061363d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506136a2307f000000000000000000000000000000000000000000000000000000000000000084612474565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613704959493929190614cd8565b600060405180830381600087803b15801561371e57600080fd5b505af1158015613732573d6000803e3d6000fd5b505050505050565b613765307f000000000000000000000000000000000000000000000000000000000000000084612474565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806137af61199a565b426040518863ffffffff1660e01b81526004016137d196959493929190614a04565b6060604051808303818588803b1580156137ea57600080fd5b505af11580156137fe573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906138239190614652565b5050505050565b6000600f5414801561383e57506000601154145b156138485761386b565b600f546010819055506011546012819055506000600f8190555060006011819055505b565b60008060008060008061387f87612ae3565b9550955095509550955095506138dd87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b3f90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061397286600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b3f90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a0785600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a8590919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a5381614263565b613a5d8483614408565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613aba9190614cbd565b60405180910390a3505050505050505050565b600080600080600080613adf87612ae3565b955095509550955095509550613b3d86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b3f90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bd283600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a8590919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c6785600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a8590919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cb381614263565b613cbd8483614408565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613d1a9190614cbd565b60405180910390a3505050505050505050565b600080600080600080613d3f87612ae3565b955095509550955095509550613d9d86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b3f90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e3285600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a8590919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e7e81614263565b613e888483614408565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613ee59190614cbd565b60405180910390a3505050505050505050565b600080600080600080613f0a87612ae3565b955095509550955095509550613f6887600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b3f90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ffd86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b3f90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061409283600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a8590919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061412785600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a8590919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061417381614263565b61417d8483614408565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516141da9190614cbd565b60405180910390a3505050505050505050565b601054600f81905550601254601181905550565b600061422b606461421d600f5485612b8990919063ffffffff16565b612a3b90919063ffffffff16565b9050919050565b600061425c606461424e60115485612b8990919063ffffffff16565b612a3b90919063ffffffff16565b9050919050565b600061426d612a10565b905060006142848284612b8990919063ffffffff16565b90506142d881600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a8590919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614403576143bf83600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a8590919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61441d82600a54612b3f90919063ffffffff16565b600a8190555061443881600b54612a8590919063ffffffff16565b600b819055505050565b600081359050614451816154f7565b92915050565b600081519050614466816154f7565b92915050565b60008135905061447b8161550e565b92915050565b60008135905061449081615525565b92915050565b6000815190506144a581615525565b92915050565b6000602082840312156144bd57600080fd5b60006144cb84828501614442565b91505092915050565b6000602082840312156144e657600080fd5b60006144f484828501614457565b91505092915050565b6000806040838503121561451057600080fd5b600061451e85828601614442565b925050602061452f85828601614442565b9150509250929050565b60008060006060848603121561454e57600080fd5b600061455c86828701614442565b935050602061456d86828701614442565b925050604061457e86828701614481565b9150509250925092565b6000806040838503121561459b57600080fd5b60006145a985828601614442565b92505060206145ba85828601614481565b9150509250929050565b6000602082840312156145d657600080fd5b60006145e48482850161446c565b91505092915050565b6000602082840312156145ff57600080fd5b600061460d84828501614481565b91505092915050565b6000806040838503121561462957600080fd5b600061463785828601614481565b92505060206146488582860161446c565b9150509250929050565b60008060006060848603121561466757600080fd5b600061467586828701614496565b935050602061468686828701614496565b925050604061469786828701614496565b9150509250925092565b60006146ad83836146b9565b60208301905092915050565b6146c281614eee565b82525050565b6146d181614eee565b82525050565b60006146e282614d94565b6146ec8185614db7565b93506146f783614d84565b8060005b8381101561472857815161470f88826146a1565b975061471a83614daa565b9250506001810190506146fb565b5085935050505092915050565b61473e81614f00565b82525050565b61474d81614f43565b82525050565b61475c81614f67565b82525050565b600061476d82614d9f565b6147778185614dc8565b9350614787818560208601614f79565b614790816150b4565b840191505092915050565b60006147a8602383614dc8565b91506147b3826150c5565b604082019050919050565b60006147cb602a83614dc8565b91506147d682615114565b604082019050919050565b60006147ee602683614dc8565b91506147f982615163565b604082019050919050565b6000614811602283614dc8565b915061481c826151b2565b604082019050919050565b6000614834601b83614dc8565b915061483f82615201565b602082019050919050565b6000614857601b83614dc8565b91506148628261522a565b602082019050919050565b600061487a601f83614dc8565b915061488582615253565b602082019050919050565b600061489d602883614dc8565b91506148a88261527c565b604082019050919050565b60006148c0602183614dc8565b91506148cb826152cb565b604082019050919050565b60006148e3602083614dc8565b91506148ee8261531a565b602082019050919050565b6000614906602983614dc8565b915061491182615343565b604082019050919050565b6000614929602583614dc8565b915061493482615392565b604082019050919050565b600061494c602483614dc8565b9150614957826153e1565b604082019050919050565b600061496f601f83614dc8565b915061497a82615430565b602082019050919050565b6000614992602c83614dc8565b915061499d82615459565b604082019050919050565b60006149b5602383614dc8565b91506149c0826154a8565b604082019050919050565b6149d481614f2c565b82525050565b6149e381614f36565b82525050565b60006020820190506149fe60008301846146c8565b92915050565b600060c082019050614a1960008301896146c8565b614a2660208301886149cb565b614a336040830187614753565b614a406060830186614753565b614a4d60808301856146c8565b614a5a60a08301846149cb565b979650505050505050565b6000602082019050614a7a6000830184614735565b92915050565b6000602082019050614a956000830184614744565b92915050565b60006020820190508181036000830152614ab58184614762565b905092915050565b60006020820190508181036000830152614ad68161479b565b9050919050565b60006020820190508181036000830152614af6816147be565b9050919050565b60006020820190508181036000830152614b16816147e1565b9050919050565b60006020820190508181036000830152614b3681614804565b9050919050565b60006020820190508181036000830152614b5681614827565b9050919050565b60006020820190508181036000830152614b768161484a565b9050919050565b60006020820190508181036000830152614b968161486d565b9050919050565b60006020820190508181036000830152614bb681614890565b9050919050565b60006020820190508181036000830152614bd6816148b3565b9050919050565b60006020820190508181036000830152614bf6816148d6565b9050919050565b60006020820190508181036000830152614c16816148f9565b9050919050565b60006020820190508181036000830152614c368161491c565b9050919050565b60006020820190508181036000830152614c568161493f565b9050919050565b60006020820190508181036000830152614c7681614962565b9050919050565b60006020820190508181036000830152614c9681614985565b9050919050565b60006020820190508181036000830152614cb6816149a8565b9050919050565b6000602082019050614cd260008301846149cb565b92915050565b600060a082019050614ced60008301886149cb565b614cfa6020830187614753565b8181036040830152614d0c81866146d7565b9050614d1b60608301856146c8565b614d2860808301846149cb565b9695505050505050565b6000606082019050614d4760008301866149cb565b614d5460208301856149cb565b614d6160408301846149cb565b949350505050565b6000602082019050614d7e60008301846149da565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614de482614f2c565b9150614def83614f2c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e2457614e23615027565b5b828201905092915050565b6000614e3a82614f2c565b9150614e4583614f2c565b925082614e5557614e54615056565b5b828204905092915050565b6000614e6b82614f2c565b9150614e7683614f2c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614eaf57614eae615027565b5b828202905092915050565b6000614ec582614f2c565b9150614ed083614f2c565b925082821015614ee357614ee2615027565b5b828203905092915050565b6000614ef982614f0c565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614f4e82614f55565b9050919050565b6000614f6082614f0c565b9050919050565b6000614f7282614f2c565b9050919050565b60005b83811015614f97578082015181840152602081019050614f7c565b83811115614fa6576000848401525b50505050565b60006002820490506001821680614fc457607f821691505b60208210811415614fd857614fd7615085565b5b50919050565b6000614fe982614f2c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561501c5761501b615027565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b61550081614eee565b811461550b57600080fd5b50565b61551781614f00565b811461552257600080fd5b50565b61552e81614f2c565b811461553957600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204a2f45c02a3d93571f574b1de7ab422aec3813c64591bd0edb472ed35142b22564736f6c63430008040033

Deployed ByteCode Sourcemap

16754:19337:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24652:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19335:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20307:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21478:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17771:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19636:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20486:321;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22450:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19537:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18116:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23198:501;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20819:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17571:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21581:391;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24391:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21984:454;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17831:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17916:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22723:463;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28749:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17664:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19747:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6978:154;;;;;;;;;;;;;:::i;:::-;;17973:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21342:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6657:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24770:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19434:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21055:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7903:315;;;;;;;;;;;;;:::i;:::-;;19963:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7410:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25093:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24911:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7585:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20148:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24522:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7146:252;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24652:102;6895:12;:10;:12::i;:::-;6885:22;;:6;;;;;;;;;;:22;;;6877:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24738:6:::1;24728:7;:16;;;;24652:102:::0;:::o;19335:87::-;19372:13;19407:5;19400:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19335:87;:::o;20307:167::-;20382:4;20401:39;20410:12;:10;:12::i;:::-;20424:7;20433:6;20401:8;:39::i;:::-;20460:4;20453:11;;20307:167;;;;:::o;21478:91::-;21520:7;21549:10;;21542:17;;21478:91;:::o;17771:51::-;;;:::o;19636:99::-;19689:7;19718;;19711:14;;19636:99;:::o;20486:321::-;20584:4;20603:36;20613:6;20621:9;20632:6;20603:9;:36::i;:::-;20652:121;20661:6;20669:12;:10;:12::i;:::-;20683:89;20721:6;20683:89;;;;;;;;;;;;;;;;;:11;:19;20695:6;20683:19;;;;;;;;;;;;;;;:33;20703:12;:10;:12::i;:::-;20683:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;20652:8;:121::i;:::-;20793:4;20786:11;;20486:321;;;;;:::o;22450:261::-;22516:7;22557;;22546;:18;;22538:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22624:19;22647:10;:8;:10::i;:::-;22624:33;;22677:24;22689:11;22677:7;:11;;:24;;;;:::i;:::-;22670:31;;;22450:261;;;:::o;19537:87::-;19578:5;19605:9;;;;;;;;;;;19598:16;;19537:87;:::o;18116:73::-;;;;;;;;;;;;;:::o;23198:501::-;6895:12;:10;:12::i;:::-;6885:22;;:6;;;;;;;;;;:22;;;6877:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23282:11:::1;:20;23294:7;23282:20;;;;;;;;;;;;;;;;;;;;;;;;;23274:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;23352:9;23347:343;23371:9;:16;;;;23367:1;:20;23347:343;;;23431:7;23415:23;;:9;23425:1;23415:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;23411:266;;;23476:9;23505:1;23486:9;:16;;;;:20;;;;:::i;:::-;23476:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23461:9;23471:1;23461:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;23547:1;23528:7;:16;23536:7;23528:16;;;;;;;;;;;;;;;:20;;;;23592:5;23569:11;:20;23581:7;23569:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;23618:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23654:5;;23411:266;23389:3;;;;;:::i;:::-;;;;23347:343;;;;23198:501:::0;:::o;20819:224::-;20907:4;20926:83;20935:12;:10;:12::i;:::-;20949:7;20958:50;20997:10;20958:11;:25;20970:12;:10;:12::i;:::-;20958:25;;;;;;;;;;;;;;;:34;20984:7;20958:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;20926:8;:83::i;:::-;21029:4;21022:11;;20819:224;;;;:::o;17571:26::-;;;;:::o;21581:391::-;21635:14;21652:12;:10;:12::i;:::-;21635:29;;21686:11;:19;21698:6;21686:19;;;;;;;;;;;;;;;;;;;;;;;;;21685:20;21677:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;21768:15;21792:19;21803:7;21792:10;:19::i;:::-;21767:44;;;;;;;21842:28;21862:7;21842;:15;21850:6;21842:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;21824:7;:15;21832:6;21824:15;;;;;;;;;;;;;;;:46;;;;21893:20;21905:7;21893;;:11;;:20;;;;:::i;:::-;21883:7;:30;;;;21939:23;21954:7;21939:10;;:14;;:23;;;;:::i;:::-;21926:10;:36;;;;21581:391;;;:::o;24391:115::-;6895:12;:10;:12::i;:::-;6885:22;;:6;;;;;;;;;;:22;;;6877:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24492:4:::1;24462:18;:27;24481:7;24462:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;24391:115:::0;:::o;21984:454::-;22074:7;22115;;22104;:18;;22096:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;22176:17;22171:258;;22213:15;22237:19;22248:7;22237:10;:19::i;:::-;22212:44;;;;;;;22280:7;22273:14;;;;;22171:258;22326:23;22357:19;22368:7;22357:10;:19::i;:::-;22324:52;;;;;;;22400:15;22393:22;;;21984:454;;;;;:::o;17831:38::-;;;:::o;17916:40::-;;;;;;;;;;;;;:::o;22723:463::-;6895:12;:10;:12::i;:::-;6885:22;;:6;;;;;;;;;;:22;;;6877:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22924:11:::1;:20;22936:7;22924:20;;;;;;;;;;;;;;;;;;;;;;;;;22923:21;22915:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;23011:1;22992:7;:16;23000:7;22992:16;;;;;;;;;;;;;;;;:20;22989:112;;;23050:37;23070:7;:16;23078:7;23070:16;;;;;;;;;;;;;;;;23050:19;:37::i;:::-;23031:7;:16;23039:7;23031:16;;;;;;;;;;;;;;;:56;;;;22989:112;23136:4;23113:11;:20;23125:7;23113:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;23153:9;23168:7;23153:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22723:463:::0;:::o;28749:127::-;28813:4;28839:18;:27;28858:7;28839:27;;;;;;;;;;;;;;;;;;;;;;;;;28832:34;;28749:127;;;:::o;17664:32::-;;;;:::o;19747:204::-;19813:7;19839:11;:20;19851:7;19839:20;;;;;;;;;;;;;;;;;;;;;;;;;19835:49;;;19868:7;:16;19876:7;19868:16;;;;;;;;;;;;;;;;19861:23;;;;19835:49;19904:37;19924:7;:16;19932:7;19924:16;;;;;;;;;;;;;;;;19904:19;:37::i;:::-;19897:44;;19747:204;;;;:::o;6978:154::-;6895:12;:10;:12::i;:::-;6885:22;;:6;;;;;;;;;;:22;;;6877:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7087:1:::1;7050:40;;7071:6;::::0;::::1;;;;;;;;7050:40;;;;;;;;;;;;7120:1;7103:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;6978:154::o:0;17973:53::-;;;;:::o;21342:124::-;21410:4;21436:11;:20;21448:7;21436:20;;;;;;;;;;;;;;;;;;;;;;;;;21429:27;;21342:124;;;:::o;6657:83::-;6695:7;6724:6;;;;;;;;;;;6717:13;;6657:83;:::o;24770:126::-;6895:12;:10;:12::i;:::-;6885:22;;:6;;;;;;;;;;:22;;;6877:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24874:12:::1;24858:13;:28;;;;24770:126:::0;:::o;19434:91::-;19473:13;19508:7;19501:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19434:91;:::o;21055:275::-;21148:4;21167:129;21176:12;:10;:12::i;:::-;21190:7;21199:96;21238:15;21199:96;;;;;;;;;;;;;;;;;:11;:25;21211:12;:10;:12::i;:::-;21199:25;;;;;;;;;;;;;;;:34;21225:7;21199:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;21167:8;:129::i;:::-;21316:4;21309:11;;21055:275;;;;:::o;7903:315::-;7975:10;7957:28;;:14;;;;;;;;;;;:28;;;7949:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;8064:9;;8046:15;:27;8038:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;8157:14;;;;;;;;;;;8128:44;;8149:6;;;;;;;;;;8128:44;;;;;;;;;;;;8194:14;;;;;;;;;;;8185:6;;:23;;;;;;;;;;;;;;;;;;7903:315::o;19963:173::-;20041:4;20060:42;20070:12;:10;:12::i;:::-;20084:9;20095:6;20060:9;:42::i;:::-;20122:4;20115:11;;19963:173;;;;:::o;7410:93::-;7455:7;7484:9;;7477:16;;7410:93;:::o;25093:177::-;6895:12;:10;:12::i;:::-;6885:22;;:6;;;;;;;;;;:22;;;6877:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25196:8:::1;25172:21;;:32;;;;;;;;;;;;;;;;;;25222:38;25251:8;25222:38;;;;;;:::i;:::-;;;;;;;;25093:177:::0;:::o;24911:170::-;6895:12;:10;:12::i;:::-;6885:22;;:6;;;;;;;;;;:22;;;6877:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25007:64:::1;25053:5;25007:25;25019:12;25007:7;;:11;;:25;;;;:::i;:::-;:29;;:64;;;;:::i;:::-;24992:12;:79;;;;24911:170:::0;:::o;7585:236::-;6895:12;:10;:12::i;:::-;6885:22;;:6;;;;;;;;;;:22;;;6877:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7668:6:::1;::::0;::::1;;;;;;;;7651:14;;:23;;;;;;;;;;;;;;;;;;7704:1;7687:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;7749:4;7731:15;:22;;;;:::i;:::-;7719:9;:34;;;;7808:1;7771:40;;7792:6;::::0;::::1;;;;;;;;7771:40;;;;;;;;;;;;7585:236:::0;:::o;20148:147::-;20229:7;20258:11;:18;20270:5;20258:18;;;;;;;;;;;;;;;:27;20277:7;20258:27;;;;;;;;;;;;;;;;20251:34;;20148:147;;;;:::o;24522:114::-;6895:12;:10;:12::i;:::-;6885:22;;:6;;;;;;;;;;:22;;;6877:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24621:5:::1;24591:18;:27;24610:7;24591:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;24522:114:::0;:::o;7146:252::-;6895:12;:10;:12::i;:::-;6885:22;;:6;;;;;;;;;;:22;;;6877:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7257:1:::1;7237:22;;:8;:22;;;;7229:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7349:8;7320:38;;7341:6;::::0;::::1;;;;;;;;7320:38;;;;;;;;;;;;7380:8;7371:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;7146:252:::0;:::o;2736:115::-;2789:15;2832:10;2817:26;;2736:115;:::o;28888:349::-;29000:1;28983:19;;:5;:19;;;;28975:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29083:1;29064:21;;:7;:21;;;;29056:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29171:6;29141:11;:18;29153:5;29141:18;;;;;;;;;;;;;;;:27;29160:7;29141:27;;;;;;;;;;;;;;;:36;;;;29211:7;29195:32;;29204:5;29195:32;;;29220:6;29195:32;;;;;;:::i;:::-;;;;;;;;28888:349;;;:::o;29249:1901::-;29397:1;29381:18;;:4;:18;;;;29373:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29476:1;29462:16;;:2;:16;;;;29454:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29548:1;29539:6;:10;29531:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29619:7;:5;:7::i;:::-;29611:15;;:4;:15;;;;:32;;;;;29636:7;:5;:7::i;:::-;29630:13;;:2;:13;;;;29611:32;29608:127;;;29678:12;;29668:6;:22;;29660:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;29608:127;30042:28;30073:24;30091:4;30073:9;:24::i;:::-;30042:55;;30149:12;;30125:20;:36;30122:118;;30214:12;;30191:35;;30122:118;30264:24;30315:29;;30291:20;:53;;30264:80;;30377:19;:55;;;;;30416:16;;;;;;;;;;;30415:17;30377:55;:95;;;;;30459:13;30451:21;;:4;:21;;;;30377:95;:135;;;;;30491:21;;;;;;;;;;;30377:135;30357:336;;;30566:29;;30543:52;;30643:36;30658:20;30643:14;:36::i;:::-;30357:336;30780:12;30795:4;30780:19;;30913:18;:24;30932:4;30913:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;30941:18;:22;30960:2;30941:22;;;;;;;;;;;;;;;;;;;;;;;;;30913:50;30910:100;;;30991:5;30981:15;;30910:100;31102:38;31117:4;31122:2;31125:6;31132:7;31102:14;:38::i;:::-;29249:1901;;;;;;:::o;1193:202::-;1279:7;1314:1;1309;:6;;1317:12;1301:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1343:9;1359:1;1355;:5;;;;:::i;:::-;1343:17;;1384:1;1377:8;;;1193:202;;;;;:::o;26795:169::-;26836:7;26859:15;26876;26895:19;:17;:19::i;:::-;26858:56;;;;26934:20;26946:7;26934;:11;;:20;;;;:::i;:::-;26927:27;;;;26795:169;:::o;1918:136::-;1976:7;2005:39;2009:1;2012;2005:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1998:46;;1918:136;;;;:::o;838:191::-;896:7;918:9;934:1;930;:5;;;;:::i;:::-;918:17;;961:1;956;:6;;948:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1018:1;1011:8;;;838:191;;;;:::o;25551:427::-;25610:7;25619;25628;25637;25646;25655;25678:23;25703:12;25717:18;25739:20;25751:7;25739:11;:20::i;:::-;25677:82;;;;;;25773:15;25790:23;25815:12;25831:50;25843:7;25852:4;25858:10;25870;:8;:10::i;:::-;25831:11;:50::i;:::-;25772:109;;;;;;25902:7;25911:15;25928:4;25934:15;25951:4;25957:10;25894:74;;;;;;;;;;;;;;;;;;25551:427;;;;;;;:::o;1043:140::-;1101:7;1130:43;1134:1;1137;1130:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1123:50;;1043:140;;;;:::o;1409:495::-;1467:7;1725:1;1720;:6;1716:51;;;1752:1;1745:8;;;;1716:51;1783:9;1799:1;1795;:5;;;;:::i;:::-;1783:17;;1830:1;1825;1821;:5;;;;:::i;:::-;:10;1813:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1893:1;1886:8;;;1409:495;;;;;:::o;31162:1027::-;18537:4;18518:16;;:23;;;;;;;;;;;;;;;;;;31302:12:::1;31317:27;31342:1;31317:20;:24;;:27;;;;:::i;:::-;31302:42;;31357:17;31377:30;31402:4;31377:20;:24;;:30;;;;:::i;:::-;31357:50;;31697:22;31722:21;31697:46;;31794:22;31811:4;31794:16;:22::i;:::-;31953:18;31974:41;32000:14;31974:21;:25;;:41;;;;:::i;:::-;31953:62;;32071:35;32084:9;32095:10;32071:12;:35::i;:::-;32136:43;32151:4;32157:10;32169:9;32136:43;;;;;;;;:::i;:::-;;;;;;;;18554:1;;;;18587:5:::0;18568:16;;:24;;;;;;;;;;;;;;;;;;31162:1027;:::o;33460:870::-;33573:7;33569:42;;33597:14;:12;:14::i;:::-;33569:42;33640:11;:19;33652:6;33640:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;33664:11;:22;33676:9;33664:22;;;;;;;;;;;;;;;;;;;;;;;;;33663:23;33640:46;33636:617;;;33705:48;33727:6;33735:9;33746:6;33705:21;:48::i;:::-;33636:617;;;33778:11;:19;33790:6;33778:19;;;;;;;;;;;;;;;;;;;;;;;;;33777:20;:46;;;;;33801:11;:22;33813:9;33801:22;;;;;;;;;;;;;;;;;;;;;;;;;33777:46;33773:480;;;33842:46;33862:6;33870:9;33881:6;33842:19;:46::i;:::-;33773:480;;;33913:11;:19;33925:6;33913:19;;;;;;;;;;;;;;;;;;;;;;;;;33912:20;:47;;;;;33937:11;:22;33949:9;33937:22;;;;;;;;;;;;;;;;;;;;;;;;;33936:23;33912:47;33908:345;;;33978:44;33996:6;34004:9;34015:6;33978:17;:44::i;:::-;33908:345;;;34046:11;:19;34058:6;34046:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;34069:11;:22;34081:9;34069:22;;;;;;;;;;;;;;;;;;;;;;;;;34046:45;34042:211;;;34110:48;34132:6;34140:9;34151:6;34110:21;:48::i;:::-;34042:211;;;34195:44;34213:6;34221:9;34232:6;34195:17;:44::i;:::-;34042:211;33908:345;33773:480;33636:617;34281:7;34277:43;;34305:15;:13;:15::i;:::-;34277:43;33460:870;;;;:::o;26976:581::-;27026:7;27035;27057:15;27075:7;;27057:25;;27095:15;27113:7;;27095:25;;27144:9;27139:297;27163:9;:16;;;;27159:1;:20;27139:297;;;27231:7;27207;:21;27215:9;27225:1;27215:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27207:21;;;;;;;;;;;;;;;;:31;:66;;;;27266:7;27242;:21;27250:9;27260:1;27250:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27242:21;;;;;;;;;;;;;;;;:31;27207:66;27203:97;;;27283:7;;27292;;27275:25;;;;;;;;;27203:97;27327:34;27339:7;:21;27347:9;27357:1;27347:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27339:21;;;;;;;;;;;;;;;;27327:7;:11;;:34;;;;:::i;:::-;27317:44;;27388:34;27400:7;:21;27408:9;27418:1;27408:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27400:21;;;;;;;;;;;;;;;;27388:7;:11;;:34;;;;:::i;:::-;27378:44;;27181:3;;;;;:::i;:::-;;;;27139:297;;;;27462:20;27474:7;;27462;;:11;;:20;;;;:::i;:::-;27452:7;:30;27448:61;;;27492:7;;27501;;27484:25;;;;;;;;27448:61;27530:7;27539;27522:25;;;;;;26976:581;;;:::o;2064:290::-;2150:7;2184:1;2180;:5;2187:12;2172:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2213:9;2229:1;2225;:5;;;;:::i;:::-;2213:17;;2343:1;2336:8;;;2064:290;;;;;:::o;25990:340::-;26050:7;26059;26068;26090:12;26105:24;26121:7;26105:15;:24::i;:::-;26090:39;;26142:18;26163:30;26185:7;26163:21;:30::i;:::-;26142:51;;26206:23;26232:33;26254:10;26232:17;26244:4;26232:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;26206:59;;26286:15;26303:4;26309:10;26278:42;;;;;;;;;25990:340;;;;;:::o;26342:441::-;26457:7;26466;26475;26497:15;26515:24;26527:11;26515:7;:11;;:24;;;;:::i;:::-;26497:42;;26552:12;26567:21;26576:11;26567:4;:8;;:21;;;;:::i;:::-;26552:36;;26601:18;26622:27;26637:11;26622:10;:14;;:27;;;;:::i;:::-;26601:48;;26662:23;26688:33;26710:10;26688:17;26700:4;26688:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;26662:59;;26742:7;26751:15;26768:4;26734:39;;;;;;;;;;26342:441;;;;;;;;:::o;32201:621::-;32331:21;32369:1;32355:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32331:40;;32402:4;32384;32389:1;32384:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;32430:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32420:4;32425:1;32420:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;32469:62;32486:4;32501:15;32519:11;32469:8;:62::i;:::-;32576:15;:66;;;32659:11;32687:1;32733:4;32762;32784:15;32576:236;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32201:621;;:::o;32834:539::-;32986:62;33003:4;33018:15;33036:11;32986:8;:62::i;:::-;33097:15;:31;;;33136:9;33171:4;33193:11;33221:1;33266;33311:7;:5;:7::i;:::-;33335:15;33097:266;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;32834:539;;:::o;28320:266::-;28379:1;28368:7;;:12;:34;;;;;28401:1;28384:13;;:18;28368:34;28365:46;;;28404:7;;28365:46;28453:7;;28435:15;:25;;;;28497:13;;28473:21;:37;;;;28545:1;28535:7;:11;;;;28575:1;28559:13;:17;;;;28320:266;:::o;35484:582::-;35589:15;35606:23;35631:12;35645:23;35670:12;35684:18;35706:19;35717:7;35706:10;:19::i;:::-;35588:137;;;;;;;;;;;;35756:28;35776:7;35756;:15;35764:6;35756:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;35738:7;:15;35746:6;35738:15;;;;;;;;;;;;;;;:46;;;;35815:28;35835:7;35815;:15;35823:6;35815:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;35797:7;:15;35805:6;35797:15;;;;;;;;;;;;;;;:46;;;;35877:39;35900:15;35877:7;:18;35885:9;35877:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;35856:7;:18;35864:9;35856:18;;;;;;;;;;;;;;;:60;;;;35932:26;35947:10;35932:14;:26::i;:::-;35971:23;35983:4;35989;35971:11;:23::i;:::-;36029:9;36012:44;;36021:6;36012:44;;;36040:15;36012:44;;;;;;:::i;:::-;;;;;;;;35484:582;;;;;;;;;:::o;34870:602::-;34973:15;34990:23;35015:12;35029:23;35054:12;35068:18;35090:19;35101:7;35090:10;:19::i;:::-;34972:137;;;;;;;;;;;;35140:28;35160:7;35140;:15;35148:6;35140:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;35122:7;:15;35130:6;35122:15;;;;;;;;;;;;;;;:46;;;;35202:39;35225:15;35202:7;:18;35210:9;35202:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;35181:7;:18;35189:9;35181:18;;;;;;;;;;;;;;;:60;;;;35275:39;35298:15;35275:7;:18;35283:9;35275:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;35254:7;:18;35262:9;35254:18;;;;;;;;;;;;;;;:60;;;;35338:26;35353:10;35338:14;:26::i;:::-;35377:23;35389:4;35395;35377:11;:23::i;:::-;35435:9;35418:44;;35427:6;35418:44;;;35446:15;35418:44;;;;;;:::i;:::-;;;;;;;;34870:602;;;;;;;;;:::o;34342:516::-;34443:15;34460:23;34485:12;34499:23;34524:12;34538:18;34560:19;34571:7;34560:10;:19::i;:::-;34442:137;;;;;;;;;;;;34610:28;34630:7;34610;:15;34618:6;34610:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;34592:7;:15;34600:6;34592:15;;;;;;;;;;;;;;;:46;;;;34672:39;34695:15;34672:7;:18;34680:9;34672:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;34651:7;:18;34659:9;34651:18;;;;;;;;;;;;;;;:60;;;;34724:26;34739:10;34724:14;:26::i;:::-;34763:23;34775:4;34781;34763:11;:23::i;:::-;34821:9;34804:44;;34813:6;34804:44;;;34832:15;34804:44;;;;;;:::i;:::-;;;;;;;;34342:516;;;;;;;;;:::o;23711:660::-;23816:15;23833:23;23858:12;23872:23;23897:12;23911:18;23933:19;23944:7;23933:10;:19::i;:::-;23815:137;;;;;;;;;;;;23983:28;24003:7;23983;:15;23991:6;23983:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;23965:7;:15;23973:6;23965:15;;;;;;;;;;;;;;;:46;;;;24042:28;24062:7;24042;:15;24050:6;24042:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;24024:7;:15;24032:6;24024:15;;;;;;;;;;;;;;;:46;;;;24104:39;24127:15;24104:7;:18;24112:9;24104:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;24083:7;:18;24091:9;24083:18;;;;;;;;;;;;;;;:60;;;;24177:39;24200:15;24177:7;:18;24185:9;24177:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;24156:7;:18;24164:9;24156:18;;;;;;;;;;;;;;;:60;;;;24237:26;24252:10;24237:14;:26::i;:::-;24276:23;24288:4;24294;24276:11;:23::i;:::-;24334:9;24317:44;;24326:6;24317:44;;;24345:15;24317:44;;;;;;:::i;:::-;;;;;;;;23711:660;;;;;;;;;:::o;28602:131::-;28658:15;;28648:7;:25;;;;28702:21;;28686:13;:37;;;;28602:131::o;27956:162::-;28020:7;28049:59;28090:5;28049:20;28061:7;;28049;:11;;:20;;;;:::i;:::-;:24;;:59;;;;:::i;:::-;28042:66;;27956:162;;;:::o;28130:174::-;28200:7;28229:65;28276:5;28229:26;28241:13;;28229:7;:11;;:26;;;;:::i;:::-;:30;;:65;;;;:::i;:::-;28222:72;;28130:174;;;:::o;27573:367::-;27638:19;27661:10;:8;:10::i;:::-;27638:33;;27684:18;27705:27;27720:11;27705:10;:14;;:27;;;;:::i;:::-;27684:48;;27770:38;27797:10;27770:7;:22;27786:4;27770:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;27745:7;:22;27761:4;27745:22;;;;;;;;;;;;;;;:63;;;;27824:11;:26;27844:4;27824:26;;;;;;;;;;;;;;;;;;;;;;;;;27821:109;;;27892:38;27919:10;27892:7;:22;27908:4;27892:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;27867:7;:22;27883:4;27867:22;;;;;;;;;;;;;;;:63;;;;27821:109;27573:367;;;:::o;25386:153::-;25466:17;25478:4;25466:7;;:11;;:17;;;;:::i;:::-;25456:7;:27;;;;25509:20;25524:4;25509:10;;:14;;:20;;;;:::i;:::-;25496:10;:33;;;;25386:153;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:143::-;642:5;673:6;667:13;658:22;;689:33;716:5;689:33;:::i;:::-;648:80;;;;:::o;734:262::-;793:6;842:2;830:9;821:7;817:23;813:32;810:2;;;858:1;855;848:12;810:2;901:1;926:53;971:7;962:6;951:9;947:22;926:53;:::i;:::-;916:63;;872:117;800:196;;;;:::o;1002:284::-;1072:6;1121:2;1109:9;1100:7;1096:23;1092:32;1089:2;;;1137:1;1134;1127:12;1089:2;1180:1;1205:64;1261:7;1252:6;1241:9;1237:22;1205:64;:::i;:::-;1195:74;;1151:128;1079:207;;;;:::o;1292:407::-;1360:6;1368;1417:2;1405:9;1396:7;1392:23;1388:32;1385:2;;;1433:1;1430;1423:12;1385:2;1476:1;1501:53;1546:7;1537:6;1526:9;1522:22;1501:53;:::i;:::-;1491:63;;1447:117;1603:2;1629:53;1674:7;1665:6;1654:9;1650:22;1629:53;:::i;:::-;1619:63;;1574:118;1375:324;;;;;:::o;1705:552::-;1782:6;1790;1798;1847:2;1835:9;1826:7;1822:23;1818:32;1815:2;;;1863:1;1860;1853:12;1815:2;1906:1;1931:53;1976:7;1967:6;1956:9;1952:22;1931:53;:::i;:::-;1921:63;;1877:117;2033:2;2059:53;2104:7;2095:6;2084:9;2080:22;2059:53;:::i;:::-;2049:63;;2004:118;2161:2;2187:53;2232:7;2223:6;2212:9;2208:22;2187:53;:::i;:::-;2177:63;;2132:118;1805:452;;;;;:::o;2263:407::-;2331:6;2339;2388:2;2376:9;2367:7;2363:23;2359:32;2356:2;;;2404:1;2401;2394:12;2356:2;2447:1;2472:53;2517:7;2508:6;2497:9;2493:22;2472:53;:::i;:::-;2462:63;;2418:117;2574:2;2600:53;2645:7;2636:6;2625:9;2621:22;2600:53;:::i;:::-;2590:63;;2545:118;2346:324;;;;;:::o;2676:256::-;2732:6;2781:2;2769:9;2760:7;2756:23;2752:32;2749:2;;;2797:1;2794;2787:12;2749:2;2840:1;2865:50;2907:7;2898:6;2887:9;2883:22;2865:50;:::i;:::-;2855:60;;2811:114;2739:193;;;;:::o;2938:262::-;2997:6;3046:2;3034:9;3025:7;3021:23;3017:32;3014:2;;;3062:1;3059;3052:12;3014:2;3105:1;3130:53;3175:7;3166:6;3155:9;3151:22;3130:53;:::i;:::-;3120:63;;3076:117;3004:196;;;;:::o;3206:401::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:2;;;3344:1;3341;3334:12;3296:2;3387:1;3412:53;3457:7;3448:6;3437:9;3433:22;3412:53;:::i;:::-;3402:63;;3358:117;3514:2;3540:50;3582:7;3573:6;3562:9;3558:22;3540:50;:::i;:::-;3530:60;;3485:115;3286:321;;;;;:::o;3613:596::-;3701:6;3709;3717;3766:2;3754:9;3745:7;3741:23;3737:32;3734:2;;;3782:1;3779;3772:12;3734:2;3825:1;3850:64;3906:7;3897:6;3886:9;3882:22;3850:64;:::i;:::-;3840:74;;3796:128;3963:2;3989:64;4045:7;4036:6;4025:9;4021:22;3989:64;:::i;:::-;3979:74;;3934:129;4102:2;4128:64;4184:7;4175:6;4164:9;4160:22;4128:64;:::i;:::-;4118:74;;4073:129;3724:485;;;;;:::o;4215:179::-;4284:10;4305:46;4347:3;4339:6;4305:46;:::i;:::-;4383:4;4378:3;4374:14;4360:28;;4295:99;;;;:::o;4400:108::-;4477:24;4495:5;4477:24;:::i;:::-;4472:3;4465:37;4455:53;;:::o;4514:118::-;4601:24;4619:5;4601:24;:::i;:::-;4596:3;4589:37;4579:53;;:::o;4668:732::-;4787:3;4816:54;4864:5;4816:54;:::i;:::-;4886:86;4965:6;4960:3;4886:86;:::i;:::-;4879:93;;4996:56;5046:5;4996:56;:::i;:::-;5075:7;5106:1;5091:284;5116:6;5113:1;5110:13;5091:284;;;5192:6;5186:13;5219:63;5278:3;5263:13;5219:63;:::i;:::-;5212:70;;5305:60;5358:6;5305:60;:::i;:::-;5295:70;;5151:224;5138:1;5135;5131:9;5126:14;;5091:284;;;5095:14;5391:3;5384:10;;4792:608;;;;;;;:::o;5406:109::-;5487:21;5502:5;5487:21;:::i;:::-;5482:3;5475:34;5465:50;;:::o;5521:185::-;5635:64;5693:5;5635:64;:::i;:::-;5630:3;5623:77;5613:93;;:::o;5712:147::-;5807:45;5846:5;5807:45;:::i;:::-;5802:3;5795:58;5785:74;;:::o;5865:364::-;5953:3;5981:39;6014:5;5981:39;:::i;:::-;6036:71;6100:6;6095:3;6036:71;:::i;:::-;6029:78;;6116:52;6161:6;6156:3;6149:4;6142:5;6138:16;6116:52;:::i;:::-;6193:29;6215:6;6193:29;:::i;:::-;6188:3;6184:39;6177:46;;5957:272;;;;;:::o;6235:366::-;6377:3;6398:67;6462:2;6457:3;6398:67;:::i;:::-;6391:74;;6474:93;6563:3;6474:93;:::i;:::-;6592:2;6587:3;6583:12;6576:19;;6381:220;;;:::o;6607:366::-;6749:3;6770:67;6834:2;6829:3;6770:67;:::i;:::-;6763:74;;6846:93;6935:3;6846:93;:::i;:::-;6964:2;6959:3;6955:12;6948:19;;6753:220;;;:::o;6979:366::-;7121:3;7142:67;7206:2;7201:3;7142:67;:::i;:::-;7135:74;;7218:93;7307:3;7218:93;:::i;:::-;7336:2;7331:3;7327:12;7320:19;;7125:220;;;:::o;7351:366::-;7493:3;7514:67;7578:2;7573:3;7514:67;:::i;:::-;7507:74;;7590:93;7679:3;7590:93;:::i;:::-;7708:2;7703:3;7699:12;7692:19;;7497:220;;;:::o;7723:366::-;7865:3;7886:67;7950:2;7945:3;7886:67;:::i;:::-;7879:74;;7962:93;8051:3;7962:93;:::i;:::-;8080:2;8075:3;8071:12;8064:19;;7869:220;;;:::o;8095:366::-;8237:3;8258:67;8322:2;8317:3;8258:67;:::i;:::-;8251:74;;8334:93;8423:3;8334:93;:::i;:::-;8452:2;8447:3;8443:12;8436:19;;8241:220;;;:::o;8467:366::-;8609:3;8630:67;8694:2;8689:3;8630:67;:::i;:::-;8623:74;;8706:93;8795:3;8706:93;:::i;:::-;8824:2;8819:3;8815:12;8808:19;;8613:220;;;:::o;8839:366::-;8981:3;9002:67;9066:2;9061:3;9002:67;:::i;:::-;8995:74;;9078:93;9167:3;9078:93;:::i;:::-;9196:2;9191:3;9187:12;9180:19;;8985:220;;;:::o;9211:366::-;9353:3;9374:67;9438:2;9433:3;9374:67;:::i;:::-;9367:74;;9450:93;9539:3;9450:93;:::i;:::-;9568:2;9563:3;9559:12;9552:19;;9357:220;;;:::o;9583:366::-;9725:3;9746:67;9810:2;9805:3;9746:67;:::i;:::-;9739:74;;9822:93;9911:3;9822:93;:::i;:::-;9940:2;9935:3;9931:12;9924:19;;9729:220;;;:::o;9955:366::-;10097:3;10118:67;10182:2;10177:3;10118:67;:::i;:::-;10111:74;;10194:93;10283:3;10194:93;:::i;:::-;10312:2;10307:3;10303:12;10296:19;;10101:220;;;:::o;10327:366::-;10469:3;10490:67;10554:2;10549:3;10490:67;:::i;:::-;10483:74;;10566:93;10655:3;10566:93;:::i;:::-;10684:2;10679:3;10675:12;10668:19;;10473:220;;;:::o;10699:366::-;10841:3;10862:67;10926:2;10921:3;10862:67;:::i;:::-;10855:74;;10938:93;11027:3;10938:93;:::i;:::-;11056:2;11051:3;11047:12;11040:19;;10845:220;;;:::o;11071:366::-;11213:3;11234:67;11298:2;11293:3;11234:67;:::i;:::-;11227:74;;11310:93;11399:3;11310:93;:::i;:::-;11428:2;11423:3;11419:12;11412:19;;11217:220;;;:::o;11443:366::-;11585:3;11606:67;11670:2;11665:3;11606:67;:::i;:::-;11599:74;;11682:93;11771:3;11682:93;:::i;:::-;11800:2;11795:3;11791:12;11784:19;;11589:220;;;:::o;11815:366::-;11957:3;11978:67;12042:2;12037:3;11978:67;:::i;:::-;11971:74;;12054:93;12143:3;12054:93;:::i;:::-;12172:2;12167:3;12163:12;12156:19;;11961:220;;;:::o;12187:118::-;12274:24;12292:5;12274:24;:::i;:::-;12269:3;12262:37;12252:53;;:::o;12311:112::-;12394:22;12410:5;12394:22;:::i;:::-;12389:3;12382:35;12372:51;;:::o;12429:222::-;12522:4;12560:2;12549:9;12545:18;12537:26;;12573:71;12641:1;12630:9;12626:17;12617:6;12573:71;:::i;:::-;12527:124;;;;:::o;12657:807::-;12906:4;12944:3;12933:9;12929:19;12921:27;;12958:71;13026:1;13015:9;13011:17;13002:6;12958:71;:::i;:::-;13039:72;13107:2;13096:9;13092:18;13083:6;13039:72;:::i;:::-;13121:80;13197:2;13186:9;13182:18;13173:6;13121:80;:::i;:::-;13211;13287:2;13276:9;13272:18;13263:6;13211:80;:::i;:::-;13301:73;13369:3;13358:9;13354:19;13345:6;13301:73;:::i;:::-;13384;13452:3;13441:9;13437:19;13428:6;13384:73;:::i;:::-;12911:553;;;;;;;;;:::o;13470:210::-;13557:4;13595:2;13584:9;13580:18;13572:26;;13608:65;13670:1;13659:9;13655:17;13646:6;13608:65;:::i;:::-;13562:118;;;;:::o;13686:276::-;13806:4;13844:2;13833:9;13829:18;13821:26;;13857:98;13952:1;13941:9;13937:17;13928:6;13857:98;:::i;:::-;13811:151;;;;:::o;13968:313::-;14081:4;14119:2;14108:9;14104:18;14096:26;;14168:9;14162:4;14158:20;14154:1;14143:9;14139:17;14132:47;14196:78;14269:4;14260:6;14196:78;:::i;:::-;14188:86;;14086:195;;;;:::o;14287:419::-;14453:4;14491:2;14480:9;14476:18;14468:26;;14540:9;14534:4;14530:20;14526:1;14515:9;14511:17;14504:47;14568:131;14694:4;14568:131;:::i;:::-;14560:139;;14458:248;;;:::o;14712:419::-;14878:4;14916:2;14905:9;14901:18;14893:26;;14965:9;14959:4;14955:20;14951:1;14940:9;14936:17;14929:47;14993:131;15119:4;14993:131;:::i;:::-;14985:139;;14883:248;;;:::o;15137:419::-;15303:4;15341:2;15330:9;15326:18;15318:26;;15390:9;15384:4;15380:20;15376:1;15365:9;15361:17;15354:47;15418:131;15544:4;15418:131;:::i;:::-;15410:139;;15308:248;;;:::o;15562:419::-;15728:4;15766:2;15755:9;15751:18;15743:26;;15815:9;15809:4;15805:20;15801:1;15790:9;15786:17;15779:47;15843:131;15969:4;15843:131;:::i;:::-;15835:139;;15733:248;;;:::o;15987:419::-;16153:4;16191:2;16180:9;16176:18;16168:26;;16240:9;16234:4;16230:20;16226:1;16215:9;16211:17;16204:47;16268:131;16394:4;16268:131;:::i;:::-;16260:139;;16158:248;;;:::o;16412:419::-;16578:4;16616:2;16605:9;16601:18;16593:26;;16665:9;16659:4;16655:20;16651:1;16640:9;16636:17;16629:47;16693:131;16819:4;16693:131;:::i;:::-;16685:139;;16583:248;;;:::o;16837:419::-;17003:4;17041:2;17030:9;17026:18;17018:26;;17090:9;17084:4;17080:20;17076:1;17065:9;17061:17;17054:47;17118:131;17244:4;17118:131;:::i;:::-;17110:139;;17008:248;;;:::o;17262:419::-;17428:4;17466:2;17455:9;17451:18;17443:26;;17515:9;17509:4;17505:20;17501:1;17490:9;17486:17;17479:47;17543:131;17669:4;17543:131;:::i;:::-;17535:139;;17433:248;;;:::o;17687:419::-;17853:4;17891:2;17880:9;17876:18;17868:26;;17940:9;17934:4;17930:20;17926:1;17915:9;17911:17;17904:47;17968:131;18094:4;17968:131;:::i;:::-;17960:139;;17858:248;;;:::o;18112:419::-;18278:4;18316:2;18305:9;18301:18;18293:26;;18365:9;18359:4;18355:20;18351:1;18340:9;18336:17;18329:47;18393:131;18519:4;18393:131;:::i;:::-;18385:139;;18283:248;;;:::o;18537:419::-;18703:4;18741:2;18730:9;18726:18;18718:26;;18790:9;18784:4;18780:20;18776:1;18765:9;18761:17;18754:47;18818:131;18944:4;18818:131;:::i;:::-;18810:139;;18708:248;;;:::o;18962:419::-;19128:4;19166:2;19155:9;19151:18;19143:26;;19215:9;19209:4;19205:20;19201:1;19190:9;19186:17;19179:47;19243:131;19369:4;19243:131;:::i;:::-;19235:139;;19133:248;;;:::o;19387:419::-;19553:4;19591:2;19580:9;19576:18;19568:26;;19640:9;19634:4;19630:20;19626:1;19615:9;19611:17;19604:47;19668:131;19794:4;19668:131;:::i;:::-;19660:139;;19558:248;;;:::o;19812:419::-;19978:4;20016:2;20005:9;20001:18;19993:26;;20065:9;20059:4;20055:20;20051:1;20040:9;20036:17;20029:47;20093:131;20219:4;20093:131;:::i;:::-;20085:139;;19983:248;;;:::o;20237:419::-;20403:4;20441:2;20430:9;20426:18;20418:26;;20490:9;20484:4;20480:20;20476:1;20465:9;20461:17;20454:47;20518:131;20644:4;20518:131;:::i;:::-;20510:139;;20408:248;;;:::o;20662:419::-;20828:4;20866:2;20855:9;20851:18;20843:26;;20915:9;20909:4;20905:20;20901:1;20890:9;20886:17;20879:47;20943:131;21069:4;20943:131;:::i;:::-;20935:139;;20833:248;;;:::o;21087:222::-;21180:4;21218:2;21207:9;21203:18;21195:26;;21231:71;21299:1;21288:9;21284:17;21275:6;21231:71;:::i;:::-;21185:124;;;;:::o;21315:831::-;21578:4;21616:3;21605:9;21601:19;21593:27;;21630:71;21698:1;21687:9;21683:17;21674:6;21630:71;:::i;:::-;21711:80;21787:2;21776:9;21772:18;21763:6;21711:80;:::i;:::-;21838:9;21832:4;21828:20;21823:2;21812:9;21808:18;21801:48;21866:108;21969:4;21960:6;21866:108;:::i;:::-;21858:116;;21984:72;22052:2;22041:9;22037:18;22028:6;21984:72;:::i;:::-;22066:73;22134:3;22123:9;22119:19;22110:6;22066:73;:::i;:::-;21583:563;;;;;;;;:::o;22152:442::-;22301:4;22339:2;22328:9;22324:18;22316:26;;22352:71;22420:1;22409:9;22405:17;22396:6;22352:71;:::i;:::-;22433:72;22501:2;22490:9;22486:18;22477:6;22433:72;:::i;:::-;22515;22583:2;22572:9;22568:18;22559:6;22515:72;:::i;:::-;22306:288;;;;;;:::o;22600:214::-;22689:4;22727:2;22716:9;22712:18;22704:26;;22740:67;22804:1;22793:9;22789:17;22780:6;22740:67;:::i;:::-;22694:120;;;;:::o;22820:132::-;22887:4;22910:3;22902:11;;22940:4;22935:3;22931:14;22923:22;;22892:60;;;:::o;22958:114::-;23025:6;23059:5;23053:12;23043:22;;23032:40;;;:::o;23078:99::-;23130:6;23164:5;23158:12;23148:22;;23137:40;;;:::o;23183:113::-;23253:4;23285;23280:3;23276:14;23268:22;;23258:38;;;:::o;23302:184::-;23401:11;23435:6;23430:3;23423:19;23475:4;23470:3;23466:14;23451:29;;23413:73;;;;:::o;23492:169::-;23576:11;23610:6;23605:3;23598:19;23650:4;23645:3;23641:14;23626:29;;23588:73;;;;:::o;23667:305::-;23707:3;23726:20;23744:1;23726:20;:::i;:::-;23721:25;;23760:20;23778:1;23760:20;:::i;:::-;23755:25;;23914:1;23846:66;23842:74;23839:1;23836:81;23833:2;;;23920:18;;:::i;:::-;23833:2;23964:1;23961;23957:9;23950:16;;23711:261;;;;:::o;23978:185::-;24018:1;24035:20;24053:1;24035:20;:::i;:::-;24030:25;;24069:20;24087:1;24069:20;:::i;:::-;24064:25;;24108:1;24098:2;;24113:18;;:::i;:::-;24098:2;24155:1;24152;24148:9;24143:14;;24020:143;;;;:::o;24169:348::-;24209:7;24232:20;24250:1;24232:20;:::i;:::-;24227:25;;24266:20;24284:1;24266:20;:::i;:::-;24261:25;;24454:1;24386:66;24382:74;24379:1;24376:81;24371:1;24364:9;24357:17;24353:105;24350:2;;;24461:18;;:::i;:::-;24350:2;24509:1;24506;24502:9;24491:20;;24217:300;;;;:::o;24523:191::-;24563:4;24583:20;24601:1;24583:20;:::i;:::-;24578:25;;24617:20;24635:1;24617:20;:::i;:::-;24612:25;;24656:1;24653;24650:8;24647:2;;;24661:18;;:::i;:::-;24647:2;24706:1;24703;24699:9;24691:17;;24568:146;;;;:::o;24720:96::-;24757:7;24786:24;24804:5;24786:24;:::i;:::-;24775:35;;24765:51;;;:::o;24822:90::-;24856:7;24899:5;24892:13;24885:21;24874:32;;24864:48;;;:::o;24918:126::-;24955:7;24995:42;24988:5;24984:54;24973:65;;24963:81;;;:::o;25050:77::-;25087:7;25116:5;25105:16;;25095:32;;;:::o;25133:86::-;25168:7;25208:4;25201:5;25197:16;25186:27;;25176:43;;;:::o;25225:180::-;25302:9;25335:64;25393:5;25335:64;:::i;:::-;25322:77;;25312:93;;;:::o;25411:140::-;25488:9;25521:24;25539:5;25521:24;:::i;:::-;25508:37;;25498:53;;;:::o;25557:121::-;25615:9;25648:24;25666:5;25648:24;:::i;:::-;25635:37;;25625:53;;;:::o;25684:307::-;25752:1;25762:113;25776:6;25773:1;25770:13;25762:113;;;25861:1;25856:3;25852:11;25846:18;25842:1;25837:3;25833:11;25826:39;25798:2;25795:1;25791:10;25786:15;;25762:113;;;25893:6;25890:1;25887:13;25884:2;;;25973:1;25964:6;25959:3;25955:16;25948:27;25884:2;25733:258;;;;:::o;25997:320::-;26041:6;26078:1;26072:4;26068:12;26058:22;;26125:1;26119:4;26115:12;26146:18;26136:2;;26202:4;26194:6;26190:17;26180:27;;26136:2;26264;26256:6;26253:14;26233:18;26230:38;26227:2;;;26283:18;;:::i;:::-;26227:2;26048:269;;;;:::o;26323:233::-;26362:3;26385:24;26403:5;26385:24;:::i;:::-;26376:33;;26431:66;26424:5;26421:77;26418:2;;;26501:18;;:::i;:::-;26418:2;26548:1;26541:5;26537:13;26530:20;;26366:190;;;:::o;26562:180::-;26610:77;26607:1;26600:88;26707:4;26704:1;26697:15;26731:4;26728:1;26721:15;26748:180;26796:77;26793:1;26786:88;26893:4;26890:1;26883:15;26917:4;26914:1;26907:15;26934:180;26982:77;26979:1;26972:88;27079:4;27076:1;27069:15;27103:4;27100:1;27093:15;27120:102;27161:6;27212:2;27208:7;27203:2;27196:5;27192:14;27188:28;27178:38;;27168:54;;;:::o;27228:222::-;27368:34;27364:1;27356:6;27352:14;27345:58;27437:5;27432:2;27424:6;27420:15;27413:30;27334:116;:::o;27456:229::-;27596:34;27592:1;27584:6;27580:14;27573:58;27665:12;27660:2;27652:6;27648:15;27641:37;27562:123;:::o;27691:225::-;27831:34;27827:1;27819:6;27815:14;27808:58;27900:8;27895:2;27887:6;27883:15;27876:33;27797:119;:::o;27922:221::-;28062:34;28058:1;28050:6;28046:14;28039:58;28131:4;28126:2;28118:6;28114:15;28107:29;28028:115;:::o;28149:177::-;28289:29;28285:1;28277:6;28273:14;28266:53;28255:71;:::o;28332:177::-;28472:29;28468:1;28460:6;28456:14;28449:53;28438:71;:::o;28515:181::-;28655:33;28651:1;28643:6;28639:14;28632:57;28621:75;:::o;28702:227::-;28842:34;28838:1;28830:6;28826:14;28819:58;28911:10;28906:2;28898:6;28894:15;28887:35;28808:121;:::o;28935:220::-;29075:34;29071:1;29063:6;29059:14;29052:58;29144:3;29139:2;29131:6;29127:15;29120:28;29041:114;:::o;29161:182::-;29301:34;29297:1;29289:6;29285:14;29278:58;29267:76;:::o;29349:228::-;29489:34;29485:1;29477:6;29473:14;29466:58;29558:11;29553:2;29545:6;29541:15;29534:36;29455:122;:::o;29583:224::-;29723:34;29719:1;29711:6;29707:14;29700:58;29792:7;29787:2;29779:6;29775:15;29768:32;29689:118;:::o;29813:223::-;29953:34;29949:1;29941:6;29937:14;29930:58;30022:6;30017:2;30009:6;30005:15;29998:31;29919:117;:::o;30042:181::-;30182:33;30178:1;30170:6;30166:14;30159:57;30148:75;:::o;30229:231::-;30369:34;30365:1;30357:6;30353:14;30346:58;30438:14;30433:2;30425:6;30421:15;30414:39;30335:125;:::o;30466:222::-;30606:34;30602:1;30594:6;30590:14;30583:58;30675:5;30670:2;30662:6;30658:15;30651:30;30572:116;:::o;30694:122::-;30767:24;30785:5;30767:24;:::i;:::-;30760:5;30757:35;30747:2;;30806:1;30803;30796:12;30747:2;30737:79;:::o;30822:116::-;30892:21;30907:5;30892:21;:::i;:::-;30885:5;30882:32;30872:2;;30928:1;30925;30918:12;30872:2;30862:76;:::o;30944:122::-;31017:24;31035:5;31017:24;:::i;:::-;31010:5;31007:35;30997:2;;31056:1;31053;31046:12;30997:2;30987:79;:::o

Swarm Source

ipfs://4a2f45c02a3d93571f574b1de7ab422aec3813c64591bd0edb472ed35142b225
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading