ETH Price: $2,969.50 (-4.05%)
Gas: 2 Gwei

Token

JACY (JACY)
 

Overview

Max Total Supply

100,000,000,000,000,000 JACY

Holders

3,685 (0.00%)

Market

Price

$0.00 @ 0.000000 ETH (+0.75%)

Onchain Market Cap

$510,100.00

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 9 Decimals)

Balance
44,988,880.681917912 JACY

Value
$0.00 ( ~0 Eth) [0.0000%]
0x181463908cff7b15bd6283ed7fe5ae7f1776b8cb
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Jacylabs is a Web3 ecosystem conglomerate.

Market

Volume (24H):$222.63
Market Capitalization:$0.00
Circulating Supply:0.00 JACY
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
JACY

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-08
*/

pragma solidity ^0.8.10;
// SPDX-License-Identifier: Unlicensed
interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

library SafeMath {

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

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

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

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

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

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

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

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

abstract contract Context {

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

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

library Address {
    
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

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

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

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    
    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;
    }
}


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 JACY is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private botWallets;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

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

    string private _name = "JACY";
    string private _symbol = "JACY";
    uint8 private _decimals = 9;

    uint256 public taxFee = 2;
    uint256 private _previousTaxFee = taxFee;

    uint256 public liquidityFee = 7;
    uint256 private _previousLiquidityFee = liquidityFee;

    uint256 public distributionSharePercentage = 72;
    uint256 public marketingFeePercentageage = 40;
    uint256 public charityFeePercentage = 20;
    uint256 public devFeePercentage = 40;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public trapBotsAtLaunch = true;
    uint256 public _maxTxAmount = 75000000000000 * 10**9;
    uint256 public numTokensSellToAddToLiquidity = 10000000000000 * 10**9;

    address public marketingWallet = 0xFD19C7dC892432268C14cD7C8859490673f8Ebf3;
    address public charityWallet = 0x58f47850aB0FaeE9a29396203813e89274A7589c;
    address public devWallet = 0xE5616f7f6c47ab2eC2C33E83dB0e782b526a50C5;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor () {
        _rOwned[_msgSender()] = _rTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[_msgSender()] = true;
        _isExcludedFromFee[marketingWallet] = true;
        _isExcludedFromFee[charityWallet] = true;
        _isExcludedFromFee[devWallet] = true;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;

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

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

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

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

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

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

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

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

    function airDrops(address[] calldata newholders, uint256[] calldata amounts) public onlyOwner() {
        uint256 iterator = 0;
        require(newholders.length == amounts.length, "must be the same length");
        while(iterator < newholders.length){
            _tokenTransfer(_msgSender(), newholders[iterator], amounts[iterator] * 10**9, false);
            iterator += 1;
        }
    }

    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount * 10**9;
    }
    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function excludeFromFee(address[] calldata addresses) public onlyOwner {
        addRemoveFee(addresses, true);
    }

    function includeInFee(address[] calldata addresses) public onlyOwner {
        addRemoveFee(addresses, false);
    }

    function addRemoveFee(address[] calldata addresses, bool flag) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            _isExcludedFromFee[addr] = flag;
        }
    }

    function setFees(uint256 taxFee_, uint256 liquidityFee_, uint256 marketingFeePercentage_, uint256 charityFeePercentage_, uint256 devFeePercentage_, 
        uint256 distSharePercentage, uint256 numTokensSellToAddToLiquidity_) external onlyOwner {
        require(marketingFeePercentage_.add(charityFeePercentage_).add(devFeePercentage_) == 100, "Fee percentage must equal 100");
        taxFee = taxFee_;
        marketingFeePercentageage = marketingFeePercentage_;
        charityFeePercentage = charityFeePercentage_;
        devFeePercentage = devFeePercentage_;
        liquidityFee = liquidityFee_;
        distributionSharePercentage = distSharePercentage;
        numTokensSellToAddToLiquidity = numTokensSellToAddToLiquidity_ * 10**9;
    }

    function setWallets(address _marketingWallet, address _charityWallet, address _devWallet) external onlyOwner {
        marketingWallet = _marketingWallet;
        charityWallet = _charityWallet;
        devWallet = _devWallet;
    }

    function setTrapAtLaunch(bool enableDisable) external onlyOwner() {
        trapBotsAtLaunch = enableDisable;
    }

    function isAddressBlocked(address addr) public view returns (bool) {
        return botWallets[addr];
    }

    function claimTokens() external onlyOwner() {
        uint256 numberOfTokensToSell = balanceOf(address(this));
        distributeShares(numberOfTokensToSell);
    }

    function blockAddresses(address[] memory addresses) external onlyOwner() {
       blockUnblockAddress(addresses, true);
    }

    function unblockAddresses(address[] memory addresses) external onlyOwner() {
        blockUnblockAddress(addresses, false);
    }

    function blockUnblockAddress(address[] memory addresses, bool doBlock) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            if(doBlock) {
                botWallets[addr] = true;
            } else {
                delete botWallets[addr];
            }
        }
    }

    function getContractTokenBalance() public view returns (uint256) {
        return balanceOf(address(this));
    }

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

    receive() external payable {}

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

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

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

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

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }

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

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

    function removeAllFee() private {
        if (taxFee == 0 && liquidityFee == 0) return;

        _previousTaxFee = taxFee;
        _previousLiquidityFee = liquidityFee;

        taxFee = 0;
        liquidityFee = 0;
    }

    function restoreAllFee() private {
        taxFee = _previousTaxFee;
        liquidityFee = _previousLiquidityFee;
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(from != owner() && to != owner())
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");

        uint256 contractTokenBalance = balanceOf(address(this));

        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }
        if (contractTokenBalance >= numTokensSellToAddToLiquidity && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled) {
            if(contractTokenBalance >= numTokensSellToAddToLiquidity) {
                contractTokenBalance = numTokensSellToAddToLiquidity;
            }
            //distribution shares is the percentage to be shared between marketing, charity, and dev wallets
            //remainder will be for the liquidity pool
            uint256 balanceToShareTokens = contractTokenBalance.mul(distributionSharePercentage).div(100);
            uint256 liquidityPoolTokens = contractTokenBalance.sub(balanceToShareTokens);
            
            //just in case distributionSharePercentage is set to 100%, there will be no tokens to be swapped for liquidity pool
            if(liquidityPoolTokens > 0) {
                //add liquidity
                swapAndLiquify(liquidityPoolTokens);
            }
            //send eth to wallets (marketing, charity, dev)
            distributeShares(balanceToShareTokens);               
        }
        
        if(from == uniswapV2Pair && trapBotsAtLaunch) {
            botWallets[to] = true;            
        }

        if(from != uniswapV2Pair) {
            require(!botWallets[from] , "bots are not allowed to sell or transfer tokens");
            require(!botWallets[to] , "bots are not allowed to sell or transfer tokens");
        }
        
        bool takeFee = true;
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to] || from == owner() || to == owner()) {
            takeFee = false;
        }
        _tokenTransfer(from, to, amount, takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {

        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

        uint256 initialBalance = address(this).balance;

        swapTokensForEth(half);

        uint256 newBalance = address(this).balance.sub(initialBalance);

        addLiquidity(otherHalf, newBalance);
        
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function distributeShares(uint256 balanceToShareTokens) private lockTheSwap {
        
        swapTokensForEth(balanceToShareTokens);
        uint256 balanceToShare = address(this).balance;
        uint256 marketingShare = balanceToShare.mul(marketingFeePercentageage).div(100);
        uint256 charityShare = balanceToShare.mul(charityFeePercentage).div(100);
        uint256 devShare = balanceToShare.mul(devFeePercentage).div(100);

        payable(marketingWallet).transfer(marketingShare);
        payable(charityWallet).transfer(charityShare);
        payable(devWallet).transfer(devShare);

    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

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

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {

        if(!takeFee)
            removeAllFee();

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"newholders","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airDrops","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":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"blockAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"charityFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"charityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributionSharePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getContractTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"includeInFee","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":"addr","type":"address"}],"name":"isAddressBlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeePercentageage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee_","type":"uint256"},{"internalType":"uint256","name":"liquidityFee_","type":"uint256"},{"internalType":"uint256","name":"marketingFeePercentage_","type":"uint256"},{"internalType":"uint256","name":"charityFeePercentage_","type":"uint256"},{"internalType":"uint256","name":"devFeePercentage_","type":"uint256"},{"internalType":"uint256","name":"distSharePercentage","type":"uint256"},{"internalType":"uint256","name":"numTokensSellToAddToLiquidity_","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enableDisable","type":"bool"}],"name":"setTrapAtLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_charityWallet","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"trapBotsAtLaunch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"unblockAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526a52b7d2dcc80cd2e400000060085560085460001962000025919062000951565b600019620000349190620009b8565b6009556040518060400160405280600481526020017f4a41435900000000000000000000000000000000000000000000000000000000815250600b90805190602001906200008492919062000868565b506040518060400160405280600481526020017f4a41435900000000000000000000000000000000000000000000000000000000815250600c9080519060200190620000d292919062000868565b506009600d60006101000a81548160ff021916908360ff1602179055506002600e55600e54600f556007601055601054601155604860125560286013556014805560286015556001601760156101000a81548160ff0219169083151502179055506001601760166101000a81548160ff021916908315150217905550690fe1c215e8f838e0000060185569021e19e0c9bab240000060195573fd19c7dc892432268c14cd7c8859490673f8ebf3601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507358f47850ab0faee9a29396203813e89274a7589c601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e5616f7f6c47ab2ec2c33e83db0e782b526a50c5601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200027657600080fd5b506000620002896200083760201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600954600160006200033e6200083760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160056000620003926200083f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000620003f96200083760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200061d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000643919062000a5d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620006ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006d1919062000a5d565b6040518363ffffffff1660e01b8152600401620006f092919062000aa0565b6020604051808303816000875af115801562000710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000736919062000a5d565b601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620007c76200083760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60085460405162000828919062000ade565b60405180910390a35062000b60565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620008769062000b2a565b90600052602060002090601f0160209004810192826200089a5760008555620008e6565b82601f10620008b557805160ff1916838001178555620008e6565b82800160010185558215620008e6579182015b82811115620008e5578251825591602001919060010190620008c8565b5b509050620008f59190620008f9565b5090565b5b8082111562000914576000816000905550600101620008fa565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200095e8262000918565b91506200096b8362000918565b9250826200097e576200097d62000922565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620009c58262000918565b9150620009d28362000918565b925082821015620009e857620009e762000989565b5b828203905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000a2582620009f8565b9050919050565b62000a378162000a18565b811462000a4357600080fd5b50565b60008151905062000a578162000a2c565b92915050565b60006020828403121562000a765762000a75620009f3565b5b600062000a868482850162000a46565b91505092915050565b62000a9a8162000a18565b82525050565b600060408201905062000ab7600083018562000a8f565b62000ac6602083018462000a8f565b9392505050565b62000ad88162000918565b82525050565b600060208201905062000af5600083018462000acd565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b4357607f821691505b6020821081141562000b5a5762000b5962000afb565b5b50919050565b615da68062000b706000396000f3fe6080604052600436106102975760003560e01c80637d1db4a51161015a578063c49b9a80116100c1578063e884269a1161007a578063e884269a14610a4d578063e9e3e1ae14610a78578063eaeddcc514610aa3578063ec28438a14610ace578063f2fde38b14610af7578063f432f49314610b205761029e565b8063c49b9a801461092d578063d12a768814610956578063da2e3bad14610981578063dcda6af3146109aa578063dd62ed3e146109d3578063e7dad4f914610a105761029e565b806398118cb41161011357806398118cb4146108095780639b0e2e8614610834578063a071dcf41461085d578063a457c2d714610888578063a9059cbb146108c5578063b202886b146109025761029e565b80637d1db4a5146106f757806385d4787b1461072257806388f820201461074b5780638da5cb5b146107885780638ea5220f146107b357806395d89b41146107de5761029e565b80633bd5d173116101fe57806370a08231116101b757806370a08231146105fb578063715018a61461063857806371b9189c1461064f57806375cb1bd11461067857806375f0a874146106a15780637b208769146106cc5761029e565b80633bd5d173146104eb5780634549b0391461051457806348c54b9d1461055157806349bd5a5e146105685780634a74bb02146105935780635342acb4146105be5761029e565b806318160ddd1161025057806318160ddd146103b357806323b872dd146103de5780632d8381191461041b578063313ce56714610458578063317d94531461048357806339509351146104ae5761029e565b8063024022f7146102a357806306fdde03146102cc578063095ea7b3146102f75780631282ff501461033457806313114a9d1461035d5780631694505e146103885761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102ca60048036038101906102c591906147f0565b610b4b565b005b3480156102d857600080fd5b506102e1610bf0565b6040516102ee91906148d6565b60405180910390f35b34801561030357600080fd5b5061031e6004803603810190610319919061498c565b610c82565b60405161032b91906149e7565b60405180910390f35b34801561034057600080fd5b5061035b60048036038101906103569190614a2e565b610ca0565b005b34801561036957600080fd5b50610372610d52565b60405161037f9190614a6a565b60405180910390f35b34801561039457600080fd5b5061039d610d5c565b6040516103aa9190614ae4565b60405180910390f35b3480156103bf57600080fd5b506103c8610d82565b6040516103d59190614a6a565b60405180910390f35b3480156103ea57600080fd5b5061040560048036038101906104009190614aff565b610d8c565b60405161041291906149e7565b60405180910390f35b34801561042757600080fd5b50610442600480360381019061043d9190614b52565b610e65565b60405161044f9190614a6a565b60405180910390f35b34801561046457600080fd5b5061046d610ed3565b60405161047a9190614b9b565b60405180910390f35b34801561048f57600080fd5b50610498610eea565b6040516104a59190614a6a565b60405180910390f35b3480156104ba57600080fd5b506104d560048036038101906104d0919061498c565b610efa565b6040516104e291906149e7565b60405180910390f35b3480156104f757600080fd5b50610512600480360381019061050d9190614b52565b610fad565b005b34801561052057600080fd5b5061053b60048036038101906105369190614bb6565b611128565b6040516105489190614a6a565b60405180910390f35b34801561055d57600080fd5b506105666111ac565b005b34801561057457600080fd5b5061057d61125a565b60405161058a9190614c05565b60405180910390f35b34801561059f57600080fd5b506105a8611280565b6040516105b591906149e7565b60405180910390f35b3480156105ca57600080fd5b506105e560048036038101906105e09190614c20565b611293565b6040516105f291906149e7565b60405180910390f35b34801561060757600080fd5b50610622600480360381019061061d9190614c20565b6112e9565b60405161062f9190614a6a565b60405180910390f35b34801561064457600080fd5b5061064d6113d4565b005b34801561065b57600080fd5b50610676600480360381019061067191906147f0565b611527565b005b34801561068457600080fd5b5061069f600480360381019061069a9190614c4d565b6115cc565b005b3480156106ad57600080fd5b506106b6611729565b6040516106c39190614c05565b60405180910390f35b3480156106d857600080fd5b506106e161174f565b6040516106ee9190614c05565b60405180910390f35b34801561070357600080fd5b5061070c611775565b6040516107199190614a6a565b60405180910390f35b34801561072e57600080fd5b5061074960048036038101906107449190614dde565b61177b565b005b34801561075757600080fd5b50610772600480360381019061076d9190614c20565b61181e565b60405161077f91906149e7565b60405180910390f35b34801561079457600080fd5b5061079d611874565b6040516107aa9190614c05565b60405180910390f35b3480156107bf57600080fd5b506107c861189d565b6040516107d59190614c05565b60405180910390f35b3480156107ea57600080fd5b506107f36118c3565b60405161080091906148d6565b60405180910390f35b34801561081557600080fd5b5061081e611955565b60405161082b9190614a6a565b60405180910390f35b34801561084057600080fd5b5061085b60048036038101906108569190614dde565b61195b565b005b34801561086957600080fd5b506108726119fe565b60405161087f9190614a6a565b60405180910390f35b34801561089457600080fd5b506108af60048036038101906108aa919061498c565b611a04565b6040516108bc91906149e7565b60405180910390f35b3480156108d157600080fd5b506108ec60048036038101906108e7919061498c565b611ad1565b6040516108f991906149e7565b60405180910390f35b34801561090e57600080fd5b50610917611aef565b6040516109249190614a6a565b60405180910390f35b34801561093957600080fd5b50610954600480360381019061094f9190614a2e565b611af5565b005b34801561096257600080fd5b5061096b611bde565b6040516109789190614a6a565b60405180910390f35b34801561098d57600080fd5b506109a860048036038101906109a39190614e27565b611be4565b005b3480156109b657600080fd5b506109d160048036038101906109cc9190614f1f565b611d29565b005b3480156109df57600080fd5b506109fa60048036038101906109f59190614fa0565b611e92565b604051610a079190614a6a565b60405180910390f35b348015610a1c57600080fd5b50610a376004803603810190610a329190614c20565b611f19565b604051610a4491906149e7565b60405180910390f35b348015610a5957600080fd5b50610a62611f6f565b604051610a6f9190614a6a565b60405180910390f35b348015610a8457600080fd5b50610a8d611f75565b604051610a9a9190614a6a565b60405180910390f35b348015610aaf57600080fd5b50610ab8611f7b565b604051610ac59190614a6a565b60405180910390f35b348015610ada57600080fd5b50610af56004803603810190610af09190614b52565b611f81565b005b348015610b0357600080fd5b50610b1e6004803603810190610b199190614c20565b61202f565b005b348015610b2c57600080fd5b50610b356121f1565b604051610b4291906149e7565b60405180910390f35b610b53612204565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd79061502c565b60405180910390fd5b610bec8282600061220c565b5050565b6060600b8054610bff9061507b565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2b9061507b565b8015610c785780601f10610c4d57610100808354040283529160200191610c78565b820191906000526020600020905b815481529060010190602001808311610c5b57829003601f168201915b5050505050905090565b6000610c96610c8f612204565b84846122b7565b6001905092915050565b610ca8612204565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2c9061502c565b60405180910390fd5b80601760166101000a81548160ff02191690831515021790555050565b6000600a54905090565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600854905090565b6000610d99848484612482565b610e5a84610da5612204565b610e5585604051806060016040528060288152602001615d2460289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e0b612204565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612afe9092919063ffffffff16565b6122b7565b600190509392505050565b6000600954821115610eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea39061511f565b60405180910390fd5b6000610eb6612b62565b9050610ecb8184612b8d90919063ffffffff16565b915050919050565b6000600d60009054906101000a900460ff16905090565b6000610ef5306112e9565b905090565b6000610fa3610f07612204565b84610f9e8560036000610f18612204565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bd790919063ffffffff16565b6122b7565b6001905092915050565b6000610fb7612204565b9050600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103d906151b1565b60405180910390fd5b600061105183612c35565b505050505090506110aa81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c9190919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061110281600954612c9190919063ffffffff16565b60098190555061111d83600a54612bd790919063ffffffff16565b600a81905550505050565b600060085483111561116f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111669061521d565b60405180910390fd5b8161118f57600061117f84612c35565b50505050509050809150506111a6565b600061119a84612c35565b50505050915050809150505b92915050565b6111b4612204565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611241576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112389061502c565b60405180910390fd5b600061124c306112e9565b905061125781612cdb565b50565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601760159054906101000a900460ff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561138457600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506113cf565b6113cc600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e65565b90505b919050565b6113dc612204565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611469576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114609061502c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61152f612204565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b39061502c565b60405180910390fd5b6115c88282600161220c565b5050565b6115d4612204565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611661576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116589061502c565b60405180910390fd5b82601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b611783612204565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611810576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118079061502c565b60405180910390fd5b61181b816001612ee5565b50565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600c80546118d29061507b565b80601f01602080910402602001604051908101604052809291908181526020018280546118fe9061507b565b801561194b5780601f106119205761010080835404028352916020019161194b565b820191906000526020600020905b81548152906001019060200180831161192e57829003601f168201915b5050505050905090565b60105481565b611963612204565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e79061502c565b60405180910390fd5b6119fb816000612ee5565b50565b600e5481565b6000611ac7611a11612204565b84611ac285604051806060016040528060258152602001615d4c6025913960036000611a3b612204565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612afe9092919063ffffffff16565b6122b7565b6001905092915050565b6000611ae5611ade612204565b8484612482565b6001905092915050565b60125481565b611afd612204565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b819061502c565b60405180910390fd5b80601760156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611bd391906149e7565b60405180910390a150565b60195481565b611bec612204565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c709061502c565b60405180910390fd5b6064611ca084611c928789612bd790919063ffffffff16565b612bd790919063ffffffff16565b14611ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd790615289565b60405180910390fd5b86600e819055508460138190555083601481905550826015819055508560108190555081601281905550633b9aca0081611d1a91906152d8565b60198190555050505050505050565b611d31612204565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db59061502c565b60405180910390fd5b6000828290508585905014611e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dff9061537e565b60405180910390fd5b5b84849050811015611e8b57611e77611e1f612204565b868684818110611e3257611e3161539e565b5b9050602002016020810190611e479190614c20565b633b9aca00868686818110611e5f57611e5e61539e565b5b90506020020135611e7091906152d8565b6000612fdc565b600181611e8491906153cd565b9050611e09565b5050505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60155481565b60145481565b60135481565b611f89612204565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200d9061502c565b60405180910390fd5b633b9aca008161202691906152d8565b60188190555050565b612037612204565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bb9061502c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612134576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212b90615495565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601760169054906101000a900460ff1681565b600033905090565b60005b838390508110156122b157600084848381811061222f5761222e61539e565b5b90506020020160208101906122449190614c20565b905082600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806122a9906154b5565b91505061220f565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231e90615570565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238e90615602565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124759190614a6a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e990615694565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612562576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255990615726565b60405180910390fd5b600081116125a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259c906157b8565b60405180910390fd5b6125ad611874565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561261b57506125eb611874565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561266657601854811115612665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265c9061584a565b60405180910390fd5b5b6000612671306112e9565b905060185481106126825760185490505b60195481101580156126a15750601760149054906101000a900460ff16155b80156126fb5750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156127135750601760159054906101000a900460ff165b156127895760195481106127275760195490505b60006127516064612743601254856132ed90919063ffffffff16565b612b8d90919063ffffffff16565b905060006127688284612c9190919063ffffffff16565b9050600081111561277d5761277c81613368565b5b61278682612cdb565b50505b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156127f25750601760169054906101000a900460ff165b15612850576001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146129c057600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612932576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612929906158dc565b60405180910390fd5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156129bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b6906158dc565b60405180910390fd5b5b600060019050600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a675750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612aa45750612a75611874565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b80612ae15750612ab2611874565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15612aeb57600090505b612af785858584612fdc565b5050505050565b6000838311158290612b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3d91906148d6565b60405180910390fd5b5060008385612b5591906158fc565b9050809150509392505050565b6000806000612b6f61343e565b91509150612b868183612b8d90919063ffffffff16565b9250505090565b6000612bcf83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506136f1565b905092915050565b6000808284612be691906153cd565b905083811015612c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c229061597c565b60405180910390fd5b8091505092915050565b6000806000806000806000806000612c4c8a613754565b9250925092506000806000612c6a8d8686612c65612b62565b6137ae565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000612cd383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612afe565b905092915050565b6001601760146101000a81548160ff021916908315150217905550612cff81613837565b60004790506000612d2e6064612d20601354856132ed90919063ffffffff16565b612b8d90919063ffffffff16565b90506000612d5a6064612d4c601454866132ed90919063ffffffff16565b612b8d90919063ffffffff16565b90506000612d866064612d78601554876132ed90919063ffffffff16565b612b8d90919063ffffffff16565b9050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015612df0573d6000803e3d6000fd5b50601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612e59573d6000803e3d6000fd5b50601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612ec2573d6000803e3d6000fd5b50505050506000601760146101000a81548160ff02191690831515021790555050565b60005b8251811015612fd7576000838281518110612f0657612f0561539e565b5b602002602001015190508215612f73576001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612fc3565b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b508080612fcf906154b5565b915050612ee8565b505050565b80612fea57612fe9613a7a565b5b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561308d5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130a25761309d848484613abd565b6132d9565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131455750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561315a57613155848484613d1d565b6132d8565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131fe5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132135761320e848484613f7d565b6132d7565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132b55750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132ca576132c5848484614148565b6132d6565b6132d5848484613f7d565b5b5b5b5b806132e7576132e661443d565b5b50505050565b6000808314156133005760009050613362565b6000828461330e91906152d8565b905082848261331d91906159cb565b1461335d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335490615a6e565b60405180910390fd5b809150505b92915050565b6001601760146101000a81548160ff0219169083151502179055506000613399600283612b8d90919063ffffffff16565b905060006133b08284612c9190919063ffffffff16565b905060004790506133c083613837565b60006133d58247612c9190919063ffffffff16565b90506133e18382614451565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161341493929190615a8e565b60405180910390a1505050506000601760146101000a81548160ff02191690831515021790555050565b600080600060095490506000600854905060005b6007805490508110156136b4578260016000600784815481106134785761347761539e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061356657508160026000600784815481106134fe576134fd61539e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561357d57600954600854945094505050506136ed565b61360d60016000600784815481106135985761359761539e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612c9190919063ffffffff16565b925061369f600260006007848154811061362a5761362961539e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612c9190919063ffffffff16565b915080806136ac906154b5565b915050613452565b506136cc600854600954612b8d90919063ffffffff16565b8210156136e4576009546008549350935050506136ed565b81819350935050505b9091565b60008083118290613738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161372f91906148d6565b60405180910390fd5b506000838561374791906159cb565b9050809150509392505050565b60008060008061376385614536565b9050600061377086614567565b905060006137998261378b858a612c9190919063ffffffff16565b612c9190919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806137c785896132ed90919063ffffffff16565b905060006137de86896132ed90919063ffffffff16565b905060006137f587896132ed90919063ffffffff16565b9050600061381e826138108587612c9190919063ffffffff16565b612c9190919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff81111561385457613853614ca0565b5b6040519080825280602002602001820160405280156138825781602001602082028036833780820191505090505b509050308160008151811061389a5761389961539e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613941573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139659190615ada565b816001815181106139795761397861539e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506139e030601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846122b7565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a44959493929190615c00565b600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050505050565b6000600e54148015613a8e57506000601054145b15613a9857613abb565b600e54600f819055506010546011819055506000600e8190555060006010819055505b565b600080600080600080613acf87612c35565b955095509550955095509550613b2d87600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c9190919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bc286600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c9190919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c5785600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bd790919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ca381614598565b613cad848361473d565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613d0a9190614a6a565b60405180910390a3505050505050505050565b600080600080600080613d2f87612c35565b955095509550955095509550613d8d86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c9190919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e2283600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bd790919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613eb785600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bd790919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f0381614598565b613f0d848361473d565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613f6a9190614a6a565b60405180910390a3505050505050505050565b600080600080600080613f8f87612c35565b955095509550955095509550613fed86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c9190919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061408285600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bd790919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140ce81614598565b6140d8848361473d565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516141359190614a6a565b60405180910390a3505050505050505050565b60008060008060008061415a87612c35565b9550955095509550955095506141b887600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c9190919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061424d86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c9190919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142e283600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bd790919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061437785600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bd790919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143c381614598565b6143cd848361473d565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161442a9190614a6a565b60405180910390a3505050505050505050565b600f54600e81905550601154601081905550565b61447e30601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846122b7565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806144ca611874565b426040518863ffffffff1660e01b81526004016144ec96959493929190615c5a565b60606040518083038185885af115801561450a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061452f9190615cd0565b5050505050565b60006145606064614552600e54856132ed90919063ffffffff16565b612b8d90919063ffffffff16565b9050919050565b60006145916064614583601054856132ed90919063ffffffff16565b612b8d90919063ffffffff16565b9050919050565b60006145a2612b62565b905060006145b982846132ed90919063ffffffff16565b905061460d81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bd790919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614738576146f483600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bd790919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61475282600954612c9190919063ffffffff16565b60098190555061476d81600a54612bd790919063ffffffff16565b600a819055505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126147b0576147af61478b565b5b8235905067ffffffffffffffff8111156147cd576147cc614790565b5b6020830191508360208202830111156147e9576147e8614795565b5b9250929050565b6000806020838503121561480757614806614781565b5b600083013567ffffffffffffffff81111561482557614824614786565b5b6148318582860161479a565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561487757808201518184015260208101905061485c565b83811115614886576000848401525b50505050565b6000601f19601f8301169050919050565b60006148a88261483d565b6148b28185614848565b93506148c2818560208601614859565b6148cb8161488c565b840191505092915050565b600060208201905081810360008301526148f0818461489d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614923826148f8565b9050919050565b61493381614918565b811461493e57600080fd5b50565b6000813590506149508161492a565b92915050565b6000819050919050565b61496981614956565b811461497457600080fd5b50565b60008135905061498681614960565b92915050565b600080604083850312156149a3576149a2614781565b5b60006149b185828601614941565b92505060206149c285828601614977565b9150509250929050565b60008115159050919050565b6149e1816149cc565b82525050565b60006020820190506149fc60008301846149d8565b92915050565b614a0b816149cc565b8114614a1657600080fd5b50565b600081359050614a2881614a02565b92915050565b600060208284031215614a4457614a43614781565b5b6000614a5284828501614a19565b91505092915050565b614a6481614956565b82525050565b6000602082019050614a7f6000830184614a5b565b92915050565b6000819050919050565b6000614aaa614aa5614aa0846148f8565b614a85565b6148f8565b9050919050565b6000614abc82614a8f565b9050919050565b6000614ace82614ab1565b9050919050565b614ade81614ac3565b82525050565b6000602082019050614af96000830184614ad5565b92915050565b600080600060608486031215614b1857614b17614781565b5b6000614b2686828701614941565b9350506020614b3786828701614941565b9250506040614b4886828701614977565b9150509250925092565b600060208284031215614b6857614b67614781565b5b6000614b7684828501614977565b91505092915050565b600060ff82169050919050565b614b9581614b7f565b82525050565b6000602082019050614bb06000830184614b8c565b92915050565b60008060408385031215614bcd57614bcc614781565b5b6000614bdb85828601614977565b9250506020614bec85828601614a19565b9150509250929050565b614bff81614918565b82525050565b6000602082019050614c1a6000830184614bf6565b92915050565b600060208284031215614c3657614c35614781565b5b6000614c4484828501614941565b91505092915050565b600080600060608486031215614c6657614c65614781565b5b6000614c7486828701614941565b9350506020614c8586828701614941565b9250506040614c9686828701614941565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614cd88261488c565b810181811067ffffffffffffffff82111715614cf757614cf6614ca0565b5b80604052505050565b6000614d0a614777565b9050614d168282614ccf565b919050565b600067ffffffffffffffff821115614d3657614d35614ca0565b5b602082029050602081019050919050565b6000614d5a614d5584614d1b565b614d00565b90508083825260208201905060208402830185811115614d7d57614d7c614795565b5b835b81811015614da65780614d928882614941565b845260208401935050602081019050614d7f565b5050509392505050565b600082601f830112614dc557614dc461478b565b5b8135614dd5848260208601614d47565b91505092915050565b600060208284031215614df457614df3614781565b5b600082013567ffffffffffffffff811115614e1257614e11614786565b5b614e1e84828501614db0565b91505092915050565b600080600080600080600060e0888a031215614e4657614e45614781565b5b6000614e548a828b01614977565b9750506020614e658a828b01614977565b9650506040614e768a828b01614977565b9550506060614e878a828b01614977565b9450506080614e988a828b01614977565b93505060a0614ea98a828b01614977565b92505060c0614eba8a828b01614977565b91505092959891949750929550565b60008083601f840112614edf57614ede61478b565b5b8235905067ffffffffffffffff811115614efc57614efb614790565b5b602083019150836020820283011115614f1857614f17614795565b5b9250929050565b60008060008060408587031215614f3957614f38614781565b5b600085013567ffffffffffffffff811115614f5757614f56614786565b5b614f638782880161479a565b9450945050602085013567ffffffffffffffff811115614f8657614f85614786565b5b614f9287828801614ec9565b925092505092959194509250565b60008060408385031215614fb757614fb6614781565b5b6000614fc585828601614941565b9250506020614fd685828601614941565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000615016602083614848565b915061502182614fe0565b602082019050919050565b6000602082019050818103600083015261504581615009565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061509357607f821691505b602082108114156150a7576150a661504c565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000615109602a83614848565b9150615114826150ad565b604082019050919050565b60006020820190508181036000830152615138816150fc565b9050919050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b600061519b602c83614848565b91506151a68261513f565b604082019050919050565b600060208201905081810360008301526151ca8161518e565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b6000615207601f83614848565b9150615212826151d1565b602082019050919050565b60006020820190508181036000830152615236816151fa565b9050919050565b7f4665652070657263656e74616765206d75737420657175616c20313030000000600082015250565b6000615273601d83614848565b915061527e8261523d565b602082019050919050565b600060208201905081810360008301526152a281615266565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006152e382614956565b91506152ee83614956565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615327576153266152a9565b5b828202905092915050565b7f6d757374206265207468652073616d65206c656e677468000000000000000000600082015250565b6000615368601783614848565b915061537382615332565b602082019050919050565b600060208201905081810360008301526153978161535b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006153d882614956565b91506153e383614956565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615418576154176152a9565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061547f602683614848565b915061548a82615423565b604082019050919050565b600060208201905081810360008301526154ae81615472565b9050919050565b60006154c082614956565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156154f3576154f26152a9565b5b600182019050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061555a602483614848565b9150615565826154fe565b604082019050919050565b600060208201905081810360008301526155898161554d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006155ec602283614848565b91506155f782615590565b604082019050919050565b6000602082019050818103600083015261561b816155df565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061567e602583614848565b915061568982615622565b604082019050919050565b600060208201905081810360008301526156ad81615671565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615710602383614848565b915061571b826156b4565b604082019050919050565b6000602082019050818103600083015261573f81615703565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006157a2602983614848565b91506157ad82615746565b604082019050919050565b600060208201905081810360008301526157d181615795565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000615834602883614848565b915061583f826157d8565b604082019050919050565b6000602082019050818103600083015261586381615827565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c206f722060008201527f7472616e7366657220746f6b656e730000000000000000000000000000000000602082015250565b60006158c6602f83614848565b91506158d18261586a565b604082019050919050565b600060208201905081810360008301526158f5816158b9565b9050919050565b600061590782614956565b915061591283614956565b925082821015615925576159246152a9565b5b828203905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615966601b83614848565b915061597182615930565b602082019050919050565b6000602082019050818103600083015261599581615959565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006159d682614956565b91506159e183614956565b9250826159f1576159f061599c565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a58602183614848565b9150615a63826159fc565b604082019050919050565b60006020820190508181036000830152615a8781615a4b565b9050919050565b6000606082019050615aa36000830186614a5b565b615ab06020830185614a5b565b615abd6040830184614a5b565b949350505050565b600081519050615ad48161492a565b92915050565b600060208284031215615af057615aef614781565b5b6000615afe84828501615ac5565b91505092915050565b6000819050919050565b6000615b2c615b27615b2284615b07565b614a85565b614956565b9050919050565b615b3c81615b11565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615b7781614918565b82525050565b6000615b898383615b6e565b60208301905092915050565b6000602082019050919050565b6000615bad82615b42565b615bb78185615b4d565b9350615bc283615b5e565b8060005b83811015615bf3578151615bda8882615b7d565b9750615be583615b95565b925050600181019050615bc6565b5085935050505092915050565b600060a082019050615c156000830188614a5b565b615c226020830187615b33565b8181036040830152615c348186615ba2565b9050615c436060830185614bf6565b615c506080830184614a5b565b9695505050505050565b600060c082019050615c6f6000830189614bf6565b615c7c6020830188614a5b565b615c896040830187615b33565b615c966060830186615b33565b615ca36080830185614bf6565b615cb060a0830184614a5b565b979650505050505050565b600081519050615cca81614960565b92915050565b600080600060608486031215615ce957615ce8614781565b5b6000615cf786828701615cbb565b9350506020615d0886828701615cbb565b9250506040615d1986828701615cbb565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220873d8f6a5e1da6451e7782321ddf806ef4d592267ab4f6c0af555cf20417f4b164736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106102975760003560e01c80637d1db4a51161015a578063c49b9a80116100c1578063e884269a1161007a578063e884269a14610a4d578063e9e3e1ae14610a78578063eaeddcc514610aa3578063ec28438a14610ace578063f2fde38b14610af7578063f432f49314610b205761029e565b8063c49b9a801461092d578063d12a768814610956578063da2e3bad14610981578063dcda6af3146109aa578063dd62ed3e146109d3578063e7dad4f914610a105761029e565b806398118cb41161011357806398118cb4146108095780639b0e2e8614610834578063a071dcf41461085d578063a457c2d714610888578063a9059cbb146108c5578063b202886b146109025761029e565b80637d1db4a5146106f757806385d4787b1461072257806388f820201461074b5780638da5cb5b146107885780638ea5220f146107b357806395d89b41146107de5761029e565b80633bd5d173116101fe57806370a08231116101b757806370a08231146105fb578063715018a61461063857806371b9189c1461064f57806375cb1bd11461067857806375f0a874146106a15780637b208769146106cc5761029e565b80633bd5d173146104eb5780634549b0391461051457806348c54b9d1461055157806349bd5a5e146105685780634a74bb02146105935780635342acb4146105be5761029e565b806318160ddd1161025057806318160ddd146103b357806323b872dd146103de5780632d8381191461041b578063313ce56714610458578063317d94531461048357806339509351146104ae5761029e565b8063024022f7146102a357806306fdde03146102cc578063095ea7b3146102f75780631282ff501461033457806313114a9d1461035d5780631694505e146103885761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102ca60048036038101906102c591906147f0565b610b4b565b005b3480156102d857600080fd5b506102e1610bf0565b6040516102ee91906148d6565b60405180910390f35b34801561030357600080fd5b5061031e6004803603810190610319919061498c565b610c82565b60405161032b91906149e7565b60405180910390f35b34801561034057600080fd5b5061035b60048036038101906103569190614a2e565b610ca0565b005b34801561036957600080fd5b50610372610d52565b60405161037f9190614a6a565b60405180910390f35b34801561039457600080fd5b5061039d610d5c565b6040516103aa9190614ae4565b60405180910390f35b3480156103bf57600080fd5b506103c8610d82565b6040516103d59190614a6a565b60405180910390f35b3480156103ea57600080fd5b5061040560048036038101906104009190614aff565b610d8c565b60405161041291906149e7565b60405180910390f35b34801561042757600080fd5b50610442600480360381019061043d9190614b52565b610e65565b60405161044f9190614a6a565b60405180910390f35b34801561046457600080fd5b5061046d610ed3565b60405161047a9190614b9b565b60405180910390f35b34801561048f57600080fd5b50610498610eea565b6040516104a59190614a6a565b60405180910390f35b3480156104ba57600080fd5b506104d560048036038101906104d0919061498c565b610efa565b6040516104e291906149e7565b60405180910390f35b3480156104f757600080fd5b50610512600480360381019061050d9190614b52565b610fad565b005b34801561052057600080fd5b5061053b60048036038101906105369190614bb6565b611128565b6040516105489190614a6a565b60405180910390f35b34801561055d57600080fd5b506105666111ac565b005b34801561057457600080fd5b5061057d61125a565b60405161058a9190614c05565b60405180910390f35b34801561059f57600080fd5b506105a8611280565b6040516105b591906149e7565b60405180910390f35b3480156105ca57600080fd5b506105e560048036038101906105e09190614c20565b611293565b6040516105f291906149e7565b60405180910390f35b34801561060757600080fd5b50610622600480360381019061061d9190614c20565b6112e9565b60405161062f9190614a6a565b60405180910390f35b34801561064457600080fd5b5061064d6113d4565b005b34801561065b57600080fd5b50610676600480360381019061067191906147f0565b611527565b005b34801561068457600080fd5b5061069f600480360381019061069a9190614c4d565b6115cc565b005b3480156106ad57600080fd5b506106b6611729565b6040516106c39190614c05565b60405180910390f35b3480156106d857600080fd5b506106e161174f565b6040516106ee9190614c05565b60405180910390f35b34801561070357600080fd5b5061070c611775565b6040516107199190614a6a565b60405180910390f35b34801561072e57600080fd5b5061074960048036038101906107449190614dde565b61177b565b005b34801561075757600080fd5b50610772600480360381019061076d9190614c20565b61181e565b60405161077f91906149e7565b60405180910390f35b34801561079457600080fd5b5061079d611874565b6040516107aa9190614c05565b60405180910390f35b3480156107bf57600080fd5b506107c861189d565b6040516107d59190614c05565b60405180910390f35b3480156107ea57600080fd5b506107f36118c3565b60405161080091906148d6565b60405180910390f35b34801561081557600080fd5b5061081e611955565b60405161082b9190614a6a565b60405180910390f35b34801561084057600080fd5b5061085b60048036038101906108569190614dde565b61195b565b005b34801561086957600080fd5b506108726119fe565b60405161087f9190614a6a565b60405180910390f35b34801561089457600080fd5b506108af60048036038101906108aa919061498c565b611a04565b6040516108bc91906149e7565b60405180910390f35b3480156108d157600080fd5b506108ec60048036038101906108e7919061498c565b611ad1565b6040516108f991906149e7565b60405180910390f35b34801561090e57600080fd5b50610917611aef565b6040516109249190614a6a565b60405180910390f35b34801561093957600080fd5b50610954600480360381019061094f9190614a2e565b611af5565b005b34801561096257600080fd5b5061096b611bde565b6040516109789190614a6a565b60405180910390f35b34801561098d57600080fd5b506109a860048036038101906109a39190614e27565b611be4565b005b3480156109b657600080fd5b506109d160048036038101906109cc9190614f1f565b611d29565b005b3480156109df57600080fd5b506109fa60048036038101906109f59190614fa0565b611e92565b604051610a079190614a6a565b60405180910390f35b348015610a1c57600080fd5b50610a376004803603810190610a329190614c20565b611f19565b604051610a4491906149e7565b60405180910390f35b348015610a5957600080fd5b50610a62611f6f565b604051610a6f9190614a6a565b60405180910390f35b348015610a8457600080fd5b50610a8d611f75565b604051610a9a9190614a6a565b60405180910390f35b348015610aaf57600080fd5b50610ab8611f7b565b604051610ac59190614a6a565b60405180910390f35b348015610ada57600080fd5b50610af56004803603810190610af09190614b52565b611f81565b005b348015610b0357600080fd5b50610b1e6004803603810190610b199190614c20565b61202f565b005b348015610b2c57600080fd5b50610b356121f1565b604051610b4291906149e7565b60405180910390f35b610b53612204565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd79061502c565b60405180910390fd5b610bec8282600061220c565b5050565b6060600b8054610bff9061507b565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2b9061507b565b8015610c785780601f10610c4d57610100808354040283529160200191610c78565b820191906000526020600020905b815481529060010190602001808311610c5b57829003601f168201915b5050505050905090565b6000610c96610c8f612204565b84846122b7565b6001905092915050565b610ca8612204565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2c9061502c565b60405180910390fd5b80601760166101000a81548160ff02191690831515021790555050565b6000600a54905090565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600854905090565b6000610d99848484612482565b610e5a84610da5612204565b610e5585604051806060016040528060288152602001615d2460289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e0b612204565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612afe9092919063ffffffff16565b6122b7565b600190509392505050565b6000600954821115610eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea39061511f565b60405180910390fd5b6000610eb6612b62565b9050610ecb8184612b8d90919063ffffffff16565b915050919050565b6000600d60009054906101000a900460ff16905090565b6000610ef5306112e9565b905090565b6000610fa3610f07612204565b84610f9e8560036000610f18612204565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bd790919063ffffffff16565b6122b7565b6001905092915050565b6000610fb7612204565b9050600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103d906151b1565b60405180910390fd5b600061105183612c35565b505050505090506110aa81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c9190919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061110281600954612c9190919063ffffffff16565b60098190555061111d83600a54612bd790919063ffffffff16565b600a81905550505050565b600060085483111561116f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111669061521d565b60405180910390fd5b8161118f57600061117f84612c35565b50505050509050809150506111a6565b600061119a84612c35565b50505050915050809150505b92915050565b6111b4612204565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611241576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112389061502c565b60405180910390fd5b600061124c306112e9565b905061125781612cdb565b50565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601760159054906101000a900460ff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561138457600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506113cf565b6113cc600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e65565b90505b919050565b6113dc612204565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611469576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114609061502c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61152f612204565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b39061502c565b60405180910390fd5b6115c88282600161220c565b5050565b6115d4612204565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611661576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116589061502c565b60405180910390fd5b82601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b611783612204565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611810576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118079061502c565b60405180910390fd5b61181b816001612ee5565b50565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600c80546118d29061507b565b80601f01602080910402602001604051908101604052809291908181526020018280546118fe9061507b565b801561194b5780601f106119205761010080835404028352916020019161194b565b820191906000526020600020905b81548152906001019060200180831161192e57829003601f168201915b5050505050905090565b60105481565b611963612204565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e79061502c565b60405180910390fd5b6119fb816000612ee5565b50565b600e5481565b6000611ac7611a11612204565b84611ac285604051806060016040528060258152602001615d4c6025913960036000611a3b612204565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612afe9092919063ffffffff16565b6122b7565b6001905092915050565b6000611ae5611ade612204565b8484612482565b6001905092915050565b60125481565b611afd612204565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b819061502c565b60405180910390fd5b80601760156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611bd391906149e7565b60405180910390a150565b60195481565b611bec612204565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c709061502c565b60405180910390fd5b6064611ca084611c928789612bd790919063ffffffff16565b612bd790919063ffffffff16565b14611ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd790615289565b60405180910390fd5b86600e819055508460138190555083601481905550826015819055508560108190555081601281905550633b9aca0081611d1a91906152d8565b60198190555050505050505050565b611d31612204565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db59061502c565b60405180910390fd5b6000828290508585905014611e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dff9061537e565b60405180910390fd5b5b84849050811015611e8b57611e77611e1f612204565b868684818110611e3257611e3161539e565b5b9050602002016020810190611e479190614c20565b633b9aca00868686818110611e5f57611e5e61539e565b5b90506020020135611e7091906152d8565b6000612fdc565b600181611e8491906153cd565b9050611e09565b5050505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60155481565b60145481565b60135481565b611f89612204565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200d9061502c565b60405180910390fd5b633b9aca008161202691906152d8565b60188190555050565b612037612204565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bb9061502c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612134576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212b90615495565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601760169054906101000a900460ff1681565b600033905090565b60005b838390508110156122b157600084848381811061222f5761222e61539e565b5b90506020020160208101906122449190614c20565b905082600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806122a9906154b5565b91505061220f565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231e90615570565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238e90615602565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124759190614a6a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e990615694565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612562576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255990615726565b60405180910390fd5b600081116125a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259c906157b8565b60405180910390fd5b6125ad611874565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561261b57506125eb611874565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561266657601854811115612665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265c9061584a565b60405180910390fd5b5b6000612671306112e9565b905060185481106126825760185490505b60195481101580156126a15750601760149054906101000a900460ff16155b80156126fb5750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156127135750601760159054906101000a900460ff165b156127895760195481106127275760195490505b60006127516064612743601254856132ed90919063ffffffff16565b612b8d90919063ffffffff16565b905060006127688284612c9190919063ffffffff16565b9050600081111561277d5761277c81613368565b5b61278682612cdb565b50505b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156127f25750601760169054906101000a900460ff165b15612850576001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146129c057600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612932576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612929906158dc565b60405180910390fd5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156129bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b6906158dc565b60405180910390fd5b5b600060019050600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a675750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612aa45750612a75611874565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b80612ae15750612ab2611874565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15612aeb57600090505b612af785858584612fdc565b5050505050565b6000838311158290612b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3d91906148d6565b60405180910390fd5b5060008385612b5591906158fc565b9050809150509392505050565b6000806000612b6f61343e565b91509150612b868183612b8d90919063ffffffff16565b9250505090565b6000612bcf83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506136f1565b905092915050565b6000808284612be691906153cd565b905083811015612c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c229061597c565b60405180910390fd5b8091505092915050565b6000806000806000806000806000612c4c8a613754565b9250925092506000806000612c6a8d8686612c65612b62565b6137ae565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000612cd383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612afe565b905092915050565b6001601760146101000a81548160ff021916908315150217905550612cff81613837565b60004790506000612d2e6064612d20601354856132ed90919063ffffffff16565b612b8d90919063ffffffff16565b90506000612d5a6064612d4c601454866132ed90919063ffffffff16565b612b8d90919063ffffffff16565b90506000612d866064612d78601554876132ed90919063ffffffff16565b612b8d90919063ffffffff16565b9050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015612df0573d6000803e3d6000fd5b50601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612e59573d6000803e3d6000fd5b50601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612ec2573d6000803e3d6000fd5b50505050506000601760146101000a81548160ff02191690831515021790555050565b60005b8251811015612fd7576000838281518110612f0657612f0561539e565b5b602002602001015190508215612f73576001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612fc3565b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b508080612fcf906154b5565b915050612ee8565b505050565b80612fea57612fe9613a7a565b5b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561308d5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130a25761309d848484613abd565b6132d9565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131455750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561315a57613155848484613d1d565b6132d8565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131fe5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132135761320e848484613f7d565b6132d7565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132b55750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132ca576132c5848484614148565b6132d6565b6132d5848484613f7d565b5b5b5b5b806132e7576132e661443d565b5b50505050565b6000808314156133005760009050613362565b6000828461330e91906152d8565b905082848261331d91906159cb565b1461335d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335490615a6e565b60405180910390fd5b809150505b92915050565b6001601760146101000a81548160ff0219169083151502179055506000613399600283612b8d90919063ffffffff16565b905060006133b08284612c9190919063ffffffff16565b905060004790506133c083613837565b60006133d58247612c9190919063ffffffff16565b90506133e18382614451565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161341493929190615a8e565b60405180910390a1505050506000601760146101000a81548160ff02191690831515021790555050565b600080600060095490506000600854905060005b6007805490508110156136b4578260016000600784815481106134785761347761539e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061356657508160026000600784815481106134fe576134fd61539e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561357d57600954600854945094505050506136ed565b61360d60016000600784815481106135985761359761539e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612c9190919063ffffffff16565b925061369f600260006007848154811061362a5761362961539e565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612c9190919063ffffffff16565b915080806136ac906154b5565b915050613452565b506136cc600854600954612b8d90919063ffffffff16565b8210156136e4576009546008549350935050506136ed565b81819350935050505b9091565b60008083118290613738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161372f91906148d6565b60405180910390fd5b506000838561374791906159cb565b9050809150509392505050565b60008060008061376385614536565b9050600061377086614567565b905060006137998261378b858a612c9190919063ffffffff16565b612c9190919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806137c785896132ed90919063ffffffff16565b905060006137de86896132ed90919063ffffffff16565b905060006137f587896132ed90919063ffffffff16565b9050600061381e826138108587612c9190919063ffffffff16565b612c9190919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff81111561385457613853614ca0565b5b6040519080825280602002602001820160405280156138825781602001602082028036833780820191505090505b509050308160008151811061389a5761389961539e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613941573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139659190615ada565b816001815181106139795761397861539e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506139e030601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846122b7565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a44959493929190615c00565b600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050505050565b6000600e54148015613a8e57506000601054145b15613a9857613abb565b600e54600f819055506010546011819055506000600e8190555060006010819055505b565b600080600080600080613acf87612c35565b955095509550955095509550613b2d87600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c9190919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bc286600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c9190919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c5785600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bd790919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ca381614598565b613cad848361473d565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613d0a9190614a6a565b60405180910390a3505050505050505050565b600080600080600080613d2f87612c35565b955095509550955095509550613d8d86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c9190919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e2283600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bd790919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613eb785600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bd790919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f0381614598565b613f0d848361473d565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613f6a9190614a6a565b60405180910390a3505050505050505050565b600080600080600080613f8f87612c35565b955095509550955095509550613fed86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c9190919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061408285600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bd790919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140ce81614598565b6140d8848361473d565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516141359190614a6a565b60405180910390a3505050505050505050565b60008060008060008061415a87612c35565b9550955095509550955095506141b887600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c9190919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061424d86600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c9190919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142e283600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bd790919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061437785600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bd790919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143c381614598565b6143cd848361473d565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161442a9190614a6a565b60405180910390a3505050505050505050565b600f54600e81905550601154601081905550565b61447e30601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846122b7565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806144ca611874565b426040518863ffffffff1660e01b81526004016144ec96959493929190615c5a565b60606040518083038185885af115801561450a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061452f9190615cd0565b5050505050565b60006145606064614552600e54856132ed90919063ffffffff16565b612b8d90919063ffffffff16565b9050919050565b60006145916064614583601054856132ed90919063ffffffff16565b612b8d90919063ffffffff16565b9050919050565b60006145a2612b62565b905060006145b982846132ed90919063ffffffff16565b905061460d81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bd790919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614738576146f483600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bd790919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61475282600954612c9190919063ffffffff16565b60098190555061476d81600a54612bd790919063ffffffff16565b600a819055505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126147b0576147af61478b565b5b8235905067ffffffffffffffff8111156147cd576147cc614790565b5b6020830191508360208202830111156147e9576147e8614795565b5b9250929050565b6000806020838503121561480757614806614781565b5b600083013567ffffffffffffffff81111561482557614824614786565b5b6148318582860161479a565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561487757808201518184015260208101905061485c565b83811115614886576000848401525b50505050565b6000601f19601f8301169050919050565b60006148a88261483d565b6148b28185614848565b93506148c2818560208601614859565b6148cb8161488c565b840191505092915050565b600060208201905081810360008301526148f0818461489d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614923826148f8565b9050919050565b61493381614918565b811461493e57600080fd5b50565b6000813590506149508161492a565b92915050565b6000819050919050565b61496981614956565b811461497457600080fd5b50565b60008135905061498681614960565b92915050565b600080604083850312156149a3576149a2614781565b5b60006149b185828601614941565b92505060206149c285828601614977565b9150509250929050565b60008115159050919050565b6149e1816149cc565b82525050565b60006020820190506149fc60008301846149d8565b92915050565b614a0b816149cc565b8114614a1657600080fd5b50565b600081359050614a2881614a02565b92915050565b600060208284031215614a4457614a43614781565b5b6000614a5284828501614a19565b91505092915050565b614a6481614956565b82525050565b6000602082019050614a7f6000830184614a5b565b92915050565b6000819050919050565b6000614aaa614aa5614aa0846148f8565b614a85565b6148f8565b9050919050565b6000614abc82614a8f565b9050919050565b6000614ace82614ab1565b9050919050565b614ade81614ac3565b82525050565b6000602082019050614af96000830184614ad5565b92915050565b600080600060608486031215614b1857614b17614781565b5b6000614b2686828701614941565b9350506020614b3786828701614941565b9250506040614b4886828701614977565b9150509250925092565b600060208284031215614b6857614b67614781565b5b6000614b7684828501614977565b91505092915050565b600060ff82169050919050565b614b9581614b7f565b82525050565b6000602082019050614bb06000830184614b8c565b92915050565b60008060408385031215614bcd57614bcc614781565b5b6000614bdb85828601614977565b9250506020614bec85828601614a19565b9150509250929050565b614bff81614918565b82525050565b6000602082019050614c1a6000830184614bf6565b92915050565b600060208284031215614c3657614c35614781565b5b6000614c4484828501614941565b91505092915050565b600080600060608486031215614c6657614c65614781565b5b6000614c7486828701614941565b9350506020614c8586828701614941565b9250506040614c9686828701614941565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614cd88261488c565b810181811067ffffffffffffffff82111715614cf757614cf6614ca0565b5b80604052505050565b6000614d0a614777565b9050614d168282614ccf565b919050565b600067ffffffffffffffff821115614d3657614d35614ca0565b5b602082029050602081019050919050565b6000614d5a614d5584614d1b565b614d00565b90508083825260208201905060208402830185811115614d7d57614d7c614795565b5b835b81811015614da65780614d928882614941565b845260208401935050602081019050614d7f565b5050509392505050565b600082601f830112614dc557614dc461478b565b5b8135614dd5848260208601614d47565b91505092915050565b600060208284031215614df457614df3614781565b5b600082013567ffffffffffffffff811115614e1257614e11614786565b5b614e1e84828501614db0565b91505092915050565b600080600080600080600060e0888a031215614e4657614e45614781565b5b6000614e548a828b01614977565b9750506020614e658a828b01614977565b9650506040614e768a828b01614977565b9550506060614e878a828b01614977565b9450506080614e988a828b01614977565b93505060a0614ea98a828b01614977565b92505060c0614eba8a828b01614977565b91505092959891949750929550565b60008083601f840112614edf57614ede61478b565b5b8235905067ffffffffffffffff811115614efc57614efb614790565b5b602083019150836020820283011115614f1857614f17614795565b5b9250929050565b60008060008060408587031215614f3957614f38614781565b5b600085013567ffffffffffffffff811115614f5757614f56614786565b5b614f638782880161479a565b9450945050602085013567ffffffffffffffff811115614f8657614f85614786565b5b614f9287828801614ec9565b925092505092959194509250565b60008060408385031215614fb757614fb6614781565b5b6000614fc585828601614941565b9250506020614fd685828601614941565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000615016602083614848565b915061502182614fe0565b602082019050919050565b6000602082019050818103600083015261504581615009565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061509357607f821691505b602082108114156150a7576150a661504c565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000615109602a83614848565b9150615114826150ad565b604082019050919050565b60006020820190508181036000830152615138816150fc565b9050919050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b600061519b602c83614848565b91506151a68261513f565b604082019050919050565b600060208201905081810360008301526151ca8161518e565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b6000615207601f83614848565b9150615212826151d1565b602082019050919050565b60006020820190508181036000830152615236816151fa565b9050919050565b7f4665652070657263656e74616765206d75737420657175616c20313030000000600082015250565b6000615273601d83614848565b915061527e8261523d565b602082019050919050565b600060208201905081810360008301526152a281615266565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006152e382614956565b91506152ee83614956565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615327576153266152a9565b5b828202905092915050565b7f6d757374206265207468652073616d65206c656e677468000000000000000000600082015250565b6000615368601783614848565b915061537382615332565b602082019050919050565b600060208201905081810360008301526153978161535b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006153d882614956565b91506153e383614956565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615418576154176152a9565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061547f602683614848565b915061548a82615423565b604082019050919050565b600060208201905081810360008301526154ae81615472565b9050919050565b60006154c082614956565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156154f3576154f26152a9565b5b600182019050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061555a602483614848565b9150615565826154fe565b604082019050919050565b600060208201905081810360008301526155898161554d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006155ec602283614848565b91506155f782615590565b604082019050919050565b6000602082019050818103600083015261561b816155df565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061567e602583614848565b915061568982615622565b604082019050919050565b600060208201905081810360008301526156ad81615671565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615710602383614848565b915061571b826156b4565b604082019050919050565b6000602082019050818103600083015261573f81615703565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006157a2602983614848565b91506157ad82615746565b604082019050919050565b600060208201905081810360008301526157d181615795565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000615834602883614848565b915061583f826157d8565b604082019050919050565b6000602082019050818103600083015261586381615827565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c206f722060008201527f7472616e7366657220746f6b656e730000000000000000000000000000000000602082015250565b60006158c6602f83614848565b91506158d18261586a565b604082019050919050565b600060208201905081810360008301526158f5816158b9565b9050919050565b600061590782614956565b915061591283614956565b925082821015615925576159246152a9565b5b828203905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615966601b83614848565b915061597182615930565b602082019050919050565b6000602082019050818103600083015261599581615959565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006159d682614956565b91506159e183614956565b9250826159f1576159f061599c565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a58602183614848565b9150615a63826159fc565b604082019050919050565b60006020820190508181036000830152615a8781615a4b565b9050919050565b6000606082019050615aa36000830186614a5b565b615ab06020830185614a5b565b615abd6040830184614a5b565b949350505050565b600081519050615ad48161492a565b92915050565b600060208284031215615af057615aef614781565b5b6000615afe84828501615ac5565b91505092915050565b6000819050919050565b6000615b2c615b27615b2284615b07565b614a85565b614956565b9050919050565b615b3c81615b11565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615b7781614918565b82525050565b6000615b898383615b6e565b60208301905092915050565b6000602082019050919050565b6000615bad82615b42565b615bb78185615b4d565b9350615bc283615b5e565b8060005b83811015615bf3578151615bda8882615b7d565b9750615be583615b95565b925050600181019050615bc6565b5085935050505092915050565b600060a082019050615c156000830188614a5b565b615c226020830187615b33565b8181036040830152615c348186615ba2565b9050615c436060830185614bf6565b615c506080830184614a5b565b9695505050505050565b600060c082019050615c6f6000830189614bf6565b615c7c6020830188614a5b565b615c896040830187615b33565b615c966060830186615b33565b615ca36080830185614bf6565b615cb060a0830184614a5b565b979650505050505050565b600081519050615cca81614960565b92915050565b600080600060608486031215615ce957615ce8614781565b5b6000615cf786828701615cbb565b9350506020615d0886828701615cbb565b9250506040615d1986828701615cbb565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220873d8f6a5e1da6451e7782321ddf806ef4d592267ab4f6c0af555cf20417f4b164736f6c634300080b0033

Deployed Bytecode Sourcemap

13798:20912:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21118:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16597:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17509:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22498:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18630:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14983:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16874:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17678:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20088:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16783:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23543:115;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17999:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19259:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19644:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22740:167;;;;;;;;;;;;;:::i;:::-;;15031:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15096:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26990:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16977:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5460:148;;;;;;;;;;;;;:::i;:::-;;20991:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22254:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15322:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15404:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15185:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22915:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18502:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5246:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15484:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16688:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14686:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23050:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14605:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18225:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17183:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14785:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23666:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15244:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21488:758;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18725:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17358:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22623:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14938:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14891:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14839:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19134:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5616:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15143:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21118:118;5383:12;:10;:12::i;:::-;5373:22;;:6;;;;;;;;;;:22;;;5365:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21198:30:::1;21211:9;;21222:5;21198:12;:30::i;:::-;21118:118:::0;;:::o;16597:83::-;16634:13;16667:5;16660:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16597:83;:::o;17509:161::-;17584:4;17601:39;17610:12;:10;:12::i;:::-;17624:7;17633:6;17601:8;:39::i;:::-;17658:4;17651:11;;17509:161;;;;:::o;22498:117::-;5383:12;:10;:12::i;:::-;5373:22;;:6;;;;;;;;;;:22;;;5365:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22594:13:::1;22575:16;;:32;;;;;;;;;;;;;;;;;;22498:117:::0;:::o;18630:87::-;18672:7;18699:10;;18692:17;;18630:87;:::o;14983:41::-;;;;;;;;;;;;;:::o;16874:95::-;16927:7;16954;;16947:14;;16874:95;:::o;17678:313::-;17776:4;17793:36;17803:6;17811:9;17822:6;17793:9;:36::i;:::-;17840:121;17849:6;17857:12;:10;:12::i;:::-;17871:89;17909:6;17871:89;;;;;;;;;;;;;;;;;:11;:19;17883:6;17871:19;;;;;;;;;;;;;;;:33;17891:12;:10;:12::i;:::-;17871:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;17840:8;:121::i;:::-;17979:4;17972:11;;17678:313;;;;;:::o;20088:253::-;20154:7;20193;;20182;:18;;20174:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20258:19;20281:10;:8;:10::i;:::-;20258:33;;20309:24;20321:11;20309:7;:11;;:24;;;;:::i;:::-;20302:31;;;20088:253;;;:::o;16783:83::-;16824:5;16849:9;;;;;;;;;;;16842:16;;16783:83;:::o;23543:115::-;23599:7;23626:24;23644:4;23626:9;:24::i;:::-;23619:31;;23543:115;:::o;17999:218::-;18087:4;18104:83;18113:12;:10;:12::i;:::-;18127:7;18136:50;18175:10;18136:11;:25;18148:12;:10;:12::i;:::-;18136:25;;;;;;;;;;;;;;;:34;18162:7;18136:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;18104:8;:83::i;:::-;18205:4;18198:11;;17999:218;;;;:::o;19259:377::-;19311:14;19328:12;:10;:12::i;:::-;19311:29;;19360:11;:19;19372:6;19360:19;;;;;;;;;;;;;;;;;;;;;;;;;19359:20;19351:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;19440:15;19464:19;19475:7;19464:10;:19::i;:::-;19439:44;;;;;;;19512:28;19532:7;19512;:15;19520:6;19512:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;19494:7;:15;19502:6;19494:15;;;;;;;;;;;;;;;:46;;;;19561:20;19573:7;19561;;:11;;:20;;;;:::i;:::-;19551:7;:30;;;;19605:23;19620:7;19605:10;;:14;;:23;;;;:::i;:::-;19592:10;:36;;;;19300:336;;19259:377;:::o;19644:436::-;19734:7;19773;;19762;:18;;19754:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;19832:17;19827:246;;19867:15;19891:19;19902:7;19891:10;:19::i;:::-;19866:44;;;;;;;19932:7;19925:14;;;;;19827:246;19974:23;20005:19;20016:7;20005:10;:19::i;:::-;19972:52;;;;;;;20046:15;20039:22;;;19644:436;;;;;:::o;22740:167::-;5383:12;:10;:12::i;:::-;5373:22;;:6;;;;;;;;;;:22;;;5365:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22795:28:::1;22826:24;22844:4;22826:9;:24::i;:::-;22795:55;;22861:38;22878:20;22861:16;:38::i;:::-;22784:123;22740:167::o:0;15031:28::-;;;;;;;;;;;;;:::o;15096:40::-;;;;;;;;;;;;;:::o;26990:123::-;27054:4;27078:18;:27;27097:7;27078:27;;;;;;;;;;;;;;;;;;;;;;;;;27071:34;;26990:123;;;:::o;16977:198::-;17043:7;17067:11;:20;17079:7;17067:20;;;;;;;;;;;;;;;;;;;;;;;;;17063:49;;;17096:7;:16;17104:7;17096:16;;;;;;;;;;;;;;;;17089:23;;;;17063:49;17130:37;17150:7;:16;17158:7;17150:16;;;;;;;;;;;;;;;;17130:19;:37::i;:::-;17123:44;;16977:198;;;;:::o;5460:148::-;5383:12;:10;:12::i;:::-;5373:22;;:6;;;;;;;;;;:22;;;5365:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5567:1:::1;5530:40;;5551:6;::::0;::::1;;;;;;;;5530:40;;;;;;;;;;;;5598:1;5581:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;5460:148::o:0;20991:119::-;5383:12;:10;:12::i;:::-;5373:22;;:6;;;;;;;;;;:22;;;5365:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21073:29:::1;21086:9;;21097:4;21073:12;:29::i;:::-;20991:119:::0;;:::o;22254:236::-;5383:12;:10;:12::i;:::-;5373:22;;:6;;;;;;;;;;:22;;;5365:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22392:16:::1;22374:15;;:34;;;;;;;;;;;;;;;;;;22435:14;22419:13;;:30;;;;;;;;;;;;;;;;;;22472:10;22460:9;;:22;;;;;;;;;;;;;;;;;;22254:236:::0;;;:::o;15322:75::-;;;;;;;;;;;;;:::o;15404:73::-;;;;;;;;;;;;;:::o;15185:52::-;;;;:::o;22915:127::-;5383:12;:10;:12::i;:::-;5373:22;;:6;;;;;;;;;;:22;;;5365:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22998:36:::1;23018:9;23029:4;22998:19;:36::i;:::-;22915:127:::0;:::o;18502:120::-;18570:4;18594:11;:20;18606:7;18594:20;;;;;;;;;;;;;;;;;;;;;;;;;18587:27;;18502:120;;;:::o;5246:79::-;5284:7;5311:6;;;;;;;;;;;5304:13;;5246:79;:::o;15484:69::-;;;;;;;;;;;;;:::o;16688:87::-;16727:13;16760:7;16753:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16688:87;:::o;14686:31::-;;;;:::o;23050:131::-;5383:12;:10;:12::i;:::-;5373:22;;:6;;;;;;;;;;:22;;;5365:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23136:37:::1;23156:9;23167:5;23136:19;:37::i;:::-;23050:131:::0;:::o;14605:25::-;;;;:::o;18225:269::-;18318:4;18335:129;18344:12;:10;:12::i;:::-;18358:7;18367:96;18406:15;18367:96;;;;;;;;;;;;;;;;;:11;:25;18379:12;:10;:12::i;:::-;18367:25;;;;;;;;;;;;;;;:34;18393:7;18367:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;18335:8;:129::i;:::-;18482:4;18475:11;;18225:269;;;;:::o;17183:167::-;17261:4;17278:42;17288:12;:10;:12::i;:::-;17302:9;17313:6;17278:9;:42::i;:::-;17338:4;17331:11;;17183:167;;;;:::o;14785:47::-;;;;:::o;23666:171::-;5383:12;:10;:12::i;:::-;5373:22;;:6;;;;;;;;;;:22;;;5365:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23767:8:::1;23743:21;;:32;;;;;;;;;;;;;;;;;;23791:38;23820:8;23791:38;;;;;;:::i;:::-;;;;;;;;23666:171:::0;:::o;15244:69::-;;;;:::o;21488:758::-;5383:12;:10;:12::i;:::-;5373:22;;:6;;;;;;;;;;:22;;;5365:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21830:3:::1;21753:73;21808:17;21753:50;21781:21;21753:23;:27;;:50;;;;:::i;:::-;:54;;:73;;;;:::i;:::-;:80;21745:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;21887:7;21878:6;:16;;;;21933:23;21905:25;:51;;;;21990:21;21967:20;:44;;;;22041:17;22022:16;:36;;;;22084:13;22069:12;:28;;;;22138:19;22108:27;:49;;;;22233:5;22200:30;:38;;;;:::i;:::-;22168:29;:70;;;;21488:758:::0;;;;;;;:::o;18725:401::-;5383:12;:10;:12::i;:::-;5373:22;;:6;;;;;;;;;;:22;;;5365:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18832:16:::1;18892:7;;:14;;18871:10;;:17;;:35;18863:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;18945:174;18962:10;;:17;;18951:8;:28;18945:174;;;18995:84;19010:12;:10;:12::i;:::-;19024:10;;19035:8;19024:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;19066:5;19046:7;;19054:8;19046:17;;;;;;;:::i;:::-;;;;;;;;:25;;;;:::i;:::-;19073:5;18995:14;:84::i;:::-;19106:1;19094:13;;;;;:::i;:::-;;;18945:174;;;18821:305;18725:401:::0;;;;:::o;17358:143::-;17439:7;17466:11;:18;17478:5;17466:18;;;;;;;;;;;;;;;:27;17485:7;17466:27;;;;;;;;;;;;;;;;17459:34;;17358:143;;;;:::o;22623:109::-;22684:4;22708:10;:16;22719:4;22708:16;;;;;;;;;;;;;;;;;;;;;;;;;22701:23;;22623:109;;;:::o;14938:36::-;;;;:::o;14891:40::-;;;;:::o;14839:45::-;;;;:::o;19134:119::-;5383:12;:10;:12::i;:::-;5373:22;;:6;;;;;;;;;;:22;;;5365:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19240:5:::1;19226:11;:19;;;;:::i;:::-;19211:12;:34;;;;19134:119:::0;:::o;5616:244::-;5383:12;:10;:12::i;:::-;5373:22;;:6;;;;;;;;;;:22;;;5365:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5725:1:::1;5705:22;;:8;:22;;;;5697:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5815:8;5786:38;;5807:6;::::0;::::1;;;;;;;;5786:38;;;;;;;;;;;;5844:8;5835:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;5616:244:::0;:::o;15143:35::-;;;;;;;;;;;;;:::o;2251:98::-;2304:7;2331:10;2324:17;;2251:98;:::o;21244:236::-;21331:9;21326:147;21350:9;;:16;;21346:1;:20;21326:147;;;21388:12;21403:9;;21413:1;21403:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;21388:27;;21457:4;21430:18;:24;21449:4;21430:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;21373:100;21368:3;;;;;:::i;:::-;;;;21326:147;;;;21244:236;;;:::o;27121:337::-;27231:1;27214:19;;:5;:19;;;;27206:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27312:1;27293:21;;:7;:21;;;;27285:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27396:6;27366:11;:18;27378:5;27366:18;;;;;;;;;;;;;;;:27;27385:7;27366:27;;;;;;;;;;;;;;;:36;;;;27434:7;27418:32;;27427:5;27418:32;;;27443:6;27418:32;;;;;;:::i;:::-;;;;;;;;27121:337;;;:::o;27466:2440::-;27604:1;27588:18;;:4;:18;;;;27580:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27681:1;27667:16;;:2;:16;;;;27659:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27751:1;27742:6;:10;27734:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27820:7;:5;:7::i;:::-;27812:15;;:4;:15;;;;:32;;;;;27837:7;:5;:7::i;:::-;27831:13;;:2;:13;;;;27812:32;27809:125;;;27877:12;;27867:6;:22;;27859:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;27809:125;27947:28;27978:24;27996:4;27978:9;:24::i;:::-;27947:55;;28042:12;;28018:20;:36;28015:112;;28103:12;;28080:35;;28015:112;28165:29;;28141:20;:53;;:74;;;;;28199:16;;;;;;;;;;;28198:17;28141:74;:99;;;;;28227:13;;;;;;;;;;;28219:21;;:4;:21;;;;28141:99;:124;;;;;28244:21;;;;;;;;;;;28141:124;28137:1083;;;28309:29;;28285:20;:53;28282:145;;28382:29;;28359:52;;28282:145;28607:28;28638:62;28696:3;28638:53;28663:27;;28638:20;:24;;:53;;;;:::i;:::-;:57;;:62;;;;:::i;:::-;28607:93;;28715:27;28745:46;28770:20;28745;:24;;:46;;;;:::i;:::-;28715:76;;28974:1;28952:19;:23;28949:131;;;29029:35;29044:19;29029:14;:35::i;:::-;28949:131;29155:38;29172:20;29155:16;:38::i;:::-;28267:953;;28137:1083;29251:13;;;;;;;;;;;29243:21;;:4;:21;;;:41;;;;;29268:16;;;;;;;;;;;29243:41;29240:106;;;29318:4;29301:10;:14;29312:2;29301:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29240:106;29369:13;;;;;;;;;;;29361:21;;:4;:21;;;29358:222;;29408:10;:16;29419:4;29408:16;;;;;;;;;;;;;;;;;;;;;;;;;29407:17;29399:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;29501:10;:14;29512:2;29501:14;;;;;;;;;;;;;;;;;;;;;;;;;29500:15;29492:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;29358:222;29600:12;29615:4;29600:19;;29717:18;:24;29736:4;29717:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;29745:18;:22;29764:2;29745:22;;;;;;;;;;;;;;;;;;;;;;;;;29717:50;:69;;;;29779:7;:5;:7::i;:::-;29771:15;;:4;:15;;;29717:69;:86;;;;29796:7;:5;:7::i;:::-;29790:13;;:2;:13;;;29717:86;29714:133;;;29830:5;29820:15;;29714:133;29857:41;29872:4;29878:2;29882:6;29890:7;29857:14;:41::i;:::-;27569:2337;;27466:2440;;;:::o;1116:190::-;1202:7;1235:1;1230;:6;;1238:12;1222:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1262:9;1278:1;1274;:5;;;;:::i;:::-;1262:17;;1297:1;1290:8;;;1116:190;;;;;:::o;25239:163::-;25280:7;25301:15;25318;25337:19;:17;:19::i;:::-;25300:56;;;;25374:20;25386:7;25374;:11;;:20;;;;:::i;:::-;25367:27;;;;25239:163;:::o;1568:132::-;1626:7;1653:39;1657:1;1660;1653:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1646:46;;1568:132;;;;:::o;785:179::-;843:7;863:9;879:1;875;:5;;;;:::i;:::-;863:17;;904:1;899;:6;;891:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;955:1;948:8;;;785:179;;;;:::o;24037:419::-;24096:7;24105;24114;24123;24132;24141;24162:23;24187:12;24201:18;24223:20;24235:7;24223:11;:20::i;:::-;24161:82;;;;;;24255:15;24272:23;24297:12;24313:50;24325:7;24334:4;24340:10;24352;:8;:10::i;:::-;24313:11;:50::i;:::-;24254:109;;;;;;24382:7;24391:15;24408:4;24414:15;24431:4;24437:10;24374:74;;;;;;;;;;;;;;;;;;24037:419;;;;;;;:::o;972:136::-;1030:7;1057:43;1061:1;1064;1057:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1050:50;;972:136;;;;:::o;30406:616::-;15871:4;15852:16;;:23;;;;;;;;;;;;;;;;;;30503:38:::1;30520:20;30503:16;:38::i;:::-;30552:22;30577:21;30552:46;;30609:22;30634:54;30684:3;30634:45;30653:25;;30634:14;:18;;:45;;;;:::i;:::-;:49;;:54;;;;:::i;:::-;30609:79;;30699:20;30722:49;30767:3;30722:40;30741:20;;30722:14;:18;;:40;;;;:::i;:::-;:44;;:49;;;;:::i;:::-;30699:72;;30782:16;30801:45;30842:3;30801:36;30820:16;;30801:14;:18;;:36;;;;:::i;:::-;:40;;:45;;;;:::i;:::-;30782:64;;30867:15;;;;;;;;;;;30859:33;;:49;30893:14;30859:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;30927:13;;;;;;;;;;;30919:31;;:45;30951:12;30919:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;30983:9;;;;;;;;;;;30975:27;;:37;31003:8;30975:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;30482:540;;;;15917:5:::0;15898:16;;:24;;;;;;;;;;;;;;;;;;30406:616;:::o;23189:346::-;23284:9;23279:249;23303:9;:16;23299:1;:20;23279:249;;;23341:12;23356:9;23366:1;23356:12;;;;;;;;:::i;:::-;;;;;;;;23341:27;;23386:7;23383:134;;;23433:4;23414:10;:16;23425:4;23414:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;23383:134;;;23485:10;:16;23496:4;23485:16;;;;;;;;;;;;;;;;23478:23;;;;;;;;;;;23383:134;23326:202;23321:3;;;;;:::i;:::-;;;;23279:249;;;;23189:346;;:::o;32221:820::-;32334:7;32330:40;;32356:14;:12;:14::i;:::-;32330:40;32387:11;:19;32399:6;32387:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;32411:11;:22;32423:9;32411:22;;;;;;;;;;;;;;;;;;;;;;;;;32410:23;32387:46;32383:597;;;32450:48;32472:6;32480:9;32491:6;32450:21;:48::i;:::-;32383:597;;;32521:11;:19;32533:6;32521:19;;;;;;;;;;;;;;;;;;;;;;;;;32520:20;:46;;;;;32544:11;:22;32556:9;32544:22;;;;;;;;;;;;;;;;;;;;;;;;;32520:46;32516:464;;;32583:46;32603:6;32611:9;32622:6;32583:19;:46::i;:::-;32516:464;;;32652:11;:19;32664:6;32652:19;;;;;;;;;;;;;;;;;;;;;;;;;32651:20;:47;;;;;32676:11;:22;32688:9;32676:22;;;;;;;;;;;;;;;;;;;;;;;;;32675:23;32651:47;32647:333;;;32715:44;32733:6;32741:9;32752:6;32715:17;:44::i;:::-;32647:333;;;32781:11;:19;32793:6;32781:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;32804:11;:22;32816:9;32804:22;;;;;;;;;;;;;;;;;;;;;;;;;32781:45;32777:203;;;32843:48;32865:6;32873:9;32884:6;32843:21;:48::i;:::-;32777:203;;;32924:44;32942:6;32950:9;32961:6;32924:17;:44::i;:::-;32777:203;32647:333;32516:464;32383:597;32996:7;32992:41;;33018:15;:13;:15::i;:::-;32992:41;32221:820;;;;:::o;1312:248::-;1370:7;1399:1;1394;:6;1390:47;;;1424:1;1417:8;;;;1390:47;1449:9;1465:1;1461;:5;;;;:::i;:::-;1449:17;;1494:1;1489;1485;:5;;;;:::i;:::-;:10;1477:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1551:1;1544:8;;;1312:248;;;;;:::o;29914:484::-;15871:4;15852:16;;:23;;;;;;;;;;;;;;;;;;30001:12:::1;30016:27;30041:1;30016:20;:24;;:27;;;;:::i;:::-;30001:42;;30054:17;30074:30;30099:4;30074:20;:24;;:30;;;;:::i;:::-;30054:50;;30117:22;30142:21;30117:46;;30176:22;30193:4;30176:16;:22::i;:::-;30211:18;30232:41;30258:14;30232:21;:25;;:41;;;;:::i;:::-;30211:62;;30286:35;30299:9;30310:10;30286:12;:35::i;:::-;30347:43;30362:4;30368:10;30380:9;30347:43;;;;;;;;:::i;:::-;;;;;;;;29988:410;;;;15917:5:::0;15898:16;;:24;;;;;;;;;;;;;;;;;;29914:484;:::o;25410:555::-;25460:7;25469;25489:15;25507:7;;25489:25;;25525:15;25543:7;;25525:25;;25566:9;25561:289;25585:9;:16;;;;25581:1;:20;25561:289;;;25651:7;25627;:21;25635:9;25645:1;25635:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25627:21;;;;;;;;;;;;;;;;:31;:66;;;;25686:7;25662;:21;25670:9;25680:1;25670:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25662:21;;;;;;;;;;;;;;;;:31;25627:66;25623:97;;;25703:7;;25712;;25695:25;;;;;;;;;25623:97;25745:34;25757:7;:21;25765:9;25775:1;25765:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25757:21;;;;;;;;;;;;;;;;25745:7;:11;;:34;;;;:::i;:::-;25735:44;;25804:34;25816:7;:21;25824:9;25834:1;25824:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25816:21;;;;;;;;;;;;;;;;25804:7;:11;;:34;;;;:::i;:::-;25794:44;;25603:3;;;;;:::i;:::-;;;;25561:289;;;;25874:20;25886:7;;25874;;:11;;:20;;;;:::i;:::-;25864:7;:30;25860:61;;;25904:7;;25913;;25896:25;;;;;;;;25860:61;25940:7;25949;25932:25;;;;;;25410:555;;;:::o;1708:189::-;1794:7;1826:1;1822;:5;1829:12;1814:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1853:9;1869:1;1865;:5;;;;:::i;:::-;1853:17;;1888:1;1881:8;;;1708:189;;;;;:::o;24464:330::-;24524:7;24533;24542;24562:12;24577:24;24593:7;24577:15;:24::i;:::-;24562:39;;24612:18;24633:30;24655:7;24633:21;:30::i;:::-;24612:51;;24674:23;24700:33;24722:10;24700:17;24712:4;24700:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;24674:59;;24752:15;24769:4;24775:10;24744:42;;;;;;;;;24464:330;;;;;:::o;24802:429::-;24917:7;24926;24935;24955:15;24973:24;24985:11;24973:7;:11;;:24;;;;:::i;:::-;24955:42;;25008:12;25023:21;25032:11;25023:4;:8;;:21;;;;:::i;:::-;25008:36;;25055:18;25076:27;25091:11;25076:10;:14;;:27;;;;:::i;:::-;25055:48;;25114:23;25140:33;25162:10;25140:17;25152:4;25140:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;25114:59;;25192:7;25201:15;25218:4;25184:39;;;;;;;;;;24802:429;;;;;;;;:::o;31030:589::-;31156:21;31194:1;31180:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31156:40;;31225:4;31207;31212:1;31207:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31251:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31241:4;31246:1;31241:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;31286:62;31303:4;31318:15;;;;;;;;;;;31336:11;31286:8;:62::i;:::-;31387:15;;;;;;;;;;;:66;;;31468:11;31494:1;31538:4;31565;31585:15;31387:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31085:534;31030:589;:::o;26622:229::-;26679:1;26669:6;;:11;:32;;;;;26700:1;26684:12;;:17;26669:32;26665:45;;;26703:7;;26665:45;26740:6;;26722:15;:24;;;;26781:12;;26757:21;:36;;;;26815:1;26806:6;:10;;;;26842:1;26827:12;:16;;;;26622:229;:::o;34142:563::-;34245:15;34262:23;34287:12;34301:23;34326:12;34340:18;34362:19;34373:7;34362:10;:19::i;:::-;34244:137;;;;;;;;;;;;34410:28;34430:7;34410;:15;34418:6;34410:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;34392:7;:15;34400:6;34392:15;;;;;;;;;;;;;;;:46;;;;34467:28;34487:7;34467;:15;34475:6;34467:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;34449:7;:15;34457:6;34449:15;;;;;;;;;;;;;;;:46;;;;34527:39;34550:15;34527:7;:18;34535:9;34527:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;34506:7;:18;34514:9;34506:18;;;;;;;;;;;;;;;:60;;;;34577:26;34592:10;34577:14;:26::i;:::-;34614:23;34626:4;34632;34614:11;:23::i;:::-;34670:9;34653:44;;34662:6;34653:44;;;34681:15;34653:44;;;;;;:::i;:::-;;;;;;;;34233:472;;;;;;34142:563;;;:::o;33559:575::-;33660:15;33677:23;33702:12;33716:23;33741:12;33755:18;33777:19;33788:7;33777:10;:19::i;:::-;33659:137;;;;;;;;;;;;33825:28;33845:7;33825;:15;33833:6;33825:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;33807:7;:15;33815:6;33807:15;;;;;;;;;;;;;;;:46;;;;33885:39;33908:15;33885:7;:18;33893:9;33885:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;33864:7;:18;33872:9;33864:18;;;;;;;;;;;;;;;:60;;;;33956:39;33979:15;33956:7;:18;33964:9;33956:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;33935:7;:18;33943:9;33935:18;;;;;;;;;;;;;;;:60;;;;34006:26;34021:10;34006:14;:26::i;:::-;34043:23;34055:4;34061;34043:11;:23::i;:::-;34099:9;34082:44;;34091:6;34082:44;;;34110:15;34082:44;;;;;;:::i;:::-;;;;;;;;33648:486;;;;;;33559:575;;;:::o;33049:502::-;33148:15;33165:23;33190:12;33204:23;33229:12;33243:18;33265:19;33276:7;33265:10;:19::i;:::-;33147:137;;;;;;;;;;;;33313:28;33333:7;33313;:15;33321:6;33313:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;33295:7;:15;33303:6;33295:15;;;;;;;;;;;;;;;:46;;;;33373:39;33396:15;33373:7;:18;33381:9;33373:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;33352:7;:18;33360:9;33352:18;;;;;;;;;;;;;;;:60;;;;33423:26;33438:10;33423:14;:26::i;:::-;33460:23;33472:4;33478;33460:11;:23::i;:::-;33516:9;33499:44;;33508:6;33499:44;;;33527:15;33499:44;;;;;;:::i;:::-;;;;;;;;33136:415;;;;;;33049:502;;;:::o;20349:634::-;20452:15;20469:23;20494:12;20508:23;20533:12;20547:18;20569:19;20580:7;20569:10;:19::i;:::-;20451:137;;;;;;;;;;;;20617:28;20637:7;20617;:15;20625:6;20617:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;20599:7;:15;20607:6;20599:15;;;;;;;;;;;;;;;:46;;;;20674:28;20694:7;20674;:15;20682:6;20674:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;20656:7;:15;20664:6;20656:15;;;;;;;;;;;;;;;:46;;;;20734:39;20757:15;20734:7;:18;20742:9;20734:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;20713:7;:18;20721:9;20713:18;;;;;;;;;;;;;;;:60;;;;20805:39;20828:15;20805:7;:18;20813:9;20805:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;20784:7;:18;20792:9;20784:18;;;;;;;;;;;;;;;:60;;;;20855:26;20870:10;20855:14;:26::i;:::-;20892:23;20904:4;20910;20892:11;:23::i;:::-;20948:9;20931:44;;20940:6;20931:44;;;20959:15;20931:44;;;;;;:::i;:::-;;;;;;;;20440:543;;;;;;20349:634;;;:::o;26859:123::-;26912:15;;26903:6;:24;;;;26953:21;;26938:12;:36;;;;26859:123::o;31627:513::-;31775:62;31792:4;31807:15;;;;;;;;;;;31825:11;31775:8;:62::i;:::-;31880:15;;;;;;;;;;;:31;;;31919:9;31952:4;31972:11;31998:1;32041;32084:7;:5;:7::i;:::-;32106:15;31880:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31627:513;;:::o;26336:129::-;26400:7;26427:30;26451:5;26427:19;26439:6;;26427:7;:11;;:19;;;;:::i;:::-;:23;;:30;;;;:::i;:::-;26420:37;;26336:129;;;:::o;26473:141::-;26543:7;26570:36;26600:5;26570:25;26582:12;;26570:7;:11;;:25;;;;:::i;:::-;:29;;:36;;;;:::i;:::-;26563:43;;26473:141;;;:::o;25973:355::-;26036:19;26059:10;:8;:10::i;:::-;26036:33;;26080:18;26101:27;26116:11;26101:10;:14;;:27;;;;:::i;:::-;26080:48;;26164:38;26191:10;26164:7;:22;26180:4;26164:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;26139:7;:22;26155:4;26139:22;;;;;;;;;;;;;;;:63;;;;26216:11;:26;26236:4;26216:26;;;;;;;;;;;;;;;;;;;;;;;;;26213:107;;;26282:38;26309:10;26282:7;:22;26298:4;26282:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;26257:7;:22;26273:4;26257:22;;;;;;;;;;;;;;;:63;;;;26213:107;26025:303;;25973:355;:::o;23882:147::-;23960:17;23972:4;23960:7;;:11;;:17;;;;:::i;:::-;23950:7;:27;;;;24001:20;24016:4;24001:10;;:14;;:20;;;;:::i;:::-;23988:10;:33;;;;23882:147;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;457:117;566:1;563;556:12;580:117;689:1;686;679:12;720:568;793:8;803:6;853:3;846:4;838:6;834:17;830:27;820:122;;861:79;;:::i;:::-;820:122;974:6;961:20;951:30;;1004:18;996:6;993:30;990:117;;;1026:79;;:::i;:::-;990:117;1140:4;1132:6;1128:17;1116:29;;1194:3;1186:4;1178:6;1174:17;1164:8;1160:32;1157:41;1154:128;;;1201:79;;:::i;:::-;1154:128;720:568;;;;;:::o;1294:559::-;1380:6;1388;1437:2;1425:9;1416:7;1412:23;1408:32;1405:119;;;1443:79;;:::i;:::-;1405:119;1591:1;1580:9;1576:17;1563:31;1621:18;1613:6;1610:30;1607:117;;;1643:79;;:::i;:::-;1607:117;1756:80;1828:7;1819:6;1808:9;1804:22;1756:80;:::i;:::-;1738:98;;;;1534:312;1294:559;;;;;:::o;1859:99::-;1911:6;1945:5;1939:12;1929:22;;1859:99;;;:::o;1964:169::-;2048:11;2082:6;2077:3;2070:19;2122:4;2117:3;2113:14;2098:29;;1964:169;;;;:::o;2139:307::-;2207:1;2217:113;2231:6;2228:1;2225:13;2217:113;;;2316:1;2311:3;2307:11;2301:18;2297:1;2292:3;2288:11;2281:39;2253:2;2250:1;2246:10;2241:15;;2217:113;;;2348:6;2345:1;2342:13;2339:101;;;2428:1;2419:6;2414:3;2410:16;2403:27;2339:101;2188:258;2139:307;;;:::o;2452:102::-;2493:6;2544:2;2540:7;2535:2;2528:5;2524:14;2520:28;2510:38;;2452:102;;;:::o;2560:364::-;2648:3;2676:39;2709:5;2676:39;:::i;:::-;2731:71;2795:6;2790:3;2731:71;:::i;:::-;2724:78;;2811:52;2856:6;2851:3;2844:4;2837:5;2833:16;2811:52;:::i;:::-;2888:29;2910:6;2888:29;:::i;:::-;2883:3;2879:39;2872:46;;2652:272;2560:364;;;;:::o;2930:313::-;3043:4;3081:2;3070:9;3066:18;3058:26;;3130:9;3124:4;3120:20;3116:1;3105:9;3101:17;3094:47;3158:78;3231:4;3222:6;3158:78;:::i;:::-;3150:86;;2930:313;;;;:::o;3249:126::-;3286:7;3326:42;3319:5;3315:54;3304:65;;3249:126;;;:::o;3381:96::-;3418:7;3447:24;3465:5;3447:24;:::i;:::-;3436:35;;3381:96;;;:::o;3483:122::-;3556:24;3574:5;3556:24;:::i;:::-;3549:5;3546:35;3536:63;;3595:1;3592;3585:12;3536:63;3483:122;:::o;3611:139::-;3657:5;3695:6;3682:20;3673:29;;3711:33;3738:5;3711:33;:::i;:::-;3611:139;;;;:::o;3756:77::-;3793:7;3822:5;3811:16;;3756:77;;;:::o;3839:122::-;3912:24;3930:5;3912:24;:::i;:::-;3905:5;3902:35;3892:63;;3951:1;3948;3941:12;3892:63;3839:122;:::o;3967:139::-;4013:5;4051:6;4038:20;4029:29;;4067:33;4094:5;4067:33;:::i;:::-;3967:139;;;;:::o;4112:474::-;4180:6;4188;4237:2;4225:9;4216:7;4212:23;4208:32;4205:119;;;4243:79;;:::i;:::-;4205:119;4363:1;4388:53;4433:7;4424:6;4413:9;4409:22;4388:53;:::i;:::-;4378:63;;4334:117;4490:2;4516:53;4561:7;4552:6;4541:9;4537:22;4516:53;:::i;:::-;4506:63;;4461:118;4112:474;;;;;:::o;4592:90::-;4626:7;4669:5;4662:13;4655:21;4644:32;;4592:90;;;:::o;4688:109::-;4769:21;4784:5;4769:21;:::i;:::-;4764:3;4757:34;4688:109;;:::o;4803:210::-;4890:4;4928:2;4917:9;4913:18;4905:26;;4941:65;5003:1;4992:9;4988:17;4979:6;4941:65;:::i;:::-;4803:210;;;;:::o;5019:116::-;5089:21;5104:5;5089:21;:::i;:::-;5082:5;5079:32;5069:60;;5125:1;5122;5115:12;5069:60;5019:116;:::o;5141:133::-;5184:5;5222:6;5209:20;5200:29;;5238:30;5262:5;5238:30;:::i;:::-;5141:133;;;;:::o;5280:323::-;5336:6;5385:2;5373:9;5364:7;5360:23;5356:32;5353:119;;;5391:79;;:::i;:::-;5353:119;5511:1;5536:50;5578:7;5569:6;5558:9;5554:22;5536:50;:::i;:::-;5526:60;;5482:114;5280:323;;;;:::o;5609:118::-;5696:24;5714:5;5696:24;:::i;:::-;5691:3;5684:37;5609:118;;:::o;5733:222::-;5826:4;5864:2;5853:9;5849:18;5841:26;;5877:71;5945:1;5934:9;5930:17;5921:6;5877:71;:::i;:::-;5733:222;;;;:::o;5961:60::-;5989:3;6010:5;6003:12;;5961:60;;;:::o;6027:142::-;6077:9;6110:53;6128:34;6137:24;6155:5;6137:24;:::i;:::-;6128:34;:::i;:::-;6110:53;:::i;:::-;6097:66;;6027:142;;;:::o;6175:126::-;6225:9;6258:37;6289:5;6258:37;:::i;:::-;6245:50;;6175:126;;;:::o;6307:153::-;6384:9;6417:37;6448:5;6417:37;:::i;:::-;6404:50;;6307:153;;;:::o;6466:185::-;6580:64;6638:5;6580:64;:::i;:::-;6575:3;6568:77;6466:185;;:::o;6657:276::-;6777:4;6815:2;6804:9;6800:18;6792:26;;6828:98;6923:1;6912:9;6908:17;6899:6;6828:98;:::i;:::-;6657:276;;;;:::o;6939:619::-;7016:6;7024;7032;7081:2;7069:9;7060:7;7056:23;7052:32;7049:119;;;7087:79;;:::i;:::-;7049:119;7207:1;7232:53;7277:7;7268:6;7257:9;7253:22;7232:53;:::i;:::-;7222:63;;7178:117;7334:2;7360:53;7405:7;7396:6;7385:9;7381:22;7360:53;:::i;:::-;7350:63;;7305:118;7462:2;7488:53;7533:7;7524:6;7513:9;7509:22;7488:53;:::i;:::-;7478:63;;7433:118;6939:619;;;;;:::o;7564:329::-;7623:6;7672:2;7660:9;7651:7;7647:23;7643:32;7640:119;;;7678:79;;:::i;:::-;7640:119;7798:1;7823:53;7868:7;7859:6;7848:9;7844:22;7823:53;:::i;:::-;7813:63;;7769:117;7564:329;;;;:::o;7899:86::-;7934:7;7974:4;7967:5;7963:16;7952:27;;7899:86;;;:::o;7991:112::-;8074:22;8090:5;8074:22;:::i;:::-;8069:3;8062:35;7991:112;;:::o;8109:214::-;8198:4;8236:2;8225:9;8221:18;8213:26;;8249:67;8313:1;8302:9;8298:17;8289:6;8249:67;:::i;:::-;8109:214;;;;:::o;8329:468::-;8394:6;8402;8451:2;8439:9;8430:7;8426:23;8422:32;8419:119;;;8457:79;;:::i;:::-;8419:119;8577:1;8602:53;8647:7;8638:6;8627:9;8623:22;8602:53;:::i;:::-;8592:63;;8548:117;8704:2;8730:50;8772:7;8763:6;8752:9;8748:22;8730:50;:::i;:::-;8720:60;;8675:115;8329:468;;;;;:::o;8803:118::-;8890:24;8908:5;8890:24;:::i;:::-;8885:3;8878:37;8803:118;;:::o;8927:222::-;9020:4;9058:2;9047:9;9043:18;9035:26;;9071:71;9139:1;9128:9;9124:17;9115:6;9071:71;:::i;:::-;8927:222;;;;:::o;9155:329::-;9214:6;9263:2;9251:9;9242:7;9238:23;9234:32;9231:119;;;9269:79;;:::i;:::-;9231:119;9389:1;9414:53;9459:7;9450:6;9439:9;9435:22;9414:53;:::i;:::-;9404:63;;9360:117;9155:329;;;;:::o;9490:619::-;9567:6;9575;9583;9632:2;9620:9;9611:7;9607:23;9603:32;9600:119;;;9638:79;;:::i;:::-;9600:119;9758:1;9783:53;9828:7;9819:6;9808:9;9804:22;9783:53;:::i;:::-;9773:63;;9729:117;9885:2;9911:53;9956:7;9947:6;9936:9;9932:22;9911:53;:::i;:::-;9901:63;;9856:118;10013:2;10039:53;10084:7;10075:6;10064:9;10060:22;10039:53;:::i;:::-;10029:63;;9984:118;9490:619;;;;;:::o;10115:180::-;10163:77;10160:1;10153:88;10260:4;10257:1;10250:15;10284:4;10281:1;10274:15;10301:281;10384:27;10406:4;10384:27;:::i;:::-;10376:6;10372:40;10514:6;10502:10;10499:22;10478:18;10466:10;10463:34;10460:62;10457:88;;;10525:18;;:::i;:::-;10457:88;10565:10;10561:2;10554:22;10344:238;10301:281;;:::o;10588:129::-;10622:6;10649:20;;:::i;:::-;10639:30;;10678:33;10706:4;10698:6;10678:33;:::i;:::-;10588:129;;;:::o;10723:311::-;10800:4;10890:18;10882:6;10879:30;10876:56;;;10912:18;;:::i;:::-;10876:56;10962:4;10954:6;10950:17;10942:25;;11022:4;11016;11012:15;11004:23;;10723:311;;;:::o;11057:710::-;11153:5;11178:81;11194:64;11251:6;11194:64;:::i;:::-;11178:81;:::i;:::-;11169:90;;11279:5;11308:6;11301:5;11294:21;11342:4;11335:5;11331:16;11324:23;;11395:4;11387:6;11383:17;11375:6;11371:30;11424:3;11416:6;11413:15;11410:122;;;11443:79;;:::i;:::-;11410:122;11558:6;11541:220;11575:6;11570:3;11567:15;11541:220;;;11650:3;11679:37;11712:3;11700:10;11679:37;:::i;:::-;11674:3;11667:50;11746:4;11741:3;11737:14;11730:21;;11617:144;11601:4;11596:3;11592:14;11585:21;;11541:220;;;11545:21;11159:608;;11057:710;;;;;:::o;11790:370::-;11861:5;11910:3;11903:4;11895:6;11891:17;11887:27;11877:122;;11918:79;;:::i;:::-;11877:122;12035:6;12022:20;12060:94;12150:3;12142:6;12135:4;12127:6;12123:17;12060:94;:::i;:::-;12051:103;;11867:293;11790:370;;;;:::o;12166:539::-;12250:6;12299:2;12287:9;12278:7;12274:23;12270:32;12267:119;;;12305:79;;:::i;:::-;12267:119;12453:1;12442:9;12438:17;12425:31;12483:18;12475:6;12472:30;12469:117;;;12505:79;;:::i;:::-;12469:117;12610:78;12680:7;12671:6;12660:9;12656:22;12610:78;:::i;:::-;12600:88;;12396:302;12166:539;;;;:::o;12711:1203::-;12824:6;12832;12840;12848;12856;12864;12872;12921:3;12909:9;12900:7;12896:23;12892:33;12889:120;;;12928:79;;:::i;:::-;12889:120;13048:1;13073:53;13118:7;13109:6;13098:9;13094:22;13073:53;:::i;:::-;13063:63;;13019:117;13175:2;13201:53;13246:7;13237:6;13226:9;13222:22;13201:53;:::i;:::-;13191:63;;13146:118;13303:2;13329:53;13374:7;13365:6;13354:9;13350:22;13329:53;:::i;:::-;13319:63;;13274:118;13431:2;13457:53;13502:7;13493:6;13482:9;13478:22;13457:53;:::i;:::-;13447:63;;13402:118;13559:3;13586:53;13631:7;13622:6;13611:9;13607:22;13586:53;:::i;:::-;13576:63;;13530:119;13688:3;13715:53;13760:7;13751:6;13740:9;13736:22;13715:53;:::i;:::-;13705:63;;13659:119;13817:3;13844:53;13889:7;13880:6;13869:9;13865:22;13844:53;:::i;:::-;13834:63;;13788:119;12711:1203;;;;;;;;;;:::o;13937:568::-;14010:8;14020:6;14070:3;14063:4;14055:6;14051:17;14047:27;14037:122;;14078:79;;:::i;:::-;14037:122;14191:6;14178:20;14168:30;;14221:18;14213:6;14210:30;14207:117;;;14243:79;;:::i;:::-;14207:117;14357:4;14349:6;14345:17;14333:29;;14411:3;14403:4;14395:6;14391:17;14381:8;14377:32;14374:41;14371:128;;;14418:79;;:::i;:::-;14371:128;13937:568;;;;;:::o;14511:934::-;14633:6;14641;14649;14657;14706:2;14694:9;14685:7;14681:23;14677:32;14674:119;;;14712:79;;:::i;:::-;14674:119;14860:1;14849:9;14845:17;14832:31;14890:18;14882:6;14879:30;14876:117;;;14912:79;;:::i;:::-;14876:117;15025:80;15097:7;15088:6;15077:9;15073:22;15025:80;:::i;:::-;15007:98;;;;14803:312;15182:2;15171:9;15167:18;15154:32;15213:18;15205:6;15202:30;15199:117;;;15235:79;;:::i;:::-;15199:117;15348:80;15420:7;15411:6;15400:9;15396:22;15348:80;:::i;:::-;15330:98;;;;15125:313;14511:934;;;;;;;:::o;15451:474::-;15519:6;15527;15576:2;15564:9;15555:7;15551:23;15547:32;15544:119;;;15582:79;;:::i;:::-;15544:119;15702:1;15727:53;15772:7;15763:6;15752:9;15748:22;15727:53;:::i;:::-;15717:63;;15673:117;15829:2;15855:53;15900:7;15891:6;15880:9;15876:22;15855:53;:::i;:::-;15845:63;;15800:118;15451:474;;;;;:::o;15931:182::-;16071:34;16067:1;16059:6;16055:14;16048:58;15931:182;:::o;16119:366::-;16261:3;16282:67;16346:2;16341:3;16282:67;:::i;:::-;16275:74;;16358:93;16447:3;16358:93;:::i;:::-;16476:2;16471:3;16467:12;16460:19;;16119:366;;;:::o;16491:419::-;16657:4;16695:2;16684:9;16680:18;16672:26;;16744:9;16738:4;16734:20;16730:1;16719:9;16715:17;16708:47;16772:131;16898:4;16772:131;:::i;:::-;16764:139;;16491:419;;;:::o;16916:180::-;16964:77;16961:1;16954:88;17061:4;17058:1;17051:15;17085:4;17082:1;17075:15;17102:320;17146:6;17183:1;17177:4;17173:12;17163:22;;17230:1;17224:4;17220:12;17251:18;17241:81;;17307:4;17299:6;17295:17;17285:27;;17241:81;17369:2;17361:6;17358:14;17338:18;17335:38;17332:84;;;17388:18;;:::i;:::-;17332:84;17153:269;17102:320;;;:::o;17428:229::-;17568:34;17564:1;17556:6;17552:14;17545:58;17637:12;17632:2;17624:6;17620:15;17613:37;17428:229;:::o;17663:366::-;17805:3;17826:67;17890:2;17885:3;17826:67;:::i;:::-;17819:74;;17902:93;17991:3;17902:93;:::i;:::-;18020:2;18015:3;18011:12;18004:19;;17663:366;;;:::o;18035:419::-;18201:4;18239:2;18228:9;18224:18;18216:26;;18288:9;18282:4;18278:20;18274:1;18263:9;18259:17;18252:47;18316:131;18442:4;18316:131;:::i;:::-;18308:139;;18035:419;;;:::o;18460:231::-;18600:34;18596:1;18588:6;18584:14;18577:58;18669:14;18664:2;18656:6;18652:15;18645:39;18460:231;:::o;18697:366::-;18839:3;18860:67;18924:2;18919:3;18860:67;:::i;:::-;18853:74;;18936:93;19025:3;18936:93;:::i;:::-;19054:2;19049:3;19045:12;19038:19;;18697:366;;;:::o;19069:419::-;19235:4;19273:2;19262:9;19258:18;19250:26;;19322:9;19316:4;19312:20;19308:1;19297:9;19293:17;19286:47;19350:131;19476:4;19350:131;:::i;:::-;19342:139;;19069:419;;;:::o;19494:181::-;19634:33;19630:1;19622:6;19618:14;19611:57;19494:181;:::o;19681:366::-;19823:3;19844:67;19908:2;19903:3;19844:67;:::i;:::-;19837:74;;19920:93;20009:3;19920:93;:::i;:::-;20038:2;20033:3;20029:12;20022:19;;19681:366;;;:::o;20053:419::-;20219:4;20257:2;20246:9;20242:18;20234:26;;20306:9;20300:4;20296:20;20292:1;20281:9;20277:17;20270:47;20334:131;20460:4;20334:131;:::i;:::-;20326:139;;20053:419;;;:::o;20478:179::-;20618:31;20614:1;20606:6;20602:14;20595:55;20478:179;:::o;20663:366::-;20805:3;20826:67;20890:2;20885:3;20826:67;:::i;:::-;20819:74;;20902:93;20991:3;20902:93;:::i;:::-;21020:2;21015:3;21011:12;21004:19;;20663:366;;;:::o;21035:419::-;21201:4;21239:2;21228:9;21224:18;21216:26;;21288:9;21282:4;21278:20;21274:1;21263:9;21259:17;21252:47;21316:131;21442:4;21316:131;:::i;:::-;21308:139;;21035:419;;;:::o;21460:180::-;21508:77;21505:1;21498:88;21605:4;21602:1;21595:15;21629:4;21626:1;21619:15;21646:348;21686:7;21709:20;21727:1;21709:20;:::i;:::-;21704:25;;21743:20;21761:1;21743:20;:::i;:::-;21738:25;;21931:1;21863:66;21859:74;21856:1;21853:81;21848:1;21841:9;21834:17;21830:105;21827:131;;;21938:18;;:::i;:::-;21827:131;21986:1;21983;21979:9;21968:20;;21646:348;;;;:::o;22000:173::-;22140:25;22136:1;22128:6;22124:14;22117:49;22000:173;:::o;22179:366::-;22321:3;22342:67;22406:2;22401:3;22342:67;:::i;:::-;22335:74;;22418:93;22507:3;22418:93;:::i;:::-;22536:2;22531:3;22527:12;22520:19;;22179:366;;;:::o;22551:419::-;22717:4;22755:2;22744:9;22740:18;22732:26;;22804:9;22798:4;22794:20;22790:1;22779:9;22775:17;22768:47;22832:131;22958:4;22832:131;:::i;:::-;22824:139;;22551:419;;;:::o;22976:180::-;23024:77;23021:1;23014:88;23121:4;23118:1;23111:15;23145:4;23142:1;23135:15;23162:305;23202:3;23221:20;23239:1;23221:20;:::i;:::-;23216:25;;23255:20;23273:1;23255:20;:::i;:::-;23250:25;;23409:1;23341:66;23337:74;23334:1;23331:81;23328:107;;;23415:18;;:::i;:::-;23328:107;23459:1;23456;23452:9;23445:16;;23162:305;;;;:::o;23473:225::-;23613:34;23609:1;23601:6;23597:14;23590:58;23682:8;23677:2;23669:6;23665:15;23658:33;23473:225;:::o;23704:366::-;23846:3;23867:67;23931:2;23926:3;23867:67;:::i;:::-;23860:74;;23943:93;24032:3;23943:93;:::i;:::-;24061:2;24056:3;24052:12;24045:19;;23704:366;;;:::o;24076:419::-;24242:4;24280:2;24269:9;24265:18;24257:26;;24329:9;24323:4;24319:20;24315:1;24304:9;24300:17;24293:47;24357:131;24483:4;24357:131;:::i;:::-;24349:139;;24076:419;;;:::o;24501:233::-;24540:3;24563:24;24581:5;24563:24;:::i;:::-;24554:33;;24609:66;24602:5;24599:77;24596:103;;;24679:18;;:::i;:::-;24596:103;24726:1;24719:5;24715:13;24708:20;;24501:233;;;:::o;24740:223::-;24880:34;24876:1;24868:6;24864:14;24857:58;24949:6;24944:2;24936:6;24932:15;24925:31;24740:223;:::o;24969:366::-;25111:3;25132:67;25196:2;25191:3;25132:67;:::i;:::-;25125:74;;25208:93;25297:3;25208:93;:::i;:::-;25326:2;25321:3;25317:12;25310:19;;24969:366;;;:::o;25341:419::-;25507:4;25545:2;25534:9;25530:18;25522:26;;25594:9;25588:4;25584:20;25580:1;25569:9;25565:17;25558:47;25622:131;25748:4;25622:131;:::i;:::-;25614:139;;25341:419;;;:::o;25766:221::-;25906:34;25902:1;25894:6;25890:14;25883:58;25975:4;25970:2;25962:6;25958:15;25951:29;25766:221;:::o;25993:366::-;26135:3;26156:67;26220:2;26215:3;26156:67;:::i;:::-;26149:74;;26232:93;26321:3;26232:93;:::i;:::-;26350:2;26345:3;26341:12;26334:19;;25993:366;;;:::o;26365:419::-;26531:4;26569:2;26558:9;26554:18;26546:26;;26618:9;26612:4;26608:20;26604:1;26593:9;26589:17;26582:47;26646:131;26772:4;26646:131;:::i;:::-;26638:139;;26365:419;;;:::o;26790:224::-;26930:34;26926:1;26918:6;26914:14;26907:58;26999:7;26994:2;26986:6;26982:15;26975:32;26790:224;:::o;27020:366::-;27162:3;27183:67;27247:2;27242:3;27183:67;:::i;:::-;27176:74;;27259:93;27348:3;27259:93;:::i;:::-;27377:2;27372:3;27368:12;27361:19;;27020:366;;;:::o;27392:419::-;27558:4;27596:2;27585:9;27581:18;27573:26;;27645:9;27639:4;27635:20;27631:1;27620:9;27616:17;27609:47;27673:131;27799:4;27673:131;:::i;:::-;27665:139;;27392:419;;;:::o;27817:222::-;27957:34;27953:1;27945:6;27941:14;27934:58;28026:5;28021:2;28013:6;28009:15;28002:30;27817:222;:::o;28045:366::-;28187:3;28208:67;28272:2;28267:3;28208:67;:::i;:::-;28201:74;;28284:93;28373:3;28284:93;:::i;:::-;28402:2;28397:3;28393:12;28386:19;;28045:366;;;:::o;28417:419::-;28583:4;28621:2;28610:9;28606:18;28598:26;;28670:9;28664:4;28660:20;28656:1;28645:9;28641:17;28634:47;28698:131;28824:4;28698:131;:::i;:::-;28690:139;;28417:419;;;:::o;28842:228::-;28982:34;28978:1;28970:6;28966:14;28959:58;29051:11;29046:2;29038:6;29034:15;29027:36;28842:228;:::o;29076:366::-;29218:3;29239:67;29303:2;29298:3;29239:67;:::i;:::-;29232:74;;29315:93;29404:3;29315:93;:::i;:::-;29433:2;29428:3;29424:12;29417:19;;29076:366;;;:::o;29448:419::-;29614:4;29652:2;29641:9;29637:18;29629:26;;29701:9;29695:4;29691:20;29687:1;29676:9;29672:17;29665:47;29729:131;29855:4;29729:131;:::i;:::-;29721:139;;29448:419;;;:::o;29873:227::-;30013:34;30009:1;30001:6;29997:14;29990:58;30082:10;30077:2;30069:6;30065:15;30058:35;29873:227;:::o;30106:366::-;30248:3;30269:67;30333:2;30328:3;30269:67;:::i;:::-;30262:74;;30345:93;30434:3;30345:93;:::i;:::-;30463:2;30458:3;30454:12;30447:19;;30106:366;;;:::o;30478:419::-;30644:4;30682:2;30671:9;30667:18;30659:26;;30731:9;30725:4;30721:20;30717:1;30706:9;30702:17;30695:47;30759:131;30885:4;30759:131;:::i;:::-;30751:139;;30478:419;;;:::o;30903:234::-;31043:34;31039:1;31031:6;31027:14;31020:58;31112:17;31107:2;31099:6;31095:15;31088:42;30903:234;:::o;31143:366::-;31285:3;31306:67;31370:2;31365:3;31306:67;:::i;:::-;31299:74;;31382:93;31471:3;31382:93;:::i;:::-;31500:2;31495:3;31491:12;31484:19;;31143:366;;;:::o;31515:419::-;31681:4;31719:2;31708:9;31704:18;31696:26;;31768:9;31762:4;31758:20;31754:1;31743:9;31739:17;31732:47;31796:131;31922:4;31796:131;:::i;:::-;31788:139;;31515:419;;;:::o;31940:191::-;31980:4;32000:20;32018:1;32000:20;:::i;:::-;31995:25;;32034:20;32052:1;32034:20;:::i;:::-;32029:25;;32073:1;32070;32067:8;32064:34;;;32078:18;;:::i;:::-;32064:34;32123:1;32120;32116:9;32108:17;;31940:191;;;;:::o;32137:177::-;32277:29;32273:1;32265:6;32261:14;32254:53;32137:177;:::o;32320:366::-;32462:3;32483:67;32547:2;32542:3;32483:67;:::i;:::-;32476:74;;32559:93;32648:3;32559:93;:::i;:::-;32677:2;32672:3;32668:12;32661:19;;32320:366;;;:::o;32692:419::-;32858:4;32896:2;32885:9;32881:18;32873:26;;32945:9;32939:4;32935:20;32931:1;32920:9;32916:17;32909:47;32973:131;33099:4;32973:131;:::i;:::-;32965:139;;32692:419;;;:::o;33117:180::-;33165:77;33162:1;33155:88;33262:4;33259:1;33252:15;33286:4;33283:1;33276:15;33303:185;33343:1;33360:20;33378:1;33360:20;:::i;:::-;33355:25;;33394:20;33412:1;33394:20;:::i;:::-;33389:25;;33433:1;33423:35;;33438:18;;:::i;:::-;33423:35;33480:1;33477;33473:9;33468:14;;33303:185;;;;:::o;33494:220::-;33634:34;33630:1;33622:6;33618:14;33611:58;33703:3;33698:2;33690:6;33686:15;33679:28;33494:220;:::o;33720:366::-;33862:3;33883:67;33947:2;33942:3;33883:67;:::i;:::-;33876:74;;33959:93;34048:3;33959:93;:::i;:::-;34077:2;34072:3;34068:12;34061:19;;33720:366;;;:::o;34092:419::-;34258:4;34296:2;34285:9;34281:18;34273:26;;34345:9;34339:4;34335:20;34331:1;34320:9;34316:17;34309:47;34373:131;34499:4;34373:131;:::i;:::-;34365:139;;34092:419;;;:::o;34517:442::-;34666:4;34704:2;34693:9;34689:18;34681:26;;34717:71;34785:1;34774:9;34770:17;34761:6;34717:71;:::i;:::-;34798:72;34866:2;34855:9;34851:18;34842:6;34798:72;:::i;:::-;34880;34948:2;34937:9;34933:18;34924:6;34880:72;:::i;:::-;34517:442;;;;;;:::o;34965:143::-;35022:5;35053:6;35047:13;35038:22;;35069:33;35096:5;35069:33;:::i;:::-;34965:143;;;;:::o;35114:351::-;35184:6;35233:2;35221:9;35212:7;35208:23;35204:32;35201:119;;;35239:79;;:::i;:::-;35201:119;35359:1;35384:64;35440:7;35431:6;35420:9;35416:22;35384:64;:::i;:::-;35374:74;;35330:128;35114:351;;;;:::o;35471:85::-;35516:7;35545:5;35534:16;;35471:85;;;:::o;35562:158::-;35620:9;35653:61;35671:42;35680:32;35706:5;35680:32;:::i;:::-;35671:42;:::i;:::-;35653:61;:::i;:::-;35640:74;;35562:158;;;:::o;35726:147::-;35821:45;35860:5;35821:45;:::i;:::-;35816:3;35809:58;35726:147;;:::o;35879:114::-;35946:6;35980:5;35974:12;35964:22;;35879:114;;;:::o;35999:184::-;36098:11;36132:6;36127:3;36120:19;36172:4;36167:3;36163:14;36148:29;;35999:184;;;;:::o;36189:132::-;36256:4;36279:3;36271:11;;36309:4;36304:3;36300:14;36292:22;;36189:132;;;:::o;36327:108::-;36404:24;36422:5;36404:24;:::i;:::-;36399:3;36392:37;36327:108;;:::o;36441:179::-;36510:10;36531:46;36573:3;36565:6;36531:46;:::i;:::-;36609:4;36604:3;36600:14;36586:28;;36441:179;;;;:::o;36626:113::-;36696:4;36728;36723:3;36719:14;36711:22;;36626:113;;;:::o;36775:732::-;36894:3;36923:54;36971:5;36923:54;:::i;:::-;36993:86;37072:6;37067:3;36993:86;:::i;:::-;36986:93;;37103:56;37153:5;37103:56;:::i;:::-;37182:7;37213:1;37198:284;37223:6;37220:1;37217:13;37198:284;;;37299:6;37293:13;37326:63;37385:3;37370:13;37326:63;:::i;:::-;37319:70;;37412:60;37465:6;37412:60;:::i;:::-;37402:70;;37258:224;37245:1;37242;37238:9;37233:14;;37198:284;;;37202:14;37498:3;37491:10;;36899:608;;;36775:732;;;;:::o;37513:831::-;37776:4;37814:3;37803:9;37799:19;37791:27;;37828:71;37896:1;37885:9;37881:17;37872:6;37828:71;:::i;:::-;37909:80;37985:2;37974:9;37970:18;37961:6;37909:80;:::i;:::-;38036:9;38030:4;38026:20;38021:2;38010:9;38006:18;37999:48;38064:108;38167:4;38158:6;38064:108;:::i;:::-;38056:116;;38182:72;38250:2;38239:9;38235:18;38226:6;38182:72;:::i;:::-;38264:73;38332:3;38321:9;38317:19;38308:6;38264:73;:::i;:::-;37513:831;;;;;;;;:::o;38350:807::-;38599:4;38637:3;38626:9;38622:19;38614:27;;38651:71;38719:1;38708:9;38704:17;38695:6;38651:71;:::i;:::-;38732:72;38800:2;38789:9;38785:18;38776:6;38732:72;:::i;:::-;38814:80;38890:2;38879:9;38875:18;38866:6;38814:80;:::i;:::-;38904;38980:2;38969:9;38965:18;38956:6;38904:80;:::i;:::-;38994:73;39062:3;39051:9;39047:19;39038:6;38994:73;:::i;:::-;39077;39145:3;39134:9;39130:19;39121:6;39077:73;:::i;:::-;38350:807;;;;;;;;;:::o;39163:143::-;39220:5;39251:6;39245:13;39236:22;;39267:33;39294:5;39267:33;:::i;:::-;39163:143;;;;:::o;39312:663::-;39400:6;39408;39416;39465:2;39453:9;39444:7;39440:23;39436:32;39433:119;;;39471:79;;:::i;:::-;39433:119;39591:1;39616:64;39672:7;39663:6;39652:9;39648:22;39616:64;:::i;:::-;39606:74;;39562:128;39729:2;39755:64;39811:7;39802:6;39791:9;39787:22;39755:64;:::i;:::-;39745:74;;39700:129;39868:2;39894:64;39950:7;39941:6;39930:9;39926:22;39894:64;:::i;:::-;39884:74;;39839:129;39312:663;;;;;:::o

Swarm Source

ipfs://873d8f6a5e1da6451e7782321ddf806ef4d592267ab4f6c0af555cf20417f4b1
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.