ETH Price: $3,346.37 (-1.26%)

Token

Gengar (GHOST)
 

Overview

Max Total Supply

10,000,000 GHOST

Holders

163

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.567451531 GHOST

Value
$0.00
0x9a6Af8097b6CDc97421Af558338a012d097b9852
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:
Gengar

Compiler Version
v0.8.5+commit.a4f2e591

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-30
*/

//⠀⠀⠀⠀⠀⢸⠓⢄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
//⠀⠀⠀  ⢸⠀⠀ ⠑⢤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
//⠀⠀⠀⠀⠀⢸⡆⠀⠀⠀⠙⢤⡷⣤⣦⣀⠤⠖⠚⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀
//⣠⡿⠢⢄⡀⠀⡇⠀⠀⠀⠀⠀⠉⠀⠀⠀⠀⠀⠸⠷⣶⠂⠀⠀⠀⣀⣀⠀⠀⠀
//⢸⣃⠀⠀⠉⠳⣷⠞⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠉⠉⠉⠉⠉⢉⡭⠋
//⠀⠘⣆⠀⠀⠀⠁⠀⢀⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡴⠋⠀⠀
//⠀⠀⠘⣦⠆⠀⠀⢀⡎⢹⡀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⡀⣠⠔⠋⠀⠀⠀⠀
//⠀⠀⠀⡏⠀⠀⣆⠘⣄⠸⢧⠀⠀⠀⠀⢀⣠⠖⢻⠀⠀⠀⣿⢥⣄⣀⣀⣀⠀⠀
//⠀⠀⢸⠁⠀⠀⡏⢣⣌⠙⠚⠀⠀⠠⣖⡛⠀⣠⠏⠀⠀⠀⠇⠀⠀⠀⠀⢙⣣⠄
//⠀⠀⢸⡀⠀⠀⠳⡞⠈⢻⠶⠤⣄⣀⣈⣉⣉⣡⡔⠀⠀⢀⠀⠀⣀⡤⠖⠚⠀⠀
// ⡼⣇⠀⠀⠀⠙⠦⣞⡀⠀⢀⡏⠀⢸⣣⠞⠀⠀⠀⡼⠚⠋⠁⠀⠀⠀⠀⠀
//⠀⢰⡇⠙⠀⠀⠀⠀⠀⠀⠉⠙⠚⠒⠚⠉⠀⠀⠀⠀⡼⠁⠀⠀⠀⠀⠀⠀⠀⠀
//⠀⠀⢧⡀⠀⢠⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⣞⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀
//⠀⠀⠀⠙⣶⣶⣿⠢⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
//⠀⠀⠀⠀⠀⠉⠀⠀⠀⠙⢿⣳⠞⠳⡄⠀⠀⠀⢀⡞⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
//⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠀⠀⠹⣄⣀⡤⠋⠀⠀⠀⠀⠀
//Gengar #94                 Socials
//                             TG: https://t.me/GengarERC
//                             Twitter: https://x.com/GengarERC
//                                 Web: https://GengarTheGhost.lol
// Ghost-Type
// Weight: 40.5 kg
// Height: 1.5 m
//
//Stats:
// Hp: 60
// Attack: 65
// Defense: 60
// Special-attack: 130
// Special-defense: 75
// Speed: 110
/**
 *Submitted for verification at BscScan.com on 2022-02-24
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.5;

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; 
        return msg.data;
    }
}

interface IBEP20 {
    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);
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view 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;
    }

    function getUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is still locked");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

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 Gengar is Context, IBEP20, Ownable {
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) public _isExcludedFromAutoLiquidity;
    mapping (address => bool) public _isExcludedFromAntiWhale;
    mapping (address => bool) public _isExcludedFromBuy;
    mapping (address => bool) public _isBlacklisted;
    mapping (address => bool) public _isExcludedFromMaxTx;

    address[] private _excluded;
    address private _teamWallet;
    address private _marketingWallet;

    address public constant _burnAddress = 0x000000000000000000000000000000000000dEaD;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 10000000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private constant _name     = "Gengar";
    string private constant _symbol   = "GHOST";
    uint8  private constant _decimals = 9;
    
    uint256 private  _percentageOfLiquidityForTeam       = 1500; //LP tax is whatever is left remaining of 10,000, if marketing is 4000 and team is 4000, auto LP would be 2000
    uint256 private  _percentageOfLiquidityForMarketing = 6000;

    // transfer fee
    uint256 public  _taxFee       = 0; // tax fee is reflections
    uint256 public  _liquidityFee = 0; // ZERO tax for transfering tokens

    // buy fee
    uint256 public  _taxFeeBuy       = 0;
    uint256 public  _liquidityFeeBuy = 1; //

    // sell fee
    uint256 public  _taxFeeSell       = 1;
    uint256 public  _liquidityFeeSell = 1;
    
    uint256 public  _maxTxAmount     = _tTotal * 200 / 10000;
    uint256 public  _minTokenBalance = _tTotal / 200;
    
    // auto liquidity
    IUniswapV2Router02 public uniswapV2Router;
    address            public uniswapV2Pair;
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 bnbReceived,
        uint256 tokensIntoLiquidity
    );

    // no big willies
    bool    public _isAntiWhaleEnabled = true;
    uint256 public _antiWhaleThreshold = _tTotal * 200 / 10000; // 2% of total supply

    event TeamSent(address to, uint256 bnbSent);
    event MarketingSent(address to, uint256 bnbSent);
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        _rOwned[_msgSender()] = _rTotal;
        // 
        _teamWallet       = 0x0893c9d2A1bcC96487522e8A2d1Cb436776C6fea;
        _marketingWallet = 0x38F277CAFda7a27C86E96ff27A0F97f3B92Ed293;
        
        // uniswap
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        
        // exclude system contracts
        _isExcludedFromFee[owner()]       = true;
        _isExcludedFromFee[address(this)] = true;

        _isExcludedFromAutoLiquidity[uniswapV2Pair]            = true;
        _isExcludedFromAutoLiquidity[address(uniswapV2Router)] = true;

        _isExcludedFromAntiWhale[owner()]                  = true;
        _isExcludedFromAntiWhale[address(this)]            = true;
        _isExcludedFromAntiWhale[uniswapV2Pair]            = true;
        _isExcludedFromAntiWhale[address(uniswapV2Router)] = true;
        _isExcludedFromAntiWhale[_burnAddress]             = true;
        _isExcludedFromMaxTx[owner()] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

    function totalSupply() public view override returns (uint256) {
        // to reflect burned amount in total supply
        // return _tTotal - balanceOf(_burnAddress);

        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()] - amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        (, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        uint256 currentRate = _getRate();

        if (!deductTransferFee) {
            (uint256 rAmount,,) = _getRValues(tAmount, tFee, tLiquidity, currentRate);
            return rAmount;

        } else {
            (, uint256 rTransferAmount,) = _getRValues(tAmount, tFee, tLiquidity, currentRate);
            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 / currentRate;
    }

    function excludeFromReward(address account) public onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");

        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner {
        require(_isExcluded[account], "Account is already excluded");

        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

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

    function setMaxTx(uint256 maxTx) external onlyOwner {
        _maxTxAmount = maxTx;
    }

    function setMinTokenBalance(uint256 minTokenBalance) external onlyOwner {
        _minTokenBalance = minTokenBalance;
    }

    function setAntiWhaleEnabled(bool e) external onlyOwner {
        _isAntiWhaleEnabled = e;
    }

    function setExcludedFromAntiWhale(address account, bool e) external onlyOwner {
        _isExcludedFromAntiWhale[account] = e;
    }

    function setExcludedFromBuy(address account, bool e) external onlyOwner {
        _isExcludedFromBuy[account] = e;
    }

    function setExcludedFromMaxTx(address account, bool e) external onlyOwner {
        _isExcludedFromMaxTx[account] = e;
    }

    function setAntiWhaleThreshold(uint256 antiWhaleThreshold) external onlyOwner {
        _antiWhaleThreshold = antiWhaleThreshold;
    }

    function setFeesTransfer(uint taxFee, uint liquidityFee) external onlyOwner {
        _taxFee       = taxFee;
        _liquidityFee = liquidityFee;
    }

    function setFeesBuy(uint taxFee, uint liquidityFee) external onlyOwner {
        _taxFeeBuy       = taxFee;
        _liquidityFeeBuy = liquidityFee;
    }

    function setFeesSell(uint taxFee, uint liquidityFee) external onlyOwner {
        _taxFeeSell       = taxFee;
        _liquidityFeeSell = liquidityFee;
    }

    function setAddresses(address teamWallet, address marketingWallet) external onlyOwner {
        _teamWallet       = teamWallet;
        _marketingWallet = marketingWallet;
    }

    function setLiquidityPercentages(uint256 teamFee, uint256 marketingFee) external onlyOwner {
        _percentageOfLiquidityForTeam        = teamFee;
        _percentageOfLiquidityForMarketing  = marketingFee;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
    receive() external payable {}

    function setUniswapRouter(address r) external onlyOwner {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(r);
        uniswapV2Router = _uniswapV2Router;
    }

    function setUniswapPair(address p) external onlyOwner {
        uniswapV2Pair = p;
    }

    function setExcludedFromAutoLiquidity(address a, bool b) external onlyOwner {
        _isExcludedFromAutoLiquidity[a] = b;
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal    = _rTotal - rFee;
        _tFeeTotal = _tFeeTotal + tFee;
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee       = calculateFee(tAmount, _taxFee);
        uint256 tLiquidity = calculateFee(tAmount, _liquidityFee);
        uint256 tTransferAmount = tAmount - tFee;
        tTransferAmount = tTransferAmount - tLiquidity;
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount    = tAmount * currentRate;
        uint256 rFee       = tFee * currentRate;
        uint256 rLiquidity = tLiquidity * currentRate;
        uint256 rTransferAmount = rAmount - rFee;
        rTransferAmount = rTransferAmount - rLiquidity;
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply / 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 - _rOwned[_excluded[i]];
            tSupply = tSupply - _tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function takeTransactionFee(address sender, address to, uint256 tAmount, uint256 currentRate) private {
        if (tAmount == 0) { return; }

        uint256 rAmount = tAmount * currentRate;
        _rOwned[to] = _rOwned[to] + rAmount;
        if (_isExcluded[to]) {
            _tOwned[to] = _tOwned[to] + tAmount;
        }
        emit Transfer(sender, to, tAmount);
    }
    
    function calculateFee(uint256 amount, uint256 fee) private pure returns (uint256) {
        return amount * fee / 100;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "BEP20: approve from the zero address");
        require(spender != address(0), "BEP20: approve to the zero address");

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {  
        
        require(!_isBlacklisted[from] && !_isBlacklisted[to], "This address is blacklisted");
        require(from != address(0), "BEP20: transfer from the zero address");
        require(to != address(0), "BEP20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        if (!_isExcludedFromMaxTx[from]) {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }

        // prevent blacklisted addresses to buy
        if (from == uniswapV2Pair && to != address(uniswapV2Router)) {
            require(!_isExcludedFromBuy[to], "Address is not allowed to buy");
        }

        /*
            - swapAndLiquify will be initiated when token balance of this contract
            has accumulated enough over the minimum number of tokens required.
            - don't get caught in a circular liquidity event.
            - don't swapAndLiquify if sender is uniswap pair.
        */
        uint256 contractTokenBalance = balanceOf(address(this));
        
        if (contractTokenBalance >= _maxTxAmount) {
            contractTokenBalance = _maxTxAmount;
        }
        
        bool isOverMinTokenBalance = contractTokenBalance >= _minTokenBalance;
        if (
            isOverMinTokenBalance &&
            !inSwapAndLiquify &&
            !_isExcludedFromAutoLiquidity[from] &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = _minTokenBalance;
            swapAndLiquify(contractTokenBalance);
        }

        
        bool takeFee = true;
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }
        _tokenTransfer(from, to, amount, takeFee);

        /*
            anti whale: when buying, check if sender balance will be greater than anti whale threshold
            if greater, throw error
        */
        if ( _isAntiWhaleEnabled && !_isExcludedFromAntiWhale[to] ) {
            require(balanceOf(to) <= _antiWhaleThreshold, "Anti whale: can't hold more than the specified threshold");
        }
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split contract balance into halves
        uint256 half      = contractTokenBalance / 2;
        uint256 otherHalf = contractTokenBalance - half;

        uint256 initialBalance = address(this).balance;

        swapTokensForBnb(half);

        uint256 newBalance = address(this).balance - initialBalance;
        uint256 bnbForTeam       = newBalance / 10000 * _percentageOfLiquidityForTeam;
        uint256 bnbForMarketing = newBalance / 10000 * _percentageOfLiquidityForMarketing;
        uint256 bnbForLiquidity = newBalance - bnbForTeam - bnbForMarketing;

        if ( bnbForTeam != 0 ) {
            emit TeamSent(_teamWallet, bnbForTeam);
            payable(_teamWallet).transfer(bnbForTeam);
        }
        if ( bnbForMarketing != 0 ) {
            emit MarketingSent(_marketingWallet, bnbForMarketing);
            payable(_marketingWallet).transfer(bnbForMarketing);
        }
        
        (uint256 tokenAdded, uint256 bnbAdded) = addLiquidity(otherHalf, bnbForLiquidity);
        
        emit SwapAndLiquify(half, bnbAdded, tokenAdded);
    }

    function swapTokensForBnb(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 BNB
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 bnbAmount) private returns (uint256, uint256) {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        (uint amountToken, uint amountETH, ) = uniswapV2Router.addLiquidityETH{value: bnbAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
        return (uint256(amountToken), uint256(amountETH));
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private {
        uint256 previousTaxFee       = _taxFee;
        uint256 previousLiquidityFee = _liquidityFee;
        
        bool isBuy  = sender == uniswapV2Pair && recipient != address(uniswapV2Router);
        bool isSell = recipient == uniswapV2Pair;
        
        if (!takeFee) {
            _taxFee       = 0;
            _liquidityFee = 0;

        } else if (isBuy) { 
            _taxFee       = _taxFeeBuy;
            _liquidityFee = _liquidityFeeBuy;

        } else if (isSell) { 
            _taxFee       = _taxFeeSell;
            _liquidityFee = _liquidityFeeSell;
        }
        
        _transferStandard(sender, recipient, amount);
        
        if (!takeFee || isBuy || isSell) {
            _taxFee       = previousTaxFee;
            _liquidityFee = previousLiquidityFee;
        }
    }


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

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, currentRate);

        _rOwned[sender] = _rOwned[sender] - rAmount;
        if (_isExcluded[sender]) {
            _tOwned[sender] = _tOwned[sender] - tAmount;
        }

        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
        if (_isExcluded[recipient]) {
            _tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
        }

        takeTransactionFee(sender, address(this), tLiquidity, currentRate);
        _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":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"bnbSent","type":"uint256"}],"name":"MarketingSent","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":"bnbReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","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":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"bnbSent","type":"uint256"}],"name":"TeamSent","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":"_antiWhaleThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_isAntiWhaleEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromAntiWhale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromAutoLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromBuy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromMaxTx","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":"_liquidityFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_minTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFeeSell","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":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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":"address","name":"teamWallet","type":"address"},{"internalType":"address","name":"marketingWallet","type":"address"}],"name":"setAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"e","type":"bool"}],"name":"setAntiWhaleEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"antiWhaleThreshold","type":"uint256"}],"name":"setAntiWhaleThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"e","type":"bool"}],"name":"setExcludedFromAntiWhale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"},{"internalType":"bool","name":"b","type":"bool"}],"name":"setExcludedFromAutoLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"e","type":"bool"}],"name":"setExcludedFromBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"e","type":"bool"}],"name":"setExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"e","type":"bool"}],"name":"setExcludedFromMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setFeesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setFeesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setFeesTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"teamFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"setLiquidityPercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"setMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minTokenBalance","type":"uint256"}],"name":"setMinTokenBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"p","type":"address"}],"name":"setUniswapPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"r","type":"address"}],"name":"setUniswapRouter","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":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052662386f26fc1000060105560105460001962000021919062000b78565b60001962000030919062000aff565b6011556105dc601355611770601455600060155560006016556000601755600160185560016019556001601a5561271060c860105462000071919062000a9e565b6200007d919062000a66565b601b5560c860105462000091919062000a66565b601c556001601e60156101000a81548160ff0219169083151502179055506001601e60166101000a81548160ff02191690831515021790555061271060c8601054620000de919062000a9e565b620000ea919062000a66565b601f55348015620000fa57600080fd5b5060006200010d6200098060201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060115460036000620001c26200098060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550730893c9d2a1bcc96487522e8a2d1cb436776c6fea600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507338f277cafda7a27c86e96ff27a0f97f3b92ed293600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200030a57600080fd5b505afa1580156200031f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003459190620009c8565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003a857600080fd5b505afa158015620003bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e39190620009c8565b6040518363ffffffff1660e01b81526004016200040292919062000a1c565b602060405180830381600087803b1580156200041d57600080fd5b505af115801562000432573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004589190620009c8565b601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160056000620004ef6200098860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000620006a26200098860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016009600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000620008af6200098860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620009106200098060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60105460405162000971919062000a49565b60405180910390a35062000c2d565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050620009c28162000c13565b92915050565b600060208284031215620009e157620009e062000c0e565b5b6000620009f184828501620009b1565b91505092915050565b62000a058162000b3a565b82525050565b62000a168162000b6e565b82525050565b600060408201905062000a336000830185620009fa565b62000a426020830184620009fa565b9392505050565b600060208201905062000a60600083018462000a0b565b92915050565b600062000a738262000b6e565b915062000a808362000b6e565b92508262000a935762000a9262000bdf565b5b828204905092915050565b600062000aab8262000b6e565b915062000ab88362000b6e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000af45762000af362000bb0565b5b828202905092915050565b600062000b0c8262000b6e565b915062000b198362000b6e565b92508282101562000b2f5762000b2e62000bb0565b5b828203905092915050565b600062000b478262000b4e565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600062000b858262000b6e565b915062000b928362000b6e565b92508262000ba55762000ba462000bdf565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600080fd5b62000c1e8162000b3a565b811462000c2a57600080fd5b50565b615ebc8062000c3d6000396000f3fe6080604052600436106103b15760003560e01c80636bc87c3a116101e7578063a69df4b51161010d578063c49b9a80116100a0578063d8d89bc61161006f578063d8d89bc614610e37578063dd46706414610e62578063dd62ed3e14610e8b578063f2fde38b14610ec8576103b8565b8063c49b9a8014610d91578063c7f59a6714610dba578063d4c70c8d14610de3578063d5aed6bf14610e0e576103b8565b8063baa04398116100dc578063baa0439814610cd7578063bc33718214610d14578063bd3900c014610d3d578063bea9849e14610d68576103b8565b8063a69df4b514610c31578063a9059cbb14610c48578063aa5f57ca14610c85578063b0ac157114610cae576103b8565b806389dfe6fd1161018557806395d89b411161015457806395d89b4114610b755780639e3a940914610ba05780639fe6409414610bcb578063a457c2d714610bf4576103b8565b806389dfe6fd14610abb5780638da5cb5b14610af857806390107afe14610b23578063935eb35f14610b4c576103b8565b80637921199f116101c15780637921199f146109ff578063795f694f14610a2a5780637d1db4a514610a5357806388f8202014610a7e576103b8565b80636bc87c3a1461098057806370a08231146109ab578063715018a6146109e8576103b8565b8063383c5900116102d757806352390c021161026a578063565836e711610239578063565836e7146108d85780635d83b45414610903578063602bc62b1461092c5780636612e66f14610957576103b8565b806352390c021461082057806352d6585814610849578063530948f6146108725780635342acb41461089b576103b8565b80634549b039116102a65780634549b0391461076457806349bd5a5e146107a15780634a49ac4c146107cc5780634a74bb02146107f5576103b8565b8063383c5900146106a857806339509351146106d15780633b124fe71461070e57806342737bb114610739576103b8565b80631cdd3be31161034f5780632d8381191161031e5780632d838119146105ee5780632f39f21f1461062b578063313ce567146106545780633685d4191461067f576103b8565b80631cdd3be31461050c57806323b872dd14610549578063260978d8146105865780632c505e90146105b1576103b8565b80630fa7c8691161038b5780630fa7c8691461046257806313114a9d1461048b5780631694505e146104b657806318160ddd146104e1576103b8565b806306fdde03146103bd57806307866291146103e8578063095ea7b314610425576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103d2610ef1565b6040516103df91906153c6565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a9190614cbc565b610f2e565b60405161041c9190615390565b60405180910390f35b34801561043157600080fd5b5061044c60048036038101906104479190614de9565b610f4e565b6040516104599190615390565b60405180910390f35b34801561046e57600080fd5b5061048960048036038101906104849190614f10565b610f6c565b005b34801561049757600080fd5b506104a0611013565b6040516104ad91906155e8565b60405180910390f35b3480156104c257600080fd5b506104cb61101d565b6040516104d891906153ab565b60405180910390f35b3480156104ed57600080fd5b506104f6611043565b60405161050391906155e8565b60405180910390f35b34801561051857600080fd5b50610533600480360381019061052e9190614cbc565b61104d565b6040516105409190615390565b60405180910390f35b34801561055557600080fd5b50610570600480360381019061056b9190614d56565b61106d565b60405161057d9190615390565b60405180910390f35b34801561059257600080fd5b5061059b611125565b6040516105a891906155e8565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d39190614cbc565b61112b565b6040516105e59190615390565b60405180910390f35b3480156105fa57600080fd5b5061061560048036038101906106109190614ea3565b61114b565b60405161062291906155e8565b60405180910390f35b34801561063757600080fd5b50610652600480360381019061064d9190614da9565b6111b2565b005b34801561066057600080fd5b506106696112a2565b6040516106769190615694565b60405180910390f35b34801561068b57600080fd5b506106a660048036038101906106a19190614cbc565b6112ab565b005b3480156106b457600080fd5b506106cf60048036038101906106ca9190614f10565b6115fa565b005b3480156106dd57600080fd5b506106f860048036038101906106f39190614de9565b6116a1565b6040516107059190615390565b60405180910390f35b34801561071a57600080fd5b5061072361174d565b60405161073091906155e8565b60405180910390f35b34801561074557600080fd5b5061074e611753565b60405161075b9190615390565b60405180910390f35b34801561077057600080fd5b5061078b60048036038101906107869190614ed0565b611766565b60405161079891906155e8565b60405180910390f35b3480156107ad57600080fd5b506107b661180d565b6040516107c391906152eb565b60405180910390f35b3480156107d857600080fd5b506107f360048036038101906107ee9190614cbc565b611833565b005b34801561080157600080fd5b5061080a611923565b6040516108179190615390565b60405180910390f35b34801561082c57600080fd5b5061084760048036038101906108429190614cbc565b611936565b005b34801561085557600080fd5b50610870600480360381019061086b9190614f10565b611bea565b005b34801561087e57600080fd5b5061089960048036038101906108949190614da9565b611c91565b005b3480156108a757600080fd5b506108c260048036038101906108bd9190614cbc565b611d81565b6040516108cf9190615390565b60405180910390f35b3480156108e457600080fd5b506108ed611dd7565b6040516108fa91906155e8565b60405180910390f35b34801561090f57600080fd5b5061092a60048036038101906109259190614da9565b611ddd565b005b34801561093857600080fd5b50610941611ecd565b60405161094e91906155e8565b60405180910390f35b34801561096357600080fd5b5061097e60048036038101906109799190614da9565b611ed7565b005b34801561098c57600080fd5b50610995611fc7565b6040516109a291906155e8565b60405180910390f35b3480156109b757600080fd5b506109d260048036038101906109cd9190614cbc565b611fcd565b6040516109df91906155e8565b60405180910390f35b3480156109f457600080fd5b506109fd6120b8565b005b348015610a0b57600080fd5b50610a1461220b565b604051610a2191906155e8565b60405180910390f35b348015610a3657600080fd5b50610a516004803603810190610a4c9190614ea3565b612211565b005b348015610a5f57600080fd5b50610a686122b0565b604051610a7591906155e8565b60405180910390f35b348015610a8a57600080fd5b50610aa56004803603810190610aa09190614cbc565b6122b6565b604051610ab29190615390565b60405180910390f35b348015610ac757600080fd5b50610ae26004803603810190610add9190614cbc565b61230c565b604051610aef9190615390565b60405180910390f35b348015610b0457600080fd5b50610b0d61232c565b604051610b1a91906152eb565b60405180910390f35b348015610b2f57600080fd5b50610b4a6004803603810190610b459190614d16565b612355565b005b348015610b5857600080fd5b50610b736004803603810190610b6e9190614e29565b612470565b005b348015610b8157600080fd5b50610b8a6125a8565b604051610b9791906153c6565b60405180910390f35b348015610bac57600080fd5b50610bb56125e5565b604051610bc291906155e8565b60405180910390f35b348015610bd757600080fd5b50610bf26004803603810190610bed9190614f10565b6125eb565b005b348015610c0057600080fd5b50610c1b6004803603810190610c169190614de9565b612692565b604051610c289190615390565b60405180910390f35b348015610c3d57600080fd5b50610c4661273e565b005b348015610c5457600080fd5b50610c6f6004803603810190610c6a9190614de9565b612912565b604051610c7c9190615390565b60405180910390f35b348015610c9157600080fd5b50610cac6004803603810190610ca79190614e76565b612930565b005b348015610cba57600080fd5b50610cd56004803603810190610cd09190614ea3565b6129e2565b005b348015610ce357600080fd5b50610cfe6004803603810190610cf99190614cbc565b612a81565b604051610d0b9190615390565b60405180910390f35b348015610d2057600080fd5b50610d3b6004803603810190610d369190614ea3565b612aa1565b005b348015610d4957600080fd5b50610d52612b40565b604051610d5f91906152eb565b60405180910390f35b348015610d7457600080fd5b50610d8f6004803603810190610d8a9190614cbc565b612b46565b005b348015610d9d57600080fd5b50610db86004803603810190610db39190614e76565b612c25565b005b348015610dc657600080fd5b50610de16004803603810190610ddc9190614da9565b612d0e565b005b348015610def57600080fd5b50610df8612dfe565b604051610e0591906155e8565b60405180910390f35b348015610e1a57600080fd5b50610e356004803603810190610e309190614cbc565b612e04565b005b348015610e4357600080fd5b50610e4c612edd565b604051610e5991906155e8565b60405180910390f35b348015610e6e57600080fd5b50610e896004803603810190610e849190614ea3565b612ee3565b005b348015610e9757600080fd5b50610eb26004803603810190610ead9190614d16565b6130aa565b604051610ebf91906155e8565b60405180910390f35b348015610ed457600080fd5b50610eef6004803603810190610eea9190614cbc565b613131565b005b60606040518060400160405280600681526020017f47656e6761720000000000000000000000000000000000000000000000000000815250905090565b600c6020528060005260406000206000915054906101000a900460ff1681565b6000610f62610f5b6132f3565b84846132fb565b6001905092915050565b610f746132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff890615508565b60405180910390fd5b81601581905550806016819055505050565b6000601254905090565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601054905090565b600b6020528060005260406000206000915054906101000a900460ff1681565b600061107a8484846134c6565b61111a846110866132f3565b84600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110d06132f3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461111591906157e5565b6132fb565b600190509392505050565b601f5481565b60096020528060005260406000206000915054906101000a900460ff1681565b6000601154821115611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118990615448565b60405180910390fd5b600061119c613ae1565b905080836111aa919061575a565b915050919050565b6111ba6132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123e90615508565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006009905090565b6112b36132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133790615508565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166113cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c390615488565b60405180910390fd5b60005b600d805490508110156115f6578173ffffffffffffffffffffffffffffffffffffffff16600d8281548110611407576114066159ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156115e357600d6001600d8054905061146291906157e5565b81548110611473576114726159ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d82815481106114b2576114b16159ad565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600d8054806115a9576115a861597e565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556115f6565b80806115ee906158d7565b9150506113cf565b5050565b6116026132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461168f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168690615508565b60405180910390fd5b81601381905550806014819055505050565b60006117436116ae6132f3565b8484600760006116bc6132f3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461173e9190615704565b6132fb565b6001905092915050565b60155481565b601e60169054906101000a900460ff1681565b60006010548311156117ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a4906154c8565b60405180910390fd5b6000806117b985613b05565b925092505060006117c8613ae1565b9050846117ed5760006117dd87858585613b5a565b5050905080945050505050611807565b60006117fb87858585613b5a565b50915050809450505050505b92915050565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61183b6132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bf90615508565b60405180910390fd5b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601e60159054906101000a900460ff1681565b61193e6132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c290615508565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4f90615488565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611b2c57611ae8600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461114b565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600d819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611bf26132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7690615508565b60405180910390fd5b81601781905550806018819055505050565b611c996132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1d90615508565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601a5481565b611de56132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6990615508565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600254905090565b611edf6132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6390615508565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60165481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561206857600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506120b3565b6120b0600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461114b565b90505b919050565b6120c06132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461214d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214490615508565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60195481565b6122196132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229d90615508565b60405180910390fd5b80601f8190555050565b601b5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600a6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61235d6132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e190615508565b60405180910390fd5b81600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6124786132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fc90615508565b60405180910390fd5b60005b828290508110156125a3576001600b600085858581811061252c5761252b6159ad565b5b90506020020160208101906125419190614cbc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508061259c906158d7565b9050612508565b505050565b60606040518060400160405280600581526020017f47484f5354000000000000000000000000000000000000000000000000000000815250905090565b60185481565b6125f36132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612680576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267790615508565b60405180910390fd5b8160198190555080601a819055505050565b600061273461269f6132f3565b8484600760006126ad6132f3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461272f91906157e5565b6132fb565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c5906155c8565b60405180910390fd5b6002544211612812576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280990615408565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061292661291f6132f3565b84846134c6565b6001905092915050565b6129386132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bc90615508565b60405180910390fd5b80601e60166101000a81548160ff02191690831515021790555050565b6129ea6132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6e90615508565b60405180910390fd5b80601c8190555050565b60086020528060005260406000206000915054906101000a900460ff1681565b612aa96132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2d90615508565b60405180910390fd5b80601b8190555050565b61dead81565b612b4e6132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd290615508565b60405180910390fd5b600081905080601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b612c2d6132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb190615508565b60405180910390fd5b80601e60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051612d039190615390565b60405180910390a150565b612d166132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9a90615508565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60175481565b612e0c6132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9090615508565b60405180910390fd5b80601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c5481565b612eeb6132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6f90615508565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080426130269190615704565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6131396132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146131c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131bd90615508565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613236576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322d90615468565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561336b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336290615428565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d2906155a8565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516134b991906155e8565b60405180910390a3505050565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561356a5750600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6135a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135a0906154a8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613619576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613610906153e8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368090615548565b60405180910390fd5b600081116136cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136c390615528565b60405180910390fd5b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661376357601b54811115613762576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613759906154e8565b60405180910390fd5b5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561380e5750601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156138a157600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156138a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161389790615568565b60405180910390fd5b5b60006138ac30611fcd565b9050601b5481106138bd57601b5490505b6000601c5482101590508080156138e15750601e60149054906101000a900460ff16155b80156139375750600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561394f5750601e60159054906101000a900460ff165b1561396357601c54915061396282613bc3565b5b600060019050600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613a0a5750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613a1457600090505b613a2086868684613e83565b601e60169054906101000a900460ff168015613a865750600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613ad957601f54613a9786611fcd565b1115613ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613acf90615588565b60405180910390fd5b5b505050505050565b6000806000613aee614022565b915091508082613afe919061575a565b9250505090565b600080600080613b17856015546142c0565b90506000613b27866016546142c0565b905060008287613b3791906157e5565b90508181613b4591906157e5565b90508083839550955095505050509193909250565b6000806000808488613b6c919061578b565b905060008588613b7c919061578b565b905060008688613b8c919061578b565b905060008284613b9c91906157e5565b90508181613baa91906157e5565b9050838184965096509650505050509450945094915050565b6001601e60146101000a81548160ff0219169083151502179055506000600282613bed919061575a565b905060008183613bfd91906157e5565b90506000479050613c0d836142e2565b60008147613c1b91906157e5565b9050600060135461271083613c30919061575a565b613c3a919061578b565b9050600060145461271084613c4f919061575a565b613c59919061578b565b90506000818385613c6a91906157e5565b613c7491906157e5565b905060008314613d43577fe9c7f2b211c760890268dc4250ab69d148f8840809c94c593b2bc430e673fa63600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684604051613cd1929190615306565b60405180910390a1600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015613d41573d6000803e3d6000fd5b505b60008214613e10577fbe61dd4a9cfefc957af4f19405f44fbde1f74724fcbf173c8b23225353eb4673600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683604051613d9e929190615306565b60405180910390a1600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613e0e573d6000803e3d6000fd5b505b600080613e1d8884614534565b915091507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561898284604051613e549392919061565d565b60405180910390a15050505050505050506000601e60146101000a81548160ff02191690831515021790555050565b60006015549050600060165490506000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16148015613f3e5750601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b90506000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614905084613faf5760006015819055506000601681905550613fe7565b8115613fcc57601754601581905550601854601681905550613fe6565b8015613fe557601954601581905550601a546016819055505b5b5b613ff288888861463b565b841580613ffc5750815b806140045750805b156140185783601581905550826016819055505b5050505050505050565b600080600060115490506000601054905060005b600d8054905081101561428a578260036000600d848154811061405c5761405b6159ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061414a57508160046000600d84815481106140e2576140e16159ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561416157601154601054945094505050506142bc565b60036000600d8381548110614179576141786159ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836141ea91906157e5565b925060046000600d8381548110614204576142036159ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261427591906157e5565b91508080614282906158d7565b915050614036565b5060105460115461429b919061575a565b8210156142b3576011546010549350935050506142bc565b81819350935050505b9091565b6000606482846142d0919061578b565b6142da919061575a565b905092915050565b6000600267ffffffffffffffff8111156142ff576142fe6159dc565b5b60405190808252806020026020018201604052801561432d5781602001602082028036833780820191505090505b5090503081600081518110614345576143446159ad565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156143e757600080fd5b505afa1580156143fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061441f9190614ce9565b81600181518110614433576144326159ad565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061449a30601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846132fb565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016144fe959493929190615603565b600060405180830381600087803b15801561451857600080fd5b505af115801561452c573d6000803e3d6000fd5b505050505050565b60008061456430601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866132fb565b600080601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198630896000806145b361232c565b426040518863ffffffff1660e01b81526004016145d59695949392919061532f565b6060604051808303818588803b1580156145ee57600080fd5b505af1158015614602573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906146279190614f50565b509150915081819350935050509250929050565b600080600061464984613b05565b9250925092506000614659613ae1565b9050600080600061466c88878787613b5a565b92509250925082600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546146bd91906157e5565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156147e15787600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461479d91906157e5565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b81600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461482c9190615704565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156149505786600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461490c9190615704565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61495c8a3087876149d7565b6149668187614bd1565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040516149c391906155e8565b60405180910390a350505050505050505050565b60008214156149e557614bcb565b600081836149f3919061578b565b905080600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a409190615704565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614b645782600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614b209190615704565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051614bc191906155e8565b60405180910390a3505b50505050565b81601154614bdf91906157e5565b60118190555080601254614bf39190615704565b6012819055505050565b600081359050614c0c81615e41565b92915050565b600081519050614c2181615e41565b92915050565b60008083601f840112614c3d57614c3c615a10565b5b8235905067ffffffffffffffff811115614c5a57614c59615a0b565b5b602083019150836020820283011115614c7657614c75615a15565b5b9250929050565b600081359050614c8c81615e58565b92915050565b600081359050614ca181615e6f565b92915050565b600081519050614cb681615e6f565b92915050565b600060208284031215614cd257614cd1615a1f565b5b6000614ce084828501614bfd565b91505092915050565b600060208284031215614cff57614cfe615a1f565b5b6000614d0d84828501614c12565b91505092915050565b60008060408385031215614d2d57614d2c615a1f565b5b6000614d3b85828601614bfd565b9250506020614d4c85828601614bfd565b9150509250929050565b600080600060608486031215614d6f57614d6e615a1f565b5b6000614d7d86828701614bfd565b9350506020614d8e86828701614bfd565b9250506040614d9f86828701614c92565b9150509250925092565b60008060408385031215614dc057614dbf615a1f565b5b6000614dce85828601614bfd565b9250506020614ddf85828601614c7d565b9150509250929050565b60008060408385031215614e0057614dff615a1f565b5b6000614e0e85828601614bfd565b9250506020614e1f85828601614c92565b9150509250929050565b60008060208385031215614e4057614e3f615a1f565b5b600083013567ffffffffffffffff811115614e5e57614e5d615a1a565b5b614e6a85828601614c27565b92509250509250929050565b600060208284031215614e8c57614e8b615a1f565b5b6000614e9a84828501614c7d565b91505092915050565b600060208284031215614eb957614eb8615a1f565b5b6000614ec784828501614c92565b91505092915050565b60008060408385031215614ee757614ee6615a1f565b5b6000614ef585828601614c92565b9250506020614f0685828601614c7d565b9150509250929050565b60008060408385031215614f2757614f26615a1f565b5b6000614f3585828601614c92565b9250506020614f4685828601614c92565b9150509250929050565b600080600060608486031215614f6957614f68615a1f565b5b6000614f7786828701614ca7565b9350506020614f8886828701614ca7565b9250506040614f9986828701614ca7565b9150509250925092565b6000614faf8383614fbb565b60208301905092915050565b614fc481615819565b82525050565b614fd381615819565b82525050565b6000614fe4826156bf565b614fee81856156e2565b9350614ff9836156af565b8060005b8381101561502a5781516150118882614fa3565b975061501c836156d5565b925050600181019050614ffd565b5085935050505092915050565b6150408161582b565b82525050565b61504f8161586e565b82525050565b61505e81615892565b82525050565b600061506f826156ca565b61507981856156f3565b93506150898185602086016158a4565b61509281615a24565b840191505092915050565b60006150aa6025836156f3565b91506150b582615a35565b604082019050919050565b60006150cd6018836156f3565b91506150d882615a84565b602082019050919050565b60006150f06024836156f3565b91506150fb82615aad565b604082019050919050565b6000615113602a836156f3565b915061511e82615afc565b604082019050919050565b60006151366026836156f3565b915061514182615b4b565b604082019050919050565b6000615159601b836156f3565b915061516482615b9a565b602082019050919050565b600061517c601b836156f3565b915061518782615bc3565b602082019050919050565b600061519f601f836156f3565b91506151aa82615bec565b602082019050919050565b60006151c26028836156f3565b91506151cd82615c15565b604082019050919050565b60006151e56020836156f3565b91506151f082615c64565b602082019050919050565b60006152086029836156f3565b915061521382615c8d565b604082019050919050565b600061522b6023836156f3565b915061523682615cdc565b604082019050919050565b600061524e601d836156f3565b915061525982615d2b565b602082019050919050565b60006152716038836156f3565b915061527c82615d54565b604082019050919050565b60006152946022836156f3565b915061529f82615da3565b604082019050919050565b60006152b76023836156f3565b91506152c282615df2565b604082019050919050565b6152d681615857565b82525050565b6152e581615861565b82525050565b60006020820190506153006000830184614fca565b92915050565b600060408201905061531b6000830185614fca565b61532860208301846152cd565b9392505050565b600060c0820190506153446000830189614fca565b61535160208301886152cd565b61535e6040830187615055565b61536b6060830186615055565b6153786080830185614fca565b61538560a08301846152cd565b979650505050505050565b60006020820190506153a56000830184615037565b92915050565b60006020820190506153c06000830184615046565b92915050565b600060208201905081810360008301526153e08184615064565b905092915050565b600060208201905081810360008301526154018161509d565b9050919050565b60006020820190508181036000830152615421816150c0565b9050919050565b60006020820190508181036000830152615441816150e3565b9050919050565b6000602082019050818103600083015261546181615106565b9050919050565b6000602082019050818103600083015261548181615129565b9050919050565b600060208201905081810360008301526154a18161514c565b9050919050565b600060208201905081810360008301526154c18161516f565b9050919050565b600060208201905081810360008301526154e181615192565b9050919050565b60006020820190508181036000830152615501816151b5565b9050919050565b60006020820190508181036000830152615521816151d8565b9050919050565b60006020820190508181036000830152615541816151fb565b9050919050565b600060208201905081810360008301526155618161521e565b9050919050565b6000602082019050818103600083015261558181615241565b9050919050565b600060208201905081810360008301526155a181615264565b9050919050565b600060208201905081810360008301526155c181615287565b9050919050565b600060208201905081810360008301526155e1816152aa565b9050919050565b60006020820190506155fd60008301846152cd565b92915050565b600060a08201905061561860008301886152cd565b6156256020830187615055565b81810360408301526156378186614fd9565b90506156466060830185614fca565b61565360808301846152cd565b9695505050505050565b600060608201905061567260008301866152cd565b61567f60208301856152cd565b61568c60408301846152cd565b949350505050565b60006020820190506156a960008301846152dc565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061570f82615857565b915061571a83615857565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561574f5761574e615920565b5b828201905092915050565b600061576582615857565b915061577083615857565b9250826157805761577f61594f565b5b828204905092915050565b600061579682615857565b91506157a183615857565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156157da576157d9615920565b5b828202905092915050565b60006157f082615857565b91506157fb83615857565b92508282101561580e5761580d615920565b5b828203905092915050565b600061582482615837565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061587982615880565b9050919050565b600061588b82615837565b9050919050565b600061589d82615857565b9050919050565b60005b838110156158c25780820151818401526020810190506158a7565b838111156158d1576000848401525b50505050565b60006158e282615857565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561591557615914615920565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f42455032303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f436f6e7472616374206973207374696c6c206c6f636b65640000000000000000600082015250565b7f42455032303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f54686973206164647265737320697320626c61636b6c69737465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f42455032303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f41646472657373206973206e6f7420616c6c6f77656420746f20627579000000600082015250565b7f416e7469207768616c653a2063616e277420686f6c64206d6f7265207468616e60008201527f2074686520737065636966696564207468726573686f6c640000000000000000602082015250565b7f42455032303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b615e4a81615819565b8114615e5557600080fd5b50565b615e618161582b565b8114615e6c57600080fd5b50565b615e7881615857565b8114615e8357600080fd5b5056fea2646970667358221220955db3dff86806526b664cb89f3259584f910840660189ffd4320c6148ae6d5964736f6c63430008050033

Deployed Bytecode

0x6080604052600436106103b15760003560e01c80636bc87c3a116101e7578063a69df4b51161010d578063c49b9a80116100a0578063d8d89bc61161006f578063d8d89bc614610e37578063dd46706414610e62578063dd62ed3e14610e8b578063f2fde38b14610ec8576103b8565b8063c49b9a8014610d91578063c7f59a6714610dba578063d4c70c8d14610de3578063d5aed6bf14610e0e576103b8565b8063baa04398116100dc578063baa0439814610cd7578063bc33718214610d14578063bd3900c014610d3d578063bea9849e14610d68576103b8565b8063a69df4b514610c31578063a9059cbb14610c48578063aa5f57ca14610c85578063b0ac157114610cae576103b8565b806389dfe6fd1161018557806395d89b411161015457806395d89b4114610b755780639e3a940914610ba05780639fe6409414610bcb578063a457c2d714610bf4576103b8565b806389dfe6fd14610abb5780638da5cb5b14610af857806390107afe14610b23578063935eb35f14610b4c576103b8565b80637921199f116101c15780637921199f146109ff578063795f694f14610a2a5780637d1db4a514610a5357806388f8202014610a7e576103b8565b80636bc87c3a1461098057806370a08231146109ab578063715018a6146109e8576103b8565b8063383c5900116102d757806352390c021161026a578063565836e711610239578063565836e7146108d85780635d83b45414610903578063602bc62b1461092c5780636612e66f14610957576103b8565b806352390c021461082057806352d6585814610849578063530948f6146108725780635342acb41461089b576103b8565b80634549b039116102a65780634549b0391461076457806349bd5a5e146107a15780634a49ac4c146107cc5780634a74bb02146107f5576103b8565b8063383c5900146106a857806339509351146106d15780633b124fe71461070e57806342737bb114610739576103b8565b80631cdd3be31161034f5780632d8381191161031e5780632d838119146105ee5780632f39f21f1461062b578063313ce567146106545780633685d4191461067f576103b8565b80631cdd3be31461050c57806323b872dd14610549578063260978d8146105865780632c505e90146105b1576103b8565b80630fa7c8691161038b5780630fa7c8691461046257806313114a9d1461048b5780631694505e146104b657806318160ddd146104e1576103b8565b806306fdde03146103bd57806307866291146103e8578063095ea7b314610425576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103d2610ef1565b6040516103df91906153c6565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a9190614cbc565b610f2e565b60405161041c9190615390565b60405180910390f35b34801561043157600080fd5b5061044c60048036038101906104479190614de9565b610f4e565b6040516104599190615390565b60405180910390f35b34801561046e57600080fd5b5061048960048036038101906104849190614f10565b610f6c565b005b34801561049757600080fd5b506104a0611013565b6040516104ad91906155e8565b60405180910390f35b3480156104c257600080fd5b506104cb61101d565b6040516104d891906153ab565b60405180910390f35b3480156104ed57600080fd5b506104f6611043565b60405161050391906155e8565b60405180910390f35b34801561051857600080fd5b50610533600480360381019061052e9190614cbc565b61104d565b6040516105409190615390565b60405180910390f35b34801561055557600080fd5b50610570600480360381019061056b9190614d56565b61106d565b60405161057d9190615390565b60405180910390f35b34801561059257600080fd5b5061059b611125565b6040516105a891906155e8565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d39190614cbc565b61112b565b6040516105e59190615390565b60405180910390f35b3480156105fa57600080fd5b5061061560048036038101906106109190614ea3565b61114b565b60405161062291906155e8565b60405180910390f35b34801561063757600080fd5b50610652600480360381019061064d9190614da9565b6111b2565b005b34801561066057600080fd5b506106696112a2565b6040516106769190615694565b60405180910390f35b34801561068b57600080fd5b506106a660048036038101906106a19190614cbc565b6112ab565b005b3480156106b457600080fd5b506106cf60048036038101906106ca9190614f10565b6115fa565b005b3480156106dd57600080fd5b506106f860048036038101906106f39190614de9565b6116a1565b6040516107059190615390565b60405180910390f35b34801561071a57600080fd5b5061072361174d565b60405161073091906155e8565b60405180910390f35b34801561074557600080fd5b5061074e611753565b60405161075b9190615390565b60405180910390f35b34801561077057600080fd5b5061078b60048036038101906107869190614ed0565b611766565b60405161079891906155e8565b60405180910390f35b3480156107ad57600080fd5b506107b661180d565b6040516107c391906152eb565b60405180910390f35b3480156107d857600080fd5b506107f360048036038101906107ee9190614cbc565b611833565b005b34801561080157600080fd5b5061080a611923565b6040516108179190615390565b60405180910390f35b34801561082c57600080fd5b5061084760048036038101906108429190614cbc565b611936565b005b34801561085557600080fd5b50610870600480360381019061086b9190614f10565b611bea565b005b34801561087e57600080fd5b5061089960048036038101906108949190614da9565b611c91565b005b3480156108a757600080fd5b506108c260048036038101906108bd9190614cbc565b611d81565b6040516108cf9190615390565b60405180910390f35b3480156108e457600080fd5b506108ed611dd7565b6040516108fa91906155e8565b60405180910390f35b34801561090f57600080fd5b5061092a60048036038101906109259190614da9565b611ddd565b005b34801561093857600080fd5b50610941611ecd565b60405161094e91906155e8565b60405180910390f35b34801561096357600080fd5b5061097e60048036038101906109799190614da9565b611ed7565b005b34801561098c57600080fd5b50610995611fc7565b6040516109a291906155e8565b60405180910390f35b3480156109b757600080fd5b506109d260048036038101906109cd9190614cbc565b611fcd565b6040516109df91906155e8565b60405180910390f35b3480156109f457600080fd5b506109fd6120b8565b005b348015610a0b57600080fd5b50610a1461220b565b604051610a2191906155e8565b60405180910390f35b348015610a3657600080fd5b50610a516004803603810190610a4c9190614ea3565b612211565b005b348015610a5f57600080fd5b50610a686122b0565b604051610a7591906155e8565b60405180910390f35b348015610a8a57600080fd5b50610aa56004803603810190610aa09190614cbc565b6122b6565b604051610ab29190615390565b60405180910390f35b348015610ac757600080fd5b50610ae26004803603810190610add9190614cbc565b61230c565b604051610aef9190615390565b60405180910390f35b348015610b0457600080fd5b50610b0d61232c565b604051610b1a91906152eb565b60405180910390f35b348015610b2f57600080fd5b50610b4a6004803603810190610b459190614d16565b612355565b005b348015610b5857600080fd5b50610b736004803603810190610b6e9190614e29565b612470565b005b348015610b8157600080fd5b50610b8a6125a8565b604051610b9791906153c6565b60405180910390f35b348015610bac57600080fd5b50610bb56125e5565b604051610bc291906155e8565b60405180910390f35b348015610bd757600080fd5b50610bf26004803603810190610bed9190614f10565b6125eb565b005b348015610c0057600080fd5b50610c1b6004803603810190610c169190614de9565b612692565b604051610c289190615390565b60405180910390f35b348015610c3d57600080fd5b50610c4661273e565b005b348015610c5457600080fd5b50610c6f6004803603810190610c6a9190614de9565b612912565b604051610c7c9190615390565b60405180910390f35b348015610c9157600080fd5b50610cac6004803603810190610ca79190614e76565b612930565b005b348015610cba57600080fd5b50610cd56004803603810190610cd09190614ea3565b6129e2565b005b348015610ce357600080fd5b50610cfe6004803603810190610cf99190614cbc565b612a81565b604051610d0b9190615390565b60405180910390f35b348015610d2057600080fd5b50610d3b6004803603810190610d369190614ea3565b612aa1565b005b348015610d4957600080fd5b50610d52612b40565b604051610d5f91906152eb565b60405180910390f35b348015610d7457600080fd5b50610d8f6004803603810190610d8a9190614cbc565b612b46565b005b348015610d9d57600080fd5b50610db86004803603810190610db39190614e76565b612c25565b005b348015610dc657600080fd5b50610de16004803603810190610ddc9190614da9565b612d0e565b005b348015610def57600080fd5b50610df8612dfe565b604051610e0591906155e8565b60405180910390f35b348015610e1a57600080fd5b50610e356004803603810190610e309190614cbc565b612e04565b005b348015610e4357600080fd5b50610e4c612edd565b604051610e5991906155e8565b60405180910390f35b348015610e6e57600080fd5b50610e896004803603810190610e849190614ea3565b612ee3565b005b348015610e9757600080fd5b50610eb26004803603810190610ead9190614d16565b6130aa565b604051610ebf91906155e8565b60405180910390f35b348015610ed457600080fd5b50610eef6004803603810190610eea9190614cbc565b613131565b005b60606040518060400160405280600681526020017f47656e6761720000000000000000000000000000000000000000000000000000815250905090565b600c6020528060005260406000206000915054906101000a900460ff1681565b6000610f62610f5b6132f3565b84846132fb565b6001905092915050565b610f746132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff890615508565b60405180910390fd5b81601581905550806016819055505050565b6000601254905090565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601054905090565b600b6020528060005260406000206000915054906101000a900460ff1681565b600061107a8484846134c6565b61111a846110866132f3565b84600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110d06132f3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461111591906157e5565b6132fb565b600190509392505050565b601f5481565b60096020528060005260406000206000915054906101000a900460ff1681565b6000601154821115611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118990615448565b60405180910390fd5b600061119c613ae1565b905080836111aa919061575a565b915050919050565b6111ba6132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123e90615508565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006009905090565b6112b36132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133790615508565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166113cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c390615488565b60405180910390fd5b60005b600d805490508110156115f6578173ffffffffffffffffffffffffffffffffffffffff16600d8281548110611407576114066159ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156115e357600d6001600d8054905061146291906157e5565b81548110611473576114726159ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d82815481106114b2576114b16159ad565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600d8054806115a9576115a861597e565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556115f6565b80806115ee906158d7565b9150506113cf565b5050565b6116026132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461168f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168690615508565b60405180910390fd5b81601381905550806014819055505050565b60006117436116ae6132f3565b8484600760006116bc6132f3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461173e9190615704565b6132fb565b6001905092915050565b60155481565b601e60169054906101000a900460ff1681565b60006010548311156117ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a4906154c8565b60405180910390fd5b6000806117b985613b05565b925092505060006117c8613ae1565b9050846117ed5760006117dd87858585613b5a565b5050905080945050505050611807565b60006117fb87858585613b5a565b50915050809450505050505b92915050565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61183b6132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bf90615508565b60405180910390fd5b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601e60159054906101000a900460ff1681565b61193e6132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c290615508565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4f90615488565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611b2c57611ae8600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461114b565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600d819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611bf26132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7690615508565b60405180910390fd5b81601781905550806018819055505050565b611c996132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1d90615508565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601a5481565b611de56132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6990615508565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600254905090565b611edf6132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6390615508565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60165481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561206857600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506120b3565b6120b0600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461114b565b90505b919050565b6120c06132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461214d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214490615508565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60195481565b6122196132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229d90615508565b60405180910390fd5b80601f8190555050565b601b5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600a6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61235d6132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e190615508565b60405180910390fd5b81600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6124786132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fc90615508565b60405180910390fd5b60005b828290508110156125a3576001600b600085858581811061252c5761252b6159ad565b5b90506020020160208101906125419190614cbc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508061259c906158d7565b9050612508565b505050565b60606040518060400160405280600581526020017f47484f5354000000000000000000000000000000000000000000000000000000815250905090565b60185481565b6125f36132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612680576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267790615508565b60405180910390fd5b8160198190555080601a819055505050565b600061273461269f6132f3565b8484600760006126ad6132f3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461272f91906157e5565b6132fb565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c5906155c8565b60405180910390fd5b6002544211612812576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280990615408565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061292661291f6132f3565b84846134c6565b6001905092915050565b6129386132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bc90615508565b60405180910390fd5b80601e60166101000a81548160ff02191690831515021790555050565b6129ea6132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6e90615508565b60405180910390fd5b80601c8190555050565b60086020528060005260406000206000915054906101000a900460ff1681565b612aa96132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2d90615508565b60405180910390fd5b80601b8190555050565b61dead81565b612b4e6132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd290615508565b60405180910390fd5b600081905080601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b612c2d6132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb190615508565b60405180910390fd5b80601e60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051612d039190615390565b60405180910390a150565b612d166132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9a90615508565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60175481565b612e0c6132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9090615508565b60405180910390fd5b80601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c5481565b612eeb6132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6f90615508565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080426130269190615704565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6131396132f3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146131c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131bd90615508565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613236576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322d90615468565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561336b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336290615428565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d2906155a8565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516134b991906155e8565b60405180910390a3505050565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561356a5750600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6135a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135a0906154a8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613619576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613610906153e8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613689576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368090615548565b60405180910390fd5b600081116136cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136c390615528565b60405180910390fd5b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661376357601b54811115613762576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613759906154e8565b60405180910390fd5b5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561380e5750601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156138a157600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156138a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161389790615568565b60405180910390fd5b5b60006138ac30611fcd565b9050601b5481106138bd57601b5490505b6000601c5482101590508080156138e15750601e60149054906101000a900460ff16155b80156139375750600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561394f5750601e60159054906101000a900460ff165b1561396357601c54915061396282613bc3565b5b600060019050600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613a0a5750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613a1457600090505b613a2086868684613e83565b601e60169054906101000a900460ff168015613a865750600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613ad957601f54613a9786611fcd565b1115613ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613acf90615588565b60405180910390fd5b5b505050505050565b6000806000613aee614022565b915091508082613afe919061575a565b9250505090565b600080600080613b17856015546142c0565b90506000613b27866016546142c0565b905060008287613b3791906157e5565b90508181613b4591906157e5565b90508083839550955095505050509193909250565b6000806000808488613b6c919061578b565b905060008588613b7c919061578b565b905060008688613b8c919061578b565b905060008284613b9c91906157e5565b90508181613baa91906157e5565b9050838184965096509650505050509450945094915050565b6001601e60146101000a81548160ff0219169083151502179055506000600282613bed919061575a565b905060008183613bfd91906157e5565b90506000479050613c0d836142e2565b60008147613c1b91906157e5565b9050600060135461271083613c30919061575a565b613c3a919061578b565b9050600060145461271084613c4f919061575a565b613c59919061578b565b90506000818385613c6a91906157e5565b613c7491906157e5565b905060008314613d43577fe9c7f2b211c760890268dc4250ab69d148f8840809c94c593b2bc430e673fa63600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684604051613cd1929190615306565b60405180910390a1600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015613d41573d6000803e3d6000fd5b505b60008214613e10577fbe61dd4a9cfefc957af4f19405f44fbde1f74724fcbf173c8b23225353eb4673600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683604051613d9e929190615306565b60405180910390a1600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613e0e573d6000803e3d6000fd5b505b600080613e1d8884614534565b915091507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561898284604051613e549392919061565d565b60405180910390a15050505050505050506000601e60146101000a81548160ff02191690831515021790555050565b60006015549050600060165490506000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16148015613f3e5750601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b90506000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614905084613faf5760006015819055506000601681905550613fe7565b8115613fcc57601754601581905550601854601681905550613fe6565b8015613fe557601954601581905550601a546016819055505b5b5b613ff288888861463b565b841580613ffc5750815b806140045750805b156140185783601581905550826016819055505b5050505050505050565b600080600060115490506000601054905060005b600d8054905081101561428a578260036000600d848154811061405c5761405b6159ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061414a57508160046000600d84815481106140e2576140e16159ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561416157601154601054945094505050506142bc565b60036000600d8381548110614179576141786159ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836141ea91906157e5565b925060046000600d8381548110614204576142036159ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261427591906157e5565b91508080614282906158d7565b915050614036565b5060105460115461429b919061575a565b8210156142b3576011546010549350935050506142bc565b81819350935050505b9091565b6000606482846142d0919061578b565b6142da919061575a565b905092915050565b6000600267ffffffffffffffff8111156142ff576142fe6159dc565b5b60405190808252806020026020018201604052801561432d5781602001602082028036833780820191505090505b5090503081600081518110614345576143446159ad565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156143e757600080fd5b505afa1580156143fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061441f9190614ce9565b81600181518110614433576144326159ad565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061449a30601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846132fb565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016144fe959493929190615603565b600060405180830381600087803b15801561451857600080fd5b505af115801561452c573d6000803e3d6000fd5b505050505050565b60008061456430601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866132fb565b600080601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198630896000806145b361232c565b426040518863ffffffff1660e01b81526004016145d59695949392919061532f565b6060604051808303818588803b1580156145ee57600080fd5b505af1158015614602573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906146279190614f50565b509150915081819350935050509250929050565b600080600061464984613b05565b9250925092506000614659613ae1565b9050600080600061466c88878787613b5a565b92509250925082600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546146bd91906157e5565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156147e15787600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461479d91906157e5565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b81600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461482c9190615704565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156149505786600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461490c9190615704565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61495c8a3087876149d7565b6149668187614bd1565b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040516149c391906155e8565b60405180910390a350505050505050505050565b60008214156149e557614bcb565b600081836149f3919061578b565b905080600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a409190615704565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614b645782600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614b209190615704565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051614bc191906155e8565b60405180910390a3505b50505050565b81601154614bdf91906157e5565b60118190555080601254614bf39190615704565b6012819055505050565b600081359050614c0c81615e41565b92915050565b600081519050614c2181615e41565b92915050565b60008083601f840112614c3d57614c3c615a10565b5b8235905067ffffffffffffffff811115614c5a57614c59615a0b565b5b602083019150836020820283011115614c7657614c75615a15565b5b9250929050565b600081359050614c8c81615e58565b92915050565b600081359050614ca181615e6f565b92915050565b600081519050614cb681615e6f565b92915050565b600060208284031215614cd257614cd1615a1f565b5b6000614ce084828501614bfd565b91505092915050565b600060208284031215614cff57614cfe615a1f565b5b6000614d0d84828501614c12565b91505092915050565b60008060408385031215614d2d57614d2c615a1f565b5b6000614d3b85828601614bfd565b9250506020614d4c85828601614bfd565b9150509250929050565b600080600060608486031215614d6f57614d6e615a1f565b5b6000614d7d86828701614bfd565b9350506020614d8e86828701614bfd565b9250506040614d9f86828701614c92565b9150509250925092565b60008060408385031215614dc057614dbf615a1f565b5b6000614dce85828601614bfd565b9250506020614ddf85828601614c7d565b9150509250929050565b60008060408385031215614e0057614dff615a1f565b5b6000614e0e85828601614bfd565b9250506020614e1f85828601614c92565b9150509250929050565b60008060208385031215614e4057614e3f615a1f565b5b600083013567ffffffffffffffff811115614e5e57614e5d615a1a565b5b614e6a85828601614c27565b92509250509250929050565b600060208284031215614e8c57614e8b615a1f565b5b6000614e9a84828501614c7d565b91505092915050565b600060208284031215614eb957614eb8615a1f565b5b6000614ec784828501614c92565b91505092915050565b60008060408385031215614ee757614ee6615a1f565b5b6000614ef585828601614c92565b9250506020614f0685828601614c7d565b9150509250929050565b60008060408385031215614f2757614f26615a1f565b5b6000614f3585828601614c92565b9250506020614f4685828601614c92565b9150509250929050565b600080600060608486031215614f6957614f68615a1f565b5b6000614f7786828701614ca7565b9350506020614f8886828701614ca7565b9250506040614f9986828701614ca7565b9150509250925092565b6000614faf8383614fbb565b60208301905092915050565b614fc481615819565b82525050565b614fd381615819565b82525050565b6000614fe4826156bf565b614fee81856156e2565b9350614ff9836156af565b8060005b8381101561502a5781516150118882614fa3565b975061501c836156d5565b925050600181019050614ffd565b5085935050505092915050565b6150408161582b565b82525050565b61504f8161586e565b82525050565b61505e81615892565b82525050565b600061506f826156ca565b61507981856156f3565b93506150898185602086016158a4565b61509281615a24565b840191505092915050565b60006150aa6025836156f3565b91506150b582615a35565b604082019050919050565b60006150cd6018836156f3565b91506150d882615a84565b602082019050919050565b60006150f06024836156f3565b91506150fb82615aad565b604082019050919050565b6000615113602a836156f3565b915061511e82615afc565b604082019050919050565b60006151366026836156f3565b915061514182615b4b565b604082019050919050565b6000615159601b836156f3565b915061516482615b9a565b602082019050919050565b600061517c601b836156f3565b915061518782615bc3565b602082019050919050565b600061519f601f836156f3565b91506151aa82615bec565b602082019050919050565b60006151c26028836156f3565b91506151cd82615c15565b604082019050919050565b60006151e56020836156f3565b91506151f082615c64565b602082019050919050565b60006152086029836156f3565b915061521382615c8d565b604082019050919050565b600061522b6023836156f3565b915061523682615cdc565b604082019050919050565b600061524e601d836156f3565b915061525982615d2b565b602082019050919050565b60006152716038836156f3565b915061527c82615d54565b604082019050919050565b60006152946022836156f3565b915061529f82615da3565b604082019050919050565b60006152b76023836156f3565b91506152c282615df2565b604082019050919050565b6152d681615857565b82525050565b6152e581615861565b82525050565b60006020820190506153006000830184614fca565b92915050565b600060408201905061531b6000830185614fca565b61532860208301846152cd565b9392505050565b600060c0820190506153446000830189614fca565b61535160208301886152cd565b61535e6040830187615055565b61536b6060830186615055565b6153786080830185614fca565b61538560a08301846152cd565b979650505050505050565b60006020820190506153a56000830184615037565b92915050565b60006020820190506153c06000830184615046565b92915050565b600060208201905081810360008301526153e08184615064565b905092915050565b600060208201905081810360008301526154018161509d565b9050919050565b60006020820190508181036000830152615421816150c0565b9050919050565b60006020820190508181036000830152615441816150e3565b9050919050565b6000602082019050818103600083015261546181615106565b9050919050565b6000602082019050818103600083015261548181615129565b9050919050565b600060208201905081810360008301526154a18161514c565b9050919050565b600060208201905081810360008301526154c18161516f565b9050919050565b600060208201905081810360008301526154e181615192565b9050919050565b60006020820190508181036000830152615501816151b5565b9050919050565b60006020820190508181036000830152615521816151d8565b9050919050565b60006020820190508181036000830152615541816151fb565b9050919050565b600060208201905081810360008301526155618161521e565b9050919050565b6000602082019050818103600083015261558181615241565b9050919050565b600060208201905081810360008301526155a181615264565b9050919050565b600060208201905081810360008301526155c181615287565b9050919050565b600060208201905081810360008301526155e1816152aa565b9050919050565b60006020820190506155fd60008301846152cd565b92915050565b600060a08201905061561860008301886152cd565b6156256020830187615055565b81810360408301526156378186614fd9565b90506156466060830185614fca565b61565360808301846152cd565b9695505050505050565b600060608201905061567260008301866152cd565b61567f60208301856152cd565b61568c60408301846152cd565b949350505050565b60006020820190506156a960008301846152dc565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061570f82615857565b915061571a83615857565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561574f5761574e615920565b5b828201905092915050565b600061576582615857565b915061577083615857565b9250826157805761577f61594f565b5b828204905092915050565b600061579682615857565b91506157a183615857565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156157da576157d9615920565b5b828202905092915050565b60006157f082615857565b91506157fb83615857565b92508282101561580e5761580d615920565b5b828203905092915050565b600061582482615837565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061587982615880565b9050919050565b600061588b82615837565b9050919050565b600061589d82615857565b9050919050565b60005b838110156158c25780820151818401526020810190506158a7565b838111156158d1576000848401525b50505050565b60006158e282615857565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561591557615914615920565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f42455032303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f436f6e7472616374206973207374696c6c206c6f636b65640000000000000000600082015250565b7f42455032303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f54686973206164647265737320697320626c61636b6c69737465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f42455032303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f41646472657373206973206e6f7420616c6c6f77656420746f20627579000000600082015250565b7f416e7469207768616c653a2063616e277420686f6c64206d6f7265207468616e60008201527f2074686520737065636966696564207468726573686f6c640000000000000000602082015250565b7f42455032303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b615e4a81615819565b8114615e5557600080fd5b50565b615e618161582b565b8114615e6c57600080fd5b50565b615e7881615857565b8114615e8357600080fd5b5056fea2646970667358221220955db3dff86806526b664cb89f3259584f910840660189ffd4320c6148ae6d5964736f6c63430008050033

Deployed Bytecode Sourcemap

12566:20247:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16644:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13150:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17665:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21659:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18690:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14524:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16921:204;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13096:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17832:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15023:58;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12974:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19405:251;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21250:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16830:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20006:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22344:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18106:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14016:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14975:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18785:612;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14572:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20519:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14646:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19664:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21823:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21380:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25500:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14327:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23074:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3958:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20640:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14082:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17133:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3550:148;;;;;;;;;;;;;:::i;:::-;;14283:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21514:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14377:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18562:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13038:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3336:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22156:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31732:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16735:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14218:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21988:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18329:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4294:298;;;;;;;;;;;;;:::i;:::-;;17339:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21002:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20869:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12906:61;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20770:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13321:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22789:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22569:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21108:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14175:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22976:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14440:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4056:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17514:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3706:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16644:83;16681:13;16714:5;;;;;;;;;;;;;;;;;16707:12;;16644:83;:::o;13150:53::-;;;;;;;;;;;;;;;;;;;;;;:::o;17665:161::-;17740:4;17757:39;17766:12;:10;:12::i;:::-;17780:7;17789:6;17757:8;:39::i;:::-;17814:4;17807:11;;17665:161;;;;:::o;21659:156::-;3473:12;:10;:12::i;:::-;3463:22;;:6;;;;;;;;;;:22;;;3455:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21762:6:::1;21746:7;:22;;;;21795:12;21779:13;:28;;;;21659:156:::0;;:::o;18690:87::-;18732:7;18759:10;;18752:17;;18690:87;:::o;14524:41::-;;;;;;;;;;;;;:::o;16921:204::-;16974:7;17110;;17103:14;;16921:204;:::o;13096:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;17832:266::-;17930:4;17947:36;17957:6;17965:9;17976:6;17947:9;:36::i;:::-;17994:74;18003:6;18011:12;:10;:12::i;:::-;18061:6;18025:11;:19;18037:6;18025:19;;;;;;;;;;;;;;;:33;18045:12;:10;:12::i;:::-;18025:33;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;17994:8;:74::i;:::-;18086:4;18079:11;;17832:266;;;;;:::o;15023:58::-;;;;:::o;12974:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;19405:251::-;19471:7;19510;;19499;:18;;19491:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;19577:19;19599:10;:8;:10::i;:::-;19577:32;;19637:11;19627:7;:21;;;;:::i;:::-;19620:28;;;19405:251;;;:::o;21250:122::-;3473:12;:10;:12::i;:::-;3463:22;;:6;;;;;;;;;;:22;;;3455:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21363:1:::1;21333:18;:27;21352:7;21333:27;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;21250:122:::0;;:::o;16830:83::-;16871:5;13737:1;16889:16;;16830:83;:::o;20006:479::-;3473:12;:10;:12::i;:::-;3463:22;;:6;;;;;;;;;;:22;;;3455:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20086:11:::1;:20;20098:7;20086:20;;;;;;;;;;;;;;;;;;;;;;;;;20078:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;20156:9;20151:327;20175:9;:16;;;;20171:1;:20;20151:327;;;20233:7;20217:23;;:9;20227:1;20217:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;;20213:254;;;20276:9;20305:1;20286:9;:16;;;;:20;;;;:::i;:::-;20276:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20261:9;20271:1;20261:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;20345:1;20326:7;:16;20334:7;20326:16;;;;;;;;;;;;;;;:20;;;;20388:5;20365:11;:20;20377:7;20365:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;20412:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;20446:5;;20213:254;20193:3;;;;;:::i;:::-;;;;20151:327;;;;20006:479:::0;:::o;22344:217::-;3473:12;:10;:12::i;:::-;3463:22;;:6;;;;;;;;;;:22;;;3455:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22485:7:::1;22446:29;:46;;;;22541:12;22503:34;:50;;;;22344:217:::0;;:::o;18106:215::-;18194:4;18211:80;18220:12;:10;:12::i;:::-;18234:7;18280:10;18243:11;:25;18255:12;:10;:12::i;:::-;18243:25;;;;;;;;;;;;;;;:34;18269:7;18243:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;18211:8;:80::i;:::-;18309:4;18302:11;;18106:215;;;;:::o;14016:33::-;;;;:::o;14975:41::-;;;;;;;;;;;;;:::o;18785:612::-;18875:7;18914;;18903;:18;;18895:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;18971:12;18985:18;19007:20;19019:7;19007:11;:20::i;:::-;18968:59;;;;;19038:19;19060:10;:8;:10::i;:::-;19038:32;;19088:17;19083:307;;19123:15;19144:51;19156:7;19165:4;19171:10;19183:11;19144;:51::i;:::-;19122:73;;;;19217:7;19210:14;;;;;;;;19083:307;19262:23;19290:51;19302:7;19311:4;19317:10;19329:11;19290;:51::i;:::-;19259:82;;;;19363:15;19356:22;;;;;;18785:612;;;;;:::o;14572:39::-;;;;;;;;;;;;;:::o;20519:115::-;3473:12;:10;:12::i;:::-;3463:22;;:6;;;;;;;;;;:22;;;3455:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20621:5:::1;20595:14;:23;20610:7;20595:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;20519:115:::0;:::o;14646:40::-;;;;;;;;;;;;;:::o;19664:334::-;3473:12;:10;:12::i;:::-;3463:22;;:6;;;;;;;;;;:22;;;3455:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19745:11:::1;:20;19757:7;19745:20;;;;;;;;;;;;;;;;;;;;;;;;;19744:21;19736:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;19833:1;19814:7;:16;19822:7;19814:16;;;;;;;;;;;;;;;;:20;19810:109;;;19870:37;19890:7;:16;19898:7;19890:16;;;;;;;;;;;;;;;;19870:19;:37::i;:::-;19851:7;:16;19859:7;19851:16;;;;;;;;;;;;;;;:56;;;;19810:109;19952:4;19929:11;:20;19941:7;19929:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;19967:9;19982:7;19967:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19664:334:::0;:::o;21823:157::-;3473:12;:10;:12::i;:::-;3463:22;;:6;;;;;;;;;;:22;;;3455:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21924:6:::1;21905:10;:25;;;;21960:12;21941:16;:31;;;;21823:157:::0;;:::o;21380:126::-;3473:12;:10;:12::i;:::-;3463:22;;:6;;;;;;;;;;:22;;;3455:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21497:1:::1;21465:20;:29;21486:7;21465:29;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;21380:126:::0;;:::o;25500:123::-;25564:4;25588:18;:27;25607:7;25588:27;;;;;;;;;;;;;;;;;;;;;;;;;25581:34;;25500:123;;;:::o;14327:37::-;;;;:::o;23074:130::-;3473:12;:10;:12::i;:::-;3463:22;;:6;;;;;;;;;;:22;;;3455:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23195:1:::1;23161:28;:31;23190:1;23161:31;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;23074:130:::0;;:::o;3958:90::-;4004:7;4031:9;;4024:16;;3958:90;:::o;20640:122::-;3473:12;:10;:12::i;:::-;3463:22;;:6;;;;;;;;;;:22;;;3455:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20753:1:::1;20723:18;:27;20742:7;20723:27;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;20640:122:::0;;:::o;14082:33::-;;;;:::o;17133:198::-;17199:7;17223:11;:20;17235:7;17223:20;;;;;;;;;;;;;;;;;;;;;;;;;17219:49;;;17252:7;:16;17260:7;17252:16;;;;;;;;;;;;;;;;17245:23;;;;17219:49;17286:37;17306:7;:16;17314:7;17306:16;;;;;;;;;;;;;;;;17286:19;:37::i;:::-;17279:44;;17133:198;;;;:::o;3550:148::-;3473:12;:10;:12::i;:::-;3463:22;;:6;;;;;;;;;;:22;;;3455:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;3657:1:::1;3620:40;;3641:6;::::0;::::1;;;;;;;;3620:40;;;;;;;;;;;;3688:1;3671:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;3550:148::o:0;14283:37::-;;;;:::o;21514:137::-;3473:12;:10;:12::i;:::-;3463:22;;:6;;;;;;;;;;:22;;;3455:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21625:18:::1;21603:19;:40;;;;21514:137:::0;:::o;14377:56::-;;;;:::o;18562:120::-;18630:4;18654:11;:20;18666:7;18654:20;;;;;;;;;;;;;;;;;;;;;;;;;18647:27;;18562:120;;;:::o;13038:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;3336:79::-;3374:7;3401:6;;;;;;;;;;;3394:13;;3336:79;:::o;22156:180::-;3473:12;:10;:12::i;:::-;3463:22;;:6;;;;;;;;;;:22;;;3455:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22273:10:::1;22253:11;;:30;;;;;;;;;;;;;;;;;;22313:15;22294:16;;:34;;;;;;;;;;;;;;;;;;22156:180:::0;;:::o;31732:190::-;3473:12;:10;:12::i;:::-;3463:22;;:6;;;;;;;;;;:22;;;3455:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31821:9:::1;31816:99;31836:9;;:16;;31832:1;:20;31816:99;;;31901:4;31870:14;:28;31885:9;;31895:1;31885:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;31870:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;31854:3;;;;:::i;:::-;;;31816:99;;;;31732:190:::0;;:::o;16735:87::-;16774:13;16807:7;;;;;;;;;;;;;;;;;16800:14;;16735:87;:::o;14218:36::-;;;;:::o;21988:160::-;3473:12;:10;:12::i;:::-;3463:22;;:6;;;;;;;;;;:22;;;3455:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22091:6:::1;22071:11;:26;;;;22128:12;22108:17;:32;;;;21988:160:::0;;:::o;18329:225::-;18422:4;18439:85;18448:12;:10;:12::i;:::-;18462:7;18508:15;18471:11;:25;18483:12;:10;:12::i;:::-;18471:25;;;;;;;;;;;;;;;:34;18497:7;18471:34;;;;;;;;;;;;;;;;:52;;;;:::i;:::-;18439:8;:85::i;:::-;18542:4;18535:11;;18329:225;;;;:::o;4294:298::-;4364:10;4346:28;;:14;;;;;;;;;;;:28;;;4338:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;4451:9;;4433:15;:27;4425:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;4535:14;;;;;;;;;;;4506:44;;4527:6;;;;;;;;;;4506:44;;;;;;;;;;;;4570:14;;;;;;;;;;;4561:6;;:23;;;;;;;;;;;;;;;;;;4294:298::o;17339:167::-;17417:4;17434:42;17444:12;:10;:12::i;:::-;17458:9;17469:6;17434:9;:42::i;:::-;17494:4;17487:11;;17339:167;;;;:::o;21002:98::-;3473:12;:10;:12::i;:::-;3463:22;;:6;;;;;;;;;;:22;;;3455:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21091:1:::1;21069:19;;:23;;;;;;;;;;;;;;;;;;21002:98:::0;:::o;20869:125::-;3473:12;:10;:12::i;:::-;3463:22;;:6;;;;;;;;;;:22;;;3455:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20971:15:::1;20952:16;:34;;;;20869:125:::0;:::o;12906:61::-;;;;;;;;;;;;;;;;;;;;;;:::o;20770:91::-;3473:12;:10;:12::i;:::-;3463:22;;:6;;;;;;;;;;:22;;;3455:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20848:5:::1;20833:12;:20;;;;20770:91:::0;:::o;13321:81::-;13360:42;13321:81;:::o;22789:179::-;3473:12;:10;:12::i;:::-;3463:22;;:6;;;;;;;;;;:22;;;3455:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22856:35:::1;22913:1;22856:59;;22944:16;22926:15;;:34;;;;;;;;;;;;;;;;;;22845:123;22789:179:::0;:::o;22569:171::-;3473:12;:10;:12::i;:::-;3463:22;;:6;;;;;;;;;;:22;;;3455:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22670:8:::1;22646:21;;:32;;;;;;;;;;;;;;;;;;22694:38;22723:8;22694:38;;;;;;:::i;:::-;;;;;;;;22569:171:::0;:::o;21108:134::-;3473:12;:10;:12::i;:::-;3463:22;;:6;;;;;;;;;;:22;;;3455:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21233:1:::1;21197:24;:33;21222:7;21197:33;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;21108:134:::0;;:::o;14175:36::-;;;;:::o;22976:90::-;3473:12;:10;:12::i;:::-;3463:22;;:6;;;;;;;;;;:22;;;3455:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23057:1:::1;23041:13;;:17;;;;;;;;;;;;;;;;;;22976:90:::0;:::o;14440:48::-;;;;:::o;4056:226::-;3473:12;:10;:12::i;:::-;3463:22;;:6;;;;;;;;;;:22;;;3455:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;4137:6:::1;::::0;::::1;;;;;;;;4120:14;;:23;;;;;;;;;;;;;;;;;;4171:1;4154:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;4214:4;4196:15;:22;;;;:::i;:::-;4184:9;:34;;;;4271:1;4234:40;;4255:6;::::0;::::1;;;;;;;;4234:40;;;;;;;;;;;;4056:226:::0;:::o;17514:143::-;17595:7;17622:11;:18;17634:5;17622:18;;;;;;;;;;;;;;;:27;17641:7;17622:27;;;;;;;;;;;;;;;;17615:34;;17514:143;;;;:::o;3706:244::-;3473:12;:10;:12::i;:::-;3463:22;;:6;;;;;;;;;;:22;;;3455:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;3815:1:::1;3795:22;;:8;:22;;;;3787:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3905:8;3876:38;;3897:6;::::0;::::1;;;;;;;;3876:38;;;;;;;;;;;;3934:8;3925:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;3706:244:::0;:::o;2042:98::-;2095:7;2122:10;2115:17;;2042:98;:::o;25631:337::-;25741:1;25724:19;;:5;:19;;;;25716:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25822:1;25803:21;;:7;:21;;;;25795:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25906:6;25876:11;:18;25888:5;25876:18;;;;;;;;;;;;;;;:27;25895:7;25876:27;;;;;;;;;;;;;;;:36;;;;25944:7;25928:32;;25937:5;25928:32;;;25953:6;25928:32;;;;;;:::i;:::-;;;;;;;;25631:337;;;:::o;25976:2277::-;26111:14;:20;26126:4;26111:20;;;;;;;;;;;;;;;;;;;;;;;;;26110:21;:44;;;;;26136:14;:18;26151:2;26136:18;;;;;;;;;;;;;;;;;;;;;;;;;26135:19;26110:44;26102:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;26221:1;26205:18;;:4;:18;;;;26197:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26298:1;26284:16;;:2;:16;;;;26276:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26368:1;26359:6;:10;26351:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26433:20;:26;26454:4;26433:26;;;;;;;;;;;;;;;;;;;;;;;;;26428:135;;26494:12;;26484:6;:22;;26476:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;26428:135;26636:13;;;;;;;;;;;26628:21;;:4;:21;;;:55;;;;;26667:15;;;;;;;;;;;26653:30;;:2;:30;;;;26628:55;26624:153;;;26709:18;:22;26728:2;26709:22;;;;;;;;;;;;;;;;;;;;;;;;;26708:23;26700:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;26624:153;27103:28;27134:24;27152:4;27134:9;:24::i;:::-;27103:55;;27207:12;;27183:20;:36;27179:104;;27259:12;;27236:35;;27179:104;27303:26;27356:16;;27332:20;:40;;27303:69;;27401:21;:55;;;;;27440:16;;;;;;;;;;;27439:17;27401:55;:107;;;;;27474:28;:34;27503:4;27474:34;;;;;;;;;;;;;;;;;;;;;;;;;27473:35;27401:107;:145;;;;;27525:21;;;;;;;;;;;27401:145;27383:292;;;27596:16;;27573:39;;27627:36;27642:20;27627:14;:36::i;:::-;27383:292;27697:12;27712:4;27697:19;;27731:18;:24;27750:4;27731:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;27759:18;:22;27778:2;27759:22;;;;;;;;;;;;;;;;;;;;;;;;;27731:50;27727:98;;;27808:5;27798:15;;27727:98;27835:41;27850:4;27856:2;27860:6;27868:7;27835:14;:41::i;:::-;28059:19;;;;;;;;;;;:52;;;;;28083:24;:28;28108:2;28083:28;;;;;;;;;;;;;;;;;;;;;;;;;28082:29;28059:52;28054:192;;;28154:19;;28137:13;28147:2;28137:9;:13::i;:::-;:36;;28129:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;28054:192;26079:2174;;;25976:2277;;;:::o;24233:160::-;24274:7;24295:15;24312;24331:19;:17;:19::i;:::-;24294:56;;;;24378:7;24368;:17;;;;:::i;:::-;24361:24;;;;24233:160;:::o;23364:386::-;23424:7;23433;23442;23462:12;23483:30;23496:7;23505;;23483:12;:30::i;:::-;23462:51;;23524:18;23545:36;23558:7;23567:13;;23545:12;:36::i;:::-;23524:57;;23592:23;23628:4;23618:7;:14;;;;:::i;:::-;23592:40;;23679:10;23661:15;:28;;;;:::i;:::-;23643:46;;23708:15;23725:4;23731:10;23700:42;;;;;;;;;23364:386;;;;;:::o;23758:467::-;23873:7;23882;23891;23911:15;23942:11;23932:7;:21;;;;:::i;:::-;23911:42;;23964:12;23992:11;23985:4;:18;;;;:::i;:::-;23964:39;;24014:18;24048:11;24035:10;:24;;;;:::i;:::-;24014:45;;24070:23;24106:4;24096:7;:14;;;;:::i;:::-;24070:40;;24157:10;24139:15;:28;;;;:::i;:::-;24121:46;;24186:7;24195:15;24212:4;24178:39;;;;;;;;;;23758:467;;;;;;;;:::o;28261:1176::-;15274:4;15255:16;;:23;;;;;;;;;;;;;;;;;;28393:12:::1;28436:1;28413:20;:24;;;;:::i;:::-;28393:44;;28448:17;28491:4;28468:20;:27;;;;:::i;:::-;28448:47;;28508:22;28533:21;28508:46;;28567:22;28584:4;28567:16;:22::i;:::-;28602:18;28647:14;28623:21;:38;;;;:::i;:::-;28602:59;;28672:18;28720:29;;28712:5;28699:10;:18;;;;:::i;:::-;:50;;;;:::i;:::-;28672:77;;28760:23;28807:34;;28799:5;28786:10;:18;;;;:::i;:::-;:55;;;;:::i;:::-;28760:81;;28852:23;28904:15;28891:10;28878;:23;;;;:::i;:::-;:41;;;;:::i;:::-;28852:67;;28951:1;28937:10;:15;28932:144;;28975:33;28984:11;;;;;;;;;;;28997:10;28975:33;;;;;;;:::i;:::-;;;;;;;;29031:11;;;;;;;;;;;29023:29;;:41;29053:10;29023:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;28932:144;29110:1;29091:15;:20;29086:174;;29134:48;29148:16;;;;;;;;;;;29166:15;29134:48;;;;;;;:::i;:::-;;;;;;;;29205:16;;;;;;;;;;;29197:34;;:51;29232:15;29197:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;29086:174;29281:18;29301:16:::0;29321:40:::1;29334:9;29345:15;29321:12;:40::i;:::-;29280:81;;;;29387:42;29402:4;29408:8;29418:10;29387:42;;;;;;;;:::i;:::-;;;;;;;;28335:1102;;;;;;;;;15320:5:::0;15301:16;;:24;;;;;;;;;;;;;;;;;;28261:1176;:::o;30689:938::-;30797:22;30828:7;;30797:38;;30846:28;30877:13;;30846:44;;30911:10;30935:13;;;;;;;;;;;30925:23;;:6;:23;;;:64;;;;;30973:15;;;;;;;;;;;30952:37;;:9;:37;;;;30925:64;30911:78;;31000:11;31027:13;;;;;;;;;;;31014:26;;:9;:26;;;31000:40;;31066:7;31061:333;;31106:1;31090:7;:17;;;;31138:1;31122:13;:17;;;;31061:333;;;31163:5;31159:235;;;31202:10;;31186:7;:26;;;;31243:16;;31227:13;:32;;;;31159:235;;;31283:6;31279:115;;;31323:11;;31307:7;:27;;;;31365:17;;31349:13;:33;;;;31279:115;31159:235;31061:333;31414:44;31432:6;31440:9;31451:6;31414:17;:44::i;:::-;31484:7;31483:8;:17;;;;31495:5;31483:17;:27;;;;31504:6;31483:27;31479:141;;;31543:14;31527:7;:30;;;;31588:20;31572:13;:36;;;;31479:141;30786:841;;;;30689:938;;;;:::o;24401:552::-;24451:7;24460;24480:15;24498:7;;24480:25;;24516:15;24534:7;;24516:25;;24563:9;24558:283;24582:9;:16;;;;24578:1;:20;24558:283;;;24648:7;24624;:21;24632:9;24642:1;24632:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24624:21;;;;;;;;;;;;;;;;:31;:66;;;;24683:7;24659;:21;24667:9;24677:1;24667:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24659:21;;;;;;;;;;;;;;;;:31;24624:66;24620:97;;;24700:7;;24709;;24692:25;;;;;;;;;24620:97;24752:7;:21;24760:9;24770:1;24760:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24752:21;;;;;;;;;;;;;;;;24742:7;:31;;;;:::i;:::-;24732:41;;24808:7;:21;24816:9;24826:1;24816:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24808:21;;;;;;;;;;;;;;;;24798:7;:31;;;;:::i;:::-;24788:41;;24600:3;;;;;:::i;:::-;;;;24558:283;;;;24875:7;;24865;;:17;;;;:::i;:::-;24855:7;:27;24851:58;;;24892:7;;24901;;24884:25;;;;;;;;24851:58;24928:7;24937;24920:25;;;;;;24401:552;;;:::o;25362:126::-;25435:7;25477:3;25471;25462:6;:12;;;;:::i;:::-;:18;;;;:::i;:::-;25455:25;;25362:126;;;;:::o;29445:589::-;29571:21;29609:1;29595:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29571:40;;29640:4;29622;29627:1;29622:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;29666:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29656:4;29661:1;29656:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;29701:62;29718:4;29733:15;;;;;;;;;;;29751:11;29701:8;:62::i;:::-;29802:15;;;;;;;;;;;:66;;;29883:11;29909:1;29953:4;29980;30000:15;29802:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29500:534;29445:589;:::o;30042:639::-;30121:7;30130;30217:62;30234:4;30249:15;;;;;;;;;;;30267:11;30217:8;:62::i;:::-;30323:16;30341:14;30361:15;;;;;;;;;;;:31;;;30400:9;30433:4;30453:11;30479:1;30522;30565:7;:5;:7::i;:::-;30587:15;30361:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30322:291;;;;;30640:11;30662:9;30624:49;;;;;;30042:639;;;;;:::o;31930:878::-;32029:23;32054:12;32068:18;32090:20;32102:7;32090:11;:20::i;:::-;32028:82;;;;;;32121:19;32143:10;:8;:10::i;:::-;32121:32;;32165:15;32182:23;32207:12;32223:51;32235:7;32244:4;32250:10;32262:11;32223;:51::i;:::-;32164:110;;;;;;32323:7;32305;:15;32313:6;32305:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;32287:7;:15;32295:6;32287:15;;;;;;;;;;;;;;;:43;;;;32345:11;:19;32357:6;32345:19;;;;;;;;;;;;;;;;;;;;;;;;;32341:95;;;32417:7;32399;:15;32407:6;32399:15;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;32381:7;:15;32389:6;32381:15;;;;;;;;;;;;;;;:43;;;;32341:95;32490:15;32469:7;:18;32477:9;32469:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;32448:7;:18;32456:9;32448:18;;;;;;;;;;;;;;;:57;;;;32520:11;:22;32532:9;32520:22;;;;;;;;;;;;;;;;;;;;;;;;;32516:112;;;32601:15;32580:7;:18;32588:9;32580:18;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;32559:7;:18;32567:9;32559:18;;;;;;;;;;;;;;;:57;;;;32516:112;32640:66;32659:6;32675:4;32682:10;32694:11;32640:18;:66::i;:::-;32717:23;32729:4;32735;32717:11;:23::i;:::-;32773:9;32756:44;;32765:6;32756:44;;;32784:15;32756:44;;;;;;:::i;:::-;;;;;;;;32017:791;;;;;;;31930:878;;;:::o;24965:385::-;25093:1;25082:7;:12;25078:29;;;25098:7;;25078:29;25119:15;25147:11;25137:7;:21;;;;:::i;:::-;25119:39;;25197:7;25183;:11;25191:2;25183:11;;;;;;;;;;;;;;;;:21;;;;:::i;:::-;25169:7;:11;25177:2;25169:11;;;;;;;;;;;;;;;:35;;;;25219:11;:15;25231:2;25219:15;;;;;;;;;;;;;;;;;;;;;;;;;25215:83;;;25279:7;25265;:11;25273:2;25265:11;;;;;;;;;;;;;;;;:21;;;;:::i;:::-;25251:7;:11;25259:2;25251:11;;;;;;;;;;;;;;;:35;;;;25215:83;25330:2;25313:29;;25322:6;25313:29;;;25334:7;25313:29;;;;;;:::i;:::-;;;;;;;;25067:283;24965:385;;;;;:::o;23212:144::-;23303:4;23293:7;;:14;;;;:::i;:::-;23280:7;:27;;;;23344:4;23331:10;;:17;;;;:::i;:::-;23318:10;:30;;;;23212:144;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;318:568::-;391:8;401:6;451:3;444:4;436:6;432:17;428:27;418:2;;459:79;;:::i;:::-;418:2;572:6;559:20;549:30;;602:18;594:6;591:30;588:2;;;624:79;;:::i;:::-;588:2;738:4;730:6;726:17;714:29;;792:3;784:4;776:6;772:17;762:8;758:32;755:41;752:2;;;799:79;;:::i;:::-;752:2;408:478;;;;;:::o;892:133::-;935:5;973:6;960:20;951:29;;989:30;1013:5;989:30;:::i;:::-;941:84;;;;:::o;1031:139::-;1077:5;1115:6;1102:20;1093:29;;1131:33;1158:5;1131:33;:::i;:::-;1083:87;;;;:::o;1176:143::-;1233:5;1264:6;1258:13;1249:22;;1280:33;1307:5;1280:33;:::i;:::-;1239:80;;;;:::o;1325:329::-;1384:6;1433:2;1421:9;1412:7;1408:23;1404:32;1401:2;;;1439:79;;:::i;:::-;1401:2;1559:1;1584:53;1629:7;1620:6;1609:9;1605:22;1584:53;:::i;:::-;1574:63;;1530:117;1391:263;;;;:::o;1660:351::-;1730:6;1779:2;1767:9;1758:7;1754:23;1750:32;1747:2;;;1785:79;;:::i;:::-;1747:2;1905:1;1930:64;1986:7;1977:6;1966:9;1962:22;1930:64;:::i;:::-;1920:74;;1876:128;1737:274;;;;:::o;2017:474::-;2085:6;2093;2142:2;2130:9;2121:7;2117:23;2113:32;2110:2;;;2148:79;;:::i;:::-;2110:2;2268:1;2293:53;2338:7;2329:6;2318:9;2314:22;2293:53;:::i;:::-;2283:63;;2239:117;2395:2;2421:53;2466:7;2457:6;2446:9;2442:22;2421:53;:::i;:::-;2411:63;;2366:118;2100:391;;;;;:::o;2497:619::-;2574:6;2582;2590;2639:2;2627:9;2618:7;2614:23;2610:32;2607:2;;;2645:79;;:::i;:::-;2607:2;2765:1;2790:53;2835:7;2826:6;2815:9;2811:22;2790:53;:::i;:::-;2780:63;;2736:117;2892:2;2918:53;2963:7;2954:6;2943:9;2939:22;2918:53;:::i;:::-;2908:63;;2863:118;3020:2;3046:53;3091:7;3082:6;3071:9;3067:22;3046:53;:::i;:::-;3036:63;;2991:118;2597:519;;;;;:::o;3122:468::-;3187:6;3195;3244:2;3232:9;3223:7;3219:23;3215:32;3212:2;;;3250:79;;:::i;:::-;3212:2;3370:1;3395:53;3440:7;3431:6;3420:9;3416:22;3395:53;:::i;:::-;3385:63;;3341:117;3497:2;3523:50;3565:7;3556:6;3545:9;3541:22;3523:50;:::i;:::-;3513:60;;3468:115;3202:388;;;;;:::o;3596:474::-;3664:6;3672;3721:2;3709:9;3700:7;3696:23;3692:32;3689:2;;;3727:79;;:::i;:::-;3689:2;3847:1;3872:53;3917:7;3908:6;3897:9;3893:22;3872:53;:::i;:::-;3862:63;;3818:117;3974:2;4000:53;4045:7;4036:6;4025:9;4021:22;4000:53;:::i;:::-;3990:63;;3945:118;3679:391;;;;;:::o;4076:559::-;4162:6;4170;4219:2;4207:9;4198:7;4194:23;4190:32;4187:2;;;4225:79;;:::i;:::-;4187:2;4373:1;4362:9;4358:17;4345:31;4403:18;4395:6;4392:30;4389:2;;;4425:79;;:::i;:::-;4389:2;4538:80;4610:7;4601:6;4590:9;4586:22;4538:80;:::i;:::-;4520:98;;;;4316:312;4177:458;;;;;:::o;4641:323::-;4697:6;4746:2;4734:9;4725:7;4721:23;4717:32;4714:2;;;4752:79;;:::i;:::-;4714:2;4872:1;4897:50;4939:7;4930:6;4919:9;4915:22;4897:50;:::i;:::-;4887:60;;4843:114;4704:260;;;;:::o;4970:329::-;5029:6;5078:2;5066:9;5057:7;5053:23;5049:32;5046:2;;;5084:79;;:::i;:::-;5046:2;5204:1;5229:53;5274:7;5265:6;5254:9;5250:22;5229:53;:::i;:::-;5219:63;;5175:117;5036:263;;;;:::o;5305:468::-;5370:6;5378;5427:2;5415:9;5406:7;5402:23;5398:32;5395:2;;;5433:79;;:::i;:::-;5395:2;5553:1;5578:53;5623:7;5614:6;5603:9;5599:22;5578:53;:::i;:::-;5568:63;;5524:117;5680:2;5706:50;5748:7;5739:6;5728:9;5724:22;5706:50;:::i;:::-;5696:60;;5651:115;5385:388;;;;;:::o;5779:474::-;5847:6;5855;5904:2;5892:9;5883:7;5879:23;5875:32;5872:2;;;5910:79;;:::i;:::-;5872:2;6030:1;6055:53;6100:7;6091:6;6080:9;6076:22;6055:53;:::i;:::-;6045:63;;6001:117;6157:2;6183:53;6228:7;6219:6;6208:9;6204:22;6183:53;:::i;:::-;6173:63;;6128:118;5862:391;;;;;:::o;6259:663::-;6347:6;6355;6363;6412:2;6400:9;6391:7;6387:23;6383:32;6380:2;;;6418:79;;:::i;:::-;6380:2;6538:1;6563:64;6619:7;6610:6;6599:9;6595:22;6563:64;:::i;:::-;6553:74;;6509:128;6676:2;6702:64;6758:7;6749:6;6738:9;6734:22;6702:64;:::i;:::-;6692:74;;6647:129;6815:2;6841:64;6897:7;6888:6;6877:9;6873:22;6841:64;:::i;:::-;6831:74;;6786:129;6370:552;;;;;:::o;6928:179::-;6997:10;7018:46;7060:3;7052:6;7018:46;:::i;:::-;7096:4;7091:3;7087:14;7073:28;;7008:99;;;;:::o;7113:108::-;7190:24;7208:5;7190:24;:::i;:::-;7185:3;7178:37;7168:53;;:::o;7227:118::-;7314:24;7332:5;7314:24;:::i;:::-;7309:3;7302:37;7292:53;;:::o;7381:732::-;7500:3;7529:54;7577:5;7529:54;:::i;:::-;7599:86;7678:6;7673:3;7599:86;:::i;:::-;7592:93;;7709:56;7759:5;7709:56;:::i;:::-;7788:7;7819:1;7804:284;7829:6;7826:1;7823:13;7804:284;;;7905:6;7899:13;7932:63;7991:3;7976:13;7932:63;:::i;:::-;7925:70;;8018:60;8071:6;8018:60;:::i;:::-;8008:70;;7864:224;7851:1;7848;7844:9;7839:14;;7804:284;;;7808:14;8104:3;8097:10;;7505:608;;;;;;;:::o;8119:109::-;8200:21;8215:5;8200:21;:::i;:::-;8195:3;8188:34;8178:50;;:::o;8234:183::-;8347:63;8404:5;8347:63;:::i;:::-;8342:3;8335:76;8325:92;;:::o;8423:147::-;8518:45;8557:5;8518:45;:::i;:::-;8513:3;8506:58;8496:74;;:::o;8576:364::-;8664:3;8692:39;8725:5;8692:39;:::i;:::-;8747:71;8811:6;8806:3;8747:71;:::i;:::-;8740:78;;8827:52;8872:6;8867:3;8860:4;8853:5;8849:16;8827:52;:::i;:::-;8904:29;8926:6;8904:29;:::i;:::-;8899:3;8895:39;8888:46;;8668:272;;;;;:::o;8946:366::-;9088:3;9109:67;9173:2;9168:3;9109:67;:::i;:::-;9102:74;;9185:93;9274:3;9185:93;:::i;:::-;9303:2;9298:3;9294:12;9287:19;;9092:220;;;:::o;9318:366::-;9460:3;9481:67;9545:2;9540:3;9481:67;:::i;:::-;9474:74;;9557:93;9646:3;9557:93;:::i;:::-;9675:2;9670:3;9666:12;9659:19;;9464:220;;;:::o;9690:366::-;9832:3;9853:67;9917:2;9912:3;9853:67;:::i;:::-;9846:74;;9929:93;10018:3;9929:93;:::i;:::-;10047:2;10042:3;10038:12;10031:19;;9836:220;;;:::o;10062:366::-;10204:3;10225:67;10289:2;10284:3;10225:67;:::i;:::-;10218:74;;10301:93;10390:3;10301:93;:::i;:::-;10419:2;10414:3;10410:12;10403:19;;10208:220;;;:::o;10434:366::-;10576:3;10597:67;10661:2;10656:3;10597:67;:::i;:::-;10590:74;;10673:93;10762:3;10673:93;:::i;:::-;10791:2;10786:3;10782:12;10775:19;;10580:220;;;:::o;10806:366::-;10948:3;10969:67;11033:2;11028:3;10969:67;:::i;:::-;10962:74;;11045:93;11134:3;11045:93;:::i;:::-;11163:2;11158:3;11154:12;11147:19;;10952:220;;;:::o;11178:366::-;11320:3;11341:67;11405:2;11400:3;11341:67;:::i;:::-;11334:74;;11417:93;11506:3;11417:93;:::i;:::-;11535:2;11530:3;11526:12;11519:19;;11324:220;;;:::o;11550:366::-;11692:3;11713:67;11777:2;11772:3;11713:67;:::i;:::-;11706:74;;11789:93;11878:3;11789:93;:::i;:::-;11907:2;11902:3;11898:12;11891:19;;11696:220;;;:::o;11922:366::-;12064:3;12085:67;12149:2;12144:3;12085:67;:::i;:::-;12078:74;;12161:93;12250:3;12161:93;:::i;:::-;12279:2;12274:3;12270:12;12263:19;;12068:220;;;:::o;12294:366::-;12436:3;12457:67;12521:2;12516:3;12457:67;:::i;:::-;12450:74;;12533:93;12622:3;12533:93;:::i;:::-;12651:2;12646:3;12642:12;12635:19;;12440:220;;;:::o;12666:366::-;12808:3;12829:67;12893:2;12888:3;12829:67;:::i;:::-;12822:74;;12905:93;12994:3;12905:93;:::i;:::-;13023:2;13018:3;13014:12;13007:19;;12812:220;;;:::o;13038:366::-;13180:3;13201:67;13265:2;13260:3;13201:67;:::i;:::-;13194:74;;13277:93;13366:3;13277:93;:::i;:::-;13395:2;13390:3;13386:12;13379:19;;13184:220;;;:::o;13410:366::-;13552:3;13573:67;13637:2;13632:3;13573:67;:::i;:::-;13566:74;;13649:93;13738:3;13649:93;:::i;:::-;13767:2;13762:3;13758:12;13751:19;;13556:220;;;:::o;13782:366::-;13924:3;13945:67;14009:2;14004:3;13945:67;:::i;:::-;13938:74;;14021:93;14110:3;14021:93;:::i;:::-;14139:2;14134:3;14130:12;14123:19;;13928:220;;;:::o;14154:366::-;14296:3;14317:67;14381:2;14376:3;14317:67;:::i;:::-;14310:74;;14393:93;14482:3;14393:93;:::i;:::-;14511:2;14506:3;14502:12;14495:19;;14300:220;;;:::o;14526:366::-;14668:3;14689:67;14753:2;14748:3;14689:67;:::i;:::-;14682:74;;14765:93;14854:3;14765:93;:::i;:::-;14883:2;14878:3;14874:12;14867:19;;14672:220;;;:::o;14898:118::-;14985:24;15003:5;14985:24;:::i;:::-;14980:3;14973:37;14963:53;;:::o;15022:112::-;15105:22;15121:5;15105:22;:::i;:::-;15100:3;15093:35;15083:51;;:::o;15140:222::-;15233:4;15271:2;15260:9;15256:18;15248:26;;15284:71;15352:1;15341:9;15337:17;15328:6;15284:71;:::i;:::-;15238:124;;;;:::o;15368:332::-;15489:4;15527:2;15516:9;15512:18;15504:26;;15540:71;15608:1;15597:9;15593:17;15584:6;15540:71;:::i;:::-;15621:72;15689:2;15678:9;15674:18;15665:6;15621:72;:::i;:::-;15494:206;;;;;:::o;15706:807::-;15955:4;15993:3;15982:9;15978:19;15970:27;;16007:71;16075:1;16064:9;16060:17;16051:6;16007:71;:::i;:::-;16088:72;16156:2;16145:9;16141:18;16132:6;16088:72;:::i;:::-;16170:80;16246:2;16235:9;16231:18;16222:6;16170:80;:::i;:::-;16260;16336:2;16325:9;16321:18;16312:6;16260:80;:::i;:::-;16350:73;16418:3;16407:9;16403:19;16394:6;16350:73;:::i;:::-;16433;16501:3;16490:9;16486:19;16477:6;16433:73;:::i;:::-;15960:553;;;;;;;;;:::o;16519:210::-;16606:4;16644:2;16633:9;16629:18;16621:26;;16657:65;16719:1;16708:9;16704:17;16695:6;16657:65;:::i;:::-;16611:118;;;;:::o;16735:274::-;16854:4;16892:2;16881:9;16877:18;16869:26;;16905:97;16999:1;16988:9;16984:17;16975:6;16905:97;:::i;:::-;16859:150;;;;:::o;17015:313::-;17128:4;17166:2;17155:9;17151:18;17143:26;;17215:9;17209:4;17205:20;17201:1;17190:9;17186:17;17179:47;17243:78;17316:4;17307:6;17243:78;:::i;:::-;17235:86;;17133:195;;;;:::o;17334:419::-;17500:4;17538:2;17527:9;17523:18;17515:26;;17587:9;17581:4;17577:20;17573:1;17562:9;17558:17;17551:47;17615:131;17741:4;17615:131;:::i;:::-;17607:139;;17505:248;;;:::o;17759:419::-;17925:4;17963:2;17952:9;17948:18;17940:26;;18012:9;18006:4;18002:20;17998:1;17987:9;17983:17;17976:47;18040:131;18166:4;18040:131;:::i;:::-;18032:139;;17930:248;;;:::o;18184:419::-;18350:4;18388:2;18377:9;18373:18;18365:26;;18437:9;18431:4;18427:20;18423:1;18412:9;18408:17;18401:47;18465:131;18591:4;18465:131;:::i;:::-;18457:139;;18355:248;;;:::o;18609:419::-;18775:4;18813:2;18802:9;18798:18;18790:26;;18862:9;18856:4;18852:20;18848:1;18837:9;18833:17;18826:47;18890:131;19016:4;18890:131;:::i;:::-;18882:139;;18780:248;;;:::o;19034:419::-;19200:4;19238:2;19227:9;19223:18;19215:26;;19287:9;19281:4;19277:20;19273:1;19262:9;19258:17;19251:47;19315:131;19441:4;19315:131;:::i;:::-;19307:139;;19205:248;;;:::o;19459:419::-;19625:4;19663:2;19652:9;19648:18;19640:26;;19712:9;19706:4;19702:20;19698:1;19687:9;19683:17;19676:47;19740:131;19866:4;19740:131;:::i;:::-;19732:139;;19630:248;;;:::o;19884:419::-;20050:4;20088:2;20077:9;20073:18;20065:26;;20137:9;20131:4;20127:20;20123:1;20112:9;20108:17;20101:47;20165:131;20291:4;20165:131;:::i;:::-;20157:139;;20055:248;;;:::o;20309:419::-;20475:4;20513:2;20502:9;20498:18;20490:26;;20562:9;20556:4;20552:20;20548:1;20537:9;20533:17;20526:47;20590:131;20716:4;20590:131;:::i;:::-;20582:139;;20480:248;;;:::o;20734:419::-;20900:4;20938:2;20927:9;20923:18;20915:26;;20987:9;20981:4;20977:20;20973:1;20962:9;20958:17;20951:47;21015:131;21141:4;21015:131;:::i;:::-;21007:139;;20905:248;;;:::o;21159:419::-;21325:4;21363:2;21352:9;21348:18;21340:26;;21412:9;21406:4;21402:20;21398:1;21387:9;21383:17;21376:47;21440:131;21566:4;21440:131;:::i;:::-;21432:139;;21330:248;;;:::o;21584:419::-;21750:4;21788:2;21777:9;21773:18;21765:26;;21837:9;21831:4;21827:20;21823:1;21812:9;21808:17;21801:47;21865:131;21991:4;21865:131;:::i;:::-;21857:139;;21755:248;;;:::o;22009:419::-;22175:4;22213:2;22202:9;22198:18;22190:26;;22262:9;22256:4;22252:20;22248:1;22237:9;22233:17;22226:47;22290:131;22416:4;22290:131;:::i;:::-;22282:139;;22180:248;;;:::o;22434:419::-;22600:4;22638:2;22627:9;22623:18;22615:26;;22687:9;22681:4;22677:20;22673:1;22662:9;22658:17;22651:47;22715:131;22841:4;22715:131;:::i;:::-;22707:139;;22605:248;;;:::o;22859:419::-;23025:4;23063:2;23052:9;23048:18;23040:26;;23112:9;23106:4;23102:20;23098:1;23087:9;23083:17;23076:47;23140:131;23266:4;23140:131;:::i;:::-;23132:139;;23030:248;;;:::o;23284:419::-;23450:4;23488:2;23477:9;23473:18;23465:26;;23537:9;23531:4;23527:20;23523:1;23512:9;23508:17;23501:47;23565:131;23691:4;23565:131;:::i;:::-;23557:139;;23455:248;;;:::o;23709:419::-;23875:4;23913:2;23902:9;23898:18;23890:26;;23962:9;23956:4;23952:20;23948:1;23937:9;23933:17;23926:47;23990:131;24116:4;23990:131;:::i;:::-;23982:139;;23880:248;;;:::o;24134:222::-;24227:4;24265:2;24254:9;24250:18;24242:26;;24278:71;24346:1;24335:9;24331:17;24322:6;24278:71;:::i;:::-;24232:124;;;;:::o;24362:831::-;24625:4;24663:3;24652:9;24648:19;24640:27;;24677:71;24745:1;24734:9;24730:17;24721:6;24677:71;:::i;:::-;24758:80;24834:2;24823:9;24819:18;24810:6;24758:80;:::i;:::-;24885:9;24879:4;24875:20;24870:2;24859:9;24855:18;24848:48;24913:108;25016:4;25007:6;24913:108;:::i;:::-;24905:116;;25031:72;25099:2;25088:9;25084:18;25075:6;25031:72;:::i;:::-;25113:73;25181:3;25170:9;25166:19;25157:6;25113:73;:::i;:::-;24630:563;;;;;;;;:::o;25199:442::-;25348:4;25386:2;25375:9;25371:18;25363:26;;25399:71;25467:1;25456:9;25452:17;25443:6;25399:71;:::i;:::-;25480:72;25548:2;25537:9;25533:18;25524:6;25480:72;:::i;:::-;25562;25630:2;25619:9;25615:18;25606:6;25562:72;:::i;:::-;25353:288;;;;;;:::o;25647:214::-;25736:4;25774:2;25763:9;25759:18;25751:26;;25787:67;25851:1;25840:9;25836:17;25827:6;25787:67;:::i;:::-;25741:120;;;;:::o;25948:132::-;26015:4;26038:3;26030:11;;26068:4;26063:3;26059:14;26051:22;;26020:60;;;:::o;26086:114::-;26153:6;26187:5;26181:12;26171:22;;26160:40;;;:::o;26206:99::-;26258:6;26292:5;26286:12;26276:22;;26265:40;;;:::o;26311:113::-;26381:4;26413;26408:3;26404:14;26396:22;;26386:38;;;:::o;26430:184::-;26529:11;26563:6;26558:3;26551:19;26603:4;26598:3;26594:14;26579:29;;26541:73;;;;:::o;26620:169::-;26704:11;26738:6;26733:3;26726:19;26778:4;26773:3;26769:14;26754:29;;26716:73;;;;:::o;26795:305::-;26835:3;26854:20;26872:1;26854:20;:::i;:::-;26849:25;;26888:20;26906:1;26888:20;:::i;:::-;26883:25;;27042:1;26974:66;26970:74;26967:1;26964:81;26961:2;;;27048:18;;:::i;:::-;26961:2;27092:1;27089;27085:9;27078:16;;26839:261;;;;:::o;27106:185::-;27146:1;27163:20;27181:1;27163:20;:::i;:::-;27158:25;;27197:20;27215:1;27197:20;:::i;:::-;27192:25;;27236:1;27226:2;;27241:18;;:::i;:::-;27226:2;27283:1;27280;27276:9;27271:14;;27148:143;;;;:::o;27297:348::-;27337:7;27360:20;27378:1;27360:20;:::i;:::-;27355:25;;27394:20;27412:1;27394:20;:::i;:::-;27389:25;;27582:1;27514:66;27510:74;27507:1;27504:81;27499:1;27492:9;27485:17;27481:105;27478:2;;;27589:18;;:::i;:::-;27478:2;27637:1;27634;27630:9;27619:20;;27345:300;;;;:::o;27651:191::-;27691:4;27711:20;27729:1;27711:20;:::i;:::-;27706:25;;27745:20;27763:1;27745:20;:::i;:::-;27740:25;;27784:1;27781;27778:8;27775:2;;;27789:18;;:::i;:::-;27775:2;27834:1;27831;27827:9;27819:17;;27696:146;;;;:::o;27848:96::-;27885:7;27914:24;27932:5;27914:24;:::i;:::-;27903:35;;27893:51;;;:::o;27950:90::-;27984:7;28027:5;28020:13;28013:21;28002:32;;27992:48;;;:::o;28046:126::-;28083:7;28123:42;28116:5;28112:54;28101:65;;28091:81;;;:::o;28178:77::-;28215:7;28244:5;28233:16;;28223:32;;;:::o;28261:86::-;28296:7;28336:4;28329:5;28325:16;28314:27;;28304:43;;;:::o;28353:178::-;28429:9;28462:63;28519:5;28462:63;:::i;:::-;28449:76;;28439:92;;;:::o;28537:139::-;28613:9;28646:24;28664:5;28646:24;:::i;:::-;28633:37;;28623:53;;;:::o;28682:121::-;28740:9;28773:24;28791:5;28773:24;:::i;:::-;28760:37;;28750:53;;;:::o;28809:307::-;28877:1;28887:113;28901:6;28898:1;28895:13;28887:113;;;28986:1;28981:3;28977:11;28971:18;28967:1;28962:3;28958:11;28951:39;28923:2;28920:1;28916:10;28911:15;;28887:113;;;29018:6;29015:1;29012:13;29009:2;;;29098:1;29089:6;29084:3;29080:16;29073:27;29009:2;28858:258;;;;:::o;29122:233::-;29161:3;29184:24;29202:5;29184:24;:::i;:::-;29175:33;;29230:66;29223:5;29220:77;29217:2;;;29300:18;;:::i;:::-;29217:2;29347:1;29340:5;29336:13;29329:20;;29165:190;;;:::o;29361:180::-;29409:77;29406:1;29399:88;29506:4;29503:1;29496:15;29530:4;29527:1;29520:15;29547:180;29595:77;29592:1;29585:88;29692:4;29689:1;29682:15;29716:4;29713:1;29706:15;29733:180;29781:77;29778:1;29771:88;29878:4;29875:1;29868:15;29902:4;29899:1;29892:15;29919:180;29967:77;29964:1;29957:88;30064:4;30061:1;30054:15;30088:4;30085:1;30078:15;30105:180;30153:77;30150:1;30143:88;30250:4;30247:1;30240:15;30274:4;30271:1;30264:15;30291:117;30400:1;30397;30390:12;30414:117;30523:1;30520;30513:12;30537:117;30646:1;30643;30636:12;30660:117;30769:1;30766;30759:12;30783:117;30892:1;30889;30882:12;30906:102;30947:6;30998:2;30994:7;30989:2;30982:5;30978:14;30974:28;30964:38;;30954:54;;;:::o;31014:224::-;31154:34;31150:1;31142:6;31138:14;31131:58;31223:7;31218:2;31210:6;31206:15;31199:32;31120:118;:::o;31244:174::-;31384:26;31380:1;31372:6;31368:14;31361:50;31350:68;:::o;31424:223::-;31564:34;31560:1;31552:6;31548:14;31541:58;31633:6;31628:2;31620:6;31616:15;31609:31;31530:117;:::o;31653:229::-;31793:34;31789:1;31781:6;31777:14;31770:58;31862:12;31857:2;31849:6;31845:15;31838:37;31759:123;:::o;31888:225::-;32028:34;32024:1;32016:6;32012:14;32005:58;32097:8;32092:2;32084:6;32080:15;32073:33;31994:119;:::o;32119:177::-;32259:29;32255:1;32247:6;32243:14;32236:53;32225:71;:::o;32302:177::-;32442:29;32438:1;32430:6;32426:14;32419:53;32408:71;:::o;32485:181::-;32625:33;32621:1;32613:6;32609:14;32602:57;32591:75;:::o;32672:227::-;32812:34;32808:1;32800:6;32796:14;32789:58;32881:10;32876:2;32868:6;32864:15;32857:35;32778:121;:::o;32905:182::-;33045:34;33041:1;33033:6;33029:14;33022:58;33011:76;:::o;33093:228::-;33233:34;33229:1;33221:6;33217:14;33210:58;33302:11;33297:2;33289:6;33285:15;33278:36;33199:122;:::o;33327:222::-;33467:34;33463:1;33455:6;33451:14;33444:58;33536:5;33531:2;33523:6;33519:15;33512:30;33433:116;:::o;33555:179::-;33695:31;33691:1;33683:6;33679:14;33672:55;33661:73;:::o;33740:243::-;33880:34;33876:1;33868:6;33864:14;33857:58;33949:26;33944:2;33936:6;33932:15;33925:51;33846:137;:::o;33989:221::-;34129:34;34125:1;34117:6;34113:14;34106:58;34198:4;34193:2;34185:6;34181:15;34174:29;34095:115;:::o;34216:222::-;34356:34;34352:1;34344:6;34340:14;34333:58;34425:5;34420:2;34412:6;34408:15;34401:30;34322:116;:::o;34444:122::-;34517:24;34535:5;34517:24;:::i;:::-;34510:5;34507:35;34497:2;;34556:1;34553;34546:12;34497:2;34487:79;:::o;34572:116::-;34642:21;34657:5;34642:21;:::i;:::-;34635:5;34632:32;34622:2;;34678:1;34675;34668:12;34622:2;34612:76;:::o;34694:122::-;34767:24;34785:5;34767:24;:::i;:::-;34760:5;34757:35;34747:2;;34806:1;34803;34796:12;34747:2;34737:79;:::o

Swarm Source

ipfs://955db3dff86806526b664cb89f3259584f910840660189ffd4320c6148ae6d59
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.