ETH Price: $2,466.71 (-20.31%)
 

Overview

Max Total Supply

1,000,000,000,000,000 SPOOKY

Holders

19

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
59,747,135,249,871.478447516 SPOOKY

Value
$0.00
0x7018ff230741459c0977dee66fbc67c785f7da69
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
SpookyCoin

Compiler Version
v0.8.3+commit.8d00100c

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: Unlicensed
// Telegram: https://t.me/SpookyCoin
/**
 
   # SpookyCoin tokenomics
   
   4% fee auto add to the liquidity pool 
   5% fee auto moved to dev wallet
   
*/

pragma solidity ^0.8.3;

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 tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

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

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

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    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");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        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);
            }
        }
    }
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

    function owner() public view virtual returns (address) {
        return _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;
    }
}

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;
}

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;
}

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);
}

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 SpookyCoin 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;
    
    //create a mapping to keep track of who is blacklist
mapping (address => bool) public _isBlacklisted;
    
    address[] private _excluded;

    address public _devWalletAddress = 0xA2518201F4089FC058d8233aa3a9C485e21Da37e;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000 * 10**12 * 10**9; 
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "SpookyCoin";
    string private _symbol = "SPOOKY";
    uint8 private _decimals = 9;
    
    uint256 public _devFee = 5;
    uint256 private _previousDevFee = _devFee;
    
    uint256 public _liquidityFee = 4;
    uint256 private _previousLiquidityFee = _liquidityFee;
    
      uint256 private _holderFee = 0;
    uint256 private _previousHolderFee = _holderFee;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    
    uint256 public _maxTxAmount = 40 * 10**12 * 10**9;
    
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
 
    
    constructor () {
        _rOwned[owner()] = _rTotal;
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
         // 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), owner(), _tTotal);
    }


    uint256 private numTokensSellToAddToLiquidity = 1 * 10**9;
    
    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 included");
        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, uint256 tDev) = _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);
        _takeDev(tDev);
        _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 setHolderFeePercent(uint256 holderFee) external onlyOwner() {
        _holderFee = holderFee;
    }


    function setdevWallet(address wWallet) external onlyOwner() {
        _devWalletAddress = wWallet;
    }

    function setDevFeePercent(uint256 devFee) external onlyOwner() {
        _devFee = devFee;
    }
    
    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        _liquidityFee = liquidityFee;
    }
   
    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**2
        );
    }

  function setNumtokentoLiq(uint256 numToken) private onlyOwner() {
        numTokensSellToAddToLiquidity = _tTotal.mul(numToken).div(
            10**2
        );
    }

    function setSwapAndLiquifyEnabled(bool _enabled) private 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);
    }

//Remove from Blacklist 
    function removeFromBlackList(address account) external onlyOwner {
        _isBlacklisted[account] = false;
    }
 

//adding multiple addresses to the blacklist - Used to block known bots and scammers
    function addToBlackList(address[] calldata addresses) external onlyOwner {
      for (uint256 i; i < addresses.length; ++i) {
        _isBlacklisted[addresses[i]] = true;
      }
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tDev) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tDev, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity, tDev);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) {
        uint256 tFee = calculateHolderFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tDev = calculateDevFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub(tDev);
        return (tTransferAmount, tFee, tLiquidity, tDev);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tDev, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rDev = tDev.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(rDev);
        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 _takeDev(uint256 tDev) private {
        uint256 currentRate =  _getRate();
        uint256 rDev = tDev.mul(currentRate);
        _rOwned[_devWalletAddress] = _rOwned[_devWalletAddress].add(rDev);
        if(_isExcluded[_devWalletAddress])
            _tOwned[_devWalletAddress] = _tOwned[_devWalletAddress].add(tDev);
    }
    
    function calculateHolderFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_holderFee).div(
            10**2
        );
    }

    function calculateDevFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_devFee).div(
            10**2
        );
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }
    
    function removeAllFee() private {
        if(_holderFee == 0 && _liquidityFee == 0) return;
        
        _previousHolderFee = _holderFee;
        _previousDevFee = _devFee;
        _previousLiquidityFee = _liquidityFee;
        
        _holderFee = 0;
        _devFee = 0;
        _liquidityFee = 0;
    }
    
    function restoreAllFee() private {
        _holderFee = _previousHolderFee;
        _devFee = _previousDevFee;
        _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(!_isBlacklisted[from] && !_isBlacklisted[to], "This address is blacklisted");
        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.");

        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);

        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, uint256 tDev) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _takeDev(tDev);
        _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, uint256 tDev) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(tLiquidity);
        _takeDev(tDev);
        _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, uint256 tDev) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _takeDev(tDev);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"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":"_devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"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":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToBlackList","outputs":[],"stateMutability":"nonpayable","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":[{"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":[],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"devFee","type":"uint256"}],"name":"setDevFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"holderFee","type":"uint256"}],"name":"setHolderFeePercent","outputs":[],"stateMutability":"nonpayable","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":"address","name":"wWallet","type":"address"}],"name":"setdevWallet","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"},{"stateMutability":"payable","type":"receive"}]

60c060405273a2518201f4089fc058d8233aa3a9c485e21da37e600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555069d3c21bcecceda100000060095560095460001962000079919062000844565b60001962000088919062000795565b600a556040518060400160405280600a81526020017f53706f6f6b79436f696e00000000000000000000000000000000000000000000815250600c9080519060200190620000d892919062000636565b506040518060400160405280600681526020017f53504f4f4b590000000000000000000000000000000000000000000000000000815250600d90805190602001906200012692919062000636565b506009600e60006101000a81548160ff021916908360ff1602179055506005600f55600f54601055600460115560115460125560006013556013546014556001601560016101000a81548160ff021916908315150217905550690878678326eac9000000601655633b9aca00601755348015620001a257600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600a5460016000620002756200060d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200031357600080fd5b505afa15801562000328573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034e9190620006fd565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003b157600080fd5b505afa158015620003c6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ec9190620006fd565b6040518363ffffffff1660e01b81526004016200040b9291906200074b565b602060405180830381600087803b1580156200042657600080fd5b505af11580156200043b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004619190620006fd565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600160046000620004e46200060d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200059d6200060d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600954604051620005fe919062000778565b60405180910390a35062000923565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b82805462000644906200080e565b90600052602060002090601f016020900481019282620006685760008555620006b4565b82601f106200068357805160ff1916838001178555620006b4565b82800160010185558215620006b4579182015b82811115620006b357825182559160200191906001019062000696565b5b509050620006c39190620006c7565b5090565b5b80821115620006e2576000816000905550600101620006c8565b5090565b600081519050620006f78162000909565b92915050565b6000602082840312156200071057600080fd5b60006200072084828501620006e6565b91505092915050565b6200073481620007d0565b82525050565b620007458162000804565b82525050565b600060408201905062000762600083018562000729565b62000771602083018462000729565b9392505050565b60006020820190506200078f60008301846200073a565b92915050565b6000620007a28262000804565b9150620007af8362000804565b925082821015620007c557620007c46200087c565b5b828203905092915050565b6000620007dd82620007e4565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060028204905060018216806200082757607f821691505b602082108114156200083e576200083d620008da565b5b50919050565b6000620008518262000804565b91506200085e8362000804565b925082620008715762000870620008ab565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6200091481620007d0565b81146200092057600080fd5b50565b60805160601c60a05160601c6155f962000979600039600081816113bf01526127bd015260008181610a330152818161338d015281816134a3015281816134ca01528181613566015261358d01526155f96000f3fe6080604052600436106102345760003560e01c80635342acb41161012e578063a457c2d7116100ab578063d543dbeb1161006f578063d543dbeb14610896578063dd62ed3e146108bf578063ea2f0b37146108fc578063f2fde38b14610925578063ff8975701461094e5761023b565b8063a457c2d71461079d578063a9059cbb146107da578063aa45026b14610817578063b425bac314610842578063be3b9f2d1461086d5761023b565b806388f82020116100f257806388f82020146106b85780638da5cb5b146106f55780638ee88c531461072057806395d89b411461074957806395f4d088146107745761023b565b80635342acb4146105d15780636bc87c3a1461060e57806370a0823114610639578063715018a6146106765780637d1db4a51461068d5761023b565b80633685d419116101bc5780634549b039116101805780634549b039146104ec57806349bd5a5e146105295780634a49ac4c146105545780634a74bb021461057d57806352390c02146105a85761023b565b80633685d4191461040b578063379e291914610434578063395093511461045d5780633bd5d1731461049a578063437823ec146104c35761023b565b806318160ddd1161020357806318160ddd146102fe5780631cdd3be31461032957806323b872dd146103665780632d838119146103a3578063313ce567146103e05761023b565b806306fdde0314610240578063095ea7b31461026b57806313114a9d146102a85780631694505e146102d35761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b50610255610977565b6040516102629190614bb3565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d91906146ca565b610a09565b60405161029f9190614b7d565b60405180910390f35b3480156102b457600080fd5b506102bd610a27565b6040516102ca9190614d95565b60405180910390f35b3480156102df57600080fd5b506102e8610a31565b6040516102f59190614b98565b60405180910390f35b34801561030a57600080fd5b50610313610a55565b6040516103209190614d95565b60405180910390f35b34801561033557600080fd5b50610350600480360381019061034b91906145ed565b610a5f565b60405161035d9190614b7d565b60405180910390f35b34801561037257600080fd5b5061038d6004803603810190610388919061467b565b610a7f565b60405161039a9190614b7d565b60405180910390f35b3480156103af57600080fd5b506103ca60048036038101906103c5919061474b565b610b58565b6040516103d79190614d95565b60405180910390f35b3480156103ec57600080fd5b506103f5610bc6565b6040516104029190614e41565b60405180910390f35b34801561041757600080fd5b50610432600480360381019061042d91906145ed565b610bdd565b005b34801561044057600080fd5b5061045b6004803603810190610456919061474b565b610fab565b005b34801561046957600080fd5b50610484600480360381019061047f91906146ca565b611031565b6040516104919190614b7d565b60405180910390f35b3480156104a657600080fd5b506104c160048036038101906104bc919061474b565b6110e4565b005b3480156104cf57600080fd5b506104ea60048036038101906104e591906145ed565b611260565b005b3480156104f857600080fd5b50610513600480360381019061050e9190614774565b611337565b6040516105209190614d95565b60405180910390f35b34801561053557600080fd5b5061053e6113bd565b60405161054b9190614b01565b60405180910390f35b34801561056057600080fd5b5061057b600480360381019061057691906145ed565b6113e1565b005b34801561058957600080fd5b506105926114b8565b60405161059f9190614b7d565b60405180910390f35b3480156105b457600080fd5b506105cf60048036038101906105ca91906145ed565b6114cb565b005b3480156105dd57600080fd5b506105f860048036038101906105f391906145ed565b611766565b6040516106059190614b7d565b60405180910390f35b34801561061a57600080fd5b506106236117bc565b6040516106309190614d95565b60405180910390f35b34801561064557600080fd5b50610660600480360381019061065b91906145ed565b6117c2565b60405161066d9190614d95565b60405180910390f35b34801561068257600080fd5b5061068b6118ad565b005b34801561069957600080fd5b506106a26119e7565b6040516106af9190614d95565b60405180910390f35b3480156106c457600080fd5b506106df60048036038101906106da91906145ed565b6119ed565b6040516106ec9190614b7d565b60405180910390f35b34801561070157600080fd5b5061070a611a43565b6040516107179190614b01565b60405180910390f35b34801561072c57600080fd5b506107476004803603810190610742919061474b565b611a6c565b005b34801561075557600080fd5b5061075e611af2565b60405161076b9190614bb3565b60405180910390f35b34801561078057600080fd5b5061079b600480360381019061079691906145ed565b611b84565b005b3480156107a957600080fd5b506107c460048036038101906107bf91906146ca565b611c44565b6040516107d19190614b7d565b60405180910390f35b3480156107e657600080fd5b5061080160048036038101906107fc91906146ca565b611d11565b60405161080e9190614b7d565b60405180910390f35b34801561082357600080fd5b5061082c611d2f565b6040516108399190614d95565b60405180910390f35b34801561084e57600080fd5b50610857611d35565b6040516108649190614b01565b60405180910390f35b34801561087957600080fd5b50610894600480360381019061088f919061474b565b611d5b565b005b3480156108a257600080fd5b506108bd60048036038101906108b8919061474b565b611de1565b005b3480156108cb57600080fd5b506108e660048036038101906108e1919061463f565b611e8e565b6040516108f39190614d95565b60405180910390f35b34801561090857600080fd5b50610923600480360381019061091e91906145ed565b611f15565b005b34801561093157600080fd5b5061094c600480360381019061094791906145ed565b611fec565b005b34801561095a57600080fd5b5061097560048036038101906109709190614706565b612195565b005b6060600c805461098690615084565b80601f01602080910402602001604051908101604052809291908181526020018280546109b290615084565b80156109ff5780601f106109d4576101008083540402835291602001916109ff565b820191906000526020600020905b8154815290600101906020018083116109e257829003601f168201915b5050505050905090565b6000610a1d610a166122da565b84846122e2565b6001905092915050565b6000600b54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600954905090565b60066020528060005260406000206000915054906101000a900460ff1681565b6000610a8c8484846124ad565b610b4d84610a986122da565b610b488560405180606001604052806028815260200161557760289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610afe6122da565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128fd9092919063ffffffff16565b6122e2565b600190509392505050565b6000600a54821115610b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9690614bf5565b60405180910390fd5b6000610ba9612952565b9050610bbe818461297d90919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b610be56122da565b73ffffffffffffffffffffffffffffffffffffffff16610c03611a43565b73ffffffffffffffffffffffffffffffffffffffff1614610c59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5090614cf5565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdc90614c95565b60405180910390fd5b60005b600780549050811015610fa7578173ffffffffffffffffffffffffffffffffffffffff1660078281548110610d46577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610f945760076001600780549050610da19190614f92565b81548110610dd8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660078281548110610e3d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007805480610f5a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610fa7565b8080610f9f906150b6565b915050610ce8565b5050565b610fb36122da565b73ffffffffffffffffffffffffffffffffffffffff16610fd1611a43565b73ffffffffffffffffffffffffffffffffffffffff1614611027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101e90614cf5565b60405180910390fd5b80600f8190555050565b60006110da61103e6122da565b846110d5856003600061104f6122da565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299390919063ffffffff16565b6122e2565b6001905092915050565b60006110ee6122da565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561117d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117490614d75565b60405180910390fd5b6000611188836129a9565b50505050505090506111e281600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1190919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061123a81600a54612a1190919063ffffffff16565b600a8190555061125583600b5461299390919063ffffffff16565b600b81905550505050565b6112686122da565b73ffffffffffffffffffffffffffffffffffffffff16611286611a43565b73ffffffffffffffffffffffffffffffffffffffff16146112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614cf5565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060095483111561137e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137590614cb5565b60405180910390fd5b8161139f57600061138e846129a9565b5050505050509050809150506113b7565b60006113aa846129a9565b5050505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6113e96122da565b73ffffffffffffffffffffffffffffffffffffffff16611407611a43565b73ffffffffffffffffffffffffffffffffffffffff161461145d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145490614cf5565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601560019054906101000a900460ff1681565b6114d36122da565b73ffffffffffffffffffffffffffffffffffffffff166114f1611a43565b73ffffffffffffffffffffffffffffffffffffffff1614611547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153e90614cf5565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cb90614c55565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156116a857611664600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b58565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60115481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561185d57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506118a8565b6118a5600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b58565b90505b919050565b6118b56122da565b73ffffffffffffffffffffffffffffffffffffffff166118d3611a43565b73ffffffffffffffffffffffffffffffffffffffff1614611929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192090614cf5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60165481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a746122da565b73ffffffffffffffffffffffffffffffffffffffff16611a92611a43565b73ffffffffffffffffffffffffffffffffffffffff1614611ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adf90614cf5565b60405180910390fd5b8060118190555050565b6060600d8054611b0190615084565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2d90615084565b8015611b7a5780601f10611b4f57610100808354040283529160200191611b7a565b820191906000526020600020905b815481529060010190602001808311611b5d57829003601f168201915b5050505050905090565b611b8c6122da565b73ffffffffffffffffffffffffffffffffffffffff16611baa611a43565b73ffffffffffffffffffffffffffffffffffffffff1614611c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf790614cf5565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611d07611c516122da565b84611d028560405180606001604052806025815260200161559f6025913960036000611c7b6122da565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128fd9092919063ffffffff16565b6122e2565b6001905092915050565b6000611d25611d1e6122da565b84846124ad565b6001905092915050565b600f5481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611d636122da565b73ffffffffffffffffffffffffffffffffffffffff16611d81611a43565b73ffffffffffffffffffffffffffffffffffffffff1614611dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dce90614cf5565b60405180910390fd5b8060138190555050565b611de96122da565b73ffffffffffffffffffffffffffffffffffffffff16611e07611a43565b73ffffffffffffffffffffffffffffffffffffffff1614611e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5490614cf5565b60405180910390fd5b611e856064611e7783600954612a2790919063ffffffff16565b61297d90919063ffffffff16565b60168190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611f1d6122da565b73ffffffffffffffffffffffffffffffffffffffff16611f3b611a43565b73ffffffffffffffffffffffffffffffffffffffff1614611f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8890614cf5565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611ff46122da565b73ffffffffffffffffffffffffffffffffffffffff16612012611a43565b73ffffffffffffffffffffffffffffffffffffffff1614612068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205f90614cf5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cf90614c15565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61219d6122da565b73ffffffffffffffffffffffffffffffffffffffff166121bb611a43565b73ffffffffffffffffffffffffffffffffffffffff1614612211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220890614cf5565b60405180910390fd5b60005b828290508110156122d55760016006600085858581811061225e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201602081019061227391906145ed565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806122ce906150b6565b9050612214565b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612352576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234990614d55565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b990614c35565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124a09190614d95565b60405180910390a3505050565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125515750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258790614c75565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f790614d35565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266790614bd5565b60405180910390fd5b600081116126b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126aa90614d15565b60405180910390fd5b6126bb611a43565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561272957506126f9611a43565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561277457601654811115612773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276a90614cd5565b60405180910390fd5b5b600061277f306117c2565b905060165481106127905760165490505b600060175482101590508080156127b45750601560009054906101000a900460ff16155b801561280c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156128245750601560019054906101000a900460ff165b1561283857601754915061283782612a3d565b5b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128df5750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156128e957600090505b6128f586868684612b13565b505050505050565b6000838311158290612945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293c9190614bb3565b60405180910390fd5b5082840390509392505050565b600080600061295f612e24565b91509150612976818361297d90919063ffffffff16565b9250505090565b6000818361298b9190614f07565b905092915050565b600081836129a19190614eb1565b905092915050565b60008060008060008060008060008060006129c38c61316f565b935093509350935060008060006129e48f8787876129df612952565b6131ee565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b60008183612a1f9190614f92565b905092915050565b60008183612a359190614f38565b905092915050565b6001601560006101000a81548160ff0219169083151502179055506000612a6e60028361297d90919063ffffffff16565b90506000612a858284612a1190919063ffffffff16565b90506000479050612a95836132a2565b6000612aaa8247612a1190919063ffffffff16565b9050612ab68382613560565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051612ae993929190614e0a565b60405180910390a1505050506000601560006101000a81548160ff02191690831515021790555050565b80612b2157612b20613650565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bc45750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bd957612bd48484846136a4565b612e10565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c7c5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c9157612c8c848484613912565b612e0f565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d355750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d4a57612d45848484613b80565b612e0e565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612dec5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e0157612dfc848484613d59565b612e0d565b612e0c848484613b80565b5b5b5b5b80612e1e57612e1d61405c565b5b50505050565b6000806000600a5490506000600954905060005b60078054905081101561313257826001600060078481548110612e84577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612f985750816002600060078481548110612f30577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612faf57600a546009549450945050505061316b565b6130656001600060078481548110612ff0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612a1190919063ffffffff16565b925061311d60026000600784815481106130a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612a1190919063ffffffff16565b9150808061312a906150b6565b915050612e38565b5061314a600954600a5461297d90919063ffffffff16565b82101561316257600a5460095493509350505061316b565b81819350935050505b9091565b600080600080600061318086614079565b9050600061318d876140aa565b9050600061319a886140db565b905060006131d5826131c7856131b9888e612a1190919063ffffffff16565b612a1190919063ffffffff16565b612a1190919063ffffffff16565b9050808484849750975097509750505050509193509193565b600080600080613207858a612a2790919063ffffffff16565b9050600061321e868a612a2790919063ffffffff16565b90506000613235878a612a2790919063ffffffff16565b9050600061324c888a612a2790919063ffffffff16565b90506000613287826132798561326b888a612a1190919063ffffffff16565b612a1190919063ffffffff16565b612a1190919063ffffffff16565b90508481859750975097505050505050955095509592505050565b6000600267ffffffffffffffff8111156132e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156133135781602001602082028036833780820191505090505b5090503081600081518110613351577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156133f157600080fd5b505afa158015613405573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134299190614616565b81600181518110613463577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506134c8307f0000000000000000000000000000000000000000000000000000000000000000846122e2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161352a959493929190614db0565b600060405180830381600087803b15801561354457600080fd5b505af1158015613558573d6000803e3d6000fd5b505050505050565b61358b307f0000000000000000000000000000000000000000000000000000000000000000846122e2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806135d5611a43565b426040518863ffffffff1660e01b81526004016135f796959493929190614b1c565b6060604051808303818588803b15801561361057600080fd5b505af1158015613624573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061364991906147b0565b5050505050565b600060135414801561366457506000601154145b1561366e576136a2565b601354601481905550600f5460108190555060115460128190555060006013819055506000600f8190555060006011819055505b565b60008060008060008060006136b8886129a9565b965096509650965096509650965061371888600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1190919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137ad87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1190919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061384286600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299390919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061388e8261410c565b613897816142b1565b6138a18584614500565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516138fe9190614d95565b60405180910390a350505050505050505050565b6000806000806000806000613926886129a9565b965096509650965096509650965061398687600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1190919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a1b84600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299390919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ab086600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299390919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613afc8261410c565b613b05816142b1565b613b0f8584614500565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613b6c9190614d95565b60405180910390a350505050505050505050565b6000806000806000806000613b94886129a9565b9650965096509650965096509650613bf487600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1190919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c8986600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299390919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cd58261410c565b613cde816142b1565b613ce88584614500565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613d459190614d95565b60405180910390a350505050505050505050565b6000806000806000806000613d6d886129a9565b9650965096509650965096509650613dcd88600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1190919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e6287600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1190919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ef784600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299390919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f8c86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299390919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fd88261410c565b613fe1816142b1565b613feb8584614500565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516140489190614d95565b60405180910390a350505050505050505050565b601454601381905550601054600f81905550601254601181905550565b60006140a3606461409560135485612a2790919063ffffffff16565b61297d90919063ffffffff16565b9050919050565b60006140d460646140c660115485612a2790919063ffffffff16565b61297d90919063ffffffff16565b9050919050565b600061410560646140f7600f5485612a2790919063ffffffff16565b61297d90919063ffffffff16565b9050919050565b6000614116612952565b9050600061412d8284612a2790919063ffffffff16565b905061418181600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299390919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156142ac5761426883600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299390919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b60006142bb612952565b905060006142d28284612a2790919063ffffffff16565b90506143488160016000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299390919063ffffffff16565b60016000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060056000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156144fb576144958360026000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299390919063ffffffff16565b60026000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61451582600a54612a1190919063ffffffff16565b600a8190555061453081600b5461299390919063ffffffff16565b600b819055505050565b60008135905061454981615531565b92915050565b60008151905061455e81615531565b92915050565b60008083601f84011261457657600080fd5b8235905067ffffffffffffffff81111561458f57600080fd5b6020830191508360208202830111156145a757600080fd5b9250929050565b6000813590506145bd81615548565b92915050565b6000813590506145d28161555f565b92915050565b6000815190506145e78161555f565b92915050565b6000602082840312156145ff57600080fd5b600061460d8482850161453a565b91505092915050565b60006020828403121561462857600080fd5b60006146368482850161454f565b91505092915050565b6000806040838503121561465257600080fd5b60006146608582860161453a565b92505060206146718582860161453a565b9150509250929050565b60008060006060848603121561469057600080fd5b600061469e8682870161453a565b93505060206146af8682870161453a565b92505060406146c0868287016145c3565b9150509250925092565b600080604083850312156146dd57600080fd5b60006146eb8582860161453a565b92505060206146fc858286016145c3565b9150509250929050565b6000806020838503121561471957600080fd5b600083013567ffffffffffffffff81111561473357600080fd5b61473f85828601614564565b92509250509250929050565b60006020828403121561475d57600080fd5b600061476b848285016145c3565b91505092915050565b6000806040838503121561478757600080fd5b6000614795858286016145c3565b92505060206147a6858286016145ae565b9150509250929050565b6000806000606084860312156147c557600080fd5b60006147d3868287016145d8565b93505060206147e4868287016145d8565b92505060406147f5868287016145d8565b9150509250925092565b600061480b8383614817565b60208301905092915050565b61482081614fc6565b82525050565b61482f81614fc6565b82525050565b600061484082614e6c565b61484a8185614e8f565b935061485583614e5c565b8060005b8381101561488657815161486d88826147ff565b975061487883614e82565b925050600181019050614859565b5085935050505092915050565b61489c81614fd8565b82525050565b6148ab8161501b565b82525050565b6148ba8161503f565b82525050565b60006148cb82614e77565b6148d58185614ea0565b93506148e5818560208601615051565b6148ee8161518c565b840191505092915050565b6000614906602383614ea0565b91506149118261519d565b604082019050919050565b6000614929602a83614ea0565b9150614934826151ec565b604082019050919050565b600061494c602683614ea0565b91506149578261523b565b604082019050919050565b600061496f602283614ea0565b915061497a8261528a565b604082019050919050565b6000614992601b83614ea0565b915061499d826152d9565b602082019050919050565b60006149b5601b83614ea0565b91506149c082615302565b602082019050919050565b60006149d8601b83614ea0565b91506149e38261532b565b602082019050919050565b60006149fb601f83614ea0565b9150614a0682615354565b602082019050919050565b6000614a1e602883614ea0565b9150614a298261537d565b604082019050919050565b6000614a41602083614ea0565b9150614a4c826153cc565b602082019050919050565b6000614a64602983614ea0565b9150614a6f826153f5565b604082019050919050565b6000614a87602583614ea0565b9150614a9282615444565b604082019050919050565b6000614aaa602483614ea0565b9150614ab582615493565b604082019050919050565b6000614acd602c83614ea0565b9150614ad8826154e2565b604082019050919050565b614aec81615004565b82525050565b614afb8161500e565b82525050565b6000602082019050614b166000830184614826565b92915050565b600060c082019050614b316000830189614826565b614b3e6020830188614ae3565b614b4b60408301876148b1565b614b5860608301866148b1565b614b656080830185614826565b614b7260a0830184614ae3565b979650505050505050565b6000602082019050614b926000830184614893565b92915050565b6000602082019050614bad60008301846148a2565b92915050565b60006020820190508181036000830152614bcd81846148c0565b905092915050565b60006020820190508181036000830152614bee816148f9565b9050919050565b60006020820190508181036000830152614c0e8161491c565b9050919050565b60006020820190508181036000830152614c2e8161493f565b9050919050565b60006020820190508181036000830152614c4e81614962565b9050919050565b60006020820190508181036000830152614c6e81614985565b9050919050565b60006020820190508181036000830152614c8e816149a8565b9050919050565b60006020820190508181036000830152614cae816149cb565b9050919050565b60006020820190508181036000830152614cce816149ee565b9050919050565b60006020820190508181036000830152614cee81614a11565b9050919050565b60006020820190508181036000830152614d0e81614a34565b9050919050565b60006020820190508181036000830152614d2e81614a57565b9050919050565b60006020820190508181036000830152614d4e81614a7a565b9050919050565b60006020820190508181036000830152614d6e81614a9d565b9050919050565b60006020820190508181036000830152614d8e81614ac0565b9050919050565b6000602082019050614daa6000830184614ae3565b92915050565b600060a082019050614dc56000830188614ae3565b614dd260208301876148b1565b8181036040830152614de48186614835565b9050614df36060830185614826565b614e006080830184614ae3565b9695505050505050565b6000606082019050614e1f6000830186614ae3565b614e2c6020830185614ae3565b614e396040830184614ae3565b949350505050565b6000602082019050614e566000830184614af2565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614ebc82615004565b9150614ec783615004565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614efc57614efb6150ff565b5b828201905092915050565b6000614f1282615004565b9150614f1d83615004565b925082614f2d57614f2c61512e565b5b828204905092915050565b6000614f4382615004565b9150614f4e83615004565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f8757614f866150ff565b5b828202905092915050565b6000614f9d82615004565b9150614fa883615004565b925082821015614fbb57614fba6150ff565b5b828203905092915050565b6000614fd182614fe4565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006150268261502d565b9050919050565b600061503882614fe4565b9050919050565b600061504a82615004565b9050919050565b60005b8381101561506f578082015181840152602081019050615054565b8381111561507e576000848401525b50505050565b6000600282049050600182168061509c57607f821691505b602082108114156150b0576150af61515d565b5b50919050565b60006150c182615004565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156150f4576150f36150ff565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f54686973206164647265737320697320626c61636b6c69737465640000000000600082015250565b7f4163636f756e7420697320616c726561647920696e636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b61553a81614fc6565b811461554557600080fd5b50565b61555181614fd8565b811461555c57600080fd5b50565b61556881615004565b811461557357600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209be1c2f4a84729c60733b8eace35b59b7463aed2b969e44606efa1587334f36564736f6c63430008030033

Deployed Bytecode

0x6080604052600436106102345760003560e01c80635342acb41161012e578063a457c2d7116100ab578063d543dbeb1161006f578063d543dbeb14610896578063dd62ed3e146108bf578063ea2f0b37146108fc578063f2fde38b14610925578063ff8975701461094e5761023b565b8063a457c2d71461079d578063a9059cbb146107da578063aa45026b14610817578063b425bac314610842578063be3b9f2d1461086d5761023b565b806388f82020116100f257806388f82020146106b85780638da5cb5b146106f55780638ee88c531461072057806395d89b411461074957806395f4d088146107745761023b565b80635342acb4146105d15780636bc87c3a1461060e57806370a0823114610639578063715018a6146106765780637d1db4a51461068d5761023b565b80633685d419116101bc5780634549b039116101805780634549b039146104ec57806349bd5a5e146105295780634a49ac4c146105545780634a74bb021461057d57806352390c02146105a85761023b565b80633685d4191461040b578063379e291914610434578063395093511461045d5780633bd5d1731461049a578063437823ec146104c35761023b565b806318160ddd1161020357806318160ddd146102fe5780631cdd3be31461032957806323b872dd146103665780632d838119146103a3578063313ce567146103e05761023b565b806306fdde0314610240578063095ea7b31461026b57806313114a9d146102a85780631694505e146102d35761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b50610255610977565b6040516102629190614bb3565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d91906146ca565b610a09565b60405161029f9190614b7d565b60405180910390f35b3480156102b457600080fd5b506102bd610a27565b6040516102ca9190614d95565b60405180910390f35b3480156102df57600080fd5b506102e8610a31565b6040516102f59190614b98565b60405180910390f35b34801561030a57600080fd5b50610313610a55565b6040516103209190614d95565b60405180910390f35b34801561033557600080fd5b50610350600480360381019061034b91906145ed565b610a5f565b60405161035d9190614b7d565b60405180910390f35b34801561037257600080fd5b5061038d6004803603810190610388919061467b565b610a7f565b60405161039a9190614b7d565b60405180910390f35b3480156103af57600080fd5b506103ca60048036038101906103c5919061474b565b610b58565b6040516103d79190614d95565b60405180910390f35b3480156103ec57600080fd5b506103f5610bc6565b6040516104029190614e41565b60405180910390f35b34801561041757600080fd5b50610432600480360381019061042d91906145ed565b610bdd565b005b34801561044057600080fd5b5061045b6004803603810190610456919061474b565b610fab565b005b34801561046957600080fd5b50610484600480360381019061047f91906146ca565b611031565b6040516104919190614b7d565b60405180910390f35b3480156104a657600080fd5b506104c160048036038101906104bc919061474b565b6110e4565b005b3480156104cf57600080fd5b506104ea60048036038101906104e591906145ed565b611260565b005b3480156104f857600080fd5b50610513600480360381019061050e9190614774565b611337565b6040516105209190614d95565b60405180910390f35b34801561053557600080fd5b5061053e6113bd565b60405161054b9190614b01565b60405180910390f35b34801561056057600080fd5b5061057b600480360381019061057691906145ed565b6113e1565b005b34801561058957600080fd5b506105926114b8565b60405161059f9190614b7d565b60405180910390f35b3480156105b457600080fd5b506105cf60048036038101906105ca91906145ed565b6114cb565b005b3480156105dd57600080fd5b506105f860048036038101906105f391906145ed565b611766565b6040516106059190614b7d565b60405180910390f35b34801561061a57600080fd5b506106236117bc565b6040516106309190614d95565b60405180910390f35b34801561064557600080fd5b50610660600480360381019061065b91906145ed565b6117c2565b60405161066d9190614d95565b60405180910390f35b34801561068257600080fd5b5061068b6118ad565b005b34801561069957600080fd5b506106a26119e7565b6040516106af9190614d95565b60405180910390f35b3480156106c457600080fd5b506106df60048036038101906106da91906145ed565b6119ed565b6040516106ec9190614b7d565b60405180910390f35b34801561070157600080fd5b5061070a611a43565b6040516107179190614b01565b60405180910390f35b34801561072c57600080fd5b506107476004803603810190610742919061474b565b611a6c565b005b34801561075557600080fd5b5061075e611af2565b60405161076b9190614bb3565b60405180910390f35b34801561078057600080fd5b5061079b600480360381019061079691906145ed565b611b84565b005b3480156107a957600080fd5b506107c460048036038101906107bf91906146ca565b611c44565b6040516107d19190614b7d565b60405180910390f35b3480156107e657600080fd5b5061080160048036038101906107fc91906146ca565b611d11565b60405161080e9190614b7d565b60405180910390f35b34801561082357600080fd5b5061082c611d2f565b6040516108399190614d95565b60405180910390f35b34801561084e57600080fd5b50610857611d35565b6040516108649190614b01565b60405180910390f35b34801561087957600080fd5b50610894600480360381019061088f919061474b565b611d5b565b005b3480156108a257600080fd5b506108bd60048036038101906108b8919061474b565b611de1565b005b3480156108cb57600080fd5b506108e660048036038101906108e1919061463f565b611e8e565b6040516108f39190614d95565b60405180910390f35b34801561090857600080fd5b50610923600480360381019061091e91906145ed565b611f15565b005b34801561093157600080fd5b5061094c600480360381019061094791906145ed565b611fec565b005b34801561095a57600080fd5b5061097560048036038101906109709190614706565b612195565b005b6060600c805461098690615084565b80601f01602080910402602001604051908101604052809291908181526020018280546109b290615084565b80156109ff5780601f106109d4576101008083540402835291602001916109ff565b820191906000526020600020905b8154815290600101906020018083116109e257829003601f168201915b5050505050905090565b6000610a1d610a166122da565b84846122e2565b6001905092915050565b6000600b54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600954905090565b60066020528060005260406000206000915054906101000a900460ff1681565b6000610a8c8484846124ad565b610b4d84610a986122da565b610b488560405180606001604052806028815260200161557760289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610afe6122da565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128fd9092919063ffffffff16565b6122e2565b600190509392505050565b6000600a54821115610b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9690614bf5565b60405180910390fd5b6000610ba9612952565b9050610bbe818461297d90919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b610be56122da565b73ffffffffffffffffffffffffffffffffffffffff16610c03611a43565b73ffffffffffffffffffffffffffffffffffffffff1614610c59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5090614cf5565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdc90614c95565b60405180910390fd5b60005b600780549050811015610fa7578173ffffffffffffffffffffffffffffffffffffffff1660078281548110610d46577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610f945760076001600780549050610da19190614f92565b81548110610dd8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660078281548110610e3d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007805480610f5a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610fa7565b8080610f9f906150b6565b915050610ce8565b5050565b610fb36122da565b73ffffffffffffffffffffffffffffffffffffffff16610fd1611a43565b73ffffffffffffffffffffffffffffffffffffffff1614611027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101e90614cf5565b60405180910390fd5b80600f8190555050565b60006110da61103e6122da565b846110d5856003600061104f6122da565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299390919063ffffffff16565b6122e2565b6001905092915050565b60006110ee6122da565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561117d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117490614d75565b60405180910390fd5b6000611188836129a9565b50505050505090506111e281600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1190919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061123a81600a54612a1190919063ffffffff16565b600a8190555061125583600b5461299390919063ffffffff16565b600b81905550505050565b6112686122da565b73ffffffffffffffffffffffffffffffffffffffff16611286611a43565b73ffffffffffffffffffffffffffffffffffffffff16146112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390614cf5565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060095483111561137e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137590614cb5565b60405180910390fd5b8161139f57600061138e846129a9565b5050505050509050809150506113b7565b60006113aa846129a9565b5050505050915050809150505b92915050565b7f000000000000000000000000cadf958f0c30af6befd2a55dc89882ec293b47d581565b6113e96122da565b73ffffffffffffffffffffffffffffffffffffffff16611407611a43565b73ffffffffffffffffffffffffffffffffffffffff161461145d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145490614cf5565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601560019054906101000a900460ff1681565b6114d36122da565b73ffffffffffffffffffffffffffffffffffffffff166114f1611a43565b73ffffffffffffffffffffffffffffffffffffffff1614611547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153e90614cf5565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cb90614c55565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156116a857611664600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b58565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60115481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561185d57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506118a8565b6118a5600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b58565b90505b919050565b6118b56122da565b73ffffffffffffffffffffffffffffffffffffffff166118d3611a43565b73ffffffffffffffffffffffffffffffffffffffff1614611929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192090614cf5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60165481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a746122da565b73ffffffffffffffffffffffffffffffffffffffff16611a92611a43565b73ffffffffffffffffffffffffffffffffffffffff1614611ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adf90614cf5565b60405180910390fd5b8060118190555050565b6060600d8054611b0190615084565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2d90615084565b8015611b7a5780601f10611b4f57610100808354040283529160200191611b7a565b820191906000526020600020905b815481529060010190602001808311611b5d57829003601f168201915b5050505050905090565b611b8c6122da565b73ffffffffffffffffffffffffffffffffffffffff16611baa611a43565b73ffffffffffffffffffffffffffffffffffffffff1614611c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf790614cf5565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611d07611c516122da565b84611d028560405180606001604052806025815260200161559f6025913960036000611c7b6122da565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128fd9092919063ffffffff16565b6122e2565b6001905092915050565b6000611d25611d1e6122da565b84846124ad565b6001905092915050565b600f5481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611d636122da565b73ffffffffffffffffffffffffffffffffffffffff16611d81611a43565b73ffffffffffffffffffffffffffffffffffffffff1614611dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dce90614cf5565b60405180910390fd5b8060138190555050565b611de96122da565b73ffffffffffffffffffffffffffffffffffffffff16611e07611a43565b73ffffffffffffffffffffffffffffffffffffffff1614611e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5490614cf5565b60405180910390fd5b611e856064611e7783600954612a2790919063ffffffff16565b61297d90919063ffffffff16565b60168190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611f1d6122da565b73ffffffffffffffffffffffffffffffffffffffff16611f3b611a43565b73ffffffffffffffffffffffffffffffffffffffff1614611f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8890614cf5565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611ff46122da565b73ffffffffffffffffffffffffffffffffffffffff16612012611a43565b73ffffffffffffffffffffffffffffffffffffffff1614612068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205f90614cf5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cf90614c15565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61219d6122da565b73ffffffffffffffffffffffffffffffffffffffff166121bb611a43565b73ffffffffffffffffffffffffffffffffffffffff1614612211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220890614cf5565b60405180910390fd5b60005b828290508110156122d55760016006600085858581811061225e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201602081019061227391906145ed565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806122ce906150b6565b9050612214565b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612352576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234990614d55565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b990614c35565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124a09190614d95565b60405180910390a3505050565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125515750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258790614c75565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f790614d35565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266790614bd5565b60405180910390fd5b600081116126b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126aa90614d15565b60405180910390fd5b6126bb611a43565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561272957506126f9611a43565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561277457601654811115612773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276a90614cd5565b60405180910390fd5b5b600061277f306117c2565b905060165481106127905760165490505b600060175482101590508080156127b45750601560009054906101000a900460ff16155b801561280c57507f000000000000000000000000cadf958f0c30af6befd2a55dc89882ec293b47d573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156128245750601560019054906101000a900460ff165b1561283857601754915061283782612a3d565b5b600060019050600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128df5750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156128e957600090505b6128f586868684612b13565b505050505050565b6000838311158290612945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293c9190614bb3565b60405180910390fd5b5082840390509392505050565b600080600061295f612e24565b91509150612976818361297d90919063ffffffff16565b9250505090565b6000818361298b9190614f07565b905092915050565b600081836129a19190614eb1565b905092915050565b60008060008060008060008060008060006129c38c61316f565b935093509350935060008060006129e48f8787876129df612952565b6131ee565b925092509250828282898989899d509d509d509d509d509d509d5050505050505050919395979092949650565b60008183612a1f9190614f92565b905092915050565b60008183612a359190614f38565b905092915050565b6001601560006101000a81548160ff0219169083151502179055506000612a6e60028361297d90919063ffffffff16565b90506000612a858284612a1190919063ffffffff16565b90506000479050612a95836132a2565b6000612aaa8247612a1190919063ffffffff16565b9050612ab68382613560565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051612ae993929190614e0a565b60405180910390a1505050506000601560006101000a81548160ff02191690831515021790555050565b80612b2157612b20613650565b5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bc45750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bd957612bd48484846136a4565b612e10565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c7c5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c9157612c8c848484613912565b612e0f565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d355750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d4a57612d45848484613b80565b612e0e565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612dec5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e0157612dfc848484613d59565b612e0d565b612e0c848484613b80565b5b5b5b5b80612e1e57612e1d61405c565b5b50505050565b6000806000600a5490506000600954905060005b60078054905081101561313257826001600060078481548110612e84577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612f985750816002600060078481548110612f30577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612faf57600a546009549450945050505061316b565b6130656001600060078481548110612ff0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612a1190919063ffffffff16565b925061311d60026000600784815481106130a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612a1190919063ffffffff16565b9150808061312a906150b6565b915050612e38565b5061314a600954600a5461297d90919063ffffffff16565b82101561316257600a5460095493509350505061316b565b81819350935050505b9091565b600080600080600061318086614079565b9050600061318d876140aa565b9050600061319a886140db565b905060006131d5826131c7856131b9888e612a1190919063ffffffff16565b612a1190919063ffffffff16565b612a1190919063ffffffff16565b9050808484849750975097509750505050509193509193565b600080600080613207858a612a2790919063ffffffff16565b9050600061321e868a612a2790919063ffffffff16565b90506000613235878a612a2790919063ffffffff16565b9050600061324c888a612a2790919063ffffffff16565b90506000613287826132798561326b888a612a1190919063ffffffff16565b612a1190919063ffffffff16565b612a1190919063ffffffff16565b90508481859750975097505050505050955095509592505050565b6000600267ffffffffffffffff8111156132e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156133135781602001602082028036833780820191505090505b5090503081600081518110613351577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156133f157600080fd5b505afa158015613405573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134299190614616565b81600181518110613463577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506134c8307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846122e2565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161352a959493929190614db0565b600060405180830381600087803b15801561354457600080fd5b505af1158015613558573d6000803e3d6000fd5b505050505050565b61358b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846122e2565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806135d5611a43565b426040518863ffffffff1660e01b81526004016135f796959493929190614b1c565b6060604051808303818588803b15801561361057600080fd5b505af1158015613624573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061364991906147b0565b5050505050565b600060135414801561366457506000601154145b1561366e576136a2565b601354601481905550600f5460108190555060115460128190555060006013819055506000600f8190555060006011819055505b565b60008060008060008060006136b8886129a9565b965096509650965096509650965061371888600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1190919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137ad87600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1190919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061384286600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299390919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061388e8261410c565b613897816142b1565b6138a18584614500565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516138fe9190614d95565b60405180910390a350505050505050505050565b6000806000806000806000613926886129a9565b965096509650965096509650965061398687600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1190919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a1b84600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299390919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ab086600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299390919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613afc8261410c565b613b05816142b1565b613b0f8584614500565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613b6c9190614d95565b60405180910390a350505050505050505050565b6000806000806000806000613b94886129a9565b9650965096509650965096509650613bf487600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1190919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c8986600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299390919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cd58261410c565b613cde816142b1565b613ce88584614500565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613d459190614d95565b60405180910390a350505050505050505050565b6000806000806000806000613d6d886129a9565b9650965096509650965096509650613dcd88600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1190919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e6287600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1190919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ef784600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299390919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f8c86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299390919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fd88261410c565b613fe1816142b1565b613feb8584614500565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516140489190614d95565b60405180910390a350505050505050505050565b601454601381905550601054600f81905550601254601181905550565b60006140a3606461409560135485612a2790919063ffffffff16565b61297d90919063ffffffff16565b9050919050565b60006140d460646140c660115485612a2790919063ffffffff16565b61297d90919063ffffffff16565b9050919050565b600061410560646140f7600f5485612a2790919063ffffffff16565b61297d90919063ffffffff16565b9050919050565b6000614116612952565b9050600061412d8284612a2790919063ffffffff16565b905061418181600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299390919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156142ac5761426883600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299390919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b60006142bb612952565b905060006142d28284612a2790919063ffffffff16565b90506143488160016000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299390919063ffffffff16565b60016000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060056000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156144fb576144958360026000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299390919063ffffffff16565b60026000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61451582600a54612a1190919063ffffffff16565b600a8190555061453081600b5461299390919063ffffffff16565b600b819055505050565b60008135905061454981615531565b92915050565b60008151905061455e81615531565b92915050565b60008083601f84011261457657600080fd5b8235905067ffffffffffffffff81111561458f57600080fd5b6020830191508360208202830111156145a757600080fd5b9250929050565b6000813590506145bd81615548565b92915050565b6000813590506145d28161555f565b92915050565b6000815190506145e78161555f565b92915050565b6000602082840312156145ff57600080fd5b600061460d8482850161453a565b91505092915050565b60006020828403121561462857600080fd5b60006146368482850161454f565b91505092915050565b6000806040838503121561465257600080fd5b60006146608582860161453a565b92505060206146718582860161453a565b9150509250929050565b60008060006060848603121561469057600080fd5b600061469e8682870161453a565b93505060206146af8682870161453a565b92505060406146c0868287016145c3565b9150509250925092565b600080604083850312156146dd57600080fd5b60006146eb8582860161453a565b92505060206146fc858286016145c3565b9150509250929050565b6000806020838503121561471957600080fd5b600083013567ffffffffffffffff81111561473357600080fd5b61473f85828601614564565b92509250509250929050565b60006020828403121561475d57600080fd5b600061476b848285016145c3565b91505092915050565b6000806040838503121561478757600080fd5b6000614795858286016145c3565b92505060206147a6858286016145ae565b9150509250929050565b6000806000606084860312156147c557600080fd5b60006147d3868287016145d8565b93505060206147e4868287016145d8565b92505060406147f5868287016145d8565b9150509250925092565b600061480b8383614817565b60208301905092915050565b61482081614fc6565b82525050565b61482f81614fc6565b82525050565b600061484082614e6c565b61484a8185614e8f565b935061485583614e5c565b8060005b8381101561488657815161486d88826147ff565b975061487883614e82565b925050600181019050614859565b5085935050505092915050565b61489c81614fd8565b82525050565b6148ab8161501b565b82525050565b6148ba8161503f565b82525050565b60006148cb82614e77565b6148d58185614ea0565b93506148e5818560208601615051565b6148ee8161518c565b840191505092915050565b6000614906602383614ea0565b91506149118261519d565b604082019050919050565b6000614929602a83614ea0565b9150614934826151ec565b604082019050919050565b600061494c602683614ea0565b91506149578261523b565b604082019050919050565b600061496f602283614ea0565b915061497a8261528a565b604082019050919050565b6000614992601b83614ea0565b915061499d826152d9565b602082019050919050565b60006149b5601b83614ea0565b91506149c082615302565b602082019050919050565b60006149d8601b83614ea0565b91506149e38261532b565b602082019050919050565b60006149fb601f83614ea0565b9150614a0682615354565b602082019050919050565b6000614a1e602883614ea0565b9150614a298261537d565b604082019050919050565b6000614a41602083614ea0565b9150614a4c826153cc565b602082019050919050565b6000614a64602983614ea0565b9150614a6f826153f5565b604082019050919050565b6000614a87602583614ea0565b9150614a9282615444565b604082019050919050565b6000614aaa602483614ea0565b9150614ab582615493565b604082019050919050565b6000614acd602c83614ea0565b9150614ad8826154e2565b604082019050919050565b614aec81615004565b82525050565b614afb8161500e565b82525050565b6000602082019050614b166000830184614826565b92915050565b600060c082019050614b316000830189614826565b614b3e6020830188614ae3565b614b4b60408301876148b1565b614b5860608301866148b1565b614b656080830185614826565b614b7260a0830184614ae3565b979650505050505050565b6000602082019050614b926000830184614893565b92915050565b6000602082019050614bad60008301846148a2565b92915050565b60006020820190508181036000830152614bcd81846148c0565b905092915050565b60006020820190508181036000830152614bee816148f9565b9050919050565b60006020820190508181036000830152614c0e8161491c565b9050919050565b60006020820190508181036000830152614c2e8161493f565b9050919050565b60006020820190508181036000830152614c4e81614962565b9050919050565b60006020820190508181036000830152614c6e81614985565b9050919050565b60006020820190508181036000830152614c8e816149a8565b9050919050565b60006020820190508181036000830152614cae816149cb565b9050919050565b60006020820190508181036000830152614cce816149ee565b9050919050565b60006020820190508181036000830152614cee81614a11565b9050919050565b60006020820190508181036000830152614d0e81614a34565b9050919050565b60006020820190508181036000830152614d2e81614a57565b9050919050565b60006020820190508181036000830152614d4e81614a7a565b9050919050565b60006020820190508181036000830152614d6e81614a9d565b9050919050565b60006020820190508181036000830152614d8e81614ac0565b9050919050565b6000602082019050614daa6000830184614ae3565b92915050565b600060a082019050614dc56000830188614ae3565b614dd260208301876148b1565b8181036040830152614de48186614835565b9050614df36060830185614826565b614e006080830184614ae3565b9695505050505050565b6000606082019050614e1f6000830186614ae3565b614e2c6020830185614ae3565b614e396040830184614ae3565b949350505050565b6000602082019050614e566000830184614af2565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614ebc82615004565b9150614ec783615004565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614efc57614efb6150ff565b5b828201905092915050565b6000614f1282615004565b9150614f1d83615004565b925082614f2d57614f2c61512e565b5b828204905092915050565b6000614f4382615004565b9150614f4e83615004565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f8757614f866150ff565b5b828202905092915050565b6000614f9d82615004565b9150614fa883615004565b925082821015614fbb57614fba6150ff565b5b828203905092915050565b6000614fd182614fe4565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006150268261502d565b9050919050565b600061503882614fe4565b9050919050565b600061504a82615004565b9050919050565b60005b8381101561506f578082015181840152602081019050615054565b8381111561507e576000848401525b50505050565b6000600282049050600182168061509c57607f821691505b602082108114156150b0576150af61515d565b5b50919050565b60006150c182615004565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156150f4576150f36150ff565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f54686973206164647265737320697320626c61636b6c69737465640000000000600082015250565b7f4163636f756e7420697320616c726561647920696e636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b61553a81614fc6565b811461554557600080fd5b50565b61555181614fd8565b811461555c57600080fd5b50565b61556881615004565b811461557357600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209be1c2f4a84729c60733b8eace35b59b7463aed2b969e44606efa1587334f36564736f6c63430008030033

Deployed Bytecode Sourcemap

16342:20015:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19029:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19941:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21062:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17606:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19306:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16817:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20110:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21989:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19215:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22705:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24370:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20431:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21157:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23891:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21543:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17664:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25419:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17743:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22250:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29694:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17406:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19409:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7972:148;;;;;;;;;;;;;:::i;:::-;;17796:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20934:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7749:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24480:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19120:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24256:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20657:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19615:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17319:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16913:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24136:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24613:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19790:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24014:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8128:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25631:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19029:83;19066:13;19099:5;19092:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19029:83;:::o;19941:161::-;20016:4;20033:39;20042:12;:10;:12::i;:::-;20056:7;20065:6;20033:8;:39::i;:::-;20090:4;20083:11;;19941:161;;;;:::o;21062:87::-;21104:7;21131:10;;21124:17;;21062:87;:::o;17606:51::-;;;:::o;19306:95::-;19359:7;19386;;19379:14;;19306:95;:::o;16817:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;20110:313::-;20208:4;20225:36;20235:6;20243:9;20254:6;20225:9;:36::i;:::-;20272:121;20281:6;20289:12;:10;:12::i;:::-;20303:89;20341:6;20303:89;;;;;;;;;;;;;;;;;:11;:19;20315:6;20303:19;;;;;;;;;;;;;;;:33;20323:12;:10;:12::i;:::-;20303:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;20272:8;:121::i;:::-;20411:4;20404:11;;20110:313;;;;;:::o;21989:253::-;22055:7;22094;;22083;:18;;22075:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22159:19;22182:10;:8;:10::i;:::-;22159:33;;22210:24;22222:11;22210:7;:11;;:24;;;;:::i;:::-;22203:31;;;21989:253;;;:::o;19215:83::-;19256:5;19281:9;;;;;;;;;;;19274:16;;19215:83;:::o;22705:479::-;7895:12;:10;:12::i;:::-;7884:23;;:7;:5;:7::i;:::-;:23;;;7876:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22787:11:::1;:20;22799:7;22787:20;;;;;;;;;;;;;;;;;;;;;;;;;22779:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;22855:9;22850:327;22874:9;:16;;;;22870:1;:20;22850:327;;;22932:7;22916:23;;:9;22926:1;22916:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;22912:254;;;22975:9;23004:1;22985:9;:16;;;;:20;;;;:::i;:::-;22975:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22960:9;22970:1;22960:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;23044:1;23025:7;:16;23033:7;23025:16;;;;;;;;;;;;;;;:20;;;;23087:5;23064:11;:20;23076:7;23064:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;23111:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23145:5;;22912:254;22892:3;;;;;:::i;:::-;;;;22850:327;;;;22705:479:::0;:::o;24370:98::-;7895:12;:10;:12::i;:::-;7884:23;;:7;:5;:7::i;:::-;:23;;;7876:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24454:6:::1;24444:7;:16;;;;24370:98:::0;:::o;20431:218::-;20519:4;20536:83;20545:12;:10;:12::i;:::-;20559:7;20568:50;20607:10;20568:11;:25;20580:12;:10;:12::i;:::-;20568:25;;;;;;;;;;;;;;;:34;20594:7;20568:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;20536:8;:83::i;:::-;20637:4;20630:11;;20431:218;;;;:::o;21157:378::-;21209:14;21226:12;:10;:12::i;:::-;21209:29;;21258:11;:19;21270:6;21258:19;;;;;;;;;;;;;;;;;;;;;;;;;21257:20;21249:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;21338:15;21363:19;21374:7;21363:10;:19::i;:::-;21337:45;;;;;;;;21411:28;21431:7;21411;:15;21419:6;21411:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;21393:7;:15;21401:6;21393:15;;;;;;;;;;;;;;;:46;;;;21460:20;21472:7;21460;;:11;;:20;;;;:::i;:::-;21450:7;:30;;;;21504:23;21519:7;21504:10;;:14;;:23;;;;:::i;:::-;21491:10;:36;;;;21157:378;;;:::o;23891:111::-;7895:12;:10;:12::i;:::-;7884:23;;:7;:5;:7::i;:::-;:23;;;7876:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23990:4:::1;23960:18;:27;23979:7;23960:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;23891:111:::0;:::o;21543:438::-;21633:7;21672;;21661;:18;;21653:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;21731:17;21726:248;;21766:15;21791:19;21802:7;21791:10;:19::i;:::-;21765:45;;;;;;;;21832:7;21825:14;;;;;21726:248;21874:23;21906:19;21917:7;21906:10;:19::i;:::-;21872:53;;;;;;;;21947:15;21940:22;;;21543:438;;;;;:::o;17664:38::-;;;:::o;25419:115::-;7895:12;:10;:12::i;:::-;7884:23;;:7;:5;:7::i;:::-;:23;;;7876:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25521:5:::1;25495:14;:23;25510:7;25495:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;25419:115:::0;:::o;17743:40::-;;;;;;;;;;;;;:::o;22250:447::-;7895:12;:10;:12::i;:::-;7884:23;;:7;:5;:7::i;:::-;:23;;;7876:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22447:11:::1;:20;22459:7;22447:20;;;;;;;;;;;;;;;;;;;;;;;;;22446:21;22438:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22532:1;22513:7;:16;22521:7;22513:16;;;;;;;;;;;;;;;;:20;22510:108;;;22569:37;22589:7;:16;22597:7;22589:16;;;;;;;;;;;;;;;;22569:19;:37::i;:::-;22550:7;:16;22558:7;22550:16;;;;;;;;;;;;;;;:56;;;;22510:108;22651:4;22628:11;:20;22640:7;22628:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;22666:9;22681:7;22666:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22250:447:::0;:::o;29694:123::-;29758:4;29782:18;:27;29801:7;29782:27;;;;;;;;;;;;;;;;;;;;;;;;;29775:34;;29694:123;;;:::o;17406:32::-;;;;:::o;19409:198::-;19475:7;19499:11;:20;19511:7;19499:20;;;;;;;;;;;;;;;;;;;;;;;;;19495:49;;;19528:7;:16;19536:7;19528:16;;;;;;;;;;;;;;;;19521:23;;;;19495:49;19562:37;19582:7;:16;19590:7;19582:16;;;;;;;;;;;;;;;;19562:19;:37::i;:::-;19555:44;;19409:198;;;;:::o;7972:148::-;7895:12;:10;:12::i;:::-;7884:23;;:7;:5;:7::i;:::-;:23;;;7876:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8079:1:::1;8042:40;;8063:6;::::0;::::1;;;;;;;;8042:40;;;;;;;;;;;;8110:1;8093:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;7972:148::o:0;17796:49::-;;;;:::o;20934:120::-;21002:4;21026:11;:20;21038:7;21026:20;;;;;;;;;;;;;;;;;;;;;;;;;21019:27;;20934:120;;;:::o;7749:87::-;7795:7;7822:6;;;;;;;;;;;7815:13;;7749:87;:::o;24480:122::-;7895:12;:10;:12::i;:::-;7884:23;;:7;:5;:7::i;:::-;:23;;;7876:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24582:12:::1;24566:13;:28;;;;24480:122:::0;:::o;19120:87::-;19159:13;19192:7;19185:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19120:87;:::o;24256:106::-;7895:12;:10;:12::i;:::-;7884:23;;:7;:5;:7::i;:::-;:23;;;7876:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24347:7:::1;24327:17;;:27;;;;;;;;;;;;;;;;;;24256:106:::0;:::o;20657:269::-;20750:4;20767:129;20776:12;:10;:12::i;:::-;20790:7;20799:96;20838:15;20799:96;;;;;;;;;;;;;;;;;:11;:25;20811:12;:10;:12::i;:::-;20799:25;;;;;;;;;;;;;;;:34;20825:7;20799:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;20767:8;:129::i;:::-;20914:4;20907:11;;20657:269;;;;:::o;19615:167::-;19693:4;19710:42;19720:12;:10;:12::i;:::-;19734:9;19745:6;19710:9;:42::i;:::-;19770:4;19763:11;;19615:167;;;;:::o;17319:26::-;;;;:::o;16913:77::-;;;;;;;;;;;;;:::o;24136:110::-;7895:12;:10;:12::i;:::-;7884:23;;:7;:5;:7::i;:::-;:23;;;7876:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24229:9:::1;24216:10;:22;;;;24136:110:::0;:::o;24613:162::-;7895:12;:10;:12::i;:::-;7884:23;;:7;:5;:7::i;:::-;:23;;;7876:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24707:60:::1;24751:5;24707:25;24719:12;24707:7;;:11;;:25;;;;:::i;:::-;:29;;:60;;;;:::i;:::-;24692:12;:75;;;;24613:162:::0;:::o;19790:143::-;19871:7;19898:11;:18;19910:5;19898:18;;;;;;;;;;;;;;;:27;19917:7;19898:27;;;;;;;;;;;;;;;;19891:34;;19790:143;;;;:::o;24014:110::-;7895:12;:10;:12::i;:::-;7884:23;;:7;:5;:7::i;:::-;:23;;;7876:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24111:5:::1;24081:18;:27;24100:7;24081:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;24014:110:::0;:::o;8128:244::-;7895:12;:10;:12::i;:::-;7884:23;;:7;:5;:7::i;:::-;:23;;;7876:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8237:1:::1;8217:22;;:8;:22;;;;8209:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8327:8;8298:38;;8319:6;::::0;::::1;;;;;;;;8298:38;;;;;;;;;;;;8356:8;8347:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;8128:244:::0;:::o;25631:188::-;7895:12;:10;:12::i;:::-;7884:23;;:7;:5;:7::i;:::-;:23;;;7876:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25718:9:::1;25713:99;25733:9;;:16;;25729:1;:20;25713:99;;;25798:4;25767:14;:28;25782:9;;25792:1;25782:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25767:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;25751:3;;;;:::i;:::-;;;25713:99;;;;25631:188:::0;;:::o;3267:98::-;3320:7;3347:10;3340:17;;3267:98;:::o;29825:337::-;29935:1;29918:19;;:5;:19;;;;29910:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30016:1;29997:21;;:7;:21;;;;29989:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30100:6;30070:11;:18;30082:5;30070:18;;;;;;;;;;;;;;;:27;30089:7;30070:27;;;;;;;;;;;;;;;:36;;;;30138:7;30122:32;;30131:5;30122:32;;;30147:6;30122:32;;;;;;:::i;:::-;;;;;;;;29825:337;;;:::o;30170:1626::-;30293:14;:20;30308:4;30293:20;;;;;;;;;;;;;;;;;;;;;;;;;30292:21;:44;;;;;30318:14;:18;30333:2;30318:18;;;;;;;;;;;;;;;;;;;;;;;;;30317:19;30292:44;30284:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;30403:1;30387:18;;:4;:18;;;;30379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30480:1;30466:16;;:2;:16;;;;30458:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30550:1;30541:6;:10;30533:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30619:7;:5;:7::i;:::-;30611:15;;:4;:15;;;;:32;;;;;30636:7;:5;:7::i;:::-;30630:13;;:2;:13;;;;30611:32;30608:125;;;30676:12;;30666:6;:22;;30658:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;30608:125;30746:28;30777:24;30795:4;30777:9;:24::i;:::-;30746:55;;30849:12;;30825:20;:36;30822:112;;30910:12;;30887:35;;30822:112;30954:24;31005:29;;30981:20;:53;;30954:80;;31063:19;:53;;;;;31100:16;;;;;;;;;;;31099:17;31063:53;:91;;;;;31141:13;31133:21;;:4;:21;;;;31063:91;:129;;;;;31171:21;;;;;;;;;;;31063:129;31045:318;;;31242:29;;31219:52;;31315:36;31330:20;31315:14;:36::i;:::-;31045:318;31444:12;31459:4;31444:19;;31571:18;:24;31590:4;31571:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;31599:18;:22;31618:2;31599:22;;;;;;;;;;;;;;;;;;;;;;;;;31571:50;31568:96;;;31647:5;31637:15;;31568:96;31750:38;31765:4;31770:2;31773:6;31780:7;31750:14;:38::i;:::-;30170:1626;;;;;;:::o;2595:206::-;2681:7;2739:1;2734;:6;;2742:12;2726:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2781:1;2777;:5;2770:12;;2595:206;;;;;:::o;27213:163::-;27254:7;27275:15;27292;27311:19;:17;:19::i;:::-;27274:56;;;;27348:20;27360:7;27348;:11;;:20;;;;:::i;:::-;27341:27;;;;27213:163;:::o;2383:98::-;2441:7;2472:1;2468;:5;;;;:::i;:::-;2461:12;;2383:98;;;;:::o;2065:::-;2123:7;2154:1;2150;:5;;;;:::i;:::-;2143:12;;2065:98;;;;:::o;25827:454::-;25886:7;25895;25904;25913;25922;25931;25940;25961:23;25986:12;26000:18;26020:12;26036:20;26048:7;26036:11;:20::i;:::-;25960:96;;;;;;;;26068:15;26085:23;26110:12;26126:56;26138:7;26147:4;26153:10;26165:4;26171:10;:8;:10::i;:::-;26126:11;:56::i;:::-;26067:115;;;;;;26201:7;26210:15;26227:4;26233:15;26250:4;26256:10;26268:4;26193:80;;;;;;;;;;;;;;;;;;;;;25827:454;;;;;;;;;:::o;2171:98::-;2229:7;2260:1;2256;:5;;;;:::i;:::-;2249:12;;2171:98;;;;:::o;2277:::-;2335:7;2366:1;2362;:5;;;;:::i;:::-;2355:12;;2277:98;;;;:::o;31804:720::-;18177:4;18158:16;;:23;;;;;;;;;;;;;;;;;;31940:12:::1;31955:27;31980:1;31955:20;:24;;:27;;;;:::i;:::-;31940:42;;31993:17;32013:30;32038:4;32013:20;:24;;:30;;;;:::i;:::-;31993:50;;32056:22;32081:21;32056:46;;32147:22;32164:4;32147:16;:22::i;:::-;32300:18;32321:41;32347:14;32321:21;:25;;:41;;;;:::i;:::-;32300:62;;32412:35;32425:9;32436:10;32412:12;:35::i;:::-;32473:43;32488:4;32494:10;32506:9;32473:43;;;;;;;;:::i;:::-;;;;;;;;18192:1;;;;18223:5:::0;18204:16;;:24;;;;;;;;;;;;;;;;;;31804:720;:::o;33723:834::-;33834:7;33830:40;;33856:14;:12;:14::i;:::-;33830:40;33895:11;:19;33907:6;33895:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;33919:11;:22;33931:9;33919:22;;;;;;;;;;;;;;;;;;;;;;;;;33918:23;33895:46;33891:597;;;33958:48;33980:6;33988:9;33999:6;33958:21;:48::i;:::-;33891:597;;;34029:11;:19;34041:6;34029:19;;;;;;;;;;;;;;;;;;;;;;;;;34028:20;:46;;;;;34052:11;:22;34064:9;34052:22;;;;;;;;;;;;;;;;;;;;;;;;;34028:46;34024:464;;;34091:46;34111:6;34119:9;34130:6;34091:19;:46::i;:::-;34024:464;;;34160:11;:19;34172:6;34160:19;;;;;;;;;;;;;;;;;;;;;;;;;34159:20;:47;;;;;34184:11;:22;34196:9;34184:22;;;;;;;;;;;;;;;;;;;;;;;;;34183:23;34159:47;34155:333;;;34223:44;34241:6;34249:9;34260:6;34223:17;:44::i;:::-;34155:333;;;34289:11;:19;34301:6;34289:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;34312:11;:22;34324:9;34312:22;;;;;;;;;;;;;;;;;;;;;;;;;34289:45;34285:203;;;34351:48;34373:6;34381:9;34392:6;34351:21;:48::i;:::-;34285:203;;;34432:44;34450:6;34458:9;34469:6;34432:17;:44::i;:::-;34285:203;34155:333;34024:464;33891:597;34512:7;34508:41;;34534:15;:13;:15::i;:::-;34508:41;33723:834;;;;:::o;27384:561::-;27434:7;27443;27463:15;27481:7;;27463:25;;27499:15;27517:7;;27499:25;;27546:9;27541:289;27565:9;:16;;;;27561:1;:20;27541:289;;;27631:7;27607;:21;27615:9;27625:1;27615:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27607:21;;;;;;;;;;;;;;;;:31;:66;;;;27666:7;27642;:21;27650:9;27660:1;27650:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27642:21;;;;;;;;;;;;;;;;:31;27607:66;27603:97;;;27683:7;;27692;;27675:25;;;;;;;;;27603:97;27725:34;27737:7;:21;27745:9;27755:1;27745:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27737:21;;;;;;;;;;;;;;;;27725:7;:11;;:34;;;;:::i;:::-;27715:44;;27784:34;27796:7;:21;27804:9;27814:1;27804:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27796:21;;;;;;;;;;;;;;;;27784:7;:11;;:34;;;;:::i;:::-;27774:44;;27583:3;;;;;:::i;:::-;;;;27541:289;;;;27854:20;27866:7;;27854;;:11;;:20;;;;:::i;:::-;27844:7;:30;27840:61;;;27884:7;;27893;;27876:25;;;;;;;;27840:61;27920:7;27929;27912:25;;;;;;27384:561;;;:::o;26289:408::-;26349:7;26358;26367;26376;26396:12;26411:27;26430:7;26411:18;:27::i;:::-;26396:42;;26449:18;26470:30;26492:7;26470:21;:30::i;:::-;26449:51;;26511:12;26526:24;26542:7;26526:15;:24::i;:::-;26511:39;;26561:23;26587:43;26625:4;26587:33;26609:10;26587:17;26599:4;26587:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:43;;;;:::i;:::-;26561:69;;26649:15;26666:4;26672:10;26684:4;26641:48;;;;;;;;;;;;26289:408;;;;;:::o;26705:500::-;26834:7;26843;26852;26872:15;26890:24;26902:11;26890:7;:11;;:24;;;;:::i;:::-;26872:42;;26925:12;26940:21;26949:11;26940:4;:8;;:21;;;;:::i;:::-;26925:36;;26972:18;26993:27;27008:11;26993:10;:14;;:27;;;;:::i;:::-;26972:48;;27031:12;27046:21;27055:11;27046:4;:8;;:21;;;;:::i;:::-;27031:36;;27078:23;27104:43;27142:4;27104:33;27126:10;27104:17;27116:4;27104:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:43;;;;:::i;:::-;27078:69;;27166:7;27175:15;27192:4;27158:39;;;;;;;;;;;26705:500;;;;;;;;;:::o;32532:589::-;32658:21;32696:1;32682:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32658:40;;32727:4;32709;32714:1;32709:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;32753:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32743:4;32748:1;32743:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;32788:62;32805:4;32820:15;32838:11;32788:8;:62::i;:::-;32889:15;:66;;;32970:11;32996:1;33040:4;33067;33087:15;32889:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32532:589;;:::o;33129:513::-;33277:62;33294:4;33309:15;33327:11;33277:8;:62::i;:::-;33382:15;:31;;;33421:9;33454:4;33474:11;33500:1;33543;33586:7;:5;:7::i;:::-;33608:15;33382:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;33129:513;;:::o;29183:320::-;29243:1;29229:10;;:15;:37;;;;;29265:1;29248:13;;:18;29229:37;29226:49;;;29268:7;;29226:49;29316:10;;29295:18;:31;;;;29355:7;;29337:15;:25;;;;29397:13;;29373:21;:37;;;;29444:1;29431:10;:14;;;;29466:1;29456:7;:11;;;;29494:1;29478:13;:17;;;;29183:320;:::o;35747:605::-;35850:15;35867:23;35892:12;35906:23;35931:12;35945:18;35965:12;35981:19;35992:7;35981:10;:19::i;:::-;35849:151;;;;;;;;;;;;;;36029:28;36049:7;36029;:15;36037:6;36029:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;36011:7;:15;36019:6;36011:15;;;;;;;;;;;;;;;:46;;;;36086:28;36106:7;36086;:15;36094:6;36086:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;36068:7;:15;36076:6;36068:15;;;;;;;;;;;;;;;:46;;;;36146:39;36169:15;36146:7;:18;36154:9;36146:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;36125:7;:18;36133:9;36125:18;;;;;;;;;;;;;;;:60;;;;36199:26;36214:10;36199:14;:26::i;:::-;36236:14;36245:4;36236:8;:14::i;:::-;36261:23;36273:4;36279;36261:11;:23::i;:::-;36317:9;36300:44;;36309:6;36300:44;;;36328:15;36300:44;;;;;;:::i;:::-;;;;;;;;35747:605;;;;;;;;;;:::o;35114:625::-;35215:15;35232:23;35257:12;35271:23;35296:12;35310:18;35330:12;35346:19;35357:7;35346:10;:19::i;:::-;35214:151;;;;;;;;;;;;;;35394:28;35414:7;35394;:15;35402:6;35394:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;35376:7;:15;35384:6;35376:15;;;;;;;;;;;;;;;:46;;;;35454:39;35477:15;35454:7;:18;35462:9;35454:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;35433:7;:18;35441:9;35433:18;;;;;;;;;;;;;;;:60;;;;35525:39;35548:15;35525:7;:18;35533:9;35525:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;35504:7;:18;35512:9;35504:18;;;;;;;;;;;;;;;:60;;;;35586:26;35601:10;35586:14;:26::i;:::-;35623:14;35632:4;35623:8;:14::i;:::-;35648:23;35660:4;35666;35648:11;:23::i;:::-;35704:9;35687:44;;35696:6;35687:44;;;35715:15;35687:44;;;;;;:::i;:::-;;;;;;;;35114:625;;;;;;;;;;:::o;34565:541::-;34664:15;34681:23;34706:12;34720:23;34745:12;34759:18;34779:12;34795:19;34806:7;34795:10;:19::i;:::-;34663:151;;;;;;;;;;;;;;34843:28;34863:7;34843;:15;34851:6;34843:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;34825:7;:15;34833:6;34825:15;;;;;;;;;;;;;;;:46;;;;34903:39;34926:15;34903:7;:18;34911:9;34903:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;34882:7;:18;34890:9;34882:18;;;;;;;;;;;;;;;:60;;;;34953:26;34968:10;34953:14;:26::i;:::-;34990:14;34999:4;34990:8;:14::i;:::-;35015:23;35027:4;35033;35015:11;:23::i;:::-;35071:9;35054:44;;35063:6;35054:44;;;35082:15;35054:44;;;;;;:::i;:::-;;;;;;;;34565:541;;;;;;;;;;:::o;23194:681::-;23297:15;23314:23;23339:12;23353:23;23378:12;23392:18;23412:12;23428:19;23439:7;23428:10;:19::i;:::-;23296:151;;;;;;;;;;;;;;23476:28;23496:7;23476;:15;23484:6;23476:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;23458:7;:15;23466:6;23458:15;;;;;;;;;;;;;;;:46;;;;23533:28;23553:7;23533;:15;23541:6;23533:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;23515:7;:15;23523:6;23515:15;;;;;;;;;;;;;;;:46;;;;23593:39;23616:15;23593:7;:18;23601:9;23593:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;23572:7;:18;23580:9;23572:18;;;;;;;;;;;;;;;:60;;;;23664:39;23687:15;23664:7;:18;23672:9;23664:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;23643:7;:18;23651:9;23643:18;;;;;;;;;;;;;;;:60;;;;23722:26;23737:10;23722:14;:26::i;:::-;23759:14;23768:4;23759:8;:14::i;:::-;23784:23;23796:4;23802;23784:11;:23::i;:::-;23840:9;23823:44;;23832:6;23823:44;;;23851:15;23823:44;;;;;;:::i;:::-;;;;;;;;23194:681;;;;;;;;;;:::o;29515:167::-;29572:18;;29559:10;:31;;;;29611:15;;29601:7;:25;;;;29653:21;;29637:13;:37;;;;29515:167::o;28675:160::-;28742:7;28769:58;28811:5;28769:23;28781:10;;28769:7;:11;;:23;;;;:::i;:::-;:27;;:58;;;;:::i;:::-;28762:65;;28675:160;;;:::o;29005:166::-;29075:7;29102:61;29147:5;29102:26;29114:13;;29102:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;29095:68;;29005:166;;;:::o;28843:154::-;28907:7;28934:55;28973:5;28934:20;28946:7;;28934;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;28927:62;;28843:154;;;:::o;27957:355::-;28020:19;28043:10;:8;:10::i;:::-;28020:33;;28064:18;28085:27;28100:11;28085:10;:14;;:27;;;;:::i;:::-;28064:48;;28148:38;28175:10;28148:7;:22;28164:4;28148:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;28123:7;:22;28139:4;28123:22;;;;;;;;;;;;;;;:63;;;;28200:11;:26;28220:4;28200:26;;;;;;;;;;;;;;;;;;;;;;;;;28197:107;;;28266:38;28293:10;28266:7;:22;28282:4;28266:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;28241:7;:22;28257:4;28241:22;;;;;;;;;;;;;;;:63;;;;28197:107;27957:355;;;:::o;28324:339::-;28375:19;28398:10;:8;:10::i;:::-;28375:33;;28419:12;28434:21;28443:11;28434:4;:8;;:21;;;;:::i;:::-;28419:36;;28495;28526:4;28495:7;:26;28503:17;;;;;;;;;;;28495:26;;;;;;;;;;;;;;;;:30;;:36;;;;:::i;:::-;28466:7;:26;28474:17;;;;;;;;;;;28466:26;;;;;;;;;;;;;;;:65;;;;28545:11;:30;28557:17;;;;;;;;;;;28545:30;;;;;;;;;;;;;;;;;;;;;;;;;28542:113;;;28619:36;28650:4;28619:7;:26;28627:17;;;;;;;;;;;28619:26;;;;;;;;;;;;;;;;:30;;:36;;;;:::i;:::-;28590:7;:26;28598:17;;;;;;;;;;;28590:26;;;;;;;;;;;;;;;:65;;;;28542:113;28324:339;;;:::o;25238:147::-;25316:17;25328:4;25316:7;;:11;;:17;;;;:::i;:::-;25306:7;:27;;;;25357:20;25372:4;25357:10;;:14;;:20;;;;:::i;:::-;25344:10;:33;;;;25238:147;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;318:367::-;;;451:3;444:4;436:6;432:17;428:27;418:2;;469:1;466;459:12;418:2;505:6;492:20;482:30;;535:18;527:6;524:30;521:2;;;567:1;564;557:12;521:2;604:4;596:6;592:17;580:29;;658:3;650:4;642:6;638:17;628:8;624:32;621:41;618:2;;;675:1;672;665:12;618:2;408:277;;;;;:::o;691:133::-;;772:6;759:20;750:29;;788:30;812:5;788:30;:::i;:::-;740:84;;;;:::o;830:139::-;;914:6;901:20;892:29;;930:33;957:5;930:33;:::i;:::-;882:87;;;;:::o;975:143::-;;1063:6;1057:13;1048:22;;1079:33;1106:5;1079:33;:::i;:::-;1038:80;;;;:::o;1124:262::-;;1232:2;1220:9;1211:7;1207:23;1203:32;1200:2;;;1248:1;1245;1238:12;1200:2;1291:1;1316:53;1361:7;1352:6;1341:9;1337:22;1316:53;:::i;:::-;1306:63;;1262:117;1190:196;;;;:::o;1392:284::-;;1511:2;1499:9;1490:7;1486:23;1482:32;1479:2;;;1527:1;1524;1517:12;1479:2;1570:1;1595:64;1651:7;1642:6;1631:9;1627:22;1595:64;:::i;:::-;1585:74;;1541:128;1469:207;;;;:::o;1682:407::-;;;1807:2;1795:9;1786:7;1782:23;1778:32;1775:2;;;1823:1;1820;1813:12;1775:2;1866:1;1891:53;1936:7;1927:6;1916:9;1912:22;1891:53;:::i;:::-;1881:63;;1837:117;1993:2;2019:53;2064:7;2055:6;2044:9;2040:22;2019:53;:::i;:::-;2009:63;;1964:118;1765:324;;;;;:::o;2095:552::-;;;;2237:2;2225:9;2216:7;2212:23;2208:32;2205:2;;;2253:1;2250;2243:12;2205:2;2296:1;2321:53;2366:7;2357:6;2346:9;2342:22;2321:53;:::i;:::-;2311:63;;2267:117;2423:2;2449:53;2494:7;2485:6;2474:9;2470:22;2449:53;:::i;:::-;2439:63;;2394:118;2551:2;2577:53;2622:7;2613:6;2602:9;2598:22;2577:53;:::i;:::-;2567:63;;2522:118;2195:452;;;;;:::o;2653:407::-;;;2778:2;2766:9;2757:7;2753:23;2749:32;2746:2;;;2794:1;2791;2784:12;2746:2;2837:1;2862:53;2907:7;2898:6;2887:9;2883:22;2862:53;:::i;:::-;2852:63;;2808:117;2964:2;2990:53;3035:7;3026:6;3015:9;3011:22;2990:53;:::i;:::-;2980:63;;2935:118;2736:324;;;;;:::o;3066:425::-;;;3209:2;3197:9;3188:7;3184:23;3180:32;3177:2;;;3225:1;3222;3215:12;3177:2;3296:1;3285:9;3281:17;3268:31;3326:18;3318:6;3315:30;3312:2;;;3358:1;3355;3348:12;3312:2;3394:80;3466:7;3457:6;3446:9;3442:22;3394:80;:::i;:::-;3376:98;;;;3239:245;3167:324;;;;;:::o;3497:262::-;;3605:2;3593:9;3584:7;3580:23;3576:32;3573:2;;;3621:1;3618;3611:12;3573:2;3664:1;3689:53;3734:7;3725:6;3714:9;3710:22;3689:53;:::i;:::-;3679:63;;3635:117;3563:196;;;;:::o;3765:401::-;;;3887:2;3875:9;3866:7;3862:23;3858:32;3855:2;;;3903:1;3900;3893:12;3855:2;3946:1;3971:53;4016:7;4007:6;3996:9;3992:22;3971:53;:::i;:::-;3961:63;;3917:117;4073:2;4099:50;4141:7;4132:6;4121:9;4117:22;4099:50;:::i;:::-;4089:60;;4044:115;3845:321;;;;;:::o;4172:596::-;;;;4325:2;4313:9;4304:7;4300:23;4296:32;4293:2;;;4341:1;4338;4331:12;4293:2;4384:1;4409:64;4465:7;4456:6;4445:9;4441:22;4409:64;:::i;:::-;4399:74;;4355:128;4522:2;4548:64;4604:7;4595:6;4584:9;4580:22;4548:64;:::i;:::-;4538:74;;4493:129;4661:2;4687:64;4743:7;4734:6;4723:9;4719:22;4687:64;:::i;:::-;4677:74;;4632:129;4283:485;;;;;:::o;4774:179::-;;4864:46;4906:3;4898:6;4864:46;:::i;:::-;4942:4;4937:3;4933:14;4919:28;;4854:99;;;;:::o;4959:108::-;5036:24;5054:5;5036:24;:::i;:::-;5031:3;5024:37;5014:53;;:::o;5073:118::-;5160:24;5178:5;5160:24;:::i;:::-;5155:3;5148:37;5138:53;;:::o;5227:732::-;;5375:54;5423:5;5375:54;:::i;:::-;5445:86;5524:6;5519:3;5445:86;:::i;:::-;5438:93;;5555:56;5605:5;5555:56;:::i;:::-;5634:7;5665:1;5650:284;5675:6;5672:1;5669:13;5650:284;;;5751:6;5745:13;5778:63;5837:3;5822:13;5778:63;:::i;:::-;5771:70;;5864:60;5917:6;5864:60;:::i;:::-;5854:70;;5710:224;5697:1;5694;5690:9;5685:14;;5650:284;;;5654:14;5950:3;5943:10;;5351:608;;;;;;;:::o;5965:109::-;6046:21;6061:5;6046:21;:::i;:::-;6041:3;6034:34;6024:50;;:::o;6080:185::-;6194:64;6252:5;6194:64;:::i;:::-;6189:3;6182:77;6172:93;;:::o;6271:147::-;6366:45;6405:5;6366:45;:::i;:::-;6361:3;6354:58;6344:74;;:::o;6424:364::-;;6540:39;6573:5;6540:39;:::i;:::-;6595:71;6659:6;6654:3;6595:71;:::i;:::-;6588:78;;6675:52;6720:6;6715:3;6708:4;6701:5;6697:16;6675:52;:::i;:::-;6752:29;6774:6;6752:29;:::i;:::-;6747:3;6743:39;6736:46;;6516:272;;;;;:::o;6794:366::-;;6957:67;7021:2;7016:3;6957:67;:::i;:::-;6950:74;;7033:93;7122:3;7033:93;:::i;:::-;7151:2;7146:3;7142:12;7135:19;;6940:220;;;:::o;7166:366::-;;7329:67;7393:2;7388:3;7329:67;:::i;:::-;7322:74;;7405:93;7494:3;7405:93;:::i;:::-;7523:2;7518:3;7514:12;7507:19;;7312:220;;;:::o;7538:366::-;;7701:67;7765:2;7760:3;7701:67;:::i;:::-;7694:74;;7777:93;7866:3;7777:93;:::i;:::-;7895:2;7890:3;7886:12;7879:19;;7684:220;;;:::o;7910:366::-;;8073:67;8137:2;8132:3;8073:67;:::i;:::-;8066:74;;8149:93;8238:3;8149:93;:::i;:::-;8267:2;8262:3;8258:12;8251:19;;8056:220;;;:::o;8282:366::-;;8445:67;8509:2;8504:3;8445:67;:::i;:::-;8438:74;;8521:93;8610:3;8521:93;:::i;:::-;8639:2;8634:3;8630:12;8623:19;;8428:220;;;:::o;8654:366::-;;8817:67;8881:2;8876:3;8817:67;:::i;:::-;8810:74;;8893:93;8982:3;8893:93;:::i;:::-;9011:2;9006:3;9002:12;8995:19;;8800:220;;;:::o;9026:366::-;;9189:67;9253:2;9248:3;9189:67;:::i;:::-;9182:74;;9265:93;9354:3;9265:93;:::i;:::-;9383:2;9378:3;9374:12;9367:19;;9172:220;;;:::o;9398:366::-;;9561:67;9625:2;9620:3;9561:67;:::i;:::-;9554:74;;9637:93;9726:3;9637:93;:::i;:::-;9755:2;9750:3;9746:12;9739:19;;9544:220;;;:::o;9770:366::-;;9933:67;9997:2;9992:3;9933:67;:::i;:::-;9926:74;;10009:93;10098:3;10009:93;:::i;:::-;10127:2;10122:3;10118:12;10111:19;;9916:220;;;:::o;10142:366::-;;10305:67;10369:2;10364:3;10305:67;:::i;:::-;10298:74;;10381:93;10470:3;10381:93;:::i;:::-;10499:2;10494:3;10490:12;10483:19;;10288:220;;;:::o;10514:366::-;;10677:67;10741:2;10736:3;10677:67;:::i;:::-;10670:74;;10753:93;10842:3;10753:93;:::i;:::-;10871:2;10866:3;10862:12;10855:19;;10660:220;;;:::o;10886:366::-;;11049:67;11113:2;11108:3;11049:67;:::i;:::-;11042:74;;11125:93;11214:3;11125:93;:::i;:::-;11243:2;11238:3;11234:12;11227:19;;11032:220;;;:::o;11258:366::-;;11421:67;11485:2;11480:3;11421:67;:::i;:::-;11414:74;;11497:93;11586:3;11497:93;:::i;:::-;11615:2;11610:3;11606:12;11599:19;;11404:220;;;:::o;11630:366::-;;11793:67;11857:2;11852:3;11793:67;:::i;:::-;11786:74;;11869:93;11958:3;11869:93;:::i;:::-;11987:2;11982:3;11978:12;11971:19;;11776:220;;;:::o;12002:118::-;12089:24;12107:5;12089:24;:::i;:::-;12084:3;12077:37;12067:53;;:::o;12126:112::-;12209:22;12225:5;12209:22;:::i;:::-;12204:3;12197:35;12187:51;;:::o;12244:222::-;;12375:2;12364:9;12360:18;12352:26;;12388:71;12456:1;12445:9;12441:17;12432:6;12388:71;:::i;:::-;12342:124;;;;:::o;12472:807::-;;12759:3;12748:9;12744:19;12736:27;;12773:71;12841:1;12830:9;12826:17;12817:6;12773:71;:::i;:::-;12854:72;12922:2;12911:9;12907:18;12898:6;12854:72;:::i;:::-;12936:80;13012:2;13001:9;12997:18;12988:6;12936:80;:::i;:::-;13026;13102:2;13091:9;13087:18;13078:6;13026:80;:::i;:::-;13116:73;13184:3;13173:9;13169:19;13160:6;13116:73;:::i;:::-;13199;13267:3;13256:9;13252:19;13243:6;13199:73;:::i;:::-;12726:553;;;;;;;;;:::o;13285:210::-;;13410:2;13399:9;13395:18;13387:26;;13423:65;13485:1;13474:9;13470:17;13461:6;13423:65;:::i;:::-;13377:118;;;;:::o;13501:276::-;;13659:2;13648:9;13644:18;13636:26;;13672:98;13767:1;13756:9;13752:17;13743:6;13672:98;:::i;:::-;13626:151;;;;:::o;13783:313::-;;13934:2;13923:9;13919:18;13911:26;;13983:9;13977:4;13973:20;13969:1;13958:9;13954:17;13947:47;14011:78;14084:4;14075:6;14011:78;:::i;:::-;14003:86;;13901:195;;;;:::o;14102:419::-;;14306:2;14295:9;14291:18;14283:26;;14355:9;14349:4;14345:20;14341:1;14330:9;14326:17;14319:47;14383:131;14509:4;14383:131;:::i;:::-;14375:139;;14273:248;;;:::o;14527:419::-;;14731:2;14720:9;14716:18;14708:26;;14780:9;14774:4;14770:20;14766:1;14755:9;14751:17;14744:47;14808:131;14934:4;14808:131;:::i;:::-;14800:139;;14698:248;;;:::o;14952:419::-;;15156:2;15145:9;15141:18;15133:26;;15205:9;15199:4;15195:20;15191:1;15180:9;15176:17;15169:47;15233:131;15359:4;15233:131;:::i;:::-;15225:139;;15123:248;;;:::o;15377:419::-;;15581:2;15570:9;15566:18;15558:26;;15630:9;15624:4;15620:20;15616:1;15605:9;15601:17;15594:47;15658:131;15784:4;15658:131;:::i;:::-;15650:139;;15548:248;;;:::o;15802:419::-;;16006:2;15995:9;15991:18;15983:26;;16055:9;16049:4;16045:20;16041:1;16030:9;16026:17;16019:47;16083:131;16209:4;16083:131;:::i;:::-;16075:139;;15973:248;;;:::o;16227:419::-;;16431:2;16420:9;16416:18;16408:26;;16480:9;16474:4;16470:20;16466:1;16455:9;16451:17;16444:47;16508:131;16634:4;16508:131;:::i;:::-;16500:139;;16398:248;;;:::o;16652:419::-;;16856:2;16845:9;16841:18;16833:26;;16905:9;16899:4;16895:20;16891:1;16880:9;16876:17;16869:47;16933:131;17059:4;16933:131;:::i;:::-;16925:139;;16823:248;;;:::o;17077:419::-;;17281:2;17270:9;17266:18;17258:26;;17330:9;17324:4;17320:20;17316:1;17305:9;17301:17;17294:47;17358:131;17484:4;17358:131;:::i;:::-;17350:139;;17248:248;;;:::o;17502:419::-;;17706:2;17695:9;17691:18;17683:26;;17755:9;17749:4;17745:20;17741:1;17730:9;17726:17;17719:47;17783:131;17909:4;17783:131;:::i;:::-;17775:139;;17673:248;;;:::o;17927:419::-;;18131:2;18120:9;18116:18;18108:26;;18180:9;18174:4;18170:20;18166:1;18155:9;18151:17;18144:47;18208:131;18334:4;18208:131;:::i;:::-;18200:139;;18098:248;;;:::o;18352:419::-;;18556:2;18545:9;18541:18;18533:26;;18605:9;18599:4;18595:20;18591:1;18580:9;18576:17;18569:47;18633:131;18759:4;18633:131;:::i;:::-;18625:139;;18523:248;;;:::o;18777:419::-;;18981:2;18970:9;18966:18;18958:26;;19030:9;19024:4;19020:20;19016:1;19005:9;19001:17;18994:47;19058:131;19184:4;19058:131;:::i;:::-;19050:139;;18948:248;;;:::o;19202:419::-;;19406:2;19395:9;19391:18;19383:26;;19455:9;19449:4;19445:20;19441:1;19430:9;19426:17;19419:47;19483:131;19609:4;19483:131;:::i;:::-;19475:139;;19373:248;;;:::o;19627:419::-;;19831:2;19820:9;19816:18;19808:26;;19880:9;19874:4;19870:20;19866:1;19855:9;19851:17;19844:47;19908:131;20034:4;19908:131;:::i;:::-;19900:139;;19798:248;;;:::o;20052:222::-;;20183:2;20172:9;20168:18;20160:26;;20196:71;20264:1;20253:9;20249:17;20240:6;20196:71;:::i;:::-;20150:124;;;;:::o;20280:831::-;;20581:3;20570:9;20566:19;20558:27;;20595:71;20663:1;20652:9;20648:17;20639:6;20595:71;:::i;:::-;20676:80;20752:2;20741:9;20737:18;20728:6;20676:80;:::i;:::-;20803:9;20797:4;20793:20;20788:2;20777:9;20773:18;20766:48;20831:108;20934:4;20925:6;20831:108;:::i;:::-;20823:116;;20949:72;21017:2;21006:9;21002:18;20993:6;20949:72;:::i;:::-;21031:73;21099:3;21088:9;21084:19;21075:6;21031:73;:::i;:::-;20548:563;;;;;;;;:::o;21117:442::-;;21304:2;21293:9;21289:18;21281:26;;21317:71;21385:1;21374:9;21370:17;21361:6;21317:71;:::i;:::-;21398:72;21466:2;21455:9;21451:18;21442:6;21398:72;:::i;:::-;21480;21548:2;21537:9;21533:18;21524:6;21480:72;:::i;:::-;21271:288;;;;;;:::o;21565:214::-;;21692:2;21681:9;21677:18;21669:26;;21705:67;21769:1;21758:9;21754:17;21745:6;21705:67;:::i;:::-;21659:120;;;;:::o;21785:132::-;;21875:3;21867:11;;21905:4;21900:3;21896:14;21888:22;;21857:60;;;:::o;21923:114::-;;22024:5;22018:12;22008:22;;21997:40;;;:::o;22043:99::-;;22129:5;22123:12;22113:22;;22102:40;;;:::o;22148:113::-;;22250:4;22245:3;22241:14;22233:22;;22223:38;;;:::o;22267:184::-;;22400:6;22395:3;22388:19;22440:4;22435:3;22431:14;22416:29;;22378:73;;;;:::o;22457:169::-;;22575:6;22570:3;22563:19;22615:4;22610:3;22606:14;22591:29;;22553:73;;;;:::o;22632:305::-;;22691:20;22709:1;22691:20;:::i;:::-;22686:25;;22725:20;22743:1;22725:20;:::i;:::-;22720:25;;22879:1;22811:66;22807:74;22804:1;22801:81;22798:2;;;22885:18;;:::i;:::-;22798:2;22929:1;22926;22922:9;22915:16;;22676:261;;;;:::o;22943:185::-;;23000:20;23018:1;23000:20;:::i;:::-;22995:25;;23034:20;23052:1;23034:20;:::i;:::-;23029:25;;23073:1;23063:2;;23078:18;;:::i;:::-;23063:2;23120:1;23117;23113:9;23108:14;;22985:143;;;;:::o;23134:348::-;;23197:20;23215:1;23197:20;:::i;:::-;23192:25;;23231:20;23249:1;23231:20;:::i;:::-;23226:25;;23419:1;23351:66;23347:74;23344:1;23341:81;23336:1;23329:9;23322:17;23318:105;23315:2;;;23426:18;;:::i;:::-;23315:2;23474:1;23471;23467:9;23456:20;;23182:300;;;;:::o;23488:191::-;;23548:20;23566:1;23548:20;:::i;:::-;23543:25;;23582:20;23600:1;23582:20;:::i;:::-;23577:25;;23621:1;23618;23615:8;23612:2;;;23626:18;;:::i;:::-;23612:2;23671:1;23668;23664:9;23656:17;;23533:146;;;;:::o;23685:96::-;;23751:24;23769:5;23751:24;:::i;:::-;23740:35;;23730:51;;;:::o;23787:90::-;;23864:5;23857:13;23850:21;23839:32;;23829:48;;;:::o;23883:126::-;;23960:42;23953:5;23949:54;23938:65;;23928:81;;;:::o;24015:77::-;;24081:5;24070:16;;24060:32;;;:::o;24098:86::-;;24173:4;24166:5;24162:16;24151:27;;24141:43;;;:::o;24190:180::-;;24300:64;24358:5;24300:64;:::i;:::-;24287:77;;24277:93;;;:::o;24376:140::-;;24486:24;24504:5;24486:24;:::i;:::-;24473:37;;24463:53;;;:::o;24522:121::-;;24613:24;24631:5;24613:24;:::i;:::-;24600:37;;24590:53;;;:::o;24649:307::-;24717:1;24727:113;24741:6;24738:1;24735:13;24727:113;;;24826:1;24821:3;24817:11;24811:18;24807:1;24802:3;24798:11;24791:39;24763:2;24760:1;24756:10;24751:15;;24727:113;;;24858:6;24855:1;24852:13;24849:2;;;24938:1;24929:6;24924:3;24920:16;24913:27;24849:2;24698:258;;;;:::o;24962:320::-;;25043:1;25037:4;25033:12;25023:22;;25090:1;25084:4;25080:12;25111:18;25101:2;;25167:4;25159:6;25155:17;25145:27;;25101:2;25229;25221:6;25218:14;25198:18;25195:38;25192:2;;;25248:18;;:::i;:::-;25192:2;25013:269;;;;:::o;25288:233::-;;25350:24;25368:5;25350:24;:::i;:::-;25341:33;;25396:66;25389:5;25386:77;25383:2;;;25466:18;;:::i;:::-;25383:2;25513:1;25506:5;25502:13;25495:20;;25331:190;;;:::o;25527:180::-;25575:77;25572:1;25565:88;25672:4;25669:1;25662:15;25696:4;25693:1;25686:15;25713:180;25761:77;25758:1;25751:88;25858:4;25855:1;25848:15;25882:4;25879:1;25872:15;25899:180;25947:77;25944:1;25937:88;26044:4;26041:1;26034:15;26068:4;26065:1;26058:15;26085:102;;26177:2;26173:7;26168:2;26161:5;26157:14;26153:28;26143:38;;26133:54;;;:::o;26193:222::-;26333:34;26329:1;26321:6;26317:14;26310:58;26402:5;26397:2;26389:6;26385:15;26378:30;26299:116;:::o;26421:229::-;26561:34;26557:1;26549:6;26545:14;26538:58;26630:12;26625:2;26617:6;26613:15;26606:37;26527:123;:::o;26656:225::-;26796:34;26792:1;26784:6;26780:14;26773:58;26865:8;26860:2;26852:6;26848:15;26841:33;26762:119;:::o;26887:221::-;27027:34;27023:1;27015:6;27011:14;27004:58;27096:4;27091:2;27083:6;27079:15;27072:29;26993:115;:::o;27114:177::-;27254:29;27250:1;27242:6;27238:14;27231:53;27220:71;:::o;27297:177::-;27437:29;27433:1;27425:6;27421:14;27414:53;27403:71;:::o;27480:177::-;27620:29;27616:1;27608:6;27604:14;27597:53;27586:71;:::o;27663:181::-;27803:33;27799:1;27791:6;27787:14;27780:57;27769:75;:::o;27850:227::-;27990:34;27986:1;27978:6;27974:14;27967:58;28059:10;28054:2;28046:6;28042:15;28035:35;27956:121;:::o;28083:182::-;28223:34;28219:1;28211:6;28207:14;28200:58;28189:76;:::o;28271:228::-;28411:34;28407:1;28399:6;28395:14;28388:58;28480:11;28475:2;28467:6;28463:15;28456:36;28377:122;:::o;28505:224::-;28645:34;28641:1;28633:6;28629:14;28622:58;28714:7;28709:2;28701:6;28697:15;28690:32;28611:118;:::o;28735:223::-;28875:34;28871:1;28863:6;28859:14;28852:58;28944:6;28939:2;28931:6;28927:15;28920:31;28841:117;:::o;28964:231::-;29104:34;29100:1;29092:6;29088:14;29081:58;29173:14;29168:2;29160:6;29156:15;29149:39;29070:125;:::o;29201:122::-;29274:24;29292:5;29274:24;:::i;:::-;29267:5;29264:35;29254:2;;29313:1;29310;29303:12;29254:2;29244:79;:::o;29329:116::-;29399:21;29414:5;29399:21;:::i;:::-;29392:5;29389:32;29379:2;;29435:1;29432;29425:12;29379:2;29369:76;:::o;29451:122::-;29524:24;29542:5;29524:24;:::i;:::-;29517:5;29514:35;29504:2;;29563:1;29560;29553:12;29504:2;29494:79;:::o

Swarm Source

ipfs://9be1c2f4a84729c60733b8eace35b59b7463aed2b969e44606efa1587334f365
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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